aboutsummaryrefslogtreecommitdiff
path: root/exec/java-exec/src/main/java/org/apache/drill/exec/planner/logical/DrillPushLimitToScanRule.java
diff options
context:
space:
mode:
authorchunhui-shi <cshi@maprtech.com>2017-03-07 23:39:32 -0800
committerArina Ielchiieva <arina.yelchiyeva@gmail.com>2017-07-21 20:36:29 +0300
commitd622f76ee6336d97c9189fc589befa7b0f4189d6 (patch)
tree09f7215896e2ec91b762c0e09383e03819a01300 /exec/java-exec/src/main/java/org/apache/drill/exec/planner/logical/DrillPushLimitToScanRule.java
parenta0c178babb6d82a30af8fdf5e912cbc9c9526a85 (diff)
DRILL-5165: For limit all case, no need to push down limit to scan
Diffstat (limited to 'exec/java-exec/src/main/java/org/apache/drill/exec/planner/logical/DrillPushLimitToScanRule.java')
-rw-r--r--exec/java-exec/src/main/java/org/apache/drill/exec/planner/logical/DrillPushLimitToScanRule.java16
1 files changed, 14 insertions, 2 deletions
diff --git a/exec/java-exec/src/main/java/org/apache/drill/exec/planner/logical/DrillPushLimitToScanRule.java b/exec/java-exec/src/main/java/org/apache/drill/exec/planner/logical/DrillPushLimitToScanRule.java
index 9f762f051..8ce26c8ac 100644
--- a/exec/java-exec/src/main/java/org/apache/drill/exec/planner/logical/DrillPushLimitToScanRule.java
+++ b/exec/java-exec/src/main/java/org/apache/drill/exec/planner/logical/DrillPushLimitToScanRule.java
@@ -42,8 +42,14 @@ public abstract class DrillPushLimitToScanRule extends RelOptRule {
RelOptHelper.some(DrillLimitRel.class, RelOptHelper.any(DrillScanRel.class)), "DrillPushLimitToScanRule_LimitOnScan") {
@Override
public boolean matches(RelOptRuleCall call) {
+ DrillLimitRel limitRel = call.rel(0);
DrillScanRel scanRel = call.rel(1);
- return scanRel.getGroupScan().supportsLimitPushdown(); // For now only applies to Parquet.
+ // For now only applies to Parquet. And pushdown only apply limit but not offset,
+ // so if getFetch() return null no need to run this rule.
+ if (scanRel.getGroupScan().supportsLimitPushdown() && (limitRel.getFetch() != null)) {
+ return true;
+ }
+ return false;
}
@Override
@@ -58,8 +64,14 @@ public abstract class DrillPushLimitToScanRule extends RelOptRule {
RelOptHelper.some(DrillLimitRel.class, RelOptHelper.some(DrillProjectRel.class, RelOptHelper.any(DrillScanRel.class))), "DrillPushLimitToScanRule_LimitOnProject") {
@Override
public boolean matches(RelOptRuleCall call) {
+ DrillLimitRel limitRel = call.rel(0);
DrillScanRel scanRel = call.rel(2);
- return scanRel.getGroupScan().supportsLimitPushdown(); // For now only applies to Parquet.
+ // For now only applies to Parquet. And pushdown only apply limit but not offset,
+ // so if getFetch() return null no need to run this rule.
+ if (scanRel.getGroupScan().supportsLimitPushdown() && (limitRel.getFetch() != null)) {
+ return true;
+ }
+ return false;
}
@Override