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 <[email protected]>
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: [email protected]
For additional commands, e-mail: [email protected]