This is an automated email from the ASF dual-hosted git repository. morningman pushed a commit to branch dev-1.0.1 in repository https://gitbox.apache.org/repos/asf/doris.git
The following commit(s) were added to refs/heads/dev-1.0.1 by this push: new bc878c81b1 [hotfix](dev-1.0.1) Fix Runtime Filter support equivalent slot of outer join (#10669) bc878c81b1 is described below commit bc878c81b11e0e4fa6c65c46320dd74679557e6b Author: Kidd <107781942+k-i-...@users.noreply.github.com> AuthorDate: Fri Jul 8 10:21:26 2022 +0800 [hotfix](dev-1.0.1) Fix Runtime Filter support equivalent slot of outer join (#10669) This bug may cause some runtime filter not generated --- .../org/apache/doris/analysis/ExprSubstitutionMap.java | 16 ++++++++++++++-- .../main/java/org/apache/doris/planner/HashJoinNode.java | 5 ++++- 2 files changed, 18 insertions(+), 3 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 d352d7608a..e0df525ce5 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 @@ -171,9 +171,14 @@ public final class ExprSubstitutionMap { for (int i = 0; i < g.size(); i++) { if (f.containsMappingFor(g.lhs_.get(i))) { result.put(f.get(g.lhs_.get(i)), g.rhs_.get(i)); - analyzer.putEquivalentSlot(((SlotRef) Objects.requireNonNull(f.get(g.lhs_.get(i)))).getSlotId(), ((SlotRef) g.lhs_.get(i)).getSlotId()); + if (f.get(g.lhs_.get(i)) instanceof SlotRef && g.rhs_.get(i) instanceof SlotRef) { + analyzer.putEquivalentSlot(((SlotRef) g.rhs_.get(i)).getSlotId(), ((SlotRef) Objects.requireNonNull(f.get(g.lhs_.get(i)))).getSlotId()); + } } else { result.put(g.lhs_.get(i), g.rhs_.get(i)); + if (g.lhs_.get(i) instanceof SlotRef && g.rhs_.get(i) instanceof SlotRef) { + analyzer.putEquivalentSlot(((SlotRef) g.rhs_.get(i)).getSlotId(), ((SlotRef) g.lhs_.get(i)).getSlotId()); + } } } return result; @@ -184,7 +189,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(); } @@ -196,6 +201,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 6deb20d619..16e82b644f 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-unsubscr...@doris.apache.org For additional commands, e-mail: commits-h...@doris.apache.org