You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@asterixdb.apache.org by AsterixDB Code Review <do...@asterix-gerrit.ics.uci.edu> on 2026/04/29 10:12:08 UTC

[S] Change in asterixdb[lumina]: [ASTERIXDB-3606][COMP]: Fix join condition handling for bushy plans

From Preetham Poluparthi <pr...@apache.org>:

Preetham Poluparthi has uploaded this change for review. ( https://asterix-gerrit.ics.uci.edu/c/asterixdb/+/21169?usp=email )


Change subject: [ASTERIXDB-3606][COMP]: Fix join condition handling for bushy plans
......................................................................

[ASTERIXDB-3606][COMP]: Fix join condition handling for bushy plans

 - user model changes: no
 - storage format changes: no
 - interface changes: no

Details:
Previously, join conditions were added assuming a zig zag join tree, which led to incorrect results for bushy plans. This change updates the logic to correctly handle join condition assignment in bushy join trees. This was seen when SelectPushDown was changed to bottom up in tpcds:q92
Ext-ref: MB-71042

Change-Id: I2c115afa0ab4e5b09046d75d8b344d39ce84e0fb
---
M asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/cbo/JoinNode.java
1 file changed, 6 insertions(+), 16 deletions(-)



  git pull ssh://asterix-gerrit.ics.uci.edu:29418/asterixdb refs/changes/69/21169/1

diff --git a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/cbo/JoinNode.java b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/cbo/JoinNode.java
index d6b65ed..28d540c 100644
--- a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/cbo/JoinNode.java
+++ b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/cbo/JoinNode.java
@@ -455,24 +455,14 @@
 
     private List<Integer> getNewJoinConditionsOnly() {
         List<Integer> newJoinConditions = new ArrayList<>();
-        JoinNode leftJn = this.leftJn;
-        JoinNode rightJn = this.rightJn;
-        // find the new table being added. This assume only zig zag trees for now.
-        DatasetRegistry.DatasetSubset newTableBits = joinEnum.datasetRegistry.new DatasetSubset();
-        if (leftJn.jnArrayIndex <= joinEnum.numberOfTerms) {
-            newTableBits = leftJn.datasetSubset;
-        } else if (rightJn.jnArrayIndex <= joinEnum.numberOfTerms) {
-            newTableBits = rightJn.datasetSubset;
-        }
+        DatasetRegistry.DatasetSubset leftSubset = this.leftJn.datasetSubset, rightSubset = this.rightJn.datasetSubset;
 
-        if (LOGGER.isTraceEnabled() && newTableBits.size() == 0) {
-            LOGGER.trace("newTable Bits == 0");
-        }
-
-        // All the new join predicates will have these bits turned on
         for (int idx : this.applicableJoinConditions) {
-            if (joinEnum.datasetRegistry.intersection(joinEnum.joinConditions.get(idx).getDatasetSubset(), newTableBits)
-                    .size() > 0) {
+            if (joinEnum.datasetRegistry.intersection(joinEnum.joinConditions.get(idx).getDatasetSubset(), leftSubset)
+                    .size() > 0
+                    && joinEnum.datasetRegistry
+                            .intersection(joinEnum.joinConditions.get(idx).getDatasetSubset(), rightSubset)
+                            .size() > 0) {
                 newJoinConditions.add(idx);
             }
         }

-- 
To view, visit https://asterix-gerrit.ics.uci.edu/c/asterixdb/+/21169?usp=email
To unsubscribe, or for help writing mail filters, visit https://asterix-gerrit.ics.uci.edu/settings?usp=email

Gerrit-MessageType: newchange
Gerrit-Project: asterixdb
Gerrit-Branch: lumina
Gerrit-Change-Id: I2c115afa0ab4e5b09046d75d8b344d39ce84e0fb
Gerrit-Change-Number: 21169
Gerrit-PatchSet: 1
Gerrit-Owner: Preetham Poluparthi <pr...@apache.org>