This is an automated email from the ASF dual-hosted git repository.

kxiao pushed a commit to branch branch-2.0
in repository https://gitbox.apache.org/repos/asf/doris.git


The following commit(s) were added to refs/heads/branch-2.0 by this push:
     new bdbced07801 [fix](nereids) PushdownAliasThroughJoin may lost required 
columns from parent node #25835 (#26243)
bdbced07801 is described below

commit bdbced07801e3508fce05d24301bb5648b6498ef
Author: starocean999 <[email protected]>
AuthorDate: Wed Nov 1 23:00:08 2023 +0800

    [fix](nereids) PushdownAliasThroughJoin may lost required columns from 
parent node #25835 (#26243)
---
 .../doris/nereids/rules/rewrite/PushdownAliasThroughJoin.java  |  9 ++++++---
 .../nereids/rules/rewrite/PushdownAliasThroughJoinTest.java    | 10 +++++-----
 2 files changed, 11 insertions(+), 8 deletions(-)

diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/rewrite/PushdownAliasThroughJoin.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/rewrite/PushdownAliasThroughJoin.java
index 7839fcfe95d..abe707b2608 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/rewrite/PushdownAliasThroughJoin.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/rewrite/PushdownAliasThroughJoin.java
@@ -37,6 +37,7 @@ import java.util.Collections;
 import java.util.List;
 import java.util.Map;
 import java.util.stream.Collectors;
+import java.util.stream.Stream;
 
 /**
  * Pushdown Alias (inside must be Slot) through Join.
@@ -112,9 +113,11 @@ public class PushdownAliasThroughJoin extends 
OneRewriteRuleFactory {
     }
 
     private List<NamedExpression> createNewOutput(List<Slot> oldOutput,
-            Map<Expression, List<NamedExpression>> aliasMap) {
-        List<NamedExpression> output = oldOutput.stream()
-                .flatMap(slot -> aliasMap.getOrDefault(slot, 
Collections.singletonList(slot)).stream())
+                                                  Map<Expression, 
List<NamedExpression>> aliasMap) {
+        // we should keep all original outputs and add new alias in the output 
list
+        // because the upper node may require both col#1 and col#1 as 
colAlias#2
+        List<NamedExpression> output = Stream.concat(oldOutput.stream(), 
oldOutput.stream()
+                        .flatMap(slot -> aliasMap.getOrDefault(slot, 
Collections.emptyList()).stream()))
                 .collect(Collectors.toList());
         return output;
     }
diff --git 
a/fe/fe-core/src/test/java/org/apache/doris/nereids/rules/rewrite/PushdownAliasThroughJoinTest.java
 
b/fe/fe-core/src/test/java/org/apache/doris/nereids/rules/rewrite/PushdownAliasThroughJoinTest.java
index 5a98b07bcf0..543ff0933b5 100644
--- 
a/fe/fe-core/src/test/java/org/apache/doris/nereids/rules/rewrite/PushdownAliasThroughJoinTest.java
+++ 
b/fe/fe-core/src/test/java/org/apache/doris/nereids/rules/rewrite/PushdownAliasThroughJoinTest.java
@@ -53,8 +53,8 @@ class PushdownAliasThroughJoinTest implements 
MemoPatternMatchSupported {
                 .matches(
                     logicalProject(
                         logicalJoin(
-                            logicalProject().when(project -> 
project.getProjects().get(1).toSql().equals("name AS `1name`")),
-                            logicalProject().when(project -> 
project.getProjects().get(1).toSql().equals("name AS `2name`"))
+                            logicalProject().when(project -> 
project.getProjects().get(1).toSql().equals("name") && 
project.getProjects().get(2).toSql().equals("name AS `1name`")),
+                            logicalProject().when(project -> 
project.getProjects().get(1).toSql().equals("name") && 
project.getProjects().get(2).toSql().equals("name AS `2name`"))
                         )
                     ).when(project -> 
project.getProjects().get(0).toSql().equals("1name") && 
project.getProjects().get(1).toSql().equals("2name"))
                 );
@@ -74,10 +74,10 @@ class PushdownAliasThroughJoinTest implements 
MemoPatternMatchSupported {
                     logicalProject(
                         logicalJoin(
                             logicalProject().when(
-                                    project -> 
project.getProjects().get(0).toSql().equals("id AS `1id`")
-                                            && 
project.getProjects().get(1).toSql().equals("name AS `1name`")),
+                                    project -> 
project.getProjects().get(2).toSql().equals("id AS `1id`")
+                                            && 
project.getProjects().get(3).toSql().equals("name AS `1name`")),
                             logicalProject().when(
-                                    project -> 
project.getProjects().get(1).toSql().equals("name AS `2name`"))
+                                    project -> 
project.getProjects().get(2).toSql().equals("name AS `2name`"))
                         ).when(join -> 
join.getHashJoinConjuncts().get(0).toSql().equals("(1id = id)"))
                     ).when(project -> 
project.getProjects().get(0).toSql().equals("1id")
                         && project.getProjects().get(1).toSql().equals("1name")


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to