You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@calcite.apache.org by "Abhishek Agarwal (Jira)" <ji...@apache.org> on 2021/03/16 09:02:00 UTC

[jira] [Commented] (CALCITE-685) Correlated scalar sub-query in SELECT clause throws

    [ https://issues.apache.org/jira/browse/CALCITE-685?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17302346#comment-17302346 ] 

Abhishek Agarwal commented on CALCITE-685:
------------------------------------------

I get the following error in master branch when running the test

 
{noformat}
Caused by: java.lang.ArrayIndexOutOfBoundsException: 7
	at com.google.common.collect.RegularImmutableList.get(RegularImmutableList.java:75)
	at org.apache.calcite.rex.RexBuilder.makeInputRef(RexBuilder.java:878)
	at org.apache.calcite.sql2rel.RelDecorrelator$AdjustProjectForCountAggregateRule.lambda$onMatch2$4(RelDecorrelator.java:2618)
	at java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:193)
	at java.util.Iterator.forEachRemaining(Iterator.java:116)
	at java.util.Spliterators$IteratorSpliterator.forEachRemaining(Spliterators.java:1801)
	at java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:482)
	at java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:472)
	at java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:708)
	at java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
	at java.util.stream.ReferencePipeline.collect(ReferencePipeline.java:499)
	at org.apache.calcite.sql2rel.RelDecorrelator$AdjustProjectForCountAggregateRule.onMatch2(RelDecorrelator.java:2619)
	at org.apache.calcite.sql2rel.RelDecorrelator$AdjustProjectForCountAggregateRule.onMatch(RelDecorrelator.java:2549)
	at org.apache.calcite.plan.AbstractRelOptPlanner.fireRule(AbstractRelOptPlanner.java:333)
	at org.apache.calcite.plan.hep.HepPlanner.applyRule(HepPlanner.java:542)
	at org.apache.calcite.plan.hep.HepPlanner.applyRules(HepPlanner.java:407)
	at org.apache.calcite.plan.hep.HepPlanner.executeInstruction(HepPlanner.java:243)
	at org.apache.calcite.plan.hep.HepInstruction$RuleInstance.execute(HepInstruction.java:127)
	at org.apache.calcite.plan.hep.HepPlanner.executeProgram(HepPlanner.java:202)
	at org.apache.calcite.plan.hep.HepPlanner.findBestExp(HepPlanner.java:189)
	at org.apache.calcite.sql2rel.RelDecorrelator.decorrelate(RelDecorrelator.java:275)
	at org.apache.calcite.sql2rel.RelDecorrelator.decorrelateQuery(RelDecorrelator.java:217)
	at org.apache.calcite.tools.Programs$DecorrelateProgram.run(Programs.java:356)
	at org.apache.calcite.tools.Programs$SequenceProgram.run(Programs.java:331)
	at org.apache.calcite.prepare.Prepare.optimize(Prepare.java:166)
	at org.apache.calcite.prepare.Prepare.prepareSql(Prepare.java:293)
	at org.apache.calcite.prepare.Prepare.prepareSql(Prepare.java:208)
	at org.apache.calcite.prepare.CalcitePrepareImpl.prepare2_(CalcitePrepareImpl.java:642)
	at org.apache.calcite.prepare.CalcitePrepareImpl.prepare_(CalcitePrepareImpl.java:508)
	at org.apache.calcite.prepare.CalcitePrepareImpl.prepareSql(CalcitePrepareImpl.java:478)
	at org.apache.calcite.jdbc.CalciteConnectionImpl.parseQuery(CalciteConnectionImpl.java:231)
	at org.apache.calcite.jdbc.CalciteMetaImpl.prepareAndExecute(CalciteMetaImpl.java:558)
	at org.apache.calcite.avatica.AvaticaConnection.prepareAndExecuteInternal(AvaticaConnection.java:675)
	at org.apache.calcite.avatica.AvaticaStatement.executeInternal(AvaticaStatement.java:156)
	... 66 more
{noformat}
 

> Correlated scalar sub-query in SELECT clause throws
> ---------------------------------------------------
>
>                 Key: CALCITE-685
>                 URL: https://issues.apache.org/jira/browse/CALCITE-685
>             Project: Calcite
>          Issue Type: Bug
>            Reporter: Jinfeng Ni
>            Priority: Major
>              Labels: sub-query
>
> For the following query, where a correlated scalar subquery is put in select list, Calcite will hit NPE in RelDecorrelator.
> {code}
> select e.department_id, sum(e.employee_id),
>        ( select sum(e2.employee_id)
>          from  employee e2
>          where e.department_id = e2.department_id
>        )
> from employee e
> group by e.department_id;
> {code}
> {code}
> Caused by: java.lang.NullPointerException
> 	at org.apache.calcite.sql2rel.RelDecorrelator.createValueGenerator(RelDecorrelator.java:733)
> 	at org.apache.calcite.sql2rel.RelDecorrelator.decorrelateInputWithValueGenerator(RelDecorrelator.java:842)
> 	at org.apache.calcite.sql2rel.RelDecorrelator.decorrelateRel(RelDecorrelator.java:902)
> 	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
> 	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
> 	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
> 	at org.apache.calcite.util.ReflectUtil.invokeVisitorInternal(ReflectUtil.java:256)
> 	at org.apache.calcite.util.ReflectUtil.invokeVisitor(ReflectUtil.java:213)
> 	at org.apache.calcite.util.ReflectUtil$1.invokeVisitor(ReflectUtil.java:476)
> 	at org.apache.calcite.sql2rel.RelDecorrelator$DecorrelateRelVisitor.visit(RelDecorrelator.java:1420)
> 	at org.apache.calcite.rel.SingleRel.childrenAccept(SingleRel.java:72)
> .....
> {code}
> Here is the unit test case I used to re-produce this problem in JdbcTest.java
> {code}
>   @Test public void testCorreScalarSubQInSelect()
>       throws ClassNotFoundException, SQLException {
>     String query = "select e.department_id, sum(e.employee_id),\n"
>         + "       ( select sum(e2.employee_id)\n"
>         + "         from  employee e2\n"
>         + "         where e.department_id = e2.department_id\n"
>         + "       )\n"
>         + " from employee e\n"
>         + " group by e.department_id\n";
>     CalciteAssert.that()
>         .with(CalciteAssert.Config.FOODMART_CLONE)
>         .with(Lex.JAVA)
>         .query(query)
>         .returnsCount(0);
>   }
> {code}



--
This message was sent by Atlassian Jira
(v8.3.4#803005)