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 b86bd2672fef8df4d323b99e5b11b912e3c54b3f Author: zzwwhh <[email protected]> AuthorDate: Thu Feb 1 14:39:11 2024 +0800 [fix](Nereids) add logical project to prevent extra wrong column (#30459) Issue Number: close #30264 --- .../apache/doris/nereids/jobs/executor/Analyzer.java | 4 +++- .../nereids/rules/analysis/SubqueryToApply.java | 10 ++-------- .../sub_query_diff_old_optimize.out | 3 +++ .../sub_query_diff_old_optimize.groovy | 20 ++++++++++++++++++++ 4 files changed, 28 insertions(+), 9 deletions(-) diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/jobs/executor/Analyzer.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/jobs/executor/Analyzer.java index 2ae15d08d4e..2f3e0ccfe2f 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/nereids/jobs/executor/Analyzer.java +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/jobs/executor/Analyzer.java @@ -45,6 +45,7 @@ import org.apache.doris.nereids.rules.analysis.ReplaceExpressionByChildOutput; import org.apache.doris.nereids.rules.analysis.ResolveOrdinalInOrderByAndGroupBy; import org.apache.doris.nereids.rules.analysis.SubqueryToApply; import org.apache.doris.nereids.rules.analysis.UserAuthentication; +import org.apache.doris.nereids.rules.rewrite.MergeProjects; import org.apache.doris.nereids.rules.rewrite.SemiJoinCommute; import java.util.List; @@ -172,7 +173,8 @@ public class Analyzer extends AbstractBatchJobExecutor { new CollectJoinConstraint() ), topDown(new LeadingJoin()), - bottomUp(new SubqueryToApply()) + bottomUp(new SubqueryToApply()), + topDown(new MergeProjects()) ); } } diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/analysis/SubqueryToApply.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/analysis/SubqueryToApply.java index b2f202aad8b..4bb89588b82 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/analysis/SubqueryToApply.java +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/analysis/SubqueryToApply.java @@ -134,14 +134,8 @@ public class SubqueryToApply implements AnalysisRuleFactory { } Set<Expression> conjuncts = ImmutableSet.copyOf(newConjuncts.build()); Plan newFilter = new LogicalFilter<>(conjuncts, applyPlan); - if (conjuncts.stream().flatMap(c -> c.children().stream()) - .anyMatch(MarkJoinSlotReference.class::isInstance)) { - return new LogicalProject<>(applyPlan.getOutput().stream() - .filter(s -> !(s instanceof MarkJoinSlotReference)) - .collect(ImmutableList.toImmutableList()), newFilter); - } else { - return newFilter; - } + return new LogicalProject<>(filter.getOutput().stream().collect(ImmutableList.toImmutableList()), + newFilter); }) ), RuleType.PROJECT_SUBQUERY_TO_APPLY.build(logicalProject().thenApply(ctx -> { diff --git a/regression-test/data/nereids_syntax_p0/sub_query_diff_old_optimize.out b/regression-test/data/nereids_syntax_p0/sub_query_diff_old_optimize.out index aad0c33b5b4..b7e297c39fe 100644 --- a/regression-test/data/nereids_syntax_p0/sub_query_diff_old_optimize.out +++ b/regression-test/data/nereids_syntax_p0/sub_query_diff_old_optimize.out @@ -29,6 +29,9 @@ -- !alias_not_exist -- 2 5 +-- !alias_issue30264 -- +a + -- !exists_subquery_with_limit -- 1 2 1 3 diff --git a/regression-test/suites/nereids_syntax_p0/sub_query_diff_old_optimize.groovy b/regression-test/suites/nereids_syntax_p0/sub_query_diff_old_optimize.groovy index 7a3bc419481..248b89a01ef 100644 --- a/regression-test/suites/nereids_syntax_p0/sub_query_diff_old_optimize.groovy +++ b/regression-test/suites/nereids_syntax_p0/sub_query_diff_old_optimize.groovy @@ -37,6 +37,10 @@ suite ("sub_query_diff_old_optimize") { DROP TABLE IF EXISTS `sub_query_diff_old_optimize_subquery4` """ + sql """ + DROP TABLE IF EXISTS `sub_query_diff_old_optimize_subquery5` + """ + sql """ create table if not exists sub_query_diff_old_optimize_subquery1 (k1 bigint, k2 bigint) @@ -69,6 +73,14 @@ suite ("sub_query_diff_old_optimize") { properties('replication_num' = '1') """ + sql """ + create table if not exists sub_query_diff_old_optimize_subquery5 + (tm varchar(20)) + duplicate key(tm) + distributed by hash(tm) buckets 1 + properties('replication_num' = '1') + """ + sql """ insert into sub_query_diff_old_optimize_subquery1 values (1,2), (1,3), (2,4), (2,5), (3,3), (3,4), (20,2), (22,3), (24,4) """ @@ -86,6 +98,10 @@ suite ("sub_query_diff_old_optimize") { insert into sub_query_diff_old_optimize_subquery4 values (5,4), (5,2), (8,3), (5,4), (6,7), (8,9) """ + sql """ + insert into sub_query_diff_old_optimize_subquery5 values ('a') + """ + sql "SET enable_fallback_to_original_planner=false" test { @@ -150,6 +166,10 @@ suite ("sub_query_diff_old_optimize") { (select k1 as aa from sub_query_diff_old_optimize_subquery3 where sub_query_diff_old_optimize_subquery1.k2 = sub_query_diff_old_optimize_subquery3.v2) sub_query_diff_old_optimize_subquery3) order by k1, k2 """ + qt_alias_issue30264 """ + with cte1 as (select * from sub_query_diff_old_optimize_subquery5) select tm from cte1 group by tm having tm > (select 'Apple'); + """ + //----------subquery with limit---------- order_qt_exists_subquery_with_limit """ select * from sub_query_diff_old_optimize_subquery1 where exists (select sub_query_diff_old_optimize_subquery3.k3 from sub_query_diff_old_optimize_subquery3 where sub_query_diff_old_optimize_subquery3.v2 = sub_query_diff_old_optimize_subquery1.k2 limit 1); --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
