diff --git a/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/VectorLimitOperator.java b/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/VectorLimitOperator.java index 79b073f93a..528b8f5a7c 100644 --- a/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/VectorLimitOperator.java +++ b/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/VectorLimitOperator.java @@ -79,18 +79,20 @@ public void process(Object row, int tag) throws HiveException { } //skip skipSize rows of batch batch.size = Math.min(batch.size, offset + limit - currCount); + int newBatchSize = batch.size - skipSize; if (batch.selectedInUse == false) { batch.selectedInUse = true; - for (int i = 0; i < batch.size - skipSize; i++) { + for (int i = 0; i < newBatchSize; i++) { batch.selected[i] = skipSize + i; } } else { - for (int i = 0; i < batch.size - skipSize; i++) { + for (int i = 0; i < newBatchSize; i++) { batch.selected[i] = batch.selected[skipSize + i]; } } - vectorForward(batch); currCount += batch.size; + batch.size = newBatchSize; + vectorForward(batch); } } diff --git a/ql/src/test/queries/clientpositive/vector_offset_limit_reduce.q b/ql/src/test/queries/clientpositive/vector_offset_limit_reduce.q new file mode 100644 index 0000000000..78cf5db3eb --- /dev/null +++ b/ql/src/test/queries/clientpositive/vector_offset_limit_reduce.q @@ -0,0 +1,16 @@ +set hive.vectorized.execution.reduce.enabled=true; + +CREATE EXTERNAL TABLE orderdatatest_ext (col1 int, col2 int); +INSERT INTO orderdatatest_ext VALUES + (1,1), + (1,2), + (1,3), + (1,4), + (1,5), + (1,6), + (1,7), + (1,8), + (1,9), + (1,10); + +select * from orderdatatest_ext order by col1 limit 5,100 diff --git a/ql/src/test/results/clientpositive/llap/vector_offset_limit_reduce.q.out b/ql/src/test/results/clientpositive/llap/vector_offset_limit_reduce.q.out new file mode 100644 index 0000000000..ed793f0139 --- /dev/null +++ b/ql/src/test/results/clientpositive/llap/vector_offset_limit_reduce.q.out @@ -0,0 +1,51 @@ +PREHOOK: query: CREATE EXTERNAL TABLE orderdatatest_ext (col1 int, col2 int) +PREHOOK: type: CREATETABLE +PREHOOK: Output: database:default +PREHOOK: Output: default@orderdatatest_ext +POSTHOOK: query: CREATE EXTERNAL TABLE orderdatatest_ext (col1 int, col2 int) +POSTHOOK: type: CREATETABLE +POSTHOOK: Output: database:default +POSTHOOK: Output: default@orderdatatest_ext +PREHOOK: query: INSERT INTO orderdatatest_ext VALUES + (1,1), + (1,2), + (1,3), + (1,4), + (1,5), + (1,6), + (1,7), + (1,8), + (1,9), + (1,10) +PREHOOK: type: QUERY +PREHOOK: Input: _dummy_database@_dummy_table +PREHOOK: Output: default@orderdatatest_ext +POSTHOOK: query: INSERT INTO orderdatatest_ext VALUES + (1,1), + (1,2), + (1,3), + (1,4), + (1,5), + (1,6), + (1,7), + (1,8), + (1,9), + (1,10) +POSTHOOK: type: QUERY +POSTHOOK: Input: _dummy_database@_dummy_table +POSTHOOK: Output: default@orderdatatest_ext +POSTHOOK: Lineage: orderdatatest_ext.col1 SCRIPT [] +POSTHOOK: Lineage: orderdatatest_ext.col2 SCRIPT [] +PREHOOK: query: select * from orderdatatest_ext order by col1 limit 5,100 +PREHOOK: type: QUERY +PREHOOK: Input: default@orderdatatest_ext +#### A masked pattern was here #### +POSTHOOK: query: select * from orderdatatest_ext order by col1 limit 5,100 +POSTHOOK: type: QUERY +POSTHOOK: Input: default@orderdatatest_ext +#### A masked pattern was here #### +1 6 +1 7 +1 8 +1 9 +1 10