You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@calcite.apache.org by "Julian Hyde (Jira)" <ji...@apache.org> on 2020/08/19 21:49:00 UTC
[jira] [Commented] (CALCITE-4177) Throw exception when deserialize
SqlOperator fails, do not return null
[ https://issues.apache.org/jira/browse/CALCITE-4177?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17180836#comment-17180836 ]
Julian Hyde commented on CALCITE-4177:
--------------------------------------
The error message should make it clear that the problem occurred during JSON deserialization.
RelWriterTest should have a bunch of such tests, but that's beyond the scope of this bug.
> 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
> Assignee: Wang Yanlin
> Priority: Minor
> Labels: pull-request-available
> Time Spent: 1h 20m
> 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)