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]