You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@drill.apache.org by ti...@apache.org on 2018/06/16 05:45:55 UTC
[drill] 01/03: DRILL-6487: Limit estimateRowCount should not return
negative rowcount
This is an automated email from the ASF dual-hosted git repository.
timothyfarkas pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/drill.git
commit ca39cb67987a0efff2fe889ca4c5bf3a6fe5273a
Author: Gautam Parai <gp...@maprtech.com>
AuthorDate: Thu Jun 14 17:26:32 2018 -0700
DRILL-6487: Limit estimateRowCount should not return negative rowcount
closes #1322
---
.../org/apache/drill/exec/planner/common/DrillLimitRelBase.java | 3 ++-
.../apache/drill/exec/physical/impl/limit/TestLimitPlanning.java | 7 +++++++
2 files changed, 9 insertions(+), 1 deletion(-)
diff --git a/exec/java-exec/src/main/java/org/apache/drill/exec/planner/common/DrillLimitRelBase.java b/exec/java-exec/src/main/java/org/apache/drill/exec/planner/common/DrillLimitRelBase.java
index afe5dad..7d070b6 100644
--- a/exec/java-exec/src/main/java/org/apache/drill/exec/planner/common/DrillLimitRelBase.java
+++ b/exec/java-exec/src/main/java/org/apache/drill/exec/planner/common/DrillLimitRelBase.java
@@ -87,7 +87,8 @@ public abstract class DrillLimitRelBase extends SingleRel implements DrillRelNod
int off = offset != null ? RexLiteral.intValue(offset) : 0 ;
if (fetch == null) {
- return getInput().estimateRowCount(mq) - off;
+ // If estimated rowcount is less than offset return 0
+ return Math.max(0, getInput().estimateRowCount(mq) - off);
} else {
int f = RexLiteral.intValue(fetch);
return off + f;
diff --git a/exec/java-exec/src/test/java/org/apache/drill/exec/physical/impl/limit/TestLimitPlanning.java b/exec/java-exec/src/test/java/org/apache/drill/exec/physical/impl/limit/TestLimitPlanning.java
index 3f5fee2..087191a 100644
--- a/exec/java-exec/src/test/java/org/apache/drill/exec/physical/impl/limit/TestLimitPlanning.java
+++ b/exec/java-exec/src/test/java/org/apache/drill/exec/physical/impl/limit/TestLimitPlanning.java
@@ -29,4 +29,11 @@ public class TestLimitPlanning extends PlanTestBase {
PlanTestBase.testPlanMatchingPatterns(query, new String[]{".*Sort\\(.*"}, new String[]{".*TopN\\(.*"});
}
+
+ @Test
+ public void offsetMoreThanTotalRowsWithoutFetch() throws Exception {
+ String query = "select full_name from cp.`employee.json` offset 1156";
+ // Should not raise an assert
+ PlanTestBase.testPlanMatchingPatterns(query, new String[]{".*Limit\\(offset=\\[1156\\]\\).*"});
+ }
}
--
To stop receiving notification emails like this one, please contact
timothyfarkas@apache.org.