This is an automated email from the ASF dual-hosted git repository.
dkuzmenko pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/hive.git
The following commit(s) were added to refs/heads/master by this push:
new 866cc7d2a69 HIVE-29277: Invalid index should return null for
get_json_object (#6144)
866cc7d2a69 is described below
commit 866cc7d2a69d2d8b018917488ab243244707aae8
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)
---
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