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

yiguolei pushed a commit to branch 2.1-tmp
in repository https://gitbox.apache.org/repos/asf/doris.git

commit 38d580dfb79db993118b8c70a999aab983bd1931
Author: 924060929 <924060...@qq.com>
AuthorDate: Tue Apr 2 10:24:44 2024 +0800

    [fix](Nereids) fix link children failed (#33134)
    
    #32617 introduce a bug: rewrite may not working when plan's arity >= 3.
    this pr fix it
    
    (cherry picked from commit 8b070d1a9d43aa7d25225a79da81573c384ee825)
---
 .../nereids/jobs/rewrite/PlanTreeRewriteJob.java   |  7 ++--
 .../nereids/trees/plans/SetOperationTest.java      | 38 ++++++++++++++++++++++
 2 files changed, 42 insertions(+), 3 deletions(-)

diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/jobs/rewrite/PlanTreeRewriteJob.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/jobs/rewrite/PlanTreeRewriteJob.java
index 5e5acc29f66..c2b136c40fa 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/jobs/rewrite/PlanTreeRewriteJob.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/jobs/rewrite/PlanTreeRewriteJob.java
@@ -110,16 +110,17 @@ public abstract class PlanTreeRewriteJob extends Job {
                 }
             }
             default: {
-                boolean changed = false;
+                boolean anyChanged = false;
                 int i = 0;
                 Plan[] newChildren = new Plan[childrenContext.length];
                 for (Plan oldChild : children) {
                     Plan result = childrenContext[i].result;
-                    changed = result != null && result != oldChild;
+                    boolean changed = result != null && result != oldChild;
                     newChildren[i] = changed ? result : oldChild;
+                    anyChanged |= changed;
                     i++;
                 }
-                return changed ? plan.withChildren(newChildren) : plan;
+                return anyChanged ? plan.withChildren(newChildren) : plan;
             }
         }
     }
diff --git 
a/fe/fe-core/src/test/java/org/apache/doris/nereids/trees/plans/SetOperationTest.java
 
b/fe/fe-core/src/test/java/org/apache/doris/nereids/trees/plans/SetOperationTest.java
index fa7fcddc3f6..b6932f84669 100644
--- 
a/fe/fe-core/src/test/java/org/apache/doris/nereids/trees/plans/SetOperationTest.java
+++ 
b/fe/fe-core/src/test/java/org/apache/doris/nereids/trees/plans/SetOperationTest.java
@@ -17,9 +17,19 @@
 
 package org.apache.doris.nereids.trees.plans;
 
+import org.apache.doris.nereids.analyzer.UnboundAlias;
+import org.apache.doris.nereids.analyzer.UnboundFunction;
+import org.apache.doris.nereids.analyzer.UnboundOneRowRelation;
+import org.apache.doris.nereids.trees.expressions.Alias;
+import org.apache.doris.nereids.trees.expressions.functions.scalar.Concat;
+import org.apache.doris.nereids.trees.expressions.literal.StringLiteral;
+import org.apache.doris.nereids.trees.plans.algebra.SetOperation.Qualifier;
+import org.apache.doris.nereids.trees.plans.logical.LogicalOneRowRelation;
+import org.apache.doris.nereids.trees.plans.logical.LogicalUnion;
 import org.apache.doris.nereids.util.PlanChecker;
 import org.apache.doris.utframe.TestWithFeService;
 
+import com.google.common.collect.ImmutableList;
 import org.junit.jupiter.api.Test;
 
 public class SetOperationTest extends TestWithFeService {
@@ -110,4 +120,32 @@ public class SetOperationTest extends TestWithFeService {
         PlanChecker.from(connectContext)
                 .checkPlannerResult("select 1, 2 union all select 1, 2 union 
all select 10 e, 20 f;");
     }
+
+    @Test
+    public void testUnion6() {
+        LogicalOneRowRelation first = new LogicalOneRowRelation(
+                RelationId.createGenerator().getNextId(), ImmutableList.of(
+                        new Alias(new Concat(new StringLiteral("1"), new 
StringLiteral("1")))
+        ));
+
+        UnboundOneRowRelation second = new UnboundOneRowRelation(
+                RelationId.createGenerator().getNextId(), ImmutableList.of(
+                    new UnboundAlias(new UnboundFunction(
+                            "concat",
+                            ImmutableList.of(new StringLiteral("2"), new 
StringLiteral("2")))
+                    )
+        ));
+
+        LogicalOneRowRelation third = new LogicalOneRowRelation(
+                RelationId.createGenerator().getNextId(), ImmutableList.of(
+                    new Alias(new Concat(new StringLiteral("3"), new 
StringLiteral("3")))
+        ));
+
+        LogicalUnion union = new LogicalUnion(Qualifier.ALL, ImmutableList.of(
+                first, second, third
+        ));
+        PlanChecker.from(connectContext, union)
+                .analyze()
+                .rewrite();
+    }
 }


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscr...@doris.apache.org
For additional commands, e-mail: commits-h...@doris.apache.org

Reply via email to