This is an automated email from the ASF dual-hosted git repository. jakevin pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/doris.git
The following commit(s) were added to refs/heads/master by this push: new c4def9db5c [feature](Nereids): add enforcers in Group (#22660) c4def9db5c is described below commit c4def9db5c419d9995662f5f2ad7e53a30061b4c Author: jakevin <jakevin...@gmail.com> AuthorDate: Tue Aug 8 13:39:55 2023 +0800 [feature](Nereids): add enforcers in Group (#22660) --- .../java/org/apache/doris/nereids/memo/Group.java | 22 ++++++++++++++++------ .../java/org/apache/doris/nereids/memo/Memo.java | 9 --------- .../properties/ChildrenPropertiesRegulator.java | 2 +- .../properties/EnforceMissingPropertiesHelper.java | 2 +- 4 files changed, 18 insertions(+), 17 deletions(-) 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 7fe2897a87..7d499ae42b 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 @@ -59,6 +59,8 @@ public class Group { private final List<GroupExpression> logicalExpressions = Lists.newArrayList(); private final List<GroupExpression> physicalExpressions = Lists.newArrayList(); + private final List<GroupExpression> enforcers = Lists.newArrayList(); + private LogicalProperties logicalProperties; // Map of cost lower bounds @@ -210,6 +212,11 @@ public class Group { return null; } + public void addEnforcer(GroupExpression enforcer) { + enforcer.setOwnerGroup(this); + enforcers.add(enforcer); + } + /** * Set or update lowestCostPlans: properties --> Pair.of(cost, expression) */ @@ -308,12 +315,11 @@ public class Group { public void mergeTo(Group target) { // move parentExpressions Ownership parentExpressions.keySet().forEach(parent -> target.addParentExpression(parent)); - // PhysicalEnforcer isn't in groupExpressions, so mergeGroup() can't replace its children. - // So we need to manually replace the children of PhysicalEnforcer in here. - // TODO: SortEnforcer? - parentExpressions.keySet().stream().filter(ge -> ge.getPlan() instanceof PhysicalDistribute) - .forEach(ge -> ge.children().set(0, target)); - parentExpressions.clear(); + + // TODO: dedup? + // move enforcers Ownership + enforcers.forEach(ge -> ge.children().set(0, target)); + enforcers.forEach(enforcer -> target.addEnforcer(enforcer)); // move LogicalExpression PhysicalExpression Ownership Map<GroupExpression, GroupExpression> logicalSet = target.getLogicalExpressions().stream() @@ -425,6 +431,10 @@ public class Group { for (GroupExpression physicalExpression : physicalExpressions) { str.append(" ").append(physicalExpression).append("\n"); } + str.append(" enforcers:\n"); + for (GroupExpression enforcer : enforcers) { + str.append(" ").append(enforcer).append("\n"); + } return str.toString(); } diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/memo/Memo.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/memo/Memo.java index 4023b403a3..3ae0459c02 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/nereids/memo/Memo.java +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/memo/Memo.java @@ -581,15 +581,6 @@ public class Memo { groups.remove(source.getGroupId()); } - /** - * Add enforcer expression into the target group. - */ - public void addEnforcerPlan(GroupExpression groupExpression, Group group) { - Preconditions.checkArgument(groupExpression != null); - groupExpression.setOwnerGroup(group); - // Don't add groupExpression into group's physicalExpressions, it will cause dead loop; - } - private CopyInResult rewriteByExistedPlan(Group targetGroup, Plan existedPlan) { GroupExpression existedLogicalExpression = existedPlan instanceof GroupPlan ? ((GroupPlan) existedPlan).getGroup().getLogicalExpression() // get first logicalGroupExpression diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/properties/ChildrenPropertiesRegulator.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/properties/ChildrenPropertiesRegulator.java index 05c8641486..34cef75286 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/nereids/properties/ChildrenPropertiesRegulator.java +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/properties/ChildrenPropertiesRegulator.java @@ -439,7 +439,7 @@ public class ChildrenPropertiesRegulator extends PlanVisitor<Boolean, Void> { PhysicalProperties newOutputProperty = new PhysicalProperties(target); GroupExpression enforcer = target.addEnforcer(child.getOwnerGroup()); - jobContext.getCascadesContext().getMemo().addEnforcerPlan(enforcer, child.getOwnerGroup()); + child.getOwnerGroup().addEnforcer(enforcer); Cost totalCost = CostCalculator.addChildCost(enforcer.getPlan(), CostCalculator.calculateCost(enforcer, Lists.newArrayList(childOutput)), currentCost, diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/properties/EnforceMissingPropertiesHelper.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/properties/EnforceMissingPropertiesHelper.java index 2e9a8ac6bb..1c45db6d4c 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/nereids/properties/EnforceMissingPropertiesHelper.java +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/properties/EnforceMissingPropertiesHelper.java @@ -149,7 +149,7 @@ public class EnforceMissingPropertiesHelper { private void addEnforcerUpdateCost(GroupExpression enforcer, PhysicalProperties oldOutputProperty, PhysicalProperties newOutputProperty) { - context.getCascadesContext().getMemo().addEnforcerPlan(enforcer, groupExpression.getOwnerGroup()); + groupExpression.getOwnerGroup().addEnforcer(enforcer); NereidsTracer.logEnforcerEvent(enforcer.getOwnerGroup().getGroupId(), groupExpression.getPlan(), oldOutputProperty, newOutputProperty); ENFORCER_TRACER.log(EnforcerEvent.of(groupExpression, ((PhysicalPlan) enforcer.getPlan()), --------------------------------------------------------------------- To unsubscribe, e-mail: commits-unsubscr...@doris.apache.org For additional commands, e-mail: commits-h...@doris.apache.org