[ https://issues.apache.org/jira/browse/CALCITE-4177?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Julian Hyde updated CALCITE-4177: --------------------------------- Summary: RelJson should throw if asked to deserialize a call to an unknown operator (was: Throw exception when deserialize SqlOperator fails, do not return null) > RelJson should throw if asked to deserialize a call to an unknown operator > -------------------------------------------------------------------------- > > Key: CALCITE-4177 > URL: https://issues.apache.org/jira/browse/CALCITE-4177 > Project: Calcite > Issue Type: Improvement > Reporter: Wang Yanlin > Assignee: Wang Yanlin > Priority: Minor > Labels: pull-request-available > Fix For: 1.28.0 > > Time Spent: 4h 10m > Remaining Estimate: 0h > > Currently, when deserialize a RexNode fails, calcite returns a null value, > causing NPE in somewhere else. So we cannot get any information about the > SqlOperator in the stacktrace. This makes it hard to determine the reason > when deserialize a very long json string. > {noformat} > Caused by: java.lang.NullPointerException > at java.util.Objects.requireNonNull(Objects.java:203) > at > org.apache.calcite.rel.core.AggregateCall.<init>(AggregateCall.java:98) > at > org.apache.calcite.rel.core.AggregateCall.create(AggregateCall.java:198) > at > org.apache.calcite.rel.externalize.RelJsonReader.toAggCall(RelJsonReader.java:289) > at > org.apache.calcite.rel.externalize.RelJsonReader.access$500(RelJsonReader.java:59) > at > org.apache.calcite.rel.externalize.RelJsonReader$2.getAggregateCalls(RelJsonReader.java:172) > at org.apache.calcite.rel.core.Aggregate.<init>(Aggregate.java:220) > at > org.apache.calcite.rel.logical.LogicalAggregate.<init>(LogicalAggregate.java:105) > at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) > at > sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) > at > sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) > at java.lang.reflect.Constructor.newInstance(Constructor.java:423) > at > org.apache.calcite.rel.externalize.RelJsonReader.readRel(RelJsonReader.java:264) > at > org.apache.calcite.rel.externalize.RelJsonReader.readRels(RelJsonReader.java:91) > at > org.apache.calcite.rel.externalize.RelJsonReader.read(RelJsonReader.java:85) > at > org.apache.calcite.plan.RelWriterTest.lambda$deserializeAndDumpToTextFormat$6(RelWriterTest.java:894) > at > org.apache.calcite.tools.Frameworks.lambda$withPlanner$0(Frameworks.java:131) > at > org.apache.calcite.prepare.CalcitePrepareImpl.perform(CalcitePrepareImpl.java:914) > at org.apache.calcite.tools.Frameworks.withPrepare(Frameworks.java:180) > ... 67 more > {noformat} > Maybe it's better to throw exception instead of return null, adding the name, > kind, and syntax in the error message -- This message was sent by Atlassian Jira (v8.3.4#803005)