From 3745e6c18a4bf19ab155c0fb0ac196cf43e55f33 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=B0=A2=E5=81=A5?= Date: Sat, 11 Mar 2023 00:26:54 +0800 Subject: [PATCH] [fix](Nereids): order of project's logical properties is different with that of project expression (#17648) --- .../nereids/glue/translator/PhysicalPlanTranslator.java | 5 ++++- .../apache/doris/nereids/jobs/cascades/ApplyRuleJob.java | 1 + .../org/apache/doris/nereids/memo/GroupExpression.java | 7 +++++++ 3 files changed, 12 insertions(+), 1 deletion(-) diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/glue/translator/PhysicalPlanTranslator.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/glue/translator/PhysicalPlanTranslator.java index 4c137e4732..a05c5c94bf 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/nereids/glue/translator/PhysicalPlanTranslator.java +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/glue/translator/PhysicalPlanTranslator.java @@ -1361,7 +1361,10 @@ public class PhysicalPlanTranslator extends DefaultPlanVisitor slotList = project.getOutput(); + List slotList = project.getProjects() + .stream() + .map(e -> e.toSlot()) + .collect(Collectors.toList()); // For hash join node, use vSrcToOutputSMap to describe the expression calculation, use // vIntermediateTupleDescList as input, and set vOutputTupleDesc as the final output. // TODO: HashJoinNode's be implementation is not support projection yet, remove this after when supported. diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/jobs/cascades/ApplyRuleJob.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/jobs/cascades/ApplyRuleJob.java index 1f653b22f4..d3e6031e3f 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/nereids/jobs/cascades/ApplyRuleJob.java +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/jobs/cascades/ApplyRuleJob.java @@ -76,6 +76,7 @@ public class ApplyRuleJob extends Job { continue; } GroupExpression newGroupExpression = result.correspondingExpression; + newGroupExpression.setFromRule(rule); if (newPlan instanceof LogicalPlan) { pushJob(new OptimizeGroupExpressionJob(newGroupExpression, context)); } else { diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/memo/GroupExpression.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/memo/GroupExpression.java index 4555935f25..370fabaf0e 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/nereids/memo/GroupExpression.java +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/memo/GroupExpression.java @@ -56,6 +56,9 @@ public class GroupExpression { private long estOutputRowCount = -1; + //Record the rule that generate this plan. It's used for debugging + private Rule fromRule; + // Mapping from output properties to the corresponding best cost, statistics, and child properties. // key is the physical properties the group expression support for its parent // and value is cost and request physical properties to its children. @@ -99,6 +102,10 @@ public class GroupExpression { return children.size(); } + public void setFromRule(Rule rule) { + this.fromRule = rule; + } + public Group getOwnerGroup() { return ownerGroup; }