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