Wang Yanlin created CALCITE-4177:
------------------------------------
Summary: Throw exception when deserialize SqlOperator fails, do
not return null
Key: CALCITE-4177
URL: https://issues.apache.org/jira/browse/CALCITE-4177
Project: Calcite
Issue Type: Improvement
Reporter: Wang Yanlin
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 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.
--
This message was sent by Atlassian Jira
(v8.3.4#803005)