diff options
author | Aman Sinha <asinha@maprtech.com> | 2015-01-16 11:08:17 -0800 |
---|---|---|
committer | Aman Sinha <asinha@maprtech.com> | 2015-01-19 15:43:01 -0800 |
commit | 3d2a3e1c8b27d44c5f28a24f83959a1608c9317c (patch) | |
tree | 9cc442e547831a088a4ac6e75fd4e8db0b0704a1 | |
parent | 952114fcdb9b819b546bd0283d30e56027c3f831 (diff) |
DRILL-1973: Filter should check for record count before doing evaluation. Fixes NPE.
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); + } + } |