This is an automated email from the ASF dual-hosted git repository. yiguolei pushed a commit to branch branch-2.1 in repository https://gitbox.apache.org/repos/asf/doris.git
commit 4a5283b466e235e6d4fdb5dde86e3c647d892942 Author: starocean999 <[email protected]> AuthorDate: Wed Feb 28 22:31:29 2024 +0800 [fix](nereids)need add mark join slot to upper project in PullUpProjectUnderApply rule (#31408) --- .../nereids/rules/rewrite/PullUpProjectUnderApply.java | 3 +++ .../trees/expressions/MarkJoinSlotReference.java | 2 +- .../rules/rewrite/PushDownAliasThroughJoinTest.java | 18 +++--------------- 3 files changed, 7 insertions(+), 16 deletions(-) diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/rewrite/PullUpProjectUnderApply.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/rewrite/PullUpProjectUnderApply.java index 25c17b8f189..79750d55f6f 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/rewrite/PullUpProjectUnderApply.java +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/rewrite/PullUpProjectUnderApply.java @@ -65,6 +65,9 @@ public class PullUpProjectUnderApply extends OneRewriteRuleFactory { "ScalarSubquery should only have one output column"); newProjects.add(project.getProjects().get(0)); } + if (apply.isMarkJoin()) { + newProjects.add(apply.getMarkJoinSlotReference().get()); + } return project.withProjectsAndChild(newProjects, newCorrelate); }).toRule(RuleType.PULL_UP_PROJECT_UNDER_APPLY); } diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/MarkJoinSlotReference.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/MarkJoinSlotReference.java index 35b217b8a9e..b9711ed52a1 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/MarkJoinSlotReference.java +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/MarkJoinSlotReference.java @@ -25,7 +25,7 @@ import com.google.common.collect.ImmutableList; /** * A special type of column that will be generated to replace the subquery when unnesting the subquery of MarkJoin. */ -public class MarkJoinSlotReference extends SlotReference implements SlotNotFromChildren { +public class MarkJoinSlotReference extends SlotReference { final boolean existsHasAgg; public MarkJoinSlotReference(String name) { diff --git a/fe/fe-core/src/test/java/org/apache/doris/nereids/rules/rewrite/PushDownAliasThroughJoinTest.java b/fe/fe-core/src/test/java/org/apache/doris/nereids/rules/rewrite/PushDownAliasThroughJoinTest.java index e0e05716f1d..7ec6e0f3979 100644 --- a/fe/fe-core/src/test/java/org/apache/doris/nereids/rules/rewrite/PushDownAliasThroughJoinTest.java +++ b/fe/fe-core/src/test/java/org/apache/doris/nereids/rules/rewrite/PushDownAliasThroughJoinTest.java @@ -18,10 +18,6 @@ package org.apache.doris.nereids.rules.rewrite; import org.apache.doris.common.Pair; -import org.apache.doris.nereids.trees.expressions.Alias; -import org.apache.doris.nereids.trees.expressions.ExprId; -import org.apache.doris.nereids.trees.expressions.MarkJoinSlotReference; -import org.apache.doris.nereids.trees.expressions.NamedExpression; import org.apache.doris.nereids.trees.plans.JoinType; import org.apache.doris.nereids.trees.plans.logical.LogicalOlapScan; import org.apache.doris.nereids.trees.plans.logical.LogicalPlan; @@ -34,8 +30,6 @@ import org.apache.doris.nereids.util.PlanConstructor; import com.google.common.collect.ImmutableList; import org.junit.jupiter.api.Test; -import java.util.List; - class PushDownAliasThroughJoinTest implements MemoPatternMatchSupported { private static final LogicalOlapScan scan1 = PlanConstructor.newLogicalOlapScan(0, "t1", 0); private static final LogicalOlapScan scan2 = PlanConstructor.newLogicalOlapScan(1, "t2", 0); @@ -108,18 +102,12 @@ class PushDownAliasThroughJoinTest implements MemoPatternMatchSupported { @Test void testNoPushdownMarkJoin() { - List<NamedExpression> projects = - ImmutableList.of(new MarkJoinSlotReference(new ExprId(101), "markSlot1", false), - new Alias(new MarkJoinSlotReference(new ExprId(102), "markSlot2", false), - "markSlot2")); LogicalPlan plan = new LogicalPlanBuilder(scan1) - .join(scan2, JoinType.INNER_JOIN, Pair.of(0, 0)).projectExprs(projects).build(); + .markJoin(scan2, JoinType.LEFT_SEMI_JOIN, Pair.of(0, 0)) + .alias(ImmutableList.of(2), ImmutableList.of("fake")).build(); PlanChecker.from(MemoTestUtils.createConnectContext(), plan) .applyTopDown(new PushDownAliasThroughJoin()) - .matches(logicalProject(logicalJoin(logicalOlapScan(), logicalOlapScan())) - .when(project -> project.getProjects().get(0).toSql().equals("markSlot1") - && project.getProjects().get(1).toSql() - .equals("markSlot2 AS `markSlot2`"))); + .matches(logicalProject(logicalJoin(logicalOlapScan(), logicalOlapScan()))); } } --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
