This is an automated email from the ASF dual-hosted git repository. dkuzmenko pushed a commit to branch branch-4.2 in repository https://gitbox.apache.org/repos/asf/hive.git
commit eed6cd8ab45a5d42f7cdc2e63d243b272b108c55 Author: Wechar Yu <[email protected]> AuthorDate: Thu Nov 13 20:03:05 2025 +0800 HIVE-29277: Invalid index should return null for get_json_object (#6144) (cherry picked from commit 866cc7d2a69d2d8b018917488ab243244707aae8) --- ql/src/java/org/apache/hadoop/hive/ql/udf/UDFJson.java | 2 ++ ql/src/test/org/apache/hadoop/hive/ql/udf/TestUDFJson.java | 3 +++ ql/src/test/queries/clientpositive/udf_get_json_object.q | 2 ++ ql/src/test/results/clientpositive/llap/udf_get_json_object.q.out | 6 +++++- 4 files changed, 12 insertions(+), 1 deletion(-) diff --git a/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFJson.java b/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFJson.java index 9e7e05361f9..fd4e598da92 100644 --- a/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFJson.java +++ b/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFJson.java @@ -241,6 +241,8 @@ private Object extract(Object json, String path, boolean skipMapProc) { if (indexList.size() > 0) { json = extract_json_withindex(json, indexList); + } else if (path.indexOf('[') >= 0) { + return null; // index is invalid } return json; diff --git a/ql/src/test/org/apache/hadoop/hive/ql/udf/TestUDFJson.java b/ql/src/test/org/apache/hadoop/hive/ql/udf/TestUDFJson.java index c2d1f42fb73..3b9849f9553 100644 --- a/ql/src/test/org/apache/hadoop/hive/ql/udf/TestUDFJson.java +++ b/ql/src/test/org/apache/hadoop/hive/ql/udf/TestUDFJson.java @@ -105,6 +105,9 @@ public void testRootArray() throws HiveException { runTest("[1,2,3]", "$0", null, udf); runTest("[1,2,3]", "0", null, udf); runTest("[1,2,3]", "$.", null, udf); + runTest("[1,2,3]", "$[1 ]", null, udf); + runTest("[1,2,3]", "$[ 1]", null, udf); + runTest("[1,2,3]", "$[invalid]", null, udf); runTest("[1,2,3]", "$", "[1,2,3]", udf); runTest("{\"a\":4}", "$", "{\"a\":4}", udf); diff --git a/ql/src/test/queries/clientpositive/udf_get_json_object.q b/ql/src/test/queries/clientpositive/udf_get_json_object.q index e5762c2e552..c156e496ac1 100644 --- a/ql/src/test/queries/clientpositive/udf_get_json_object.q +++ b/ql/src/test/queries/clientpositive/udf_get_json_object.q @@ -64,4 +64,6 @@ get_json_object('[{"k1":[{"k11":[1,2,3]}]}]', '$[0].k1[0].k11[1]'); SELECT get_json_object('[1,2,3]', '[2]'), get_json_object('[1,2,3]', '$0'), +get_json_object('[1,2,3]', '$[0 ]'), +get_json_object('[1,2,3]', '$[ 0]'), get_json_object('[1,2,3]', '$[3]'); \ No newline at end of file diff --git a/ql/src/test/results/clientpositive/llap/udf_get_json_object.q.out b/ql/src/test/results/clientpositive/llap/udf_get_json_object.q.out index d2ae71c96b1..05e50c97b1c 100644 --- a/ql/src/test/results/clientpositive/llap/udf_get_json_object.q.out +++ b/ql/src/test/results/clientpositive/llap/udf_get_json_object.q.out @@ -227,6 +227,8 @@ POSTHOOK: Input: _dummy_database@_dummy_table PREHOOK: query: SELECT get_json_object('[1,2,3]', '[2]'), get_json_object('[1,2,3]', '$0'), +get_json_object('[1,2,3]', '$[0 ]'), +get_json_object('[1,2,3]', '$[ 0]'), get_json_object('[1,2,3]', '$[3]') PREHOOK: type: QUERY PREHOOK: Input: _dummy_database@_dummy_table @@ -234,8 +236,10 @@ PREHOOK: Input: _dummy_database@_dummy_table POSTHOOK: query: SELECT get_json_object('[1,2,3]', '[2]'), get_json_object('[1,2,3]', '$0'), +get_json_object('[1,2,3]', '$[0 ]'), +get_json_object('[1,2,3]', '$[ 0]'), get_json_object('[1,2,3]', '$[3]') POSTHOOK: type: QUERY POSTHOOK: Input: _dummy_database@_dummy_table #### A masked pattern was here #### -NULL NULL NULL +NULL NULL NULL NULL NULL
