This is an automated email from the ASF dual-hosted git repository. dkuzmenko pushed a commit to branch branch-4.1 in repository https://gitbox.apache.org/repos/asf/hive.git
The following commit(s) were added to refs/heads/branch-4.1 by this push: new 36ffaa01f84 HIVE-28790: ACID deletes are failing with ArrayIndexOutOfBoundsException when direct insert is enabled (#5922) 36ffaa01f84 is described below commit 36ffaa01f84586a405a3f05bd6c8a1078d95ab9f Author: kokila-19 <35219892+kokila...@users.noreply.github.com> AuthorDate: Fri Jul 4 00:04:17 2025 +0530 HIVE-28790: ACID deletes are failing with ArrayIndexOutOfBoundsException when direct insert is enabled (#5922) (cherry picked from commit 280c1fa5173fa6d864f2784de5979ba56af16515) --- .../hadoop/hive/ql/exec/FileSinkOperator.java | 4 +- .../clientpositive/acid_direct_update_delete.q | 11 +++- .../llap/acid_direct_update_delete.q.out | 63 ++++++++++++++++++++++ 3 files changed, 76 insertions(+), 2 deletions(-) diff --git a/ql/src/java/org/apache/hadoop/hive/ql/exec/FileSinkOperator.java b/ql/src/java/org/apache/hadoop/hive/ql/exec/FileSinkOperator.java index 8047d584e95..cfa2608a93c 100644 --- a/ql/src/java/org/apache/hadoop/hive/ql/exec/FileSinkOperator.java +++ b/ql/src/java/org/apache/hadoop/hive/ql/exec/FileSinkOperator.java @@ -501,7 +501,9 @@ public int createDynamicBucket(int bucketNum) { if (this.finalPaths[writerOffset] == null) { if (conf.isDirectInsert()) { - this.outPathsCommitted = Arrays.copyOf(outPathsCommitted, writerOffset + 1); + if (outPathsCommitted.length <= writerOffset) { + this.outPathsCommitted = Arrays.copyOf(outPathsCommitted, writerOffset + 1); + } this.finalPaths[writerOffset] = buildTmpPath(); this.outPaths[writerOffset] = buildTmpPath(); } else { diff --git a/ql/src/test/queries/clientpositive/acid_direct_update_delete.q b/ql/src/test/queries/clientpositive/acid_direct_update_delete.q index f71d8194715..b0d282997f4 100644 --- a/ql/src/test/queries/clientpositive/acid_direct_update_delete.q +++ b/ql/src/test/queries/clientpositive/acid_direct_update_delete.q @@ -18,4 +18,13 @@ DELETE FROM test_update_bucketed WHERE id IN ('2', '11', '10'); UPDATE test_update_bucketed SET value='New value2' WHERE id IN ('2','18', '19'); SELECT * FROM test_update_bucketed; -DROP TABLE IF EXISTS test_update_bucketed; \ No newline at end of file +CREATE TABLE test_delete(id int) STORED AS ORC TBLPROPERTIES('transactional'='true'); + +INSERT INTO test_delete SELECT id FROM test_update_bucketed WHERE id != 3 and id <=9; +INSERT INTO test_delete SELECT id FROM test_update_bucketed WHERE id > 9; + +DELETE FROM test_delete WHERE id in (5, 13); +SELECT * FROM test_delete; + +DROP TABLE IF EXISTS test_update_bucketed; +DROP TABLE IF EXISTS test_delete; \ No newline at end of file diff --git a/ql/src/test/results/clientpositive/llap/acid_direct_update_delete.q.out b/ql/src/test/results/clientpositive/llap/acid_direct_update_delete.q.out index 65d9a835235..7546cda5a2a 100644 --- a/ql/src/test/results/clientpositive/llap/acid_direct_update_delete.q.out +++ b/ql/src/test/results/clientpositive/llap/acid_direct_update_delete.q.out @@ -136,6 +136,59 @@ POSTHOOK: Output: hdfs://### HDFS PATH ### 7 seven 8 eight 9 nine +PREHOOK: query: CREATE TABLE test_delete(id int) STORED AS ORC TBLPROPERTIES('transactional'='true') +PREHOOK: type: CREATETABLE +PREHOOK: Output: database:default +PREHOOK: Output: default@test_delete +POSTHOOK: query: CREATE TABLE test_delete(id int) STORED AS ORC TBLPROPERTIES('transactional'='true') +POSTHOOK: type: CREATETABLE +POSTHOOK: Output: database:default +POSTHOOK: Output: default@test_delete +PREHOOK: query: INSERT INTO test_delete SELECT id FROM test_update_bucketed WHERE id != 3 and id <=9 +PREHOOK: type: QUERY +PREHOOK: Input: default@test_update_bucketed +PREHOOK: Output: default@test_delete +POSTHOOK: query: INSERT INTO test_delete SELECT id FROM test_update_bucketed WHERE id != 3 and id <=9 +POSTHOOK: type: QUERY +POSTHOOK: Input: default@test_update_bucketed +POSTHOOK: Output: default@test_delete +POSTHOOK: Lineage: test_delete.id EXPRESSION [(test_update_bucketed)test_update_bucketed.FieldSchema(name:id, type:string, comment:null), ] +PREHOOK: query: INSERT INTO test_delete SELECT id FROM test_update_bucketed WHERE id > 9 +PREHOOK: type: QUERY +PREHOOK: Input: default@test_update_bucketed +PREHOOK: Output: default@test_delete +POSTHOOK: query: INSERT INTO test_delete SELECT id FROM test_update_bucketed WHERE id > 9 +POSTHOOK: type: QUERY +POSTHOOK: Input: default@test_update_bucketed +POSTHOOK: Output: default@test_delete +POSTHOOK: Lineage: test_delete.id EXPRESSION [(test_update_bucketed)test_update_bucketed.FieldSchema(name:id, type:string, comment:null), ] +PREHOOK: query: DELETE FROM test_delete WHERE id in (5, 13) +PREHOOK: type: QUERY +PREHOOK: Input: default@test_delete +PREHOOK: Output: default@test_delete +POSTHOOK: query: DELETE FROM test_delete WHERE id in (5, 13) +POSTHOOK: type: QUERY +POSTHOOK: Input: default@test_delete +POSTHOOK: Output: default@test_delete +PREHOOK: query: SELECT * FROM test_delete +PREHOOK: type: QUERY +PREHOOK: Input: default@test_delete +PREHOOK: Output: hdfs://### HDFS PATH ### +POSTHOOK: query: SELECT * FROM test_delete +POSTHOOK: type: QUERY +POSTHOOK: Input: default@test_delete +POSTHOOK: Output: hdfs://### HDFS PATH ### +1 +14 +16 +17 +18 +19 +20 +6 +7 +8 +9 PREHOOK: query: DROP TABLE IF EXISTS test_update_bucketed PREHOOK: type: DROPTABLE PREHOOK: Input: default@test_update_bucketed @@ -146,3 +199,13 @@ POSTHOOK: type: DROPTABLE POSTHOOK: Input: default@test_update_bucketed POSTHOOK: Output: database:default POSTHOOK: Output: default@test_update_bucketed +PREHOOK: query: DROP TABLE IF EXISTS test_delete +PREHOOK: type: DROPTABLE +PREHOOK: Input: default@test_delete +PREHOOK: Output: database:default +PREHOOK: Output: default@test_delete +POSTHOOK: query: DROP TABLE IF EXISTS test_delete +POSTHOOK: type: DROPTABLE +POSTHOOK: Input: default@test_delete +POSTHOOK: Output: database:default +POSTHOOK: Output: default@test_delete