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]

Reply via email to