This is an automated email from the ASF dual-hosted git repository.

zhenchen 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 aeb69f30b0 [CALCITE-7071] Add test for replacing JOIN node with its 
child node when JOIN condition is false
aeb69f30b0 is described below

commit aeb69f30b0420608bb75b6b320ea61ce96c8b028
Author: Zhen Chen <[email protected]>
AuthorDate: Wed Jun 25 21:47:54 2025 +0800

    [CALCITE-7071] Add test for replacing JOIN node with its child node when 
JOIN condition is false
---
 .../org/apache/calcite/test/RelOptRulesTest.java   | 26 +++++++++++++
 .../org/apache/calcite/test/RelOptRulesTest.xml    | 44 ++++++++++++++++++++++
 2 files changed, 70 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 f08d85d4fa..5e54845c81 100644
--- a/core/src/test/java/org/apache/calcite/test/RelOptRulesTest.java
+++ b/core/src/test/java/org/apache/calcite/test/RelOptRulesTest.java
@@ -7878,6 +7878,32 @@ private HepProgram getTransitiveProgram() {
         .check();
   }
 
+  /** Test case for
+   * <a 
href="https://issues.apache.org/jira/browse/CALCITE-7071";>[CALCITE-7071]
+   * Add test for replacing JOIN node with its child node
+   * when JOIN condition is false</a>. */
+  @Test void testLeftJoinRemoveConditionIsAlwaysFalse() {
+    final String sql = "SELECT e.deptno\n"
+        + "FROM sales.emp e\n"
+        + "LEFT JOIN sales.dept d ON e.deptno = d.deptno and e.deptno between 
3 and 1";
+    sql(sql).withRule(CoreRules.JOIN_CONDITION_PUSH,
+            PruneEmptyRules.JOIN_RIGHT_INSTANCE)
+        .check();
+  }
+
+  /** Test case for
+   * <a 
href="https://issues.apache.org/jira/browse/CALCITE-7071";>[CALCITE-7071]
+   * Add test for replacing JOIN node with its child node
+   * when JOIN condition is false</a>. */
+  @Test void testRightJoinRemoveConditionIsAlwaysFalse() {
+    final String sql = "SELECT e.deptno\n"
+        + "FROM sales.dept d\n"
+        + "RIGHT JOIN sales.emp e ON e.deptno = d.deptno and e.deptno between 
3 and 1";
+    sql(sql).withRule(CoreRules.JOIN_CONDITION_PUSH,
+            PruneEmptyRules.JOIN_LEFT_INSTANCE)
+        .check();
+  }
+
   @Test void testSwapOuterJoin() {
     final HepProgram program = new HepProgramBuilder()
         .addMatchLimit(1)
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 69cc261a05..c61d39b755 100644
--- a/core/src/test/resources/org/apache/calcite/test/RelOptRulesTest.xml
+++ b/core/src/test/resources/org/apache/calcite/test/RelOptRulesTest.xml
@@ -8299,6 +8299,28 @@ LogicalProject(EMPNO=[$11])
       LogicalProject(EMPNO=[$0], STREET=[$1.STREET], CITY=[$1.CITY], 
ZIP=[$1.ZIP], STATE=[$1.STATE], STREET5=[$2.STREET], CITY6=[$2.CITY], 
ZIP7=[$2.ZIP], STATE8=[$2.STATE])
         LogicalTableScan(table=[[CATALOG, SALES, EMP_ADDRESS]])
       LogicalTableScan(table=[[CATALOG, SALES, EMP]])
+]]>
+    </Resource>
+  </TestCase>
+  <TestCase name="testLeftJoinRemoveConditionIsAlwaysFalse">
+    <Resource name="sql">
+      <![CDATA[SELECT e.deptno
+FROM sales.emp e
+LEFT JOIN sales.dept d ON e.deptno = d.deptno and e.deptno between 3 and 1]]>
+    </Resource>
+    <Resource name="planBefore">
+      <![CDATA[
+LogicalProject(DEPTNO=[$7])
+  LogicalJoin(condition=[false], joinType=[left])
+    LogicalTableScan(table=[[CATALOG, SALES, EMP]])
+    LogicalTableScan(table=[[CATALOG, SALES, DEPT]])
+]]>
+    </Resource>
+    <Resource name="planAfter">
+      <![CDATA[
+LogicalProject(DEPTNO=[$7])
+  LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], 
SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8], DEPTNO0=[null:INTEGER], 
NAME=[null:VARCHAR(10)])
+    LogicalTableScan(table=[[CATALOG, SALES, EMP]])
 ]]>
     </Resource>
   </TestCase>
@@ -16200,6 +16222,28 @@ LogicalProject(EMPNO=[$0])
       <![CDATA[
 LogicalProject(EMPNO=[$0])
   LogicalValues(tuples=[[]])
+]]>
+    </Resource>
+  </TestCase>
+  <TestCase name="testRightJoinRemoveConditionIsAlwaysFalse">
+    <Resource name="sql">
+      <![CDATA[SELECT e.deptno
+FROM sales.dept d
+RIGHT JOIN sales.emp e ON e.deptno = d.deptno and e.deptno between 3 and 1]]>
+    </Resource>
+    <Resource name="planBefore">
+      <![CDATA[
+LogicalProject(DEPTNO=[$9])
+  LogicalJoin(condition=[false], joinType=[right])
+    LogicalTableScan(table=[[CATALOG, SALES, DEPT]])
+    LogicalTableScan(table=[[CATALOG, SALES, EMP]])
+]]>
+    </Resource>
+    <Resource name="planAfter">
+      <![CDATA[
+LogicalProject(DEPTNO=[$9])
+  LogicalProject(DEPTNO=[null:INTEGER], NAME=[null:VARCHAR(10)], EMPNO=[$0], 
ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], 
DEPTNO0=[$7], SLACKER=[$8])
+    LogicalTableScan(table=[[CATALOG, SALES, EMP]])
 ]]>
     </Resource>
   </TestCase>

Reply via email to