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 0423419e7f5eb0659c91b9a0a850001ade18be12
Author: zzwwhh <30350667+iwanttobepower...@users.noreply.github.com>
AuthorDate: Thu Apr 11 16:45:20 2024 +0800

    [fix](nereids) do not transpose semi join agg when mark join (#32475)
---
 .../nereids/rules/rewrite/TransposeSemiJoinAgg.java      |  1 +
 .../rules/rewrite/TransposeSemiJoinAggProject.java       |  1 +
 .../transposeJoin/transposeSemiJoinAgg.out               |  8 ++++++++
 .../transposeJoin/transposeSemiJoinAgg.groovy            | 16 ++++++++++++++++
 4 files changed, 26 insertions(+)

diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/rewrite/TransposeSemiJoinAgg.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/rewrite/TransposeSemiJoinAgg.java
index 9ae2e14be56..4006d614ca8 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/rewrite/TransposeSemiJoinAgg.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/rewrite/TransposeSemiJoinAgg.java
@@ -36,6 +36,7 @@ public class TransposeSemiJoinAgg extends 
OneRewriteRuleFactory {
         return logicalJoin(logicalAggregate(), any())
                 .whenNot(join -> 
ConnectContext.get().getSessionVariable().isDisableJoinReorder())
                 .when(join -> join.getJoinType().isLeftSemiOrAntiJoin())
+                .whenNot(join -> join.isMarkJoin())
                 .then(join -> {
                     LogicalAggregate<Plan> aggregate = join.left();
                     if (!canTranspose(aggregate, join)) {
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/rewrite/TransposeSemiJoinAggProject.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/rewrite/TransposeSemiJoinAggProject.java
index 9c6b355e465..17ca8f71395 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/rewrite/TransposeSemiJoinAggProject.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/rewrite/TransposeSemiJoinAggProject.java
@@ -33,6 +33,7 @@ public class TransposeSemiJoinAggProject extends 
OneRewriteRuleFactory {
         return logicalJoin(logicalProject(logicalAggregate()), any())
                 .whenNot(join -> 
ConnectContext.get().getSessionVariable().isDisableJoinReorder())
                 .when(join -> join.getJoinType().isLeftSemiOrAntiJoin())
+                .whenNot(join -> join.isMarkJoin())
                 .when(join -> join.left().isAllSlots())
                 .then(join -> {
                     LogicalProject<LogicalAggregate<Plan>> project = 
join.left();
diff --git 
a/regression-test/data/nereids_rules_p0/transposeJoin/transposeSemiJoinAgg.out 
b/regression-test/data/nereids_rules_p0/transposeJoin/transposeSemiJoinAgg.out
index d71c15d216f..1b9ec434894 100644
--- 
a/regression-test/data/nereids_rules_p0/transposeJoin/transposeSemiJoinAgg.out
+++ 
b/regression-test/data/nereids_rules_p0/transposeJoin/transposeSemiJoinAgg.out
@@ -79,3 +79,11 @@ PhysicalResultSink
 ----filter((T2.__DORIS_DELETE_SIGN__ = 0))
 ------PhysicalOlapScan[T2]
 
+-- !groupby_negative_case3 --
+PhysicalResultSink
+--hashJoin[LEFT_SEMI_JOIN] hashCondition=() otherCondition=() 
markCondition=((T3.len = T3.len))
+----hashAgg[GLOBAL]
+------hashAgg[LOCAL]
+--------PhysicalOlapScan[T3]
+----PhysicalOlapScan[T3]
+
diff --git 
a/regression-test/suites/nereids_rules_p0/transposeJoin/transposeSemiJoinAgg.groovy
 
b/regression-test/suites/nereids_rules_p0/transposeJoin/transposeSemiJoinAgg.groovy
index a0e411073fe..305a03f067c 100644
--- 
a/regression-test/suites/nereids_rules_p0/transposeJoin/transposeSemiJoinAgg.groovy
+++ 
b/regression-test/suites/nereids_rules_p0/transposeJoin/transposeSemiJoinAgg.groovy
@@ -78,6 +78,17 @@ suite("transposeSemiJoinAgg") {
     sql '''
     alter table T2 modify column a set stats ('ndv'='100', 'num_nulls'='0', 
'row_count'='100');
     '''
+
+    sql "drop table if exists T3;"
+    sql """
+        CREATE TABLE T3 (
+        str varchar(100),
+        len  int
+        ) DUPLICATE KEY(str)
+        DISTRIBUTED BY HASH(str) BUCKETS 10
+        PROPERTIES("replication_num" = "1");
+        """
+
     // RULE: TransposeSemiJoinAggProject
     // 1. group-by(without grouping sets) 
     // agg-leftSemi => leftSemi-agg
@@ -146,4 +157,9 @@ suite("transposeSemiJoinAgg") {
         from (select sum(C) as D from T1 group by grouping sets ((a, b), (a), 
())) T3
         left semi join T2 on T3.D=T2.a;
         """
+    // https://github.com/apache/doris/issues/31308
+    qt_groupby_negative_case3 """
+        explain shape plan
+        select case when len in (select len from T3) then 1 else 1 end c1 from 
T3 group by len;
+        """
 }
\ No newline at end of file


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscr...@doris.apache.org
For additional commands, e-mail: commits-h...@doris.apache.org

Reply via email to