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 c1438cbad6 [revert](Nereids): revert GroupExpression Children
ImmutableList. (#13918)
c1438cbad6 is described below
commit c1438cbad6b78f548ddd206df0e89d4ff8447d6d
Author: jakevin <[email protected]>
AuthorDate: Thu Nov 3 16:29:54 2022 +0800
[revert](Nereids): revert GroupExpression Children ImmutableList. (#13918)
---
.../apache/doris/nereids/memo/GroupExpression.java | 30 +++-------------------
.../java/org/apache/doris/nereids/memo/Memo.java | 8 +++++-
2 files changed, 11 insertions(+), 27 deletions(-)
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 e43f164d0a..a0ad369664 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
@@ -27,8 +27,6 @@ import org.apache.doris.nereids.trees.plans.Plan;
import org.apache.doris.statistics.StatsDeriveResult;
import com.google.common.base.Preconditions;
-import com.google.common.collect.ImmutableList;
-import com.google.common.collect.ImmutableList.Builder;
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
@@ -45,7 +43,7 @@ public class GroupExpression {
private double cost = 0.0;
private CostEstimate costEstimate = null;
private Group ownerGroup;
- private ImmutableList<Group> children;
+ private List<Group> children;
private final Plan plan;
private final BitSet ruleMasks;
private boolean statDerived;
@@ -72,7 +70,7 @@ public class GroupExpression {
public GroupExpression(Plan plan, List<Group> children) {
this.plan = Objects.requireNonNull(plan, "plan can not be null")
.withGroupExpression(Optional.of(this));
- this.children = ImmutableList.copyOf(Objects.requireNonNull(children,
"children can not be null"));
+ this.children = Lists.newArrayList(Objects.requireNonNull(children,
"children can not be null"));
this.ruleMasks = new BitSet(RuleType.SENTINEL.ordinal());
this.statDerived = false;
this.lowestCostTable = Maps.newHashMap();
@@ -110,12 +108,6 @@ public class GroupExpression {
return children;
}
- public void setChildren(ImmutableList<Group> children) {
- this.children.forEach(g -> g.removeParentExpression(this));
- this.children = children;
- this.children.forEach(g -> g.addParentExpression(this));
- }
-
/**
* replaceChild.
*
@@ -124,36 +116,22 @@ public class GroupExpression {
*/
public void replaceChild(Group originChild, Group newChild) {
originChild.removeParentExpression(this);
- ImmutableList.Builder<Group> groupBuilder =
ImmutableList.builderWithExpectedSize(arity());
for (int i = 0; i < children.size(); i++) {
if (children.get(i) == originChild) {
- groupBuilder.add(newChild);
+ children.set(i, newChild);
newChild.addParentExpression(this);
- } else {
- groupBuilder.add(child(i));
}
}
- this.children = groupBuilder.build();
}
public void setChild(int index, Group group) {
- this.children.get(index).removeParentExpression(this);
- setChildByIndex(index, group);
+ this.children.set(index, group);
}
public boolean hasApplied(Rule rule) {
return ruleMasks.get(rule.getRuleType().ordinal());
}
- private void setChildByIndex(int index, Group group) {
- ImmutableList.Builder<Group> builder = new Builder<>();
- builder.addAll(children.subList(0, index));
- builder.add(group);
- builder.addAll(children.subList(index + 1, children.size()));
- children = builder.build();
- group.addParentExpression(this);
- }
-
public boolean notApplied(Rule rule) {
return !hasApplied(rule);
}
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 3583db9f4e..7db42fba56 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
@@ -381,7 +381,13 @@ public class Memo {
}
for (GroupExpression groupExpression :
source.getParentGroupExpressions()) {
groupExpressions.remove(groupExpression);
- groupExpression.replaceChild(source, destination);
+ List<Group> children = groupExpression.children();
+ // TODO: use a better way to replace child, avoid traversing all
groupExpression
+ for (int i = 0; i < children.size(); i++) {
+ if (children.get(i).equals(source)) {
+ children.set(i, destination);
+ }
+ }
GroupExpression that = groupExpressions.get(groupExpression);
if (that != null && that.getOwnerGroup() != null
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]