You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@drill.apache.org by ar...@apache.org on 2017/07/24 09:57:21 UTC
drill git commit: DRILL-5165: For limit all case,
no need to push down limit to scan
Repository: drill
Updated Branches:
refs/heads/master a0c178bab -> d622f76ee
DRILL-5165: For limit all case, no need to push down limit to scan
Project: http://git-wip-us.apache.org/repos/asf/drill/repo
Commit: http://git-wip-us.apache.org/repos/asf/drill/commit/d622f76e
Tree: http://git-wip-us.apache.org/repos/asf/drill/tree/d622f76e
Diff: http://git-wip-us.apache.org/repos/asf/drill/diff/d622f76e
Branch: refs/heads/master
Commit: d622f76ee6336d97c9189fc589befa7b0f4189d6
Parents: a0c178b
Author: chunhui-shi <cs...@maprtech.com>
Authored: Tue Mar 7 23:39:32 2017 -0800
Committer: Arina Ielchiieva <ar...@gmail.com>
Committed: Fri Jul 21 20:36:29 2017 +0300
----------------------------------------------------------------------
.../planner/logical/DrillPushLimitToScanRule.java | 16 ++++++++++++++--
.../physical/impl/limit/TestLimitWithExchanges.java | 9 +++++++++
2 files changed, 23 insertions(+), 2 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/drill/blob/d622f76e/exec/java-exec/src/main/java/org/apache/drill/exec/planner/logical/DrillPushLimitToScanRule.java
----------------------------------------------------------------------
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 9f762f0..8ce26c8 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
http://git-wip-us.apache.org/repos/asf/drill/blob/d622f76e/exec/java-exec/src/test/java/org/apache/drill/exec/physical/impl/limit/TestLimitWithExchanges.java
----------------------------------------------------------------------
diff --git a/exec/java-exec/src/test/java/org/apache/drill/exec/physical/impl/limit/TestLimitWithExchanges.java b/exec/java-exec/src/test/java/org/apache/drill/exec/physical/impl/limit/TestLimitWithExchanges.java
index 18f181b..ae7c57b 100644
--- a/exec/java-exec/src/test/java/org/apache/drill/exec/physical/impl/limit/TestLimitWithExchanges.java
+++ b/exec/java-exec/src/test/java/org/apache/drill/exec/physical/impl/limit/TestLimitWithExchanges.java
@@ -125,6 +125,15 @@ public class TestLimitWithExchanges extends BaseTestQuery {
}
}
+ @Test
+ public void TestLimitAllOnParquet() throws Exception {
+ final String query = String.format("select t.n_nationkey from cp.`tpch/nation.parquet` t limit all offset 5", TEST_RES_PATH);
+ final String [] expectedPlan = {};
+ final String [] excludedPlan = {"UnionExchange"};
+
+ testLimitHelper(query, expectedPlan, excludedPlan, 20);
+ }
+
private void testLimitHelper(final String sql, final String[] expectedPlan, final String[] excludedPattern, int expectedRecordCount) throws Exception {
// Validate the plan
PlanTestBase.testPlanMatchingPatterns(sql, expectedPlan, excludedPattern);