[ https://issues.apache.org/jira/browse/CALCITE-5413 ]
James Starr deleted comment on CALCITE-5413: -------------------------------------- was (Author: jamesstarr): SqlToRel not setting the correlate id > Nested Subqueries with correlated variables are not decorrelated correctly > ---------------------------------------------------------------------------- > > Key: CALCITE-5413 > URL: https://issues.apache.org/jira/browse/CALCITE-5413 > Project: Calcite > Issue Type: Improvement > Reporter: James Starr > Assignee: James Starr > Priority: Major > > When SubQueryRemoveRule decorrelates a nested query, all correlated variables > are assumed to be bound to the scope of inner query. > {code:sql} > SELECT deptno > FROM emp e > WHERE EXISTS ( > SELECT * > FROM dept d > WHERE EXISTS( > SELECT * > FROM emp_address ea > WHERE d.deptno = e.deptno > AND ea.empno = e.empno > {code} > Fails expand correctly, note the inner correlate with 2 correlate variables: > {code} > LogicalProject(DEPTNO=[$7]) > LogicalCorrelate(correlation=[$cor0], joinType=[inner], > requiredColumns=[{0, 7}]) > LogicalTableScan(table=[[CATALOG, SALES, EMP]]) > LogicalAggregate(group=[{0}]) > LogicalProject(i=[true]) > LogicalJoin(condition=[true], joinType=[inner], variablesSet=[[$cor0, > $cor1]]) > LogicalTableScan(table=[[CATALOG, SALES, DEPT]]) > LogicalAggregate(group=[{0}]) > LogicalProject(i=[true]) > LogicalFilter(condition=[AND(=($0, $cor0.EMPNO), > =($cor1.DEPTNO, $cor0.DEPTNO))]) > LogicalTableScan(table=[[CATALOG, SALES, EMP_ADDRESS]]) > {code} > Creates the following error during decorrelation as well: > {code} > > correlation id $cor1 not found in correlation list [] > java.lang.AssertionError: correlation id $cor1 not found in correlation list > [] > at org.apache.calcite.util.Litmus.lambda$static$0(Litmus.java:31) > at > org.apache.calcite.rex.RexChecker.visitCorrelVariable(RexChecker.java:178) > at > org.apache.calcite.rex.RexChecker.visitCorrelVariable(RexChecker.java:61) > at > org.apache.calcite.rex.RexCorrelVariable.accept(RexCorrelVariable.java:49) > at > org.apache.calcite.rex.RexVisitorImpl.visitFieldAccess(RexVisitorImpl.java:98) > at > org.apache.calcite.rex.RexChecker.visitFieldAccess(RexChecker.java:153) > at > org.apache.calcite.rex.RexChecker.visitFieldAccess(RexChecker.java:61) > at org.apache.calcite.rex.RexFieldAccess.accept(RexFieldAccess.java:94) > at org.apache.calcite.rel.core.Project.isValid(Project.java:245) > at > org.apache.calcite.rel.RelValidityChecker.visit(RelValidityChecker.java:53) > at org.apache.calcite.rel.SingleRel.childrenAccept(SingleRel.java:72) > at org.apache.calcite.rel.RelVisitor.visit(RelVisitor.java:46) > at > org.apache.calcite.rel.RelValidityChecker.visit(RelValidityChecker.java:56) > at org.apache.calcite.rel.SingleRel.childrenAccept(SingleRel.java:72) > at org.apache.calcite.rel.RelVisitor.visit(RelVisitor.java:46) > at > org.apache.calcite.rel.RelValidityChecker.visit(RelValidityChecker.java:56) > at org.apache.calcite.rel.SingleRel.childrenAccept(SingleRel.java:72) > at org.apache.calcite.rel.RelVisitor.visit(RelVisitor.java:46) > at > org.apache.calcite.rel.RelValidityChecker.visit(RelValidityChecker.java:56) > at org.apache.calcite.rel.BiRel.childrenAccept(BiRel.java:46) > at org.apache.calcite.rel.RelVisitor.visit(RelVisitor.java:46) > at > org.apache.calcite.rel.RelValidityChecker.visit(RelValidityChecker.java:56) > at org.apache.calcite.rel.SingleRel.childrenAccept(SingleRel.java:72) > at org.apache.calcite.rel.RelVisitor.visit(RelVisitor.java:46) > at > org.apache.calcite.rel.RelValidityChecker.visit(RelValidityChecker.java:56) > at org.apache.calcite.rel.SingleRel.childrenAccept(SingleRel.java:72) > at org.apache.calcite.rel.RelVisitor.visit(RelVisitor.java:46) > at > org.apache.calcite.rel.RelValidityChecker.visit(RelValidityChecker.java:56) > at org.apache.calcite.rel.SingleRel.childrenAccept(SingleRel.java:72) > at org.apache.calcite.rel.RelVisitor.visit(RelVisitor.java:46) > at > org.apache.calcite.rel.RelValidityChecker.visit(RelValidityChecker.java:56) > at org.apache.calcite.rel.BiRel.childrenAccept(BiRel.java:46) > at org.apache.calcite.rel.RelVisitor.visit(RelVisitor.java:46) > at > org.apache.calcite.rel.RelValidityChecker.visit(RelValidityChecker.java:56) > at org.apache.calcite.rel.SingleRel.childrenAccept(SingleRel.java:72) > at org.apache.calcite.rel.RelVisitor.visit(RelVisitor.java:46) > at > org.apache.calcite.rel.RelValidityChecker.visit(RelValidityChecker.java:56) > at org.apache.calcite.rel.SingleRel.childrenAccept(SingleRel.java:72) > at org.apache.calcite.rel.RelVisitor.visit(RelVisitor.java:46) > at > org.apache.calcite.rel.RelValidityChecker.visit(RelValidityChecker.java:56) > at org.apache.calcite.rel.RelVisitor.go(RelVisitor.java:63) > at org.apache.calcite.test.Matchers$4.matchesSafely(Matchers.java:214) > {code} -- This message was sent by Atlassian Jira (v8.20.10#820010)