This is an automated email from the ASF dual-hosted git repository.
jakevin 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 8478efad44 [improve](Nereids): check same logicalProperty when insert
a Group. (#12469)
8478efad44 is described below
commit 8478efad4460965616da02c6e4aff25f03a16ff9
Author: jakevin <[email protected]>
AuthorDate: Fri Sep 9 00:00:11 2022 +0800
[improve](Nereids): check same logicalProperty when insert a Group. (#12469)
---
.../src/main/java/org/apache/doris/nereids/memo/Memo.java | 4 ++++
.../java/org/apache/doris/nereids/memo/MemoCopyInTest.java | 12 ++++++++----
.../test/java/org/apache/doris/nereids/util/PlanChecker.java | 8 ++++----
3 files changed, 16 insertions(+), 8 deletions(-)
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 f0b6f64691..64c9518a2d 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
@@ -219,6 +219,10 @@ public class Memo {
* and the second element is a reference of node in Memo
*/
private CopyInResult doCopyIn(Plan plan, @Nullable Group targetGroup) {
+ // check logicalproperties, must same output in a Group.
+ if (targetGroup != null &&
!plan.getLogicalProperties().equals(targetGroup.getLogicalProperties())) {
+ throw new IllegalStateException("Insert a plan into targetGroup
but differ in logicalproperties");
+ }
Optional<GroupExpression> groupExpr = plan.getGroupExpression();
if (groupExpr.isPresent() &&
groupExpressions.containsKey(groupExpr.get())) {
return CopyInResult.of(false, groupExpr.get());
diff --git
a/fe/fe-core/src/test/java/org/apache/doris/nereids/memo/MemoCopyInTest.java
b/fe/fe-core/src/test/java/org/apache/doris/nereids/memo/MemoCopyInTest.java
index 62713fc0da..5cf28d4528 100644
--- a/fe/fe-core/src/test/java/org/apache/doris/nereids/memo/MemoCopyInTest.java
+++ b/fe/fe-core/src/test/java/org/apache/doris/nereids/memo/MemoCopyInTest.java
@@ -20,11 +20,13 @@ package org.apache.doris.nereids.memo;
import org.apache.doris.nereids.trees.plans.JoinType;
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.MemoTestUtils;
import org.apache.doris.nereids.util.PatternMatchSupported;
import org.apache.doris.nereids.util.PlanChecker;
import org.apache.doris.nereids.util.PlanConstructor;
+import com.google.common.collect.Lists;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
@@ -58,10 +60,11 @@ public class MemoCopyInTest implements
PatternMatchSupported {
.transform(
// swap join's children
logicalJoin(logicalOlapScan(),
logicalOlapScan()).then(joinBA ->
- new LogicalJoin<>(JoinType.INNER_JOIN,
joinBA.right(), joinBA.left())
+ new
LogicalProject<>(Lists.newArrayList(joinBA.getOutput()),
+ new LogicalJoin<>(JoinType.INNER_JOIN,
joinBA.right(), joinBA.left()))
))
- .checkGroupNum(5)
- .checkGroupExpressionNum(6)
+ .checkGroupNum(6)
+ .checkGroupExpressionNum(7)
.checkMemo(memo -> {
Group root = memo.getRoot();
Assertions.assertEquals(1,
root.getLogicalExpressions().size());
@@ -69,7 +72,8 @@ public class MemoCopyInTest implements PatternMatchSupported {
Assertions.assertEquals(2,
joinABC.child(0).getLogicalExpressions().size());
Assertions.assertEquals(1,
joinABC.child(1).getLogicalExpressions().size());
GroupExpression joinAB =
joinABC.child(0).getLogicalExpressions().get(0);
- GroupExpression joinBA =
joinABC.child(0).getLogicalExpressions().get(1);
+ GroupExpression project =
joinABC.child(0).getLogicalExpressions().get(1);
+ GroupExpression joinBA =
project.child(0).getLogicalExpression();
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/util/PlanChecker.java
b/fe/fe-core/src/test/java/org/apache/doris/nereids/util/PlanChecker.java
index 3b03d468a6..af4c86277c 100644
--- a/fe/fe-core/src/test/java/org/apache/doris/nereids/util/PlanChecker.java
+++ b/fe/fe-core/src/test/java/org/apache/doris/nereids/util/PlanChecker.java
@@ -163,19 +163,20 @@ public class PlanChecker {
return transform(cascadesContext.getMemo().getRoot(), rule);
}
+ // Exploration Rule.
public PlanChecker transform(Group group, Rule rule) {
// copy groupExpressions can prevent ConcurrentModificationException
for (GroupExpression logicalExpression :
Lists.newArrayList(group.getLogicalExpressions())) {
- transform(logicalExpression, rule);
+ transformApply(logicalExpression, rule);
}
for (GroupExpression physicalExpression :
Lists.newArrayList(group.getPhysicalExpressions())) {
- transform(physicalExpression, rule);
+ transformApply(physicalExpression, rule);
}
return this;
}
- public PlanChecker transform(GroupExpression groupExpression, Rule rule) {
+ private void transformApply(GroupExpression groupExpression, Rule rule) {
GroupExpressionMatching matchResult = new
GroupExpressionMatching(rule.getPattern(), groupExpression);
for (Plan before : matchResult) {
@@ -188,7 +189,6 @@ public class PlanChecker {
for (Group childGroup : groupExpression.children()) {
transform(childGroup, rule);
}
- return this;
}
public PlanChecker matchesFromRoot(PatternDescriptor<? extends Plan>
patternDesc) {
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]