This is an automated email from the ASF dual-hosted git repository.
morrysnow pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/doris.git
The following commit(s) were added to refs/heads/master by this push:
new 8999ba34ae [improve](Nereids)unify all plan toString() function
(#12132)
8999ba34ae is described below
commit 8999ba34ae73aabe65054d7f63a1390e27042848
Author: jakevin <[email protected]>
AuthorDate: Wed Aug 31 14:28:44 2022 +0800
[improve](Nereids)unify all plan toString() function (#12132)
Add a Util function to generate uniform format plan toString for easy
reading and debugging
---
.../trees/plans/logical/LogicalAggregate.java | 12 ++-
.../nereids/trees/plans/logical/LogicalApply.java | 3 +-
.../trees/plans/logical/LogicalCorrelatedJoin.java | 11 ++-
.../plans/logical/LogicalEnforceSingleRow.java | 8 +-
.../nereids/trees/plans/logical/LogicalFilter.java | 5 +-
.../nereids/trees/plans/logical/LogicalJoin.java | 16 ++--
.../nereids/trees/plans/logical/LogicalLimit.java | 10 +-
.../trees/plans/logical/LogicalOlapScan.java | 10 +-
.../trees/plans/logical/LogicalProject.java | 8 +-
.../nereids/trees/plans/logical/LogicalSort.java | 5 +-
.../trees/plans/logical/LogicalSubQueryAlias.java | 5 +-
.../nereids/trees/plans/logical/LogicalTopN.java | 11 ++-
.../trees/plans/physical/PhysicalAggregate.java | 26 ++---
.../trees/plans/physical/PhysicalDistribution.java | 14 ++-
.../trees/plans/physical/PhysicalFilter.java | 7 +-
.../trees/plans/physical/PhysicalHashJoin.java | 15 +--
.../trees/plans/physical/PhysicalLimit.java | 17 ++--
.../plans/physical/PhysicalNestedLoopJoin.java | 10 +-
.../trees/plans/physical/PhysicalOlapScan.java | 7 +-
.../trees/plans/physical/PhysicalProject.java | 7 +-
.../trees/plans/physical/PhysicalQuickSort.java | 7 +-
.../nereids/trees/plans/physical/PhysicalTopN.java | 11 ++-
.../java/org/apache/doris/nereids/util/Utils.java | 29 +++++-
.../nereids/trees/plans/PlanToStringTest.java | 105 +++++++++++++++++++++
24 files changed, 263 insertions(+), 96 deletions(-)
diff --git
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalAggregate.java
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalAggregate.java
index 9338c30036..acdcbd173b 100644
---
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalAggregate.java
+++
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalAggregate.java
@@ -27,10 +27,10 @@ import org.apache.doris.nereids.trees.plans.Plan;
import org.apache.doris.nereids.trees.plans.PlanType;
import org.apache.doris.nereids.trees.plans.algebra.Aggregate;
import org.apache.doris.nereids.trees.plans.visitor.PlanVisitor;
+import org.apache.doris.nereids.util.Utils;
import com.google.common.base.Preconditions;
import com.google.common.collect.ImmutableList;
-import org.apache.commons.lang3.StringUtils;
import java.util.List;
import java.util.Objects;
@@ -112,9 +112,11 @@ public class LogicalAggregate<CHILD_TYPE extends Plan>
extends LogicalUnary<CHIL
@Override
public String toString() {
- return "LogicalAggregate (phase: [" + aggPhase.name() + "], output: ["
- + StringUtils.join(outputExpressions, ", ")
- + "], groupBy: [" + StringUtils.join(groupByExpressions, ", ")
+ "])";
+ return Utils.toSqlString("LogicalAggregate",
+ "phase", aggPhase,
+ "outputExpr", outputExpressions,
+ "groupByExpr", groupByExpressions
+ );
}
@Override
@@ -186,7 +188,7 @@ public class LogicalAggregate<CHILD_TYPE extends Plan>
extends LogicalUnary<CHIL
}
public LogicalAggregate<Plan> withGroupByAndOutput(List<Expression>
groupByExprList,
- List<NamedExpression>
outputExpressionList) {
+ List<NamedExpression> outputExpressionList) {
return new LogicalAggregate<>(groupByExprList, outputExpressionList,
disassembled, normalized, aggPhase, child());
}
diff --git
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalApply.java
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalApply.java
index 01bc42f456..df9aaeeb34 100644
---
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalApply.java
+++
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalApply.java
@@ -24,6 +24,7 @@ import org.apache.doris.nereids.trees.expressions.Slot;
import org.apache.doris.nereids.trees.plans.Plan;
import org.apache.doris.nereids.trees.plans.PlanType;
import org.apache.doris.nereids.trees.plans.visitor.PlanVisitor;
+import org.apache.doris.nereids.util.Utils;
import com.google.common.base.Preconditions;
import com.google.common.collect.ImmutableList;
@@ -69,7 +70,7 @@ public class LogicalApply<LEFT_CHILD_TYPE extends Plan,
RIGHT_CHILD_TYPE extends
@Override
public String toString() {
- return "LogicalApply (" + this.child(1).toString() + ")";
+ return Utils.toSqlString("LogicalApply");
}
@Override
diff --git
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalCorrelatedJoin.java
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalCorrelatedJoin.java
index 47eacbd34b..93ed2b7083 100644
---
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalCorrelatedJoin.java
+++
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalCorrelatedJoin.java
@@ -24,6 +24,7 @@ import org.apache.doris.nereids.trees.expressions.Slot;
import org.apache.doris.nereids.trees.plans.Plan;
import org.apache.doris.nereids.trees.plans.PlanType;
import org.apache.doris.nereids.trees.plans.visitor.PlanVisitor;
+import org.apache.doris.nereids.util.Utils;
import com.google.common.base.Preconditions;
import com.google.common.collect.ImmutableList;
@@ -34,6 +35,7 @@ import java.util.Optional;
/**
* A relational algebra node with join type converted from apply node to
subquery.
+ *
* @param <LEFT_CHILD_TYPE> input.
* @param <RIGHT_CHILD_TYPE> subquery.
*/
@@ -76,11 +78,10 @@ public class LogicalCorrelatedJoin<LEFT_CHILD_TYPE extends
Plan, RIGHT_CHILD_TYP
@Override
public String toString() {
- StringBuilder sb = new StringBuilder("LogicalCorrelated ((correlation:
").append(type);
- correlation.stream().map(c -> sb.append(", ").append(c));
- sb.append("), (filter: ");
- filter.ifPresent(expression -> sb.append(", ").append(expression));
- return sb.append("))").toString();
+ return Utils.toSqlString("LogicalCorrelated",
+ "correlation", correlation,
+ "filter", filter
+ );
}
@Override
diff --git
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalEnforceSingleRow.java
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalEnforceSingleRow.java
index 3a138158e1..4ab50449d3 100644
---
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalEnforceSingleRow.java
+++
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalEnforceSingleRow.java
@@ -24,6 +24,7 @@ import org.apache.doris.nereids.trees.expressions.Slot;
import org.apache.doris.nereids.trees.plans.Plan;
import org.apache.doris.nereids.trees.plans.PlanType;
import org.apache.doris.nereids.trees.plans.visitor.PlanVisitor;
+import org.apache.doris.nereids.util.Utils;
import com.google.common.base.Preconditions;
import com.google.common.collect.ImmutableList;
@@ -59,7 +60,7 @@ public class LogicalEnforceSingleRow<CHILD_TYPE extends Plan>
extends LogicalUna
@Override
public String toString() {
- return "LogicalEnforceSingleRow (" + this.child(0).toString() + ")";
+ return Utils.toSqlString("LogicalEnforceSingleRow");
}
@Override
@@ -67,7 +68,10 @@ public class LogicalEnforceSingleRow<CHILD_TYPE extends
Plan> extends LogicalUna
if (this == o) {
return true;
}
- return false;
+ if (o == null || getClass() != o.getClass()) {
+ return false;
+ }
+ return true;
}
@Override
diff --git
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalFilter.java
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalFilter.java
index d61cbf8efc..97dbc6d0e9 100644
---
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalFilter.java
+++
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalFilter.java
@@ -25,6 +25,7 @@ import org.apache.doris.nereids.trees.plans.Plan;
import org.apache.doris.nereids.trees.plans.PlanType;
import org.apache.doris.nereids.trees.plans.algebra.Filter;
import org.apache.doris.nereids.trees.plans.visitor.PlanVisitor;
+import org.apache.doris.nereids.util.Utils;
import com.google.common.base.Preconditions;
import com.google.common.collect.ImmutableList;
@@ -61,7 +62,9 @@ public class LogicalFilter<CHILD_TYPE extends Plan> extends
LogicalUnary<CHILD_T
@Override
public String toString() {
- return "LogicalFilter (" + predicates + ")";
+ return Utils.toSqlString("LogicalFilter",
+ "predicates", predicates
+ );
}
@Override
diff --git
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalJoin.java
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalJoin.java
index dd8bbf532e..7963a24ab8 100644
---
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalJoin.java
+++
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalJoin.java
@@ -28,10 +28,10 @@ import org.apache.doris.nereids.trees.plans.PlanType;
import org.apache.doris.nereids.trees.plans.algebra.Join;
import org.apache.doris.nereids.trees.plans.visitor.PlanVisitor;
import org.apache.doris.nereids.util.ExpressionUtils;
+import org.apache.doris.nereids.util.Utils;
import com.google.common.base.Preconditions;
import com.google.common.collect.ImmutableList;
-import org.apache.commons.lang.StringUtils;
import java.util.List;
import java.util.Objects;
@@ -173,18 +173,14 @@ public class LogicalJoin<LEFT_CHILD_TYPE extends Plan,
RIGHT_CHILD_TYPE extends
@Override
public String toString() {
- StringBuilder sb = new StringBuilder("LogicalJoin
([").append(joinType).append("]");
- sb.append("hashJoinCondition:[");
- sb.append(StringUtils.join(hashJoinConjuncts, ", "));
- sb.append("] ");
- otherJoinCondition.ifPresent(
- expression -> sb.append(", nonHashJoinCondition
[").append(expression).append("]")
+ return Utils.toSqlString("LogicalJoin",
+ "type", joinType,
+ "hashJoinCondition", hashJoinConjuncts,
+ "otherJoinCondition", otherJoinCondition
);
- sb.append(")");
- return sb.toString();
}
- //TODO:
+ // TODO:
// 1. consider the order of conjucts in otherJoinCondition and
hashJoinConditions
@Override
public boolean equals(Object o) {
diff --git
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalLimit.java
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalLimit.java
index d83742cd81..7e57229c34 100644
---
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalLimit.java
+++
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalLimit.java
@@ -25,6 +25,7 @@ import org.apache.doris.nereids.trees.plans.Plan;
import org.apache.doris.nereids.trees.plans.PlanType;
import org.apache.doris.nereids.trees.plans.algebra.Limit;
import org.apache.doris.nereids.trees.plans.visitor.PlanVisitor;
+import org.apache.doris.nereids.util.Utils;
import com.google.common.base.Preconditions;
import com.google.common.collect.ImmutableList;
@@ -37,7 +38,7 @@ import java.util.Optional;
* Logical limit plan
* eg: select * from table limit 10
* limit: 10
- *
+ * <p>
* eg: select * from table order by a limit 100, 10
* limit: 10
* offset 100
@@ -51,7 +52,7 @@ public class LogicalLimit<CHILD_TYPE extends Plan> extends
LogicalUnary<CHILD_TY
}
public LogicalLimit(long limit, long offset, Optional<GroupExpression>
groupExpression,
- Optional<LogicalProperties> logicalProperties,
CHILD_TYPE child) {
+ Optional<LogicalProperties> logicalProperties, CHILD_TYPE child) {
super(PlanType.LOGICAL_LIMIT, groupExpression, logicalProperties,
child);
this.limit = limit;
this.offset = offset;
@@ -72,7 +73,10 @@ public class LogicalLimit<CHILD_TYPE extends Plan> extends
LogicalUnary<CHILD_TY
@Override
public String toString() {
- return "LogicalLimit (offset=" + offset + ", limit=" + limit + ")";
+ return Utils.toSqlString("LogicalLimit",
+ "limit", limit,
+ "offset", offset
+ );
}
@Override
diff --git
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalOlapScan.java
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalOlapScan.java
index 2a4cfab07f..fc4e5d082f 100644
---
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalOlapScan.java
+++
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalOlapScan.java
@@ -25,15 +25,14 @@ import
org.apache.doris.nereids.properties.LogicalProperties;
import org.apache.doris.nereids.trees.plans.Plan;
import org.apache.doris.nereids.trees.plans.PlanType;
import org.apache.doris.nereids.trees.plans.visitor.PlanVisitor;
+import org.apache.doris.nereids.util.Utils;
import com.google.common.base.Preconditions;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.Lists;
import java.util.List;
-import java.util.Objects;
import java.util.Optional;
-import java.util.stream.Collectors;
/**
* Logical OlapScan.
@@ -85,9 +84,10 @@ public class LogicalOlapScan extends LogicalRelation {
@Override
public String toString() {
- return "LogicalOlapScan (" + qualifiedName() + ", output: "
- + getOutput().stream().map(Objects::toString)
- .collect(Collectors.joining(", ", "[", "]")) + ")";
+ return Utils.toSqlString("LogicalOlapScan",
+ "qualifier", qualifiedName(),
+ "output", getOutput()
+ );
}
@Override
diff --git
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalProject.java
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalProject.java
index 96b10698b9..738c2a53e1 100644
---
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalProject.java
+++
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalProject.java
@@ -26,10 +26,10 @@ import org.apache.doris.nereids.trees.plans.Plan;
import org.apache.doris.nereids.trees.plans.PlanType;
import org.apache.doris.nereids.trees.plans.algebra.Project;
import org.apache.doris.nereids.trees.plans.visitor.PlanVisitor;
+import org.apache.doris.nereids.util.Utils;
import com.google.common.base.Preconditions;
import com.google.common.collect.ImmutableList;
-import org.apache.commons.lang3.StringUtils;
import java.util.List;
import java.util.Objects;
@@ -52,7 +52,7 @@ public class LogicalProject<CHILD_TYPE extends Plan> extends
LogicalUnary<CHILD_
* @param projects project list
*/
public LogicalProject(List<NamedExpression> projects,
Optional<GroupExpression> groupExpression,
- Optional<LogicalProperties> logicalProperties,
CHILD_TYPE child) {
+ Optional<LogicalProperties> logicalProperties, CHILD_TYPE child) {
super(PlanType.LOGICAL_PROJECT, groupExpression, logicalProperties,
child);
this.projects = ImmutableList.copyOf(Objects.requireNonNull(projects,
"projects can not be null"));
}
@@ -76,7 +76,9 @@ public class LogicalProject<CHILD_TYPE extends Plan> extends
LogicalUnary<CHILD_
@Override
public String toString() {
- return "LogicalProject (" + StringUtils.join(projects, ", ") + ")";
+ return Utils.toSqlString("LogicalProject",
+ "projects", projects
+ );
}
@Override
diff --git
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalSort.java
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalSort.java
index 5c00a653d8..d77baf33ef 100644
---
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalSort.java
+++
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalSort.java
@@ -26,10 +26,10 @@ import org.apache.doris.nereids.trees.plans.Plan;
import org.apache.doris.nereids.trees.plans.PlanType;
import org.apache.doris.nereids.trees.plans.algebra.Sort;
import org.apache.doris.nereids.trees.plans.visitor.PlanVisitor;
+import org.apache.doris.nereids.util.Utils;
import com.google.common.base.Preconditions;
import com.google.common.collect.ImmutableList;
-import org.apache.commons.lang3.StringUtils;
import java.util.List;
import java.util.Objects;
@@ -70,7 +70,8 @@ public class LogicalSort<CHILD_TYPE extends Plan> extends
LogicalUnary<CHILD_TYP
@Override
public String toString() {
- return "LogicalSort (" + StringUtils.join(orderKeys, ", ") + ")";
+ return Utils.toSqlString("LogicalSort",
+ "orderKeys", orderKeys);
}
@Override
diff --git
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalSubQueryAlias.java
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalSubQueryAlias.java
index 45f0add041..fc71a8fedc 100644
---
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalSubQueryAlias.java
+++
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalSubQueryAlias.java
@@ -24,6 +24,7 @@ import org.apache.doris.nereids.trees.expressions.Slot;
import org.apache.doris.nereids.trees.plans.Plan;
import org.apache.doris.nereids.trees.plans.PlanType;
import org.apache.doris.nereids.trees.plans.visitor.PlanVisitor;
+import org.apache.doris.nereids.util.Utils;
import com.google.common.base.Preconditions;
import com.google.common.collect.ImmutableList;
@@ -65,7 +66,9 @@ public class LogicalSubQueryAlias<CHILD_TYPE extends Plan>
extends LogicalUnary<
@Override
public String toString() {
- return "LogicalSubQueryAlias (" + alias + ")";
+ return Utils.toSqlString("LogicalSubQueryAlias",
+ "alias", alias
+ );
}
@Override
diff --git
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalTopN.java
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalTopN.java
index fa0c523626..5718baaae0 100644
---
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalTopN.java
+++
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalTopN.java
@@ -26,10 +26,10 @@ import org.apache.doris.nereids.trees.plans.Plan;
import org.apache.doris.nereids.trees.plans.PlanType;
import org.apache.doris.nereids.trees.plans.algebra.TopN;
import org.apache.doris.nereids.trees.plans.visitor.PlanVisitor;
+import org.apache.doris.nereids.util.Utils;
import com.google.common.base.Preconditions;
import com.google.common.collect.ImmutableList;
-import org.apache.commons.lang3.StringUtils;
import java.util.List;
import java.util.Objects;
@@ -78,10 +78,11 @@ public class LogicalTopN<CHILD_TYPE extends Plan> extends
LogicalUnary<CHILD_TYP
@Override
public String toString() {
- return "LogicalTopN ("
- + "limit=" + limit
- + ", offset=" + offset
- + ", " + StringUtils.join(orderKeys, ", ") + ")";
+ return Utils.toSqlString("LogicalTopN",
+ "limit", limit,
+ "offset", offset,
+ "orderKeys", orderKeys
+ );
}
@Override
diff --git
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/physical/PhysicalAggregate.java
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/physical/PhysicalAggregate.java
index 05a97c19ff..052428afca 100644
---
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/physical/PhysicalAggregate.java
+++
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/physical/PhysicalAggregate.java
@@ -26,10 +26,10 @@ import org.apache.doris.nereids.trees.plans.Plan;
import org.apache.doris.nereids.trees.plans.PlanType;
import org.apache.doris.nereids.trees.plans.algebra.Aggregate;
import org.apache.doris.nereids.trees.plans.visitor.PlanVisitor;
+import org.apache.doris.nereids.util.Utils;
import com.google.common.base.Preconditions;
import com.google.common.collect.ImmutableList;
-import org.apache.commons.lang3.StringUtils;
import java.util.List;
import java.util.Objects;
@@ -52,8 +52,8 @@ public class PhysicalAggregate<CHILD_TYPE extends Plan>
extends PhysicalUnary<CH
public PhysicalAggregate(List<Expression> groupByExpressions,
List<NamedExpression> outputExpressions,
- List<Expression> partitionExpressions, AggPhase
aggPhase, boolean usingStream,
- LogicalProperties logicalProperties, CHILD_TYPE
child) {
+ List<Expression> partitionExpressions, AggPhase aggPhase, boolean
usingStream,
+ LogicalProperties logicalProperties, CHILD_TYPE child) {
this(groupByExpressions, outputExpressions, partitionExpressions,
aggPhase, usingStream,
Optional.empty(), logicalProperties, child);
}
@@ -67,9 +67,9 @@ public class PhysicalAggregate<CHILD_TYPE extends Plan>
extends PhysicalUnary<CH
* @param usingStream whether it's stream agg.
*/
public PhysicalAggregate(List<Expression> groupByExpressions,
List<NamedExpression> outputExpressions,
- List<Expression> partitionExpressions, AggPhase
aggPhase, boolean usingStream,
- Optional<GroupExpression> groupExpression,
LogicalProperties logicalProperties,
- CHILD_TYPE child) {
+ List<Expression> partitionExpressions, AggPhase aggPhase, boolean
usingStream,
+ Optional<GroupExpression> groupExpression, LogicalProperties
logicalProperties,
+ CHILD_TYPE child) {
super(PlanType.PHYSICAL_AGGREGATE, groupExpression, logicalProperties,
child);
this.groupByExpressions = groupByExpressions;
this.outputExpressions = outputExpressions;
@@ -112,9 +112,11 @@ public class PhysicalAggregate<CHILD_TYPE extends Plan>
extends PhysicalUnary<CH
@Override
public String toString() {
- return "PhysicalAggregate (phase: [" + aggPhase.name() + "], output: ["
- + StringUtils.join(outputExpressions, ", ")
- + "], groupBy: [" + StringUtils.join(groupByExpressions, ", ")
+ "])";
+ return Utils.toSqlString("PhysicalAggregate",
+ "phase", aggPhase,
+ "outputExpr", outputExpressions,
+ "groupByExpr", groupByExpressions
+ );
}
/**
@@ -144,18 +146,18 @@ public class PhysicalAggregate<CHILD_TYPE extends Plan>
extends PhysicalUnary<CH
public PhysicalUnary<Plan> withChildren(List<Plan> children) {
Preconditions.checkArgument(children.size() == 1);
return new PhysicalAggregate<>(groupByExpressions, outputExpressions,
partitionExpressions, aggPhase,
- usingStream, logicalProperties, children.get(0));
+ usingStream, logicalProperties, children.get(0));
}
@Override
public Plan withGroupExpression(Optional<GroupExpression> groupExpression)
{
return new PhysicalAggregate<>(groupByExpressions, outputExpressions,
partitionExpressions, aggPhase,
- usingStream, groupExpression, logicalProperties, child());
+ usingStream, groupExpression, logicalProperties, child());
}
@Override
public Plan withLogicalProperties(Optional<LogicalProperties>
logicalProperties) {
return new PhysicalAggregate<>(groupByExpressions, outputExpressions,
partitionExpressions, aggPhase,
- usingStream, Optional.empty(), logicalProperties.get(), child());
+ usingStream, Optional.empty(), logicalProperties.get(),
child());
}
}
diff --git
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/physical/PhysicalDistribution.java
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/physical/PhysicalDistribution.java
index 7dd4651061..8f9d89d350 100644
---
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/physical/PhysicalDistribution.java
+++
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/physical/PhysicalDistribution.java
@@ -24,6 +24,7 @@ import org.apache.doris.nereids.trees.expressions.Expression;
import org.apache.doris.nereids.trees.plans.Plan;
import org.apache.doris.nereids.trees.plans.PlanType;
import org.apache.doris.nereids.trees.plans.visitor.PlanVisitor;
+import org.apache.doris.nereids.util.Utils;
import com.google.common.base.Preconditions;
import com.google.common.collect.ImmutableList;
@@ -43,11 +44,18 @@ public class PhysicalDistribution<CHILD_TYPE extends Plan>
extends PhysicalUnary
}
public PhysicalDistribution(DistributionSpec spec,
Optional<GroupExpression> groupExpression,
- LogicalProperties logicalProperties,
CHILD_TYPE child) {
+ LogicalProperties logicalProperties, CHILD_TYPE child) {
super(PlanType.PHYSICAL_DISTRIBUTION, groupExpression,
logicalProperties, child);
this.distributionSpec = spec;
}
+ @Override
+ public String toString() {
+ return Utils.toSqlString("PhysicalDistribution",
+ "distributionSpec", distributionSpec
+ );
+ }
+
@Override
public <R, C> R accept(PlanVisitor<R, C> visitor, C context) {
return visitor.visitPhysicalDistribution((PhysicalDistribution<Plan>)
this, context);
@@ -62,7 +70,7 @@ public class PhysicalDistribution<CHILD_TYPE extends Plan>
extends PhysicalUnary
public Plan withChildren(List<Plan> children) {
Preconditions.checkArgument(children.size() == 1);
return new PhysicalDistribution<>(distributionSpec, Optional.empty(),
- logicalProperties, children.get(0));
+ logicalProperties, children.get(0));
}
@Override
@@ -73,6 +81,6 @@ public class PhysicalDistribution<CHILD_TYPE extends Plan>
extends PhysicalUnary
@Override
public Plan withLogicalProperties(Optional<LogicalProperties>
logicalProperties) {
return new PhysicalDistribution<>(distributionSpec, Optional.empty(),
- logicalProperties.get(), child());
+ logicalProperties.get(), child());
}
}
diff --git
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/physical/PhysicalFilter.java
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/physical/PhysicalFilter.java
index c2eb461bd5..d51c870586 100644
---
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/physical/PhysicalFilter.java
+++
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/physical/PhysicalFilter.java
@@ -24,6 +24,7 @@ import org.apache.doris.nereids.trees.plans.Plan;
import org.apache.doris.nereids.trees.plans.PlanType;
import org.apache.doris.nereids.trees.plans.algebra.Filter;
import org.apache.doris.nereids.trees.plans.visitor.PlanVisitor;
+import org.apache.doris.nereids.util.Utils;
import com.google.common.base.Preconditions;
import com.google.common.collect.ImmutableList;
@@ -44,7 +45,7 @@ public class PhysicalFilter<CHILD_TYPE extends Plan> extends
PhysicalUnary<CHILD
}
public PhysicalFilter(Expression predicates, Optional<GroupExpression>
groupExpression,
- LogicalProperties logicalProperties, CHILD_TYPE
child) {
+ LogicalProperties logicalProperties, CHILD_TYPE child) {
super(PlanType.PHYSICAL_FILTER, groupExpression, logicalProperties,
child);
this.predicates = Objects.requireNonNull(predicates, "predicates can
not be null");
}
@@ -55,7 +56,9 @@ public class PhysicalFilter<CHILD_TYPE extends Plan> extends
PhysicalUnary<CHILD
@Override
public String toString() {
- return "PhysicalFilter (" + predicates + ")";
+ return Utils.toSqlString("PhysicalFilter",
+ "predicates", predicates
+ );
}
@Override
diff --git
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/physical/PhysicalHashJoin.java
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/physical/PhysicalHashJoin.java
index a714dac003..c3c7b0507b 100644
---
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/physical/PhysicalHashJoin.java
+++
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/physical/PhysicalHashJoin.java
@@ -24,9 +24,9 @@ import org.apache.doris.nereids.trees.plans.JoinType;
import org.apache.doris.nereids.trees.plans.Plan;
import org.apache.doris.nereids.trees.plans.PlanType;
import org.apache.doris.nereids.trees.plans.visitor.PlanVisitor;
+import org.apache.doris.nereids.util.Utils;
import com.google.common.base.Preconditions;
-import org.apache.commons.lang.StringUtils;
import java.util.List;
import java.util.Optional;
@@ -66,16 +66,11 @@ public class PhysicalHashJoin<
@Override
public String toString() {
- StringBuilder sb = new StringBuilder();
- sb.append("PhysicalHashJoin ([").append(joinType).append("]");
- sb.append("hashJoinCondition:[");
- sb.append(StringUtils.join(hashJoinConjuncts, ", "));
- sb.append("] ");
- otherJoinCondition.ifPresent(
- expression -> sb.append(", nonHashJoinCondition
[").append(expression).append("]")
+ return Utils.toSqlString("PhysicalHashJoin",
+ "type", joinType,
+ "hashJoinCondition", hashJoinConjuncts,
+ "otherJoinCondition", otherJoinCondition
);
- sb.append(")");
- return sb.toString();
}
@Override
diff --git
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/physical/PhysicalLimit.java
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/physical/PhysicalLimit.java
index 727dc18054..2dfd1b06c2 100644
---
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/physical/PhysicalLimit.java
+++
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/physical/PhysicalLimit.java
@@ -25,6 +25,7 @@ import org.apache.doris.nereids.trees.plans.Plan;
import org.apache.doris.nereids.trees.plans.PlanType;
import org.apache.doris.nereids.trees.plans.algebra.Limit;
import org.apache.doris.nereids.trees.plans.visitor.PlanVisitor;
+import org.apache.doris.nereids.util.Utils;
import com.google.common.base.Preconditions;
import com.google.common.collect.Lists;
@@ -44,20 +45,21 @@ public class PhysicalLimit<CHILD_TYPE extends Plan> extends
PhysicalUnary<CHILD_
/**
* constructor
* select * from t order by a limit [offset], [limit];
+ *
* @param limit the number of tuples retrieved.
* @param offset the number of tuples skipped.
*/
public PhysicalLimit(long limit, long offset,
- Optional<GroupExpression> groupExpression,
LogicalProperties logicalProperties,
- CHILD_TYPE child) {
+ Optional<GroupExpression> groupExpression, LogicalProperties
logicalProperties,
+ CHILD_TYPE child) {
super(PlanType.PHYSICAL_LIMIT, groupExpression, logicalProperties,
child);
this.limit = limit;
this.offset = offset;
}
public PhysicalLimit(long limit, long offset,
- LogicalProperties logicalProperties,
- CHILD_TYPE child) {
+ LogicalProperties logicalProperties,
+ CHILD_TYPE child) {
this(limit, offset, Optional.empty(), logicalProperties, child);
}
@@ -115,8 +117,11 @@ public class PhysicalLimit<CHILD_TYPE extends Plan>
extends PhysicalUnary<CHILD_
return visitor.visitPhysicalLimit((PhysicalLimit<Plan>) this, context);
}
+ @Override
public String toString() {
- return "PhysicalLimit ( offset=" + offset + ", limit=" + limit + ")";
+ return Utils.toSqlString("PhysicalLimit",
+ "limit", limit,
+ "offset", offset
+ );
}
-
}
diff --git
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/physical/PhysicalNestedLoopJoin.java
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/physical/PhysicalNestedLoopJoin.java
index 55f862ac95..a158bdd03b 100644
---
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/physical/PhysicalNestedLoopJoin.java
+++
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/physical/PhysicalNestedLoopJoin.java
@@ -24,6 +24,7 @@ import org.apache.doris.nereids.trees.plans.JoinType;
import org.apache.doris.nereids.trees.plans.Plan;
import org.apache.doris.nereids.trees.plans.PlanType;
import org.apache.doris.nereids.trees.plans.visitor.PlanVisitor;
+import org.apache.doris.nereids.util.Utils;
import com.google.common.base.Preconditions;
@@ -67,13 +68,10 @@ public class PhysicalNestedLoopJoin<
@Override
public String toString() {
// TODO: Maybe we could pull up this to the abstract class in the
future.
- StringBuilder sb = new StringBuilder();
- sb.append("PhysicalNestedLoopJoin ([").append(joinType).append("]");
- otherJoinCondition.ifPresent(
- expression -> sb.append(", [").append(expression).append("]")
+ return Utils.toSqlString("PhysicalNestedLoopJoin",
+ "type", joinType,
+ "otherJoinCondition", otherJoinCondition
);
- sb.append(")");
- return sb.toString();
}
@Override
diff --git
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/physical/PhysicalOlapScan.java
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/physical/PhysicalOlapScan.java
index 2146cf7aac..5ae5adc343 100644
---
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/physical/PhysicalOlapScan.java
+++
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/physical/PhysicalOlapScan.java
@@ -80,9 +80,10 @@ public class PhysicalOlapScan extends PhysicalRelation {
@Override
public String toString() {
- return "PhysicalOlapScan (["
- + Utils.qualifiedName(qualifier, olapTable.getName())
- + "], [index id=" + selectedIndexId + "] )";
+ return Utils.toSqlString("PhysicalOlapScan",
+ "qualifier", Utils.qualifiedName(qualifier,
olapTable.getName()),
+ "output", getOutput()
+ );
}
@Override
diff --git
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/physical/PhysicalProject.java
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/physical/PhysicalProject.java
index fd9b66bba3..2a3a81afc0 100644
---
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/physical/PhysicalProject.java
+++
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/physical/PhysicalProject.java
@@ -25,9 +25,9 @@ import org.apache.doris.nereids.trees.plans.Plan;
import org.apache.doris.nereids.trees.plans.PlanType;
import org.apache.doris.nereids.trees.plans.algebra.Project;
import org.apache.doris.nereids.trees.plans.visitor.PlanVisitor;
+import org.apache.doris.nereids.util.Utils;
import com.google.common.base.Preconditions;
-import org.apache.commons.lang3.StringUtils;
import java.util.List;
import java.util.Objects;
@@ -56,9 +56,12 @@ public class PhysicalProject<CHILD_TYPE extends Plan>
extends PhysicalUnary<CHIL
@Override
public String toString() {
- return "Project (" + StringUtils.join(projects, ", ") + ")";
+ return Utils.toSqlString("PhysicalProject",
+ "projects", projects
+ );
}
+
@Override
public boolean equals(Object o) {
if (this == o) {
diff --git
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/physical/PhysicalQuickSort.java
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/physical/PhysicalQuickSort.java
index b1748480d7..3f512e6671 100644
---
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/physical/PhysicalQuickSort.java
+++
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/physical/PhysicalQuickSort.java
@@ -24,10 +24,10 @@ import
org.apache.doris.nereids.trees.expressions.Expression;
import org.apache.doris.nereids.trees.plans.Plan;
import org.apache.doris.nereids.trees.plans.PlanType;
import org.apache.doris.nereids.trees.plans.visitor.PlanVisitor;
+import org.apache.doris.nereids.util.Utils;
import com.google.common.base.Preconditions;
import com.google.common.collect.ImmutableList;
-import org.apache.commons.lang3.StringUtils;
import java.util.List;
import java.util.Optional;
@@ -81,7 +81,8 @@ public class PhysicalQuickSort<CHILD_TYPE extends Plan>
extends AbstractPhysical
@Override
public String toString() {
- return "PhysicalQuickSort ("
- + StringUtils.join(orderKeys, ", ") + ")";
+ return Utils.toSqlString("PhysicalQuickSort",
+ "orderKeys", orderKeys
+ );
}
}
diff --git
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/physical/PhysicalTopN.java
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/physical/PhysicalTopN.java
index 7a93e3b41c..10e158c208 100644
---
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/physical/PhysicalTopN.java
+++
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/physical/PhysicalTopN.java
@@ -25,10 +25,10 @@ import org.apache.doris.nereids.trees.plans.Plan;
import org.apache.doris.nereids.trees.plans.PlanType;
import org.apache.doris.nereids.trees.plans.algebra.TopN;
import org.apache.doris.nereids.trees.plans.visitor.PlanVisitor;
+import org.apache.doris.nereids.util.Utils;
import com.google.common.base.Preconditions;
import com.google.common.collect.ImmutableList;
-import org.apache.commons.lang3.StringUtils;
import java.util.List;
import java.util.Objects;
@@ -117,9 +117,10 @@ public class PhysicalTopN<CHILD_TYPE extends Plan> extends
AbstractPhysicalSort<
@Override
public String toString() {
- return "PhysicalTopN ("
- + "limit=" + limit
- + ", offset=" + offset
- + ", " + StringUtils.join(orderKeys, ", ") + ")";
+ return Utils.toSqlString("PhysicalTopN",
+ "limit", limit,
+ "offset", offset,
+ "orderKeys", orderKeys
+ );
}
}
diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/util/Utils.java
b/fe/fe-core/src/main/java/org/apache/doris/nereids/util/Utils.java
index cba61cac71..02033f4e28 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/nereids/util/Utils.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/util/Utils.java
@@ -20,6 +20,7 @@ package org.apache.doris.nereids.util;
import org.apache.doris.nereids.trees.expressions.SlotReference;
import org.apache.doris.nereids.trees.plans.Plan;
+import com.google.common.base.Preconditions;
import com.google.common.collect.ImmutableList;
import org.apache.commons.lang3.StringUtils;
@@ -48,7 +49,7 @@ public class Utils {
*
* @param f function which would invoke the logic of
* stale code from old optimizer that could throw
- * a checked exception
+ * a checked exception.
*/
public static void execWithUncheckedException(FuncWrapper f) {
try {
@@ -119,4 +120,30 @@ public class Utils {
return plan.getOutput().stream().map(SlotReference.class::cast)
.collect(Collectors.toList());
}
+
+ /**
+ * Get sql string for plan.
+ *
+ * @param planName name of plan, like LogicalJoin.
+ * @param variables variable needed to add into sqlString.
+ * @return the string of PlanNode.
+ */
+ public static String toSqlString(String planName, Object... variables) {
+ Preconditions.checkState(variables.length % 2 == 0);
+ StringBuilder stringBuilder = new StringBuilder();
+ stringBuilder.append(planName).append(" ( ");
+
+ if (variables.length == 0) {
+ return stringBuilder.append(" )").toString();
+ }
+
+ for (int i = 0; i < variables.length - 1; i += 2) {
+ stringBuilder.append(variables[i]).append("=").append(variables[i
+ 1]);
+ if (i < variables.length - 2) {
+ stringBuilder.append(", ");
+ }
+ }
+
+ return stringBuilder.append(" )").toString();
+ }
}
diff --git
a/fe/fe-core/src/test/java/org/apache/doris/nereids/trees/plans/PlanToStringTest.java
b/fe/fe-core/src/test/java/org/apache/doris/nereids/trees/plans/PlanToStringTest.java
new file mode 100644
index 0000000000..63822eeaaf
--- /dev/null
+++
b/fe/fe-core/src/test/java/org/apache/doris/nereids/trees/plans/PlanToStringTest.java
@@ -0,0 +1,105 @@
+// 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.nereids.trees.plans;
+
+import org.apache.doris.nereids.properties.OrderKey;
+import org.apache.doris.nereids.trees.expressions.EqualTo;
+import org.apache.doris.nereids.trees.expressions.ExprId;
+import org.apache.doris.nereids.trees.expressions.SlotReference;
+import org.apache.doris.nereids.trees.expressions.literal.Literal;
+import org.apache.doris.nereids.trees.plans.logical.LogicalAggregate;
+import org.apache.doris.nereids.trees.plans.logical.LogicalFilter;
+import org.apache.doris.nereids.trees.plans.logical.LogicalJoin;
+import org.apache.doris.nereids.trees.plans.logical.LogicalLimit;
+import org.apache.doris.nereids.trees.plans.logical.LogicalOlapScan;
+import org.apache.doris.nereids.trees.plans.logical.LogicalProject;
+import org.apache.doris.nereids.trees.plans.logical.LogicalSort;
+import org.apache.doris.nereids.types.BigIntType;
+import org.apache.doris.nereids.types.IntegerType;
+import org.apache.doris.nereids.util.PlanConstructor;
+
+import com.google.common.collect.ImmutableList;
+import com.google.common.collect.Lists;
+import mockit.Mocked;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Test;
+
+import java.util.List;
+import java.util.Optional;
+
+public class PlanToStringTest {
+
+ @Test
+ public void testLogicalLimit(@Mocked Plan child) {
+ LogicalLimit<Plan> plan = new LogicalLimit<>(0, 0, child);
+
+ Assertions.assertEquals("LogicalLimit ( limit=0, offset=0 )",
plan.toString());
+ }
+
+ @Test
+ public void testLogicalAggregate(@Mocked Plan child) {
+ LogicalAggregate<Plan> plan = new
LogicalAggregate<>(Lists.newArrayList(), ImmutableList.of(
+ new SlotReference(new ExprId(0), "a", BigIntType.INSTANCE,
true, Lists.newArrayList())), child);
+
+ Assertions.assertTrue(plan.toString()
+ .matches("LogicalAggregate \\( phase=GLOBAL,
outputExpr=\\[a#\\d+], groupByExpr=\\[] \\)"));
+ }
+
+ @Test
+ public void testLogicalFilter(@Mocked Plan child) {
+ LogicalFilter<Plan> plan = new LogicalFilter<>(new
EqualTo(Literal.of(1), Literal.of(1)), child);
+
+ Assertions.assertEquals("LogicalFilter ( predicates=(1 = 1) )",
plan.toString());
+ }
+
+ @Test
+ public void testLogicalJoin(@Mocked Plan left, @Mocked Plan right) {
+ LogicalJoin<Plan, Plan> plan = new LogicalJoin<>(JoinType.INNER_JOIN,
Lists.newArrayList(
+ new EqualTo(new SlotReference(new ExprId(0), "a",
BigIntType.INSTANCE, true, Lists.newArrayList()),
+ new SlotReference(new ExprId(1), "b",
BigIntType.INSTANCE, true, Lists.newArrayList()))),
+ Optional.empty(), left, right);
+
+ Assertions.assertTrue(plan.toString().matches(
+ "LogicalJoin \\( type=INNER_JOIN,
hashJoinCondition=\\[\\(a#\\d+ = b#\\d+\\)], otherJoinCondition=Optional.empty
\\)"));
+ }
+
+ @Test
+ public void testLogicalOlapScan() {
+ LogicalOlapScan plan = PlanConstructor.newLogicalOlapScan(0, "table",
0);
+ Assertions.assertTrue(
+ plan.toString().matches("LogicalOlapScan \\(
qualifier=db\\.table, output=\\[id#\\d+, name#\\d+] \\)"));
+ }
+
+ @Test
+ public void testLogicalProject(@Mocked Plan child) {
+ LogicalProject<Plan> plan = new LogicalProject<>(ImmutableList.of(
+ new SlotReference(new ExprId(0), "a", BigIntType.INSTANCE,
true, Lists.newArrayList())), child);
+
+ Assertions.assertTrue(plan.toString().matches("LogicalProject \\(
projects=\\[a#\\d+] \\)"));
+ }
+
+ @Test
+ public void testLogicalSort(@Mocked Plan child) {
+ List<OrderKey> orderKeyList = Lists.newArrayList(
+ new OrderKey(new SlotReference("col1", IntegerType.INSTANCE),
true, true),
+ new OrderKey(new SlotReference("col2", IntegerType.INSTANCE),
true, true));
+
+ LogicalSort<Plan> plan = new LogicalSort<>(orderKeyList, child);
+ Assertions.assertTrue(plan.toString().matches("LogicalSort \\(
orderKeys=\\[col1#\\d+, col2#\\d+] \\)"));
+ }
+}
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]