diff --git ql/src/java/org/apache/hadoop/hive/ql/io/orc/RecordReaderImpl.java ql/src/java/org/apache/hadoop/hive/ql/io/orc/RecordReaderImpl.java index d177e3f74c..889bd586d7 100644 --- ql/src/java/org/apache/hadoop/hive/ql/io/orc/RecordReaderImpl.java +++ ql/src/java/org/apache/hadoop/hive/ql/io/orc/RecordReaderImpl.java @@ -147,6 +147,12 @@ public Object next(Object previous) throws IOException { public boolean nextBatch(VectorizedRowBatch theirBatch) throws IOException { // If the user hasn't been reading by row, use the fast path. if (rowInBatch >= batch.size) { + if (batch.size > 0) { + // the local batch has been consumed entirely, reset it + batch.reset(); + } + baseRow = super.getRowNumber(); + rowInBatch = 0; return super.nextBatch(theirBatch); } copyIntoBatch(theirBatch, batch, rowInBatch); diff --git ql/src/test/org/apache/hadoop/hive/ql/io/orc/TestVectorizedORCReader.java ql/src/test/org/apache/hadoop/hive/ql/io/orc/TestVectorizedORCReader.java index 2071d139df..aa99e579e7 100644 --- ql/src/test/org/apache/hadoop/hive/ql/io/orc/TestVectorizedORCReader.java +++ ql/src/test/org/apache/hadoop/hive/ql/io/orc/TestVectorizedORCReader.java @@ -154,9 +154,13 @@ private void checkVectorizedReader() throws Exception { VectorizedRowBatch batch = reader.getSchema().createRowBatchV2(); OrcStruct row = null; + long lastRowNumber = -1; // Check Vectorized ORC reader against ORC row reader while (vrr.nextBatch(batch)) { + Assert.assertEquals(lastRowNumber + 1, vrr.getRowNumber()); for (int i = 0; i < batch.size; i++) { + Assert.assertEquals(rr.getRowNumber(), vrr.getRowNumber()+i); + lastRowNumber = rr.getRowNumber(); row = (OrcStruct) rr.next(row); for (int j = 0; j < batch.cols.length; j++) { Object a = (row.getFieldValue(j)); diff --git ql/src/test/queries/clientpositive/vector_delete_orig_table.q ql/src/test/queries/clientpositive/vector_delete_orig_table.q index f914408dbc..48ef5e2461 100644 --- ql/src/test/queries/clientpositive/vector_delete_orig_table.q +++ ql/src/test/queries/clientpositive/vector_delete_orig_table.q @@ -29,6 +29,8 @@ select count(*) from acid_dot; select count(*) from acid_dot; +select count(*) from acid_dot where cint < -1070551679; + delete from acid_dot where cint < -1070551679; select count(*) from acid_dot; diff --git ql/src/test/results/clientpositive/vector_delete_orig_table.q.out ql/src/test/results/clientpositive/vector_delete_orig_table.q.out index 5d7f31034c..60d3c4d803 100644 --- ql/src/test/results/clientpositive/vector_delete_orig_table.q.out +++ ql/src/test/results/clientpositive/vector_delete_orig_table.q.out @@ -132,6 +132,15 @@ POSTHOOK: type: QUERY POSTHOOK: Input: default@acid_dot #### A masked pattern was here #### 12288 +PREHOOK: query: select count(*) from acid_dot where cint < -1070551679 +PREHOOK: type: QUERY +PREHOOK: Input: default@acid_dot +#### A masked pattern was here #### +POSTHOOK: query: select count(*) from acid_dot where cint < -1070551679 +POSTHOOK: type: QUERY +POSTHOOK: Input: default@acid_dot +#### A masked pattern was here #### +8 PREHOOK: query: delete from acid_dot where cint < -1070551679 PREHOOK: type: QUERY PREHOOK: Input: default@acid_dot @@ -148,5 +157,5 @@ POSTHOOK: query: select count(*) from acid_dot POSTHOOK: type: QUERY POSTHOOK: Input: default@acid_dot #### A masked pattern was here #### -12192 +12280 #### A masked pattern was here ####