Boost tokenizer requires explicit "." after "$" to correctly extract JSON path tokens. Without this, expressions like "$[0].key" cannot be properly split, causing issues in downstream logic. This commit ensures a "." is automatically added after "$" to maintain consistent token parsing behavior.
This commit is contained in:
@ -145,45 +145,7 @@ rapidjson::Value* match_value(const std::vector<JsonPath>& parsed_paths, rapidjs
|
||||
const std::string& col = parsed_paths[i].key;
|
||||
int index = parsed_paths[i].idx;
|
||||
if (LIKELY(!col.empty())) {
|
||||
if (root->IsArray()) {
|
||||
array_obj = static_cast<rapidjson::Value*>(
|
||||
mem_allocator.Malloc(sizeof(rapidjson::Value)));
|
||||
array_obj->SetArray();
|
||||
bool is_null = true;
|
||||
|
||||
// if array ,loop the array,find out all Objects,then find the results from the objects
|
||||
for (int j = 0; j < root->Size(); j++) {
|
||||
rapidjson::Value* json_elem = &((*root)[j]);
|
||||
|
||||
if (json_elem->IsArray() || json_elem->IsNull()) {
|
||||
continue;
|
||||
} else {
|
||||
if (!json_elem->IsObject()) {
|
||||
continue;
|
||||
}
|
||||
if (!json_elem->HasMember(col.c_str())) {
|
||||
if (is_insert_null) { // not found item, then insert a null object.
|
||||
is_null = false;
|
||||
rapidjson::Value nullObject(rapidjson::kNullType);
|
||||
array_obj->PushBack(nullObject, mem_allocator);
|
||||
}
|
||||
continue;
|
||||
}
|
||||
rapidjson::Value* obj = &((*json_elem)[col.c_str()]);
|
||||
if (obj->IsArray()) {
|
||||
is_null = false;
|
||||
for (int k = 0; k < obj->Size(); k++) {
|
||||
array_obj->PushBack((*obj)[k], mem_allocator);
|
||||
}
|
||||
} else if (!obj->IsNull()) {
|
||||
is_null = false;
|
||||
array_obj->PushBack(*obj, mem_allocator);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
root = is_null ? &(array_obj->SetNull()) : array_obj;
|
||||
} else if (root->IsObject()) {
|
||||
if (root->IsObject()) {
|
||||
if (!root->HasMember(col.c_str())) {
|
||||
return nullptr;
|
||||
} else {
|
||||
@ -234,8 +196,17 @@ rapidjson::Value* get_json_object(std::string_view json_string, std::string_view
|
||||
|
||||
//Cannot use '\' as the last character, return NULL
|
||||
if (path_string.back() == '\\') {
|
||||
document->SetNull();
|
||||
return document;
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
std::string fixed_string;
|
||||
if (path_string.size() >= 2 && path_string[0] == '$' && path_string[1] != '.') {
|
||||
// Boost tokenizer requires explicit "." after "$" to correctly extract JSON path tokens.
|
||||
// Without this, expressions like "$[0].key" cannot be properly split.
|
||||
// This commit ensures a "." is automatically added after "$" to maintain consistent token parsing behavior.
|
||||
fixed_string = "$.";
|
||||
fixed_string += path_string.substr(1);
|
||||
path_string = fixed_string;
|
||||
}
|
||||
|
||||
try {
|
||||
@ -252,13 +223,13 @@ rapidjson::Value* get_json_object(std::string_view json_string, std::string_view
|
||||
}
|
||||
} catch (boost::escaped_list_error&) {
|
||||
// meet unknown escape sequence, example '$.name\k'
|
||||
return document;
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
parsed_paths = &tmp_parsed_paths;
|
||||
|
||||
if (!(*parsed_paths)[0].is_valid) {
|
||||
return document;
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
if (UNLIKELY((*parsed_paths).size() == 1)) {
|
||||
@ -271,10 +242,7 @@ rapidjson::Value* get_json_object(std::string_view json_string, std::string_view
|
||||
|
||||
document->Parse(json_string.data(), json_string.size());
|
||||
if (UNLIKELY(document->HasParseError())) {
|
||||
// VLOG_CRITICAL << "Error at offset " << document->GetErrorOffset() << ": "
|
||||
// << GetParseError_En(document->GetParseError());
|
||||
document->SetNull();
|
||||
return document;
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
return match_value(*parsed_paths, document, document->GetAllocator());
|
||||
@ -849,9 +817,9 @@ struct FunctionJsonQuoteImpl {
|
||||
struct FunctionJsonExtractImpl {
|
||||
static constexpr auto name = "json_extract";
|
||||
|
||||
static rapidjson::Value parse_json(const ColumnString* json_col, const ColumnString* path_col,
|
||||
rapidjson::Document::AllocatorType& allocator,
|
||||
const int row) {
|
||||
static std::pair<bool, rapidjson::Value> parse_json(
|
||||
const ColumnString* json_col, const ColumnString* path_col,
|
||||
rapidjson::Document::AllocatorType& allocator, const int row) {
|
||||
rapidjson::Value value;
|
||||
rapidjson::Document document;
|
||||
|
||||
@ -860,11 +828,14 @@ struct FunctionJsonExtractImpl {
|
||||
const auto path = path_col->get_data_at(row);
|
||||
std::string_view path_string(path.data, path.size);
|
||||
|
||||
auto root = get_json_object<JSON_FUN_STRING>(json_string, path_string, &document);
|
||||
auto* root = get_json_object<JSON_FUN_STRING>(json_string, path_string, &document);
|
||||
bool found = false;
|
||||
if (root != nullptr) {
|
||||
found = true;
|
||||
value.CopyFrom(*root, allocator);
|
||||
}
|
||||
return value;
|
||||
|
||||
return {found, std::move(value)};
|
||||
}
|
||||
|
||||
static void execute(const std::vector<const ColumnString*>& data_columns,
|
||||
@ -874,30 +845,41 @@ struct FunctionJsonExtractImpl {
|
||||
rapidjson::StringBuffer buf;
|
||||
rapidjson::Writer<rapidjson::StringBuffer> writer(buf);
|
||||
|
||||
const auto json_col = data_columns[0];
|
||||
const auto* json_col = data_columns[0];
|
||||
for (size_t row = 0; row < input_rows_count; row++) {
|
||||
rapidjson::Value value;
|
||||
if (data_columns.size() == 2) {
|
||||
value = parse_json(json_col, data_columns[1], allocator, row);
|
||||
auto result = parse_json(json_col, data_columns[1], allocator, row);
|
||||
if (result.first) {
|
||||
value = std::move(result.second);
|
||||
} else {
|
||||
null_map[row] = 1;
|
||||
result_column.insert_default();
|
||||
continue;
|
||||
}
|
||||
} else {
|
||||
bool found_any = false;
|
||||
value.SetArray();
|
||||
value.Reserve(data_columns.size() - 1, allocator);
|
||||
for (size_t col = 1; col < data_columns.size(); ++col) {
|
||||
value.PushBack(parse_json(json_col, data_columns[col], allocator, row),
|
||||
allocator);
|
||||
auto result = parse_json(json_col, data_columns[col], allocator, row);
|
||||
if (result.first) {
|
||||
found_any = true;
|
||||
value.PushBack(std::move(result.second), allocator);
|
||||
}
|
||||
}
|
||||
if (!found_any) {
|
||||
null_map[row] = 1;
|
||||
result_column.insert_default();
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
||||
if (value.IsNull()) {
|
||||
null_map[row] = 1;
|
||||
result_column.insert_default();
|
||||
} else {
|
||||
// write value as string
|
||||
buf.Clear();
|
||||
writer.Reset(buf);
|
||||
value.Accept(writer);
|
||||
result_column.insert_data(buf.GetString(), buf.GetSize());
|
||||
}
|
||||
// write value as string
|
||||
buf.Clear();
|
||||
writer.Reset(buf);
|
||||
value.Accept(writer);
|
||||
result_column.insert_data(buf.GetString(), buf.GetSize());
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
@ -232,7 +232,7 @@ TEST_F(JsonbParserTest, ParseJsonWithLongInt) {
|
||||
|
||||
TEST_F(JsonbParserTest, ParseInvalidJsonFormat) {
|
||||
std::string_view invalid_json = R"({"key": "value")";
|
||||
EXPECT_EQ(parse_json_and_check(invalid_json, invalid_json), JsonbErrType::E_INVALID_KEY_STRING);
|
||||
EXPECT_NE(parse_json_and_check(invalid_json, invalid_json), JsonbErrType::E_NONE);
|
||||
}
|
||||
|
||||
TEST_F(JsonbParserTest, ParseJsonWithInvalidKeyType) {
|
||||
|
||||
@ -72,15 +72,13 @@ TEST(FunctionJsonTEST, GetJsonStringTest) {
|
||||
std::string func_name = "get_json_string";
|
||||
InputTypeSet input_types = {TypeIndex::String, TypeIndex::String};
|
||||
DataSet data_set = {
|
||||
{{VARCHAR("{\"k1\":\"v1\", \"k2\":\"v2\"}"), VARCHAR("$.k1")}, VARCHAR("v1")},
|
||||
{{VARCHAR("{\"k1\":\"v1\", \"my.key\":[\"e1\", \"e2\", \"e3\"]}"),
|
||||
VARCHAR("$.\"my.key\"[1]")},
|
||||
{{VARCHAR(R"({"k1":"v1", "k2":"v2"})"), VARCHAR("$.k1")}, VARCHAR("v1")},
|
||||
{{VARCHAR(R"({"k1":"v1", "my.key":["e1", "e2", "e3"]})"), VARCHAR("$.\"my.key\"[1]")},
|
||||
VARCHAR("e2")},
|
||||
{{VARCHAR("{\"k1.key\":{\"k2\":[\"v1\", \"v2\"]}}"), VARCHAR("$.\"k1.key\".k2[0]")},
|
||||
{{VARCHAR(R"({"k1.key":{"k2":["v1", "v2"]}})"), VARCHAR("$.\"k1.key\".k2[0]")},
|
||||
VARCHAR("v1")},
|
||||
{{VARCHAR("[{\"k1\":\"v1\"}, {\"k2\":\"v2\"}, {\"k1\":\"v3\"}, {\"k1\":\"v4\"}]"),
|
||||
VARCHAR("$.k1")},
|
||||
VARCHAR("[\"v1\",\"v3\",\"v4\"]")}};
|
||||
{{VARCHAR(R"([{"k1":"v1"}, {"k2":"v2"}, {"k1":"v3"}, {"k1":"v4"}])"), VARCHAR("$.k1")},
|
||||
Null()}};
|
||||
|
||||
static_cast<void>(check_function<DataTypeString, true>(func_name, input_types, data_set));
|
||||
}
|
||||
|
||||
@ -6189,7 +6189,7 @@ false
|
||||
14 [123,456] \N
|
||||
15 ["abc","def"] \N
|
||||
16 [null,true,false,100,6.18,"abc"] \N
|
||||
17 [{"k1":"v41","k2":400},1,"a",3.14] ["v41"]
|
||||
17 [{"k1":"v41","k2":400},1,"a",3.14] \N
|
||||
18 {"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]} "v31"
|
||||
26 \N \N
|
||||
27 {"k1":"v1","k2":200} "v1"
|
||||
@ -6203,61 +6203,61 @@ false
|
||||
|
||||
-- !select --
|
||||
1 \N \N
|
||||
2 null [null,null]
|
||||
3 true [null,null]
|
||||
4 false [null,null]
|
||||
5 100 [null,null]
|
||||
6 10000 [null,null]
|
||||
7 1000000000 [null,null]
|
||||
8 1152921504606846976 [null,null]
|
||||
9 6.18 [null,null]
|
||||
10 "abcd" [null,null]
|
||||
11 {} [null,null]
|
||||
12 {"k1":"v31","k2":300} [300,null]
|
||||
13 [] [null,null]
|
||||
14 [123,456] [null,456]
|
||||
15 ["abc","def"] [null,"def"]
|
||||
16 [null,true,false,100,6.18,"abc"] [null,true]
|
||||
17 [{"k1":"v41","k2":400},1,"a",3.14] [[400],1]
|
||||
18 {"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]} [300,null]
|
||||
2 null \N
|
||||
3 true \N
|
||||
4 false \N
|
||||
5 100 \N
|
||||
6 10000 \N
|
||||
7 1000000000 \N
|
||||
8 1152921504606846976 \N
|
||||
9 6.18 \N
|
||||
10 "abcd" \N
|
||||
11 {} \N
|
||||
12 {"k1":"v31","k2":300} [300]
|
||||
13 [] \N
|
||||
14 [123,456] [456]
|
||||
15 ["abc","def"] ["def"]
|
||||
16 [null,true,false,100,6.18,"abc"] [true]
|
||||
17 [{"k1":"v41","k2":400},1,"a",3.14] [1]
|
||||
18 {"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]} [300]
|
||||
26 \N \N
|
||||
27 {"k1":"v1","k2":200} [200,null]
|
||||
28 {"a.b.c":{"k1.a1":"v31","k2":300},"a":"niu"} [null,null]
|
||||
29 12524337771678448270 [null,null]
|
||||
30 -9223372036854775808 [null,null]
|
||||
31 18446744073709551615 [null,null]
|
||||
32 {"":"v1"} [null,null]
|
||||
33 {"":1,"":"v1"} [null,null]
|
||||
34 {"":1,"ab":"v1","":"v1","":2} [null,null]
|
||||
27 {"k1":"v1","k2":200} [200]
|
||||
28 {"a.b.c":{"k1.a1":"v31","k2":300},"a":"niu"} \N
|
||||
29 12524337771678448270 \N
|
||||
30 -9223372036854775808 \N
|
||||
31 18446744073709551615 \N
|
||||
32 {"":"v1"} \N
|
||||
33 {"":1,"":"v1"} \N
|
||||
34 {"":1,"ab":"v1","":"v1","":2} \N
|
||||
|
||||
-- !select --
|
||||
1 \N \N
|
||||
2 null [null,null]
|
||||
3 true [null,null]
|
||||
4 false [null,null]
|
||||
5 100 [null,null]
|
||||
6 10000 [null,null]
|
||||
7 1000000000 [null,null]
|
||||
8 1152921504606846976 [null,null]
|
||||
9 6.18 [null,null]
|
||||
10 "abcd" [null,null]
|
||||
11 {} [null,null]
|
||||
12 {"k1":"v31","k2":300} [300,null]
|
||||
13 [] [null,null]
|
||||
14 [123,456] [null,null]
|
||||
15 ["abc","def"] [null,null]
|
||||
16 [null,true,false,100,6.18,"abc"] [null,null]
|
||||
17 [{"k1":"v41","k2":400},1,"a",3.14] [[400],null]
|
||||
18 {"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]} [300,null]
|
||||
2 null \N
|
||||
3 true \N
|
||||
4 false \N
|
||||
5 100 \N
|
||||
6 10000 \N
|
||||
7 1000000000 \N
|
||||
8 1152921504606846976 \N
|
||||
9 6.18 \N
|
||||
10 "abcd" \N
|
||||
11 {} \N
|
||||
12 {"k1":"v31","k2":300} [300]
|
||||
13 [] \N
|
||||
14 [123,456] \N
|
||||
15 ["abc","def"] \N
|
||||
16 [null,true,false,100,6.18,"abc"] \N
|
||||
17 [{"k1":"v41","k2":400},1,"a",3.14] \N
|
||||
18 {"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]} [300]
|
||||
26 \N \N
|
||||
27 {"k1":"v1","k2":200} [200,null]
|
||||
28 {"a.b.c":{"k1.a1":"v31","k2":300},"a":"niu"} [null,null]
|
||||
29 12524337771678448270 [null,null]
|
||||
30 -9223372036854775808 [null,null]
|
||||
31 18446744073709551615 [null,null]
|
||||
32 {"":"v1"} [null,null]
|
||||
33 {"":1,"":"v1"} [null,null]
|
||||
34 {"":1,"ab":"v1","":"v1","":2} [null,null]
|
||||
27 {"k1":"v1","k2":200} [200]
|
||||
28 {"a.b.c":{"k1.a1":"v31","k2":300},"a":"niu"} \N
|
||||
29 12524337771678448270 \N
|
||||
30 -9223372036854775808 \N
|
||||
31 18446744073709551615 \N
|
||||
32 {"":"v1"} \N
|
||||
33 {"":1,"":"v1"} \N
|
||||
34 {"":1,"ab":"v1","":"v1","":2} \N
|
||||
|
||||
-- !select --
|
||||
1 \N \N
|
||||
@ -6290,32 +6290,32 @@ false
|
||||
|
||||
-- !select --
|
||||
1 \N \N
|
||||
2 null [null,null,null]
|
||||
3 true [null,null,null]
|
||||
4 false [null,null,null]
|
||||
5 100 [null,null,null]
|
||||
6 10000 [null,null,null]
|
||||
7 1000000000 [null,null,null]
|
||||
8 1152921504606846976 [null,null,null]
|
||||
9 6.18 [null,null,null]
|
||||
10 "abcd" [null,null,null]
|
||||
11 {} [null,null,null]
|
||||
12 {"k1":"v31","k2":300} [null,null,null]
|
||||
13 [] [null,null,null]
|
||||
14 [123,456] [null,null,null]
|
||||
15 ["abc","def"] [null,null,null]
|
||||
16 [null,true,false,100,6.18,"abc"] [null,null,null]
|
||||
17 [{"k1":"v41","k2":400},1,"a",3.14] [null,null,null]
|
||||
2 null \N
|
||||
3 true \N
|
||||
4 false \N
|
||||
5 100 \N
|
||||
6 10000 \N
|
||||
7 1000000000 \N
|
||||
8 1152921504606846976 \N
|
||||
9 6.18 \N
|
||||
10 "abcd" \N
|
||||
11 {} \N
|
||||
12 {"k1":"v31","k2":300} \N
|
||||
13 [] \N
|
||||
14 [123,456] \N
|
||||
15 ["abc","def"] \N
|
||||
16 [null,true,false,100,6.18,"abc"] \N
|
||||
17 [{"k1":"v41","k2":400},1,"a",3.14] \N
|
||||
18 {"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]} ["v41",400,"a"]
|
||||
26 \N \N
|
||||
27 {"k1":"v1","k2":200} [null,null,null]
|
||||
28 {"a.b.c":{"k1.a1":"v31","k2":300},"a":"niu"} [null,null,null]
|
||||
29 12524337771678448270 [null,null,null]
|
||||
30 -9223372036854775808 [null,null,null]
|
||||
31 18446744073709551615 [null,null,null]
|
||||
32 {"":"v1"} [null,null,null]
|
||||
33 {"":1,"":"v1"} [null,null,null]
|
||||
34 {"":1,"ab":"v1","":"v1","":2} [null,null,null]
|
||||
27 {"k1":"v1","k2":200} \N
|
||||
28 {"a.b.c":{"k1.a1":"v31","k2":300},"a":"niu"} \N
|
||||
29 12524337771678448270 \N
|
||||
30 -9223372036854775808 \N
|
||||
31 18446744073709551615 \N
|
||||
32 {"":"v1"} \N
|
||||
33 {"":1,"":"v1"} \N
|
||||
34 {"":1,"ab":"v1","":"v1","":2} \N
|
||||
|
||||
-- !select --
|
||||
2 null
|
||||
@ -11664,7 +11664,7 @@ false
|
||||
14 [123,456] \N
|
||||
15 ["abc","def"] \N
|
||||
16 [null,true,false,100,6.18,"abc"] \N
|
||||
17 [{"k1":"v41","k2":400},1,"a",3.14] ["v41"]
|
||||
17 [{"k1":"v41","k2":400},1,"a",3.14] \N
|
||||
18 {"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]} "v31"
|
||||
27 {"k1":"v1","k2":200} "v1"
|
||||
28 {"a.b.c":{"k1.a1":"v31","k2":300},"a":"niu"} \N
|
||||
@ -11676,58 +11676,58 @@ false
|
||||
34 {"":1,"ab":"v1","":"v1","":2} \N
|
||||
|
||||
-- !select --
|
||||
2 null [null,null]
|
||||
3 true [null,null]
|
||||
4 false [null,null]
|
||||
5 100 [null,null]
|
||||
6 10000 [null,null]
|
||||
7 1000000000 [null,null]
|
||||
8 1152921504606846976 [null,null]
|
||||
9 6.18 [null,null]
|
||||
10 "abcd" [null,null]
|
||||
11 {} [null,null]
|
||||
12 {"k1":"v31","k2":300} [300,null]
|
||||
13 [] [null,null]
|
||||
14 [123,456] [null,456]
|
||||
15 ["abc","def"] [null,"def"]
|
||||
16 [null,true,false,100,6.18,"abc"] [null,true]
|
||||
17 [{"k1":"v41","k2":400},1,"a",3.14] [[400],1]
|
||||
18 {"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]} [300,null]
|
||||
27 {"k1":"v1","k2":200} [200,null]
|
||||
28 {"a.b.c":{"k1.a1":"v31","k2":300},"a":"niu"} [null,null]
|
||||
29 12524337771678448270 [null,null]
|
||||
30 -9223372036854775808 [null,null]
|
||||
31 18446744073709551615 [null,null]
|
||||
32 {"":"v1"} [null,null]
|
||||
33 {"":1,"":"v1"} [null,null]
|
||||
34 {"":1,"ab":"v1","":"v1","":2} [null,null]
|
||||
2 null \N
|
||||
3 true \N
|
||||
4 false \N
|
||||
5 100 \N
|
||||
6 10000 \N
|
||||
7 1000000000 \N
|
||||
8 1152921504606846976 \N
|
||||
9 6.18 \N
|
||||
10 "abcd" \N
|
||||
11 {} \N
|
||||
12 {"k1":"v31","k2":300} [300]
|
||||
13 [] \N
|
||||
14 [123,456] [456]
|
||||
15 ["abc","def"] ["def"]
|
||||
16 [null,true,false,100,6.18,"abc"] [true]
|
||||
17 [{"k1":"v41","k2":400},1,"a",3.14] [1]
|
||||
18 {"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]} [300]
|
||||
27 {"k1":"v1","k2":200} [200]
|
||||
28 {"a.b.c":{"k1.a1":"v31","k2":300},"a":"niu"} \N
|
||||
29 12524337771678448270 \N
|
||||
30 -9223372036854775808 \N
|
||||
31 18446744073709551615 \N
|
||||
32 {"":"v1"} \N
|
||||
33 {"":1,"":"v1"} \N
|
||||
34 {"":1,"ab":"v1","":"v1","":2} \N
|
||||
|
||||
-- !select --
|
||||
2 null [null,null]
|
||||
3 true [null,null]
|
||||
4 false [null,null]
|
||||
5 100 [null,null]
|
||||
6 10000 [null,null]
|
||||
7 1000000000 [null,null]
|
||||
8 1152921504606846976 [null,null]
|
||||
9 6.18 [null,null]
|
||||
10 "abcd" [null,null]
|
||||
11 {} [null,null]
|
||||
12 {"k1":"v31","k2":300} [300,null]
|
||||
13 [] [null,null]
|
||||
14 [123,456] [null,null]
|
||||
15 ["abc","def"] [null,null]
|
||||
16 [null,true,false,100,6.18,"abc"] [null,null]
|
||||
17 [{"k1":"v41","k2":400},1,"a",3.14] [[400],null]
|
||||
18 {"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]} [300,null]
|
||||
27 {"k1":"v1","k2":200} [200,null]
|
||||
28 {"a.b.c":{"k1.a1":"v31","k2":300},"a":"niu"} [null,null]
|
||||
29 12524337771678448270 [null,null]
|
||||
30 -9223372036854775808 [null,null]
|
||||
31 18446744073709551615 [null,null]
|
||||
32 {"":"v1"} [null,null]
|
||||
33 {"":1,"":"v1"} [null,null]
|
||||
34 {"":1,"ab":"v1","":"v1","":2} [null,null]
|
||||
2 null \N
|
||||
3 true \N
|
||||
4 false \N
|
||||
5 100 \N
|
||||
6 10000 \N
|
||||
7 1000000000 \N
|
||||
8 1152921504606846976 \N
|
||||
9 6.18 \N
|
||||
10 "abcd" \N
|
||||
11 {} \N
|
||||
12 {"k1":"v31","k2":300} [300]
|
||||
13 [] \N
|
||||
14 [123,456] \N
|
||||
15 ["abc","def"] \N
|
||||
16 [null,true,false,100,6.18,"abc"] \N
|
||||
17 [{"k1":"v41","k2":400},1,"a",3.14] \N
|
||||
18 {"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]} [300]
|
||||
27 {"k1":"v1","k2":200} [200]
|
||||
28 {"a.b.c":{"k1.a1":"v31","k2":300},"a":"niu"} \N
|
||||
29 12524337771678448270 \N
|
||||
30 -9223372036854775808 \N
|
||||
31 18446744073709551615 \N
|
||||
32 {"":"v1"} \N
|
||||
33 {"":1,"":"v1"} \N
|
||||
34 {"":1,"ab":"v1","":"v1","":2} \N
|
||||
|
||||
-- !select --
|
||||
2 null \N
|
||||
@ -11757,31 +11757,31 @@ false
|
||||
34 {"":1,"ab":"v1","":"v1","":2} \N
|
||||
|
||||
-- !select --
|
||||
2 null [null,null,null]
|
||||
3 true [null,null,null]
|
||||
4 false [null,null,null]
|
||||
5 100 [null,null,null]
|
||||
6 10000 [null,null,null]
|
||||
7 1000000000 [null,null,null]
|
||||
8 1152921504606846976 [null,null,null]
|
||||
9 6.18 [null,null,null]
|
||||
10 "abcd" [null,null,null]
|
||||
11 {} [null,null,null]
|
||||
12 {"k1":"v31","k2":300} [null,null,null]
|
||||
13 [] [null,null,null]
|
||||
14 [123,456] [null,null,null]
|
||||
15 ["abc","def"] [null,null,null]
|
||||
16 [null,true,false,100,6.18,"abc"] [null,null,null]
|
||||
17 [{"k1":"v41","k2":400},1,"a",3.14] [null,null,null]
|
||||
2 null \N
|
||||
3 true \N
|
||||
4 false \N
|
||||
5 100 \N
|
||||
6 10000 \N
|
||||
7 1000000000 \N
|
||||
8 1152921504606846976 \N
|
||||
9 6.18 \N
|
||||
10 "abcd" \N
|
||||
11 {} \N
|
||||
12 {"k1":"v31","k2":300} \N
|
||||
13 [] \N
|
||||
14 [123,456] \N
|
||||
15 ["abc","def"] \N
|
||||
16 [null,true,false,100,6.18,"abc"] \N
|
||||
17 [{"k1":"v41","k2":400},1,"a",3.14] \N
|
||||
18 {"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]} ["v41",400,"a"]
|
||||
27 {"k1":"v1","k2":200} [null,null,null]
|
||||
28 {"a.b.c":{"k1.a1":"v31","k2":300},"a":"niu"} [null,null,null]
|
||||
29 12524337771678448270 [null,null,null]
|
||||
30 -9223372036854775808 [null,null,null]
|
||||
31 18446744073709551615 [null,null,null]
|
||||
32 {"":"v1"} [null,null,null]
|
||||
33 {"":1,"":"v1"} [null,null,null]
|
||||
34 {"":1,"ab":"v1","":"v1","":2} [null,null,null]
|
||||
27 {"k1":"v1","k2":200} \N
|
||||
28 {"a.b.c":{"k1.a1":"v31","k2":300},"a":"niu"} \N
|
||||
29 12524337771678448270 \N
|
||||
30 -9223372036854775808 \N
|
||||
31 18446744073709551615 \N
|
||||
32 {"":"v1"} \N
|
||||
33 {"":1,"":"v1"} \N
|
||||
34 {"":1,"ab":"v1","":"v1","":2} \N
|
||||
|
||||
-- !sql_json_parse --
|
||||
{"":"v1"}
|
||||
|
||||
@ -8187,7 +8187,7 @@ false
|
||||
14 [123,456] \N
|
||||
15 ["abc","def"] \N
|
||||
16 [null,true,false,100,6.18,"abc"] \N
|
||||
17 [{"k1":"v41","k2":400},1,"a",3.14] ["v41"]
|
||||
17 [{"k1":"v41","k2":400},1,"a",3.14] \N
|
||||
18 {"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]} "v31"
|
||||
26 \N \N
|
||||
27 {"k1":"v1","k2":200} "v1"
|
||||
@ -8201,61 +8201,61 @@ false
|
||||
|
||||
-- !select --
|
||||
1 \N \N
|
||||
2 null [null,null]
|
||||
3 true [null,null]
|
||||
4 false [null,null]
|
||||
5 100 [null,null]
|
||||
6 10000 [null,null]
|
||||
7 1000000000 [null,null]
|
||||
8 1152921504606846976 [null,null]
|
||||
9 6.18 [null,null]
|
||||
10 "abcd" [null,null]
|
||||
11 {} [null,null]
|
||||
12 {"k1":"v31","k2":300} [300,null]
|
||||
13 [] [null,null]
|
||||
14 [123,456] [null,456]
|
||||
15 ["abc","def"] [null,"def"]
|
||||
16 [null,true,false,100,6.18,"abc"] [null,true]
|
||||
17 [{"k1":"v41","k2":400},1,"a",3.14] [[400],1]
|
||||
18 {"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]} [300,null]
|
||||
2 null \N
|
||||
3 true \N
|
||||
4 false \N
|
||||
5 100 \N
|
||||
6 10000 \N
|
||||
7 1000000000 \N
|
||||
8 1152921504606846976 \N
|
||||
9 6.18 \N
|
||||
10 "abcd" \N
|
||||
11 {} \N
|
||||
12 {"k1":"v31","k2":300} [300]
|
||||
13 [] \N
|
||||
14 [123,456] [456]
|
||||
15 ["abc","def"] ["def"]
|
||||
16 [null,true,false,100,6.18,"abc"] [true]
|
||||
17 [{"k1":"v41","k2":400},1,"a",3.14] [1]
|
||||
18 {"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]} [300]
|
||||
26 \N \N
|
||||
27 {"k1":"v1","k2":200} [200,null]
|
||||
28 {"a.b.c":{"k1.a1":"v31","k2":300},"a":"niu"} [null,null]
|
||||
29 12524337771678448270 [null,null]
|
||||
30 -9223372036854775808 [null,null]
|
||||
31 18446744073709551615 [null,null]
|
||||
32 {"":"v1"} [null,null]
|
||||
33 {"":1,"":"v1"} [null,null]
|
||||
34 {"":1,"ab":"v1","":"v1","":2} [null,null]
|
||||
27 {"k1":"v1","k2":200} [200]
|
||||
28 {"a.b.c":{"k1.a1":"v31","k2":300},"a":"niu"} \N
|
||||
29 12524337771678448270 \N
|
||||
30 -9223372036854775808 \N
|
||||
31 18446744073709551615 \N
|
||||
32 {"":"v1"} \N
|
||||
33 {"":1,"":"v1"} \N
|
||||
34 {"":1,"ab":"v1","":"v1","":2} \N
|
||||
|
||||
-- !select --
|
||||
1 \N \N
|
||||
2 null [null,null]
|
||||
3 true [null,null]
|
||||
4 false [null,null]
|
||||
5 100 [null,null]
|
||||
6 10000 [null,null]
|
||||
7 1000000000 [null,null]
|
||||
8 1152921504606846976 [null,null]
|
||||
9 6.18 [null,null]
|
||||
10 "abcd" [null,null]
|
||||
11 {} [null,null]
|
||||
12 {"k1":"v31","k2":300} [300,null]
|
||||
13 [] [null,null]
|
||||
14 [123,456] [null,null]
|
||||
15 ["abc","def"] [null,null]
|
||||
16 [null,true,false,100,6.18,"abc"] [null,null]
|
||||
17 [{"k1":"v41","k2":400},1,"a",3.14] [[400],null]
|
||||
18 {"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]} [300,null]
|
||||
2 null \N
|
||||
3 true \N
|
||||
4 false \N
|
||||
5 100 \N
|
||||
6 10000 \N
|
||||
7 1000000000 \N
|
||||
8 1152921504606846976 \N
|
||||
9 6.18 \N
|
||||
10 "abcd" \N
|
||||
11 {} \N
|
||||
12 {"k1":"v31","k2":300} [300]
|
||||
13 [] \N
|
||||
14 [123,456] \N
|
||||
15 ["abc","def"] \N
|
||||
16 [null,true,false,100,6.18,"abc"] \N
|
||||
17 [{"k1":"v41","k2":400},1,"a",3.14] \N
|
||||
18 {"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]} [300]
|
||||
26 \N \N
|
||||
27 {"k1":"v1","k2":200} [200,null]
|
||||
28 {"a.b.c":{"k1.a1":"v31","k2":300},"a":"niu"} [null,null]
|
||||
29 12524337771678448270 [null,null]
|
||||
30 -9223372036854775808 [null,null]
|
||||
31 18446744073709551615 [null,null]
|
||||
32 {"":"v1"} [null,null]
|
||||
33 {"":1,"":"v1"} [null,null]
|
||||
34 {"":1,"ab":"v1","":"v1","":2} [null,null]
|
||||
27 {"k1":"v1","k2":200} [200]
|
||||
28 {"a.b.c":{"k1.a1":"v31","k2":300},"a":"niu"} \N
|
||||
29 12524337771678448270 \N
|
||||
30 -9223372036854775808 \N
|
||||
31 18446744073709551615 \N
|
||||
32 {"":"v1"} \N
|
||||
33 {"":1,"":"v1"} \N
|
||||
34 {"":1,"ab":"v1","":"v1","":2} \N
|
||||
|
||||
-- !select --
|
||||
1 \N \N
|
||||
@ -8288,32 +8288,32 @@ false
|
||||
|
||||
-- !select --
|
||||
1 \N \N
|
||||
2 null [null,null,null]
|
||||
3 true [null,null,null]
|
||||
4 false [null,null,null]
|
||||
5 100 [null,null,null]
|
||||
6 10000 [null,null,null]
|
||||
7 1000000000 [null,null,null]
|
||||
8 1152921504606846976 [null,null,null]
|
||||
9 6.18 [null,null,null]
|
||||
10 "abcd" [null,null,null]
|
||||
11 {} [null,null,null]
|
||||
12 {"k1":"v31","k2":300} [null,null,null]
|
||||
13 [] [null,null,null]
|
||||
14 [123,456] [null,null,null]
|
||||
15 ["abc","def"] [null,null,null]
|
||||
16 [null,true,false,100,6.18,"abc"] [null,null,null]
|
||||
17 [{"k1":"v41","k2":400},1,"a",3.14] [null,null,null]
|
||||
2 null \N
|
||||
3 true \N
|
||||
4 false \N
|
||||
5 100 \N
|
||||
6 10000 \N
|
||||
7 1000000000 \N
|
||||
8 1152921504606846976 \N
|
||||
9 6.18 \N
|
||||
10 "abcd" \N
|
||||
11 {} \N
|
||||
12 {"k1":"v31","k2":300} \N
|
||||
13 [] \N
|
||||
14 [123,456] \N
|
||||
15 ["abc","def"] \N
|
||||
16 [null,true,false,100,6.18,"abc"] \N
|
||||
17 [{"k1":"v41","k2":400},1,"a",3.14] \N
|
||||
18 {"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]} ["v41",400,"a"]
|
||||
26 \N \N
|
||||
27 {"k1":"v1","k2":200} [null,null,null]
|
||||
28 {"a.b.c":{"k1.a1":"v31","k2":300},"a":"niu"} [null,null,null]
|
||||
29 12524337771678448270 [null,null,null]
|
||||
30 -9223372036854775808 [null,null,null]
|
||||
31 18446744073709551615 [null,null,null]
|
||||
32 {"":"v1"} [null,null,null]
|
||||
33 {"":1,"":"v1"} [null,null,null]
|
||||
34 {"":1,"ab":"v1","":"v1","":2} [null,null,null]
|
||||
27 {"k1":"v1","k2":200} \N
|
||||
28 {"a.b.c":{"k1.a1":"v31","k2":300},"a":"niu"} \N
|
||||
29 12524337771678448270 \N
|
||||
30 -9223372036854775808 \N
|
||||
31 18446744073709551615 \N
|
||||
32 {"":"v1"} \N
|
||||
33 {"":1,"":"v1"} \N
|
||||
34 {"":1,"ab":"v1","":"v1","":2} \N
|
||||
|
||||
-- !sql_json_length --
|
||||
1
|
||||
|
||||
@ -7348,7 +7348,7 @@ false
|
||||
14 [123,456] \N
|
||||
15 ["abc","def"] \N
|
||||
16 [null,true,false,100,6.18,"abc"] \N
|
||||
17 [{"k1":"v41","k2":400},1,"a",3.14] ["v41"]
|
||||
17 [{"k1":"v41","k2":400},1,"a",3.14] \N
|
||||
18 {"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]} "v31"
|
||||
26 \N \N
|
||||
27 {"k1":"v1","k2":200} "v1"
|
||||
@ -7359,55 +7359,55 @@ false
|
||||
|
||||
-- !select --
|
||||
1 \N \N
|
||||
2 null [null,null]
|
||||
3 true [null,null]
|
||||
4 false [null,null]
|
||||
5 100 [null,null]
|
||||
6 10000 [null,null]
|
||||
7 1000000000 [null,null]
|
||||
8 1152921504606846976 [null,null]
|
||||
9 6.18 [null,null]
|
||||
10 "abcd" [null,null]
|
||||
11 {} [null,null]
|
||||
12 {"k1":"v31","k2":300} [300,null]
|
||||
13 [] [null,null]
|
||||
14 [123,456] [null,456]
|
||||
15 ["abc","def"] [null,"def"]
|
||||
16 [null,true,false,100,6.18,"abc"] [null,true]
|
||||
17 [{"k1":"v41","k2":400},1,"a",3.14] [[400],1]
|
||||
18 {"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]} [300,null]
|
||||
2 null \N
|
||||
3 true \N
|
||||
4 false \N
|
||||
5 100 \N
|
||||
6 10000 \N
|
||||
7 1000000000 \N
|
||||
8 1152921504606846976 \N
|
||||
9 6.18 \N
|
||||
10 "abcd" \N
|
||||
11 {} \N
|
||||
12 {"k1":"v31","k2":300} [300]
|
||||
13 [] \N
|
||||
14 [123,456] [456]
|
||||
15 ["abc","def"] ["def"]
|
||||
16 [null,true,false,100,6.18,"abc"] [true]
|
||||
17 [{"k1":"v41","k2":400},1,"a",3.14] [1]
|
||||
18 {"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]} [300]
|
||||
26 \N \N
|
||||
27 {"k1":"v1","k2":200} [200,null]
|
||||
28 {"a.b.c":{"k1.a1":"v31","k2":300},"a":"niu"} [null,null]
|
||||
29 12524337771678448270 [null,null]
|
||||
30 -9223372036854775808 [null,null]
|
||||
31 18446744073709551615 [null,null]
|
||||
27 {"k1":"v1","k2":200} [200]
|
||||
28 {"a.b.c":{"k1.a1":"v31","k2":300},"a":"niu"} \N
|
||||
29 12524337771678448270 \N
|
||||
30 -9223372036854775808 \N
|
||||
31 18446744073709551615 \N
|
||||
|
||||
-- !select --
|
||||
1 \N \N
|
||||
2 null [null,null]
|
||||
3 true [null,null]
|
||||
4 false [null,null]
|
||||
5 100 [null,null]
|
||||
6 10000 [null,null]
|
||||
7 1000000000 [null,null]
|
||||
8 1152921504606846976 [null,null]
|
||||
9 6.18 [null,null]
|
||||
10 "abcd" [null,null]
|
||||
11 {} [null,null]
|
||||
12 {"k1":"v31","k2":300} [300,null]
|
||||
13 [] [null,null]
|
||||
14 [123,456] [null,null]
|
||||
15 ["abc","def"] [null,null]
|
||||
16 [null,true,false,100,6.18,"abc"] [null,null]
|
||||
17 [{"k1":"v41","k2":400},1,"a",3.14] [[400],null]
|
||||
18 {"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]} [300,null]
|
||||
2 null \N
|
||||
3 true \N
|
||||
4 false \N
|
||||
5 100 \N
|
||||
6 10000 \N
|
||||
7 1000000000 \N
|
||||
8 1152921504606846976 \N
|
||||
9 6.18 \N
|
||||
10 "abcd" \N
|
||||
11 {} \N
|
||||
12 {"k1":"v31","k2":300} [300]
|
||||
13 [] \N
|
||||
14 [123,456] \N
|
||||
15 ["abc","def"] \N
|
||||
16 [null,true,false,100,6.18,"abc"] \N
|
||||
17 [{"k1":"v41","k2":400},1,"a",3.14] \N
|
||||
18 {"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]} [300]
|
||||
26 \N \N
|
||||
27 {"k1":"v1","k2":200} [200,null]
|
||||
28 {"a.b.c":{"k1.a1":"v31","k2":300},"a":"niu"} [null,null]
|
||||
29 12524337771678448270 [null,null]
|
||||
30 -9223372036854775808 [null,null]
|
||||
31 18446744073709551615 [null,null]
|
||||
27 {"k1":"v1","k2":200} [200]
|
||||
28 {"a.b.c":{"k1.a1":"v31","k2":300},"a":"niu"} \N
|
||||
29 12524337771678448270 \N
|
||||
30 -9223372036854775808 \N
|
||||
31 18446744073709551615 \N
|
||||
|
||||
-- !select --
|
||||
1 \N \N
|
||||
@ -7437,29 +7437,29 @@ false
|
||||
|
||||
-- !select --
|
||||
1 \N \N
|
||||
2 null [null,null,null]
|
||||
3 true [null,null,null]
|
||||
4 false [null,null,null]
|
||||
5 100 [null,null,null]
|
||||
6 10000 [null,null,null]
|
||||
7 1000000000 [null,null,null]
|
||||
8 1152921504606846976 [null,null,null]
|
||||
9 6.18 [null,null,null]
|
||||
10 "abcd" [null,null,null]
|
||||
11 {} [null,null,null]
|
||||
12 {"k1":"v31","k2":300} [null,null,null]
|
||||
13 [] [null,null,null]
|
||||
14 [123,456] [null,null,null]
|
||||
15 ["abc","def"] [null,null,null]
|
||||
16 [null,true,false,100,6.18,"abc"] [null,null,null]
|
||||
17 [{"k1":"v41","k2":400},1,"a",3.14] [null,null,null]
|
||||
2 null \N
|
||||
3 true \N
|
||||
4 false \N
|
||||
5 100 \N
|
||||
6 10000 \N
|
||||
7 1000000000 \N
|
||||
8 1152921504606846976 \N
|
||||
9 6.18 \N
|
||||
10 "abcd" \N
|
||||
11 {} \N
|
||||
12 {"k1":"v31","k2":300} \N
|
||||
13 [] \N
|
||||
14 [123,456] \N
|
||||
15 ["abc","def"] \N
|
||||
16 [null,true,false,100,6.18,"abc"] \N
|
||||
17 [{"k1":"v41","k2":400},1,"a",3.14] \N
|
||||
18 {"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]} ["v41",400,"a"]
|
||||
26 \N \N
|
||||
27 {"k1":"v1","k2":200} [null,null,null]
|
||||
28 {"a.b.c":{"k1.a1":"v31","k2":300},"a":"niu"} [null,null,null]
|
||||
29 12524337771678448270 [null,null,null]
|
||||
30 -9223372036854775808 [null,null,null]
|
||||
31 18446744073709551615 [null,null,null]
|
||||
27 {"k1":"v1","k2":200} \N
|
||||
28 {"a.b.c":{"k1.a1":"v31","k2":300},"a":"niu"} \N
|
||||
29 12524337771678448270 \N
|
||||
30 -9223372036854775808 \N
|
||||
31 18446744073709551615 \N
|
||||
|
||||
-- !json_extract_string --
|
||||
"v31"
|
||||
|
||||
@ -6186,7 +6186,7 @@ false
|
||||
14 [123,456] \N
|
||||
15 ["abc","def"] \N
|
||||
16 [null,true,false,100,6.18,"abc"] \N
|
||||
17 [{"k1":"v41","k2":400},1,"a",3.14] ["v41"]
|
||||
17 [{"k1":"v41","k2":400},1,"a",3.14] \N
|
||||
18 {"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]} "v31"
|
||||
26 \N \N
|
||||
27 {"k1":"v1","k2":200} "v1"
|
||||
@ -6200,61 +6200,61 @@ false
|
||||
|
||||
-- !select --
|
||||
1 \N \N
|
||||
2 null [null,null]
|
||||
3 true [null,null]
|
||||
4 false [null,null]
|
||||
5 100 [null,null]
|
||||
6 10000 [null,null]
|
||||
7 1000000000 [null,null]
|
||||
8 1152921504606846976 [null,null]
|
||||
9 6.18 [null,null]
|
||||
10 "abcd" [null,null]
|
||||
11 {} [null,null]
|
||||
12 {"k1":"v31","k2":300} [300,null]
|
||||
13 [] [null,null]
|
||||
14 [123,456] [null,456]
|
||||
15 ["abc","def"] [null,"def"]
|
||||
16 [null,true,false,100,6.18,"abc"] [null,true]
|
||||
17 [{"k1":"v41","k2":400},1,"a",3.14] [[400],1]
|
||||
18 {"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]} [300,null]
|
||||
2 null \N
|
||||
3 true \N
|
||||
4 false \N
|
||||
5 100 \N
|
||||
6 10000 \N
|
||||
7 1000000000 \N
|
||||
8 1152921504606846976 \N
|
||||
9 6.18 \N
|
||||
10 "abcd" \N
|
||||
11 {} \N
|
||||
12 {"k1":"v31","k2":300} [300]
|
||||
13 [] \N
|
||||
14 [123,456] [456]
|
||||
15 ["abc","def"] ["def"]
|
||||
16 [null,true,false,100,6.18,"abc"] [true]
|
||||
17 [{"k1":"v41","k2":400},1,"a",3.14] [1]
|
||||
18 {"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]} [300]
|
||||
26 \N \N
|
||||
27 {"k1":"v1","k2":200} [200,null]
|
||||
28 {"a.b.c":{"k1.a1":"v31","k2":300},"a":"niu"} [null,null]
|
||||
29 12524337771678448270 [null,null]
|
||||
30 -9223372036854775808 [null,null]
|
||||
31 18446744073709551615 [null,null]
|
||||
32 {"":"v1"} [null,null]
|
||||
33 {"":1,"":"v1"} [null,null]
|
||||
34 {"":1,"ab":"v1","":"v1","":2} [null,null]
|
||||
27 {"k1":"v1","k2":200} [200]
|
||||
28 {"a.b.c":{"k1.a1":"v31","k2":300},"a":"niu"} \N
|
||||
29 12524337771678448270 \N
|
||||
30 -9223372036854775808 \N
|
||||
31 18446744073709551615 \N
|
||||
32 {"":"v1"} \N
|
||||
33 {"":1,"":"v1"} \N
|
||||
34 {"":1,"ab":"v1","":"v1","":2} \N
|
||||
|
||||
-- !select --
|
||||
1 \N \N
|
||||
2 null [null,null]
|
||||
3 true [null,null]
|
||||
4 false [null,null]
|
||||
5 100 [null,null]
|
||||
6 10000 [null,null]
|
||||
7 1000000000 [null,null]
|
||||
8 1152921504606846976 [null,null]
|
||||
9 6.18 [null,null]
|
||||
10 "abcd" [null,null]
|
||||
11 {} [null,null]
|
||||
12 {"k1":"v31","k2":300} [300,null]
|
||||
13 [] [null,null]
|
||||
14 [123,456] [null,null]
|
||||
15 ["abc","def"] [null,null]
|
||||
16 [null,true,false,100,6.18,"abc"] [null,null]
|
||||
17 [{"k1":"v41","k2":400},1,"a",3.14] [[400],null]
|
||||
18 {"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]} [300,null]
|
||||
2 null \N
|
||||
3 true \N
|
||||
4 false \N
|
||||
5 100 \N
|
||||
6 10000 \N
|
||||
7 1000000000 \N
|
||||
8 1152921504606846976 \N
|
||||
9 6.18 \N
|
||||
10 "abcd" \N
|
||||
11 {} \N
|
||||
12 {"k1":"v31","k2":300} [300]
|
||||
13 [] \N
|
||||
14 [123,456] \N
|
||||
15 ["abc","def"] \N
|
||||
16 [null,true,false,100,6.18,"abc"] \N
|
||||
17 [{"k1":"v41","k2":400},1,"a",3.14] \N
|
||||
18 {"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]} [300]
|
||||
26 \N \N
|
||||
27 {"k1":"v1","k2":200} [200,null]
|
||||
28 {"a.b.c":{"k1.a1":"v31","k2":300},"a":"niu"} [null,null]
|
||||
29 12524337771678448270 [null,null]
|
||||
30 -9223372036854775808 [null,null]
|
||||
31 18446744073709551615 [null,null]
|
||||
32 {"":"v1"} [null,null]
|
||||
33 {"":1,"":"v1"} [null,null]
|
||||
34 {"":1,"ab":"v1","":"v1","":2} [null,null]
|
||||
27 {"k1":"v1","k2":200} [200]
|
||||
28 {"a.b.c":{"k1.a1":"v31","k2":300},"a":"niu"} \N
|
||||
29 12524337771678448270 \N
|
||||
30 -9223372036854775808 \N
|
||||
31 18446744073709551615 \N
|
||||
32 {"":"v1"} \N
|
||||
33 {"":1,"":"v1"} \N
|
||||
34 {"":1,"ab":"v1","":"v1","":2} \N
|
||||
|
||||
-- !select --
|
||||
1 \N \N
|
||||
@ -6287,32 +6287,32 @@ false
|
||||
|
||||
-- !select --
|
||||
1 \N \N
|
||||
2 null [null,null,null]
|
||||
3 true [null,null,null]
|
||||
4 false [null,null,null]
|
||||
5 100 [null,null,null]
|
||||
6 10000 [null,null,null]
|
||||
7 1000000000 [null,null,null]
|
||||
8 1152921504606846976 [null,null,null]
|
||||
9 6.18 [null,null,null]
|
||||
10 "abcd" [null,null,null]
|
||||
11 {} [null,null,null]
|
||||
12 {"k1":"v31","k2":300} [null,null,null]
|
||||
13 [] [null,null,null]
|
||||
14 [123,456] [null,null,null]
|
||||
15 ["abc","def"] [null,null,null]
|
||||
16 [null,true,false,100,6.18,"abc"] [null,null,null]
|
||||
17 [{"k1":"v41","k2":400},1,"a",3.14] [null,null,null]
|
||||
2 null \N
|
||||
3 true \N
|
||||
4 false \N
|
||||
5 100 \N
|
||||
6 10000 \N
|
||||
7 1000000000 \N
|
||||
8 1152921504606846976 \N
|
||||
9 6.18 \N
|
||||
10 "abcd" \N
|
||||
11 {} \N
|
||||
12 {"k1":"v31","k2":300} \N
|
||||
13 [] \N
|
||||
14 [123,456] \N
|
||||
15 ["abc","def"] \N
|
||||
16 [null,true,false,100,6.18,"abc"] \N
|
||||
17 [{"k1":"v41","k2":400},1,"a",3.14] \N
|
||||
18 {"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]} ["v41",400,"a"]
|
||||
26 \N \N
|
||||
27 {"k1":"v1","k2":200} [null,null,null]
|
||||
28 {"a.b.c":{"k1.a1":"v31","k2":300},"a":"niu"} [null,null,null]
|
||||
29 12524337771678448270 [null,null,null]
|
||||
30 -9223372036854775808 [null,null,null]
|
||||
31 18446744073709551615 [null,null,null]
|
||||
32 {"":"v1"} [null,null,null]
|
||||
33 {"":1,"":"v1"} [null,null,null]
|
||||
34 {"":1,"ab":"v1","":"v1","":2} [null,null,null]
|
||||
27 {"k1":"v1","k2":200} \N
|
||||
28 {"a.b.c":{"k1.a1":"v31","k2":300},"a":"niu"} \N
|
||||
29 12524337771678448270 \N
|
||||
30 -9223372036854775808 \N
|
||||
31 18446744073709551615 \N
|
||||
32 {"":"v1"} \N
|
||||
33 {"":1,"":"v1"} \N
|
||||
34 {"":1,"ab":"v1","":"v1","":2} \N
|
||||
|
||||
-- !sql_json_parse --
|
||||
{"":"v1"}
|
||||
|
||||
@ -20,3 +20,5 @@ v31
|
||||
-- !sql_string7 --
|
||||
\N
|
||||
|
||||
-- !fix_array_path --
|
||||
[123] [123]
|
||||
|
||||
@ -28,4 +28,10 @@ suite("test_json_extract") {
|
||||
sql """ SELECT JSON_EXTRACT_STRING('{"id": 123, "name": "doris"}', '\$.'); """
|
||||
exception "Invalid Json Path for value: \$."
|
||||
}
|
||||
|
||||
qt_fix_array_path """
|
||||
select
|
||||
JSON_EXTRACT('[{"key": [123]}]', '\$[0].key') v1
|
||||
, JSON_EXTRACT('[{"key": [123]}]', '\$.[0].key') v2;
|
||||
"""
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user