This is an automated email from the ASF dual-hosted git repository.
kxiao pushed a commit to branch branch-2.0
in repository https://gitbox.apache.org/repos/asf/doris.git
The following commit(s) were added to refs/heads/branch-2.0 by this push:
new 8878ebd23ec [bugfix]json_length() BE crash fix (#32145) (#32484)
8878ebd23ec is described below
commit 8878ebd23ece0b9ba5fde12b8b6cc731fd00deed
Author: Kang <[email protected]>
AuthorDate: Tue Mar 19 20:46:45 2024 +0800
[bugfix]json_length() BE crash fix (#32145) (#32484)
Co-authored-by: Rohit Satardekar <[email protected]>
---
be/src/vec/functions/function_jsonb.cpp | 5 +++--
regression-test/data/jsonb_p0/test_jsonb_load_and_function.out | 3 +++
regression-test/suites/jsonb_p0/test_jsonb_load_and_function.groovy | 1 +
3 files changed, 7 insertions(+), 2 deletions(-)
diff --git a/be/src/vec/functions/function_jsonb.cpp
b/be/src/vec/functions/function_jsonb.cpp
index cc0394e2a3e..f2a24c43648 100644
--- a/be/src/vec/functions/function_jsonb.cpp
+++ b/be/src/vec/functions/function_jsonb.cpp
@@ -1081,7 +1081,8 @@ struct JsonbLengthUtil {
MutableColumnPtr res = return_type->create_column();
for (size_t i = 0; i < input_rows_count; ++i) {
- if (jsonb_data_column->is_null_at(i) ||
path_column->is_null_at(i)) {
+ if (jsonb_data_column->is_null_at(i) || path_column->is_null_at(i)
||
+ (jsonb_data_column->get_data_at(i).size == 0)) {
null_map->get_data()[i] = 1;
res->insert_data(nullptr, 0);
continue;
@@ -1101,7 +1102,7 @@ struct JsonbLengthUtil {
// doc is NOT necessary to be deleted since JsonbDocument will not
allocate memory
JsonbDocument* doc =
JsonbDocument::createDocument(jsonb_value.data, jsonb_value.size);
JsonbValue* value = doc->getValue()->findValue(path, nullptr);
- if (UNLIKELY(jsonb_value.size == 0 || !value)) {
+ if (UNLIKELY(!value)) {
null_map->get_data()[i] = 1;
res->insert_data(nullptr, 0);
continue;
diff --git a/regression-test/data/jsonb_p0/test_jsonb_load_and_function.out
b/regression-test/data/jsonb_p0/test_jsonb_load_and_function.out
index 215f798df9b..8a3b573cebd 100644
--- a/regression-test/data/jsonb_p0/test_jsonb_load_and_function.out
+++ b/regression-test/data/jsonb_p0/test_jsonb_load_and_function.out
@@ -7494,6 +7494,9 @@ false
-- !sql_json_length --
2
+-- !sql_json_length --
+\N
+
-- !select_length --
1 \N \N
2 null 1
diff --git
a/regression-test/suites/jsonb_p0/test_jsonb_load_and_function.groovy
b/regression-test/suites/jsonb_p0/test_jsonb_load_and_function.groovy
index 1d775a46ffa..491d642be4e 100644
--- a/regression-test/suites/jsonb_p0/test_jsonb_load_and_function.groovy
+++ b/regression-test/suites/jsonb_p0/test_jsonb_load_and_function.groovy
@@ -548,6 +548,7 @@ suite("test_jsonb_load_and_function", "p0") {
qt_sql_json_length """SELECT json_length('{"k1":"v31","k2":300}')"""
qt_sql_json_length """SELECT json_length('{"a.b.c":{"k1.a1":"v31", "k2":
300},"a":"niu"}')"""
qt_sql_json_length """SELECT json_length('{"a":{"k1.a1":"v31", "k2":
300},"b":"niu"}','\$.a')"""
+ qt_sql_json_length """SELECT json_length('abc','\$.k1')"""
qt_select_length """SELECT id, j, json_length(j) FROM ${testTable} ORDER
BY id"""
qt_select_length """SELECT id, j, json_length(j, '\$[1]') FROM
${testTable} ORDER BY id"""
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]