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)
