diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/memo/Group.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/memo/Group.java index c816151731d6ec..e8eaf57059dc66 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/nereids/memo/Group.java +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/memo/Group.java @@ -70,6 +70,10 @@ public class Group { private Statistics statistics; + private PhysicalProperties chosenProperties; + + private int chosenGroupExpressionId = -1; + /** * Constructor for Group. * @@ -198,10 +202,17 @@ public double getCostLowerBound() { * @return {@link Optional} of cost and {@link GroupExpression} of physical plan pair. */ public Optional> getLowestCostPlan(PhysicalProperties physicalProperties) { + chosenProperties = physicalProperties; if (physicalProperties == null || lowestCostPlans.isEmpty()) { + chosenGroupExpressionId = -1; return Optional.empty(); } - return Optional.ofNullable(lowestCostPlans.get(physicalProperties)); + Optional> costAndGroupExpression = + Optional.ofNullable(lowestCostPlans.get(physicalProperties)); + if (costAndGroupExpression.isPresent()) { + chosenGroupExpressionId = costAndGroupExpression.get().second.getId().asInt(); + } + return costAndGroupExpression; } public GroupExpression getBestPlan(PhysicalProperties properties) { @@ -430,6 +441,9 @@ public String toString() { str.append(" enforcers:\n"); for (GroupExpression enforcer : enforcers) { str.append(" ").append(enforcer).append("\n"); + if (chosenGroupExpressionId != -1) { + str.append(" chosen expression id: ").append(chosenGroupExpressionId).append("\n"); + str.append(" chosen properties: ").append(chosenProperties).append("\n"); } return str.toString(); } 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 b0da8459f98c6c..4d38176c7776e7 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 @@ -340,4 +340,8 @@ public String toString() { builder.append(" (plan=").append(plan.toString()).append(")"); return builder.toString(); } + + public ObjectId getId() { + return id; + } } diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/Plan.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/Plan.java index abefbce49292df..e26926775ae913 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/Plan.java +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/Plan.java @@ -40,7 +40,6 @@ * Abstract class for all plan node. */ public interface Plan extends TreeNode { - PlanType getType(); // cache GroupExpression for fast exit from Memo.copyIn.