diff options
author | chunhui-shi <cshi@maprtech.com> | 2017-03-07 23:39:32 -0800 |
---|---|---|
committer | Arina Ielchiieva <arina.yelchiyeva@gmail.com> | 2017-07-21 20:36:29 +0300 |
commit | d622f76ee6336d97c9189fc589befa7b0f4189d6 (patch) | |
tree | 09f7215896e2ec91b762c0e09383e03819a01300 /exec/java-exec/src/main/java/org/apache/drill/exec/planner/logical/DrillPushLimitToScanRule.java | |
parent | a0c178babb6d82a30af8fdf5e912cbc9c9526a85 (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.java | 16 |
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 |