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 extends NamedExpression> 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 extends NamedExpression> projects;
public PhysicalProject(List extends NamedExpression> 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 extends ExprStats> 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 extends PlanStats> 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 extends ExprStats> 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 extends PlanStats> 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 extends PlanStats> getChildrenStats();
+
+ StatsDeriveResult getStatsDeriveResult();
+
+ NodeType getNodeType();
+
+ void setStatsDeriveResult(StatsDeriveResult result);
+
+ long getLimit();
+
+ List extends ExprStats> 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());
}
}