This is an automated email from the ASF dual-hosted git repository.
huajianlan 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 80ce027ea2 [refactor](Nereids): refactor UT of Nereids (#11330)
80ce027ea2 is described below
commit 80ce027ea20bae752a0db93ae27225c7518e58f2
Author: jakevin <[email protected]>
AuthorDate: Mon Aug 1 22:53:00 2022 +0800
[refactor](Nereids): refactor UT of Nereids (#11330)
refactor the UT of Nereids.
Extract the plan constructor (This PR extract all olapscan and table into
PlanConstructor).
---
.../glue/translator/PhysicalPlanTranslator.java | 4 +-
.../rules/exploration/join/JoinLAsscom.java | 4 +-
.../rules/exploration/join/JoinProjectLAsscom.java | 4 +-
.../nereids/rules/rewrite/logical/MultiJoin.java | 4 +-
.../logical/PushPredicateThroughAggregation.java | 2 +-
.../rewrite/logical/PushPredicateThroughJoin.java | 2 +-
.../apache/doris/nereids/stats/JoinEstimation.java | 2 +-
.../apache/doris/nereids/util/ExpressionUtils.java | 4 +-
.../org/apache/doris/nereids/util/JoinUtils.java | 2 +-
.../doris/nereids/jobs/RewriteTopDownJobTest.java | 15 ++---
.../nereids/jobs/cascades/DeriveStatsJobTest.java | 10 ++-
.../rules/exploration/join/JoinCommuteTest.java | 15 +----
.../rules/exploration/join/JoinLAsscomTest.java | 24 ++------
.../exploration/join/JoinProjectLAsscomTest.java | 28 +++------
.../LogicalProjectToPhysicalProjectTest.java | 58 ++++++++++++++---
.../rewrite/logical/AggregateDisassembleTest.java | 11 +---
.../rewrite/logical/PushDownPredicateTest.java | 30 ++-------
.../PushDownPredicateThroughAggregationTest.java | 19 +-----
.../doris/nereids/stats/StatsCalculatorTest.java | 10 ++-
.../doris/nereids/trees/plans/PlanEqualsTest.java | 10 ++-
.../{TestPlanOutput.java => PlanOutputTest.java} | 19 ++----
.../doris/nereids/util/ExpressionUtilsTest.java | 16 ++---
.../apache/doris/nereids/util/PlanConstructor.java | 72 ++++++++++++++++++++++
23 files changed, 189 insertions(+), 176 deletions(-)
diff --git
a/fe/fe-core/src/main/java/org/apache/doris/nereids/glue/translator/PhysicalPlanTranslator.java
b/fe/fe-core/src/main/java/org/apache/doris/nereids/glue/translator/PhysicalPlanTranslator.java
index 139cf360e3..1a4cc3a821 100644
---
a/fe/fe-core/src/main/java/org/apache/doris/nereids/glue/translator/PhysicalPlanTranslator.java
+++
b/fe/fe-core/src/main/java/org/apache/doris/nereids/glue/translator/PhysicalPlanTranslator.java
@@ -348,7 +348,7 @@ public class PhysicalPlanTranslator extends
DefaultPlanVisitor<PlanFragment, Pla
throw new RuntimeException("Physical hash join could not execute
without equal join condition.");
} else {
Expression eqJoinExpression = hashJoin.getCondition().get();
- List<Expr> execEqConjunctList =
ExpressionUtils.extractConjunctive(eqJoinExpression).stream()
+ List<Expr> execEqConjunctList =
ExpressionUtils.extractConjunction(eqJoinExpression).stream()
.map(EqualTo.class::cast)
.map(e -> swapEqualToForChildrenOrder(e,
hashJoin.left().getOutput()))
.map(e -> ExpressionTranslator.translate(e, context))
@@ -400,7 +400,7 @@ public class PhysicalPlanTranslator extends
DefaultPlanVisitor<PlanFragment, Pla
PlanFragment inputFragment = filter.child(0).accept(this, context);
PlanNode planNode = inputFragment.getPlanRoot();
Expression expression = filter.getPredicates();
- List<Expression> expressionList =
ExpressionUtils.extractConjunctive(expression);
+ List<Expression> expressionList =
ExpressionUtils.extractConjunction(expression);
expressionList.stream().map(e -> ExpressionTranslator.translate(e,
context)).forEach(planNode::addConjunct);
return inputFragment;
}
diff --git
a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/exploration/join/JoinLAsscom.java
b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/exploration/join/JoinLAsscom.java
index 26fce95acc..8d9bda83af 100644
---
a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/exploration/join/JoinLAsscom.java
+++
b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/exploration/join/JoinLAsscom.java
@@ -80,7 +80,7 @@ public class JoinLAsscom extends OneExplorationRuleFactory {
// Ignore join with some OnClause like:
// Join C = B + A for above example.
- List<Expression> topJoinOnClauseConjuncts =
ExpressionUtils.extractConjunctive(topJoinOnClause);
+ List<Expression> topJoinOnClauseConjuncts =
ExpressionUtils.extractConjunction(topJoinOnClause);
for (Expression topJoinOnClauseConjunct :
topJoinOnClauseConjuncts) {
if
(ExpressionUtils.isIntersecting(topJoinOnClauseConjunct.collect(SlotReference.class::isInstance),
aOutputSlots)
@@ -94,7 +94,7 @@ public class JoinLAsscom extends OneExplorationRuleFactory {
return null;
}
}
- List<Expression> bottomJoinOnClauseConjuncts =
ExpressionUtils.extractConjunctive(bottomJoinOnClause);
+ List<Expression> bottomJoinOnClauseConjuncts =
ExpressionUtils.extractConjunction(bottomJoinOnClause);
List<Expression> allOnCondition = Lists.newArrayList();
allOnCondition.addAll(topJoinOnClauseConjuncts);
diff --git
a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/exploration/join/JoinProjectLAsscom.java
b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/exploration/join/JoinProjectLAsscom.java
index 74dfa353cf..afe7ac74b8 100644
---
a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/exploration/join/JoinProjectLAsscom.java
+++
b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/exploration/join/JoinProjectLAsscom.java
@@ -87,7 +87,7 @@ public class JoinProjectLAsscom extends
OneExplorationRuleFactory {
// Ignore join with some OnClause like:
// Join C = B + A for above example.
- List<Expression> topJoinOnClauseConjuncts =
ExpressionUtils.extractConjunctive(topJoinOnClause);
+ List<Expression> topJoinOnClauseConjuncts =
ExpressionUtils.extractConjunction(topJoinOnClause);
for (Expression topJoinOnClauseConjunct :
topJoinOnClauseConjuncts) {
if (ExpressionUtils.isIntersecting(
topJoinOnClauseConjunct.collect(SlotReference.class::isInstance), aOutputSlots)
@@ -101,7 +101,7 @@ public class JoinProjectLAsscom extends
OneExplorationRuleFactory {
return null;
}
}
- List<Expression> bottomJoinOnClauseConjuncts =
ExpressionUtils.extractConjunctive(
+ List<Expression> bottomJoinOnClauseConjuncts =
ExpressionUtils.extractConjunction(
bottomJoinOnClause);
List<Expression> allOnCondition = Lists.newArrayList();
diff --git
a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/rewrite/logical/MultiJoin.java
b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/rewrite/logical/MultiJoin.java
index b85b80cb8a..230efe7e81 100644
---
a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/rewrite/logical/MultiJoin.java
+++
b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/rewrite/logical/MultiJoin.java
@@ -168,7 +168,7 @@ public class MultiJoin extends PlanVisitor<Void, Void> {
public Void visitLogicalFilter(LogicalFilter<Plan> filter, Void context) {
Plan child = filter.child();
if (child instanceof LogicalJoin) {
-
conjuncts.addAll(ExpressionUtils.extractConjunctive(filter.getPredicates()));
+
conjuncts.addAll(ExpressionUtils.extractConjunction(filter.getPredicates()));
}
child.accept(this, context);
@@ -184,7 +184,7 @@ public class MultiJoin extends PlanVisitor<Void, Void> {
join.left().accept(this, context);
join.right().accept(this, context);
- join.getCondition().ifPresent(cond ->
conjuncts.addAll(ExpressionUtils.extractConjunctive(cond)));
+ join.getCondition().ifPresent(cond ->
conjuncts.addAll(ExpressionUtils.extractConjunction(cond)));
if (!(join.left() instanceof LogicalJoin)) {
joinInputs.add(join.left());
}
diff --git
a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/rewrite/logical/PushPredicateThroughAggregation.java
b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/rewrite/logical/PushPredicateThroughAggregation.java
index d2e2912437..33c8a9ccd6 100644
---
a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/rewrite/logical/PushPredicateThroughAggregation.java
+++
b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/rewrite/logical/PushPredicateThroughAggregation.java
@@ -77,7 +77,7 @@ public class PushPredicateThroughAggregation extends
OneRewriteRuleFactory {
}
List<Expression> pushDownPredicates = Lists.newArrayList();
List<Expression> filterPredicates = Lists.newArrayList();
-
ExpressionUtils.extractConjunctive(filter.getPredicates()).forEach(conjunct -> {
+
ExpressionUtils.extractConjunction(filter.getPredicates()).forEach(conjunct -> {
Set<Slot> conjunctSlots = SlotExtractor.extractSlot(conjunct);
if (groupBySlots.containsAll(conjunctSlots)) {
pushDownPredicates.add(conjunct);
diff --git
a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/rewrite/logical/PushPredicateThroughJoin.java
b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/rewrite/logical/PushPredicateThroughJoin.java
index 5fff975229..8c2f237b7a 100644
---
a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/rewrite/logical/PushPredicateThroughJoin.java
+++
b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/rewrite/logical/PushPredicateThroughJoin.java
@@ -79,7 +79,7 @@ public class PushPredicateThroughJoin extends
OneRewriteRuleFactory {
List<Slot> leftInput = join.left().getOutput();
List<Slot> rightInput = join.right().getOutput();
-
ExpressionUtils.extractConjunctive(ExpressionUtils.and(onPredicates,
wherePredicates))
+
ExpressionUtils.extractConjunction(ExpressionUtils.and(onPredicates,
wherePredicates))
.forEach(predicate -> {
if (Objects.nonNull(getJoinCondition(predicate,
leftInput, rightInput))) {
eqConditions.add(predicate);
diff --git
a/fe/fe-core/src/main/java/org/apache/doris/nereids/stats/JoinEstimation.java
b/fe/fe-core/src/main/java/org/apache/doris/nereids/stats/JoinEstimation.java
index c623956505..881e3acf91 100644
---
a/fe/fe-core/src/main/java/org/apache/doris/nereids/stats/JoinEstimation.java
+++
b/fe/fe-core/src/main/java/org/apache/doris/nereids/stats/JoinEstimation.java
@@ -44,7 +44,7 @@ public class JoinEstimation {
Expression eqCondition, JoinType joinType) {
StatsDeriveResult statsDeriveResult = new StatsDeriveResult(leftStats);
statsDeriveResult.merge(rightStats);
- List<Expression> eqConjunctList =
ExpressionUtils.extractConjunctive(eqCondition);
+ List<Expression> eqConjunctList =
ExpressionUtils.extractConjunction(eqCondition);
long rowCount = -1;
if (joinType.isSemiOrAntiJoin()) {
rowCount = getSemiJoinRowCount(leftStats, rightStats,
eqConjunctList, joinType);
diff --git
a/fe/fe-core/src/main/java/org/apache/doris/nereids/util/ExpressionUtils.java
b/fe/fe-core/src/main/java/org/apache/doris/nereids/util/ExpressionUtils.java
index 89218c25f7..2291549edf 100644
---
a/fe/fe-core/src/main/java/org/apache/doris/nereids/util/ExpressionUtils.java
+++
b/fe/fe-core/src/main/java/org/apache/doris/nereids/util/ExpressionUtils.java
@@ -37,11 +37,11 @@ import java.util.Set;
*/
public class ExpressionUtils {
- public static List<Expression> extractConjunctive(Expression expr) {
+ public static List<Expression> extractConjunction(Expression expr) {
return extract(And.class, expr);
}
- public static List<Expression> extractDisjunctive(Expression expr) {
+ public static List<Expression> extractDisjunction(Expression expr) {
return extract(Or.class, expr);
}
diff --git
a/fe/fe-core/src/main/java/org/apache/doris/nereids/util/JoinUtils.java
b/fe/fe-core/src/main/java/org/apache/doris/nereids/util/JoinUtils.java
index 04ccafcaee..711e954528 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/nereids/util/JoinUtils.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/util/JoinUtils.java
@@ -59,7 +59,7 @@ public class JoinUtils {
.collect(Collectors.toList());
Expression onCondition = join.getCondition().get();
- List<Expression> conjunctList =
ExpressionUtils.extractConjunctive(onCondition);
+ List<Expression> conjunctList =
ExpressionUtils.extractConjunction(onCondition);
for (Expression predicate : conjunctList) {
if (isEqualTo(leftSlots, rightSlots, predicate)) {
eqConjuncts.add((EqualTo) predicate);
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 3d13777cc9..0e63db22a1 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
@@ -17,10 +17,7 @@
package org.apache.doris.nereids.jobs;
-import org.apache.doris.catalog.Column;
import org.apache.doris.catalog.Table;
-import org.apache.doris.catalog.TableIf.TableType;
-import org.apache.doris.catalog.Type;
import org.apache.doris.nereids.PlannerContext;
import org.apache.doris.nereids.analyzer.UnboundRelation;
import org.apache.doris.nereids.memo.Group;
@@ -38,6 +35,7 @@ import
org.apache.doris.nereids.trees.plans.logical.LogicalProject;
import org.apache.doris.nereids.trees.plans.logical.LogicalRelation;
import org.apache.doris.nereids.types.IntegerType;
import org.apache.doris.nereids.types.StringType;
+import org.apache.doris.nereids.util.PlanConstructor;
import org.apache.doris.qe.ConnectContext;
import com.google.common.collect.ImmutableList;
@@ -52,14 +50,9 @@ public class RewriteTopDownJobTest {
public static class FakeRule extends OneRewriteRuleFactory {
@Override
public Rule build() {
- return unboundRelation().then(unboundRelation -> {
- Table olapTable = new Table(0, "test", TableType.OLAP,
ImmutableList.of(
- new Column("id", Type.INT),
- new Column("name", Type.STRING)
- ));
- return new LogicalBoundRelation(olapTable,
Lists.newArrayList("test"));
- }
- ).toRule(RuleType.BINDING_RELATION);
+ return unboundRelation().then(unboundRelation ->
+ new LogicalBoundRelation(PlanConstructor.newTable(0L,
"test"), Lists.newArrayList("test"))
+ ).toRule(RuleType.BINDING_RELATION);
}
}
diff --git
a/fe/fe-core/src/test/java/org/apache/doris/nereids/jobs/cascades/DeriveStatsJobTest.java
b/fe/fe-core/src/test/java/org/apache/doris/nereids/jobs/cascades/DeriveStatsJobTest.java
index 760cd8fb18..4fc8c703aa 100644
---
a/fe/fe-core/src/test/java/org/apache/doris/nereids/jobs/cascades/DeriveStatsJobTest.java
+++
b/fe/fe-core/src/test/java/org/apache/doris/nereids/jobs/cascades/DeriveStatsJobTest.java
@@ -19,7 +19,6 @@ package org.apache.doris.nereids.jobs.cascades;
import org.apache.doris.catalog.Env;
import org.apache.doris.catalog.Table;
-import org.apache.doris.catalog.TableIf.TableType;
import org.apache.doris.nereids.PlannerContext;
import org.apache.doris.nereids.jobs.JobContext;
import org.apache.doris.nereids.memo.Memo;
@@ -34,6 +33,7 @@ import org.apache.doris.nereids.trees.plans.Plan;
import org.apache.doris.nereids.trees.plans.logical.LogicalAggregate;
import org.apache.doris.nereids.trees.plans.logical.LogicalOlapScan;
import org.apache.doris.nereids.types.IntegerType;
+import org.apache.doris.nereids.util.PlanConstructor;
import org.apache.doris.qe.ConnectContext;
import org.apache.doris.statistics.ColumnStats;
import org.apache.doris.statistics.Statistics;
@@ -42,6 +42,7 @@ import org.apache.doris.statistics.StatsDeriveResult;
import org.apache.doris.statistics.TableStats;
import com.google.common.base.Supplier;
+import com.google.common.collect.ImmutableList;
import mockit.Expectations;
import mockit.Mocked;
import org.junit.jupiter.api.Assertions;
@@ -84,14 +85,11 @@ public class DeriveStatsJobTest {
columnStats1.setNdv(10);
columnStats1.setNumNulls(5);
long tableId1 = 0;
- String tableName1 = "t1";
TableStats tableStats1 = new TableStats();
tableStats1.putColumnStats("c1", columnStats1);
Statistics statistics = new Statistics();
statistics.putTableStats(tableId1, tableStats1);
- List<String> qualifier = new ArrayList<>();
- qualifier.add("test");
- qualifier.add("t");
+ List<String> qualifier = ImmutableList.of("test", "t");
slot1 = new SlotReference("c1", IntegerType.INSTANCE, true, qualifier);
new Expectations() {{
ConnectContext.get();
@@ -104,7 +102,7 @@ public class DeriveStatsJobTest {
result = statistics;
}};
- Table table1 = new Table(tableId1, tableName1, TableType.OLAP,
Collections.emptyList());
+ Table table1 = PlanConstructor.newTable(tableId1, "t1");
return new LogicalOlapScan(table1,
Collections.emptyList()).withLogicalProperties(
Optional.of(new LogicalProperties(new Supplier<List<Slot>>() {
@Override
diff --git
a/fe/fe-core/src/test/java/org/apache/doris/nereids/rules/exploration/join/JoinCommuteTest.java
b/fe/fe-core/src/test/java/org/apache/doris/nereids/rules/exploration/join/JoinCommuteTest.java
index 9b491ead9f..14151ce829 100644
---
a/fe/fe-core/src/test/java/org/apache/doris/nereids/rules/exploration/join/JoinCommuteTest.java
+++
b/fe/fe-core/src/test/java/org/apache/doris/nereids/rules/exploration/join/JoinCommuteTest.java
@@ -17,10 +17,6 @@
package org.apache.doris.nereids.rules.exploration.join;
-import org.apache.doris.catalog.AggregateType;
-import org.apache.doris.catalog.Column;
-import org.apache.doris.catalog.Table;
-import org.apache.doris.catalog.Type;
import org.apache.doris.nereids.PlannerContext;
import org.apache.doris.nereids.rules.Rule;
import org.apache.doris.nereids.trees.expressions.EqualTo;
@@ -31,6 +27,7 @@ import org.apache.doris.nereids.trees.plans.Plan;
import org.apache.doris.nereids.trees.plans.logical.LogicalJoin;
import org.apache.doris.nereids.trees.plans.logical.LogicalOlapScan;
import org.apache.doris.nereids.types.BigIntType;
+import org.apache.doris.nereids.util.PlanConstructor;
import com.google.common.collect.ImmutableList;
import mockit.Mocked;
@@ -43,13 +40,8 @@ import java.util.Optional;
public class JoinCommuteTest {
@Test
public void testInnerJoinCommute(@Mocked PlannerContext plannerContext) {
- Table table1 = new Table(0L, "table1", Table.TableType.OLAP,
- ImmutableList.of(new Column("id", Type.INT, true,
AggregateType.NONE, "0", "")));
- LogicalOlapScan scan1 = new LogicalOlapScan(table1,
ImmutableList.of());
-
- Table table2 = new Table(0L, "table2", Table.TableType.OLAP,
- ImmutableList.of(new Column("id", Type.INT, true,
AggregateType.NONE, "0", "")));
- LogicalOlapScan scan2 = new LogicalOlapScan(table2,
ImmutableList.of());
+ LogicalOlapScan scan1 = PlanConstructor.newLogicalOlapScan("t2");
+ LogicalOlapScan scan2 = PlanConstructor.newLogicalOlapScan("t2");
Expression onCondition = new EqualTo(
new SlotReference("id", new BigIntType(), true,
ImmutableList.of("table1")),
@@ -66,5 +58,4 @@ public class JoinCommuteTest {
Assertions.assertEquals(join.child(0), newJoin.child(1));
Assertions.assertEquals(join.child(1), newJoin.child(0));
}
-
}
diff --git
a/fe/fe-core/src/test/java/org/apache/doris/nereids/rules/exploration/join/JoinLAsscomTest.java
b/fe/fe-core/src/test/java/org/apache/doris/nereids/rules/exploration/join/JoinLAsscomTest.java
index e991f7ad11..11e7bbbbf1 100644
---
a/fe/fe-core/src/test/java/org/apache/doris/nereids/rules/exploration/join/JoinLAsscomTest.java
+++
b/fe/fe-core/src/test/java/org/apache/doris/nereids/rules/exploration/join/JoinLAsscomTest.java
@@ -17,10 +17,6 @@
package org.apache.doris.nereids.rules.exploration.join;
-import org.apache.doris.catalog.AggregateType;
-import org.apache.doris.catalog.Column;
-import org.apache.doris.catalog.Table;
-import org.apache.doris.catalog.Type;
import org.apache.doris.common.Pair;
import org.apache.doris.nereids.PlannerContext;
import org.apache.doris.nereids.rules.Rule;
@@ -31,8 +27,8 @@ import org.apache.doris.nereids.trees.plans.JoinType;
import org.apache.doris.nereids.trees.plans.Plan;
import org.apache.doris.nereids.trees.plans.logical.LogicalJoin;
import org.apache.doris.nereids.trees.plans.logical.LogicalOlapScan;
+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;
@@ -50,20 +46,10 @@ public class JoinLAsscomTest {
@BeforeAll
public static void init() {
- Table t1 = new Table(0L, "t1", Table.TableType.OLAP,
- ImmutableList.of(new Column("id", Type.INT, true,
AggregateType.NONE, "0", ""),
- new Column("name", Type.STRING, true,
AggregateType.NONE, "0", "")));
- LogicalOlapScan scan1 = new LogicalOlapScan(t1, ImmutableList.of());
-
- Table t2 = new Table(0L, "t2", Table.TableType.OLAP,
- ImmutableList.of(new Column("id", Type.INT, true,
AggregateType.NONE, "0", ""),
- new Column("name", Type.STRING, true,
AggregateType.NONE, "0", "")));
- LogicalOlapScan scan2 = new LogicalOlapScan(t2, ImmutableList.of());
-
- Table t3 = new Table(0L, "t3", Table.TableType.OLAP,
- ImmutableList.of(new Column("id", Type.INT, true,
AggregateType.NONE, "0", ""),
- new Column("name", Type.STRING, true,
AggregateType.NONE, "0", "")));
- LogicalOlapScan scan3 = new LogicalOlapScan(t3, ImmutableList.of());
+ LogicalOlapScan scan1 =
PlanConstructor.newLogicalOlapScanWithTable("t1");
+ LogicalOlapScan scan2 =
PlanConstructor.newLogicalOlapScanWithTable("t2");
+ LogicalOlapScan scan3 =
PlanConstructor.newLogicalOlapScanWithTable("t3");
+
scans.add(scan1);
scans.add(scan2);
scans.add(scan3);
diff --git
a/fe/fe-core/src/test/java/org/apache/doris/nereids/rules/exploration/join/JoinProjectLAsscomTest.java
b/fe/fe-core/src/test/java/org/apache/doris/nereids/rules/exploration/join/JoinProjectLAsscomTest.java
index c29f3bb722..95a106c15d 100644
---
a/fe/fe-core/src/test/java/org/apache/doris/nereids/rules/exploration/join/JoinProjectLAsscomTest.java
+++
b/fe/fe-core/src/test/java/org/apache/doris/nereids/rules/exploration/join/JoinProjectLAsscomTest.java
@@ -17,10 +17,6 @@
package org.apache.doris.nereids.rules.exploration.join;
-import org.apache.doris.catalog.AggregateType;
-import org.apache.doris.catalog.Column;
-import org.apache.doris.catalog.Table;
-import org.apache.doris.catalog.Type;
import org.apache.doris.common.Pair;
import org.apache.doris.nereids.PlannerContext;
import org.apache.doris.nereids.rules.Rule;
@@ -34,6 +30,7 @@ import org.apache.doris.nereids.trees.plans.Plan;
import org.apache.doris.nereids.trees.plans.logical.LogicalJoin;
import org.apache.doris.nereids.trees.plans.logical.LogicalOlapScan;
import org.apache.doris.nereids.trees.plans.logical.LogicalProject;
+import org.apache.doris.nereids.util.PlanConstructor;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.Lists;
@@ -48,25 +45,15 @@ import java.util.stream.Collectors;
public class JoinProjectLAsscomTest {
- private static List<LogicalOlapScan> scans = Lists.newArrayList();
- private static List<List<SlotReference>> outputs = Lists.newArrayList();
+ private static final List<LogicalOlapScan> scans = Lists.newArrayList();
+ private static final List<List<SlotReference>> outputs =
Lists.newArrayList();
@BeforeAll
public static void init() {
- Table t1 = new Table(0L, "t1", Table.TableType.OLAP,
- ImmutableList.of(new Column("id", Type.INT, true,
AggregateType.NONE, "0", ""),
- new Column("name", Type.STRING, true,
AggregateType.NONE, "0", "")));
- LogicalOlapScan scan1 = new LogicalOlapScan(t1, ImmutableList.of());
-
- Table t2 = new Table(0L, "t2", Table.TableType.OLAP,
- ImmutableList.of(new Column("id", Type.INT, true,
AggregateType.NONE, "0", ""),
- new Column("name", Type.STRING, true,
AggregateType.NONE, "0", "")));
- LogicalOlapScan scan2 = new LogicalOlapScan(t2, ImmutableList.of());
-
- Table t3 = new Table(0L, "t3", Table.TableType.OLAP,
- ImmutableList.of(new Column("id", Type.INT, true,
AggregateType.NONE, "0", ""),
- new Column("name", Type.STRING, true,
AggregateType.NONE, "0", "")));
- LogicalOlapScan scan3 = new LogicalOlapScan(t3, ImmutableList.of());
+ LogicalOlapScan scan1 =
PlanConstructor.newLogicalOlapScanWithTable("t1");
+ LogicalOlapScan scan2 =
PlanConstructor.newLogicalOlapScanWithTable("t2");
+ LogicalOlapScan scan3 =
PlanConstructor.newLogicalOlapScanWithTable("t3");
+
scans.add(scan1);
scans.add(scan2);
scans.add(scan3);
@@ -77,6 +64,7 @@ public class JoinProjectLAsscomTest {
.collect(Collectors.toList());
List<SlotReference> t3Output = scan3.getOutput().stream().map(slot ->
(SlotReference) slot)
.collect(Collectors.toList());
+
outputs.add(t1Output);
outputs.add(t2Output);
outputs.add(t3Output);
diff --git
a/fe/fe-core/src/test/java/org/apache/doris/nereids/rules/implementation/LogicalProjectToPhysicalProjectTest.java
b/fe/fe-core/src/test/java/org/apache/doris/nereids/rules/implementation/LogicalProjectToPhysicalProjectTest.java
index 1f8bb18a91..a16f9d5ef1 100644
---
a/fe/fe-core/src/test/java/org/apache/doris/nereids/rules/implementation/LogicalProjectToPhysicalProjectTest.java
+++
b/fe/fe-core/src/test/java/org/apache/doris/nereids/rules/implementation/LogicalProjectToPhysicalProjectTest.java
@@ -19,27 +19,67 @@ package org.apache.doris.nereids.rules.implementation;
import org.apache.doris.nereids.PlannerContext;
import org.apache.doris.nereids.memo.Group;
+import org.apache.doris.nereids.memo.Memo;
import org.apache.doris.nereids.rules.Rule;
-import org.apache.doris.nereids.trees.plans.GroupPlan;
import org.apache.doris.nereids.trees.plans.Plan;
import org.apache.doris.nereids.trees.plans.PlanType;
+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.LogicalOlapScan;
+import org.apache.doris.nereids.trees.plans.logical.LogicalPlan;
import org.apache.doris.nereids.trees.plans.logical.LogicalProject;
+import org.apache.doris.nereids.trees.plans.logical.LogicalSort;
+import org.apache.doris.nereids.trees.plans.physical.PhysicalPlan;
+import org.apache.doris.nereids.util.PlanConstructor;
+import org.apache.doris.qe.ConnectContext;
+import com.google.common.collect.ImmutableMap;
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.Map;
public class LogicalProjectToPhysicalProjectTest {
- @Test
- public void projectionImplTest(@Mocked Group group, @Mocked PlannerContext
plannerContext) {
- Plan plan = new LogicalProject(Lists.newArrayList(), new
GroupPlan(group));
- Rule rule = new LogicalProjectToPhysicalProject().build();
- List<Plan> transform = rule.transform(plan, plannerContext);
+ private final Map<String, Rule> rulesMap
+ = ImmutableMap.<String, Rule>builder()
+ .put(LogicalProject.class.getName(), (new
LogicalProjectToPhysicalProject()).build())
+ .put(LogicalAggregate.class.getName(), (new
LogicalAggToPhysicalHashAgg()).build())
+ .put(LogicalJoin.class.getName(), (new
LogicalJoinToHashJoin()).build())
+ .put(LogicalOlapScan.class.getName(), (new
LogicalOlapScanToPhysicalOlapScan()).build())
+ .put(LogicalFilter.class.getName(), (new
LogicalFilterToPhysicalFilter()).build())
+ .put(LogicalSort.class.getName(), (new
LogicalSortToPhysicalHeapSort()).build())
+ .build();
+
+ private PhysicalPlan rewriteLogicalToPhysical(Group group, PlannerContext
plannerContext) {
+ List<Plan> children = Lists.newArrayList();
+ for (Group child : group.getLogicalExpression().children()) {
+ children.add(rewriteLogicalToPhysical(child, plannerContext));
+ }
+
+ Rule rule =
rulesMap.get(group.getLogicalExpression().getPlan().getClass().getName());
+ List<Plan> transform =
rule.transform(group.getLogicalExpression().getPlan(), plannerContext);
Assertions.assertEquals(1, transform.size());
- Plan implPlan = transform.get(0);
- Assertions.assertEquals(PlanType.PHYSICAL_PROJECT, implPlan.getType());
+ Assertions.assertTrue(transform.get(0) instanceof PhysicalPlan);
+ PhysicalPlan implPlanNode = (PhysicalPlan) transform.get(0);
+
+ return (PhysicalPlan) implPlanNode.withChildren(children);
+ }
+
+ @Test
+ public void projectionImplTest() {
+ LogicalOlapScan scan = PlanConstructor.newLogicalOlapScan("a");
+ LogicalPlan project = new LogicalProject<>(Lists.newArrayList(), scan);
+
+ PlannerContext plannerContext = new Memo(project)
+ .newPlannerContext(new ConnectContext())
+ .setDefaultJobContext();
+
+ PhysicalPlan physicalProject =
rewriteLogicalToPhysical(plannerContext.getMemo().getRoot(), plannerContext);
+ Assertions.assertEquals(PlanType.PHYSICAL_PROJECT,
physicalProject.getType());
+ PhysicalPlan physicalScan = (PhysicalPlan) physicalProject.child(0);
+ Assertions.assertEquals(PlanType.PHYSICAL_OLAP_SCAN,
physicalScan.getType());
}
}
diff --git
a/fe/fe-core/src/test/java/org/apache/doris/nereids/rules/rewrite/logical/AggregateDisassembleTest.java
b/fe/fe-core/src/test/java/org/apache/doris/nereids/rules/rewrite/logical/AggregateDisassembleTest.java
index d27c3278b1..12a4083a76 100644
---
a/fe/fe-core/src/test/java/org/apache/doris/nereids/rules/rewrite/logical/AggregateDisassembleTest.java
+++
b/fe/fe-core/src/test/java/org/apache/doris/nereids/rules/rewrite/logical/AggregateDisassembleTest.java
@@ -17,10 +17,6 @@
package org.apache.doris.nereids.rules.rewrite.logical;
-import org.apache.doris.catalog.AggregateType;
-import org.apache.doris.catalog.Column;
-import org.apache.doris.catalog.Table;
-import org.apache.doris.catalog.Type;
import org.apache.doris.nereids.rules.rewrite.AggregateDisassemble;
import org.apache.doris.nereids.trees.expressions.Add;
import org.apache.doris.nereids.trees.expressions.Alias;
@@ -34,6 +30,7 @@ import org.apache.doris.nereids.trees.plans.Plan;
import org.apache.doris.nereids.trees.plans.logical.LogicalAggregate;
import org.apache.doris.nereids.trees.plans.logical.LogicalOlapScan;
import org.apache.doris.nereids.trees.plans.logical.LogicalUnary;
+import org.apache.doris.nereids.util.PlanConstructor;
import org.apache.doris.nereids.util.PlanRewriter;
import org.apache.doris.qe.ConnectContext;
@@ -52,11 +49,7 @@ public class AggregateDisassembleTest {
@BeforeAll
public final void beforeAll() {
- Table student = new Table(0L, "student", Table.TableType.OLAP,
- ImmutableList.of(new Column("id", Type.INT, true,
AggregateType.NONE, true, "0", ""),
- new Column("name", Type.STRING, true,
AggregateType.NONE, true, "", ""),
- new Column("age", Type.INT, true, AggregateType.NONE,
true, "", "")));
- rStudent = new LogicalOlapScan(student, ImmutableList.of("student"));
+ rStudent = new LogicalOlapScan(PlanConstructor.student,
ImmutableList.of("student"));
}
/**
diff --git
a/fe/fe-core/src/test/java/org/apache/doris/nereids/rules/rewrite/logical/PushDownPredicateTest.java
b/fe/fe-core/src/test/java/org/apache/doris/nereids/rules/rewrite/logical/PushDownPredicateTest.java
index c5525add55..9c550a4929 100644
---
a/fe/fe-core/src/test/java/org/apache/doris/nereids/rules/rewrite/logical/PushDownPredicateTest.java
+++
b/fe/fe-core/src/test/java/org/apache/doris/nereids/rules/rewrite/logical/PushDownPredicateTest.java
@@ -17,10 +17,6 @@
package org.apache.doris.nereids.rules.rewrite.logical;
-import org.apache.doris.catalog.AggregateType;
-import org.apache.doris.catalog.Column;
-import org.apache.doris.catalog.Table;
-import org.apache.doris.catalog.Type;
import org.apache.doris.nereids.memo.Group;
import org.apache.doris.nereids.memo.Memo;
import
org.apache.doris.nereids.rules.expression.rewrite.ExpressionNormalization;
@@ -41,6 +37,7 @@ import
org.apache.doris.nereids.trees.plans.logical.LogicalJoin;
import org.apache.doris.nereids.trees.plans.logical.LogicalOlapScan;
import org.apache.doris.nereids.trees.plans.logical.LogicalProject;
import org.apache.doris.nereids.util.ExpressionUtils;
+import org.apache.doris.nereids.util.PlanConstructor;
import org.apache.doris.nereids.util.PlanRewriter;
import org.apache.doris.qe.ConnectContext;
@@ -59,9 +56,7 @@ import java.util.Optional;
@TestInstance(TestInstance.Lifecycle.PER_CLASS)
public class PushDownPredicateTest {
- private Table student;
- private Table score;
- private Table course;
+
private Plan rStudent;
private Plan rScore;
@@ -72,26 +67,11 @@ public class PushDownPredicateTest {
*/
@BeforeAll
public final void beforeAll() {
- student = new Table(0L, "student", Table.TableType.OLAP,
- ImmutableList.<Column>of(new Column("id", Type.INT, true,
AggregateType.NONE, "0", ""),
- new Column("name", Type.STRING, true,
AggregateType.NONE, "", ""),
- new Column("age", Type.INT, true, AggregateType.NONE,
"", "")));
-
- score = new Table(0L, "score", Table.TableType.OLAP,
- ImmutableList.<Column>of(new Column("sid", Type.INT, true,
AggregateType.NONE, "0", ""),
- new Column("cid", Type.INT, true, AggregateType.NONE,
"", ""),
- new Column("grade", Type.DOUBLE, true,
AggregateType.NONE, "", "")));
-
- course = new Table(0L, "course", Table.TableType.OLAP,
- ImmutableList.<Column>of(new Column("cid", Type.INT, true,
AggregateType.NONE, "0", ""),
- new Column("name", Type.STRING, true,
AggregateType.NONE, "", ""),
- new Column("teacher", Type.STRING, true,
AggregateType.NONE, "", "")));
-
- rStudent = new LogicalOlapScan(student, ImmutableList.of("student"));
+ rStudent = new LogicalOlapScan(PlanConstructor.student,
ImmutableList.of("student"));
- rScore = new LogicalOlapScan(score, ImmutableList.of("score"));
+ rScore = new LogicalOlapScan(PlanConstructor.score,
ImmutableList.of("score"));
- rCourse = new LogicalOlapScan(course, ImmutableList.of("course"));
+ rCourse = new LogicalOlapScan(PlanConstructor.course,
ImmutableList.of("course"));
}
@Test
diff --git
a/fe/fe-core/src/test/java/org/apache/doris/nereids/rules/rewrite/logical/PushDownPredicateThroughAggregationTest.java
b/fe/fe-core/src/test/java/org/apache/doris/nereids/rules/rewrite/logical/PushDownPredicateThroughAggregationTest.java
index d183f7e29e..39667fa90f 100644
---
a/fe/fe-core/src/test/java/org/apache/doris/nereids/rules/rewrite/logical/PushDownPredicateThroughAggregationTest.java
+++
b/fe/fe-core/src/test/java/org/apache/doris/nereids/rules/rewrite/logical/PushDownPredicateThroughAggregationTest.java
@@ -18,10 +18,6 @@
package org.apache.doris.nereids.rules.rewrite.logical;
-import org.apache.doris.catalog.AggregateType;
-import org.apache.doris.catalog.Column;
-import org.apache.doris.catalog.Table;
-import org.apache.doris.catalog.Type;
import org.apache.doris.nereids.memo.Group;
import org.apache.doris.nereids.memo.GroupExpression;
import org.apache.doris.nereids.memo.Memo;
@@ -40,6 +36,7 @@ import
org.apache.doris.nereids.trees.plans.logical.LogicalFilter;
import org.apache.doris.nereids.trees.plans.logical.LogicalOlapScan;
import org.apache.doris.nereids.trees.plans.logical.LogicalProject;
import org.apache.doris.nereids.util.ExpressionUtils;
+import org.apache.doris.nereids.util.PlanConstructor;
import org.apache.doris.nereids.util.PlanRewriter;
import org.apache.doris.qe.ConnectContext;
@@ -73,12 +70,7 @@ public class PushDownPredicateThroughAggregationTest {
*/
@Test
public void pushDownPredicateOneFilterTest() {
- Table student = new Table(0L, "student", Table.TableType.OLAP,
- ImmutableList.<Column>of(new Column("id", Type.INT, true,
AggregateType.NONE, "0", ""),
- new Column("gender", Type.INT, false,
AggregateType.NONE, "0", ""),
- new Column("name", Type.STRING, true,
AggregateType.NONE, "", ""),
- new Column("age", Type.INT, true, AggregateType.NONE,
"", "")));
- Plan scan = new LogicalOlapScan(student, ImmutableList.of("student"));
+ Plan scan = new LogicalOlapScan(PlanConstructor.student,
ImmutableList.of("student"));
Slot gender = scan.getOutput().get(1);
Slot age = scan.getOutput().get(3);
@@ -138,12 +130,7 @@ public class PushDownPredicateThroughAggregationTest {
*/
@Test
public void pushDownPredicateTwoFilterTest() {
- Table student = new Table(0L, "student", Table.TableType.OLAP,
- ImmutableList.<Column>of(new Column("id", Type.INT, true,
AggregateType.NONE, "0", ""),
- new Column("gender", Type.INT, false,
AggregateType.NONE, "0", ""),
- new Column("name", Type.STRING, true,
AggregateType.NONE, "", ""),
- new Column("age", Type.INT, true, AggregateType.NONE,
"", "")));
- Plan scan = new LogicalOlapScan(student, ImmutableList.of("student"));
+ Plan scan = new LogicalOlapScan(PlanConstructor.student,
ImmutableList.of("student"));
Slot gender = scan.getOutput().get(1);
Slot name = scan.getOutput().get(2);
Slot age = scan.getOutput().get(3);
diff --git
a/fe/fe-core/src/test/java/org/apache/doris/nereids/stats/StatsCalculatorTest.java
b/fe/fe-core/src/test/java/org/apache/doris/nereids/stats/StatsCalculatorTest.java
index 442a81b4a0..7d1f2a2596 100644
---
a/fe/fe-core/src/test/java/org/apache/doris/nereids/stats/StatsCalculatorTest.java
+++
b/fe/fe-core/src/test/java/org/apache/doris/nereids/stats/StatsCalculatorTest.java
@@ -19,7 +19,6 @@ package org.apache.doris.nereids.stats;
import org.apache.doris.catalog.Env;
import org.apache.doris.catalog.Table;
-import org.apache.doris.catalog.TableIf.TableType;
import org.apache.doris.nereids.memo.Group;
import org.apache.doris.nereids.memo.GroupExpression;
import org.apache.doris.nereids.properties.LogicalProperties;
@@ -39,6 +38,7 @@ 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.LogicalOlapScan;
import org.apache.doris.nereids.types.IntegerType;
+import org.apache.doris.nereids.util.PlanConstructor;
import org.apache.doris.qe.ConnectContext;
import org.apache.doris.statistics.ColumnStats;
import org.apache.doris.statistics.Statistics;
@@ -47,6 +47,7 @@ import org.apache.doris.statistics.StatsDeriveResult;
import org.apache.doris.statistics.TableStats;
import com.google.common.base.Supplier;
+import com.google.common.collect.ImmutableList;
import mockit.Expectations;
import mockit.Mocked;
import org.junit.jupiter.api.Assertions;
@@ -202,14 +203,11 @@ public class StatsCalculatorTest {
columnStats1.setNdv(10);
columnStats1.setNumNulls(5);
long tableId1 = 0;
- String tableName1 = "t1";
TableStats tableStats1 = new TableStats();
tableStats1.putColumnStats("c1", columnStats1);
Statistics statistics = new Statistics();
statistics.putTableStats(tableId1, tableStats1);
- List<String> qualifier = new ArrayList<>();
- qualifier.add("test");
- qualifier.add("t");
+ List<String> qualifier = ImmutableList.of("test", "t");
SlotReference slot1 = new SlotReference("c1", IntegerType.INSTANCE,
true, qualifier);
new Expectations() {{
ConnectContext.get();
@@ -222,7 +220,7 @@ public class StatsCalculatorTest {
result = statistics;
}};
- Table table1 = new Table(tableId1, tableName1, TableType.OLAP,
Collections.emptyList());
+ Table table1 = PlanConstructor.newTable(tableId1, "t1");
LogicalOlapScan logicalOlapScan1 = new LogicalOlapScan(table1,
Collections.emptyList()).withLogicalProperties(
Optional.of(new LogicalProperties(new Supplier<List<Slot>>() {
@Override
diff --git
a/fe/fe-core/src/test/java/org/apache/doris/nereids/trees/plans/PlanEqualsTest.java
b/fe/fe-core/src/test/java/org/apache/doris/nereids/trees/plans/PlanEqualsTest.java
index 413f74568b..1e4a8c5639 100644
---
a/fe/fe-core/src/test/java/org/apache/doris/nereids/trees/plans/PlanEqualsTest.java
+++
b/fe/fe-core/src/test/java/org/apache/doris/nereids/trees/plans/PlanEqualsTest.java
@@ -18,8 +18,6 @@
package org.apache.doris.nereids.trees.plans;
import org.apache.doris.catalog.OlapTable;
-import org.apache.doris.catalog.Table;
-import org.apache.doris.catalog.TableIf.TableType;
import org.apache.doris.nereids.properties.LogicalProperties;
import org.apache.doris.nereids.properties.OrderKey;
import org.apache.doris.nereids.trees.expressions.EqualTo;
@@ -40,6 +38,7 @@ import
org.apache.doris.nereids.trees.plans.physical.PhysicalHeapSort;
import org.apache.doris.nereids.trees.plans.physical.PhysicalOlapScan;
import org.apache.doris.nereids.trees.plans.physical.PhysicalProject;
import org.apache.doris.nereids.types.BigIntType;
+import org.apache.doris.nereids.util.PlanConstructor;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.Lists;
@@ -111,11 +110,10 @@ public class PlanEqualsTest {
@Test
public void testLogicalOlapScan() {
- LogicalOlapScan olapScan = new LogicalOlapScan(new
Table(TableType.OLAP), Lists.newArrayList());
- Assertions.assertEquals(olapScan, olapScan);
+ LogicalOlapScan scan1 = PlanConstructor.newLogicalOlapScan("table");
+ LogicalOlapScan scan2 = PlanConstructor.newLogicalOlapScan("table");
- LogicalOlapScan olapScan1 = new LogicalOlapScan(new
Table(TableType.OLAP), Lists.newArrayList());
- Assertions.assertEquals(olapScan, olapScan1);
+ Assertions.assertEquals(scan1, scan2);
}
@Test
diff --git
a/fe/fe-core/src/test/java/org/apache/doris/nereids/trees/plans/TestPlanOutput.java
b/fe/fe-core/src/test/java/org/apache/doris/nereids/trees/plans/PlanOutputTest.java
similarity index 81%
rename from
fe/fe-core/src/test/java/org/apache/doris/nereids/trees/plans/TestPlanOutput.java
rename to
fe/fe-core/src/test/java/org/apache/doris/nereids/trees/plans/PlanOutputTest.java
index 6278ac14b3..f52a3ea005 100644
---
a/fe/fe-core/src/test/java/org/apache/doris/nereids/trees/plans/TestPlanOutput.java
+++
b/fe/fe-core/src/test/java/org/apache/doris/nereids/trees/plans/PlanOutputTest.java
@@ -17,20 +17,17 @@
package org.apache.doris.nereids.trees.plans;
-import org.apache.doris.catalog.AggregateType;
-import org.apache.doris.catalog.Column;
import org.apache.doris.catalog.Table;
-import org.apache.doris.catalog.Type;
import org.apache.doris.nereids.analyzer.UnboundRelation;
import org.apache.doris.nereids.exceptions.UnboundException;
import org.apache.doris.nereids.memo.GroupExpression;
import org.apache.doris.nereids.properties.LogicalProperties;
import org.apache.doris.nereids.trees.expressions.Slot;
import org.apache.doris.nereids.trees.plans.logical.LogicalOlapScan;
-import org.apache.doris.nereids.trees.plans.logical.LogicalRelation;
import org.apache.doris.nereids.trees.plans.physical.PhysicalRelation;
import org.apache.doris.nereids.types.IntegerType;
import org.apache.doris.nereids.types.StringType;
+import org.apache.doris.nereids.util.PlanConstructor;
import com.google.common.collect.ImmutableList;
import org.junit.jupiter.api.Assertions;
@@ -39,14 +36,10 @@ import org.junit.jupiter.api.Test;
import java.util.List;
import java.util.Optional;
-public class TestPlanOutput {
+public class PlanOutputTest {
@Test
public void testComputeOutput() {
- Table table = new Table(0L, "a", Table.TableType.OLAP,
ImmutableList.<Column>of(
- new Column("id", Type.INT, true, AggregateType.NONE, "0", ""),
- new Column("name", Type.STRING, true, AggregateType.NONE, "", "")
- ));
- LogicalRelation relationPlan = new LogicalOlapScan(table,
ImmutableList.of("db"));
+ LogicalOlapScan relationPlan =
PlanConstructor.newLogicalOlapScanWithTable("a");
List<Slot> output = relationPlan.getOutput();
Assertions.assertEquals(2, output.size());
Assertions.assertEquals(output.get(0).getName(), "id");
@@ -74,11 +67,7 @@ public class TestPlanOutput {
@Test
public void testWithOutput() {
- Table table = new Table(0L, "a", Table.TableType.OLAP,
ImmutableList.of(
- new Column("id", Type.INT, true, AggregateType.NONE, "0", ""),
- new Column("name", Type.STRING, true, AggregateType.NONE, "", "")
- ));
- LogicalRelation relationPlan = new LogicalOlapScan(table,
ImmutableList.of("db"));
+ LogicalOlapScan relationPlan =
PlanConstructor.newLogicalOlapScanWithTable("a");
List<Slot> output = relationPlan.getOutput();
// column prune
diff --git
a/fe/fe-core/src/test/java/org/apache/doris/nereids/util/ExpressionUtilsTest.java
b/fe/fe-core/src/test/java/org/apache/doris/nereids/util/ExpressionUtilsTest.java
index ee162a211e..de09eeefc5 100644
---
a/fe/fe-core/src/test/java/org/apache/doris/nereids/util/ExpressionUtilsTest.java
+++
b/fe/fe-core/src/test/java/org/apache/doris/nereids/util/ExpressionUtilsTest.java
@@ -33,12 +33,12 @@ public class ExpressionUtilsTest {
private static final NereidsParser PARSER = new NereidsParser();
@Test
- public void extractConjunctsTest() {
+ public void extractConjunctionTest() {
List<Expression> expressions;
Expression expr;
expr = PARSER.parseExpression("a");
- expressions = ExpressionUtils.extractConjunctive(expr);
+ expressions = ExpressionUtils.extractConjunction(expr);
Assertions.assertEquals(1, expressions.size());
Assertions.assertEquals(expr, expressions.get(0));
@@ -47,7 +47,7 @@ public class ExpressionUtilsTest {
Expression b = PARSER.parseExpression("b");
Expression c = PARSER.parseExpression("c");
- expressions = ExpressionUtils.extractConjunctive(expr);
+ expressions = ExpressionUtils.extractConjunction(expr);
Assertions.assertEquals(3, expressions.size());
Assertions.assertEquals(a, expressions.get(0));
Assertions.assertEquals(b, expressions.get(1));
@@ -55,7 +55,7 @@ public class ExpressionUtilsTest {
expr = PARSER.parseExpression("(a or b) and c and (e or f)");
- expressions = ExpressionUtils.extractConjunctive(expr);
+ expressions = ExpressionUtils.extractConjunction(expr);
Expression aOrb = PARSER.parseExpression("a or b");
Expression eOrf = PARSER.parseExpression("e or f");
Assertions.assertEquals(3, expressions.size());
@@ -65,12 +65,12 @@ public class ExpressionUtilsTest {
}
@Test
- public void extractDisjunctsTest() {
+ public void extractDisjunctionTest() {
List<Expression> expressions;
Expression expr;
expr = PARSER.parseExpression("a");
- expressions = ExpressionUtils.extractDisjunctive(expr);
+ expressions = ExpressionUtils.extractDisjunction(expr);
Assertions.assertEquals(1, expressions.size());
Assertions.assertEquals(expr, expressions.get(0));
@@ -79,14 +79,14 @@ public class ExpressionUtilsTest {
Expression b = PARSER.parseExpression("b");
Expression c = PARSER.parseExpression("c");
- expressions = ExpressionUtils.extractDisjunctive(expr);
+ expressions = ExpressionUtils.extractDisjunction(expr);
Assertions.assertEquals(3, expressions.size());
Assertions.assertEquals(a, expressions.get(0));
Assertions.assertEquals(b, expressions.get(1));
Assertions.assertEquals(c, expressions.get(2));
expr = PARSER.parseExpression("(a and b) or c or (e and f)");
- expressions = ExpressionUtils.extractDisjunctive(expr);
+ expressions = ExpressionUtils.extractDisjunction(expr);
Expression aAndb = PARSER.parseExpression("a and b");
Expression eAndf = PARSER.parseExpression("e and f");
Assertions.assertEquals(3, expressions.size());
diff --git
a/fe/fe-core/src/test/java/org/apache/doris/nereids/util/PlanConstructor.java
b/fe/fe-core/src/test/java/org/apache/doris/nereids/util/PlanConstructor.java
new file mode 100644
index 0000000000..3beed0fbc5
--- /dev/null
+++
b/fe/fe-core/src/test/java/org/apache/doris/nereids/util/PlanConstructor.java
@@ -0,0 +1,72 @@
+// 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.util;
+
+import org.apache.doris.catalog.AggregateType;
+import org.apache.doris.catalog.Column;
+import org.apache.doris.catalog.KeysType;
+import org.apache.doris.catalog.OlapTable;
+import org.apache.doris.catalog.Table;
+import org.apache.doris.catalog.Type;
+import org.apache.doris.nereids.trees.plans.logical.LogicalOlapScan;
+
+import com.google.common.collect.ImmutableList;
+
+public class PlanConstructor {
+ public static Table student = new Table(0L, "student",
Table.TableType.OLAP,
+ ImmutableList.<Column>of(new Column("id", Type.INT, true,
AggregateType.NONE, "0", ""),
+ new Column("gender", Type.INT, false, AggregateType.NONE,
"0", ""),
+ new Column("name", Type.STRING, true, AggregateType.NONE,
"", ""),
+ new Column("age", Type.INT, true, AggregateType.NONE, "",
"")));
+
+ public static Table score = new Table(0L, "score", Table.TableType.OLAP,
+ ImmutableList.<Column>of(new Column("sid", Type.INT, true,
AggregateType.NONE, "0", ""),
+ new Column("cid", Type.INT, true, AggregateType.NONE, "",
""),
+ new Column("grade", Type.DOUBLE, true, AggregateType.NONE,
"", "")));
+
+ public static Table course = new Table(0L, "course", Table.TableType.OLAP,
+ ImmutableList.<Column>of(new Column("cid", Type.INT, true,
AggregateType.NONE, "0", ""),
+ new Column("name", Type.STRING, true, AggregateType.NONE,
"", ""),
+ new Column("teacher", Type.STRING, true,
AggregateType.NONE, "", "")));
+
+ public static OlapTable newOlapTable(long tableId, String tableName) {
+ return new OlapTable(0L, tableName,
+ ImmutableList.of(
+ new Column("id", Type.INT, true, AggregateType.NONE,
"0", ""),
+ new Column("name", Type.STRING, true,
AggregateType.NONE, "", "")),
+ KeysType.PRIMARY_KEYS, null, null);
+ }
+
+ public static Table newTable(long tableId, String tableName) {
+ return new Table(tableId, tableName, Table.TableType.OLAP,
+ ImmutableList.<Column>of(
+ new Column("id", Type.INT, true, AggregateType.NONE,
"0", ""),
+ new Column("name", Type.STRING, true,
AggregateType.NONE, "", "")
+ ));
+ }
+
+ // With OlapTable
+ public static LogicalOlapScan newLogicalOlapScan(String tableName) {
+ return new LogicalOlapScan(newOlapTable(0L, tableName),
ImmutableList.of("db"));
+ }
+
+ // With Table
+ public static LogicalOlapScan newLogicalOlapScanWithTable(String
tableName) {
+ return new LogicalOlapScan(newTable(0L, tableName),
ImmutableList.of("db"));
+ }
+}
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]