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

yashmayya pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/pinot.git


The following commit(s) were added to refs/heads/master by this push:
     new 901bdf998f4 Re-enable JoinPushTransitivePredicates optimization rule 
by default (#18720)
901bdf998f4 is described below

commit 901bdf998f4b82e56dafa3938fede951f9e6299d
Author: Yash Mayya <[email protected]>
AuthorDate: Wed Jun 10 10:28:11 2026 -0700

    Re-enable JoinPushTransitivePredicates optimization rule by default (#18720)
---
 .../java/org/apache/pinot/query/QueryCompilationTest.java     |  2 +-
 .../src/test/resources/queries/ExplainPhysicalPlans.json      |  6 ++++--
 pinot-query-planner/src/test/resources/queries/JoinPlans.json | 11 +++++++----
 .../src/test/resources/queries/PhysicalOptimizerPlans.json    |  7 ++++---
 .../main/java/org/apache/pinot/spi/utils/CommonConstants.java |  1 -
 5 files changed, 16 insertions(+), 11 deletions(-)

diff --git 
a/pinot-query-planner/src/test/java/org/apache/pinot/query/QueryCompilationTest.java
 
b/pinot-query-planner/src/test/java/org/apache/pinot/query/QueryCompilationTest.java
index fc279cd2965..142eddcb05b 100644
--- 
a/pinot-query-planner/src/test/java/org/apache/pinot/query/QueryCompilationTest.java
+++ 
b/pinot-query-planner/src/test/java/org/apache/pinot/query/QueryCompilationTest.java
@@ -344,7 +344,7 @@ public class QueryCompilationTest extends 
QueryEnvironmentTestBase {
   public void testJoinPushTransitivePredicate() {
     // queries involving extra predicate on join keys
     // should be optimized to push the predicate to both sides of the join if 
applicable
-    String query = "SET usePlannerRules='JoinPushTransitivePredicates'; 
EXPLAIN PLAN FOR\n"
+    String query = "EXPLAIN PLAN FOR\n"
         + "SELECT * FROM a\n"
         + "JOIN b\n"
         + "ON a.col1 = b.col1\n"
diff --git 
a/pinot-query-planner/src/test/resources/queries/ExplainPhysicalPlans.json 
b/pinot-query-planner/src/test/resources/queries/ExplainPhysicalPlans.json
index 6db0627ff64..b64b2da593d 100644
--- a/pinot-query-planner/src/test/resources/queries/ExplainPhysicalPlans.json
+++ b/pinot-query-planner/src/test/resources/queries/ExplainPhysicalPlans.json
@@ -181,7 +181,8 @@
           "\n                └── [2]@localhost:1|[1] AGGREGATE_LEAF",
           "\n                    └── [2]@localhost:1|[1] JOIN",
           "\n                        ├── [2]@localhost:1|[1] PROJECT",
-          "\n                        │   └── [2]@localhost:1|[1] TABLE SCAN 
(a) null",
+          "\n                        │   └── [2]@localhost:1|[1] FILTER",
+          "\n                        │       └── [2]@localhost:1|[1] TABLE 
SCAN (a) null",
           "\n                        └── [2]@localhost:1|[1] 
MAIL_RECEIVE(BROADCAST_DISTRIBUTED)",
           "\n                            ├── [3]@localhost:2|[2] 
MAIL_SEND(BROADCAST_DISTRIBUTED)->{[2]@localhost:1|[0, 1],[2]@localhost:2|[2, 
3]} (Subtree Omitted)",
           "\n                            ├── [3]@localhost:2|[3] 
MAIL_SEND(BROADCAST_DISTRIBUTED)->{[2]@localhost:1|[0, 1],[2]@localhost:2|[2, 
3]} (Subtree Omitted)",
@@ -209,7 +210,8 @@
           "\n                └── [2]@localhost:1|[1] AGGREGATE_LEAF",
           "\n                    └── [2]@localhost:1|[1] JOIN",
           "\n                        ├── [2]@localhost:1|[1] PROJECT",
-          "\n                        │   └── [2]@localhost:1|[1] TABLE SCAN 
(a) null",
+          "\n                        │   └── [2]@localhost:1|[1] FILTER",
+          "\n                        │       └── [2]@localhost:1|[1] TABLE 
SCAN (a) null",
           "\n                        └── [2]@localhost:1|[1] 
MAIL_RECEIVE(SINGLETON)",
           "\n                            ├── [3]@localhost:2|[2] 
MAIL_SEND(SINGLETON)[PARTITIONED]->{[2]@localhost:2|[2]} (Subtree Omitted)",
           "\n                            ├── [3]@localhost:2|[3] 
MAIL_SEND(SINGLETON)[PARTITIONED]->{[2]@localhost:2|[3]} (Subtree Omitted)",
diff --git a/pinot-query-planner/src/test/resources/queries/JoinPlans.json 
b/pinot-query-planner/src/test/resources/queries/JoinPlans.json
index 113b696a075..a5fde2dc628 100644
--- a/pinot-query-planner/src/test/resources/queries/JoinPlans.json
+++ b/pinot-query-planner/src/test/resources/queries/JoinPlans.json
@@ -518,7 +518,8 @@
           "\nLogicalJoin(condition=[=($2, $9)], joinType=[semi])",
           "\n  LogicalJoin(condition=[=($1, $9)], joinType=[semi])",
           "\n    LogicalJoin(condition=[=($1, $9)], joinType=[semi])",
-          "\n      PinotLogicalTableScan(table=[[default, a]])",
+          "\n      LogicalFilter(condition=[<($2, 100)])",
+          "\n        PinotLogicalTableScan(table=[[default, a]])",
           "\n      PinotLogicalExchange(distribution=[broadcast], 
relExchangeType=[PIPELINE_BREAKER])",
           "\n        LogicalProject(col1=[$0])",
           "\n          LogicalFilter(condition=[SEARCH($1, 
Sarg[(-∞.._UTF-8'bar':VARCHAR CHARACTER SET \"UTF-8\"), (_UTF-8'bar':VARCHAR 
CHARACTER SET \"UTF-8\".._UTF-8'foo':VARCHAR CHARACTER SET \"UTF-8\"), 
(_UTF-8'foo':VARCHAR CHARACTER SET \"UTF-8\"..+∞)]:VARCHAR CHARACTER SET 
\"UTF-8\")])",
@@ -547,7 +548,8 @@
           "\n          LogicalProject(col3=[$1])",
           "\n            LogicalJoin(condition=[=($0, $2)], joinType=[semi])",
           "\n              LogicalProject(col2=[$1], col3=[$2])",
-          "\n                PinotLogicalTableScan(table=[[default, a]])",
+          "\n                LogicalFilter(condition=[<($2, 100)])",
+          "\n                  PinotLogicalTableScan(table=[[default, a]])",
           "\n              PinotLogicalExchange(distribution=[broadcast], 
relExchangeType=[PIPELINE_BREAKER])",
           "\n                LogicalProject(col1=[$0])",
           "\n                  LogicalFilter(condition=[SEARCH($1, 
Sarg[(-∞.._UTF-8'bar':VARCHAR CHARACTER SET \"UTF-8\"), (_UTF-8'bar':VARCHAR 
CHARACTER SET \"UTF-8\".._UTF-8'foo':VARCHAR CHARACTER SET \"UTF-8\"), 
(_UTF-8'foo':VARCHAR CHARACTER SET \"UTF-8\"..+∞)]:VARCHAR CHARACTER SET 
\"UTF-8\")])",
@@ -575,7 +577,8 @@
           "\n            LogicalProject(col1=[$0], col3=[$2])",
           "\n              LogicalJoin(condition=[=($1, $3)], 
joinType=[semi])",
           "\n                LogicalProject(col1=[$0], col2=[$1], col3=[$2])",
-          "\n                  PinotLogicalTableScan(table=[[default, a]])",
+          "\n                  LogicalFilter(condition=[<($2, 100)])",
+          "\n                    PinotLogicalTableScan(table=[[default, a]])",
           "\n                PinotLogicalExchange(distribution=[broadcast], 
relExchangeType=[PIPELINE_BREAKER])",
           "\n                  LogicalProject(col1=[$0])",
           "\n                    LogicalFilter(condition=[SEARCH($1, 
Sarg[(-∞.._UTF-8'bar':VARCHAR CHARACTER SET \"UTF-8\"), (_UTF-8'bar':VARCHAR 
CHARACTER SET \"UTF-8\".._UTF-8'foo':VARCHAR CHARACTER SET \"UTF-8\"), 
(_UTF-8'foo':VARCHAR CHARACTER SET \"UTF-8\"..+∞)]:VARCHAR CHARACTER SET 
\"UTF-8\")])",
@@ -602,7 +605,7 @@
           "\n          PinotLogicalTableScan(table=[[default, a]])",
           "\n  PinotLogicalExchange(distribution=[broadcast], 
relExchangeType=[PIPELINE_BREAKER])",
           "\n    LogicalProject(col3=[$2])",
-          "\n      LogicalFilter(condition=[SEARCH($1, 
Sarg[(-∞.._UTF-8'bar':VARCHAR CHARACTER SET \"UTF-8\"), (_UTF-8'bar':VARCHAR 
CHARACTER SET \"UTF-8\".._UTF-8'foo':VARCHAR CHARACTER SET \"UTF-8\"), 
(_UTF-8'foo':VARCHAR CHARACTER SET \"UTF-8\"..+∞)]:VARCHAR CHARACTER SET 
\"UTF-8\")])",
+          "\n      LogicalFilter(condition=[AND(SEARCH($1, 
Sarg[(-∞.._UTF-8'bar':VARCHAR CHARACTER SET \"UTF-8\"), (_UTF-8'bar':VARCHAR 
CHARACTER SET \"UTF-8\".._UTF-8'foo':VARCHAR CHARACTER SET \"UTF-8\"), 
(_UTF-8'foo':VARCHAR CHARACTER SET \"UTF-8\"..+∞)]:VARCHAR CHARACTER SET 
\"UTF-8\"), <($2, 100))])",
           "\n        PinotLogicalTableScan(table=[[default, a]])",
           "\n"
         ]
diff --git 
a/pinot-query-planner/src/test/resources/queries/PhysicalOptimizerPlans.json 
b/pinot-query-planner/src/test/resources/queries/PhysicalOptimizerPlans.json
index 5914526e0b1..771374c9fc5 100644
--- a/pinot-query-planner/src/test/resources/queries/PhysicalOptimizerPlans.json
+++ b/pinot-query-planner/src/test/resources/queries/PhysicalOptimizerPlans.json
@@ -73,13 +73,14 @@
           "\n        PhysicalJoin(condition=[=($0, $1)], joinType=[inner])",
           "\n          
PhysicalExchange(exchangeStrategy=[PARTITIONING_EXCHANGE], distKeys=[[0]])",
           "\n            PhysicalProject(col1=[$0])",
-          "\n              PhysicalTableScan(table=[[default, a]])",
+          "\n              PhysicalFilter(condition=[=($0, _UTF-8'foo')])",
+          "\n                PhysicalTableScan(table=[[default, a]])",
           "\n          
PhysicalExchange(exchangeStrategy=[PARTITIONING_EXCHANGE], distKeys=[[0]])",
           "\n            PhysicalProject(name=[$1])",
           "\n              PhysicalJoin(condition=[=($0, $2)], 
joinType=[inner])",
-          "\n                PhysicalValues(tuples=[[{ 1, _UTF-8'foo' }]])",
+          "\n                PhysicalValues(tuples=[[]])",
           "\n                PhysicalProject(EXPR$0=[$0])",
-          "\n                  PhysicalValues(tuples=[[{ 2, _UTF-8'bar' }]])",
+          "\n                  PhysicalValues(tuples=[[]])",
           "\n"
         ]
       }
diff --git 
a/pinot-spi/src/main/java/org/apache/pinot/spi/utils/CommonConstants.java 
b/pinot-spi/src/main/java/org/apache/pinot/spi/utils/CommonConstants.java
index 17084994f6d..0a6afcbb976 100644
--- a/pinot-spi/src/main/java/org/apache/pinot/spi/utils/CommonConstants.java
+++ b/pinot-spi/src/main/java/org/apache/pinot/spi/utils/CommonConstants.java
@@ -1092,7 +1092,6 @@ public class CommonConstants {
         PlannerRuleNames.AGGREGATE_UNION_AGGREGATE,
         PlannerRuleNames.JOIN_TO_ENRICHED_JOIN,
         PlannerRuleNames.AGGREGATE_FUNCTION_REWRITE,
-        PlannerRuleNames.JOIN_PUSH_TRANSITIVE_PREDICATES,
         // Stock Calcite rule kept opt-in via usePlannerRules — see 
SORT_PROJECT_TRANSPOSE javadoc
         // above for the rationale (firing in BASIC_RULES disrupts 
ProjectToSemiJoinRule on
         // partition-hinted IN(SELECT) queries, breaking colocated broadcast 
semi-joins).


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to