weihua zhang created CALCITE-7257:
-------------------------------------

             Summary: Subqueries cannot be decorrelated if join condition 
contains RexFieldAccess
                 Key: CALCITE-7257
                 URL: https://issues.apache.org/jira/browse/CALCITE-7257
             Project: Calcite
          Issue Type: Improvement
            Reporter: weihua zhang



{code:java}
SELECT
  E1.* 
FROM
  EMP E1
WHERE
  E1.EMPNO = (
    SELECT D1.DEPTNO FROM DEPT D1
    WHERE E1.ENAME IN (
        SELECT
          B1.ENAME
        FROM
          BONUS B1
      )
  );

[Plan after conversion from Abstract Syntax Tree]
LogicalProject(empno=[$0], ename=[$1], job=[$2], mgr=[$3], hiredate=[$4], 
sal=[$5], comm=[$6], deptno=[$7]), id = 12
  LogicalFilter(condition=[=($0, $SCALAR_QUERY({
LogicalProject(DEPTNO=[$0])
  LogicalFilter(condition=[IN($cor0.ename, {
LogicalProject(ENAME=[$0])
  LogicalTableScan(table=[[testdb, bonus]])
})])
    LogicalTableScan(table=[[testdb, dept]])
}))], variablesSet=[[$cor0]]), id = 10
    LogicalTableScan(table=[[testdb, emp]]), id = 1

[Plan after subquery removal phase]
LogicalProject(empno=[$0], ename=[$1], job=[$2], mgr=[$3], hiredate=[$4], 
sal=[$5], comm=[$6], deptno=[$7]), id = 16
  LogicalProject(empno=[$0], ename=[$1], job=[$2], mgr=[$3], hiredate=[$4], 
sal=[$5], comm=[$6], deptno=[$7]), id = 33
    LogicalFilter(condition=[=($0, $8)]), id = 31
      LogicalCorrelate(correlation=[$cor0], joinType=[left], 
requiredColumns=[{1}]), id = 29
        LogicalTableScan(table=[[testdb, emp]]), id = 1
        LogicalAggregate(group=[{}], agg#0=[SINGLE_VALUE($0)]), id = 27
          LogicalProject(DEPTNO=[$0]), id = 25
            LogicalProject(deptno=[$0], dname=[$1], loc=[$2]), id = 45
              LogicalJoin(condition=[=($cor0.ename, $3)], joinType=[inner]), id 
= 43
                LogicalTableScan(table=[[testdb, dept]]), id = 3
                LogicalAggregate(group=[{0}]), id = 41
                  LogicalProject(ENAME=[$0]), id = 39
                    LogicalTableScan(table=[[testdb, bonus]]), id = 5


[Plan after subquery decorrelation phase]
LogicalProject(empno=[$0], ename=[$1], job=[$2], mgr=[$3], hiredate=[$4], 
sal=[$5], comm=[$6], deptno=[$7]), id = 91
  LogicalProject(empno=[$0], ename=[$1], job=[$2], mgr=[$3], hiredate=[$4], 
sal=[$5], comm=[$6], deptno=[$7]), id = 89
    LogicalProject(empno=[$0], ename=[$1], job=[$2], mgr=[$3], hiredate=[$4], 
sal=[$5], comm=[$6], deptno=[$7], $f0=[$8]), id = 107
      LogicalFilter(condition=[=($0, $8)]), id = 104
        LogicalCorrelate(correlation=[$cor0], joinType=[left], 
requiredColumns=[{1}]), id = 98
          LogicalTableScan(table=[[testdb, emp]]), id = 1
          LogicalAggregate(group=[{}], agg#0=[SINGLE_VALUE($0)]), id = 83
            LogicalProject(DEPTNO=[$0]), id = 81
              LogicalProject(deptno=[$0], dname=[$1], loc=[$2]), id = 79
                LogicalJoin(condition=[=($cor0.ename, $3)], joinType=[inner]), 
id = 77
                  LogicalTableScan(table=[[testdb, dept]]), id = 3
                  LogicalAggregate(group=[{0}]), id = 75
                    LogicalProject(ENAME=[$0]), id = 73
                      LogicalTableScan(table=[[testdb, bonus]]), id = 5
{code}




--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to