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 7ca6f8b6a2 [refactor](Nereids)split rewrite and insert into memo to 2
functions (#11342)
7ca6f8b6a2 is described below
commit 7ca6f8b6a293c39d1eac658f1485243dd739b060
Author: morrySnow <[email protected]>
AuthorDate: Mon Aug 1 14:44:01 2022 +0800
[refactor](Nereids)split rewrite and insert into memo to 2 functions
(#11342)
Split rewrite and insert into memo to 2 functions to make the code easy to
read.
---
.../main/java/org/apache/doris/catalog/Table.java | 2 +-
.../java/org/apache/doris/nereids/memo/Memo.java | 68 +++++----
.../nereids/{ => datasets}/ssb/AnalyzeSSBTest.java | 2 +-
.../{ => datasets}/ssb/SSBJoinReorderTest.java | 2 +-
.../nereids/{ => datasets}/ssb/SSBTestBase.java | 4 +-
.../doris/nereids/{ => datasets}/ssb/SSBUtils.java | 2 +-
.../{ => datasets}/tpch/AnalyzeCheckTestBase.java | 2 +-
.../{ => datasets}/tpch/AnalyzeTPCHTest.java | 2 +-
.../nereids/{ => datasets}/tpch/TPCHTestBase.java | 2 +-
.../nereids/{ => datasets}/tpch/TPCHUtils.java | 2 +-
.../org/apache/doris/nereids/memo/MemoTest.java | 152 ++++++++++++++-------
.../nereids/trees/expressions/SubqueryTest.java | 2 +-
.../{plan => trees/plans}/TestPlanOutput.java | 4 +-
13 files changed, 161 insertions(+), 85 deletions(-)
diff --git a/fe/fe-core/src/main/java/org/apache/doris/catalog/Table.java
b/fe/fe-core/src/main/java/org/apache/doris/catalog/Table.java
index e41b835d07..c7fdfce7fd 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/catalog/Table.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/catalog/Table.java
@@ -269,7 +269,7 @@ public class Table extends MetaObject implements Writable,
TableIf {
if (full) {
return fullSchema;
} else {
- return fullSchema.stream().filter(column ->
column.isVisible()).collect(Collectors.toList());
+ return
fullSchema.stream().filter(Column::isVisible).collect(Collectors.toList());
}
}
diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/memo/Memo.java
b/fe/fe-core/src/main/java/org/apache/doris/nereids/memo/Memo.java
index aa96af697d..16d02e8fa9 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/nereids/memo/Memo.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/memo/Memo.java
@@ -26,7 +26,6 @@ import org.apache.doris.nereids.trees.plans.GroupPlan;
import org.apache.doris.nereids.trees.plans.Plan;
import org.apache.doris.qe.ConnectContext;
-import com.google.common.base.Preconditions;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
@@ -92,8 +91,11 @@ public class Memo {
node = replaceChildrenToGroupPlan(node, childrenGroups);
GroupExpression newGroupExpression = new GroupExpression(node);
newGroupExpression.setChildren(childrenGroups);
- return insertOrRewriteGroupExpression(newGroupExpression, target,
rewrite,
- node.getLogicalProperties());
+ if (rewrite) {
+ return rewriteGroupExpression(newGroupExpression, target,
node.getLogicalProperties());
+ } else {
+ return insertGroupExpression(newGroupExpression, target,
node.getLogicalProperties());
+ }
// TODO: need to derive logical property if generate new group.
currently we not copy logical plan into
}
@@ -122,44 +124,64 @@ public class Memo {
}
/**
- * Insert or rewrite groupExpression to target group.
+ * Insert groupExpression to target group.
* If group expression is already in memo and target group is not null, we
merge two groups.
* If target is null, generate new group.
- * If rewrite is true, rewrite the groupExpression to target group.
+ * If target is not null, add group expression to target group
*
* @param groupExpression groupExpression to insert
- * @param target target group to insert or rewrite groupExpression
- * @param rewrite whether to rewrite the groupExpression to target group
+ * @param target target group to insert groupExpression
* @return a pair, in which the first element is true if a newly generated
groupExpression added into memo,
* and the second element is a reference of node in Memo
*/
- private Pair<Boolean, GroupExpression>
insertOrRewriteGroupExpression(GroupExpression groupExpression, Group target,
- boolean rewrite, LogicalProperties logicalProperties) {
+ private Pair<Boolean, GroupExpression> insertGroupExpression(
+ GroupExpression groupExpression, Group target, LogicalProperties
logicalProperties) {
GroupExpression existedGroupExpression =
groupExpressions.get(groupExpression);
if (existedGroupExpression != null) {
- Group mergedGroup = existedGroupExpression.getOwnerGroup();
if (target != null &&
!target.getGroupId().equals(existedGroupExpression.getOwnerGroup().getGroupId()))
{
- mergedGroup = mergeGroup(target,
existedGroupExpression.getOwnerGroup());
- }
- if (rewrite) {
- mergedGroup.setLogicalProperties(logicalProperties);
+ mergeGroup(existedGroupExpression.getOwnerGroup(), target);
}
- return new Pair(false, existedGroupExpression);
+ return new Pair<>(false, existedGroupExpression);
}
if (target != null) {
- if (rewrite) {
- GroupExpression oldExpression =
target.rewriteLogicalExpression(groupExpression, logicalProperties);
- groupExpressions.remove(oldExpression);
- } else {
- target.addGroupExpression(groupExpression);
- }
+ target.addGroupExpression(groupExpression);
+ } else {
+ Group group = new Group(groupIdGenerator.getNextId(),
groupExpression, logicalProperties);
+ groups.add(group);
+ }
+ groupExpressions.put(groupExpression, groupExpression);
+ return new Pair<>(true, groupExpression);
+ }
+
+ /**
+ * Rewrite groupExpression to target group.
+ * If group expression is already in memo, we replace logical properties
regardless the target group present or not
+ * for replace UnboundLogicalProperties to LogicalProperties
+ * If target is null, generate new group.
+ * If target is not null, rewrite the groupExpression to target group.
+ *
+ * @param groupExpression groupExpression to rewrite old one
+ * @param target target group to rewrite groupExpression
+ * @return a pair, in which the first element is true if a newly generated
groupExpression added into memo,
+ * and the second element is a reference of node in Memo
+ */
+ private Pair<Boolean, GroupExpression> rewriteGroupExpression(
+ GroupExpression groupExpression, Group target, LogicalProperties
logicalProperties) {
+ boolean newGroupExpressionGenerated = true;
+ GroupExpression existedGroupExpression =
groupExpressions.get(groupExpression);
+ if (existedGroupExpression != null) {
+ target = existedGroupExpression.getOwnerGroup();
+ newGroupExpressionGenerated = false;
+ }
+ if (target != null) {
+ GroupExpression oldExpression =
target.rewriteLogicalExpression(groupExpression, logicalProperties);
+ groupExpressions.remove(oldExpression);
} else {
Group group = new Group(groupIdGenerator.getNextId(),
groupExpression, logicalProperties);
- Preconditions.checkArgument(!groups.contains(group), "new group
with already exist output");
groups.add(group);
}
groupExpressions.put(groupExpression, groupExpression);
- return new Pair(true, groupExpression);
+ return new Pair<>(newGroupExpressionGenerated, groupExpression);
}
/**
diff --git
a/fe/fe-core/src/test/java/org/apache/doris/nereids/ssb/AnalyzeSSBTest.java
b/fe/fe-core/src/test/java/org/apache/doris/nereids/datasets/ssb/AnalyzeSSBTest.java
similarity index 97%
rename from
fe/fe-core/src/test/java/org/apache/doris/nereids/ssb/AnalyzeSSBTest.java
rename to
fe/fe-core/src/test/java/org/apache/doris/nereids/datasets/ssb/AnalyzeSSBTest.java
index 6065f2159f..6d5b9a65cc 100644
--- a/fe/fe-core/src/test/java/org/apache/doris/nereids/ssb/AnalyzeSSBTest.java
+++
b/fe/fe-core/src/test/java/org/apache/doris/nereids/datasets/ssb/AnalyzeSSBTest.java
@@ -15,7 +15,7 @@
// specific language governing permissions and limitations
// under the License.
-package org.apache.doris.nereids.ssb;
+package org.apache.doris.nereids.datasets.ssb;
import org.junit.jupiter.api.Test;
diff --git
a/fe/fe-core/src/test/java/org/apache/doris/nereids/ssb/SSBJoinReorderTest.java
b/fe/fe-core/src/test/java/org/apache/doris/nereids/datasets/ssb/SSBJoinReorderTest.java
similarity index 99%
rename from
fe/fe-core/src/test/java/org/apache/doris/nereids/ssb/SSBJoinReorderTest.java
rename to
fe/fe-core/src/test/java/org/apache/doris/nereids/datasets/ssb/SSBJoinReorderTest.java
index b78de68a5a..77a78c8529 100644
---
a/fe/fe-core/src/test/java/org/apache/doris/nereids/ssb/SSBJoinReorderTest.java
+++
b/fe/fe-core/src/test/java/org/apache/doris/nereids/datasets/ssb/SSBJoinReorderTest.java
@@ -15,7 +15,7 @@
// specific language governing permissions and limitations
// under the License.
-package org.apache.doris.nereids.ssb;
+package org.apache.doris.nereids.datasets.ssb;
import org.apache.doris.nereids.analyzer.NereidsAnalyzer;
import org.apache.doris.nereids.rules.rewrite.logical.ReorderJoin;
diff --git
a/fe/fe-core/src/test/java/org/apache/doris/nereids/ssb/SSBTestBase.java
b/fe/fe-core/src/test/java/org/apache/doris/nereids/datasets/ssb/SSBTestBase.java
similarity index 90%
rename from
fe/fe-core/src/test/java/org/apache/doris/nereids/ssb/SSBTestBase.java
rename to
fe/fe-core/src/test/java/org/apache/doris/nereids/datasets/ssb/SSBTestBase.java
index 87a620e0e1..691da60173 100644
--- a/fe/fe-core/src/test/java/org/apache/doris/nereids/ssb/SSBTestBase.java
+++
b/fe/fe-core/src/test/java/org/apache/doris/nereids/datasets/ssb/SSBTestBase.java
@@ -15,9 +15,9 @@
// specific language governing permissions and limitations
// under the License.
-package org.apache.doris.nereids.ssb;
+package org.apache.doris.nereids.datasets.ssb;
-import org.apache.doris.nereids.tpch.AnalyzeCheckTestBase;
+import org.apache.doris.nereids.datasets.tpch.AnalyzeCheckTestBase;
public abstract class SSBTestBase extends AnalyzeCheckTestBase {
@Override
diff --git
a/fe/fe-core/src/test/java/org/apache/doris/nereids/ssb/SSBUtils.java
b/fe/fe-core/src/test/java/org/apache/doris/nereids/datasets/ssb/SSBUtils.java
similarity index 99%
rename from fe/fe-core/src/test/java/org/apache/doris/nereids/ssb/SSBUtils.java
rename to
fe/fe-core/src/test/java/org/apache/doris/nereids/datasets/ssb/SSBUtils.java
index 97de88afd3..a728d01dce 100644
--- a/fe/fe-core/src/test/java/org/apache/doris/nereids/ssb/SSBUtils.java
+++
b/fe/fe-core/src/test/java/org/apache/doris/nereids/datasets/ssb/SSBUtils.java
@@ -15,7 +15,7 @@
// specific language governing permissions and limitations
// under the License.
-package org.apache.doris.nereids.ssb;
+package org.apache.doris.nereids.datasets.ssb;
import org.apache.doris.utframe.TestWithFeService;
diff --git
a/fe/fe-core/src/test/java/org/apache/doris/nereids/tpch/AnalyzeCheckTestBase.java
b/fe/fe-core/src/test/java/org/apache/doris/nereids/datasets/tpch/AnalyzeCheckTestBase.java
similarity index 98%
rename from
fe/fe-core/src/test/java/org/apache/doris/nereids/tpch/AnalyzeCheckTestBase.java
rename to
fe/fe-core/src/test/java/org/apache/doris/nereids/datasets/tpch/AnalyzeCheckTestBase.java
index bfd01077d6..a994faaeb9 100644
---
a/fe/fe-core/src/test/java/org/apache/doris/nereids/tpch/AnalyzeCheckTestBase.java
+++
b/fe/fe-core/src/test/java/org/apache/doris/nereids/datasets/tpch/AnalyzeCheckTestBase.java
@@ -15,7 +15,7 @@
// specific language governing permissions and limitations
// under the License.
-package org.apache.doris.nereids.tpch;
+package org.apache.doris.nereids.datasets.tpch;
import org.apache.doris.nereids.analyzer.NereidsAnalyzer;
import org.apache.doris.nereids.analyzer.Unbound;
diff --git
a/fe/fe-core/src/test/java/org/apache/doris/nereids/tpch/AnalyzeTPCHTest.java
b/fe/fe-core/src/test/java/org/apache/doris/nereids/datasets/tpch/AnalyzeTPCHTest.java
similarity index 98%
rename from
fe/fe-core/src/test/java/org/apache/doris/nereids/tpch/AnalyzeTPCHTest.java
rename to
fe/fe-core/src/test/java/org/apache/doris/nereids/datasets/tpch/AnalyzeTPCHTest.java
index d4185d67d7..44de365d5d 100644
---
a/fe/fe-core/src/test/java/org/apache/doris/nereids/tpch/AnalyzeTPCHTest.java
+++
b/fe/fe-core/src/test/java/org/apache/doris/nereids/datasets/tpch/AnalyzeTPCHTest.java
@@ -15,7 +15,7 @@
// specific language governing permissions and limitations
// under the License.
-package org.apache.doris.nereids.tpch;
+package org.apache.doris.nereids.datasets.tpch;
/**
* There are still many functions that have not been implemented,
diff --git
a/fe/fe-core/src/test/java/org/apache/doris/nereids/tpch/TPCHTestBase.java
b/fe/fe-core/src/test/java/org/apache/doris/nereids/datasets/tpch/TPCHTestBase.java
similarity index 95%
rename from
fe/fe-core/src/test/java/org/apache/doris/nereids/tpch/TPCHTestBase.java
rename to
fe/fe-core/src/test/java/org/apache/doris/nereids/datasets/tpch/TPCHTestBase.java
index 64df88841d..71dddf165c 100644
--- a/fe/fe-core/src/test/java/org/apache/doris/nereids/tpch/TPCHTestBase.java
+++
b/fe/fe-core/src/test/java/org/apache/doris/nereids/datasets/tpch/TPCHTestBase.java
@@ -15,7 +15,7 @@
// specific language governing permissions and limitations
// under the License.
-package org.apache.doris.nereids.tpch;
+package org.apache.doris.nereids.datasets.tpch;
public abstract class TPCHTestBase extends AnalyzeCheckTestBase {
@Override
diff --git
a/fe/fe-core/src/test/java/org/apache/doris/nereids/tpch/TPCHUtils.java
b/fe/fe-core/src/test/java/org/apache/doris/nereids/datasets/tpch/TPCHUtils.java
similarity index 99%
rename from
fe/fe-core/src/test/java/org/apache/doris/nereids/tpch/TPCHUtils.java
rename to
fe/fe-core/src/test/java/org/apache/doris/nereids/datasets/tpch/TPCHUtils.java
index 5bc571cf97..ee8c4b25e4 100644
--- a/fe/fe-core/src/test/java/org/apache/doris/nereids/tpch/TPCHUtils.java
+++
b/fe/fe-core/src/test/java/org/apache/doris/nereids/datasets/tpch/TPCHUtils.java
@@ -15,7 +15,7 @@
// specific language governing permissions and limitations
// under the License.
-package org.apache.doris.nereids.tpch;
+package org.apache.doris.nereids.datasets.tpch;
import org.apache.doris.utframe.TestWithFeService;
diff --git
a/fe/fe-core/src/test/java/org/apache/doris/nereids/memo/MemoTest.java
b/fe/fe-core/src/test/java/org/apache/doris/nereids/memo/MemoTest.java
index ecf1aa3729..d31b455a6c 100644
--- a/fe/fe-core/src/test/java/org/apache/doris/nereids/memo/MemoTest.java
+++ b/fe/fe-core/src/test/java/org/apache/doris/nereids/memo/MemoTest.java
@@ -18,9 +18,14 @@
package org.apache.doris.nereids.memo;
import org.apache.doris.nereids.analyzer.UnboundRelation;
-import org.apache.doris.nereids.trees.expressions.ExprId;
+import org.apache.doris.nereids.trees.expressions.BooleanLiteral;
import org.apache.doris.nereids.trees.expressions.SlotReference;
+import org.apache.doris.nereids.trees.plans.GroupPlan;
+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.logical.LogicalFilter;
+import org.apache.doris.nereids.trees.plans.logical.LogicalJoin;
import org.apache.doris.nereids.trees.plans.logical.LogicalProject;
import org.apache.doris.nereids.types.StringType;
@@ -31,7 +36,7 @@ import org.junit.jupiter.api.Test;
public class MemoTest {
@Test
- public void testCopyIn() {
+ public void testInsert() {
UnboundRelation unboundRelation = new
UnboundRelation(Lists.newArrayList("test"));
LogicalProject insideProject = new LogicalProject(
ImmutableList.of(new SlotReference("name",
StringType.INSTANCE, true, ImmutableList.of("test"))),
@@ -59,61 +64,112 @@ public class MemoTest {
}
/**
- * initial Memo status:
- * group#1(project1)-->group#0(relationA)
- * group#3(project2)-->group#2(relationB)
- * group#4(project3)-->group#2(relationB)
- * copy relationA into group#2
- * after merge:
- * group#1(project1)-->group#0(relationA, relationB)
- * group#4(project3)-->group#0
- * merging group#2 and group#0 recursively invoke merging group#3 and
group#1 and merging group#4 and group#1
+ * Original:
+ * |---Project(name)
+ * |---Project(name)
+ * |---UnboundRelation
+ *
+ * After rewrite:
+ * Project(name)
+ * |---Project(rewrite)
+ * |---Project(rewrite_inside)
+ * |---UnboundRelation
*/
@Test
- public void testMergeGroup() {
- UnboundRelation relation1 = new
UnboundRelation(Lists.newArrayList("A"));
- LogicalProject project1 = new LogicalProject(
- ImmutableList.of(new SlotReference(new ExprId(1), "name",
StringType.INSTANCE, true, ImmutableList.of("test"))),
- relation1
+ public void testRewrite() {
+ UnboundRelation unboundRelation = new
UnboundRelation(Lists.newArrayList("test"));
+ LogicalProject insideProject = new LogicalProject<>(
+ ImmutableList.of(new SlotReference("name",
StringType.INSTANCE, true, ImmutableList.of("test"))),
+ unboundRelation
);
-
- Memo memo = new Memo(project1);
-
- UnboundRelation relation2 = new
UnboundRelation(Lists.newArrayList("B"));
- LogicalProject project2 = new LogicalProject(
- ImmutableList.of(new SlotReference(new ExprId(1), "name",
StringType.INSTANCE, true, ImmutableList.of("test"))),
- relation2
+ LogicalProject rootProject = new LogicalProject<>(
+ ImmutableList.of(new SlotReference("name",
StringType.INSTANCE, true, ImmutableList.of("test"))),
+ insideProject
);
- memo.copyIn(project2, null, false);
- Assertions.assertEquals(4, memo.getGroups().size());
- LogicalProject project3 = new LogicalProject(
- ImmutableList.of(new SlotReference(new ExprId(1), "other",
StringType.INSTANCE, true, ImmutableList.of("other"))),
- relation2
+ // Project -> Project -> Relation
+ Memo memo = new Memo(rootProject);
+ Group leafGroup = memo.getGroups().stream().filter(g ->
g.getGroupId().asInt() == 0).findFirst().get();
+ Group targetGroup = memo.getGroups().stream().filter(g ->
g.getGroupId().asInt() == 1).findFirst().get();
+ LogicalProject rewriteInsideProject = new LogicalProject<>(
+ ImmutableList.of(new SlotReference("rewrite_inside",
StringType.INSTANCE,
+ false, ImmutableList.of("test"))),
+ new GroupPlan(leafGroup)
);
+ LogicalProject rewriteProject = new LogicalProject<>(
+ ImmutableList.of(new SlotReference("rewrite",
StringType.INSTANCE,
+ true, ImmutableList.of("test"))),
+ rewriteInsideProject
+ );
+ memo.copyIn(rewriteProject, targetGroup, true);
- memo.copyIn(project3, null, false);
-
- //after copyIn, group#2 contains relationA and relationB
- memo.copyIn(relation1, memo.getGroups().get(2), true);
-
+ Assertions.assertEquals(4, memo.getGroups().size());
+ Plan node = memo.copyOut();
+ Assertions.assertTrue(node instanceof LogicalProject);
+ Assertions.assertEquals("name", ((LogicalProject<?>)
node).getProjects().get(0).getName());
+ node = node.child(0);
+ Assertions.assertTrue(node instanceof LogicalProject);
+ Assertions.assertEquals("rewrite", ((LogicalProject<?>)
node).getProjects().get(0).getName());
+ node = node.child(0);
+ Assertions.assertTrue(node instanceof LogicalProject);
+ Assertions.assertEquals("rewrite_inside", ((LogicalProject<?>)
node).getProjects().get(0).getName());
+ node = node.child(0);
+ Assertions.assertTrue(node instanceof UnboundRelation);
+ Assertions.assertEquals("test", ((UnboundRelation)
node).getTableName());
+ }
- Assertions.assertEquals(3, memo.getGroups().size());
+ /**
+ * Original:
+ * Group 0: UnboundRelation C
+ * Group 1: UnboundRelation B
+ * Group 2: UnboundRelation A
+ * Group 3: Join(Group 1, Group 2)
+ * Group 4: Join(Group 0, Group 3)
+ * Group 5: Filter(Group 4)
+ * Group 6: Join(Group 2, Group 1)
+ * Group 7: Join(Group 0, Group 6)
+ *
+ * Then:
+ * Copy In Join(Group 2, Group 1) into Group 3
+ *
+ * Expected:
+ * Group 0: UnboundRelation C
+ * Group 1: UnboundRelation B
+ * Group 2: UnboundRelation A
+ * Group 5: Filter(Group 7)
+ * Group 6: Join(Group 2, Group 1), Join(Group 1, Group 2)
+ * Group 7: Join(Group 0, Group 6)
+ */
+ @Test
+ public void testMergeGroup() {
+ UnboundRelation unboundRelationA = new
UnboundRelation(Lists.newArrayList("A"));
+ UnboundRelation unboundRelationB = new
UnboundRelation(Lists.newArrayList("B"));
+ UnboundRelation unboundRelationC = new
UnboundRelation(Lists.newArrayList("C"));
+ LogicalJoin logicalJoinAB = new LogicalJoin<>(JoinType.INNER_JOIN,
unboundRelationA, unboundRelationB);
+ LogicalJoin logicalJoinBA = new LogicalJoin<>(JoinType.INNER_JOIN,
unboundRelationB, unboundRelationA);
+ LogicalJoin logicalJoinCAB = new LogicalJoin<>(JoinType.INNER_JOIN,
unboundRelationC, logicalJoinAB);
+ LogicalJoin logicalJoinCBA = new LogicalJoin<>(JoinType.INNER_JOIN,
unboundRelationC, logicalJoinBA);
+ LogicalFilter logicalFilter = new LogicalFilter<>(new
BooleanLiteral(true), logicalJoinCBA);
+
+ Memo memo = new Memo(logicalFilter);
+ memo.copyIn(logicalJoinCAB, null, false);
+ Assertions.assertEquals(8, memo.getGroups().size());
+ Assertions.assertEquals(8, memo.getGroupExpressions().size());
+
+ Group target =
memo.getRoot().getLogicalExpression().child(0).getLogicalExpression().child(1);
+ LogicalJoin repeat = new LogicalJoin<>(JoinType.INNER_JOIN,
unboundRelationA, unboundRelationB);
+ memo.copyIn(repeat, target, false);
+ Assertions.assertEquals(6, memo.getGroups().size());
+ Assertions.assertEquals(7, memo.getGroupExpressions().size());
Group root = memo.getRoot();
Assertions.assertEquals(1, root.getLogicalExpressions().size());
- Assertions.assertEquals(PlanType.LOGICAL_PROJECT,
root.logicalExpressionsAt(0).getPlan().getType());
- GroupExpression rootExpression = root.logicalExpressionsAt(0);
- Assertions.assertEquals(1, rootExpression.children().size());
- //two expressions: relationA and relationB
- Assertions.assertEquals(2,
rootExpression.child(0).getLogicalExpressions().size());
- GroupExpression childExpression =
rootExpression.child(0).logicalExpressionsAt(0);
- Assertions.assertEquals(PlanType.LOGICAL_UNBOUND_RELATION,
childExpression.getPlan().getType());
-
- Group groupProjct3 = memo.getGroups().get(2); //group for project3
- Group groupRelation = memo.getGroups().get(0); //group for relation
- //group0 is child of group4
- Assertions.assertEquals(groupRelation,
groupProjct3.logicalExpressionsAt(0).child(0));
- Assertions.assertEquals(1,
groupProjct3.getLogicalExpressions().size());
- Assertions.assertEquals(1,
groupProjct3.logicalExpressionsAt(0).children().size());
+ GroupExpression filter = root.getLogicalExpression();
+ GroupExpression joinCBA = filter.child(0).getLogicalExpression();
+ Assertions.assertEquals(1,
joinCBA.child(0).getLogicalExpressions().size());
+ Assertions.assertEquals(2,
joinCBA.child(1).getLogicalExpressions().size());
+ GroupExpression joinBA =
joinCBA.child(1).getLogicalExpressions().get(0);
+ GroupExpression joinAB =
joinCBA.child(1).getLogicalExpressions().get(1);
+ Assertions.assertTrue(joinAB.getPlan() instanceof LogicalJoin);
+ Assertions.assertTrue(joinBA.getPlan() instanceof LogicalJoin);
}
}
diff --git
a/fe/fe-core/src/test/java/org/apache/doris/nereids/trees/expressions/SubqueryTest.java
b/fe/fe-core/src/test/java/org/apache/doris/nereids/trees/expressions/SubqueryTest.java
index e731c26776..ef082e48c5 100644
---
a/fe/fe-core/src/test/java/org/apache/doris/nereids/trees/expressions/SubqueryTest.java
+++
b/fe/fe-core/src/test/java/org/apache/doris/nereids/trees/expressions/SubqueryTest.java
@@ -17,7 +17,7 @@
package org.apache.doris.nereids.trees.expressions;
-import org.apache.doris.nereids.tpch.AnalyzeCheckTestBase;
+import org.apache.doris.nereids.datasets.tpch.AnalyzeCheckTestBase;
import org.junit.jupiter.api.Test;
diff --git
a/fe/fe-core/src/test/java/org/apache/doris/nereids/plan/TestPlanOutput.java
b/fe/fe-core/src/test/java/org/apache/doris/nereids/trees/plans/TestPlanOutput.java
similarity index 97%
rename from
fe/fe-core/src/test/java/org/apache/doris/nereids/plan/TestPlanOutput.java
rename to
fe/fe-core/src/test/java/org/apache/doris/nereids/trees/plans/TestPlanOutput.java
index 2d93b1b802..6278ac14b3 100644
--- a/fe/fe-core/src/test/java/org/apache/doris/nereids/plan/TestPlanOutput.java
+++
b/fe/fe-core/src/test/java/org/apache/doris/nereids/trees/plans/TestPlanOutput.java
@@ -15,7 +15,7 @@
// specific language governing permissions and limitations
// under the License.
-package org.apache.doris.nereids.plan;
+package org.apache.doris.nereids.trees.plans;
import org.apache.doris.catalog.AggregateType;
import org.apache.doris.catalog.Column;
@@ -26,8 +26,6 @@ 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.Plan;
-import org.apache.doris.nereids.trees.plans.PlanType;
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;
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]