This is an automated email from the ASF dual-hosted git repository.
kxiao pushed a commit to branch branch-2.0
in repository https://gitbox.apache.org/repos/asf/doris.git
The following commit(s) were added to refs/heads/branch-2.0 by this push:
new 0d117a8c6e2 [fix](Nereids): merge Offset in Limit Translator #29100
#29142 (#29224)
0d117a8c6e2 is described below
commit 0d117a8c6e2e176748b0a960d3d9aaf4def8125c
Author: jakevin <[email protected]>
AuthorDate: Thu Dec 28 21:26:04 2023 +0800
[fix](Nereids): merge Offset in Limit Translator #29100 #29142 (#29224)
---
.../glue/translator/PhysicalPlanTranslator.java | 5 +++--
.../doris/nereids/rules/rewrite/MergeLimits.java | 18 ++++++++++++++----
2 files changed, 17 insertions(+), 6 deletions(-)
diff --git
a/fe/fe-core/src/main/java/org/apache/doris/nereids/glue/translator/PhysicalPlanTranslator.java
b/fe/fe-core/src/main/java/org/apache/doris/nereids/glue/translator/PhysicalPlanTranslator.java
index 0f5b5dd597d..a554df0ac15 100644
---
a/fe/fe-core/src/main/java/org/apache/doris/nereids/glue/translator/PhysicalPlanTranslator.java
+++
b/fe/fe-core/src/main/java/org/apache/doris/nereids/glue/translator/PhysicalPlanTranslator.java
@@ -66,6 +66,7 @@ import
org.apache.doris.nereids.properties.DistributionSpecStorageGather;
import org.apache.doris.nereids.properties.OrderKey;
import org.apache.doris.nereids.properties.PhysicalProperties;
import
org.apache.doris.nereids.rules.implementation.LogicalWindowToPhysicalWindow.WindowFrameGroup;
+import org.apache.doris.nereids.rules.rewrite.MergeLimits;
import org.apache.doris.nereids.stats.StatsErrorEstimator;
import org.apache.doris.nereids.trees.UnaryNode;
import org.apache.doris.nereids.trees.expressions.AggregateExpression;
@@ -1548,8 +1549,8 @@ public class PhysicalPlanTranslator extends
DefaultPlanVisitor<PlanFragment, Pla
public PlanFragment visitPhysicalLimit(PhysicalLimit<? extends Plan>
physicalLimit, PlanTranslatorContext context) {
PlanFragment inputFragment = physicalLimit.child(0).accept(this,
context);
PlanNode child = inputFragment.getPlanRoot();
- child.setOffset(physicalLimit.getOffset());
- child.setLimit(physicalLimit.getLimit());
+ child.setLimit(MergeLimits.mergeLimit(physicalLimit.getLimit(),
physicalLimit.getOffset(), child.getLimit()));
+ child.setOffset(MergeLimits.mergeOffset(physicalLimit.getOffset(),
child.getOffset()));
updateLegacyPlanIdToPhysicalPlan(child, physicalLimit);
return inputFragment;
}
diff --git
a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/rewrite/MergeLimits.java
b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/rewrite/MergeLimits.java
index 0621e70b707..e544eed07ce 100644
---
a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/rewrite/MergeLimits.java
+++
b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/rewrite/MergeLimits.java
@@ -47,11 +47,21 @@ public class MergeLimits extends OneRewriteRuleFactory {
.then(upperLimit -> {
LogicalLimit<? extends Plan> bottomLimit =
upperLimit.child();
return new LogicalLimit<>(
- Math.min(upperLimit.getLimit(),
- Math.max(bottomLimit.getLimit() -
upperLimit.getOffset(), 0)),
- bottomLimit.getOffset() + upperLimit.getOffset(),
- upperLimit.getPhase(), bottomLimit.child()
+ mergeLimit(upperLimit.getLimit(),
upperLimit.getOffset(), bottomLimit.getLimit()),
+ mergeOffset(upperLimit.getOffset(),
bottomLimit.getOffset()),
+ upperLimit.child().getPhase(), bottomLimit.child()
);
}).toRule(RuleType.MERGE_LIMITS);
}
+
+ public static long mergeOffset(long upperOffset, long bottomOffset) {
+ return upperOffset + bottomOffset;
+ }
+
+ public static long mergeLimit(long upperLimit, long upperOffset, long
bottomLimit) {
+ if (bottomLimit < 0) {
+ return upperLimit;
+ }
+ return Math.min(upperLimit, Math.max(bottomLimit - upperOffset, 0));
+ }
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]