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

Reply via email to