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

starocean999 pushed a commit to branch branch-2.0
in repository https://gitbox.apache.org/repos/asf/doris.git


The following commit(s) were added to refs/heads/branch-2.0 by this push:
     new 48625f73cde [fix](nereids)need add mark join slot to upper project in 
PullUpProjectUnderApply rule (#31421)
48625f73cde is described below

commit 48625f73cde533b1d98705f28b99965cd5320e6a
Author: starocean999 <[email protected]>
AuthorDate: Mon Mar 4 11:50:09 2024 +0800

    [fix](nereids)need add mark join slot to upper project in 
PullUpProjectUnderApply rule (#31421)
---
 .../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 543ff0933b5..ab7c3a2332d 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]

Reply via email to