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>