This is an automated email from the ASF dual-hosted git repository.

yiguolei 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 41fb3d5fa4 [opt](Nereids): Join use List<Plan> as children (#21608)
41fb3d5fa4 is described below

commit 41fb3d5fa4d3ae1d09dff664759b5f2c25c6ad7a
Author: jakevin <jakevin...@gmail.com>
AuthorDate: Sun Jul 9 17:11:55 2023 +0800

    [opt](Nereids): Join use List<Plan> as children (#21608)
    
    Join use List as children can avoid to construct extra ImmutableList
---
 .../hypergraph/receiver/PlanReceiver.java          |  2 +-
 .../doris/nereids/pattern/GroupMatching.java       |  2 -
 .../nereids/properties/LogicalProperties.java      |  4 --
 .../nereids/rules/analysis/BindExpression.java     |  4 +-
 .../exploration/join/InnerJoinLAsscomProject.java  |  5 ++-
 .../join/InnerJoinLeftAssociateProject.java        |  5 ++-
 .../join/InnerJoinRightAssociateProject.java       |  5 ++-
 .../exploration/join/JoinExchangeBothProject.java  |  3 +-
 .../exploration/join/JoinExchangeLeftProject.java  |  3 +-
 .../exploration/join/JoinExchangeRightProject.java |  3 +-
 .../join/LogicalJoinSemiJoinTransposeProject.java  |  5 +--
 .../exploration/join/OuterJoinAssocProject.java    |  4 +-
 .../exploration/join/OuterJoinLAsscomProject.java  |  5 ++-
 .../join/PushdownProjectThroughInnerJoin.java      |  4 +-
 .../join/PushdownProjectThroughSemiJoin.java       |  2 +-
 .../join/SemiJoinSemiJoinTransposeProject.java     |  4 +-
 .../rules/expression/ExpressionRewrite.java        |  2 +-
 .../nereids/rules/rewrite/ExistsApplyToJoin.java   |  4 +-
 .../rules/rewrite/ExtractFilterFromCrossJoin.java  |  2 +-
 .../rules/rewrite/FindHashConditionForJoin.java    |  2 +-
 .../doris/nereids/rules/rewrite/InApplyToJoin.java |  4 +-
 .../rules/rewrite/PushFilterInsideJoin.java        |  2 +-
 .../nereids/rules/rewrite/ScalarApplyToJoin.java   |  3 +-
 .../doris/nereids/trees/plans/AbstractPlan.java    | 30 +++++++--------
 .../nereids/trees/plans/commands/Command.java      | 14 -------
 .../trees/plans/logical/AbstractLogicalPlan.java   |  8 ++--
 .../nereids/trees/plans/logical/LogicalBinary.java |  5 +++
 .../nereids/trees/plans/logical/LogicalJoin.java   | 45 ++++++++++++++++++----
 .../nereids/trees/plans/logical/LogicalUnary.java  |  4 --
 .../doris/nereids/util/HyperGraphBuilder.java      |  2 +-
 .../doris/nereids/util/LogicalPlanBuilder.java     |  2 +-
 31 files changed, 103 insertions(+), 86 deletions(-)

diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/jobs/joinorder/hypergraph/receiver/PlanReceiver.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/jobs/joinorder/hypergraph/receiver/PlanReceiver.java
index aa9d6f787b..be7e462b49 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/jobs/joinorder/hypergraph/receiver/PlanReceiver.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/jobs/joinorder/hypergraph/receiver/PlanReceiver.java
@@ -321,7 +321,7 @@ public class PlanReceiver implements AbstractReceiver {
                 AbstractPhysicalJoin physicalJoin = (AbstractPhysicalJoin) 
physicalPlan;
                 logicalPlan = new LogicalJoin<>(physicalJoin.getJoinType(), 
physicalJoin.getHashJoinConjuncts(),
                         physicalJoin.getOtherJoinConjuncts(), JoinHint.NONE, 
physicalJoin.getMarkJoinSlotReference(),
-                        physicalJoin.child(0), physicalJoin.child(1));
+                        physicalJoin.children());
             } else {
                 throw new RuntimeException("DPhyp can only handle join and 
project operator");
             }
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/pattern/GroupMatching.java 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/pattern/GroupMatching.java
index 01ef42e988..8429902e59 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/pattern/GroupMatching.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/pattern/GroupMatching.java
@@ -50,7 +50,6 @@ public class GroupMatching implements Iterable<Plan> {
      * Iterator to get all subtrees from a group.
      */
     public static class GroupIterator implements Iterator<Plan> {
-        private final Pattern pattern;
         private final List<Iterator<Plan>> iterator;
         private int iteratorIndex = 0;
 
@@ -61,7 +60,6 @@ public class GroupMatching implements Iterable<Plan> {
          * @param group group to be matched
          */
         public GroupIterator(Pattern<? extends Plan> pattern, Group group) {
-            this.pattern = pattern;
             this.iterator = Lists.newArrayList();
 
             if (pattern.isGroup() || pattern.isMultiGroup()) {
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/properties/LogicalProperties.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/properties/LogicalProperties.java
index 4a08b8a7a3..e72d07e309 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/properties/LogicalProperties.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/properties/LogicalProperties.java
@@ -95,10 +95,6 @@ public class LogicalProperties {
         return outputExprIdsSupplier.get();
     }
 
-    public LogicalProperties withOutput(List<Slot> output) {
-        return new LogicalProperties(Suppliers.ofInstance(output));
-    }
-
     @Override
     public String toString() {
         return "LogicalProperties{"
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/analysis/BindExpression.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/analysis/BindExpression.java
index 8ecd7b08ae..bde3f2c8ef 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/analysis/BindExpression.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/analysis/BindExpression.java
@@ -160,7 +160,7 @@ public class BindExpression implements AnalysisRuleFactory {
                             ? JoinType.INNER_JOIN : using.getJoinType(),
                             using.getHashJoinConjuncts(),
                             using.getOtherJoinConjuncts(), using.getHint(), 
using.getMarkJoinSlotReference(),
-                            using.left(), using.right());
+                            using.children());
                     List<Expression> unboundSlots = lj.getHashJoinConjuncts();
                     Set<String> slotNames = new HashSet<>();
                     List<Slot> leftOutput = new 
ArrayList<>(lj.left().getOutput());
@@ -208,7 +208,7 @@ public class BindExpression implements AnalysisRuleFactory {
                             .collect(Collectors.toList());
                     return new LogicalJoin<>(join.getJoinType(),
                             hashJoinConjuncts, cond, join.getHint(), 
join.getMarkJoinSlotReference(),
-                            join.left(), join.right());
+                            join.children());
                 })
             ),
             RuleType.BINDING_AGGREGATE_SLOT.build(
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/exploration/join/InnerJoinLAsscomProject.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/exploration/join/InnerJoinLAsscomProject.java
index 3304278ab1..1c73a41a94 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/exploration/join/InnerJoinLAsscomProject.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/exploration/join/InnerJoinLAsscomProject.java
@@ -28,7 +28,8 @@ import org.apache.doris.nereids.trees.plans.Plan;
 import org.apache.doris.nereids.trees.plans.logical.LogicalJoin;
 import org.apache.doris.nereids.util.Utils;
 
-import java.util.ArrayList;
+import com.google.common.collect.ImmutableList;
+
 import java.util.HashSet;
 import java.util.List;
 import java.util.Map;
@@ -98,7 +99,7 @@ public class InnerJoinLAsscomProject extends 
OneExplorationRuleFactory {
                     
newTopJoin.getJoinReorderContext().copyFrom(topJoin.getJoinReorderContext());
                     newTopJoin.getJoinReorderContext().setHasLAsscom(true);
 
-                    return CBOUtils.projectOrSelf(new 
ArrayList<>(topJoin.getOutput()), newTopJoin);
+                    return 
CBOUtils.projectOrSelf(ImmutableList.copyOf(topJoin.getOutput()), newTopJoin);
                 }).toRule(RuleType.LOGICAL_INNER_JOIN_LASSCOM_PROJECT);
     }
 
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/exploration/join/InnerJoinLeftAssociateProject.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/exploration/join/InnerJoinLeftAssociateProject.java
index 12bb8bb530..58e098e990 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/exploration/join/InnerJoinLeftAssociateProject.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/exploration/join/InnerJoinLeftAssociateProject.java
@@ -27,7 +27,8 @@ import org.apache.doris.nereids.trees.plans.GroupPlan;
 import org.apache.doris.nereids.trees.plans.Plan;
 import org.apache.doris.nereids.trees.plans.logical.LogicalJoin;
 
-import java.util.ArrayList;
+import com.google.common.collect.ImmutableList;
+
 import java.util.HashSet;
 import java.util.List;
 import java.util.Map;
@@ -90,7 +91,7 @@ public class InnerJoinLeftAssociateProject extends 
OneExplorationRuleFactory {
                     
InnerJoinLeftAssociate.setNewBottomJoinReorder(newBottomJoin, bottomJoin);
                     InnerJoinLeftAssociate.setNewTopJoinReorder(newTopJoin, 
topJoin);
 
-                    return CBOUtils.projectOrSelf(new 
ArrayList<>(topJoin.getOutput()), newTopJoin);
+                    return 
CBOUtils.projectOrSelf(ImmutableList.copyOf(topJoin.getOutput()), newTopJoin);
                 }).toRule(RuleType.LOGICAL_INNER_JOIN_LEFT_ASSOCIATIVE);
     }
 }
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/exploration/join/InnerJoinRightAssociateProject.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/exploration/join/InnerJoinRightAssociateProject.java
index 77183ed4f7..82a4a53a6b 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/exploration/join/InnerJoinRightAssociateProject.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/exploration/join/InnerJoinRightAssociateProject.java
@@ -27,7 +27,8 @@ import org.apache.doris.nereids.trees.plans.GroupPlan;
 import org.apache.doris.nereids.trees.plans.Plan;
 import org.apache.doris.nereids.trees.plans.logical.LogicalJoin;
 
-import java.util.ArrayList;
+import com.google.common.collect.ImmutableList;
+
 import java.util.HashSet;
 import java.util.List;
 import java.util.Map;
@@ -87,7 +88,7 @@ public class InnerJoinRightAssociateProject extends 
OneExplorationRuleFactory {
                     setNewBottomJoinReorder(newBottomJoin, bottomJoin);
                     setNewTopJoinReorder(newTopJoin, topJoin);
 
-                    return CBOUtils.projectOrSelf(new 
ArrayList<>(topJoin.getOutput()), newTopJoin);
+                    return 
CBOUtils.projectOrSelf(ImmutableList.copyOf(topJoin.getOutput()), newTopJoin);
                 }).toRule(RuleType.LOGICAL_INNER_JOIN_RIGHT_ASSOCIATIVE);
     }
 
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/exploration/join/JoinExchangeBothProject.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/exploration/join/JoinExchangeBothProject.java
index 87d352237c..f0c1f7e5de 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/exploration/join/JoinExchangeBothProject.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/exploration/join/JoinExchangeBothProject.java
@@ -30,6 +30,7 @@ import org.apache.doris.nereids.trees.plans.Plan;
 import org.apache.doris.nereids.trees.plans.logical.LogicalJoin;
 import org.apache.doris.nereids.util.JoinUtils;
 
+import com.google.common.collect.ImmutableList;
 import com.google.common.collect.Lists;
 
 import java.util.ArrayList;
@@ -104,7 +105,7 @@ public class JoinExchangeBothProject extends 
OneExplorationRuleFactory {
                     JoinExchange.setNewRightJoinReorder(newRightJoin, 
leftJoin);
                     JoinExchange.setNewTopJoinReorder(newTopJoin, topJoin);
 
-                    return CBOUtils.projectOrSelf(new 
ArrayList<>(topJoin.getOutput()), newTopJoin);
+                    return 
CBOUtils.projectOrSelf(ImmutableList.copyOf(topJoin.getOutput()), newTopJoin);
                 }).toRule(RuleType.LOGICAL_JOIN_EXCHANGE);
     }
 
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/exploration/join/JoinExchangeLeftProject.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/exploration/join/JoinExchangeLeftProject.java
index 3d54f5731c..94878fd7c3 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/exploration/join/JoinExchangeLeftProject.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/exploration/join/JoinExchangeLeftProject.java
@@ -30,6 +30,7 @@ import org.apache.doris.nereids.trees.plans.Plan;
 import org.apache.doris.nereids.trees.plans.logical.LogicalJoin;
 import org.apache.doris.nereids.util.JoinUtils;
 
+import com.google.common.collect.ImmutableList;
 import com.google.common.collect.Lists;
 
 import java.util.ArrayList;
@@ -104,7 +105,7 @@ public class JoinExchangeLeftProject extends 
OneExplorationRuleFactory {
                     JoinExchange.setNewRightJoinReorder(newRightJoin, 
leftJoin);
                     JoinExchange.setNewTopJoinReorder(newTopJoin, topJoin);
 
-                    return CBOUtils.projectOrSelf(new 
ArrayList<>(topJoin.getOutput()), newTopJoin);
+                    return 
CBOUtils.projectOrSelf(ImmutableList.copyOf(topJoin.getOutput()), newTopJoin);
                 }).toRule(RuleType.LOGICAL_JOIN_EXCHANGE);
     }
 
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/exploration/join/JoinExchangeRightProject.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/exploration/join/JoinExchangeRightProject.java
index d1d54e1dc1..5b7b62b312 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/exploration/join/JoinExchangeRightProject.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/exploration/join/JoinExchangeRightProject.java
@@ -30,6 +30,7 @@ import org.apache.doris.nereids.trees.plans.Plan;
 import org.apache.doris.nereids.trees.plans.logical.LogicalJoin;
 import org.apache.doris.nereids.util.JoinUtils;
 
+import com.google.common.collect.ImmutableList;
 import com.google.common.collect.Lists;
 
 import java.util.ArrayList;
@@ -104,7 +105,7 @@ public class JoinExchangeRightProject extends 
OneExplorationRuleFactory {
                     JoinExchange.setNewRightJoinReorder(newRightJoin, 
rightJoin);
                     JoinExchange.setNewTopJoinReorder(newTopJoin, topJoin);
 
-                    return CBOUtils.projectOrSelf(new 
ArrayList<>(topJoin.getOutput()), newTopJoin);
+                    return 
CBOUtils.projectOrSelf(ImmutableList.copyOf(topJoin.getOutput()), newTopJoin);
                 }).toRule(RuleType.LOGICAL_JOIN_EXCHANGE);
     }
 
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/exploration/join/LogicalJoinSemiJoinTransposeProject.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/exploration/join/LogicalJoinSemiJoinTransposeProject.java
index 30c6e4b1ee..7f72dcd5b3 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/exploration/join/LogicalJoinSemiJoinTransposeProject.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/exploration/join/LogicalJoinSemiJoinTransposeProject.java
@@ -27,7 +27,6 @@ import 
org.apache.doris.nereids.trees.plans.logical.LogicalJoin;
 
 import com.google.common.collect.ImmutableList;
 
-import java.util.ArrayList;
 import java.util.List;
 
 /**
@@ -56,7 +55,7 @@ public class LogicalJoinSemiJoinTransposeProject implements 
ExplorationRuleFacto
                             // Discard this project, because it is useless.
                             Plan newBottomJoin = 
topJoin.withChildrenNoContext(a, c);
                             Plan newTopJoin = 
bottomJoin.withChildrenNoContext(newBottomJoin, b);
-                            return CBOUtils.projectOrSelf(new 
ArrayList<>(topJoin.getOutput()),
+                            return 
CBOUtils.projectOrSelf(ImmutableList.copyOf(topJoin.getOutput()),
                                     newTopJoin);
                         
}).toRule(RuleType.LOGICAL_JOIN_LOGICAL_SEMI_JOIN_TRANSPOSE_PROJECT),
 
@@ -74,7 +73,7 @@ public class LogicalJoinSemiJoinTransposeProject implements 
ExplorationRuleFacto
                             // Discard this project, because it is useless.
                             Plan newBottomJoin = 
topJoin.withChildrenNoContext(a, b);
                             Plan newTopJoin = 
bottomJoin.withChildrenNoContext(newBottomJoin, c);
-                            return CBOUtils.projectOrSelf(new 
ArrayList<>(topJoin.getOutput()),
+                            return 
CBOUtils.projectOrSelf(ImmutableList.copyOf(topJoin.getOutput()),
                                     newTopJoin);
                         
}).toRule(RuleType.LOGICAL_JOIN_LOGICAL_SEMI_JOIN_TRANSPOSE_PROJECT)
         );
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/exploration/join/OuterJoinAssocProject.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/exploration/join/OuterJoinAssocProject.java
index 0f1b35e438..cbbd72b5c8 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/exploration/join/OuterJoinAssocProject.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/exploration/join/OuterJoinAssocProject.java
@@ -31,9 +31,9 @@ import 
org.apache.doris.nereids.trees.plans.logical.LogicalJoin;
 import org.apache.doris.nereids.trees.plans.logical.LogicalProject;
 import org.apache.doris.nereids.util.ExpressionUtils;
 
+import com.google.common.collect.ImmutableList;
 import com.google.common.collect.ImmutableSet;
 
-import java.util.ArrayList;
 import java.util.HashSet;
 import java.util.Set;
 
@@ -99,7 +99,7 @@ public class OuterJoinAssocProject extends 
OneExplorationRuleFactory {
                     
newTopJoin.getJoinReorderContext().copyFrom(topJoin.getJoinReorderContext());
                     OuterJoinAssoc.setReorderContext(newTopJoin, 
newBottomJoin);
 
-                    return CBOUtils.projectOrSelf(new 
ArrayList<>(topJoin.getOutput()), newTopJoin);
+                    return 
CBOUtils.projectOrSelf(ImmutableList.copyOf(topJoin.getOutput()), newTopJoin);
                 }).toRule(RuleType.LOGICAL_OUTER_JOIN_ASSOC_PROJECT);
     }
 }
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/exploration/join/OuterJoinLAsscomProject.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/exploration/join/OuterJoinLAsscomProject.java
index 1eefd08621..1ad60b39f1 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/exploration/join/OuterJoinLAsscomProject.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/exploration/join/OuterJoinLAsscomProject.java
@@ -27,7 +27,8 @@ import org.apache.doris.nereids.trees.plans.GroupPlan;
 import org.apache.doris.nereids.trees.plans.Plan;
 import org.apache.doris.nereids.trees.plans.logical.LogicalJoin;
 
-import java.util.ArrayList;
+import com.google.common.collect.ImmutableList;
+
 import java.util.HashSet;
 import java.util.Set;
 
@@ -80,7 +81,7 @@ public class OuterJoinLAsscomProject extends 
OneExplorationRuleFactory {
                     
newTopJoin.getJoinReorderContext().copyFrom(topJoin.getJoinReorderContext());
                     newTopJoin.getJoinReorderContext().setHasLAsscom(true);
 
-                    return CBOUtils.projectOrSelf(new 
ArrayList<>(topJoin.getOutput()), newTopJoin);
+                    return 
CBOUtils.projectOrSelf(ImmutableList.copyOf(topJoin.getOutput()), newTopJoin);
                 }).toRule(RuleType.LOGICAL_OUTER_JOIN_LASSCOM_PROJECT);
     }
 }
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/exploration/join/PushdownProjectThroughInnerJoin.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/exploration/join/PushdownProjectThroughInnerJoin.java
index a425c27c31..bd9d146426 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/exploration/join/PushdownProjectThroughInnerJoin.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/exploration/join/PushdownProjectThroughInnerJoin.java
@@ -122,7 +122,7 @@ public class PushdownProjectThroughInnerJoin implements 
ExplorationRuleFactory {
 
         if (!rightContains) {
             Plan newJoin = join.withChildren(newLeft, join.right());
-            return CBOUtils.projectOrSelf(new 
ArrayList<>(project.getOutput()), newJoin);
+            return 
CBOUtils.projectOrSelf(ImmutableList.copyOf(project.getOutput()), newJoin);
         }
 
         Builder<NamedExpression> newBProject = 
ImmutableList.<NamedExpression>builder().addAll(bProjects);
@@ -133,7 +133,7 @@ public class PushdownProjectThroughInnerJoin implements 
ExplorationRuleFactory {
         Plan newRight = CBOUtils.projectOrSelf(newBProject.build(), 
join.right());
 
         Plan newJoin = join.withChildren(newLeft, newRight);
-        return CBOUtils.projectOrSelf(new ArrayList<>(project.getOutput()), 
newJoin);
+        return 
CBOUtils.projectOrSelf(ImmutableList.copyOf(project.getOutput()), newJoin);
     }
 
 }
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/exploration/join/PushdownProjectThroughSemiJoin.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/exploration/join/PushdownProjectThroughSemiJoin.java
index aa814a03e0..aa27774b8b 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/exploration/join/PushdownProjectThroughSemiJoin.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/exploration/join/PushdownProjectThroughSemiJoin.java
@@ -90,6 +90,6 @@ public class PushdownProjectThroughSemiJoin implements 
ExplorationRuleFactory {
         Plan newLeft = CBOUtils.projectOrSelf(newProject, join.left());
 
         Plan newJoin = join.withChildren(newLeft, join.right());
-        return CBOUtils.projectOrSelf(new ArrayList<>(project.getOutput()), 
newJoin);
+        return 
CBOUtils.projectOrSelf(ImmutableList.copyOf(project.getOutput()), newJoin);
     }
 }
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/exploration/join/SemiJoinSemiJoinTransposeProject.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/exploration/join/SemiJoinSemiJoinTransposeProject.java
index f28f427786..0db1c80087 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/exploration/join/SemiJoinSemiJoinTransposeProject.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/exploration/join/SemiJoinSemiJoinTransposeProject.java
@@ -28,9 +28,9 @@ import org.apache.doris.nereids.trees.plans.GroupPlan;
 import org.apache.doris.nereids.trees.plans.logical.LogicalJoin;
 import org.apache.doris.nereids.trees.plans.logical.LogicalProject;
 
+import com.google.common.collect.ImmutableList;
 import com.google.common.collect.Lists;
 
-import java.util.ArrayList;
 import java.util.HashSet;
 import java.util.Set;
 
@@ -81,7 +81,7 @@ public class SemiJoinSemiJoinTransposeProject extends 
OneExplorationRuleFactory
                     LogicalJoin newTopSemi = 
bottomSemi.withChildrenNoContext(acProject, b);
                     
newTopSemi.getJoinReorderContext().copyFrom(topSemi.getJoinReorderContext());
                     newTopSemi.getJoinReorderContext().setHasLAsscom(true);
-                    return CBOUtils.projectOrSelf(new 
ArrayList<>(topSemi.getOutput()), newTopSemi);
+                    return 
CBOUtils.projectOrSelf(ImmutableList.copyOf(topSemi.getOutput()), newTopSemi);
                 
}).toRule(RuleType.LOGICAL_SEMI_JOIN_SEMI_JOIN_TRANSPOSE_PROJECT);
     }
 
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/expression/ExpressionRewrite.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/expression/ExpressionRewrite.java
index e42f82b13f..83aaa362b2 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/expression/ExpressionRewrite.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/expression/ExpressionRewrite.java
@@ -204,7 +204,7 @@ public class ExpressionRewrite implements 
RewriteRuleFactory {
                 }
                 return new LogicalJoin<>(join.getJoinType(), 
rewriteHashJoinConjuncts,
                         rewriteOtherJoinConjuncts, join.getHint(), 
join.getMarkJoinSlotReference(),
-                        join.left(), join.right());
+                        join.children());
             }).toRule(RuleType.REWRITE_JOIN_EXPRESSION);
         }
     }
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/rewrite/ExistsApplyToJoin.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/rewrite/ExistsApplyToJoin.java
index 6fb80b6afc..04fbc55340 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/rewrite/ExistsApplyToJoin.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/rewrite/ExistsApplyToJoin.java
@@ -107,7 +107,7 @@ public class ExistsApplyToJoin extends 
OneRewriteRuleFactory {
                         : ExpressionUtils.EMPTY_CONDITION,
                     JoinHint.NONE,
                     apply.getMarkJoinSlotReference(),
-                    (LogicalPlan) apply.left(), (LogicalPlan) apply.right());
+                    apply.children());
         } else {
             return new LogicalJoin<>(JoinType.LEFT_SEMI_JOIN, 
ExpressionUtils.EMPTY_CONDITION,
                     predicate != null
@@ -115,7 +115,7 @@ public class ExistsApplyToJoin extends 
OneRewriteRuleFactory {
                         : ExpressionUtils.EMPTY_CONDITION,
                     JoinHint.NONE,
                     apply.getMarkJoinSlotReference(),
-                    (LogicalPlan) apply.left(), (LogicalPlan) apply.right());
+                    apply.children());
         }
     }
 
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/rewrite/ExtractFilterFromCrossJoin.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/rewrite/ExtractFilterFromCrossJoin.java
index 20ea1b928a..779425e2e1 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/rewrite/ExtractFilterFromCrossJoin.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/rewrite/ExtractFilterFromCrossJoin.java
@@ -41,7 +41,7 @@ public class ExtractFilterFromCrossJoin extends 
OneRewriteRuleFactory {
                 .then(join -> {
                     LogicalJoin<Plan, Plan> newJoin = new 
LogicalJoin<>(JoinType.CROSS_JOIN,
                             ExpressionUtils.EMPTY_CONDITION, 
ExpressionUtils.EMPTY_CONDITION, join.getHint(),
-                            join.getMarkJoinSlotReference(), join.left(), 
join.right());
+                            join.getMarkJoinSlotReference(), join.children());
                     Set<Expression> predicates = 
Stream.concat(join.getHashJoinConjuncts().stream(),
                                     join.getOtherJoinConjuncts().stream())
                             .collect(ImmutableSet.toImmutableSet());
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/rewrite/FindHashConditionForJoin.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/rewrite/FindHashConditionForJoin.java
index 663ca7827a..8dc1ad137c 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/rewrite/FindHashConditionForJoin.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/rewrite/FindHashConditionForJoin.java
@@ -74,7 +74,7 @@ public class FindHashConditionForJoin extends 
OneRewriteRuleFactory {
                     remainedNonHashJoinConjuncts,
                     join.getHint(),
                     join.getMarkJoinSlotReference(),
-                    join.left(), join.right());
+                    join.children());
         }).toRule(RuleType.FIND_HASH_CONDITION_FOR_JOIN);
     }
 }
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/rewrite/InApplyToJoin.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/rewrite/InApplyToJoin.java
index 09adc9327b..261316e83e 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/rewrite/InApplyToJoin.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/rewrite/InApplyToJoin.java
@@ -111,12 +111,12 @@ public class InApplyToJoin extends OneRewriteRuleFactory {
                         Lists.newArrayList(),
                         conjuncts,
                         JoinHint.NONE, apply.getMarkJoinSlotReference(),
-                        apply.left(), apply.right());
+                        apply.children());
             } else {
                 return new LogicalJoin<>(JoinType.LEFT_SEMI_JOIN, 
Lists.newArrayList(),
                         conjuncts,
                         JoinHint.NONE, apply.getMarkJoinSlotReference(),
-                        apply.left(), apply.right());
+                        apply.children());
             }
         }).toRule(RuleType.IN_APPLY_TO_JOIN);
     }
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/rewrite/PushFilterInsideJoin.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/rewrite/PushFilterInsideJoin.java
index c24e80d19d..ca987a5bea 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/rewrite/PushFilterInsideJoin.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/rewrite/PushFilterInsideJoin.java
@@ -49,7 +49,7 @@ public class PushFilterInsideJoin extends 
OneRewriteRuleFactory {
                     otherConditions.addAll(join.getOtherJoinConjuncts());
                     return new LogicalJoin<>(join.getJoinType(), 
join.getHashJoinConjuncts(),
                             otherConditions, join.getHint(), 
join.getMarkJoinSlotReference(),
-                            join.left(), join.right());
+                            join.children());
                 }).toRule(RuleType.PUSH_FILTER_INSIDE_JOIN);
     }
 }
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/rewrite/ScalarApplyToJoin.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/rewrite/ScalarApplyToJoin.java
index 8fddcd31d7..82a1398d59 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/rewrite/ScalarApplyToJoin.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/rewrite/ScalarApplyToJoin.java
@@ -93,7 +93,6 @@ public class ScalarApplyToJoin extends OneRewriteRuleFactory {
                         : correlationFilter.get()),
                 JoinHint.NONE,
                 apply.getMarkJoinSlotReference(),
-                (LogicalPlan) apply.left(),
-                (LogicalPlan) apply.right());
+                apply.children());
     }
 }
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 2128827af1..6b97f615b1 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
@@ -19,13 +19,6 @@ package org.apache.doris.nereids.trees.plans;
 
 import org.apache.doris.nereids.analyzer.Unbound;
 import org.apache.doris.nereids.memo.GroupExpression;
-import org.apache.doris.nereids.memo.Memo;
-import org.apache.doris.nereids.metrics.CounterType;
-import org.apache.doris.nereids.metrics.EventChannel;
-import org.apache.doris.nereids.metrics.EventProducer;
-import org.apache.doris.nereids.metrics.consumer.LogConsumer;
-import org.apache.doris.nereids.metrics.enhancer.AddCounterEventEnhancer;
-import org.apache.doris.nereids.metrics.event.CounterEvent;
 import org.apache.doris.nereids.properties.LogicalProperties;
 import org.apache.doris.nereids.properties.UnboundLogicalProperties;
 import org.apache.doris.nereids.trees.AbstractTreeNode;
@@ -53,10 +46,6 @@ import javax.annotation.Nullable;
  */
 public abstract class AbstractPlan extends AbstractTreeNode<Plan> implements 
Plan {
     public static final String FRAGMENT_ID = "fragment";
-    private static final EventProducer PLAN_CONSTRUCT_TRACER = new 
EventProducer(CounterEvent.class,
-            EventChannel.getDefaultChannel()
-                    .addEnhancers(new AddCounterEventEnhancer())
-                    .addConsumers(new LogConsumer(CounterEvent.class, 
EventChannel.LOG)));
 
     protected final Statistics statistics;
     protected final PlanType type;
@@ -74,8 +63,19 @@ public abstract class AbstractPlan extends 
AbstractTreeNode<Plan> implements Pla
         this(type, Optional.empty(), Optional.empty(), null, children);
     }
 
-    public AbstractPlan(PlanType type, Optional<LogicalProperties> 
optLogicalProperties, Plan... children) {
-        this(type, Optional.empty(), optLogicalProperties, null, children);
+    /**
+     * all parameter constructor.
+     */
+    public AbstractPlan(PlanType type, Optional<GroupExpression> 
groupExpression,
+            Optional<LogicalProperties> optLogicalProperties, @Nullable 
Statistics statistics,
+            Plan... children) {
+        super(groupExpression, children);
+        this.type = Objects.requireNonNull(type, "type can not be null");
+        this.groupExpression = Objects.requireNonNull(groupExpression, 
"groupExpression can not be null");
+        Objects.requireNonNull(optLogicalProperties, "logicalProperties can 
not be null");
+        this.logicalPropertiesSupplier = Suppliers.memoize(() -> 
optLogicalProperties.orElseGet(
+                this::computeLogicalProperties));
+        this.statistics = statistics;
     }
 
     /**
@@ -83,7 +83,7 @@ public abstract class AbstractPlan extends 
AbstractTreeNode<Plan> implements Pla
      */
     public AbstractPlan(PlanType type, Optional<GroupExpression> 
groupExpression,
             Optional<LogicalProperties> optLogicalProperties, @Nullable 
Statistics statistics,
-            Plan... children) {
+            List<Plan> children) {
         super(groupExpression, children);
         this.type = Objects.requireNonNull(type, "type can not be null");
         this.groupExpression = Objects.requireNonNull(groupExpression, 
"groupExpression can not be null");
@@ -91,7 +91,6 @@ public abstract class AbstractPlan extends 
AbstractTreeNode<Plan> implements Pla
         this.logicalPropertiesSupplier = Suppliers.memoize(() -> 
optLogicalProperties.orElseGet(
                 this::computeLogicalProperties));
         this.statistics = statistics;
-        PLAN_CONSTRUCT_TRACER.log(CounterEvent.of(Memo.getStateId(), 
CounterType.PLAN_CONSTRUCTOR, null, null, null));
     }
 
     @Override
@@ -200,6 +199,7 @@ public abstract class AbstractPlan extends 
AbstractTreeNode<Plan> implements Pla
 
     /**
      * used in treeString()
+     *
      * @return "" if groupExpression is empty, o.w. string format of group id
      */
     public String getGroupIdAsString() {
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/Command.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/Command.java
index e5c7413fa6..ac3a077821 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/Command.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/Command.java
@@ -27,9 +27,6 @@ import org.apache.doris.nereids.trees.plans.PlanType;
 import org.apache.doris.nereids.trees.plans.logical.LogicalPlan;
 import org.apache.doris.qe.ConnectContext;
 import org.apache.doris.qe.StmtExecutor;
-import org.apache.doris.statistics.Statistics;
-
-import org.jetbrains.annotations.Nullable;
 
 import java.util.List;
 import java.util.Optional;
@@ -43,17 +40,6 @@ public abstract class Command extends AbstractPlan 
implements LogicalPlan {
         super(type, children);
     }
 
-    public Command(PlanType type, Optional<LogicalProperties> 
optLogicalProperties, Plan... children) {
-        super(type, optLogicalProperties, children);
-    }
-
-    public Command(PlanType type, Optional<GroupExpression> groupExpression,
-            Optional<LogicalProperties> optLogicalProperties,
-            @Nullable Statistics statistics,
-            Plan... children) {
-        super(type, groupExpression, optLogicalProperties, statistics, 
children);
-    }
-
     public void run(ConnectContext ctx, StmtExecutor executor) throws 
Exception {
         // all command should impl this interface.
     }
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/AbstractLogicalPlan.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/AbstractLogicalPlan.java
index d8fb322073..c5b2b4aeea 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/AbstractLogicalPlan.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/AbstractLogicalPlan.java
@@ -26,6 +26,7 @@ import org.apache.doris.nereids.trees.plans.Plan;
 import org.apache.doris.nereids.trees.plans.PlanType;
 import org.apache.doris.qe.ConnectContext;
 
+import java.util.List;
 import java.util.Optional;
 import java.util.function.Supplier;
 
@@ -40,12 +41,13 @@ public abstract class AbstractLogicalPlan extends 
AbstractPlan implements Logica
         super(type, children);
     }
 
-    public AbstractLogicalPlan(PlanType type, Optional<LogicalProperties> 
logicalProperties, Plan... children) {
-        super(type, logicalProperties, children);
+    public AbstractLogicalPlan(PlanType type, Optional<GroupExpression> 
groupExpression,
+            Optional<LogicalProperties> logicalProperties, Plan... children) {
+        super(type, groupExpression, logicalProperties, null, children);
     }
 
     public AbstractLogicalPlan(PlanType type, Optional<GroupExpression> 
groupExpression,
-                               Optional<LogicalProperties> logicalProperties, 
Plan... children) {
+            Optional<LogicalProperties> logicalProperties, List<Plan> 
children) {
         super(type, groupExpression, logicalProperties, null, children);
     }
 
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalBinary.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalBinary.java
index 2e79b453e6..b49a627d0a 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalBinary.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalBinary.java
@@ -42,5 +42,10 @@ public abstract class LogicalBinary<
         super(type, groupExpression, logicalProperties, leftChild, rightChild);
     }
 
+    public LogicalBinary(PlanType type, Optional<GroupExpression> 
groupExpression,
+            Optional<LogicalProperties> logicalProperties, List<Plan> 
children) {
+        super(type, groupExpression, logicalProperties, children);
+    }
+
     public abstract List<Slot> computeOutput();
 }
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalJoin.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalJoin.java
index 5a6d53a792..98a86a43dc 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalJoin.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalJoin.java
@@ -94,14 +94,26 @@ public class LogicalJoin<LEFT_CHILD_TYPE extends Plan, 
RIGHT_CHILD_TYPE extends
                 Optional.empty(), Optional.empty(), leftChild, rightChild);
     }
 
+    public LogicalJoin(
+            JoinType joinType,
+            List<Expression> hashJoinConjuncts,
+            List<Expression> otherJoinConjuncts,
+            JoinHint hint,
+            Optional<MarkJoinSlotReference> markJoinSlotReference,
+            List<Plan> children) {
+        this(joinType, hashJoinConjuncts,
+                otherJoinConjuncts, hint, markJoinSlotReference,
+                Optional.empty(), Optional.empty(), children);
+    }
+
     /**
      * Just use in withXXX method.
      */
     private LogicalJoin(JoinType joinType, List<Expression> hashJoinConjuncts, 
List<Expression> otherJoinConjuncts,
             JoinHint hint, Optional<MarkJoinSlotReference> 
markJoinSlotReference,
             Optional<GroupExpression> groupExpression, 
Optional<LogicalProperties> logicalProperties,
-            LEFT_CHILD_TYPE leftChild, RIGHT_CHILD_TYPE rightChild, 
JoinReorderContext joinReorderContext) {
-        super(PlanType.LOGICAL_JOIN, groupExpression, logicalProperties, 
leftChild, rightChild);
+            List<Plan> children, JoinReorderContext joinReorderContext) {
+        super(PlanType.LOGICAL_JOIN, groupExpression, logicalProperties, 
children);
         this.joinType = Objects.requireNonNull(joinType, "joinType can not be 
null");
         this.hashJoinConjuncts = ImmutableList.copyOf(hashJoinConjuncts);
         this.otherJoinConjuncts = ImmutableList.copyOf(otherJoinConjuncts);
@@ -128,6 +140,23 @@ public class LogicalJoin<LEFT_CHILD_TYPE extends Plan, 
RIGHT_CHILD_TYPE extends
         this.markJoinSlotReference = markJoinSlotReference;
     }
 
+    private LogicalJoin(
+            JoinType joinType,
+            List<Expression> hashJoinConjuncts,
+            List<Expression> otherJoinConjuncts,
+            JoinHint hint,
+            Optional<MarkJoinSlotReference> markJoinSlotReference,
+            Optional<GroupExpression> groupExpression,
+            Optional<LogicalProperties> logicalProperties,
+            List<Plan> children) {
+        super(PlanType.LOGICAL_JOIN, groupExpression, logicalProperties, 
children);
+        this.joinType = Objects.requireNonNull(joinType, "joinType can not be 
null");
+        this.hashJoinConjuncts = ImmutableList.copyOf(hashJoinConjuncts);
+        this.otherJoinConjuncts = ImmutableList.copyOf(otherJoinConjuncts);
+        this.hint = Objects.requireNonNull(hint, "hint can not be null");
+        this.markJoinSlotReference = markJoinSlotReference;
+    }
+
     public List<Expression> getOtherJoinConjuncts() {
         return otherJoinConjuncts;
     }
@@ -252,13 +281,13 @@ public class LogicalJoin<LEFT_CHILD_TYPE extends Plan, 
RIGHT_CHILD_TYPE extends
     public LogicalJoin<Plan, Plan> withChildren(List<Plan> children) {
         Preconditions.checkArgument(children.size() == 2);
         return new LogicalJoin<>(joinType, hashJoinConjuncts, 
otherJoinConjuncts, hint, markJoinSlotReference,
-                Optional.empty(), Optional.empty(), children.get(0), 
children.get(1), joinReorderContext);
+                Optional.empty(), Optional.empty(), children, 
joinReorderContext);
     }
 
     @Override
     public LogicalJoin<Plan, Plan> 
withGroupExpression(Optional<GroupExpression> groupExpression) {
         return new LogicalJoin<>(joinType, hashJoinConjuncts, 
otherJoinConjuncts, hint, markJoinSlotReference,
-                groupExpression, Optional.of(getLogicalProperties()), left(), 
right(), joinReorderContext);
+                groupExpression, Optional.of(getLogicalProperties()), 
children, joinReorderContext);
     }
 
     @Override
@@ -266,7 +295,7 @@ public class LogicalJoin<LEFT_CHILD_TYPE extends Plan, 
RIGHT_CHILD_TYPE extends
             Optional<LogicalProperties> logicalProperties, List<Plan> 
children) {
         Preconditions.checkArgument(children.size() == 2);
         return new LogicalJoin<>(joinType, hashJoinConjuncts, 
otherJoinConjuncts, hint, markJoinSlotReference,
-                groupExpression, logicalProperties, children.get(0), 
children.get(1), joinReorderContext);
+                groupExpression, logicalProperties, children, 
joinReorderContext);
     }
 
     public LogicalJoin<Plan, Plan> withChildrenNoContext(Plan left, Plan 
right) {
@@ -277,7 +306,7 @@ public class LogicalJoin<LEFT_CHILD_TYPE extends Plan, 
RIGHT_CHILD_TYPE extends
     public LogicalJoin<Plan, Plan> withJoinConjuncts(
             List<Expression> hashJoinConjuncts, List<Expression> 
otherJoinConjuncts) {
         return new LogicalJoin<>(joinType, hashJoinConjuncts, 
otherJoinConjuncts,
-                hint, markJoinSlotReference, left(), right());
+                hint, markJoinSlotReference, children);
     }
 
     public LogicalJoin<Plan, Plan> withHashJoinConjunctsAndChildren(
@@ -295,7 +324,7 @@ public class LogicalJoin<LEFT_CHILD_TYPE extends Plan, 
RIGHT_CHILD_TYPE extends
 
     public LogicalJoin<Plan, Plan> withJoinType(JoinType joinType) {
         return new LogicalJoin<>(joinType, hashJoinConjuncts, 
otherJoinConjuncts, hint,
-                markJoinSlotReference, left(), right());
+                markJoinSlotReference, children);
     }
 
     public LogicalJoin<Plan, Plan> withTypeChildren(JoinType joinType, Plan 
left, Plan right) {
@@ -305,7 +334,7 @@ public class LogicalJoin<LEFT_CHILD_TYPE extends Plan, 
RIGHT_CHILD_TYPE extends
 
     public LogicalJoin<Plan, Plan> withOtherJoinConjuncts(List<Expression> 
otherJoinConjuncts) {
         return new LogicalJoin<>(joinType, hashJoinConjuncts, 
otherJoinConjuncts, hint,
-                markJoinSlotReference, left(), right());
+                markJoinSlotReference, children);
     }
 
     @Override
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalUnary.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalUnary.java
index fd0f4cc723..3cf666dedf 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalUnary.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalUnary.java
@@ -38,10 +38,6 @@ public abstract class LogicalUnary<CHILD_TYPE extends Plan>
         super(type, child);
     }
 
-    public LogicalUnary(PlanType type, Optional<LogicalProperties> 
logicalProperties, CHILD_TYPE child) {
-        super(type, logicalProperties, child);
-    }
-
     public LogicalUnary(PlanType type, Optional<GroupExpression> 
groupExpression,
                             Optional<LogicalProperties> logicalProperties, 
CHILD_TYPE child) {
         super(type, groupExpression, logicalProperties, child);
diff --git 
a/fe/fe-core/src/test/java/org/apache/doris/nereids/util/HyperGraphBuilder.java 
b/fe/fe-core/src/test/java/org/apache/doris/nereids/util/HyperGraphBuilder.java
index dd5936204d..1fbdcf8954 100644
--- 
a/fe/fe-core/src/test/java/org/apache/doris/nereids/util/HyperGraphBuilder.java
+++ 
b/fe/fe-core/src/test/java/org/apache/doris/nereids/util/HyperGraphBuilder.java
@@ -130,7 +130,7 @@ public class HyperGraphBuilder {
                     rightBitmap);
             Plan leftPlan = plans.get(leftKey.get());
             Plan rightPlan = plans.get(rightKey.get());
-            LogicalJoin join = new LogicalJoin<>(joinType, new ArrayList<>(), 
leftPlan, rightPlan);
+            LogicalJoin join = new LogicalJoin<>(joinType, leftPlan, 
rightPlan);
 
             BitSet key = new BitSet();
             key.or(leftKey.get());
diff --git 
a/fe/fe-core/src/test/java/org/apache/doris/nereids/util/LogicalPlanBuilder.java
 
b/fe/fe-core/src/test/java/org/apache/doris/nereids/util/LogicalPlanBuilder.java
index 1857652bde..99f7884b2b 100644
--- 
a/fe/fe-core/src/test/java/org/apache/doris/nereids/util/LogicalPlanBuilder.java
+++ 
b/fe/fe-core/src/test/java/org/apache/doris/nereids/util/LogicalPlanBuilder.java
@@ -121,7 +121,7 @@ public class LogicalPlanBuilder {
     }
 
     public LogicalPlanBuilder joinEmptyOn(LogicalPlan right, JoinType 
joinType) {
-        LogicalJoin<LogicalPlan, LogicalPlan> join = new 
LogicalJoin<>(joinType, new ArrayList<>(), this.plan, right);
+        LogicalJoin<LogicalPlan, LogicalPlan> join = new 
LogicalJoin<>(joinType, this.plan, right);
         return from(join);
     }
 


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscr...@doris.apache.org
For additional commands, e-mail: commits-h...@doris.apache.org


Reply via email to