This is an automated email from the ASF dual-hosted git repository.
xuzifu666 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 5c6456d1f7 [CALCITE-2274] Filter predicates aren't inferred while
using dynamic star in subquery
5c6456d1f7 is described below
commit 5c6456d1f783d057f9027f32aa6c37d664a2a598
Author: Zhen Chen <[email protected]>
AuthorDate: Sat Dec 20 21:39:43 2025 +0800
[CALCITE-2274] Filter predicates aren't inferred while using dynamic star
in subquery
---
.../org/apache/calcite/test/RelOptRulesTest.java | 11 +++++++++
.../org/apache/calcite/test/RelOptRulesTest.xml | 28 ++++++++++++++++++++++
2 files changed, 39 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 ac7a55984f..959cdada0b 100644
--- a/core/src/test/java/org/apache/calcite/test/RelOptRulesTest.java
+++ b/core/src/test/java/org/apache/calcite/test/RelOptRulesTest.java
@@ -6455,6 +6455,17 @@ private HepProgram getTransitiveProgram() {
.check();
}
+ /** Test case for
+ * <a
href="https://issues.apache.org/jira/browse/CALCITE-2274">[CALCITE-2274]
+ * Filter predicates aren't inferred while using dynamic star in
subquery</a>. */
+ @Test void testTransitiveInferenceJoinUsingStar() {
+ final String sql = "SELECT * FROM sales.emp d JOIN\n"
+ + "(SELECT * FROM sales.emp WHERE deptno = 4) e\n"
+ + "ON e.deptno = d.deptno";
+ sql(sql).withPre(getTransitiveProgram())
+ .withRule(CoreRules.JOIN_PUSH_TRANSITIVE_PREDICATES).check();
+ }
+
/** Tests propagation of a filter derived from an "IS NOT DISTINCT FROM"
* predicate.
*
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 73f362b3f0..e651fcd74e 100644
--- a/core/src/test/resources/org/apache/calcite/test/RelOptRulesTest.xml
+++ b/core/src/test/resources/org/apache/calcite/test/RelOptRulesTest.xml
@@ -20521,6 +20521,34 @@ LogicalProject(EXPR$0=[1])
LogicalTableScan(table=[[CATALOG, SALES, EMP]])
LogicalFilter(condition=[>($7, 7)])
LogicalTableScan(table=[[CATALOG, SALES, EMP]])
+]]>
+ </Resource>
+ </TestCase>
+ <TestCase name="testTransitiveInferenceJoinUsingStar">
+ <Resource name="sql">
+ <![CDATA[SELECT * FROM sales.emp d JOIN
+(SELECT * FROM sales.emp WHERE deptno = 4) e
+ON e.deptno = d.deptno]]>
+ </Resource>
+ <Resource name="planBefore">
+ <![CDATA[
+LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4],
SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8], EMPNO0=[$9], ENAME0=[$10],
JOB0=[$11], MGR0=[$12], HIREDATE0=[$13], SAL0=[$14], COMM0=[$15],
DEPTNO0=[$16], SLACKER0=[$17])
+ LogicalJoin(condition=[=($16, $7)], joinType=[inner])
+ LogicalTableScan(table=[[CATALOG, SALES, EMP]])
+ LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4],
SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8])
+ LogicalFilter(condition=[=($7, 4)])
+ LogicalTableScan(table=[[CATALOG, SALES, EMP]])
+]]>
+ </Resource>
+ <Resource name="planAfter">
+ <![CDATA[
+LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4],
SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8], EMPNO0=[$9], ENAME0=[$10],
JOB0=[$11], MGR0=[$12], HIREDATE0=[$13], SAL0=[$14], COMM0=[$15],
DEPTNO0=[$16], SLACKER0=[$17])
+ LogicalJoin(condition=[=($16, $7)], joinType=[inner])
+ LogicalFilter(condition=[=($7, 4)])
+ LogicalTableScan(table=[[CATALOG, SALES, EMP]])
+ LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4],
SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8])
+ LogicalFilter(condition=[=($7, 4)])
+ LogicalTableScan(table=[[CATALOG, SALES, EMP]])
]]>
</Resource>
</TestCase>