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

amashenkov pushed a commit to branch ignite-28213
in repository https://gitbox.apache.org/repos/asf/ignite-3.git

commit d696026d4be791931c5b2d23c13aeb27d9bb9182
Author: AMashenkov <[email protected]>
AuthorDate: Thu Mar 12 12:33:29 2026 +0300

    Enable JOIN_PUSH_TRANSITIVE_PREDICATES rule
---
 .../internal/sql/engine/prepare/PlannerPhase.java   |  1 +
 .../planner/PredicatePushDownPlannerTest.java       | 21 +++++++++++++++++++++
 2 files changed, 22 insertions(+)

diff --git 
a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/prepare/PlannerPhase.java
 
b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/prepare/PlannerPhase.java
index 93161a67e8d..f653710fadd 100644
--- 
a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/prepare/PlannerPhase.java
+++ 
b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/prepare/PlannerPhase.java
@@ -132,6 +132,7 @@ public enum PlannerPhase {
             CoreRules.FILTER_AGGREGATE_TRANSPOSE,
             CoreRules.FILTER_SET_OP_TRANSPOSE,
             IgniteJoinConditionPushRule.INSTANCE,
+            CoreRules.JOIN_PUSH_TRANSITIVE_PREDICATES,
             CoreRules.FILTER_CORRELATE,
             CoreRules.FILTER_INTO_JOIN,
             CoreRules.FILTER_PROJECT_TRANSPOSE
diff --git 
a/modules/sql-engine/src/test/java/org/apache/ignite/internal/sql/engine/planner/PredicatePushDownPlannerTest.java
 
b/modules/sql-engine/src/test/java/org/apache/ignite/internal/sql/engine/planner/PredicatePushDownPlannerTest.java
index 140e4346192..5481014c392 100644
--- 
a/modules/sql-engine/src/test/java/org/apache/ignite/internal/sql/engine/planner/PredicatePushDownPlannerTest.java
+++ 
b/modules/sql-engine/src/test/java/org/apache/ignite/internal/sql/engine/planner/PredicatePushDownPlannerTest.java
@@ -53,6 +53,27 @@ public class PredicatePushDownPlannerTest extends 
AbstractPlannerTest {
 
     }
 
+    @Test
+    protected void transitivePredicatePushedDownToJoinSources() throws 
Exception {
+        IgniteSchema schema = createSchema(
+                createTable("T1"),
+                createTable("T2")
+        );
+
+        String sql = ""
+                + " SELECT * "
+                + "   FROM t1 "
+                + "  JOIN t2 ON t1.c1 = t2.c1"
+                + "  WHERE t1.c1 = 10";
+
+        assertPlan(sql, schema, nodeOrAnyChild(isInstanceOf(Join.class))
+                
.and(hasChildThat(isInstanceOf(ProjectableFilterableTableScan.class)
+                        .and(scan -> 
scan.condition().toString().contains("=($t0, 10)") && 
scan.getTable().getQualifiedName().contains("T1"))))
+                
.and(hasChildThat(isInstanceOf(ProjectableFilterableTableScan.class)
+                        .and(scan -> 
scan.condition().toString().contains("=($t0, 10)") && 
scan.getTable().getQualifiedName().contains("T2"))))
+        );
+    }
+
     private static IgniteTable createTable(String tableName) {
         return TestBuilders.table()
                 .name(tableName)

Reply via email to