From 983f851fb8b5005c8283eb5a13ed59835c4e7db2 Mon Sep 17 00:00:00 2001 From: morrySnow <101034200+morrySnow@users.noreply.github.com> Date: Tue, 26 Dec 2023 14:13:43 +0800 Subject: [PATCH] [fix](Nereids) runtime filter push down failed (#28997) project child not always NamedExpression failed msg ``` org.apache.doris.common.AnalysisException: errCode = 2, detailMessage = class org.apache.doris.nereids.trees.expressions.literal.VarcharLiteral cannot be cast to class org.apache.doris.nereids.trees.expressions.NamedExpression (org.apache.doris.nereids.trees.expressions.literal.VarcharLiteral and org.apache.doris.nereids.trees.expressions.NamedExpression are in unnamed module of loader 'app') at org.apache.doris.qe.StmtExecutor.executeByNereids(StmtExecutor.java:623) ~[classes/:?] at org.apache.doris.qe.StmtExecutor.execute(StmtExecutor.java:478) ~[classes/:?] at org.apache.doris.qe.StmtExecutor.execute(StmtExecutor.java:457) ~[classes/:?] at org.apache.doris.qe.ConnectProcessor.handleQuery(ConnectProcessor.java:245) ~[classes/:?] at org.apache.doris.qe.MysqlConnectProcessor.handleQuery(MysqlConnectProcessor.java:166) ~[classes/:?] at org.apache.doris.qe.MysqlConnectProcessor.dispatch(MysqlConnectProcessor.java:193) ~[classes/:?] at org.apache.doris.qe.MysqlConnectProcessor.processOnce(MysqlConnectProcessor.java:246) ~[classes/:?] at org.apache.doris.mysql.ReadListener.lambda$handleEvent$0(ReadListener.java:52) ~[classes/:?] at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) ~[?:?] at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) ~[?:?] at java.lang.Thread.run(Thread.java:829) ~[?:?] Caused by: java.lang.ClassCastException: class org.apache.doris.nereids.trees.expressions.literal.VarcharLiteral cannot be cast to class org.apache.doris.nereids.trees.expressions.NamedExpression (org.apache.doris.nereids.trees.expressions.literal.VarcharLiteral and org.apache.doris.nereids.trees.expressions.NamedExpression are in unnamed module of loader 'app') at org.apache.doris.nereids.trees.plans.physical.PhysicalSetOperation.pushDownRuntimeFilter(PhysicalSetOperation.java:178) ~[classes/:?] at org.apache.doris.nereids.trees.plans.physical.PhysicalHashJoin.pushDownRuntimeFilter(PhysicalHashJoin.java:229) ~[classes/:?] at org.apache.doris.nereids.processor.post.RuntimeFilterGenerator.pushDownRuntimeFilterCommon(RuntimeFilterGenerator.java:386) ~[classes/:?] ``` --- .../doris/nereids/trees/plans/physical/PhysicalHashJoin.java | 4 ++-- .../nereids/trees/plans/physical/PhysicalSetOperation.java | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/physical/PhysicalHashJoin.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/physical/PhysicalHashJoin.java index 183ccaabfa..5086d0f361 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/physical/PhysicalHashJoin.java +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/physical/PhysicalHashJoin.java @@ -181,8 +181,8 @@ public class PhysicalHashJoin< TRuntimeFilterType type, long buildSideNdv, int exprOrder) { if (RuntimeFilterGenerator.DENIED_JOIN_TYPES.contains(getJoinType()) || isMarkJoin()) { if (builderNode instanceof PhysicalHashJoin) { - PhysicalHashJoin builderJion = (PhysicalHashJoin) builderNode; - if (builderJion == this) { + PhysicalHashJoin builderJoin = (PhysicalHashJoin) builderNode; + if (builderJoin == this) { return false; } } diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/physical/PhysicalSetOperation.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/physical/PhysicalSetOperation.java index ec9537e7cb..a85e2cf67a 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/physical/PhysicalSetOperation.java +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/physical/PhysicalSetOperation.java @@ -173,9 +173,9 @@ public abstract class PhysicalSetOperation extends AbstractPhysicalPlan implemen if (projIndex < 0 || projIndex >= project.getProjects().size()) { continue; } - NamedExpression newProbeExpr = project.getProjects().get(projIndex); + Expression newProbeExpr = project.getProjects().get(projIndex); if (newProbeExpr instanceof Alias) { - newProbeExpr = (NamedExpression) newProbeExpr.child(0); + newProbeExpr = newProbeExpr.child(0); } Slot newProbeSlot = RuntimeFilterGenerator.checkTargetChild(newProbeExpr); if (!RuntimeFilterGenerator.checkPushDownPreconditionsForJoin(builderNode, ctx, newProbeSlot)) {