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

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

commit 8c18a52aa2c0dc0bf95bee8b62b0b5e4d8ab55c8
Author: preetham0202 <[email protected]>
AuthorDate: Wed Sep 24 15:33:17 2025 +0530

    [ASTERIXDB-3648][COMP] Fix incorrect replacement of Left Outer Joins with 
Unnest in CBO
    
    - user model changes: no
    - storage format changes: no
    - interface changes: no
    
    Ext-ref: MB-68691
    
    Change-Id: I3f1d4d093cf1bd23f5db75fce569fd174e8cedb4
    Reviewed-on: https://asterix-gerrit.ics.uci.edu/c/asterixdb/+/20426
    Integration-Tests: Jenkins <[email protected]>
    Reviewed-by: Preetham Poluparthi <[email protected]>
    Reviewed-by: <[email protected]>
    Tested-by: Preetham Poluparthi <[email protected]>
---
 .../asterix/optimizer/rules/cbo/EnumerateJoinsRule.java    | 14 ++++++++------
 1 file changed, 8 insertions(+), 6 deletions(-)

diff --git 
a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/cbo/EnumerateJoinsRule.java
 
b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/cbo/EnumerateJoinsRule.java
index 8406520070..b9b35c2760 100644
--- 
a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/cbo/EnumerateJoinsRule.java
+++ 
b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/cbo/EnumerateJoinsRule.java
@@ -308,7 +308,7 @@ public class EnumerateJoinsRule implements 
IAlgebraicRewriteRule {
                 modifyUnnestInfo = new ArrayList<>();
                 collectUnnestModificationInfo(null, root, cheapestPlanNode);
                 for (int k = 0; k < modifyUnnestInfo.size(); k++) {
-                    modifyTree(null, root, k);
+                    modifyTree(null, 0, root, k);
                     if (newRootAfterUnnest != null) {
                         root = newRootAfterUnnest;
                     }
@@ -384,7 +384,7 @@ public class EnumerateJoinsRule implements 
IAlgebraicRewriteRule {
         return false;
     }
 
-    private void modifyTree(ILogicalOperator parent, ILogicalOperator op, int 
k) {
+    private void modifyTree(ILogicalOperator parent, int index, 
ILogicalOperator op, int k) {
         if (modifyUnnestInfo.get(k).second == op) { // found the one to get 
rid off; this should be an OJ
             int size = modifyUnnestInfo.get(k).third.size();
             UnnestOperator uOp = (UnnestOperator) 
modifyUnnestInfo.get(k).third.get(size - 1); // UnnestOp is always at the end
@@ -394,20 +394,22 @@ public class EnumerateJoinsRule implements 
IAlgebraicRewriteRule {
                 ILogicalOperator q = newRootAfterUnnest;
                 if (modifyUnnestInfo.get(k).third.size() > 1) {
                     for (ILogicalOperator p : modifyUnnestInfo.get(k).third) {
-                        q.getInputs().get(0).setValue(p);
+                        q.getInputs().get(index).setValue(p);
                         q = p;
                     }
                 }
             } else {
                 ILogicalOperator q = parent;
                 for (ILogicalOperator p : modifyUnnestInfo.get(k).third) {
-                    q.getInputs().get(0).setValue(p);
+                    q.getInputs().get(index).setValue(p);
                     q = p;
                 }
             }
         }
-        for (Mutable<ILogicalOperator> input : op.getInputs()) {
-            modifyTree(op, input.getValue(), k);
+        int size = op.getInputs().size();
+        for (int i = 0; i < size; i++) {
+            Mutable<ILogicalOperator> input = op.getInputs().get(i);
+            modifyTree(op, i, input.getValue(), k);
         }
     }
 

Reply via email to