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]