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]