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