From 4d3dbf1b3b086b99c2948b80afe3f52f85fb0ebd Mon Sep 17 00:00:00 2001 From: Mryange <59914473+Mryange@users.noreply.github.com> Date: Mon, 30 Oct 2023 11:05:27 +0800 Subject: [PATCH] [fix](function) fix EXPLODE_JSON_ARRAY_STRING function (#25519) --- .../table_function/vexplode_json_array.cpp | 8 +- .../table_function/vexplode_json_array.h | 22 --- .../table_function/explode_json_array.out | 138 ++++++++++++++++-- .../table_function/explode_json_array.groovy | 16 +- 4 files changed, 145 insertions(+), 39 deletions(-) diff --git a/be/src/vec/exprs/table_function/vexplode_json_array.cpp b/be/src/vec/exprs/table_function/vexplode_json_array.cpp index 811d34ccde..64dec1a7e3 100644 --- a/be/src/vec/exprs/table_function/vexplode_json_array.cpp +++ b/be/src/vec/exprs/table_function/vexplode_json_array.cpp @@ -124,19 +124,19 @@ int ParsedData::set_output(ExplodeJsonArrayType type, rapidjson::Document& docum // change each time `emplace_back()` is called. break; case rapidjson::Type::kFalseType: - _data_string.emplace_back(true_value); + _backup_string.emplace_back(true_value); _string_nulls.push_back(false); break; case rapidjson::Type::kTrueType: - _data_string.emplace_back(false_value); + _backup_string.emplace_back(false_value); _string_nulls.push_back(false); break; case rapidjson::Type::kNullType: - _data_string.push_back({}); + _backup_string.emplace_back(); _string_nulls.push_back(true); break; default: - _data_string.push_back({}); + _backup_string.emplace_back(); _string_nulls.push_back(true); break; } diff --git a/be/src/vec/exprs/table_function/vexplode_json_array.h b/be/src/vec/exprs/table_function/vexplode_json_array.h index 6b5a0f7651..62f818a053 100644 --- a/be/src/vec/exprs/table_function/vexplode_json_array.h +++ b/be/src/vec/exprs/table_function/vexplode_json_array.h @@ -56,28 +56,6 @@ struct ParsedData { std::vector _string_nulls; char tmp_buf[128] = {0}; - void reset(ExplodeJsonArrayType type) { - switch (type) { - case ExplodeJsonArrayType::INT: - _data.clear(); - _backup_int.clear(); - break; - case ExplodeJsonArrayType::DOUBLE: - _data.clear(); - _backup_double.clear(); - break; - case ExplodeJsonArrayType::JSON: - case ExplodeJsonArrayType::STRING: - _data_string.clear(); - _backup_string.clear(); - _string_nulls.clear(); - break; - default: - CHECK(false) << type; - break; - } - } - void* get_value(ExplodeJsonArrayType type, int64_t offset, bool real = false) { switch (type) { case ExplodeJsonArrayType::INT: diff --git a/regression-test/data/query_p0/sql_functions/table_function/explode_json_array.out b/regression-test/data/query_p0/sql_functions/table_function/explode_json_array.out index 2300079d0a..ccc012e112 100644 --- a/regression-test/data/query_p0/sql_functions/table_function/explode_json_array.out +++ b/regression-test/data/query_p0/sql_functions/table_function/explode_json_array.out @@ -28,39 +28,39 @@ -- !explode_json_array9 -- -- !explode_json_array10 -- +100 John 30 1 Street 1 1.23 -3 +100 John 30 1 Street 1 22.214 -3 +100 John 30 1 Street 1 214.1 -3 100 John 30 1 Street 1 1.23 1 100 John 30 1 Street 1 22.214 1 100 John 30 1 Street 1 214.1 1 -100 John 30 1 Street 1 1.23 3 -100 John 30 1 Street 1 22.214 3 -100 John 30 1 Street 1 214.1 3 100 John 30 1 Street 1 1.23 b 100 John 30 1 Street 1 22.214 b 100 John 30 1 Street 1 214.1 b +200 Mary \N 1 Street 2 1.23 -3 +200 Mary \N 1 Street 2 22.214 -3 +200 Mary \N 1 Street 2 214.1 -3 200 Mary \N 1 Street 2 1.23 1 200 Mary \N 1 Street 2 22.214 1 200 Mary \N 1 Street 2 214.1 1 -200 Mary \N 1 Street 2 1.23 3 -200 Mary \N 1 Street 2 22.214 3 -200 Mary \N 1 Street 2 214.1 3 200 Mary \N 1 Street 2 1.23 b 200 Mary \N 1 Street 2 22.214 b 200 Mary \N 1 Street 2 214.1 b +300 Mike 80 3 Street 3 1.23 -3 +300 Mike 80 3 Street 3 22.214 -3 +300 Mike 80 3 Street 3 214.1 -3 300 Mike 80 3 Street 3 1.23 1 300 Mike 80 3 Street 3 22.214 1 300 Mike 80 3 Street 3 214.1 1 -300 Mike 80 3 Street 3 1.23 3 -300 Mike 80 3 Street 3 22.214 3 -300 Mike 80 3 Street 3 214.1 3 300 Mike 80 3 Street 3 1.23 b 300 Mike 80 3 Street 3 22.214 b 300 Mike 80 3 Street 3 214.1 b +400 Dan 50 4 Street 4 1.23 -3 +400 Dan 50 4 Street 4 22.214 -3 +400 Dan 50 4 Street 4 214.1 -3 400 Dan 50 4 Street 4 1.23 1 400 Dan 50 4 Street 4 22.214 1 400 Dan 50 4 Street 4 214.1 1 -400 Dan 50 4 Street 4 1.23 3 -400 Dan 50 4 Street 4 22.214 3 -400 Dan 50 4 Street 4 214.1 3 400 Dan 50 4 Street 4 1.23 b 400 Dan 50 4 Street 4 22.214 b 400 Dan 50 4 Street 4 214.1 b @@ -99,3 +99,117 @@ -- !explode_json_array13 -- -9223372036854775808 8 +-- !explode_json_array14 -- +100 John 30 1 Street 1 1.23 -1273982982312333 +100 John 30 1 Street 1 22.214 -1273982982312333 +100 John 30 1 Street 1 214.1 -1273982982312333 +100 John 30 1 Street 1 1.23 1182381637816312 +100 John 30 1 Street 1 22.214 1182381637816312 +100 John 30 1 Street 1 214.1 1182381637816312 +100 John 30 1 Street 1 1.23 b +100 John 30 1 Street 1 22.214 b +100 John 30 1 Street 1 214.1 b +200 Mary \N 1 Street 2 1.23 -1273982982312333 +200 Mary \N 1 Street 2 22.214 -1273982982312333 +200 Mary \N 1 Street 2 214.1 -1273982982312333 +200 Mary \N 1 Street 2 1.23 1182381637816312 +200 Mary \N 1 Street 2 22.214 1182381637816312 +200 Mary \N 1 Street 2 214.1 1182381637816312 +200 Mary \N 1 Street 2 1.23 b +200 Mary \N 1 Street 2 22.214 b +200 Mary \N 1 Street 2 214.1 b +300 Mike 80 3 Street 3 1.23 -1273982982312333 +300 Mike 80 3 Street 3 22.214 -1273982982312333 +300 Mike 80 3 Street 3 214.1 -1273982982312333 +300 Mike 80 3 Street 3 1.23 1182381637816312 +300 Mike 80 3 Street 3 22.214 1182381637816312 +300 Mike 80 3 Street 3 214.1 1182381637816312 +300 Mike 80 3 Street 3 1.23 b +300 Mike 80 3 Street 3 22.214 b +300 Mike 80 3 Street 3 214.1 b +400 Dan 50 4 Street 4 1.23 -1273982982312333 +400 Dan 50 4 Street 4 22.214 -1273982982312333 +400 Dan 50 4 Street 4 214.1 -1273982982312333 +400 Dan 50 4 Street 4 1.23 1182381637816312 +400 Dan 50 4 Street 4 22.214 1182381637816312 +400 Dan 50 4 Street 4 214.1 1182381637816312 +400 Dan 50 4 Street 4 1.23 b +400 Dan 50 4 Street 4 22.214 b +400 Dan 50 4 Street 4 214.1 b + +-- !explode_json_array15 -- +100 John 30 1 Street 1 1.23 b +100 John 30 1 Street 1 22.214 b +100 John 30 1 Street 1 214.1 b +100 John 30 1 Street 1 1.23 false +100 John 30 1 Street 1 22.214 false +100 John 30 1 Street 1 214.1 false +100 John 30 1 Street 1 1.23 true +100 John 30 1 Street 1 22.214 true +100 John 30 1 Street 1 214.1 true +200 Mary \N 1 Street 2 1.23 b +200 Mary \N 1 Street 2 22.214 b +200 Mary \N 1 Street 2 214.1 b +200 Mary \N 1 Street 2 1.23 false +200 Mary \N 1 Street 2 22.214 false +200 Mary \N 1 Street 2 214.1 false +200 Mary \N 1 Street 2 1.23 true +200 Mary \N 1 Street 2 22.214 true +200 Mary \N 1 Street 2 214.1 true +300 Mike 80 3 Street 3 1.23 b +300 Mike 80 3 Street 3 22.214 b +300 Mike 80 3 Street 3 214.1 b +300 Mike 80 3 Street 3 1.23 false +300 Mike 80 3 Street 3 22.214 false +300 Mike 80 3 Street 3 214.1 false +300 Mike 80 3 Street 3 1.23 true +300 Mike 80 3 Street 3 22.214 true +300 Mike 80 3 Street 3 214.1 true +400 Dan 50 4 Street 4 1.23 b +400 Dan 50 4 Street 4 22.214 b +400 Dan 50 4 Street 4 214.1 b +400 Dan 50 4 Street 4 1.23 false +400 Dan 50 4 Street 4 22.214 false +400 Dan 50 4 Street 4 214.1 false +400 Dan 50 4 Street 4 1.23 true +400 Dan 50 4 Street 4 22.214 true +400 Dan 50 4 Street 4 214.1 true + +-- !explode_json_array16 -- +100 John 30 1 Street 1 1.23 +100 John 30 1 Street 1 1.23 +100 John 30 1 Street 1 22.214 +100 John 30 1 Street 1 22.214 +100 John 30 1 Street 1 214.1 +100 John 30 1 Street 1 214.1 +100 John 30 1 Street 1 1.23 b +100 John 30 1 Street 1 22.214 b +100 John 30 1 Street 1 214.1 b +200 Mary \N 1 Street 2 1.23 +200 Mary \N 1 Street 2 1.23 +200 Mary \N 1 Street 2 22.214 +200 Mary \N 1 Street 2 22.214 +200 Mary \N 1 Street 2 214.1 +200 Mary \N 1 Street 2 214.1 +200 Mary \N 1 Street 2 1.23 b +200 Mary \N 1 Street 2 22.214 b +200 Mary \N 1 Street 2 214.1 b +300 Mike 80 3 Street 3 1.23 +300 Mike 80 3 Street 3 1.23 +300 Mike 80 3 Street 3 22.214 +300 Mike 80 3 Street 3 22.214 +300 Mike 80 3 Street 3 214.1 +300 Mike 80 3 Street 3 214.1 +300 Mike 80 3 Street 3 1.23 b +300 Mike 80 3 Street 3 22.214 b +300 Mike 80 3 Street 3 214.1 b +400 Dan 50 4 Street 4 1.23 +400 Dan 50 4 Street 4 1.23 +400 Dan 50 4 Street 4 22.214 +400 Dan 50 4 Street 4 22.214 +400 Dan 50 4 Street 4 214.1 +400 Dan 50 4 Street 4 214.1 +400 Dan 50 4 Street 4 1.23 b +400 Dan 50 4 Street 4 22.214 b +400 Dan 50 4 Street 4 214.1 b + diff --git a/regression-test/suites/query_p0/sql_functions/table_function/explode_json_array.groovy b/regression-test/suites/query_p0/sql_functions/table_function/explode_json_array.groovy index cd4e018243..e4cbe3feda 100644 --- a/regression-test/suites/query_p0/sql_functions/table_function/explode_json_array.groovy +++ b/regression-test/suites/query_p0/sql_functions/table_function/explode_json_array.groovy @@ -55,7 +55,7 @@ suite("explode_json_array") { ORDER BY id, c_age """ qt_explode_json_array10 """ SELECT id, name, age, class, address, d, c FROM ${tableName} - LATERAL VIEW EXPLODE_JSON_ARRAY_STRING('[1, "b", 3]') t1 as c + LATERAL VIEW EXPLODE_JSON_ARRAY_STRING('[1, "b", -3]') t1 as c LATERAL VIEW EXPLODE_JSON_ARRAY_DOUBLE('[1.23, 22.214, 214.1]') t2 as d ORDER BY id, c, d """ @@ -74,4 +74,18 @@ suite("explode_json_array") { LATERAL VIEW EXPLODE_JSON_ARRAY_INT('[-92233720368547758071,-92233720368547758081]') t1 as c_age GROUP BY c_age ORDER BY c_age """ + qt_explode_json_array14 """ SELECT id, name, age, class, address, d, c FROM ${tableName} + LATERAL VIEW EXPLODE_JSON_ARRAY_STRING('[1182381637816312, "b", -1273982982312333]') t1 as c + LATERAL VIEW EXPLODE_JSON_ARRAY_DOUBLE('[1.23, 22.214, 214.1]') t2 as d + ORDER BY id, c, d """ + + qt_explode_json_array15 """ SELECT id, name, age, class, address, d, c FROM ${tableName} + LATERAL VIEW EXPLODE_JSON_ARRAY_STRING('[true, "b", false]') t1 as c + LATERAL VIEW EXPLODE_JSON_ARRAY_DOUBLE('[1.23, 22.214, 214.1]') t2 as d + ORDER BY id, c, d """ + + qt_explode_json_array16 """ SELECT id, name, age, class, address, d, c FROM ${tableName} + LATERAL VIEW EXPLODE_JSON_ARRAY_STRING('[null, "b", null]') t1 as c + LATERAL VIEW EXPLODE_JSON_ARRAY_DOUBLE('[1.23, 22.214, 214.1]') t2 as d + ORDER BY id, c, d """ }