[ 
https://issues.apache.org/jira/browse/CALCITE-7402?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Zhen Chen updated CALCITE-7402:
-------------------------------
    Description: 
Using CoreQuidemTest2 to test the following SQL will result in an error.
{code:java}
# [CALCITE-5716] Two level nested correlated subquery translates to incorrect 
ON condition
SELECT dept.deptno, (
  SELECT max(emp.empno)
  FROM emp
  WHERE empno = (SELECT max(empno) AS maxDept
                 FROM emp e2
                 WHERE e2.deptno = dept.deptno)
        AND emp.deptno = dept.deptno),
  dept.dname
FROM dept;
+--------+--------+------------+
| DEPTNO | EXPR$1 | DNAME    |
+--------+--------+------------+
|    10 |   7934 | ACCOUNTING |
|    20 |   7902 | RESEARCH   |
|    30 |  7900 | SALES     |
|    40 |      | OPERATIONS |
+--------+--------+------------+
(4 rows)

!ok {code}
Error message:

> java.lang.AssertionError: type mismatch:
> ref:
> TINYINT NOT NULL
> input:
> TINYINT
>     at org.apache.calcite.util.Litmus.lambda$static$0(Litmus.java:31)
>     at 
> org.apache.calcite.plan.RelOptUtil.eqUpToNullability(RelOptUtil.java:2279)
>     at org.apache.calcite.rex.RexChecker.visitInputRef(RexChecker.java:131)
>     at org.apache.calcite.rex.RexChecker.visitInputRef(RexChecker.java:62)
>     at org.apache.calcite.rex.RexInputRef.accept(RexInputRef.java:125)
>     at org.apache.calcite.rex.RexChecker.visitCall(RexChecker.java:148)
>     at org.apache.calcite.rex.RexChecker.visitCall(RexChecker.java:62)
>     at org.apache.calcite.rex.RexCall.accept(RexCall.java:208)
>     at org.apache.calcite.rel.core.Filter.isValid(Filter.java:165)
>     at org.apache.calcite.rel.core.Filter.<init>(Filter.java:91)
>     at 
> org.apache.calcite.rel.logical.LogicalFilter.<init>(LogicalFilter.java:75)
>     at 
> org.apache.calcite.rel.logical.LogicalFilter.<init>(LogicalFilter.java:97)
>     at 
> org.apache.calcite.rel.logical.LogicalFilter.create(LogicalFilter.java:141)
>     at 
> org.apache.calcite.rel.core.RelFactories$FilterFactoryImpl.createFilter(RelFactories.java:384)
>     at org.apache.calcite.tools.RelBuilder.filter(RelBuilder.java:1959)
>     at org.apache.calcite.tools.RelBuilder.filter(RelBuilder.java:1904)
>     at 
> org.apache.calcite.sql2rel.TopDownGeneralDecorrelator.unnestInternal(TopDownGeneralDecorrelator.java:440)
>     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.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.unnestInternal(TopDownGeneralDecorrelator.java:481)
>     at jdk.internal.reflect.GeneratedMethodAccessor201.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.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)

  was:
Using CoreQuidemTest2 to test the following SQL will result in an error.
{code:java}
# [CALCITE-5716] Two level nested correlated subquery translates to incorrect 
ON condition
SELECT dept.deptno, (
  SELECT max(emp.empno)
  FROM emp
  WHERE empno = (SELECT max(empno) AS maxDept
                 FROM emp e2
                 WHERE e2.deptno = dept.deptno)
        AND emp.deptno = dept.deptno),
  dept.dname
FROM dept;
+--------+--------+------------+
| DEPTNO | EXPR$1 | DNAME      |
+--------+--------+------------+
|     10 |   7934 | ACCOUNTING |
|     20 |   7902 | RESEARCH   |
|     30 |   7900 | SALES      |
|     40 |        | OPERATIONS |
+--------+--------+------------+
(4 rows)!ok {code}
Error message:

> java.lang.AssertionError: type mismatch:
> ref:
> TINYINT NOT NULL
> input:
> TINYINT
>     at org.apache.calcite.util.Litmus.lambda$static$0(Litmus.java:31)
>     at 
> org.apache.calcite.plan.RelOptUtil.eqUpToNullability(RelOptUtil.java:2279)
>     at org.apache.calcite.rex.RexChecker.visitInputRef(RexChecker.java:131)
>     at org.apache.calcite.rex.RexChecker.visitInputRef(RexChecker.java:62)
>     at org.apache.calcite.rex.RexInputRef.accept(RexInputRef.java:125)
>     at org.apache.calcite.rex.RexChecker.visitCall(RexChecker.java:148)
>     at org.apache.calcite.rex.RexChecker.visitCall(RexChecker.java:62)
>     at org.apache.calcite.rex.RexCall.accept(RexCall.java:208)
>     at org.apache.calcite.rel.core.Filter.isValid(Filter.java:165)
>     at org.apache.calcite.rel.core.Filter.<init>(Filter.java:91)
>     at 
> org.apache.calcite.rel.logical.LogicalFilter.<init>(LogicalFilter.java:75)
>     at 
> org.apache.calcite.rel.logical.LogicalFilter.<init>(LogicalFilter.java:97)
>     at 
> org.apache.calcite.rel.logical.LogicalFilter.create(LogicalFilter.java:141)
>     at 
> org.apache.calcite.rel.core.RelFactories$FilterFactoryImpl.createFilter(RelFactories.java:384)
>     at org.apache.calcite.tools.RelBuilder.filter(RelBuilder.java:1959)
>     at org.apache.calcite.tools.RelBuilder.filter(RelBuilder.java:1904)
>     at 
> org.apache.calcite.sql2rel.TopDownGeneralDecorrelator.unnestInternal(TopDownGeneralDecorrelator.java:440)
>     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.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.unnestInternal(TopDownGeneralDecorrelator.java:481)
>     at jdk.internal.reflect.GeneratedMethodAccessor201.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.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)


> Two-level nested correlated subquery causes TopDownGeneralDecorrelator type 
> mismatch during translation
> -------------------------------------------------------------------------------------------------------
>
>                 Key: CALCITE-7402
>                 URL: https://issues.apache.org/jira/browse/CALCITE-7402
>             Project: Calcite
>          Issue Type: Bug
>          Components: core
>            Reporter: Zhen Chen
>            Priority: Major
>
> Using CoreQuidemTest2 to test the following SQL will result in an error.
> {code:java}
> # [CALCITE-5716] Two level nested correlated subquery translates to incorrect 
> ON condition
> SELECT dept.deptno, (
>   SELECT max(emp.empno)
>   FROM emp
>   WHERE empno = (SELECT max(empno) AS maxDept
>                  FROM emp e2
>                  WHERE e2.deptno = dept.deptno)
>         AND emp.deptno = dept.deptno),
>   dept.dname
> FROM dept;
> +--------+--------+------------+
> | DEPTNO | EXPR$1 | DNAME    |
> +--------+--------+------------+
> |    10 |   7934 | ACCOUNTING |
> |    20 |   7902 | RESEARCH   |
> |    30 |  7900 | SALES     |
> |    40 |      | OPERATIONS |
> +--------+--------+------------+
> (4 rows)
> !ok {code}
> Error message:
> > java.lang.AssertionError: type mismatch:
> > ref:
> > TINYINT NOT NULL
> > input:
> > TINYINT
> >     at org.apache.calcite.util.Litmus.lambda$static$0(Litmus.java:31)
> >     at 
> > org.apache.calcite.plan.RelOptUtil.eqUpToNullability(RelOptUtil.java:2279)
> >     at org.apache.calcite.rex.RexChecker.visitInputRef(RexChecker.java:131)
> >     at org.apache.calcite.rex.RexChecker.visitInputRef(RexChecker.java:62)
> >     at org.apache.calcite.rex.RexInputRef.accept(RexInputRef.java:125)
> >     at org.apache.calcite.rex.RexChecker.visitCall(RexChecker.java:148)
> >     at org.apache.calcite.rex.RexChecker.visitCall(RexChecker.java:62)
> >     at org.apache.calcite.rex.RexCall.accept(RexCall.java:208)
> >     at org.apache.calcite.rel.core.Filter.isValid(Filter.java:165)
> >     at org.apache.calcite.rel.core.Filter.<init>(Filter.java:91)
> >     at 
> > org.apache.calcite.rel.logical.LogicalFilter.<init>(LogicalFilter.java:75)
> >     at 
> > org.apache.calcite.rel.logical.LogicalFilter.<init>(LogicalFilter.java:97)
> >     at 
> > org.apache.calcite.rel.logical.LogicalFilter.create(LogicalFilter.java:141)
> >     at 
> > org.apache.calcite.rel.core.RelFactories$FilterFactoryImpl.createFilter(RelFactories.java:384)
> >     at org.apache.calcite.tools.RelBuilder.filter(RelBuilder.java:1959)
> >     at org.apache.calcite.tools.RelBuilder.filter(RelBuilder.java:1904)
> >     at 
> > org.apache.calcite.sql2rel.TopDownGeneralDecorrelator.unnestInternal(TopDownGeneralDecorrelator.java:440)
> >     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.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.unnestInternal(TopDownGeneralDecorrelator.java:481)
> >     at jdk.internal.reflect.GeneratedMethodAccessor201.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.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)

Reply via email to