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]

Reply via email to