You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@doris.apache.org by mo...@apache.org on 2022/07/08 03:20:00 UTC
[doris] 06/07: [hotfix](dev-1.0.1) fix planner bug after introducing output tuple for join node
This is an automated email from the ASF dual-hosted git repository.
morningman pushed a commit to branch dev-1.0.1-v20220707
in repository https://gitbox.apache.org/repos/asf/doris.git
commit 644dec1bc5b2e6914e6298c66afe831307105908
Author: morningman <mo...@163.com>
AuthorDate: Fri Jul 8 11:16:48 2022 +0800
[hotfix](dev-1.0.1) fix planner bug after introducing output tuple for join node
Authored by EmmyMiao87
---
.../main/java/org/apache/doris/analysis/ExprSubstitutionMap.java | 9 ++++++++-
.../src/main/java/org/apache/doris/planner/HashJoinNode.java | 5 ++++-
2 files changed, 12 insertions(+), 2 deletions(-)
diff --git a/fe/fe-core/src/main/java/org/apache/doris/analysis/ExprSubstitutionMap.java b/fe/fe-core/src/main/java/org/apache/doris/analysis/ExprSubstitutionMap.java
index 062eef4df8..aee8142908 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/analysis/ExprSubstitutionMap.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/analysis/ExprSubstitutionMap.java
@@ -182,7 +182,7 @@ public final class ExprSubstitutionMap {
* f [A.id, B.id] [A.name, B.name] g [A.id, C.id] [A.age, C.age]
* return: [A.id, C,id] [A.name, B.name] [A.age, C.age]
*/
- public static ExprSubstitutionMap combineAndReplace(ExprSubstitutionMap f, ExprSubstitutionMap g) {
+ public static ExprSubstitutionMap composeAndReplace(ExprSubstitutionMap f, ExprSubstitutionMap g) {
if (f == null && g == null) {
return new ExprSubstitutionMap();
}
@@ -194,6 +194,13 @@ public final class ExprSubstitutionMap {
}
ExprSubstitutionMap result = new ExprSubstitutionMap();
result = ExprSubstitutionMap.combine(result, g);
+ for (int i = 0; i < g.size(); i++) {
+ // case a->b, b->c => a->c
+ if (f.mappingForRhsExpr(g.getLhs().get(i)) != null) {
+ result.getLhs().set(i, f.mappingForRhsExpr(g.getLhs().get(i)));
+ }
+ }
+ // add remaining f
for (int i = 0; i < f.size(); i++) {
if (!result.containsMappingFor(f.lhs_.get(i))) {
result.put(f.lhs_.get(i), f.rhs_.get(i));
diff --git a/fe/fe-core/src/main/java/org/apache/doris/planner/HashJoinNode.java b/fe/fe-core/src/main/java/org/apache/doris/planner/HashJoinNode.java
index 25df202fde..9c1436af90 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/planner/HashJoinNode.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/planner/HashJoinNode.java
@@ -441,7 +441,7 @@ public class HashJoinNode extends PlanNode {
}
}
// 4. change the outputSmap
- outputSmap = ExprSubstitutionMap.combineAndReplace(outputSmap, srcTblRefToOutputTupleSmap);
+ outputSmap = ExprSubstitutionMap.composeAndReplace(outputSmap, srcTblRefToOutputTupleSmap);
}
private void replaceOutputSmapForOuterJoin() {
@@ -989,6 +989,9 @@ public class HashJoinNode extends PlanNode {
@Override
public ArrayList<TupleId> getOutputTblRefIds() {
+ if (vOutputTupleDesc != null) {
+ return Lists.newArrayList(vOutputTupleDesc.getId());
+ }
switch (joinOp) {
case LEFT_SEMI_JOIN:
case LEFT_ANTI_JOIN:
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@doris.apache.org
For additional commands, e-mail: commits-help@doris.apache.org