diff --git a/fe/fe-core/src/main/java/org/apache/doris/analysis/Expr.java b/fe/fe-core/src/main/java/org/apache/doris/analysis/Expr.java index 53875392547c69..383373fb1055b2 100755 --- a/fe/fe-core/src/main/java/org/apache/doris/analysis/Expr.java +++ b/fe/fe-core/src/main/java/org/apache/doris/analysis/Expr.java @@ -31,6 +31,7 @@ import org.apache.doris.common.TreeNode; import org.apache.doris.common.io.Writable; import org.apache.doris.common.util.VectorizedUtil; +import org.apache.doris.statistics.ExprStats; import org.apache.doris.thrift.TExpr; import org.apache.doris.thrift.TExprNode; import org.apache.doris.thrift.TExprOpcode; @@ -60,7 +61,7 @@ /** * Root of the expr node hierarchy. */ -abstract public class Expr extends TreeNode implements ParseNode, Cloneable, Writable { +abstract public class Expr extends TreeNode implements ParseNode, Cloneable, Writable, ExprStats { private static final Logger LOG = LogManager.getLogger(Expr.class); // Name of the function that needs to be implemented by every Expr that diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/analyzer/UnboundAlias.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/analyzer/UnboundAlias.java index d7140292f45472..ecb8363ca2c6af 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/nereids/analyzer/UnboundAlias.java +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/analyzer/UnboundAlias.java @@ -18,7 +18,7 @@ package org.apache.doris.nereids.analyzer; import org.apache.doris.nereids.exceptions.UnboundException; -import org.apache.doris.nereids.trees.NodeType; +import org.apache.doris.nereids.trees.OperatorType; import org.apache.doris.nereids.trees.expressions.ExprId; import org.apache.doris.nereids.trees.expressions.Expression; import org.apache.doris.nereids.trees.expressions.NamedExpression; @@ -34,7 +34,7 @@ public class UnboundAlias implements UnaryExpression { public UnboundAlias(CHILD_TYPE child) { - super(NodeType.UNBOUND_ALIAS, child); + super(OperatorType.UNBOUND_ALIAS, child); } @Override diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/analyzer/UnboundRelation.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/analyzer/UnboundRelation.java index 550894126ddd85..86a0ce648d9457 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/nereids/analyzer/UnboundRelation.java +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/analyzer/UnboundRelation.java @@ -19,7 +19,7 @@ import org.apache.doris.nereids.analyzer.identifier.TableIdentifier; import org.apache.doris.nereids.exceptions.UnboundException; -import org.apache.doris.nereids.operators.OperatorType; +import org.apache.doris.nereids.operators.PlanType; import org.apache.doris.nereids.operators.plans.logical.LogicalLeafOperator; import org.apache.doris.nereids.trees.expressions.Slot; import org.apache.doris.nereids.util.Utils; @@ -36,7 +36,7 @@ public class UnboundRelation extends LogicalLeafOperator { private final List nameParts; public UnboundRelation(List nameParts) { - super(OperatorType.LOGICAL_UNBOUND_RELATION); + super(PlanType.LOGICAL_UNBOUND_RELATION); this.nameParts = nameParts; } @@ -46,7 +46,7 @@ public UnboundRelation(List nameParts) { * @param identifier relation identifier */ public UnboundRelation(TableIdentifier identifier) { - super(OperatorType.LOGICAL_UNBOUND_RELATION); + super(PlanType.LOGICAL_UNBOUND_RELATION); this.nameParts = Lists.newArrayList(); if (identifier.getDatabaseName().isPresent()) { nameParts.add(identifier.getDatabaseName().get()); diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/analyzer/UnboundSlot.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/analyzer/UnboundSlot.java index 5d1d4d7cbbe4c2..1f926be0426677 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/nereids/analyzer/UnboundSlot.java +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/analyzer/UnboundSlot.java @@ -17,7 +17,7 @@ package org.apache.doris.nereids.analyzer; -import org.apache.doris.nereids.trees.NodeType; +import org.apache.doris.nereids.trees.OperatorType; import org.apache.doris.nereids.trees.expressions.Slot; import org.apache.doris.nereids.util.Utils; @@ -32,7 +32,7 @@ public class UnboundSlot extends Slot { private final List nameParts; public UnboundSlot(List nameParts) { - super(NodeType.UNBOUND_SLOT); + super(OperatorType.UNBOUND_SLOT); this.nameParts = nameParts; } diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/analyzer/UnboundStar.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/analyzer/UnboundStar.java index 11b8a54d3d0104..aeae8a243817c3 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/nereids/analyzer/UnboundStar.java +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/analyzer/UnboundStar.java @@ -17,7 +17,7 @@ package org.apache.doris.nereids.analyzer; -import org.apache.doris.nereids.trees.NodeType; +import org.apache.doris.nereids.trees.OperatorType; import org.apache.doris.nereids.trees.expressions.LeafExpression; import org.apache.doris.nereids.trees.expressions.NamedExpression; import org.apache.doris.nereids.util.Utils; @@ -33,7 +33,7 @@ public class UnboundStar extends NamedExpression implements LeafExpression { private final List target; public UnboundStar(List target) { - super(NodeType.UNBOUND_STAR); + super(OperatorType.UNBOUND_STAR); this.target = target; } diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/operators/AbstractOperator.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/operators/AbstractOperator.java index 6363fbcae440b4..0588c028edaeac 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/nereids/operators/AbstractOperator.java +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/operators/AbstractOperator.java @@ -26,21 +26,21 @@ * Abstract class for all concrete operator. */ public abstract class AbstractOperator implements Operator { - protected final OperatorType type; + protected final PlanType type; protected final long limited; - public AbstractOperator(OperatorType type) { + public AbstractOperator(PlanType type) { this.type = Objects.requireNonNull(type, "type can not be null"); this.limited = -1; } - public AbstractOperator(OperatorType type, long limited) { + public AbstractOperator(PlanType type, long limited) { this.type = type; this.limited = limited; } @Override - public OperatorType getType() { + public PlanType getType() { return type; } diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/operators/Operator.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/operators/Operator.java index b391ff24a5b480..79188561653165 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/nereids/operators/Operator.java +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/operators/Operator.java @@ -26,7 +26,7 @@ * interface for all concrete operator. */ public interface Operator { - OperatorType getType(); + PlanType getType(); > NODE_TYPE toTreeNode(GroupExpression groupExpression); diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/operators/OperatorType.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/operators/PlanType.java similarity index 98% rename from fe/fe-core/src/main/java/org/apache/doris/nereids/operators/OperatorType.java rename to fe/fe-core/src/main/java/org/apache/doris/nereids/operators/PlanType.java index f2ddc067167c1d..8aa34b5e887494 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/nereids/operators/OperatorType.java +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/operators/PlanType.java @@ -27,7 +27,7 @@ * 4. MULTI_FIXED: the leaf node of pattern tree, which can be matched by multiple operators, * but these operators cannot be used in rules */ -public enum OperatorType { +public enum PlanType { // logical plan LOGICAL_UNBOUND_RELATION, LOGICAL_BOUND_RELATION, diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/operators/plans/logical/LogicalBinaryOperator.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/operators/plans/logical/LogicalBinaryOperator.java index 228ee0835883bd..5bb0bb9f6a8967 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/nereids/operators/plans/logical/LogicalBinaryOperator.java +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/operators/plans/logical/LogicalBinaryOperator.java @@ -19,7 +19,7 @@ import org.apache.doris.nereids.memo.GroupExpression; import org.apache.doris.nereids.operators.AbstractOperator; -import org.apache.doris.nereids.operators.OperatorType; +import org.apache.doris.nereids.operators.PlanType; import org.apache.doris.nereids.operators.plans.BinaryPlanOperator; import org.apache.doris.nereids.properties.LogicalProperties; import org.apache.doris.nereids.trees.expressions.Slot; @@ -35,7 +35,7 @@ public abstract class LogicalBinaryOperator extends AbstractOperator implements LogicalOperator, BinaryPlanOperator { - public LogicalBinaryOperator(OperatorType type) { + public LogicalBinaryOperator(PlanType type) { super(type); } diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/operators/plans/logical/LogicalFilter.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/operators/plans/logical/LogicalFilter.java index c7d579898cb62e..37f1d63ba21f8d 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/nereids/operators/plans/logical/LogicalFilter.java +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/operators/plans/logical/LogicalFilter.java @@ -17,7 +17,7 @@ package org.apache.doris.nereids.operators.plans.logical; -import org.apache.doris.nereids.operators.OperatorType; +import org.apache.doris.nereids.operators.PlanType; import org.apache.doris.nereids.trees.expressions.Expression; import org.apache.doris.nereids.trees.expressions.Slot; import org.apache.doris.nereids.trees.plans.Plan; @@ -33,7 +33,7 @@ public class LogicalFilter extends LogicalUnaryOperator { private final Expression predicates; public LogicalFilter(Expression predicates) { - super(OperatorType.LOGICAL_FILTER); + super(PlanType.LOGICAL_FILTER); this.predicates = Objects.requireNonNull(predicates, "predicates can not be null"); } diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/operators/plans/logical/LogicalJoin.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/operators/plans/logical/LogicalJoin.java index b1672627bdd756..373fbd40bf3867 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/nereids/operators/plans/logical/LogicalJoin.java +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/operators/plans/logical/LogicalJoin.java @@ -17,7 +17,7 @@ package org.apache.doris.nereids.operators.plans.logical; -import org.apache.doris.nereids.operators.OperatorType; +import org.apache.doris.nereids.operators.PlanType; import org.apache.doris.nereids.operators.plans.JoinType; import org.apache.doris.nereids.rules.exploration.JoinReorderContext; import org.apache.doris.nereids.trees.expressions.Expression; @@ -57,7 +57,7 @@ public LogicalJoin(JoinType joinType) { * @param onClause on clause for join node */ public LogicalJoin(JoinType joinType, Optional onClause) { - super(OperatorType.LOGICAL_JOIN); + super(PlanType.LOGICAL_JOIN); this.joinType = Objects.requireNonNull(joinType, "joinType can not be null"); this.onClause = Objects.requireNonNull(onClause, "onClause can not be null"); } diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/operators/plans/logical/LogicalLeafOperator.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/operators/plans/logical/LogicalLeafOperator.java index 44c72f06e6f60c..135e1d78950b33 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/nereids/operators/plans/logical/LogicalLeafOperator.java +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/operators/plans/logical/LogicalLeafOperator.java @@ -19,7 +19,7 @@ import org.apache.doris.nereids.memo.GroupExpression; import org.apache.doris.nereids.operators.AbstractOperator; -import org.apache.doris.nereids.operators.OperatorType; +import org.apache.doris.nereids.operators.PlanType; import org.apache.doris.nereids.operators.plans.LeafPlanOperator; import org.apache.doris.nereids.trees.expressions.Slot; import org.apache.doris.nereids.trees.plans.Plan; @@ -33,7 +33,7 @@ public abstract class LogicalLeafOperator extends AbstractOperator implements LogicalOperator, LeafPlanOperator { - public LogicalLeafOperator(OperatorType type) { + public LogicalLeafOperator(PlanType type) { super(type); } diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/operators/plans/logical/LogicalProject.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/operators/plans/logical/LogicalProject.java index 555454244373ff..c583042fcbae08 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/nereids/operators/plans/logical/LogicalProject.java +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/operators/plans/logical/LogicalProject.java @@ -18,7 +18,7 @@ package org.apache.doris.nereids.operators.plans.logical; import org.apache.doris.nereids.exceptions.UnboundException; -import org.apache.doris.nereids.operators.OperatorType; +import org.apache.doris.nereids.operators.PlanType; import org.apache.doris.nereids.trees.expressions.NamedExpression; import org.apache.doris.nereids.trees.expressions.Slot; import org.apache.doris.nereids.trees.plans.Plan; @@ -42,7 +42,7 @@ public class LogicalProject extends LogicalUnaryOperator { * @param projects project list */ public LogicalProject(List projects) { - super(OperatorType.LOGICAL_PROJECT); + super(PlanType.LOGICAL_PROJECT); this.projects = Objects.requireNonNull(projects, "projects can not be null"); } diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/operators/plans/logical/LogicalRelation.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/operators/plans/logical/LogicalRelation.java index 6f01817b82b83b..9083ee155448e3 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/nereids/operators/plans/logical/LogicalRelation.java +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/operators/plans/logical/LogicalRelation.java @@ -18,7 +18,7 @@ package org.apache.doris.nereids.operators.plans.logical; import org.apache.doris.catalog.Table; -import org.apache.doris.nereids.operators.OperatorType; +import org.apache.doris.nereids.operators.PlanType; import org.apache.doris.nereids.trees.expressions.Slot; import org.apache.doris.nereids.trees.expressions.SlotReference; @@ -43,7 +43,7 @@ public class LogicalRelation extends LogicalLeafOperator { * @param qualifier qualified relation name */ public LogicalRelation(Table table, List qualifier) { - super(OperatorType.LOGICAL_BOUND_RELATION); + super(PlanType.LOGICAL_BOUND_RELATION); this.table = Objects.requireNonNull(table, "table can not be null"); this.qualifier = Objects.requireNonNull(qualifier, "qualifier can not be null"); } diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/operators/plans/logical/LogicalUnaryOperator.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/operators/plans/logical/LogicalUnaryOperator.java index b04f2ae8f3af91..e8607d634a2175 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/nereids/operators/plans/logical/LogicalUnaryOperator.java +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/operators/plans/logical/LogicalUnaryOperator.java @@ -19,7 +19,7 @@ import org.apache.doris.nereids.memo.GroupExpression; import org.apache.doris.nereids.operators.AbstractOperator; -import org.apache.doris.nereids.operators.OperatorType; +import org.apache.doris.nereids.operators.PlanType; import org.apache.doris.nereids.operators.plans.UnaryPlanOperator; import org.apache.doris.nereids.properties.LogicalProperties; import org.apache.doris.nereids.trees.expressions.Slot; @@ -35,7 +35,7 @@ public abstract class LogicalUnaryOperator extends AbstractOperator implements LogicalOperator, UnaryPlanOperator { - public LogicalUnaryOperator(OperatorType type) { + public LogicalUnaryOperator(PlanType type) { super(type); } diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/operators/plans/physical/PhysicalAggregation.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/operators/plans/physical/PhysicalAggregation.java index 324043591711d9..7d6136e2c74ae2 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/nereids/operators/plans/physical/PhysicalAggregation.java +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/operators/plans/physical/PhysicalAggregation.java @@ -18,7 +18,7 @@ package org.apache.doris.nereids.operators.plans.physical; import org.apache.doris.nereids.PlanOperatorVisitor; -import org.apache.doris.nereids.operators.OperatorType; +import org.apache.doris.nereids.operators.PlanType; import org.apache.doris.nereids.operators.plans.AggPhase; import org.apache.doris.nereids.trees.expressions.Expression; import org.apache.doris.nereids.trees.plans.Plan; @@ -51,7 +51,7 @@ public class PhysicalAggregation extends PhysicalUnaryOperator { */ public PhysicalAggregation(List groupByExprList, List aggExprList, List partitionExprList, AggPhase aggPhase, boolean usingStream) { - super(OperatorType.PHYSICAL_AGGREGATION); + super(PlanType.PHYSICAL_AGGREGATION); this.groupByExprList = groupByExprList; this.aggExprList = aggExprList; this.partitionExprList = partitionExprList; diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/operators/plans/physical/PhysicalBinaryOperator.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/operators/plans/physical/PhysicalBinaryOperator.java index 813cb3d4453374..8c2522c9bc3084 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/nereids/operators/plans/physical/PhysicalBinaryOperator.java +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/operators/plans/physical/PhysicalBinaryOperator.java @@ -19,7 +19,7 @@ import org.apache.doris.nereids.memo.GroupExpression; import org.apache.doris.nereids.operators.AbstractOperator; -import org.apache.doris.nereids.operators.OperatorType; +import org.apache.doris.nereids.operators.PlanType; import org.apache.doris.nereids.operators.plans.BinaryPlanOperator; import org.apache.doris.nereids.properties.LogicalProperties; import org.apache.doris.nereids.trees.expressions.Slot; @@ -35,7 +35,7 @@ public abstract class PhysicalBinaryOperator extends AbstractOperator implements PhysicalOperator, BinaryPlanOperator { - public PhysicalBinaryOperator(OperatorType type) { + public PhysicalBinaryOperator(PlanType type) { super(type); } diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/operators/plans/physical/PhysicalBroadcastHashJoin.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/operators/plans/physical/PhysicalBroadcastHashJoin.java index 3ccbf70657bc6b..a4026b5208c611 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/nereids/operators/plans/physical/PhysicalBroadcastHashJoin.java +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/operators/plans/physical/PhysicalBroadcastHashJoin.java @@ -17,10 +17,9 @@ package org.apache.doris.nereids.operators.plans.physical; -import org.apache.doris.nereids.operators.OperatorType; +import org.apache.doris.nereids.operators.PlanType; import org.apache.doris.nereids.operators.plans.JoinType; import org.apache.doris.nereids.trees.expressions.Expression; -import org.apache.doris.nereids.trees.plans.Plan; import java.util.Objects; import java.util.Optional; @@ -49,7 +48,7 @@ public PhysicalBroadcastHashJoin(JoinType joinType) { * @param onClause on clause expression */ public PhysicalBroadcastHashJoin(JoinType joinType, Optional onClause) { - super(OperatorType.PHYSICAL_BROADCAST_HASH_JOIN); + super(PlanType.PHYSICAL_BROADCAST_HASH_JOIN); this.joinType = Objects.requireNonNull(joinType, "joinType can not be null"); this.onClause = Objects.requireNonNull(onClause, "onClause can not be null"); } diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/operators/plans/physical/PhysicalFilter.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/operators/plans/physical/PhysicalFilter.java index aa54b67caaa02d..8ecc6397251a60 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/nereids/operators/plans/physical/PhysicalFilter.java +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/operators/plans/physical/PhysicalFilter.java @@ -18,7 +18,7 @@ package org.apache.doris.nereids.operators.plans.physical; import org.apache.doris.nereids.PlanOperatorVisitor; -import org.apache.doris.nereids.operators.OperatorType; +import org.apache.doris.nereids.operators.PlanType; import org.apache.doris.nereids.trees.expressions.Expression; import org.apache.doris.nereids.trees.plans.Plan; import org.apache.doris.nereids.trees.plans.physical.PhysicalUnaryPlan; @@ -33,7 +33,7 @@ public class PhysicalFilter extends PhysicalUnaryOperator { private final Expression predicates; public PhysicalFilter(Expression predicates) { - super(OperatorType.PHYSICAL_FILTER); + super(PlanType.PHYSICAL_FILTER); this.predicates = Objects.requireNonNull(predicates, "predicates can not be null"); } diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/operators/plans/physical/PhysicalHashJoin.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/operators/plans/physical/PhysicalHashJoin.java index 94eb6f91476d63..2fc2fc64a1b6af 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/nereids/operators/plans/physical/PhysicalHashJoin.java +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/operators/plans/physical/PhysicalHashJoin.java @@ -18,7 +18,7 @@ package org.apache.doris.nereids.operators.plans.physical; import org.apache.doris.nereids.PlanOperatorVisitor; -import org.apache.doris.nereids.operators.OperatorType; +import org.apache.doris.nereids.operators.PlanType; import org.apache.doris.nereids.operators.plans.JoinType; import org.apache.doris.nereids.trees.expressions.Expression; import org.apache.doris.nereids.trees.plans.Plan; @@ -40,7 +40,7 @@ public class PhysicalHashJoin extends PhysicalBinaryOperator { * @param predicate join condition. */ public PhysicalHashJoin(JoinType joinType, Expression predicate) { - super(OperatorType.PHYSICAL_HASH_JOIN); + super(PlanType.PHYSICAL_HASH_JOIN); this.joinType = joinType; this.predicate = predicate; } diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/operators/plans/physical/PhysicalLeafOperator.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/operators/plans/physical/PhysicalLeafOperator.java index 6cf64ede7cb6ab..2095c91c8f65e0 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/nereids/operators/plans/physical/PhysicalLeafOperator.java +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/operators/plans/physical/PhysicalLeafOperator.java @@ -19,7 +19,7 @@ import org.apache.doris.nereids.memo.GroupExpression; import org.apache.doris.nereids.operators.AbstractOperator; -import org.apache.doris.nereids.operators.OperatorType; +import org.apache.doris.nereids.operators.PlanType; import org.apache.doris.nereids.operators.plans.LeafPlanOperator; import org.apache.doris.nereids.properties.LogicalProperties; import org.apache.doris.nereids.trees.expressions.Slot; @@ -34,7 +34,7 @@ public abstract class PhysicalLeafOperator extends AbstractOperator implements PhysicalOperator, LeafPlanOperator { - public PhysicalLeafOperator(OperatorType type) { + public PhysicalLeafOperator(PlanType type) { super(type); } diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/operators/plans/physical/PhysicalOlapScan.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/operators/plans/physical/PhysicalOlapScan.java index b79e3531069b89..3374234093230a 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/nereids/operators/plans/physical/PhysicalOlapScan.java +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/operators/plans/physical/PhysicalOlapScan.java @@ -20,7 +20,7 @@ import org.apache.doris.catalog.OlapTable; import org.apache.doris.catalog.Partition; import org.apache.doris.nereids.PlanOperatorVisitor; -import org.apache.doris.nereids.operators.OperatorType; +import org.apache.doris.nereids.operators.PlanType; import org.apache.doris.nereids.trees.plans.Plan; import org.apache.doris.nereids.trees.plans.physical.PhysicalLeafPlan; @@ -46,7 +46,7 @@ public class PhysicalOlapScan extends PhysicalScan { * @param qualifier table's name */ public PhysicalOlapScan(OlapTable olapTable, List qualifier) { - super(OperatorType.PHYSICAL_OLAP_SCAN, qualifier); + super(PlanType.PHYSICAL_OLAP_SCAN, qualifier); this.olapTable = olapTable; this.selectedIndexId = olapTable.getBaseIndexId(); this.selectedTabletId = Lists.newArrayList(); diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/operators/plans/physical/PhysicalProject.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/operators/plans/physical/PhysicalProject.java index 5de5fc8c019d65..e86aed0c76f58e 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/nereids/operators/plans/physical/PhysicalProject.java +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/operators/plans/physical/PhysicalProject.java @@ -18,7 +18,7 @@ package org.apache.doris.nereids.operators.plans.physical; import org.apache.doris.nereids.PlanOperatorVisitor; -import org.apache.doris.nereids.operators.OperatorType; +import org.apache.doris.nereids.operators.PlanType; import org.apache.doris.nereids.trees.expressions.NamedExpression; import org.apache.doris.nereids.trees.plans.Plan; import org.apache.doris.nereids.trees.plans.physical.PhysicalUnaryPlan; @@ -36,7 +36,7 @@ public class PhysicalProject extends PhysicalUnaryOperator { private final List projects; public PhysicalProject(List projects) { - super(OperatorType.PHYSICAL_PROJECT); + super(PlanType.PHYSICAL_PROJECT); this.projects = Objects.requireNonNull(projects, "projects can not be null"); } diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/operators/plans/physical/PhysicalScan.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/operators/plans/physical/PhysicalScan.java index 63ffef9b0f3687..d2bbe66edf412a 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/nereids/operators/plans/physical/PhysicalScan.java +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/operators/plans/physical/PhysicalScan.java @@ -17,7 +17,7 @@ package org.apache.doris.nereids.operators.plans.physical; -import org.apache.doris.nereids.operators.OperatorType; +import org.apache.doris.nereids.operators.PlanType; import java.util.List; import java.util.Objects; @@ -36,7 +36,7 @@ public abstract class PhysicalScan extends PhysicalLeafOperator { * @param type node type * @param qualifier table's name */ - public PhysicalScan(OperatorType type, List qualifier) { + public PhysicalScan(PlanType type, List qualifier) { super(type); this.qualifier = Objects.requireNonNull(qualifier, "qualifier can not be null"); } diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/operators/plans/physical/PhysicalSort.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/operators/plans/physical/PhysicalSort.java index dc1ab43b70c62a..0812b4ade847d5 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/nereids/operators/plans/physical/PhysicalSort.java +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/operators/plans/physical/PhysicalSort.java @@ -18,7 +18,7 @@ package org.apache.doris.nereids.operators.plans.physical; import org.apache.doris.nereids.PlanOperatorVisitor; -import org.apache.doris.nereids.operators.OperatorType; +import org.apache.doris.nereids.operators.PlanType; import org.apache.doris.nereids.properties.OrderKey; import org.apache.doris.nereids.trees.plans.Plan; import org.apache.doris.nereids.trees.plans.physical.PhysicalUnaryPlan; @@ -42,7 +42,7 @@ public class PhysicalSort extends PhysicalUnaryOperator { * Constructor of PhysicalHashJoinNode. */ public PhysicalSort(int offset, int limit, List orderList, boolean useTopN) { - super(OperatorType.PHYSICAL_SORT); + super(PlanType.PHYSICAL_SORT); this.offset = offset; this.limit = limit; this.orderList = orderList; diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/operators/plans/physical/PhysicalUnaryOperator.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/operators/plans/physical/PhysicalUnaryOperator.java index daecac819171af..3d475f221d5e12 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/nereids/operators/plans/physical/PhysicalUnaryOperator.java +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/operators/plans/physical/PhysicalUnaryOperator.java @@ -19,7 +19,7 @@ import org.apache.doris.nereids.memo.GroupExpression; import org.apache.doris.nereids.operators.AbstractOperator; -import org.apache.doris.nereids.operators.OperatorType; +import org.apache.doris.nereids.operators.PlanType; import org.apache.doris.nereids.operators.plans.UnaryPlanOperator; import org.apache.doris.nereids.properties.LogicalProperties; import org.apache.doris.nereids.trees.expressions.Slot; @@ -35,7 +35,7 @@ public abstract class PhysicalUnaryOperator extends AbstractOperator implements PhysicalOperator, UnaryPlanOperator { - public PhysicalUnaryOperator(OperatorType type) { + public PhysicalUnaryOperator(PlanType type) { super(type); } 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 4771300ad942bb..6c1a50cd232c0f 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 @@ -19,7 +19,7 @@ import org.apache.doris.nereids.memo.Group; import org.apache.doris.nereids.memo.GroupExpression; -import org.apache.doris.nereids.operators.OperatorType; +import org.apache.doris.nereids.operators.PlanType; import org.apache.doris.nereids.trees.TreeNode; import com.google.common.collect.Lists; @@ -89,8 +89,8 @@ public NODE_TYPE next() { throw new NoSuchElementException(); } - if (OperatorType.FIXED == pattern.getOperatorType() - || OperatorType.MULTI_FIXED == pattern.getOperatorType()) { + if (PlanType.FIXED == pattern.getOperatorType() + || PlanType.MULTI_FIXED == pattern.getOperatorType()) { iteratorIndex = iterator.size(); return iterator.get(0).next(); } else { diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/pattern/Pattern.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/pattern/Pattern.java index 781e10aa979d9a..ddc91db8a355cd 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/nereids/pattern/Pattern.java +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/pattern/Pattern.java @@ -19,9 +19,9 @@ import org.apache.doris.nereids.memo.GroupExpression; import org.apache.doris.nereids.operators.Operator; -import org.apache.doris.nereids.operators.OperatorType; +import org.apache.doris.nereids.operators.PlanType; import org.apache.doris.nereids.trees.AbstractTreeNode; -import org.apache.doris.nereids.trees.NodeType; +import org.apache.doris.nereids.trees.OperatorType; import org.apache.doris.nereids.trees.TreeNode; import com.google.common.collect.ImmutableList; @@ -36,13 +36,13 @@ */ public class Pattern> extends AbstractTreeNode> { - public static final Pattern ANY = new Pattern(OperatorType.ANY); - public static final Pattern MULTI = new Pattern(OperatorType.MULTI); - public static final Pattern FIXED = new Pattern(OperatorType.FIXED); - public static final Pattern MULTI_FIXED = new Pattern(OperatorType.MULTI_FIXED); + public static final Pattern ANY = new Pattern(PlanType.ANY); + public static final Pattern MULTI = new Pattern(PlanType.MULTI); + public static final Pattern FIXED = new Pattern(PlanType.FIXED); + public static final Pattern MULTI_FIXED = new Pattern(PlanType.MULTI_FIXED); protected final List> predicates; - protected final OperatorType operatorType; + protected final PlanType operatorType; /** * Constructor for Pattern. @@ -50,8 +50,8 @@ public class Pattern> predicates, Pattern... children) { - super(NodeType.PATTERN, children); + public Pattern(PlanType operatorType, List> predicates, Pattern... children) { + super(OperatorType.PATTERN, children); this.operatorType = operatorType; this.predicates = ImmutableList.copyOf(predicates); } @@ -74,20 +74,20 @@ public Pattern(OperatorType operatorType, List> predicates, Patt * * @return node type in pattern */ - public OperatorType getOperatorType() { + public PlanType getOperatorType() { return operatorType; } public boolean isFixed() { - return operatorType == OperatorType.FIXED; + return operatorType == PlanType.FIXED; } public boolean isAny() { - return operatorType == OperatorType.ANY; + return operatorType == PlanType.ANY; } public boolean isMulti() { - return operatorType == OperatorType.MULTI; + return operatorType == PlanType.MULTI; } /** @@ -100,8 +100,8 @@ public boolean matchOperator(Operator operator) { if (operator == null) { return false; } - if (operatorType == OperatorType.MULTI || operatorType == OperatorType.ANY - || operatorType == OperatorType.MULTI_FIXED || operatorType == OperatorType.FIXED) { + if (operatorType == PlanType.MULTI || operatorType == PlanType.ANY + || operatorType == PlanType.MULTI_FIXED || operatorType == PlanType.FIXED) { return true; } return getOperatorType().equals(operator.getType()); @@ -122,7 +122,7 @@ public boolean matchRoot(TYPE root) { return false; } - if (operatorType == OperatorType.MULTI || operatorType == OperatorType.ANY) { + if (operatorType == PlanType.MULTI || operatorType == PlanType.ANY) { return true; } diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/pattern/TypePattern.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/pattern/TypePattern.java index bbb93e65c9ca31..ec77b6ac43e0d1 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/nereids/pattern/TypePattern.java +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/pattern/TypePattern.java @@ -18,7 +18,7 @@ package org.apache.doris.nereids.pattern; import org.apache.doris.nereids.operators.Operator; -import org.apache.doris.nereids.operators.OperatorType; +import org.apache.doris.nereids.operators.PlanType; import org.apache.doris.nereids.trees.TreeNode; import java.util.List; @@ -31,12 +31,12 @@ public class TypePattern type; public TypePattern(Class clazz, Pattern... children) { - super(OperatorType.NORMAL_PATTERN, children); + super(PlanType.NORMAL_PATTERN, children); this.type = Objects.requireNonNull(clazz, "class can not be null"); } public TypePattern(Class clazz, List> predicates, Pattern... children) { - super(OperatorType.NORMAL_PATTERN, predicates, children); + super(PlanType.NORMAL_PATTERN, predicates, children); this.type = Objects.requireNonNull(clazz, "class can not be null"); } diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/expression/rewrite/rules/NormalizeExpressionRule.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/expression/rewrite/rules/NormalizeExpressionRule.java index 8da9c1e5f96e5a..f0b9e7a2b62cc3 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/expression/rewrite/rules/NormalizeExpressionRule.java +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/expression/rewrite/rules/NormalizeExpressionRule.java @@ -20,7 +20,7 @@ import org.apache.doris.nereids.rules.expression.rewrite.AbstractExpressionRewriteRule; import org.apache.doris.nereids.rules.expression.rewrite.ExpressionRewriteContext; import org.apache.doris.nereids.rules.expression.rewrite.RewriteHelper; -import org.apache.doris.nereids.trees.NodeType; +import org.apache.doris.nereids.trees.OperatorType; import org.apache.doris.nereids.trees.expressions.ComparisonPredicate; import org.apache.doris.nereids.trees.expressions.EqualTo; import org.apache.doris.nereids.trees.expressions.Expression; @@ -42,7 +42,7 @@ public class NormalizeExpressionRule extends AbstractExpressionRewriteRule { public Expression visitComparisonPredicate(ComparisonPredicate expr, ExpressionRewriteContext context) { if (RewriteHelper.isConstant(expr.left()) && !RewriteHelper.isConstant(expr.right())) { - NodeType exprType = expr.getType(); + OperatorType exprType = expr.getType(); switch (exprType) { case EQUAL_TO: return new EqualTo(expr.right(), expr.left()); diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/expression/rewrite/rules/SimplifyNotExprRule.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/expression/rewrite/rules/SimplifyNotExprRule.java index f8025e8f39002e..6a55308c7428a6 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/expression/rewrite/rules/SimplifyNotExprRule.java +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/expression/rewrite/rules/SimplifyNotExprRule.java @@ -19,7 +19,7 @@ import org.apache.doris.nereids.rules.expression.rewrite.AbstractExpressionRewriteRule; import org.apache.doris.nereids.rules.expression.rewrite.ExpressionRewriteContext; -import org.apache.doris.nereids.trees.NodeType; +import org.apache.doris.nereids.trees.OperatorType; import org.apache.doris.nereids.trees.expressions.ComparisonPredicate; import org.apache.doris.nereids.trees.expressions.Expression; import org.apache.doris.nereids.trees.expressions.GreaterThan; @@ -54,7 +54,7 @@ public Expression visitNot(Not expr, ExpressionRewriteContext context) { ComparisonPredicate cp = (ComparisonPredicate) expr.child(); Expression left = rewrite(cp.left(), context); Expression right = rewrite(cp.right(), context); - NodeType type = cp.getType(); + OperatorType type = cp.getType(); switch (type) { case GREATER_THAN: return new LessThanEqual(left, right); diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/AbstractTreeNode.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/AbstractTreeNode.java index 16cbaf9f440e5b..2bd375d1cb6c00 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/AbstractTreeNode.java +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/AbstractTreeNode.java @@ -35,14 +35,14 @@ public abstract class AbstractTreeNode> implements TreeNode { - protected final NodeType type; + protected final OperatorType type; protected final List children; // TODO: Maybe we should use a GroupPlan to avoid TreeNode hold the GroupExpression. // https://github.com/apache/incubator-doris/pull/9807#discussion_r884829067 protected final Optional groupExpression; - public AbstractTreeNode(NodeType type, NODE_TYPE... children) { + public AbstractTreeNode(OperatorType type, NODE_TYPE... children) { this(type, null, children); } @@ -53,7 +53,7 @@ public AbstractTreeNode(NodeType type, NODE_TYPE... children) { * @param groupExpression group expression related to the operator of this node * @param children children of this node */ - public AbstractTreeNode(NodeType type, GroupExpression groupExpression, NODE_TYPE... children) { + public AbstractTreeNode(OperatorType type, GroupExpression groupExpression, NODE_TYPE... children) { this.type = type; this.children = ImmutableList.copyOf(children); this.groupExpression = Optional.ofNullable(groupExpression); @@ -80,7 +80,7 @@ public List children() { } @Override - public NodeType getType() { + public OperatorType getType() { return type; } diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/NodeType.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/OperatorType.java similarity index 97% rename from fe/fe-core/src/main/java/org/apache/doris/nereids/trees/NodeType.java rename to fe/fe-core/src/main/java/org/apache/doris/nereids/trees/OperatorType.java index 1f22f3020f1fae..a5b376baaed08f 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/NodeType.java +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/OperatorType.java @@ -20,7 +20,7 @@ /** * Types for all TreeNode in Nereids, include Plan and Expression. */ -public enum NodeType { +public enum OperatorType { // plan LOGICAL, PHYSICAL, diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/TreeNode.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/TreeNode.java index 12a8597782367b..df2865bbb623d9 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/TreeNode.java +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/TreeNode.java @@ -36,7 +36,7 @@ public interface TreeNode> { // cache GroupExpression for fast exit from Memo.copyIn. Optional getGroupExpression(); - NodeType getType(); + OperatorType getType(); List children(); diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/Alias.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/Alias.java index 425c3b0bc9a1a1..45ddf03ee5c075 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/Alias.java +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/Alias.java @@ -18,7 +18,7 @@ package org.apache.doris.nereids.trees.expressions; import org.apache.doris.nereids.exceptions.UnboundException; -import org.apache.doris.nereids.trees.NodeType; +import org.apache.doris.nereids.trees.OperatorType; import com.google.common.collect.Lists; @@ -41,7 +41,7 @@ public class Alias extends NamedExpression * @param name alias name */ public Alias(CHILD_TYPE child, String name) { - super(NodeType.ALIAS, child); + super(OperatorType.ALIAS, child); exprId = NamedExpressionUtil.newExprId(); this.name = name; qualifier = Lists.newArrayList(); diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/ComparisonPredicate.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/ComparisonPredicate.java index 6f5ae18fe2941d..807bb80d7aa98e 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/ComparisonPredicate.java +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/ComparisonPredicate.java @@ -19,7 +19,7 @@ import org.apache.doris.nereids.exceptions.UnboundException; import org.apache.doris.nereids.rules.expression.rewrite.ExpressionVisitor; -import org.apache.doris.nereids.trees.NodeType; +import org.apache.doris.nereids.trees.OperatorType; import org.apache.doris.nereids.types.BooleanType; import org.apache.doris.nereids.types.DataType; @@ -39,7 +39,7 @@ public class ComparisonPredicate { public EqualTo(LEFT_CHILD_TYPE left, RIGHT_CHILD_TYPE right) { - super(NodeType.EQUAL_TO, left, right); + super(OperatorType.EQUAL_TO, left, right); } @Override diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/ExprId.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/ExprId.java index 9be4db50b9d2ce..f14843965c31f9 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/ExprId.java +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/ExprId.java @@ -17,13 +17,15 @@ package org.apache.doris.nereids.trees.expressions; +import org.apache.doris.common.Id; + import java.util.Objects; import java.util.UUID; /** * UUID for Expression in Nereids. */ -public class ExprId { +public class ExprId extends Id { private final long id; private final UUID jvmId; diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/Expression.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/Expression.java index 7a275e4b2b0b25..1f65363f9a4bcb 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/Expression.java +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/Expression.java @@ -20,7 +20,7 @@ import org.apache.doris.nereids.exceptions.UnboundException; import org.apache.doris.nereids.rules.expression.rewrite.ExpressionVisitor; import org.apache.doris.nereids.trees.AbstractTreeNode; -import org.apache.doris.nereids.trees.NodeType; +import org.apache.doris.nereids.trees.OperatorType; import org.apache.doris.nereids.types.DataType; import java.util.List; @@ -30,7 +30,7 @@ */ public abstract class Expression extends AbstractTreeNode { - public Expression(NodeType type, Expression... children) { + public Expression(OperatorType type, Expression... children) { super(type, children); } diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/FunctionCallExpression.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/FunctionCallExpression.java index fd172cd42908ae..36ca3f0e2369c4 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/FunctionCallExpression.java +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/FunctionCallExpression.java @@ -19,7 +19,7 @@ import org.apache.doris.analysis.FunctionName; import org.apache.doris.catalog.Function; -import org.apache.doris.nereids.trees.NodeType; +import org.apache.doris.nereids.trees.OperatorType; import java.util.Arrays; import java.util.List; @@ -41,7 +41,7 @@ public class FunctionCallExpression extends Expression { */ public FunctionCallExpression(FunctionName functionName, Function fn, Expression... children) { - super(NodeType.EXPRESSION, children); + super(OperatorType.EXPRESSION, children); this.functionName = functionName; this.params = Arrays.stream(children).collect(Collectors.toList()); this.fn = fn; diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/GreaterThan.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/GreaterThan.java index 7e0e291366c326..b76a19bcbd41fe 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/GreaterThan.java +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/GreaterThan.java @@ -18,7 +18,7 @@ package org.apache.doris.nereids.trees.expressions; import org.apache.doris.nereids.exceptions.UnboundException; -import org.apache.doris.nereids.trees.NodeType; +import org.apache.doris.nereids.trees.OperatorType; import com.google.common.base.Preconditions; @@ -36,7 +36,7 @@ public class GreaterThan extends Expression implements UnaryExpression { public Not(CHILD_TYPE child) { - super(NodeType.NOT, child); + super(OperatorType.NOT, child); } @Override diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/NullSafeEqual.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/NullSafeEqual.java index 61488318b9f607..0e363120842f0e 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/NullSafeEqual.java +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/NullSafeEqual.java @@ -18,7 +18,7 @@ package org.apache.doris.nereids.trees.expressions; import org.apache.doris.nereids.exceptions.UnboundException; -import org.apache.doris.nereids.trees.NodeType; +import org.apache.doris.nereids.trees.OperatorType; /** * Null safe equal expression: a <=> b. @@ -33,7 +33,7 @@ public class NullSafeEqual qualifier) { - super(NodeType.SLOT_REFERENCE); + super(OperatorType.SLOT_REFERENCE); this.exprId = exprId; this.name = name; this.dataType = dataType; 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 ff6cd109cca1c3..aa8d532c634851 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 @@ -20,11 +20,15 @@ import org.apache.doris.nereids.memo.GroupExpression; import org.apache.doris.nereids.operators.plans.PlanOperator; import org.apache.doris.nereids.trees.AbstractTreeNode; -import org.apache.doris.nereids.trees.NodeType; +import org.apache.doris.nereids.trees.OperatorType; +import org.apache.doris.statistics.ExprStats; +import org.apache.doris.statistics.NodeType; +import org.apache.doris.statistics.StatsDeriveResult; import org.apache.commons.lang3.StringUtils; import java.util.ArrayList; +import java.util.Collections; import java.util.List; import java.util.Objects; @@ -35,13 +39,15 @@ public abstract class AbstractPlan extends AbstractTreeNode implements Plan { public final OP_TYPE operator; + protected StatsDeriveResult statsDeriveResult; + protected long limit; - public AbstractPlan(NodeType type, OP_TYPE operator, Plan... children) { + public AbstractPlan(OperatorType type, OP_TYPE operator, Plan... children) { super(type, children); this.operator = Objects.requireNonNull(operator, "operator can not be null"); } - public AbstractPlan(NodeType type, OP_TYPE operator, GroupExpression groupExpression, Plan... children) { + public AbstractPlan(OperatorType type, OP_TYPE operator, GroupExpression groupExpression, Plan... children) { super(type, groupExpression, children); this.operator = Objects.requireNonNull(operator, "operator can not be null"); } @@ -86,4 +92,34 @@ private void treeString(List lines, int depth, List lastChildre treeString(lines, depth + 1, newLasts, children.get(i)); } } + + @Override + public List getChildrenStats() { + return children(); + } + + @Override + public StatsDeriveResult getStatsDeriveResult() { + return statsDeriveResult; + } + + @Override + public NodeType getNodeType() { + return null; + } + + @Override + public void setStatsDeriveResult(StatsDeriveResult result) { + this.statsDeriveResult = result; + } + + @Override + public long getLimit() { + return limit; + } + + @Override + public List getConjuncts() { + return Collections.emptyList(); + } } diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/PlaceHolderPlan.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/PlaceHolderPlan.java index d1a325072f6338..51f5aeb9bf3369 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/PlaceHolderPlan.java +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/PlaceHolderPlan.java @@ -20,8 +20,12 @@ import org.apache.doris.nereids.memo.GroupExpression; import org.apache.doris.nereids.operators.plans.LeafPlanOperator; import org.apache.doris.nereids.properties.LogicalProperties; -import org.apache.doris.nereids.trees.NodeType; +import org.apache.doris.nereids.trees.OperatorType; import org.apache.doris.nereids.trees.expressions.Slot; +import org.apache.doris.statistics.ExprStats; +import org.apache.doris.statistics.NodeType; +import org.apache.doris.statistics.PlanStats; +import org.apache.doris.statistics.StatsDeriveResult; import java.util.List; import java.util.Optional; @@ -39,8 +43,8 @@ public Optional getGroupExpression() { } @Override - public NodeType getType() { - return NodeType.FIXED; + public OperatorType getType() { + return OperatorType.FIXED; } @Override @@ -77,4 +81,34 @@ public List children() { public Plan child(int index) { throw new RuntimeException(); } + + @Override + public List getChildrenStats() { + return null; + } + + @Override + public StatsDeriveResult getStatsDeriveResult() { + return null; + } + + @Override + public NodeType getNodeType() { + return null; + } + + @Override + public void setStatsDeriveResult(StatsDeriveResult result) { + } + + @Override + public long getLimit() { + return 0; + } + + @Override + public List getConjuncts() { + return null; + } + } diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/Plan.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/Plan.java index ff7b26d617aad5..fb8b5645c20ab1 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/Plan.java +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/Plan.java @@ -21,13 +21,14 @@ import org.apache.doris.nereids.properties.LogicalProperties; import org.apache.doris.nereids.trees.TreeNode; import org.apache.doris.nereids.trees.expressions.Slot; +import org.apache.doris.statistics.PlanStats; import java.util.List; /** * Abstract class for all plan node. */ -public interface Plan extends TreeNode { +public interface Plan extends TreeNode, PlanStats { PlanOperator getOperator(); 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 780dcbb59c5025..042d233a48664e 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 @@ -20,7 +20,7 @@ import org.apache.doris.nereids.memo.GroupExpression; import org.apache.doris.nereids.operators.plans.logical.LogicalOperator; import org.apache.doris.nereids.properties.LogicalProperties; -import org.apache.doris.nereids.trees.NodeType; +import org.apache.doris.nereids.trees.OperatorType; import org.apache.doris.nereids.trees.expressions.Slot; import org.apache.doris.nereids.trees.plans.AbstractPlan; import org.apache.doris.nereids.trees.plans.Plan; @@ -36,12 +36,12 @@ public abstract class AbstractLogicalPlan protected final LogicalProperties logicalProperties; - public AbstractLogicalPlan(NodeType type, OP_TYPE operator, Plan... children) { + public AbstractLogicalPlan(OperatorType type, OP_TYPE operator, Plan... children) { super(type, operator, children); this.logicalProperties = new LogicalProperties(Collections.emptyList()); } - public AbstractLogicalPlan(NodeType type, OP_TYPE operator, + public AbstractLogicalPlan(OperatorType type, OP_TYPE operator, GroupExpression groupExpression, LogicalProperties logicalProperties, Plan... children) { super(type, operator, groupExpression, children); this.logicalProperties = logicalProperties; diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalBinaryPlan.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalBinaryPlan.java index 8d860b9dd7e7d5..caf40be2904c24 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalBinaryPlan.java +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalBinaryPlan.java @@ -20,7 +20,7 @@ import org.apache.doris.nereids.memo.GroupExpression; import org.apache.doris.nereids.operators.plans.logical.LogicalBinaryOperator; import org.apache.doris.nereids.properties.LogicalProperties; -import org.apache.doris.nereids.trees.NodeType; +import org.apache.doris.nereids.trees.OperatorType; import org.apache.doris.nereids.trees.plans.BinaryPlan; import org.apache.doris.nereids.trees.plans.Plan; @@ -39,12 +39,12 @@ public class LogicalBinaryPlan< implements BinaryPlan { public LogicalBinaryPlan(OP_TYPE operator, LEFT_CHILD_TYPE leftChild, RIGHT_CHILD_TYPE rightChild) { - super(NodeType.LOGICAL, operator, leftChild, rightChild); + super(OperatorType.LOGICAL, operator, leftChild, rightChild); } public LogicalBinaryPlan(OP_TYPE operator, GroupExpression groupExpression, LogicalProperties logicalProperties, LEFT_CHILD_TYPE leftChild, RIGHT_CHILD_TYPE rightChild) { - super(NodeType.LOGICAL, operator, groupExpression, logicalProperties, leftChild, rightChild); + super(OperatorType.LOGICAL, operator, groupExpression, logicalProperties, leftChild, rightChild); } @Override diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalLeafPlan.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalLeafPlan.java index 012424125e3ba3..4ddcbc3be5ead9 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalLeafPlan.java +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalLeafPlan.java @@ -20,7 +20,7 @@ import org.apache.doris.nereids.memo.GroupExpression; import org.apache.doris.nereids.operators.plans.logical.LogicalLeafOperator; import org.apache.doris.nereids.properties.LogicalProperties; -import org.apache.doris.nereids.trees.NodeType; +import org.apache.doris.nereids.trees.OperatorType; import org.apache.doris.nereids.trees.plans.LeafPlan; import org.apache.doris.nereids.trees.plans.Plan; @@ -36,11 +36,11 @@ public class LogicalLeafPlan implements LeafPlan { public LogicalLeafPlan(OP_TYPE operator) { - super(NodeType.LOGICAL, operator); + super(OperatorType.LOGICAL, operator); } public LogicalLeafPlan(OP_TYPE operator, GroupExpression groupExpression, LogicalProperties logicalProperties) { - super(NodeType.LOGICAL, operator, groupExpression, logicalProperties); + super(OperatorType.LOGICAL, operator, groupExpression, logicalProperties); } @Override diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalUnaryPlan.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalUnaryPlan.java index b44db32de20007..8222b428543890 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalUnaryPlan.java +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalUnaryPlan.java @@ -20,7 +20,7 @@ import org.apache.doris.nereids.memo.GroupExpression; import org.apache.doris.nereids.operators.plans.logical.LogicalUnaryOperator; import org.apache.doris.nereids.properties.LogicalProperties; -import org.apache.doris.nereids.trees.NodeType; +import org.apache.doris.nereids.trees.OperatorType; import org.apache.doris.nereids.trees.plans.Plan; import org.apache.doris.nereids.trees.plans.UnaryPlan; @@ -36,12 +36,12 @@ public class LogicalUnaryPlan { public LogicalUnaryPlan(OP_TYPE operator, CHILD_TYPE child) { - super(NodeType.LOGICAL, operator, child); + super(OperatorType.LOGICAL, operator, child); } public LogicalUnaryPlan(OP_TYPE operator, GroupExpression groupExpression, LogicalProperties logicalProperties, CHILD_TYPE child) { - super(NodeType.LOGICAL, operator, groupExpression, logicalProperties, child); + super(OperatorType.LOGICAL, operator, groupExpression, logicalProperties, child); } @Override diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/physical/AbstractPhysicalPlan.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/physical/AbstractPhysicalPlan.java index ddd02282500c37..d0675e5b12d448 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/physical/AbstractPhysicalPlan.java +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/physical/AbstractPhysicalPlan.java @@ -21,7 +21,7 @@ import org.apache.doris.nereids.operators.plans.physical.PhysicalOperator; import org.apache.doris.nereids.properties.LogicalProperties; import org.apache.doris.nereids.properties.PhysicalProperties; -import org.apache.doris.nereids.trees.NodeType; +import org.apache.doris.nereids.trees.OperatorType; import org.apache.doris.nereids.trees.expressions.Slot; import org.apache.doris.nereids.trees.plans.AbstractPlan; import org.apache.doris.nereids.trees.plans.Plan; @@ -42,7 +42,7 @@ public abstract class AbstractPhysicalPlan /** * create physical plan by op, logicalProperties and children. */ - public AbstractPhysicalPlan(NodeType type, OP_TYPE operator, + public AbstractPhysicalPlan(OperatorType type, OP_TYPE operator, LogicalProperties logicalProperties, Plan... children) { super(type, operator, children); this.logicalProperties = Objects.requireNonNull(logicalProperties, "logicalProperties can not be null"); @@ -59,7 +59,7 @@ public AbstractPhysicalPlan(NodeType type, OP_TYPE operator, * @param logicalProperties logical properties of this plan * @param children children of this plan */ - public AbstractPhysicalPlan(NodeType type, OP_TYPE operator, GroupExpression groupExpression, + public AbstractPhysicalPlan(OperatorType type, OP_TYPE operator, GroupExpression groupExpression, LogicalProperties logicalProperties, Plan... children) { super(type, operator, groupExpression, children); this.logicalProperties = Objects.requireNonNull(logicalProperties, "logicalProperties can not be null"); @@ -80,4 +80,5 @@ public LogicalProperties getLogicalProperties() { public PhysicalProperties getPhysicalProperties() { return physicalProperties; } + } diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/physical/PhysicalBinaryPlan.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/physical/PhysicalBinaryPlan.java index 9b95552216d78f..72911722d601db 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/physical/PhysicalBinaryPlan.java +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/physical/PhysicalBinaryPlan.java @@ -20,7 +20,7 @@ import org.apache.doris.nereids.memo.GroupExpression; import org.apache.doris.nereids.operators.plans.physical.PhysicalBinaryOperator; import org.apache.doris.nereids.properties.LogicalProperties; -import org.apache.doris.nereids.trees.NodeType; +import org.apache.doris.nereids.trees.OperatorType; import org.apache.doris.nereids.trees.plans.BinaryPlan; import org.apache.doris.nereids.trees.plans.Plan; @@ -40,12 +40,12 @@ public class PhysicalBinaryPlan< public PhysicalBinaryPlan(OP_TYPE operator, LogicalProperties logicalProperties, LEFT_CHILD_TYPE leftChild, RIGHT_CHILD_TYPE rightChild) { - super(NodeType.PHYSICAL, operator, logicalProperties, leftChild, rightChild); + super(OperatorType.PHYSICAL, operator, logicalProperties, leftChild, rightChild); } public PhysicalBinaryPlan(OP_TYPE operator, GroupExpression groupExpression, LogicalProperties logicalProperties, LEFT_CHILD_TYPE leftChild, RIGHT_CHILD_TYPE rightChild) { - super(NodeType.PHYSICAL, operator, groupExpression, logicalProperties, leftChild, rightChild); + super(OperatorType.PHYSICAL, operator, groupExpression, logicalProperties, leftChild, rightChild); } @Override diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/physical/PhysicalLeafPlan.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/physical/PhysicalLeafPlan.java index 0408641b797557..4796be7eee69ef 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/physical/PhysicalLeafPlan.java +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/physical/PhysicalLeafPlan.java @@ -20,7 +20,7 @@ import org.apache.doris.nereids.memo.GroupExpression; import org.apache.doris.nereids.operators.plans.physical.PhysicalLeafOperator; import org.apache.doris.nereids.properties.LogicalProperties; -import org.apache.doris.nereids.trees.NodeType; +import org.apache.doris.nereids.trees.OperatorType; import org.apache.doris.nereids.trees.plans.LeafPlan; import org.apache.doris.nereids.trees.plans.Plan; @@ -36,11 +36,11 @@ public class PhysicalLeafPlan implements LeafPlan { public PhysicalLeafPlan(OP_TYPE operator, LogicalProperties logicalProperties) { - super(NodeType.PHYSICAL, operator, logicalProperties); + super(OperatorType.PHYSICAL, operator, logicalProperties); } public PhysicalLeafPlan(OP_TYPE operator, GroupExpression groupExpression, LogicalProperties logicalProperties) { - super(NodeType.PHYSICAL, operator, groupExpression, logicalProperties); + super(OperatorType.PHYSICAL, operator, groupExpression, logicalProperties); } @Override diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/physical/PhysicalPlan.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/physical/PhysicalPlan.java index e0b1ff34b85637..ba7b3000add350 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/physical/PhysicalPlan.java +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/physical/PhysicalPlan.java @@ -19,6 +19,7 @@ import org.apache.doris.nereids.operators.plans.physical.PhysicalOperator; import org.apache.doris.nereids.trees.plans.Plan; +import org.apache.doris.statistics.PlanStats; /** * interface for all physical plan. diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/physical/PhysicalUnaryPlan.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/physical/PhysicalUnaryPlan.java index caadb0c177a64d..6772f9d044f44c 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/physical/PhysicalUnaryPlan.java +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/physical/PhysicalUnaryPlan.java @@ -20,7 +20,7 @@ import org.apache.doris.nereids.memo.GroupExpression; import org.apache.doris.nereids.operators.plans.physical.PhysicalUnaryOperator; import org.apache.doris.nereids.properties.LogicalProperties; -import org.apache.doris.nereids.trees.NodeType; +import org.apache.doris.nereids.trees.OperatorType; import org.apache.doris.nereids.trees.plans.Plan; import org.apache.doris.nereids.trees.plans.UnaryPlan; @@ -36,12 +36,12 @@ public class PhysicalUnaryPlan { public PhysicalUnaryPlan(OP_TYPE operator, LogicalProperties logicalProperties, CHILD_TYPE child) { - super(NodeType.PHYSICAL, operator, logicalProperties, child); + super(OperatorType.PHYSICAL, operator, logicalProperties, child); } public PhysicalUnaryPlan(OP_TYPE operator, GroupExpression groupExpression, LogicalProperties logicalProperties, CHILD_TYPE child) { - super(NodeType.PHYSICAL, operator, groupExpression, logicalProperties, child); + super(OperatorType.PHYSICAL, operator, groupExpression, logicalProperties, child); } @Override diff --git a/fe/fe-core/src/main/java/org/apache/doris/planner/AggregationNode.java b/fe/fe-core/src/main/java/org/apache/doris/planner/AggregationNode.java index ac7c7fee96499e..bb2140181e7ab7 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/planner/AggregationNode.java +++ b/fe/fe-core/src/main/java/org/apache/doris/planner/AggregationNode.java @@ -28,6 +28,7 @@ import org.apache.doris.common.NotImplementedException; import org.apache.doris.common.UserException; import org.apache.doris.common.util.VectorizedUtil; +import org.apache.doris.statistics.NodeType; import org.apache.doris.statistics.StatsRecursiveDerive; import org.apache.doris.thrift.TAggregationNode; import org.apache.doris.thrift.TExplainLevel; diff --git a/fe/fe-core/src/main/java/org/apache/doris/planner/AnalyticEvalNode.java b/fe/fe-core/src/main/java/org/apache/doris/planner/AnalyticEvalNode.java index a439ed3f393e70..2f181b97a2776a 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/planner/AnalyticEvalNode.java +++ b/fe/fe-core/src/main/java/org/apache/doris/planner/AnalyticEvalNode.java @@ -27,6 +27,7 @@ import org.apache.doris.analysis.OrderByElement; import org.apache.doris.analysis.TupleDescriptor; import org.apache.doris.common.UserException; +import org.apache.doris.statistics.NodeType; import org.apache.doris.statistics.StatsRecursiveDerive; import org.apache.doris.thrift.TAnalyticNode; import org.apache.doris.thrift.TExplainLevel; diff --git a/fe/fe-core/src/main/java/org/apache/doris/planner/AssertNumRowsNode.java b/fe/fe-core/src/main/java/org/apache/doris/planner/AssertNumRowsNode.java index 6b8ff8f8ef9907..849512f0e94182 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/planner/AssertNumRowsNode.java +++ b/fe/fe-core/src/main/java/org/apache/doris/planner/AssertNumRowsNode.java @@ -20,6 +20,7 @@ import org.apache.doris.analysis.Analyzer; import org.apache.doris.analysis.AssertNumRowsElement; import org.apache.doris.common.UserException; +import org.apache.doris.statistics.NodeType; import org.apache.doris.statistics.StatsRecursiveDerive; import org.apache.doris.thrift.TAssertNumRowsNode; import org.apache.doris.thrift.TExplainLevel; diff --git a/fe/fe-core/src/main/java/org/apache/doris/planner/BrokerScanNode.java b/fe/fe-core/src/main/java/org/apache/doris/planner/BrokerScanNode.java index 07ec26cae3d87e..c9f5d34cdca4e8 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/planner/BrokerScanNode.java +++ b/fe/fe-core/src/main/java/org/apache/doris/planner/BrokerScanNode.java @@ -45,6 +45,7 @@ import org.apache.doris.mysql.privilege.UserProperty; import org.apache.doris.qe.ConnectContext; import org.apache.doris.resource.Tag; +import org.apache.doris.statistics.NodeType; import org.apache.doris.system.Backend; import org.apache.doris.system.BeSelectionPolicy; import org.apache.doris.task.LoadTaskInfo; diff --git a/fe/fe-core/src/main/java/org/apache/doris/planner/CrossJoinNode.java b/fe/fe-core/src/main/java/org/apache/doris/planner/CrossJoinNode.java index 81accd9810835a..7c3d366f8acc43 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/planner/CrossJoinNode.java +++ b/fe/fe-core/src/main/java/org/apache/doris/planner/CrossJoinNode.java @@ -20,6 +20,7 @@ import org.apache.doris.analysis.Analyzer; import org.apache.doris.analysis.TableRef; import org.apache.doris.common.UserException; +import org.apache.doris.statistics.NodeType; import org.apache.doris.statistics.StatsRecursiveDerive; import org.apache.doris.thrift.TExplainLevel; import org.apache.doris.thrift.TPlanNode; diff --git a/fe/fe-core/src/main/java/org/apache/doris/planner/EmptySetNode.java b/fe/fe-core/src/main/java/org/apache/doris/planner/EmptySetNode.java index 07856fed1babe2..4d0896689be88f 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/planner/EmptySetNode.java +++ b/fe/fe-core/src/main/java/org/apache/doris/planner/EmptySetNode.java @@ -20,6 +20,7 @@ import org.apache.doris.analysis.Analyzer; import org.apache.doris.analysis.TupleId; import org.apache.doris.common.UserException; +import org.apache.doris.statistics.NodeType; import org.apache.doris.statistics.StatsRecursiveDerive; import org.apache.doris.thrift.TPlanNode; import org.apache.doris.thrift.TPlanNodeType; diff --git a/fe/fe-core/src/main/java/org/apache/doris/planner/EsScanNode.java b/fe/fe-core/src/main/java/org/apache/doris/planner/EsScanNode.java index cad5eeefd05da7..06d88d8d2449ae 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/planner/EsScanNode.java +++ b/fe/fe-core/src/main/java/org/apache/doris/planner/EsScanNode.java @@ -30,6 +30,7 @@ import org.apache.doris.external.elasticsearch.EsShardPartitions; import org.apache.doris.external.elasticsearch.EsShardRouting; import org.apache.doris.external.elasticsearch.EsTablePartitions; +import org.apache.doris.statistics.NodeType; import org.apache.doris.system.Backend; import org.apache.doris.thrift.TEsScanNode; import org.apache.doris.thrift.TEsScanRange; diff --git a/fe/fe-core/src/main/java/org/apache/doris/planner/ExceptNode.java b/fe/fe-core/src/main/java/org/apache/doris/planner/ExceptNode.java index 84911cad5bd404..8fa0cf36c79f8a 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/planner/ExceptNode.java +++ b/fe/fe-core/src/main/java/org/apache/doris/planner/ExceptNode.java @@ -19,6 +19,7 @@ import org.apache.doris.analysis.Expr; import org.apache.doris.analysis.TupleId; +import org.apache.doris.statistics.NodeType; import org.apache.doris.thrift.TPlanNode; import org.apache.doris.thrift.TPlanNodeType; diff --git a/fe/fe-core/src/main/java/org/apache/doris/planner/ExchangeNode.java b/fe/fe-core/src/main/java/org/apache/doris/planner/ExchangeNode.java index 0ce4dd5ba83a76..89e4b4232407a5 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/planner/ExchangeNode.java +++ b/fe/fe-core/src/main/java/org/apache/doris/planner/ExchangeNode.java @@ -26,6 +26,7 @@ import org.apache.doris.analysis.TupleId; import org.apache.doris.common.UserException; import org.apache.doris.common.util.VectorizedUtil; +import org.apache.doris.statistics.NodeType; import org.apache.doris.statistics.StatsRecursiveDerive; import org.apache.doris.thrift.TExchangeNode; import org.apache.doris.thrift.TPlanNode; diff --git a/fe/fe-core/src/main/java/org/apache/doris/planner/HashJoinNode.java b/fe/fe-core/src/main/java/org/apache/doris/planner/HashJoinNode.java index 0bc86e724a37bf..95a24c45698000 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/planner/HashJoinNode.java +++ b/fe/fe-core/src/main/java/org/apache/doris/planner/HashJoinNode.java @@ -38,6 +38,7 @@ import org.apache.doris.common.Pair; import org.apache.doris.common.UserException; import org.apache.doris.common.util.VectorizedUtil; +import org.apache.doris.statistics.NodeType; import org.apache.doris.statistics.StatsRecursiveDerive; import org.apache.doris.thrift.TEqJoinCondition; import org.apache.doris.thrift.TExplainLevel; diff --git a/fe/fe-core/src/main/java/org/apache/doris/planner/HiveScanNode.java b/fe/fe-core/src/main/java/org/apache/doris/planner/HiveScanNode.java index 4fda0515e7bef1..926356397bf407 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/planner/HiveScanNode.java +++ b/fe/fe-core/src/main/java/org/apache/doris/planner/HiveScanNode.java @@ -28,6 +28,7 @@ import org.apache.doris.common.DdlException; import org.apache.doris.common.UserException; import org.apache.doris.load.BrokerFileGroup; +import org.apache.doris.statistics.NodeType; import org.apache.doris.thrift.TBrokerFileStatus; import org.apache.doris.thrift.TExplainLevel; diff --git a/fe/fe-core/src/main/java/org/apache/doris/planner/IcebergScanNode.java b/fe/fe-core/src/main/java/org/apache/doris/planner/IcebergScanNode.java index 3439631f0d6e94..f5732a42e3e55f 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/planner/IcebergScanNode.java +++ b/fe/fe-core/src/main/java/org/apache/doris/planner/IcebergScanNode.java @@ -26,6 +26,7 @@ import org.apache.doris.common.UserException; import org.apache.doris.external.iceberg.util.IcebergUtils; import org.apache.doris.load.BrokerFileGroup; +import org.apache.doris.statistics.NodeType; import org.apache.doris.thrift.TBrokerFileStatus; import org.apache.doris.thrift.TExplainLevel; diff --git a/fe/fe-core/src/main/java/org/apache/doris/planner/LoadScanNode.java b/fe/fe-core/src/main/java/org/apache/doris/planner/LoadScanNode.java index 980876c6309ecd..17d6562e93cdec 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/planner/LoadScanNode.java +++ b/fe/fe-core/src/main/java/org/apache/doris/planner/LoadScanNode.java @@ -38,6 +38,7 @@ import org.apache.doris.common.UserException; import org.apache.doris.load.loadv2.LoadTask; import org.apache.doris.rewrite.ExprRewriter; +import org.apache.doris.statistics.NodeType; import org.apache.doris.thrift.TBrokerScanNode; import org.apache.doris.thrift.TBrokerScanRangeParams; import org.apache.doris.thrift.TPlanNode; diff --git a/fe/fe-core/src/main/java/org/apache/doris/planner/MysqlScanNode.java b/fe/fe-core/src/main/java/org/apache/doris/planner/MysqlScanNode.java index 82ea85da8e2b99..2f441e93523dd3 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/planner/MysqlScanNode.java +++ b/fe/fe-core/src/main/java/org/apache/doris/planner/MysqlScanNode.java @@ -26,6 +26,7 @@ import org.apache.doris.catalog.Column; import org.apache.doris.catalog.MysqlTable; import org.apache.doris.common.UserException; +import org.apache.doris.statistics.NodeType; import org.apache.doris.statistics.StatsRecursiveDerive; import org.apache.doris.thrift.TExplainLevel; import org.apache.doris.thrift.TMySQLScanNode; diff --git a/fe/fe-core/src/main/java/org/apache/doris/planner/OdbcScanNode.java b/fe/fe-core/src/main/java/org/apache/doris/planner/OdbcScanNode.java index cacbc48ad5f2f7..668b3727d61380 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/planner/OdbcScanNode.java +++ b/fe/fe-core/src/main/java/org/apache/doris/planner/OdbcScanNode.java @@ -27,6 +27,7 @@ import org.apache.doris.catalog.Column; import org.apache.doris.catalog.OdbcTable; import org.apache.doris.common.UserException; +import org.apache.doris.statistics.NodeType; import org.apache.doris.statistics.StatsRecursiveDerive; import org.apache.doris.thrift.TExplainLevel; import org.apache.doris.thrift.TOdbcScanNode; diff --git a/fe/fe-core/src/main/java/org/apache/doris/planner/OlapScanNode.java b/fe/fe-core/src/main/java/org/apache/doris/planner/OlapScanNode.java index e2e6ec0d418a15..f88a52ce8fdff7 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/planner/OlapScanNode.java +++ b/fe/fe-core/src/main/java/org/apache/doris/planner/OlapScanNode.java @@ -53,6 +53,7 @@ import org.apache.doris.qe.ConnectContext; import org.apache.doris.qe.SessionVariable; import org.apache.doris.resource.Tag; +import org.apache.doris.statistics.NodeType; import org.apache.doris.statistics.StatsRecursiveDerive; import org.apache.doris.system.Backend; import org.apache.doris.thrift.TExplainLevel; diff --git a/fe/fe-core/src/main/java/org/apache/doris/planner/PlanNode.java b/fe/fe-core/src/main/java/org/apache/doris/planner/PlanNode.java index 140e6d32c60c6f..c9f2363e7d9906 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/planner/PlanNode.java +++ b/fe/fe-core/src/main/java/org/apache/doris/planner/PlanNode.java @@ -36,6 +36,8 @@ import org.apache.doris.common.TreeNode; import org.apache.doris.common.UserException; import org.apache.doris.common.util.VectorizedUtil; +import org.apache.doris.statistics.NodeType; +import org.apache.doris.statistics.PlanStats; import org.apache.doris.statistics.StatsDeriveResult; import org.apache.doris.thrift.TExplainLevel; import org.apache.doris.thrift.TFunctionBinaryType; @@ -71,7 +73,7 @@ * this node, ie, they only reference tuples materialized by this node or one of * its children (= are bound by tupleIds). */ -abstract public class PlanNode extends TreeNode { +abstract public class PlanNode extends TreeNode implements PlanStats { private final static Logger LOG = LogManager.getLogger(PlanNode.class); protected String planNodeName; @@ -180,35 +182,6 @@ protected PlanNode(PlanNodeId id, PlanNode node, String planNodeName, NodeType n this.nodeType = nodeType; } - public enum NodeType { - DEFAULT, - AGG_NODE, - ANALYTIC_EVAL_NODE, - ASSERT_NUM_ROWS_NODE, - BROKER_SCAN_NODE, - CROSS_JOIN_NODE, - EMPTY_SET_NODE, - ES_SCAN_NODE, - EXCEPT_NODE, - EXCHANGE_NODE, - HASH_JOIN_NODE, - HIVE_SCAN_NODE, - ICEBERG_SCAN_NODE, - INTERSECT_NODE, - LOAD_SCAN_NODE, - MYSQL_SCAN_NODE, - ODBC_SCAN_NODE, - OLAP_SCAN_NODE, - REPEAT_NODE, - SELECT_NODE, - SET_OPERATION_NODE, - SCHEMA_SCAN_NODE, - SORT_NODE, - STREAM_LOAD_SCAN_NODE, - TABLE_FUNCTION_NODE, - UNION_NODE, - } - public String getPlanNodeName() { return planNodeName; } @@ -353,6 +326,11 @@ public List getConjuncts() { return conjuncts; } + @Override + public List getChildrenStats() { + return children; + } + void initCompoundPredicate(Expr expr) { if (expr instanceof CompoundPredicate) { CompoundPredicate compoundPredicate = (CompoundPredicate) expr; diff --git a/fe/fe-core/src/main/java/org/apache/doris/planner/RepeatNode.java b/fe/fe-core/src/main/java/org/apache/doris/planner/RepeatNode.java index 82e3c82f9750a1..6a32ec7672223f 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/planner/RepeatNode.java +++ b/fe/fe-core/src/main/java/org/apache/doris/planner/RepeatNode.java @@ -30,6 +30,7 @@ import org.apache.doris.analysis.TupleId; import org.apache.doris.analysis.VirtualSlotRef; import org.apache.doris.common.UserException; +import org.apache.doris.statistics.NodeType; import org.apache.doris.statistics.StatsRecursiveDerive; import org.apache.doris.thrift.TExplainLevel; import org.apache.doris.thrift.TPlanNode; diff --git a/fe/fe-core/src/main/java/org/apache/doris/planner/ScanNode.java b/fe/fe-core/src/main/java/org/apache/doris/planner/ScanNode.java index e2392ddc7a864f..0c6adb6a3ceb42 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/planner/ScanNode.java +++ b/fe/fe-core/src/main/java/org/apache/doris/planner/ScanNode.java @@ -35,6 +35,7 @@ import org.apache.doris.catalog.Column; import org.apache.doris.catalog.PrimitiveType; import org.apache.doris.common.UserException; +import org.apache.doris.statistics.NodeType; import org.apache.doris.thrift.TNetworkAddress; import org.apache.doris.thrift.TScanRangeLocations; diff --git a/fe/fe-core/src/main/java/org/apache/doris/planner/SchemaScanNode.java b/fe/fe-core/src/main/java/org/apache/doris/planner/SchemaScanNode.java index 6bea955cd5bff2..ece5e3bdf85ce5 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/planner/SchemaScanNode.java +++ b/fe/fe-core/src/main/java/org/apache/doris/planner/SchemaScanNode.java @@ -25,6 +25,7 @@ import org.apache.doris.common.util.Util; import org.apache.doris.qe.ConnectContext; import org.apache.doris.service.FrontendOptions; +import org.apache.doris.statistics.NodeType; import org.apache.doris.thrift.TPlanNode; import org.apache.doris.thrift.TPlanNodeType; import org.apache.doris.thrift.TScanRangeLocations; diff --git a/fe/fe-core/src/main/java/org/apache/doris/planner/SelectNode.java b/fe/fe-core/src/main/java/org/apache/doris/planner/SelectNode.java index b56880c8892f3e..a9cd3983f49b4f 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/planner/SelectNode.java +++ b/fe/fe-core/src/main/java/org/apache/doris/planner/SelectNode.java @@ -23,6 +23,7 @@ import org.apache.doris.analysis.Analyzer; import org.apache.doris.analysis.Expr; import org.apache.doris.common.UserException; +import org.apache.doris.statistics.NodeType; import org.apache.doris.statistics.StatsRecursiveDerive; import org.apache.doris.thrift.TExplainLevel; import org.apache.doris.thrift.TPlanNode; diff --git a/fe/fe-core/src/main/java/org/apache/doris/planner/SetOperationNode.java b/fe/fe-core/src/main/java/org/apache/doris/planner/SetOperationNode.java index 257ff517ccb60a..b3a1effea53411 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/planner/SetOperationNode.java +++ b/fe/fe-core/src/main/java/org/apache/doris/planner/SetOperationNode.java @@ -26,6 +26,7 @@ import org.apache.doris.common.CheckedMath; import org.apache.doris.common.UserException; import org.apache.doris.common.util.VectorizedUtil; +import org.apache.doris.statistics.NodeType; import org.apache.doris.thrift.TExceptNode; import org.apache.doris.thrift.TExplainLevel; import org.apache.doris.thrift.TExpr; diff --git a/fe/fe-core/src/main/java/org/apache/doris/planner/SortNode.java b/fe/fe-core/src/main/java/org/apache/doris/planner/SortNode.java index 0e223c4f1ab413..35a02e168e4d94 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/planner/SortNode.java +++ b/fe/fe-core/src/main/java/org/apache/doris/planner/SortNode.java @@ -29,6 +29,7 @@ import org.apache.doris.analysis.SortInfo; import org.apache.doris.common.NotImplementedException; import org.apache.doris.common.UserException; +import org.apache.doris.statistics.NodeType; import org.apache.doris.statistics.StatsRecursiveDerive; import org.apache.doris.thrift.TExplainLevel; import org.apache.doris.thrift.TPlanNode; diff --git a/fe/fe-core/src/main/java/org/apache/doris/planner/StreamLoadScanNode.java b/fe/fe-core/src/main/java/org/apache/doris/planner/StreamLoadScanNode.java index 0049eeaa0ebdce..b07cb04bc4c5a9 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/planner/StreamLoadScanNode.java +++ b/fe/fe-core/src/main/java/org/apache/doris/planner/StreamLoadScanNode.java @@ -30,6 +30,7 @@ import org.apache.doris.common.util.VectorizedUtil; import org.apache.doris.load.Load; import org.apache.doris.load.loadv2.LoadTask; +import org.apache.doris.statistics.NodeType; import org.apache.doris.task.LoadTaskInfo; import org.apache.doris.thrift.TBrokerRangeDesc; import org.apache.doris.thrift.TBrokerScanRange; diff --git a/fe/fe-core/src/main/java/org/apache/doris/planner/TableFunctionNode.java b/fe/fe-core/src/main/java/org/apache/doris/planner/TableFunctionNode.java index ed61dd85eb6c42..ec9940e36f4362 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/planner/TableFunctionNode.java +++ b/fe/fe-core/src/main/java/org/apache/doris/planner/TableFunctionNode.java @@ -26,6 +26,7 @@ import org.apache.doris.analysis.TupleId; import org.apache.doris.common.AnalysisException; import org.apache.doris.common.UserException; +import org.apache.doris.statistics.NodeType; import org.apache.doris.statistics.StatsRecursiveDerive; import org.apache.doris.thrift.TExplainLevel; import org.apache.doris.thrift.TPlanNode; diff --git a/fe/fe-core/src/main/java/org/apache/doris/planner/UnionNode.java b/fe/fe-core/src/main/java/org/apache/doris/planner/UnionNode.java index 1fcf125dd36b5c..f6d8cd8bc0268c 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/planner/UnionNode.java +++ b/fe/fe-core/src/main/java/org/apache/doris/planner/UnionNode.java @@ -22,6 +22,7 @@ import org.apache.doris.analysis.Expr; import org.apache.doris.analysis.TupleId; +import org.apache.doris.statistics.NodeType; import org.apache.doris.thrift.TPlanNode; import org.apache.doris.thrift.TPlanNodeType; diff --git a/fe/fe-core/src/main/java/org/apache/doris/planner/external/ExternalScanNode.java b/fe/fe-core/src/main/java/org/apache/doris/planner/external/ExternalScanNode.java index 1d4f4b983f4f2d..c12e2913cb0ed4 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/planner/external/ExternalScanNode.java +++ b/fe/fe-core/src/main/java/org/apache/doris/planner/external/ExternalScanNode.java @@ -20,6 +20,7 @@ import org.apache.doris.analysis.TupleDescriptor; import org.apache.doris.planner.PlanNodeId; import org.apache.doris.planner.ScanNode; +import org.apache.doris.statistics.NodeType; import org.apache.doris.thrift.TPlanNode; import org.apache.doris.thrift.TScanRangeLocations; diff --git a/fe/fe-core/src/main/java/org/apache/doris/statistics/AggStatsDerive.java b/fe/fe-core/src/main/java/org/apache/doris/statistics/AggStatsDerive.java index 6d626ce21a20e0..365c8e8f39b2c5 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/statistics/AggStatsDerive.java +++ b/fe/fe-core/src/main/java/org/apache/doris/statistics/AggStatsDerive.java @@ -20,7 +20,6 @@ import org.apache.doris.analysis.Expr; import org.apache.doris.common.UserException; import org.apache.doris.planner.AggregationNode; -import org.apache.doris.planner.PlanNode; import com.google.common.base.Preconditions; import org.apache.logging.log4j.LogManager; @@ -37,7 +36,7 @@ public class AggStatsDerive extends BaseStatsDerive { List groupingExprs = new ArrayList<>(); @Override - public void init(PlanNode node) throws UserException { + public void init(PlanStats node) throws UserException { Preconditions.checkState(node instanceof AggregationNode); super.init(node); groupingExprs.addAll(((AggregationNode) node).getAggInfo().getGroupingExprs()); diff --git a/fe/fe-core/src/main/java/org/apache/doris/statistics/BaseStatsDerive.java b/fe/fe-core/src/main/java/org/apache/doris/statistics/BaseStatsDerive.java index d2f047c8779d4e..98fcbd455f357c 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/statistics/BaseStatsDerive.java +++ b/fe/fe-core/src/main/java/org/apache/doris/statistics/BaseStatsDerive.java @@ -19,8 +19,8 @@ import org.apache.doris.analysis.Expr; import org.apache.doris.analysis.SlotId; +import org.apache.doris.common.Id; import org.apache.doris.common.UserException; -import org.apache.doris.planner.PlanNode; import com.google.common.base.Preconditions; import com.google.common.collect.Lists; @@ -42,14 +42,14 @@ public class BaseStatsDerive { protected long rowCount = -1; protected long limit = -1; - protected List conjuncts = Lists.newArrayList(); + protected List conjuncts = Lists.newArrayList(); protected List childrenStatsResult = Lists.newArrayList(); - protected void init(PlanNode node) throws UserException { + protected void init(PlanStats node) throws UserException { limit = node.getLimit(); conjuncts.addAll(node.getConjuncts()); - for (PlanNode childNode : node.getChildren()) { + for (PlanStats childNode : node.getChildrenStats()) { StatsDeriveResult result = childNode.getStatsDeriveResult(); if (result == null) { throw new UserException( @@ -87,7 +87,7 @@ private void applySelectivity() { } protected double computeSelectivity() { - for (Expr expr : conjuncts) { + for (ExprStats expr : conjuncts) { expr.setSelectivity(); } return computeCombinedSelectivity(conjuncts); @@ -110,10 +110,10 @@ protected double computeSelectivity() { * * additional selectivity into the final result. *

*/ - protected double computeCombinedSelectivity(List conjuncts) { + protected double computeCombinedSelectivity(List conjuncts) { // Collect all estimated selectivities. List selectivities = new ArrayList<>(); - for (Expr e : conjuncts) { + for (ExprStats e : conjuncts) { if (e.hasSelectivity()) { selectivities.add(e.getSelectivity()); } @@ -155,16 +155,16 @@ protected long deriveRowCount() { } - protected HashMap deriveColumnToDataSize() { - HashMap columnToDataSize = new HashMap<>(); + protected HashMap deriveColumnToDataSize() { + HashMap columnToDataSize = new HashMap<>(); for (StatsDeriveResult child : childrenStatsResult) { columnToDataSize.putAll(child.getColumnToDataSize()); } return columnToDataSize; } - protected HashMap deriveColumnToNdv() { - HashMap columnToNdv = new HashMap<>(); + protected HashMap deriveColumnToNdv() { + HashMap columnToNdv = new HashMap<>(); for (StatsDeriveResult child : childrenStatsResult) { columnToNdv.putAll(child.getColumnToNdv()); } diff --git a/fe/fe-core/src/main/java/org/apache/doris/statistics/DeriveFactory.java b/fe/fe-core/src/main/java/org/apache/doris/statistics/DeriveFactory.java index 7d694ee6812dac..e92e6d79be208b 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/statistics/DeriveFactory.java +++ b/fe/fe-core/src/main/java/org/apache/doris/statistics/DeriveFactory.java @@ -17,11 +17,9 @@ package org.apache.doris.statistics; -import org.apache.doris.planner.PlanNode; - public class DeriveFactory { - public BaseStatsDerive getStatsDerive(PlanNode.NodeType nodeType) { + public BaseStatsDerive getStatsDerive(NodeType nodeType) { switch (nodeType) { case AGG_NODE: return new AggStatsDerive(); diff --git a/fe/fe-core/src/main/java/org/apache/doris/statistics/ExprStats.java b/fe/fe-core/src/main/java/org/apache/doris/statistics/ExprStats.java new file mode 100644 index 00000000000000..bc7effe452fabb --- /dev/null +++ b/fe/fe-core/src/main/java/org/apache/doris/statistics/ExprStats.java @@ -0,0 +1,33 @@ +// Licensed to the Apache Software Foundation (ASF) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The ASF licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +package org.apache.doris.statistics; + +/** + * Used to abstract a common expression interface for statistics deduction to fit both optimizers. + */ +public interface ExprStats { + + boolean hasSelectivity(); + + double getSelectivity(); + + void setSelectivity(); + + long getNumDistinctValues(); + +} diff --git a/fe/fe-core/src/main/java/org/apache/doris/statistics/HashJoinStatsDerive.java b/fe/fe-core/src/main/java/org/apache/doris/statistics/HashJoinStatsDerive.java index 649fd1cc7e3aa9..24b9e102e44dae 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/statistics/HashJoinStatsDerive.java +++ b/fe/fe-core/src/main/java/org/apache/doris/statistics/HashJoinStatsDerive.java @@ -26,7 +26,6 @@ import org.apache.doris.common.CheckedMath; import org.apache.doris.common.UserException; import org.apache.doris.planner.HashJoinNode; -import org.apache.doris.planner.PlanNode; import com.google.common.base.Preconditions; import com.google.common.collect.Lists; @@ -42,7 +41,7 @@ public class HashJoinStatsDerive extends BaseStatsDerive { private List eqJoinConjuncts = Lists.newArrayList(); @Override - public void init(PlanNode node) throws UserException { + public void init(PlanStats node) throws UserException { Preconditions.checkState(node instanceof HashJoinNode); super.init(node); joinOp = ((HashJoinNode) node).getJoinOp(); diff --git a/fe/fe-core/src/main/java/org/apache/doris/statistics/NodeType.java b/fe/fe-core/src/main/java/org/apache/doris/statistics/NodeType.java new file mode 100644 index 00000000000000..28face6dc639e6 --- /dev/null +++ b/fe/fe-core/src/main/java/org/apache/doris/statistics/NodeType.java @@ -0,0 +1,30 @@ +package org.apache.doris.statistics; + +public enum NodeType { + DEFAULT, + AGG_NODE, + ANALYTIC_EVAL_NODE, + ASSERT_NUM_ROWS_NODE, + BROKER_SCAN_NODE, + CROSS_JOIN_NODE, + EMPTY_SET_NODE, + ES_SCAN_NODE, + EXCEPT_NODE, + EXCHANGE_NODE, + HASH_JOIN_NODE, + HIVE_SCAN_NODE, + ICEBERG_SCAN_NODE, + INTERSECT_NODE, + LOAD_SCAN_NODE, + MYSQL_SCAN_NODE, + ODBC_SCAN_NODE, + OLAP_SCAN_NODE, + REPEAT_NODE, + SELECT_NODE, + SET_OPERATION_NODE, + SCHEMA_SCAN_NODE, + SORT_NODE, + STREAM_LOAD_SCAN_NODE, + TABLE_FUNCTION_NODE, + UNION_NODE, +} \ No newline at end of file diff --git a/fe/fe-core/src/main/java/org/apache/doris/statistics/OlapScanStatsDerive.java b/fe/fe-core/src/main/java/org/apache/doris/statistics/OlapScanStatsDerive.java index efa1e1aafb3725..3be8fffcba05b3 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/statistics/OlapScanStatsDerive.java +++ b/fe/fe-core/src/main/java/org/apache/doris/statistics/OlapScanStatsDerive.java @@ -18,12 +18,11 @@ package org.apache.doris.statistics; import org.apache.doris.analysis.SlotDescriptor; -import org.apache.doris.analysis.SlotId; import org.apache.doris.catalog.Catalog; +import org.apache.doris.common.Id; import org.apache.doris.common.Pair; import org.apache.doris.common.UserException; import org.apache.doris.planner.OlapScanNode; -import org.apache.doris.planner.PlanNode; import com.google.common.base.Preconditions; @@ -40,12 +39,12 @@ public class OlapScanStatsDerive extends BaseStatsDerive { // The rowCount here is the number of rows. private long inputRowCount = -1; - private Map slotIdToDataSize; - private Map slotIdToNdv; - private Map> slotIdToTableIdAndColumnName; + private Map slotIdToDataSize; + private Map slotIdToNdv; + private Map> slotIdToTableIdAndColumnName; @Override - public void init(PlanNode node) throws UserException { + public void init(PlanStats node) throws UserException { Preconditions.checkState(node instanceof OlapScanNode); super.init(node); buildStructure((OlapScanNode) node); @@ -61,7 +60,7 @@ public StatsDeriveResult deriveStats() { * - So only an inaccurate cardinality can be calculated here. */ rowCount = inputRowCount; - for (Map.Entry> pairEntry : slotIdToTableIdAndColumnName.entrySet()) { + for (Map.Entry> pairEntry : slotIdToTableIdAndColumnName.entrySet()) { Pair ndvAndDataSize = getNdvAndDataSizeFromStatistics(pairEntry.getValue()); long ndv = ndvAndDataSize.first; float dataSize = ndvAndDataSize.second; diff --git a/fe/fe-core/src/main/java/org/apache/doris/statistics/PlanStats.java b/fe/fe-core/src/main/java/org/apache/doris/statistics/PlanStats.java new file mode 100644 index 00000000000000..be2a4dde5aa5fe --- /dev/null +++ b/fe/fe-core/src/main/java/org/apache/doris/statistics/PlanStats.java @@ -0,0 +1,39 @@ +// Licensed to the Apache Software Foundation (ASF) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The ASF licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +package org.apache.doris.statistics; + +import java.util.List; + +/** + * Used to abstract a common operator interface for statistics deduction to fit both optimizers. + */ +public interface PlanStats { + + List getChildrenStats(); + + StatsDeriveResult getStatsDeriveResult(); + + NodeType getNodeType(); + + void setStatsDeriveResult(StatsDeriveResult result); + + long getLimit(); + + List getConjuncts(); + +} diff --git a/fe/fe-core/src/main/java/org/apache/doris/statistics/SlotStatsDeriveResult.java b/fe/fe-core/src/main/java/org/apache/doris/statistics/SlotStatsDeriveResult.java new file mode 100644 index 00000000000000..eb31a1ab4aeaa3 --- /dev/null +++ b/fe/fe-core/src/main/java/org/apache/doris/statistics/SlotStatsDeriveResult.java @@ -0,0 +1,35 @@ +package org.apache.doris.statistics; + +import org.apache.doris.nereids.trees.expressions.Literal; + +public class SlotStatsDeriveResult { + + // number of distinct value + private long ndv; + private Literal max; + private Literal min; + + public long getNdv() { + return ndv; + } + + public void setNdv(long ndv) { + this.ndv = ndv; + } + + public Literal getMax() { + return max; + } + + public void setMax(Literal max) { + this.max = max; + } + + public Literal getMin() { + return min; + } + + public void setMin(Literal min) { + this.min = min; + } +} diff --git a/fe/fe-core/src/main/java/org/apache/doris/statistics/StatsDeriveResult.java b/fe/fe-core/src/main/java/org/apache/doris/statistics/StatsDeriveResult.java index 2bf0a53f81ab26..1888b3dd45f613 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/statistics/StatsDeriveResult.java +++ b/fe/fe-core/src/main/java/org/apache/doris/statistics/StatsDeriveResult.java @@ -17,7 +17,7 @@ package org.apache.doris.statistics; -import org.apache.doris.analysis.SlotId; +import org.apache.doris.common.Id; import com.google.common.collect.Maps; @@ -28,12 +28,12 @@ public class StatsDeriveResult { private long rowCount = -1; // The data size of the corresponding column in the operator // The actual key is slotId - private final Map columnToDataSize = Maps.newHashMap(); + private final Map columnToDataSize = Maps.newHashMap(); // The ndv of the corresponding column in the operator // The actual key is slotId - private final Map columnToNdv = Maps.newHashMap(); + private final Map columnToNdv = Maps.newHashMap(); - public StatsDeriveResult(long rowCount, Map columnToDataSize, Map columnToNdv) { + public StatsDeriveResult(long rowCount, Map columnToDataSize, Map columnToNdv) { this.rowCount = rowCount; this.columnToDataSize.putAll(columnToDataSize); this.columnToNdv.putAll(columnToNdv); @@ -47,11 +47,11 @@ public long getRowCount() { return rowCount; } - public Map getColumnToNdv() { + public Map getColumnToNdv() { return columnToNdv; } - public Map getColumnToDataSize() { + public Map getColumnToDataSize() { return columnToDataSize; } } diff --git a/fe/fe-core/src/main/java/org/apache/doris/statistics/StatsRecursiveDerive.java b/fe/fe-core/src/main/java/org/apache/doris/statistics/StatsRecursiveDerive.java index e6159a594de6ba..c3b259d943a48d 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/statistics/StatsRecursiveDerive.java +++ b/fe/fe-core/src/main/java/org/apache/doris/statistics/StatsRecursiveDerive.java @@ -18,8 +18,6 @@ package org.apache.doris.statistics; import org.apache.doris.common.UserException; -import org.apache.doris.planner.PlanNode; - public class StatsRecursiveDerive { private StatsRecursiveDerive() {} @@ -38,11 +36,11 @@ private static class Inner { * This parameter is an input and output parameter, * which will store the derivation result of statistical information in the corresponding node */ - public void statsRecursiveDerive(PlanNode node) throws UserException { + public void statsRecursiveDerive(PlanStats node) throws UserException { if (node.getStatsDeriveResult() != null) { return; } - for (PlanNode childNode : node.getChildren()) { + for (PlanStats childNode : node.getChildrenStats()) { if (childNode.getStatsDeriveResult() == null) { statsRecursiveDerive(childNode); } diff --git a/fe/fe-core/src/test/java/org/apache/doris/nereids/jobs/RewriteTopDownJobTest.java b/fe/fe-core/src/test/java/org/apache/doris/nereids/jobs/RewriteTopDownJobTest.java index b5e5fba18f50a8..c1914704b2d5f2 100644 --- a/fe/fe-core/src/test/java/org/apache/doris/nereids/jobs/RewriteTopDownJobTest.java +++ b/fe/fe-core/src/test/java/org/apache/doris/nereids/jobs/RewriteTopDownJobTest.java @@ -26,7 +26,7 @@ import org.apache.doris.nereids.memo.Group; import org.apache.doris.nereids.memo.GroupExpression; import org.apache.doris.nereids.memo.Memo; -import org.apache.doris.nereids.operators.OperatorType; +import org.apache.doris.nereids.operators.PlanType; import org.apache.doris.nereids.operators.plans.logical.LogicalProject; import org.apache.doris.nereids.operators.plans.logical.LogicalRelation; import org.apache.doris.nereids.properties.PhysicalProperties; @@ -72,10 +72,10 @@ public void testSimplestScene() throws AnalysisException { Assertions.assertEquals(1, rootGroup.getLogicalExpressions().size()); GroupExpression rootGroupExpression = rootGroup.getLogicalExpression(); Assertions.assertEquals(1, rootGroupExpression.children().size()); - Assertions.assertEquals(OperatorType.LOGICAL_PROJECT, rootGroupExpression.getOperator().getType()); + Assertions.assertEquals(PlanType.LOGICAL_PROJECT, rootGroupExpression.getOperator().getType()); Group leafGroup = rootGroupExpression.child(0); Assertions.assertEquals(1, leafGroup.getLogicalExpressions().size()); GroupExpression leafGroupExpression = leafGroup.getLogicalExpression(); - Assertions.assertEquals(OperatorType.LOGICAL_BOUND_RELATION, leafGroupExpression.getOperator().getType()); + Assertions.assertEquals(PlanType.LOGICAL_BOUND_RELATION, leafGroupExpression.getOperator().getType()); } } diff --git a/fe/fe-core/src/test/java/org/apache/doris/nereids/pattern/GroupExpressionMatchingTest.java b/fe/fe-core/src/test/java/org/apache/doris/nereids/pattern/GroupExpressionMatchingTest.java index 4a3bbed0c4191e..ded3e956030ba7 100644 --- a/fe/fe-core/src/test/java/org/apache/doris/nereids/pattern/GroupExpressionMatchingTest.java +++ b/fe/fe-core/src/test/java/org/apache/doris/nereids/pattern/GroupExpressionMatchingTest.java @@ -19,7 +19,7 @@ import org.apache.doris.nereids.analyzer.UnboundRelation; import org.apache.doris.nereids.memo.Memo; -import org.apache.doris.nereids.operators.OperatorType; +import org.apache.doris.nereids.operators.PlanType; import org.apache.doris.nereids.operators.plans.logical.LogicalProject; import org.apache.doris.nereids.trees.plans.Plan; import org.apache.doris.nereids.trees.plans.Plans; @@ -34,7 +34,7 @@ public class GroupExpressionMatchingTest implements Plans { @Test public void testLeafNode() { - Pattern pattern = new Pattern<>(OperatorType.LOGICAL_UNBOUND_RELATION); + Pattern pattern = new Pattern<>(PlanType.LOGICAL_UNBOUND_RELATION); UnboundRelation unboundRelation = new UnboundRelation(Lists.newArrayList("test")); Plan plan = plan(unboundRelation); @@ -47,14 +47,14 @@ public void testLeafNode() { Assertions.assertTrue(iterator.hasNext()); Plan actual = iterator.next(); - Assertions.assertEquals(OperatorType.LOGICAL_UNBOUND_RELATION, actual.getOperator().getType()); + Assertions.assertEquals(PlanType.LOGICAL_UNBOUND_RELATION, actual.getOperator().getType()); Assertions.assertFalse(iterator.hasNext()); } @Test public void testDepth2() { - Pattern pattern = new Pattern<>(OperatorType.LOGICAL_PROJECT, - new Pattern<>(OperatorType.LOGICAL_UNBOUND_RELATION)); + Pattern pattern = new Pattern<>(PlanType.LOGICAL_PROJECT, + new Pattern<>(PlanType.LOGICAL_UNBOUND_RELATION)); UnboundRelation unboundRelation = new UnboundRelation(Lists.newArrayList("test")); Plan leaf = plan(unboundRelation); @@ -74,20 +74,20 @@ public void testDepth2() { Assertions.assertTrue(iterator.hasNext()); Plan actual; actual = iterator.next(); - Assertions.assertEquals(OperatorType.LOGICAL_PROJECT, actual.getOperator().getType()); + Assertions.assertEquals(PlanType.LOGICAL_PROJECT, actual.getOperator().getType()); Assertions.assertEquals(1, actual.arity()); - Assertions.assertEquals(OperatorType.LOGICAL_UNBOUND_RELATION, actual.child(0).getOperator().getType()); + Assertions.assertEquals(PlanType.LOGICAL_UNBOUND_RELATION, actual.child(0).getOperator().getType()); Assertions.assertTrue(iterator.hasNext()); actual = iterator.next(); - Assertions.assertEquals(OperatorType.LOGICAL_PROJECT, actual.getOperator().getType()); + Assertions.assertEquals(PlanType.LOGICAL_PROJECT, actual.getOperator().getType()); Assertions.assertEquals(1, actual.arity()); - Assertions.assertEquals(OperatorType.LOGICAL_UNBOUND_RELATION, actual.child(0).getOperator().getType()); + Assertions.assertEquals(PlanType.LOGICAL_UNBOUND_RELATION, actual.child(0).getOperator().getType()); Assertions.assertFalse(iterator.hasNext()); } @Test public void testDepth2WithFixed() { - Pattern pattern = new Pattern<>(OperatorType.LOGICAL_PROJECT, new Pattern<>(OperatorType.FIXED)); + Pattern pattern = new Pattern<>(PlanType.LOGICAL_PROJECT, new Pattern<>(PlanType.FIXED)); UnboundRelation unboundRelation = new UnboundRelation(Lists.newArrayList("test")); Plan leaf = plan(unboundRelation); @@ -107,9 +107,9 @@ public void testDepth2WithFixed() { Assertions.assertTrue(iterator.hasNext()); Plan actual; actual = iterator.next(); - Assertions.assertEquals(OperatorType.LOGICAL_PROJECT, actual.getOperator().getType()); + Assertions.assertEquals(PlanType.LOGICAL_PROJECT, actual.getOperator().getType()); Assertions.assertEquals(1, actual.arity()); - Assertions.assertEquals(OperatorType.LOGICAL_UNBOUND_RELATION, actual.child(0).getOperator().getType()); + Assertions.assertEquals(PlanType.LOGICAL_UNBOUND_RELATION, actual.child(0).getOperator().getType()); Assertions.assertFalse(iterator.hasNext()); } }