This is an automated email from the ASF dual-hosted git repository.
mbudiu pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/calcite.git
The following commit(s) were added to refs/heads/main by this push:
new 2a89ec92be [CALCITE-2295] Correlated SubQuery with Project will
generate error plan
2a89ec92be is described below
commit 2a89ec92becee9c9df61005f40407ba65cabd682
Author: Xiong Duan <[email protected]>
AuthorDate: Tue Jan 21 12:27:31 2025 +0800
[CALCITE-2295] Correlated SubQuery with Project will generate error plan
---
.../org/apache/calcite/test/RelOptRulesTest.java | 10 ++++++
.../org/apache/calcite/test/RelOptRulesTest.xml | 38 ++++++++++++++++++++++
2 files changed, 48 insertions(+)
diff --git a/core/src/test/java/org/apache/calcite/test/RelOptRulesTest.java
b/core/src/test/java/org/apache/calcite/test/RelOptRulesTest.java
index e7d3325263..b02a929e67 100644
--- a/core/src/test/java/org/apache/calcite/test/RelOptRulesTest.java
+++ b/core/src/test/java/org/apache/calcite/test/RelOptRulesTest.java
@@ -9116,6 +9116,16 @@ public interface Config extends RelRule.Config {
.check();
}
+ /** Test case for
+ * <a
href="https://issues.apache.org/jira/browse/CALCITE-2295">[CALCITE-2295]
+ * Correlated SubQuery with Project will generate error plan</a>. */
+ @Test public void testDecorrelationWithProject() throws Exception {
+ final String sql = "select sal,\n"
+ + "exists (select * from emp_b where emp.deptno = emp_b.deptno)\n"
+ + "from sales.emp";
+ sql(sql).withSubQueryRules().withLateDecorrelate(true).check();
+ }
+
/** Test case for
* <a
href="https://issues.apache.org/jira/browse/CALCITE-3296">[CALCITE-3296]
* Decorrelator gives empty result after decorrelating sort rel with
diff --git
a/core/src/test/resources/org/apache/calcite/test/RelOptRulesTest.xml
b/core/src/test/resources/org/apache/calcite/test/RelOptRulesTest.xml
index 5e8739f5df..038ca94a57 100644
--- a/core/src/test/resources/org/apache/calcite/test/RelOptRulesTest.xml
+++ b/core/src/test/resources/org/apache/calcite/test/RelOptRulesTest.xml
@@ -2483,6 +2483,44 @@ LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2],
MGR=[$3], HIREDATE=[$4], SAL=[$
LogicalAggregate(group=[{0}])
LogicalProject(DEPTNO=[$7])
LogicalTableScan(table=[[CATALOG, SALES, EMP]])
+]]>
+ </Resource>
+ </TestCase>
+ <TestCase name="testDecorrelationWithProject">
+ <Resource name="sql">
+ <![CDATA[select sal,
+exists (select * from emp_b where emp.deptno = emp_b.deptno)
+from sales.emp]]>
+ </Resource>
+ <Resource name="planBefore">
+ <![CDATA[
+LogicalProject(variablesSet=[[$cor0]], SAL=[$5], EXPR$1=[EXISTS({
+LogicalFilter(condition=[=($cor0.DEPTNO, $7)])
+ LogicalTableScan(table=[[CATALOG, SALES, EMP_B]])
+})])
+ LogicalTableScan(table=[[CATALOG, SALES, EMP]])
+]]>
+ </Resource>
+ <Resource name="planMid">
+ <![CDATA[
+LogicalProject(SAL=[$5], EXPR$1=[IS NOT NULL($9)])
+ LogicalCorrelate(correlation=[$cor0], joinType=[left], requiredColumns=[{7}])
+ LogicalTableScan(table=[[CATALOG, SALES, EMP]])
+ LogicalAggregate(group=[{0}])
+ LogicalProject(i=[true])
+ LogicalFilter(condition=[=($cor0.DEPTNO, $7)])
+ LogicalTableScan(table=[[CATALOG, SALES, EMP_B]])
+]]>
+ </Resource>
+ <Resource name="planAfter">
+ <![CDATA[
+LogicalProject(SAL=[$5], EXPR$1=[IS NOT NULL($10)])
+ LogicalJoin(condition=[=($7, $9)], joinType=[left])
+ LogicalTableScan(table=[[CATALOG, SALES, EMP]])
+ LogicalProject(DEPTNO=[$0], $f1=[true])
+ LogicalAggregate(group=[{0}])
+ LogicalProject(DEPTNO=[$7])
+ LogicalTableScan(table=[[CATALOG, SALES, EMP_B]])
]]>
</Resource>
</TestCase>