Zhen Chen created CALCITE-7401:
----------------------------------
Summary: Multi-level correlated subqueries cause an out-of-range
error in the TopDownGeneralDecorrelator
Key: CALCITE-7401
URL: https://issues.apache.org/jira/browse/CALCITE-7401
Project: Calcite
Issue Type: Bug
Components: core
Affects Versions: 1.41.0
Reporter: Zhen Chen
Using CoreQuidemTest2 to test the following SQL will result in an error.
# Test case for [CALCITE-5789]
select deptno from dept d1 where exists (
select 1 from dept d2 where d2.deptno = d1.deptno and exists (
select 1 from dept d3 where d3.deptno = d2.deptno and d3.dname = d1.dname));
+--------+
| DEPTNO |
+--------+
| 10 |
| 20 |
| 30 |
| 40 |
+--------+
(4 rows)
!ok
Error message:
> java.lang.AssertionError: out of range; value: 6, limit: 6
> at org.apache.calcite.util.Litmus.lambda$static$0(Litmus.java:31)
> at
> org.apache.calcite.sql2rel.RelDecorrelator.allLessThan(RelDecorrelator.java:2397)
> at
> org.apache.calcite.sql2rel.RelDecorrelator$Frame.<init>(RelDecorrelator.java:3790)
> at
> org.apache.calcite.sql2rel.TopDownGeneralDecorrelator$UnnestedQuery.<init>(TopDownGeneralDecorrelator.java:970)
> at
> org.apache.calcite.sql2rel.TopDownGeneralDecorrelator$UnnestedQuery.createJoinUnnestInfo(TopDownGeneralDecorrelator.java:1021)
> at
> org.apache.calcite.sql2rel.TopDownGeneralDecorrelator$UnnestedQuery.access$100(TopDownGeneralDecorrelator.java:957)
> at
> org.apache.calcite.sql2rel.TopDownGeneralDecorrelator.unnestInternal(TopDownGeneralDecorrelator.java:663)
> at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native
> Method)
> at
> java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)
> at
> java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
> at java.base/java.lang.reflect.Method.invoke(Method.java:568)
> at org.apache.calcite.util.ReflectUtil$2.invoke(ReflectUtil.java:533)
> at
> org.apache.calcite.sql2rel.TopDownGeneralDecorrelator.unnest(TopDownGeneralDecorrelator.java:420)
> at
> org.apache.calcite.sql2rel.TopDownGeneralDecorrelator.unnestInternal(TopDownGeneralDecorrelator.java:436)
> at jdk.internal.reflect.GeneratedMethodAccessor178.invoke(Unknown Source)
> at
> java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
> at java.base/java.lang.reflect.Method.invoke(Method.java:568)
> at org.apache.calcite.util.ReflectUtil$2.invoke(ReflectUtil.java:533)
> at
> org.apache.calcite.sql2rel.TopDownGeneralDecorrelator.unnest(TopDownGeneralDecorrelator.java:420)
> at
> org.apache.calcite.sql2rel.TopDownGeneralDecorrelator.unnestInternal(TopDownGeneralDecorrelator.java:458)
> at jdk.internal.reflect.GeneratedMethodAccessor179.invoke(Unknown Source)
> at
> java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
> at java.base/java.lang.reflect.Method.invoke(Method.java:568)
> at org.apache.calcite.util.ReflectUtil$2.invoke(ReflectUtil.java:533)
> at
> org.apache.calcite.sql2rel.TopDownGeneralDecorrelator.unnest(TopDownGeneralDecorrelator.java:420)
> at
> org.apache.calcite.sql2rel.TopDownGeneralDecorrelator.correlateElimination(TopDownGeneralDecorrelator.java:283)
> at
> org.apache.calcite.sql2rel.TopDownGeneralDecorrelator.correlateElimination(TopDownGeneralDecorrelator.java:243)
> at
> org.apache.calcite.sql2rel.TopDownGeneralDecorrelator.correlateElimination(TopDownGeneralDecorrelator.java:243)
> at
> org.apache.calcite.sql2rel.TopDownGeneralDecorrelator.correlateElimination(TopDownGeneralDecorrelator.java:243)
> at
> org.apache.calcite.sql2rel.TopDownGeneralDecorrelator.decorrelateQuery(TopDownGeneralDecorrelator.java:213)
> at
> org.apache.calcite.tools.Programs$DecorrelateProgram.run(Programs.java:454)
> at org.apache.calcite.tools.Programs$SequenceProgram.run(Programs.java:406)
> at org.apache.calcite.prepare.Prepare.optimize(Prepare.java:178)
> at org.apache.calcite.prepare.Prepare.prepareSql(Prepare.java:320)
> 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)
> at
> org.apache.calcite.avatica.AvaticaStatement.executeQuery(AvaticaStatement.java:228)
> at net.hydromatic.quidem.Quidem.checkResult(Quidem.java:317)
--
This message was sent by Atlassian Jira
(v8.20.10#820010)