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 <jakevin...@gmail.com>
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: commits-unsubscr...@doris.apache.org
For additional commands, e-mail: commits-h...@doris.apache.org

Reply via email to