aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAman Sinha <asinha@maprtech.com>2015-01-16 11:08:17 -0800
committerAman Sinha <asinha@maprtech.com>2015-01-19 15:43:01 -0800
commit3d2a3e1c8b27d44c5f28a24f83959a1608c9317c (patch)
tree9cc442e547831a088a4ac6e75fd4e8db0b0704a1
parent952114fcdb9b819b546bd0283d30e56027c3f831 (diff)
DRILL-1973: Filter should check for record count before doing evaluation. Fixes NPE.
-rw-r--r--exec/java-exec/src/main/java/org/apache/drill/exec/physical/impl/filter/FilterTemplate2.java3
-rw-r--r--exec/java-exec/src/main/java/org/apache/drill/exec/physical/impl/filter/FilterTemplate4.java3
-rw-r--r--exec/java-exec/src/test/java/org/apache/drill/TestExampleQueries.java14
3 files changed, 20 insertions, 0 deletions
diff --git a/exec/java-exec/src/main/java/org/apache/drill/exec/physical/impl/filter/FilterTemplate2.java b/exec/java-exec/src/main/java/org/apache/drill/exec/physical/impl/filter/FilterTemplate2.java
index 7e0dd657c..26f265782 100644
--- a/exec/java-exec/src/main/java/org/apache/drill/exec/physical/impl/filter/FilterTemplate2.java
+++ b/exec/java-exec/src/main/java/org/apache/drill/exec/physical/impl/filter/FilterTemplate2.java
@@ -60,6 +60,9 @@ public abstract class FilterTemplate2 implements Filterer{
}
public void filterBatch(int recordCount){
+ if (recordCount == 0) {
+ return;
+ }
if (! outgoingSelectionVector.allocateNew(recordCount)) {
throw new UnsupportedOperationException("Unable to allocate filter batch");
}
diff --git a/exec/java-exec/src/main/java/org/apache/drill/exec/physical/impl/filter/FilterTemplate4.java b/exec/java-exec/src/main/java/org/apache/drill/exec/physical/impl/filter/FilterTemplate4.java
index 0ea53ac58..fd1f9e68c 100644
--- a/exec/java-exec/src/main/java/org/apache/drill/exec/physical/impl/filter/FilterTemplate4.java
+++ b/exec/java-exec/src/main/java/org/apache/drill/exec/physical/impl/filter/FilterTemplate4.java
@@ -43,6 +43,9 @@ public abstract class FilterTemplate4 implements Filterer {
@Override
public void filterBatch(int recordCount){
+ if (recordCount == 0) {
+ return;
+ }
int outPos = 0;
for (int i = 0; i < incomingSelectionVector.getCount(); i++) {
int index = incomingSelectionVector.get(i);
diff --git a/exec/java-exec/src/test/java/org/apache/drill/TestExampleQueries.java b/exec/java-exec/src/test/java/org/apache/drill/TestExampleQueries.java
index f740a1c6f..a3b5ff19b 100644
--- a/exec/java-exec/src/test/java/org/apache/drill/TestExampleQueries.java
+++ b/exec/java-exec/src/test/java/org/apache/drill/TestExampleQueries.java
@@ -504,4 +504,18 @@ public class TestExampleQueries extends BaseTestQuery{
assertEquals(expectedRecordCount, actualRecordCount);
}
+ @Test // DRILL-1973
+ public void testLimit0SubqueryWithFilter() throws Exception {
+ String query1 = "select * from (select sum(1) as x from cp.`tpch/region.parquet` limit 0) WHERE x < 10";
+ String query2 = "select * from (select sum(1) as x from cp.`tpch/region.parquet` limit 0) WHERE (0 = 1)";
+ int actualRecordCount = 0;
+ int expectedRecordCount = 0;
+
+ actualRecordCount = testSql(query1);
+ assertEquals(expectedRecordCount, actualRecordCount);
+
+ actualRecordCount = testSql(query2);
+ assertEquals(expectedRecordCount, actualRecordCount);
+ }
+
}