[
https://issues.apache.org/jira/browse/CALCITE-7392?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Zhen Chen reassigned CALCITE-7392:
----------------------------------
Assignee: Zhen Chen
> Unable to implement EnumerableCollect for SQL queries containing UNNEST
> -----------------------------------------------------------------------
>
> Key: CALCITE-7392
> URL: https://issues.apache.org/jira/browse/CALCITE-7392
> Project: Calcite
> Issue Type: Bug
> Reporter: Zhen Chen
> Assignee: Zhen Chen
> Priority: Major
>
> Using CoreQuidemTest2 to test the following SQL will result in an error.
> {code:java}
> SELECT ARRAY(SELECT y + 1 FROM UNNEST(s.x) y)
> FROM (SELECT ARRAY[1,2,3] as x) s;
> +-----------+
> | EXPR$0 |
> +-----------+
> | [2, 3, 4] |
> +-----------+
> (1 row)
> !ok {code}
> Error message:
> > java.sql.SQLException: Error while executing SQL "SELECT ARRAY(SELECT y + 1
> > FROM UNNEST(s.x) y)
> > FROM (SELECT ARRAY[1,2,3] as x) s": Unable to implement
> > EnumerableCollect(field=[x]): rowcount = 1.0, cumulative cost = \{5.0 rows,
> > 11.0 cpu, 0.0 io}, id = 666
> > EnumerableCalc(expr#0=[\{inputs}], expr#1=[1], expr#2=[+($t0, $t1)],
> > EXPR$0=[$t2]): rowcount = 1.0, cumulative cost = \{4.0 rows, 10.0 cpu, 0.0
> > io}, id = 668
> > EnumerableUncollect: rowcount = 1.0, cumulative cost = \{3.0 rows, 6.0
> > cpu, 0.0 io}, id = 662
> > EnumerableCalc(expr#0=[\{inputs}], expr#1=[$cor0], expr#2=[$t1.X],
> > X=[$t2]): rowcount = 1.0, cumulative cost = \{2.0 rows, 5.0 cpu, 0.0 io},
> > id = 670
> > EnumerableValues(tuples=[[\{ 0 }]]): rowcount = 1.0, cumulative
> > cost = \{1.0 rows, 1.0 cpu, 0.0 io}, id = 639
> 127a128,179
> > 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:164)
> > at
> > org.apache.calcite.avatica.AvaticaStatement.executeQuery(AvaticaStatement.java:228)
> > at net.hydromatic.quidem.Quidem.checkResult(Quidem.java:317)
> > at net.hydromatic.quidem.Quidem.access$2600(Quidem.java:54)
> > at
> > net.hydromatic.quidem.Quidem$ContextImpl.checkResult(Quidem.java:1778)
> > at
> > net.hydromatic.quidem.Quidem$CheckResultCommand.execute(Quidem.java:985)
> > at
> > net.hydromatic.quidem.Quidem$CompositeCommand.execute(Quidem.java:1522)
> > at net.hydromatic.quidem.Quidem.execute(Quidem.java:204)
> > at org.apache.calcite.test.QuidemTest.checkRun(QuidemTest.java:353)
> > at org.apache.calcite.test.QuidemTest.test(QuidemTest.java:543)
> > at org.apache.calcite.test.CoreQuidemTest2.main(CoreQuidemTest2.java:38)
> > Caused by: java.lang.IllegalStateException: Unable to implement
> > EnumerableCollect(field=[x]): rowcount = 1.0, cumulative cost = \{5.0 rows,
> > 11.0 cpu, 0.0 io}, id = 666
> > EnumerableCalc(expr#0=[\{inputs}], expr#1=[1], expr#2=[+($t0, $t1)],
> > EXPR$0=[$t2]): rowcount = 1.0, cumulative cost = \{4.0 rows, 10.0 cpu, 0.0
> > io}, id = 668
> > EnumerableUncollect: rowcount = 1.0, cumulative cost = \{3.0 rows, 6.0
> > cpu, 0.0 io}, id = 662
> > EnumerableCalc(expr#0=[\{inputs}], expr#1=[$cor0], expr#2=[$t1.X],
> > X=[$t2]): rowcount = 1.0, cumulative cost = \{2.0 rows, 5.0 cpu, 0.0 io},
> > id = 670
> > EnumerableValues(tuples=[[\{ 0 }]]): rowcount = 1.0, cumulative
> > cost = \{1.0 rows, 1.0 cpu, 0.0 io}, id = 639
> >
> > at
> > org.apache.calcite.adapter.enumerable.EnumerableRelImplementor.implementRoot(EnumerableRelImplementor.java:117)
> > at
> > org.apache.calcite.adapter.enumerable.EnumerableInterpretable.toBindable(EnumerableInterpretable.java:113)
> > at
> > org.apache.calcite.prepare.CalcitePrepareImpl$CalcitePreparingStmt.implement(CalcitePrepareImpl.java:1200)
> > at org.apache.calcite.prepare.Prepare.prepareSql(Prepare.java:332)
> > at org.apache.calcite.prepare.Prepare.prepareSql(Prepare.java:221)
> > at
> > org.apache.calcite.prepare.CalcitePrepareImpl.prepare2_(CalcitePrepareImpl.java:675)
> > at
> > org.apache.calcite.prepare.CalcitePrepareImpl.prepare_(CalcitePrepareImpl.java:526)
> > at
> > org.apache.calcite.prepare.CalcitePrepareImpl.prepareSql(CalcitePrepareImpl.java:494)
> > at
> > org.apache.calcite.jdbc.CalciteConnectionImpl.parseQuery(CalciteConnectionImpl.java:246)
> > at
> > org.apache.calcite.jdbc.CalciteMetaImpl.prepareAndExecute(CalciteMetaImpl.java:654)
> > at
> > org.apache.calcite.avatica.AvaticaConnection.prepareAndExecuteInternal(AvaticaConnection.java:677)
> > at
> > org.apache.calcite.avatica.AvaticaStatement.executeInternal(AvaticaStatement.java:157)
> > ... 10 more
> > Suppressed: java.lang.NullPointerException: Cannot invoke
> > "org.apache.calcite.adapter.enumerable.RexToLixTranslator$InputGetter.field(org.apache.calcite.linq4j.tree.BlockBuilder,
> > int, java.lang.reflect.Type)" because "getter" is null
> > at
> > org.apache.calcite.adapter.enumerable.RexToLixTranslator.visitFieldAccess(RexToLixTranslator.java:1724)
> > at
> > org.apache.calcite.adapter.enumerable.RexToLixTranslator.visitFieldAccess(RexToLixTranslator.java:110)
> > at
> > org.apache.calcite.rex.RexFieldAccess.accept(RexFieldAccess.java:103)
> > at
> > org.apache.calcite.adapter.enumerable.RexToLixTranslator.visitLocalRef(RexToLixTranslator.java:1368)
> > at
> > org.apache.calcite.adapter.enumerable.RexToLixTranslator.visitLocalRef(RexToLixTranslator.java:110)
> > at org.apache.calcite.rex.RexLocalRef.accept(RexLocalRef.java:78)
> > at
> > org.apache.calcite.adapter.enumerable.RexToLixTranslator.translate(RexToLixTranslator.java:262)
> > at
> > org.apache.calcite.adapter.enumerable.RexToLixTranslator.translate(RexToLixTranslator.java:256)
> > at
> > org.apache.calcite.adapter.enumerable.RexToLixTranslator.translateList(RexToLixTranslator.java:1185)
> > at
> > org.apache.calcite.adapter.enumerable.RexToLixTranslator.translateProjects(RexToLixTranslator.java:210)
> > at
> > org.apache.calcite.adapter.enumerable.EnumerableCalc.implement(EnumerableCalc.java:192)
> > at
> > org.apache.calcite.adapter.enumerable.EnumerableRelImplementor.visitChild(EnumerableRelImplementor.java:107)
> > at
> > org.apache.calcite.adapter.enumerable.EnumerableUncollect.implement(EnumerableUncollect.java:84)
> > at
> > org.apache.calcite.adapter.enumerable.EnumerableRelImplementor.visitChild(EnumerableRelImplementor.java:107)
> > at
> > org.apache.calcite.adapter.enumerable.EnumerableCalc.implement(EnumerableCalc.java:118)
> > at
> > org.apache.calcite.adapter.enumerable.EnumerableRelImplementor.visitChild(EnumerableRelImplementor.java:107)
> > at
> > org.apache.calcite.adapter.enumerable.EnumerableCollect.implement(EnumerableCollect.java:85)
> > at
> > org.apache.calcite.adapter.enumerable.EnumerableRelImplementor.implementRoot(EnumerableRelImplementor.java:114)
--
This message was sent by Atlassian Jira
(v8.20.10#820010)