Uploaded image for project: 'Apache AsterixDB'
  1. Apache AsterixDB
  2. ASTERIXDB-2446

Improve exception thrown for duplicate column names in SELECT clause

    XMLWordPrintableJSON

Details

    • Improvement
    • Status: Resolved
    • Minor
    • Resolution: Fixed
    • None
    • None
    • COMP - Compiler
    • None

    Description

      The error message thrown when there're duplicate column names in the select clause is confusing. It's IllegalStateException inside HyracksDataException

      Query: select t as a, 2 as a from range(1,10) t

      Exception:

      org.apache.hyracks.api.exceptions.HyracksDataException: java.lang.IllegalStateException: ASX0013: Duplicate field name "a"
      at org.apache.hyracks.api.exceptions.HyracksDataException.create(HyracksDataException.java:51) ~[classes/:?]
      at org.apache.hyracks.algebricks.runtime.operators.base.AbstractOneInputOneOutputOneFramePushRuntime.close(AbstractOneInputOneOutputOneFramePushRuntime.java:68) ~[classes/:?]
      at org.apache.hyracks.api.dataflow.EnforceFrameWriter.close(EnforceFrameWriter.java:113) ~[classes/:?]
      at org.apache.hyracks.api.util.CleanupUtils.close(CleanupUtils.java:66) ~[classes/:?]
      at org.apache.hyracks.algebricks.runtime.operators.base.AbstractOneInputOneOutputOneFramePushRuntime.close(AbstractOneInputOneOutputOneFramePushRuntime.java:65) ~[classes/:?]
      at org.apache.hyracks.algebricks.runtime.operators.std.StreamLimitRuntimeFactory$1.close(StreamLimitRuntimeFactory.java:131) ~[classes/:?]
      at org.apache.hyracks.api.dataflow.EnforceFrameWriter.close(EnforceFrameWriter.java:113) ~[classes/:?]
      at org.apache.hyracks.algebricks.runtime.operators.std.EmptyTupleSourceRuntimeFactory$1.close(EmptyTupleSourceRuntimeFactory.java:61) ~[classes/:?]
      at org.apache.hyracks.api.dataflow.EnforceFrameWriter.close(EnforceFrameWriter.java:113) ~[classes/:?]
      at org.apache.hyracks.algebricks.runtime.operators.meta.AlgebricksMetaOperatorDescriptor$SourcePushRuntime.initialize(AlgebricksMetaOperatorDescriptor.java:111) ~[classes/:?]
      at org.apache.hyracks.api.rewriter.runtime.SuperActivityOperatorNodePushable.lambda$runInParallel$0(SuperActivityOperatorNodePushable.java:212) ~[classes/:?]
      at java.util.concurrent.FutureTask.run(FutureTask.java:266) [?:1.8.0_161]
      at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) [?:1.8.0_161]
      at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) [?:1.8.0_161]
      at java.lang.Thread.run(Thread.java:748) [?:1.8.0_161]
      Caused by: java.lang.IllegalStateException: ASX0013: Duplicate field name "a"
      at org.apache.asterix.om.types.runtime.RuntimeRecordTypeInfo.reset(RuntimeRecordTypeInfo.java:108) ~[classes/:?]
      at org.apache.asterix.builders.RecordBuilder.reset(RecordBuilder.java:113) ~[classes/:?]
      at org.apache.asterix.runtime.evaluators.common.ClosedRecordConstructorEvalFactory$ClosedRecordConstructorEval.evaluate(ClosedRecordConstructorEvalFactory.java:77) ~[classes/:?]
      at org.apache.hyracks.algebricks.runtime.operators.std.AssignRuntimeFactory$1.produceTuple(AssignRuntimeFactory.java:159) ~[classes/:?]
      at org.apache.hyracks.algebricks.runtime.operators.std.AssignRuntimeFactory$1.nextFrame(AssignRuntimeFactory.java:128) ~[classes/:?]
      at org.apache.hyracks.api.dataflow.EnforceFrameWriter.nextFrame(EnforceFrameWriter.java:76) ~[classes/:?]
      at org.apache.hyracks.dataflow.common.comm.io.AbstractFrameAppender.write(AbstractFrameAppender.java:93) ~[classes/:?]
      at org.apache.hyracks.algebricks.runtime.operators.base.AbstractOneInputOneOutputOneFramePushRuntime.flushAndReset(AbstractOneInputOneOutputOneFramePushRuntime.java:74) ~[classes/:?]
      at org.apache.hyracks.algebricks.runtime.operators.base.AbstractOneInputOneOutputOneFramePushRuntime.flushIfNotFailed(AbstractOneInputOneOutputOneFramePushRuntime.java:80) ~[classes/:?]
      at org.apache.hyracks.algebricks.runtime.operators.base.AbstractOneInputOneOutputOneFramePushRuntime.close(AbstractOneInputOneOutputOneFramePushRuntime.java:60) ~[classes/:?]
      ... 13 more
      Caused by: org.apache.asterix.common.exceptions.RuntimeDataException: ASX0013: Duplicate field name "a"
      at org.apache.asterix.om.types.runtime.RuntimeRecordTypeInfo.reset(RuntimeRecordTypeInfo.java:104) ~[classes/:?]
      at org.apache.asterix.builders.RecordBuilder.reset(RecordBuilder.java:113) ~[classes/:?]

      Attachments

        Activity

          People

            dlychagin-cb Dmitry Lychagin
            dlychagin-cb Dmitry Lychagin
            Votes:
            0 Vote for this issue
            Watchers:
            2 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved: