This is an automated email from the ASF dual-hosted git repository.

morrysnow 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 131f2a42d2 [Improvement](Nereids) Restrict the condition to apply 
MergeConsecutiveLimits rule (#12624)
131f2a42d2 is described below

commit 131f2a42d269edbf5d65f8ddbb2e35c6a9752da4
Author: Shuo Wang <wangshuo...@gmail.com>
AuthorDate: Fri Sep 16 13:05:39 2022 +0800

    [Improvement](Nereids) Restrict the condition to apply 
MergeConsecutiveLimits rule (#12624)
    
    This PR added a condition check for MergeConsecutiveLimits rule: the input 
upper limit should not have valid offset info.
---
 .../rewrite/logical/MergeConsecutiveLimits.java    | 27 +++++++++++-----------
 .../logical/MergeConsecutiveLimitsTest.java        |  2 +-
 2 files changed, 15 insertions(+), 14 deletions(-)

diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/rewrite/logical/MergeConsecutiveLimits.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/rewrite/logical/MergeConsecutiveLimits.java
index 6442dce0e2..f3e36b1513 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/rewrite/logical/MergeConsecutiveLimits.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/rewrite/logical/MergeConsecutiveLimits.java
@@ -21,33 +21,34 @@ import org.apache.doris.nereids.rules.Rule;
 import org.apache.doris.nereids.rules.RuleType;
 import org.apache.doris.nereids.rules.rewrite.OneRewriteRuleFactory;
 import org.apache.doris.nereids.trees.plans.Plan;
+import org.apache.doris.nereids.trees.plans.algebra.Limit;
 import org.apache.doris.nereids.trees.plans.logical.LogicalLimit;
 
-import java.util.List;
-
 /**
- * this rule aims to merge consecutive limits.
- *   LIMIT1(limit=10, offset=4)
+ * This rule aims to merge consecutive limits.
+ * <pre>
+ * input plan:
+ *   LIMIT1(limit=10, offset=0)
  *     |
  *   LIMIT2(limit=3, offset=5)
  *
- *   transformed to
- *    LIMITl(limit=3, offset=5)
- *   where
- *   LIMIT.limit = min(LIMIT1.limit, LIMIT2.limit)
- *   LIMIT.offset = LIMIT2.offset
- *   LIMIT1.offset is ignored
+ * output plan:
+ *    LIMIT(limit=3, offset=5)
+ *
+ * merged limit = min(LIMIT1.limit, LIMIT2.limit)
+ * merged offset = LIMIT2.offset
+ * </pre>
+ * Note that the top limit should not have valid offset info.
  */
 public class MergeConsecutiveLimits extends OneRewriteRuleFactory {
     @Override
     public Rule build() {
-        return logicalLimit(logicalLimit()).then(upperLimit -> {
+        return 
logicalLimit(logicalLimit()).whenNot(Limit::hasValidOffset).then(upperLimit -> {
             LogicalLimit<? extends Plan> bottomLimit = upperLimit.child();
-            List<Plan> children = bottomLimit.children();
             return new LogicalLimit<>(
                     Math.min(upperLimit.getLimit(), bottomLimit.getLimit()),
                     bottomLimit.getOffset(),
-                    children.get(0)
+                    bottomLimit.child()
             );
         }).toRule(RuleType.MERGE_CONSECUTIVE_LIMITS);
     }
diff --git 
a/fe/fe-core/src/test/java/org/apache/doris/nereids/rules/rewrite/logical/MergeConsecutiveLimitsTest.java
 
b/fe/fe-core/src/test/java/org/apache/doris/nereids/rules/rewrite/logical/MergeConsecutiveLimitsTest.java
index 8d684964a0..7f96a954d6 100644
--- 
a/fe/fe-core/src/test/java/org/apache/doris/nereids/rules/rewrite/logical/MergeConsecutiveLimitsTest.java
+++ 
b/fe/fe-core/src/test/java/org/apache/doris/nereids/rules/rewrite/logical/MergeConsecutiveLimitsTest.java
@@ -34,7 +34,7 @@ public class MergeConsecutiveLimitsTest {
     public void testMergeConsecutiveLimits() {
         LogicalLimit limit3 = new LogicalLimit<>(3, 5, new 
UnboundRelation(Lists.newArrayList("db", "t")));
         LogicalLimit limit2 = new LogicalLimit<>(2, 0, limit3);
-        LogicalLimit limit1 = new LogicalLimit<>(10, 2, limit2);
+        LogicalLimit limit1 = new LogicalLimit<>(10, 0, limit2);
 
         CascadesContext context = MemoTestUtils.createCascadesContext(limit1);
         List<Rule> rules = Lists.newArrayList(new 
MergeConsecutiveLimits().build());


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscr...@doris.apache.org
For additional commands, e-mail: commits-h...@doris.apache.org

Reply via email to