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