From e42a98be323c41df9acc711387bf7b62e8a1e6a4 Mon Sep 17 00:00:00 2001 From: minghong Date: Thu, 6 Mar 2025 19:20:40 +0800 Subject: [PATCH] remove literal alias from aliasTransferMap --- fe/.idea/vcs.xml | 22 ++++--------------- .../processor/post/RuntimeFilterContext.java | 4 ++++ .../post/RuntimeFilterGenerator.java | 16 ++++++++++++++ 3 files changed, 24 insertions(+), 18 deletions(-) diff --git a/fe/.idea/vcs.xml b/fe/.idea/vcs.xml index 7b2cdb1cbbd39a..8c0f59e92e6c5b 100644 --- a/fe/.idea/vcs.xml +++ b/fe/.idea/vcs.xml @@ -1,20 +1,4 @@ - - + + + - + \ No newline at end of file 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 585ab5f3d7b081..6e6643140f8973 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 @@ -279,6 +279,10 @@ public Pair aliasTransferMapPut(NamedExpression slot, Pa return aliasTransferMap.put(slot, pair); } + public void aliasTransferMapRemove(NamedExpression slot) { + aliasTransferMap.remove(slot); + } + public boolean aliasTransferMapContains(NamedExpression slot) { return aliasTransferMap.containsKey(slot); } 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 57c322d030f8fe..176a795e4afa9a 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 @@ -37,6 +37,7 @@ import org.apache.doris.nereids.trees.expressions.Slot; import org.apache.doris.nereids.trees.expressions.SlotReference; import org.apache.doris.nereids.trees.expressions.functions.scalar.BitmapContains; +import org.apache.doris.nereids.trees.expressions.literal.Literal; import org.apache.doris.nereids.trees.plans.AbstractPlan; import org.apache.doris.nereids.trees.plans.JoinType; import org.apache.doris.nereids.trees.plans.Plan; @@ -440,6 +441,21 @@ public PhysicalPlan visitPhysicalProject(PhysicalProject project if (expression.children().isEmpty()) { continue; } + /** + * join(#5=#6) + * -->project(null as #5) + * --> any + * -->project(#6) + * --->scan(T[#5, #6]) + * + * both left tree and right tree contain exprId=5. + * remove #5 from alias map to avoid generate wrong rf + */ + if (expression instanceof Alias && expression.child(0) instanceof Literal) { + Alias alias = (Alias) expression; + ctx.aliasTransferMapRemove(alias.toSlot()); + continue; + } Expression expr = ExpressionUtils.getSingleNumericSlotOrExpressionCoveredByCast(expression.child(0)); if (expr instanceof NamedExpression && ctx.aliasTransferMapContains((NamedExpression) expr)) {