From 122f36e5be910fe2f5193b7966105cc807d851ba Mon Sep 17 00:00:00 2001 From: HappenLee Date: Fri, 21 Oct 2022 21:41:23 +0800 Subject: [PATCH] [RuntimeFilter] (vec) support runtime filter in indeed slot id (#13556) --- .../main/java/org/apache/doris/analysis/Expr.java | 4 ++++ .../main/java/org/apache/doris/analysis/SlotRef.java | 12 ++++++++++++ .../java/org/apache/doris/planner/RuntimeFilter.java | 1 + 3 files changed, 17 insertions(+) diff --git a/fe/fe-core/src/main/java/org/apache/doris/analysis/Expr.java b/fe/fe-core/src/main/java/org/apache/doris/analysis/Expr.java index 7bb85ab269..7753472864 100755 --- a/fe/fe-core/src/main/java/org/apache/doris/analysis/Expr.java +++ b/fe/fe-core/src/main/java/org/apache/doris/analysis/Expr.java @@ -1207,6 +1207,10 @@ public abstract class Expr extends TreeNode implements ParseNode, Cloneabl } } + public Expr getRealSlotRef() { + return this; + } + public void getTableIdToColumnNames(Map> tableIdToColumnNames) { Preconditions.checkState(tableIdToColumnNames != null); for (Expr child : children) { diff --git a/fe/fe-core/src/main/java/org/apache/doris/analysis/SlotRef.java b/fe/fe-core/src/main/java/org/apache/doris/analysis/SlotRef.java index 746159a0b9..7ba05121c7 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/analysis/SlotRef.java +++ b/fe/fe-core/src/main/java/org/apache/doris/analysis/SlotRef.java @@ -358,6 +358,18 @@ public class SlotRef extends Expr { } } + @Override + public Expr getRealSlotRef() { + Preconditions.checkState(!type.equals(Type.INVALID)); + Preconditions.checkState(desc != null); + if (!desc.getSourceExprs().isEmpty() + && desc.getSourceExprs().get(0) instanceof SlotRef) { + return desc.getSourceExprs().get(0); + } else { + return this; + } + } + @Override public void getIds(List tupleIds, List slotIds) { Preconditions.checkState(!type.equals(Type.INVALID)); diff --git a/fe/fe-core/src/main/java/org/apache/doris/planner/RuntimeFilter.java b/fe/fe-core/src/main/java/org/apache/doris/planner/RuntimeFilter.java index c3fec43021..13c74472ac 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/planner/RuntimeFilter.java +++ b/fe/fe-core/src/main/java/org/apache/doris/planner/RuntimeFilter.java @@ -269,6 +269,7 @@ public final class RuntimeFilter { return null; } + targetExpr = targetExpr.getRealSlotRef(); Map> targetSlots = getTargetSlots(analyzer, targetExpr); Preconditions.checkNotNull(targetSlots); if (targetSlots.isEmpty()) {