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

Reply via email to