This is an automated email from the ASF dual-hosted git repository.
liulijia pushed a commit to branch branch-3.0
in repository https://gitbox.apache.org/repos/asf/doris.git
The following commit(s) were added to refs/heads/branch-3.0 by this push:
new a70eed38254 branch-3.0: [fix](nereids)ReorderJoin rule should not
absorb mark join to multi join #56837 (#56981)
a70eed38254 is described below
commit a70eed38254d739558cbcdae9f16c32b6cfda8ac
Author: Lijia Liu <[email protected]>
AuthorDate: Thu Oct 16 11:28:48 2025 +0800
branch-3.0: [fix](nereids)ReorderJoin rule should not absorb mark join to
multi join #56837 (#56981)
Cherry-picked from #56837
Co-authored-by: starocean999 <[email protected]>
---
.../doris/nereids/rules/rewrite/ReorderJoin.java | 4 ++++
.../doris/nereids/rules/rewrite/ReorderJoinTest.java | 19 +++++++++++++++++++
2 files changed, 23 insertions(+)
diff --git
a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/rewrite/ReorderJoin.java
b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/rewrite/ReorderJoin.java
index 37765dd3623..0a0971e3de2 100644
---
a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/rewrite/ReorderJoin.java
+++
b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/rewrite/ReorderJoin.java
@@ -124,6 +124,10 @@ public class ReorderJoin extends OneRewriteRuleFactory {
join = (LogicalJoin<?, ?>) plan;
}
+ if (join.isMarkJoin()) {
+ return plan;
+ }
+
if (join.getJoinType().isInnerOrCrossJoin()) {
joinFilter.addAll(join.getHashJoinConjuncts());
joinFilter.addAll(join.getOtherJoinConjuncts());
diff --git
a/fe/fe-core/src/test/java/org/apache/doris/nereids/rules/rewrite/ReorderJoinTest.java
b/fe/fe-core/src/test/java/org/apache/doris/nereids/rules/rewrite/ReorderJoinTest.java
index 42f87cdd557..047b7bc27ee 100644
---
a/fe/fe-core/src/test/java/org/apache/doris/nereids/rules/rewrite/ReorderJoinTest.java
+++
b/fe/fe-core/src/test/java/org/apache/doris/nereids/rules/rewrite/ReorderJoinTest.java
@@ -105,6 +105,25 @@ class ReorderJoinTest implements MemoPatternMatchSupported
{
);
}
+ @Test
+ public void testLeftSemiMarkJoin() {
+ LogicalPlan plan = new LogicalPlanBuilder(scan1)
+ .markJoin(scan2, JoinType.LEFT_SEMI_JOIN, Pair.of(0, 0))
+ .join(scan3, JoinType.INNER_JOIN, Pair.of(0, 0))
+ .filter(new EqualTo(scan3.getOutput().get(0),
scan1.getOutput().get(0)))
+ .build();
+ ConnectContext connectContext = MemoTestUtils.createConnectContext();
+
connectContext.getSessionVariable().setDisableNereidsRules("PRUNE_EMPTY_PARTITION");
+ PlanChecker.from(connectContext, plan)
+ .applyBottomUp(new ReorderJoin())
+ .matchesFromRoot(
+ logicalJoin(
+ logicalJoin().when(join -> join.isMarkJoin()),
+ logicalOlapScan()
+ ).whenNot(join -> join.getJoinType().isCrossJoin())
+ );
+ }
+
@Test
public void testRightSemiJoin() {
LogicalPlan plan1 = new LogicalPlanBuilder(scan1)
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]