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

Reply via email to