This is an automated email from the ASF dual-hosted git repository.

yiguolei pushed a commit to branch branch-2.1
in repository https://gitbox.apache.org/repos/asf/doris.git


The following commit(s) were added to refs/heads/branch-2.1 by this push:
     new 61c2322c8eb [pick](nereids)fix runtime filter target expr translate 
bug #33777
61c2322c8eb is described below

commit 61c2322c8eb014287ae640f9df82eb9f542142cc
Author: minghong <[email protected]>
AuthorDate: Wed Apr 17 17:47:34 2024 +0800

    [pick](nereids)fix runtime filter target expr translate bug #33777
---
 .../glue/translator/RuntimeFilterTranslator.java   | 34 ++++++++++------------
 1 file changed, 16 insertions(+), 18 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..3dbd6cfcec7 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
@@ -22,9 +22,7 @@ import org.apache.doris.analysis.Expr;
 import org.apache.doris.analysis.SlotId;
 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;
@@ -40,6 +38,7 @@ import org.apache.doris.qe.ConnectContext;
 import org.apache.doris.statistics.StatisticalType;
 import org.apache.doris.thrift.TRuntimeFilterType;
 
+import com.google.common.base.Preconditions;
 import com.google.common.collect.ImmutableList;
 import com.google.common.collect.ImmutableMap;
 
@@ -73,21 +72,15 @@ public class RuntimeFilterTranslator {
     }
 
     private class RuntimeFilterExpressionTranslator extends 
ExpressionTranslator {
-        Map<ExprId, SlotRef> nereidsExprIdToSlotRef;
+        SlotRef targetSlotRef;
 
-        RuntimeFilterExpressionTranslator(Map<ExprId, SlotRef> 
nereidsExprIdToSlotRef) {
-            this.nereidsExprIdToSlotRef = nereidsExprIdToSlotRef;
+        RuntimeFilterExpressionTranslator(SlotRef targetSlotRef) {
+            this.targetSlotRef = targetSlotRef;
         }
 
         @Override
         public Expr visitSlotReference(SlotReference slotReference, 
PlanTranslatorContext context) {
-            slotReference = context.getRuntimeTranslator().get()
-                    .context.getCorrespondingOlapSlotReference(slotReference);
-            SlotRef slot = 
nereidsExprIdToSlotRef.get(slotReference.getExprId());
-            if (slot == null) {
-                throw new AnalysisException("cannot find SlotRef for " + 
slotReference);
-            }
-            return slot;
+            return targetSlotRef;
         }
     }
 
@@ -111,8 +104,8 @@ public class RuntimeFilterTranslator {
         for (int i = 0; i < filter.getTargetExpressions().size(); i++) {
             Slot curTargetSlot = filter.getTargetSlots().get(i);
             Expression curTargetExpression = 
filter.getTargetExpressions().get(i);
-            Expr target = 
context.getExprIdToOlapScanNodeSlotRef().get(curTargetSlot.getExprId());
-            if (target == null) {
+            SlotRef targetSlotRef = 
context.getExprIdToOlapScanNodeSlotRef().get(curTargetSlot.getExprId());
+            if (targetSlotRef == null) {
                 context.setTargetNullCount();
                 hasInvalidTarget = true;
                 break;
@@ -120,10 +113,15 @@ public class RuntimeFilterTranslator {
             ScanNode scanNode = 
context.getScanNodeOfLegacyRuntimeFilterTarget().get(curTargetSlot);
             Expr targetExpr;
             if (curTargetSlot.equals(curTargetExpression)) {
-                targetExpr = target;
+                targetExpr = targetSlotRef;
             } else {
-                RuntimeFilterExpressionTranslator translator = new 
RuntimeFilterExpressionTranslator(
-                        context.getExprIdToOlapScanNodeSlotRef());
+                // map nereids target slot to original planner slot
+                
Preconditions.checkArgument(curTargetExpression.getInputSlots().size() == 1,
+                        "target expression is invalid, input slot num > 1; 
filter :" + filter);
+                Slot slotInTargetExpression = 
curTargetExpression.getInputSlots().iterator().next();
+                
Preconditions.checkArgument(slotInTargetExpression.equals(curTargetSlot)
+                        || 
curTargetSlot.equals(context.getAliasTransferMap().get(slotInTargetExpression).second));
+                RuntimeFilterExpressionTranslator translator = new 
RuntimeFilterExpressionTranslator(targetSlotRef);
                 targetExpr = curTargetExpression.accept(translator, ctx);
             }
 
@@ -131,7 +129,7 @@ public class RuntimeFilterTranslator {
             if (!src.getType().equals(targetExpr.getType()) && 
filter.getType() != TRuntimeFilterType.BITMAP) {
                 targetExpr = new CastExpr(src.getType(), targetExpr);
             }
-            SlotRef targetSlot = target.getSrcSlotRef();
+            SlotRef targetSlot = targetSlotRef.getSrcSlotRef();
             TupleId targetTupleId = targetSlot.getDesc().getParent().getId();
             SlotId targetSlotId = targetSlot.getSlotId();
             scanNodeList.add(scanNode);


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to