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