This is an automated email from the ASF dual-hosted git repository. dataroaring pushed a commit to branch branch-4.0-preview in repository https://gitbox.apache.org/repos/asf/doris.git
commit dfaf0a72c53203659ca8e39ea1a85f06b750f809 Author: minghong <engle...@gmail.com> AuthorDate: Wed Apr 10 11:38:04 2024 +0800 [fix] after orExpand rule, RF target expr cannot be translated #33402 --- .../glue/translator/RuntimeFilterTranslator.java | 23 +++++++++++----------- .../processor/post/RuntimeFilterContext.java | 9 --------- .../processor/post/RuntimeFilterGenerator.java | 2 +- 3 files changed, 13 insertions(+), 21 deletions(-) diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/glue/translator/RuntimeFilterTranslator.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/glue/translator/RuntimeFilterTranslator.java index 6c25337ac98..a19e97e3206 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/nereids/glue/translator/RuntimeFilterTranslator.java +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/glue/translator/RuntimeFilterTranslator.java @@ -24,7 +24,6 @@ import org.apache.doris.analysis.SlotRef; import org.apache.doris.analysis.TupleId; import org.apache.doris.nereids.exceptions.AnalysisException; import org.apache.doris.nereids.processor.post.RuntimeFilterContext; -import org.apache.doris.nereids.trees.expressions.ExprId; import org.apache.doris.nereids.trees.expressions.Expression; import org.apache.doris.nereids.trees.expressions.Slot; import org.apache.doris.nereids.trees.expressions.SlotReference; @@ -42,6 +41,7 @@ import org.apache.doris.thrift.TRuntimeFilterType; import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableMap; +import com.google.common.collect.Maps; import java.util.ArrayList; import java.util.List; @@ -73,21 +73,20 @@ public class RuntimeFilterTranslator { } private class RuntimeFilterExpressionTranslator extends ExpressionTranslator { - Map<ExprId, SlotRef> nereidsExprIdToSlotRef; + Map<Slot, Expr> slotExprMap; - RuntimeFilterExpressionTranslator(Map<ExprId, SlotRef> nereidsExprIdToSlotRef) { - this.nereidsExprIdToSlotRef = nereidsExprIdToSlotRef; + RuntimeFilterExpressionTranslator(Map<Slot, Expr> slotExprMap) { + this.slotExprMap = slotExprMap; } @Override public Expr visitSlotReference(SlotReference slotReference, PlanTranslatorContext context) { - slotReference = context.getRuntimeTranslator().get() - .context.getCorrespondingOlapSlotReference(slotReference); - SlotRef slot = nereidsExprIdToSlotRef.get(slotReference.getExprId()); - if (slot == null) { + Expr expr = slotExprMap.get(slotReference); + if (expr instanceof SlotRef) { + return expr; + } else { throw new AnalysisException("cannot find SlotRef for " + slotReference); } - return slot; } } @@ -122,8 +121,10 @@ public class RuntimeFilterTranslator { if (curTargetSlot.equals(curTargetExpression)) { targetExpr = target; } else { - RuntimeFilterExpressionTranslator translator = new RuntimeFilterExpressionTranslator( - context.getExprIdToOlapScanNodeSlotRef()); + // map nereids target slot to original planner slot + Map<Slot, Expr> slotMap = Maps.newHashMap(); + slotMap.put(curTargetSlot, target); + RuntimeFilterExpressionTranslator translator = new RuntimeFilterExpressionTranslator(slotMap); targetExpr = curTargetExpression.accept(translator, ctx); } diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/processor/post/RuntimeFilterContext.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/processor/post/RuntimeFilterContext.java index c8ffffa12e5..96f2a55a5ee 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/nereids/processor/post/RuntimeFilterContext.java +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/processor/post/RuntimeFilterContext.java @@ -25,7 +25,6 @@ import org.apache.doris.nereids.trees.expressions.ExprId; import org.apache.doris.nereids.trees.expressions.Expression; import org.apache.doris.nereids.trees.expressions.NamedExpression; import org.apache.doris.nereids.trees.expressions.Slot; -import org.apache.doris.nereids.trees.expressions.SlotReference; import org.apache.doris.nereids.trees.plans.Plan; import org.apache.doris.nereids.trees.plans.physical.AbstractPhysicalJoin; import org.apache.doris.nereids.trees.plans.physical.PhysicalCTEProducer; @@ -356,14 +355,6 @@ public class RuntimeFilterContext { return joinToTargetExprId.get(join); } - public SlotReference getCorrespondingOlapSlotReference(SlotReference slot) { - SlotReference olapSlot = slot; - if (aliasTransferMap.containsKey(olapSlot)) { - olapSlot = (SlotReference) aliasTransferMap.get(olapSlot).second; - } - return olapSlot; - } - /** * return the info about expand_runtime_filter_by_inner_join */ diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/processor/post/RuntimeFilterGenerator.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/processor/post/RuntimeFilterGenerator.java index d7e3f95be6a..0158bc404b1 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/nereids/processor/post/RuntimeFilterGenerator.java +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/processor/post/RuntimeFilterGenerator.java @@ -506,7 +506,7 @@ public class RuntimeFilterGenerator extends PlanPostProcessor { // example: RegularChildrenOutputs is empty // "select 1 a, 2 b union all select 3, 4 union all select 10 e, 20 f;" for (int i = 0; i < setOperation.getOutput().size(); i++) { - Pair childSlotPair = ctx.getAliasTransferPair(setOperation.getRegularChildOutput(0).get(0)); + Pair childSlotPair = ctx.getAliasTransferPair(setOperation.getRegularChildOutput(0).get(i)); if (childSlotPair != null) { ctx.aliasTransferMapPut(setOperation.getOutput().get(i), childSlotPair); } --------------------------------------------------------------------- To unsubscribe, e-mail: commits-unsubscr...@doris.apache.org For additional commands, e-mail: commits-h...@doris.apache.org