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