git.net

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [v1.15] A NPE that looks inevitable !


Hi Gelbana,

I haven't looked at your snippet but if you want to debug into generated
code have a look at the following link:
https://calcite.apache.org/docs/howto.html#debugging-generated-classes-in-intellij

Best,
Stamatis

2018-04-21 14:07 GMT+02:00 Muhammad Gelbana <m.gelbana@xxxxxxxxx>:

> I'm trying to create the test case for this issue but I can't run a simple
> query as a start.
>
> I'm facing the following exception
>
> java.sql.SQLException: exception while executing query: null
>
>     at org.apache.calcite.avatica.Helper.createException(Helper.java:56)
>     at org.apache.calcite.avatica.Helper.createException(Helper.java:41)
>     at
> org.apache.calcite.avatica.AvaticaConnection.executeQueryInternal(
> AvaticaConnection.java:540)
>     at
> org.apache.calcite.avatica.AvaticaPreparedStatement.executeQuery(
> AvaticaPreparedStatement.java:133)
>     at
> org.apache.calcite.tools.FrameworksTest.aggNPE(FrameworksTest.java:184)
>     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
>     at
> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:
> 62)
>     at
> sun.reflect.DelegatingMethodAccessorImpl.invoke(
> DelegatingMethodAccessorImpl.java:43)
>     at java.lang.reflect.Method.invoke(Method.java:498)
>     at
> org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(
> FrameworkMethod.java:50)
>     at
> org.junit.internal.runners.model.ReflectiveCallable.run(
> ReflectiveCallable.java:12)
>     at
> org.junit.runners.model.FrameworkMethod.invokeExplosively(
> FrameworkMethod.java:47)
>     at
> org.junit.internal.runners.statements.InvokeMethod.
> evaluate(InvokeMethod.java:17)
>     at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)
>     at
> org.junit.runners.BlockJUnit4ClassRunner.runChild(
> BlockJUnit4ClassRunner.java:78)
>     at
> org.junit.runners.BlockJUnit4ClassRunner.runChild(
> BlockJUnit4ClassRunner.java:57)
>     at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
>     at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
>     at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
>     at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
>     at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
>     at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
>     at org.junit.runner.JUnitCore.run(JUnitCore.java:137)
>     at
> com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(
> JUnit4IdeaTestRunner.java:68)
>     at
> com.intellij.rt.execution.junit.IdeaTestRunner$Repeater.
> startRunnerWithArgs(IdeaTestRunner.java:47)
>     at
> com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(
> JUnitStarter.java:242)
>     at
> com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:70)
>
> *Caused by: java.lang.NullPointerException    at Baz.bind(Unknown Source)*
>     at
> org.apache.calcite.adapter.enumerable.EnumerableBindable.
> bind(EnumerableBindable.java:70)
>     at
> org.apache.calcite.jdbc.CalcitePrepare$CalciteSignature.enumerable(
> CalcitePrepare.java:365)
>     at
> org.apache.calcite.jdbc.CalciteConnectionImpl.enumerable(
> CalciteConnectionImpl.java:301)
>     at
> org.apache.calcite.jdbc.CalciteMetaImpl._createIterable(
> CalciteMetaImpl.java:559)
>     at
> org.apache.calcite.jdbc.CalciteMetaImpl.createIterable(
> CalciteMetaImpl.java:550)
>     at
> org.apache.calcite.avatica.AvaticaResultSet.execute(
> AvaticaResultSet.java:172)
>     at
> org.apache.calcite.jdbc.CalciteResultSet.execute(CalciteResultSet.java:67)
>     at
> org.apache.calcite.jdbc.CalciteResultSet.execute(CalciteResultSet.java:44)
>     at
> org.apache.calcite.avatica.AvaticaConnection.executeQueryInternal(
> AvaticaConnection.java:536)
>     ... 24 more
>
> This is the test case I'm working on
>
> @Test
> public void aggNPE() throws SqlParseException, ValidationException,
> RelConversionException, SQLException {
>   Function<Holder, Object> hook = (o1) -> {
>     o1.set(true);
>     return null;
>   };
>   Hook.ENABLE_BINDABLE.add(hook);
>
>   SchemaPlus rootSchema = Frameworks.createRootSchema(true);
>   final FrameworkConfig config = Frameworks.newConfigBuilder()
>           .defaultSchema(CalciteAssert.addSchema(rootSchema,
> CalciteAssert.SchemaSpec.JDBC_FOODMART))
>           .ruleSets(RuleSets.ofList(Bindables.RULES))
>           .build();
>
>   Planner planner = Frameworks.getPlanner(config);
>   SqlNode parsed = planner.parse("SELECT * FROM \"sales_fact_1997\"");
>   SqlNode validated = planner.validate(parsed);
>   RelRoot rel = planner.rel(validated);
>
>   PreparedStatement statement = RelRunners.run(rel.rel);
>   ResultSet rs = statement.executeQuery();
>
>   rs.close();
>   statement.close();
> }
>
> I'm trying to be as close as possible to what I have in my schema so I
> enabled the bindable convention and enabled the bindables rules. What am I
> doing wrong here to cause this NPE ?
> I can't debug into the *Baz* class to figure out what's going on as the
> class seems to be generated at runtime or something.
>
>
> Thanks,
> Gelbana
>
> On Thu, Mar 29, 2018 at 1:34 AM, Muhammad Gelbana <m.gelbana@xxxxxxxxx>
> wrote:
>
> > With pleasure. I'll do that ASAP.
> >
> > Thanks,
> > Gelbana
> >
> > On Thu, Mar 29, 2018 at 12:38 AM, Shuyi Chen <suez1224@xxxxxxxxx> wrote:
> >
> >> It will be great if you can provide a test to reproduce the problem, and
> >> attach it in the JIRA.
> >>
> >> On Wed, Mar 28, 2018 at 2:50 PM, Muhammad Gelbana <m.gelbana@xxxxxxxxx>
> >> wrote:
> >>
> >> > Absolutely: https://issues.apache.org/jira/browse/CALCITE-2228
> >> >
> >> > Please tell me if I should modify any of the information I supplied.
> >> Like
> >> > the affected version\component.
> >> >
> >> > Thanks,
> >> > Gelbana
> >> >
> >> > On Wed, Mar 28, 2018 at 11:26 PM, Julian Hyde <jhyde@xxxxxxxxxx>
> wrote:
> >> >
> >> > > It does indeed look as if that piece of code (AggregateNode.java
> line
> >> > 149)
> >> > > has never been run. Can you please log a JIRA case?
> >> > >
> >> > > > On Mar 28, 2018, at 1:42 PM, Muhammad Gelbana <
> m.gelbana@xxxxxxxxx>
> >> > > wrote:
> >> > > >
> >> > > > Looking at this line
> >> > > > <https://github.com/apache/calcite/blob/master/core/src/
> >> > > main/java/org/apache/calcite/interpreter/AggregateNode.java#L150>,
> >> > > > and the referenced instance variable
> >> > > > <https://github.com/apache/calcite/blob/master/core/src/
> >> > > main/java/org/apache/calcite/adapter/enumerable/AggImpState.
> >> java#L33>,
> >> > > > it looks to me that *int stateSize = agg.state.size* will always
> >> throw
> >> > a
> >> > > > NPE because the *agg.state* object reference is never initialized
> >> > before
> >> > > > it's being used !
> >> > > >
> >> > > > I'm facing the following exception
> >> > > >
> >> > > > java.sql.SQLException: Error while executing SQL "SELECT
> >> > MAX(COUNTRY_ID),
> >> > > > MAX(COUNTRY_TOTAL_ID) FROM SALES.COUNTRIES": null
> >> > > >    at org.apache.calcite.avatica.Helper.createException(Helper.
> >> > java:56)
> >> > > >    at org.apache.calcite.avatica.Helper.createException(Helper.
> >> > java:41)
> >> > > >    at
> >> > > > org.apache.calcite.avatica.AvaticaStatement.executeInternal(
> >> > > AvaticaStatement.java:156)
> >> > > >    at
> >> > > > org.apache.calcite.avatica.AvaticaStatement.executeQuery(
> >> > > AvaticaStatement.java:218)
> >> > > >    at
> >> > > > com.mg.sqlinterface.data.provider.calcite.internal.
> >> > > Test_SQLi.testMG(Test_SQLi.java:35)
> >> > > >    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
> >> > > >    at
> >> > > > sun.reflect.NativeMethodAccessorImpl.invoke(
> >> > > NativeMethodAccessorImpl.java:62)
> >> > > >    at
> >> > > > sun.reflect.DelegatingMethodAccessorImpl.invoke(
> >> > > DelegatingMethodAccessorImpl.java:43)
> >> > > >    at java.lang.reflect.Method.invoke(Method.java:498)
> >> > > >    at
> >> > > > org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(
> >> > > FrameworkMethod.java:50)
> >> > > >    at
> >> > > > org.junit.internal.runners.model.ReflectiveCallable.run(
> >> > > ReflectiveCallable.java:12)
> >> > > >    at
> >> > > > org.junit.runners.model.FrameworkMethod.invokeExplosively(
> >> > > FrameworkMethod.java:47)
> >> > > >    at
> >> > > > org.junit.internal.runners.statements.InvokeMethod.
> >> > > evaluate(InvokeMethod.java:17)
> >> > > >    at org.junit.runners.ParentRunner.runLeaf(
> ParentRunner.java:325)
> >> > > >    at
> >> > > > org.junit.runners.BlockJUnit4ClassRunner.runChild(
> >> > > BlockJUnit4ClassRunner.java:78)
> >> > > >    at
> >> > > > org.junit.runners.BlockJUnit4ClassRunner.runChild(
> >> > > BlockJUnit4ClassRunner.java:57)
> >> > > >    at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
> >> > > >    at org.junit.runners.ParentRunner$1.schedule(
> ParentRunner.java:
> >> 71)
> >> > > >    at org.junit.runners.ParentRunner.runChildren(
> >> > ParentRunner.java:288)
> >> > > >    at org.junit.runners.ParentRunner.access$000(
> ParentRunner.java:
> >> 58)
> >> > > >    at org.junit.runners.ParentRunner$2.evaluate(
> ParentRunner.java:
> >> 268)
> >> > > >    at
> >> > > > org.junit.internal.runners.statements.RunBefores.
> >> > > evaluate(RunBefores.java:26)
> >> > > >    at
> >> > > > org.junit.internal.runners.statements.RunAfters.evaluate(
> >> > > RunAfters.java:27)
> >> > > >    at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
> >> > > >    at
> >> > > > org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(
> >> > > JUnit4TestReference.java:86)
> >> > > >    at
> >> > > > org.eclipse.jdt.internal.junit.runner.TestExecution.
> >> > > run(TestExecution.java:38)
> >> > > >    at
> >> > > > org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.
> >> > > runTests(RemoteTestRunner.java:459)
> >> > > >    at
> >> > > > org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.
> >> > > runTests(RemoteTestRunner.java:678)
> >> > > >    at
> >> > > > org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.
> >> > > run(RemoteTestRunner.java:382)
> >> > > >    at
> >> > > > org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.
> >> > > main(RemoteTestRunner.java:192)
> >> > > > Caused by: *java.lang.NullPointerException*
> >> > > >    at org.apache.calcite.interpreter.AggregateNode.
> getAccumulator(
> >> > > > *AggregateNode.java:150*)
> >> > > >    at
> >> > > > org.apache.calcite.interpreter.AggregateNode.<
> >> > > init>(AggregateNode.java:86)
> >> > > >    at
> >> > > > org.apache.calcite.interpreter.Nodes$CoreCompiler.visit(
> >> Nodes.java:47)
> >> > > >    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
> >> > > >    at
> >> > > > sun.reflect.NativeMethodAccessorImpl.invoke(
> >> > > NativeMethodAccessorImpl.java:62)
> >> > > >    at
> >> > > > sun.reflect.DelegatingMethodAccessorImpl.invoke(
> >> > > DelegatingMethodAccessorImpl.java:43)
> >> > > >    at java.lang.reflect.Method.invoke(Method.java:498)
> >> > > >    at
> >> > > > org.apache.calcite.util.ReflectUtil.invokeVisitorInternal(
> >> > > ReflectUtil.java:257)
> >> > > >    at
> >> > > > org.apache.calcite.util.ReflectUtil.invokeVisitor(
> >> > ReflectUtil.java:214)
> >> > > >    at
> >> > > > org.apache.calcite.util.ReflectUtil$1.invokeVisitor(
> >> > > ReflectUtil.java:464)
> >> > > >    at
> >> > > > org.apache.calcite.interpreter.Interpreter$Compiler.visit(
> >> Interpreter.
> >> > > java:480)
> >> > > >    at
> >> > > > org.apache.calcite.interpreter.Interpreter$Compiler.visitRoot(
> >> > > Interpreter.java:437)
> >> > > >    at
> >> > > > org.apache.calcite.interpreter.Interpreter.<init>(
> >> Interpreter.java:78)
> >> > > >    at Baz.bind(Unknown Source)
> >> > > >    at
> >> > > > org.apache.calcite.jdbc.CalcitePrepare$
> CalciteSignature.enumerable(
> >> > > CalcitePrepare.java:365)
> >> > > >    at
> >> > > > org.apache.calcite.jdbc.CalciteConnectionImpl.enumerable(
> >> > > CalciteConnectionImpl.java:301)
> >> > > >    at
> >> > > > org.apache.calcite.jdbc.CalciteMetaImpl._createIterable(
> >> > > CalciteMetaImpl.java:559)
> >> > > >    at
> >> > > > org.apache.calcite.jdbc.CalciteMetaImpl.createIterable(
> >> > > CalciteMetaImpl.java:550)
> >> > > >    at
> >> > > > org.apache.calcite.avatica.AvaticaResultSet.execute(
> >> > > AvaticaResultSet.java:204)
> >> > > >    at
> >> > > > org.apache.calcite.jdbc.CalciteResultSet.execute(
> >> > > CalciteResultSet.java:67)
> >> > > >    at
> >> > > > org.apache.calcite.jdbc.CalciteResultSet.execute(
> >> > > CalciteResultSet.java:44)
> >> > > >    at
> >> > > > org.apache.calcite.avatica.AvaticaConnection$1.execute(
> >> > > AvaticaConnection.java:630)
> >> > > >    at
> >> > > > org.apache.calcite.jdbc.CalciteMetaImpl.prepareAndExecute(
> >> > > CalciteMetaImpl.java:619)
> >> > > >    at
> >> > > > org.apache.calcite.avatica.AvaticaConnection.
> >> > prepareAndExecuteInternal(
> >> > > AvaticaConnection.java:638)
> >> > > >    at
> >> > > > org.apache.calcite.avatica.AvaticaStatement.executeInternal(
> >> > > AvaticaStatement.java:149)
> >> > > >    ... 27 more
> >> > > >
> >> > > >
> >> > > > Thanks,
> >> > > > Gelbana
> >> > > > ​​
> >> > >
> >> > >
> >> >
> >>
> >>
> >>
> >> --
> >> "So you have to trust that the dots will somehow connect in your
> future."
> >>
> >
> >
>