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 f71b78c415 [enhancement](Nereids): remove override child(int index)
(#23124)
f71b78c415 is described below
commit f71b78c415697eb42f6c8cabf66bf396535791f8
Author: jakevin <[email protected]>
AuthorDate: Fri Aug 18 17:34:49 2023 +0800
[enhancement](Nereids): remove override child(int index) (#23124)
method `child(int index)` use code `super.child(index)` will cause Pointer
jump twice.
---
.../apache/doris/nereids/pattern/GroupExpressionMatching.java | 3 ++-
.../doris/nereids/processor/post/RuntimeFilterGenerator.java | 2 +-
.../org/apache/doris/nereids/rules/rewrite/MergeProjects.java | 2 +-
.../nereids/rules/rewrite/PushdownFilterThroughRepeat.java | 10 +++++-----
.../apache/doris/nereids/rules/rewrite/ReplaceLimitNode.java | 6 +++---
.../org/apache/doris/nereids/trees/plans/AbstractPlan.java | 6 +-----
.../doris/nereids/trees/plans/visitor/DefaultPlanRewriter.java | 9 ++++-----
.../src/main/java/org/apache/doris/statistics/Statistics.java | 1 +
8 files changed, 18 insertions(+), 21 deletions(-)
diff --git
a/fe/fe-core/src/main/java/org/apache/doris/nereids/pattern/GroupExpressionMatching.java
b/fe/fe-core/src/main/java/org/apache/doris/nereids/pattern/GroupExpressionMatching.java
index c8311986ae..ade8eb8cc6 100644
---
a/fe/fe-core/src/main/java/org/apache/doris/nereids/pattern/GroupExpressionMatching.java
+++
b/fe/fe-core/src/main/java/org/apache/doris/nereids/pattern/GroupExpressionMatching.java
@@ -161,7 +161,8 @@ public class GroupExpressionMatching implements
Iterable<Plan> {
// assemble all combination of plan tree by current root plan and
children plan
while (offset < childrenPlans.size()) {
- ImmutableList.Builder<Plan> childrenBuilder =
ImmutableList.builder();
+ ImmutableList.Builder<Plan> childrenBuilder =
+
ImmutableList.builderWithExpectedSize(childrenPlans.size());
for (int i = 0; i < childrenPlans.size(); i++) {
childrenBuilder.add(childrenPlans.get(i).get(childrenPlanIndex[i]));
}
diff --git
a/fe/fe-core/src/main/java/org/apache/doris/nereids/processor/post/RuntimeFilterGenerator.java
b/fe/fe-core/src/main/java/org/apache/doris/nereids/processor/post/RuntimeFilterGenerator.java
index d31b106cea..e8b37af3ae 100644
---
a/fe/fe-core/src/main/java/org/apache/doris/nereids/processor/post/RuntimeFilterGenerator.java
+++
b/fe/fe-core/src/main/java/org/apache/doris/nereids/processor/post/RuntimeFilterGenerator.java
@@ -466,7 +466,7 @@ public class RuntimeFilterGenerator extends
PlanPostProcessor {
Map<EqualTo, PhysicalHashJoin> equalCondToJoinMap =
entry.getValue();
for (Map.Entry<EqualTo, PhysicalHashJoin> innerEntry :
equalCondToJoinMap.entrySet()) {
EqualTo equalTo = innerEntry.getKey();
- PhysicalHashJoin join = innerEntry.getValue();
+ PhysicalHashJoin<? extends Plan, ? extends Plan> join =
innerEntry.getValue();
Preconditions.checkState(join != null);
TRuntimeFilterType type = TRuntimeFilterType.IN_OR_BLOOM;
if (ctx.getSessionVariable().getEnablePipelineEngine()) {
diff --git
a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/rewrite/MergeProjects.java
b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/rewrite/MergeProjects.java
index f8c8611def..96e506ec14 100644
---
a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/rewrite/MergeProjects.java
+++
b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/rewrite/MergeProjects.java
@@ -49,7 +49,7 @@ public class MergeProjects extends OneRewriteRuleFactory {
}
public static Plan mergeProjects(LogicalProject project) {
- LogicalProject childProject = (LogicalProject) project.child();
+ LogicalProject<? extends Plan> childProject = (LogicalProject)
project.child();
List<NamedExpression> projectExpressions =
project.mergeProjections(childProject);
LogicalProject newProject = childProject.canEliminate() ? project :
childProject;
return newProject.withProjectsAndChild(projectExpressions,
childProject.child(0));
diff --git
a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/rewrite/PushdownFilterThroughRepeat.java
b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/rewrite/PushdownFilterThroughRepeat.java
index b53c005b83..804075c1df 100644
---
a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/rewrite/PushdownFilterThroughRepeat.java
+++
b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/rewrite/PushdownFilterThroughRepeat.java
@@ -55,7 +55,6 @@ import java.util.Set;
* Note:
* 'a>0' could be push down, because 'a' is in group by keys;
* but 'b>0' could not push down, because 'b' is not in group by keys.
- *
*/
public class PushdownFilterThroughRepeat extends OneRewriteRuleFactory {
@@ -79,17 +78,18 @@ public class PushdownFilterThroughRepeat extends
OneRewriteRuleFactory {
notPushedPredicates.add(conjunct);
}
}
- return pushDownPredicate(filter, repeat, pushedPredicates,
notPushedPredicates);
+ return pushDownPredicate(filter, pushedPredicates,
notPushedPredicates);
}).toRule(RuleType.PUSHDOWN_PREDICATE_THROUGH_REPEAT);
}
- private Plan pushDownPredicate(LogicalFilter filter, LogicalRepeat repeat,
- Set<Expression> pushedPredicates,
Set<Expression> notPushedPredicates) {
+ private Plan pushDownPredicate(LogicalFilter<LogicalRepeat<Plan>> filter,
Set<Expression> pushedPredicates,
+ Set<Expression> notPushedPredicates) {
+ LogicalRepeat<Plan> repeat = filter.child();
if (pushedPredicates.size() == 0) {
// nothing pushed down, just return origin plan
return filter;
}
- LogicalFilter bottomFilter = new LogicalFilter<>(pushedPredicates,
repeat.child(0));
+ LogicalFilter<Plan> bottomFilter = new
LogicalFilter<>(pushedPredicates, repeat.child(0));
repeat = repeat.withChildren(ImmutableList.of(bottomFilter));
return PlanUtils.filterOrSelf(notPushedPredicates, repeat);
diff --git
a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/rewrite/ReplaceLimitNode.java
b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/rewrite/ReplaceLimitNode.java
index 9ec2e69b26..dd4479ae3a 100644
---
a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/rewrite/ReplaceLimitNode.java
+++
b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/rewrite/ReplaceLimitNode.java
@@ -51,9 +51,9 @@ public class ReplaceLimitNode implements RewriteRuleFactory {
//limit->proj->sort ==> proj->topN
logicalLimit(logicalProject(logicalSort()))
.then(limit -> {
- LogicalProject project = limit.child();
- LogicalSort sort = limit.child().child();
- LogicalTopN topN = new
LogicalTopN(sort.getOrderKeys(),
+ LogicalProject<LogicalSort<Plan>> project =
limit.child();
+ LogicalSort<Plan> sort = limit.child().child();
+ LogicalTopN<Plan> topN = new
LogicalTopN<>(sort.getOrderKeys(),
limit.getLimit(),
limit.getOffset(),
sort.child(0));
diff --git
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/AbstractPlan.java
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/AbstractPlan.java
index b2776c7348..0f7ca0706f 100644
---
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/AbstractPlan.java
+++
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/AbstractPlan.java
@@ -154,13 +154,9 @@ public abstract class AbstractPlan extends
AbstractTreeNode<Plan> implements Pla
return getLogicalProperties().getOutputExprIdSet();
}
- @Override
- public Plan child(int index) {
- return super.child(index);
- }
-
@Override
public LogicalProperties getLogicalProperties() {
+ // TODO: use bound()?
if (this instanceof Unbound) {
return UnboundLogicalProperties.INSTANCE;
}
diff --git
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/visitor/DefaultPlanRewriter.java
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/visitor/DefaultPlanRewriter.java
index 1dd90772f1..80236494bc 100644
---
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/visitor/DefaultPlanRewriter.java
+++
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/visitor/DefaultPlanRewriter.java
@@ -21,8 +21,7 @@ import org.apache.doris.nereids.trees.plans.Plan;
import org.apache.doris.nereids.trees.plans.physical.PhysicalOlapScan;
import
org.apache.doris.nereids.trees.plans.physical.PhysicalStorageLayerAggregate;
-import java.util.ArrayList;
-import java.util.List;
+import com.google.common.collect.ImmutableList;
/**
* Default implementation for plan rewriting, delegating to child plans and
rewrite current root
@@ -45,8 +44,8 @@ public abstract class DefaultPlanRewriter<C> extends
PlanVisitor<Plan, C> {
}
/** visitChildren */
- public static final <P extends Plan, C> P
visitChildren(DefaultPlanRewriter<C> rewriter, P plan, C context) {
- List<Plan> newChildren = new ArrayList<>();
+ public static <P extends Plan, C> P visitChildren(DefaultPlanRewriter<C>
rewriter, P plan, C context) {
+ ImmutableList.Builder<Plan> newChildren =
ImmutableList.builderWithExpectedSize(plan.arity());
boolean hasNewChildren = false;
for (Plan child : plan.children()) {
Plan newChild = child.accept(rewriter, context);
@@ -55,6 +54,6 @@ public abstract class DefaultPlanRewriter<C> extends
PlanVisitor<Plan, C> {
}
newChildren.add(newChild);
}
- return hasNewChildren ? (P) plan.withChildren(newChildren) : plan;
+ return hasNewChildren ? (P) plan.withChildren(newChildren.build()) :
plan;
}
}
diff --git
a/fe/fe-core/src/main/java/org/apache/doris/statistics/Statistics.java
b/fe/fe-core/src/main/java/org/apache/doris/statistics/Statistics.java
index 7c54ed8669..daf566109a 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/statistics/Statistics.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/statistics/Statistics.java
@@ -61,6 +61,7 @@ public class Statistics {
public Statistics(Statistics another) {
this.rowCount = another.rowCount;
this.expressionToColumnStats = new
HashMap<>(another.expressionToColumnStats);
+ this.tupleSize = another.tupleSize;
this.width = another.width;
this.penalty = another.penalty;
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]