DRILL-1932: Query fails if the first record batch does not contain any record

+ Added test case which runs a query against an HBase table with first and last 
region empty.


Project: http://git-wip-us.apache.org/repos/asf/drill/repo
Commit: http://git-wip-us.apache.org/repos/asf/drill/commit/8d1e1aff
Tree: http://git-wip-us.apache.org/repos/asf/drill/tree/8d1e1aff
Diff: http://git-wip-us.apache.org/repos/asf/drill/diff/8d1e1aff

Branch: refs/heads/master
Commit: 8d1e1affe86a5adca3bc17eeaf7520f0d379a393
Parents: 50c0949
Author: Aditya Kishore <a...@apache.org>
Authored: Thu Jan 1 02:57:49 2015 -0800
Committer: Aditya Kishore <a...@apache.org>
Committed: Tue Jan 20 23:02:03 2015 -0800

----------------------------------------------------------------------
 .../org/apache/drill/hbase/HBaseTestsSuite.java |  1 +
 .../apache/drill/hbase/TestHBaseQueries.java    | 63 ++++++++++++++++++++
 .../apache/drill/hbase/TestTableGenerator.java  |  2 +-
 .../drill/exec/physical/impl/ScanBatch.java     |  5 +-
 4 files changed, 69 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/drill/blob/8d1e1aff/contrib/storage-hbase/src/test/java/org/apache/drill/hbase/HBaseTestsSuite.java
----------------------------------------------------------------------
diff --git 
a/contrib/storage-hbase/src/test/java/org/apache/drill/hbase/HBaseTestsSuite.java
 
b/contrib/storage-hbase/src/test/java/org/apache/drill/hbase/HBaseTestsSuite.java
index 888a9f5..96a887e 100644
--- 
a/contrib/storage-hbase/src/test/java/org/apache/drill/hbase/HBaseTestsSuite.java
+++ 
b/contrib/storage-hbase/src/test/java/org/apache/drill/hbase/HBaseTestsSuite.java
@@ -34,6 +34,7 @@ import org.junit.runners.Suite.SuiteClasses;
 
 @RunWith(Suite.class)
 @SuiteClasses({
+  TestHBaseQueries.class,
   TestHBaseRegexParser.class,
   HBaseRecordReaderTest.class,
   TestHBaseFilterPushDown.class,

http://git-wip-us.apache.org/repos/asf/drill/blob/8d1e1aff/contrib/storage-hbase/src/test/java/org/apache/drill/hbase/TestHBaseQueries.java
----------------------------------------------------------------------
diff --git 
a/contrib/storage-hbase/src/test/java/org/apache/drill/hbase/TestHBaseQueries.java
 
b/contrib/storage-hbase/src/test/java/org/apache/drill/hbase/TestHBaseQueries.java
new file mode 100644
index 0000000..f842acc
--- /dev/null
+++ 
b/contrib/storage-hbase/src/test/java/org/apache/drill/hbase/TestHBaseQueries.java
@@ -0,0 +1,63 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.drill.hbase;
+
+import java.util.Arrays;
+
+import org.apache.hadoop.hbase.HColumnDescriptor;
+import org.apache.hadoop.hbase.HTableDescriptor;
+import org.apache.hadoop.hbase.client.HBaseAdmin;
+import org.apache.hadoop.hbase.client.HTable;
+import org.apache.hadoop.hbase.client.Put;
+import org.junit.Test;
+
+public class TestHBaseQueries extends BaseHBaseTest {
+
+  @Test
+  public void testWithEmptyFirstAndLastRegion() throws Exception {
+    HBaseAdmin admin = HBaseTestsSuite.getAdmin();
+    String tableName = "drill_ut_empty_regions";
+    HTable table = null;
+
+    try {
+    HTableDescriptor desc = new HTableDescriptor(tableName);
+    desc.addFamily(new HColumnDescriptor("f"));
+    admin.createTable(desc, Arrays.copyOfRange(TestTableGenerator.SPLIT_KEYS, 
0, 2));
+
+    table = new HTable(admin.getConfiguration(), tableName);
+    Put p = new Put("b".getBytes());
+    p.add("f".getBytes(), "c".getBytes(), "1".getBytes());
+    table.put(p);
+
+    setColumnWidths(new int[] {8, 15});
+    runHBaseSQLVerifyCount("SELECT *\n"
+        + "FROM\n"
+        + "  hbase.`" + tableName + "` tableName\n"
+        , 1);
+    } finally {
+      try {
+        if (table != null) {
+          table.close();
+        }
+        admin.disableTable(tableName);
+        admin.deleteTable(tableName);
+      } catch (Exception e) { } // ignore
+    }
+
+  }
+}

http://git-wip-us.apache.org/repos/asf/drill/blob/8d1e1aff/contrib/storage-hbase/src/test/java/org/apache/drill/hbase/TestTableGenerator.java
----------------------------------------------------------------------
diff --git 
a/contrib/storage-hbase/src/test/java/org/apache/drill/hbase/TestTableGenerator.java
 
b/contrib/storage-hbase/src/test/java/org/apache/drill/hbase/TestTableGenerator.java
index c244f9e..097947c 100644
--- 
a/contrib/storage-hbase/src/test/java/org/apache/drill/hbase/TestTableGenerator.java
+++ 
b/contrib/storage-hbase/src/test/java/org/apache/drill/hbase/TestTableGenerator.java
@@ -28,7 +28,7 @@ import org.apache.hadoop.hbase.client.Put;
 
 public class TestTableGenerator {
 
-  static final byte[][] SPLIT_KEYS = {
+  public static final byte[][] SPLIT_KEYS = {
     {'b'}, {'c'}, {'d'}, {'e'}, {'f'}, {'g'}, {'h'}, {'i'},
     {'j'}, {'k'}, {'l'}, {'m'}, {'n'}, {'o'}, {'p'}, {'q'},
     {'r'}, {'s'}, {'t'}, {'u'}, {'v'}, {'w'}, {'x'}, {'y'}, {'z'}

http://git-wip-us.apache.org/repos/asf/drill/blob/8d1e1aff/exec/java-exec/src/main/java/org/apache/drill/exec/physical/impl/ScanBatch.java
----------------------------------------------------------------------
diff --git 
a/exec/java-exec/src/main/java/org/apache/drill/exec/physical/impl/ScanBatch.java
 
b/exec/java-exec/src/main/java/org/apache/drill/exec/physical/impl/ScanBatch.java
index 29bf68e..d68a5b5 100644
--- 
a/exec/java-exec/src/main/java/org/apache/drill/exec/physical/impl/ScanBatch.java
+++ 
b/exec/java-exec/src/main/java/org/apache/drill/exec/physical/impl/ScanBatch.java
@@ -47,7 +47,6 @@ import org.apache.drill.exec.record.WritableBatch;
 import org.apache.drill.exec.record.selection.SelectionVector2;
 import org.apache.drill.exec.record.selection.SelectionVector4;
 import org.apache.drill.exec.store.RecordReader;
-import org.apache.drill.exec.util.CallBack;
 import org.apache.drill.exec.vector.AllocationHelper;
 import org.apache.drill.exec.vector.NullableVarCharVector;
 import org.apache.drill.exec.vector.SchemaChangeCallBack;
@@ -161,6 +160,10 @@ public class ScanBatch implements RecordBatch {
             currentReader.cleanup();
             releaseAssets();
             done = true;
+            if (mutator.isNewSchema()) {
+              container.buildSchema(SelectionVectorMode.NONE);
+              schema = container.getSchema();
+            }
             return IterOutcome.NONE;
           }
           oContext.getStats().startSetup();

Reply via email to