github-actions[bot] commented on code in PR #24631:
URL: https://github.com/apache/doris/pull/24631#discussion_r1334318050
##########
be/test/vec/function/function_jsonb_test.cpp:
##########
@@ -1487,4 +1487,574 @@ TEST(FunctionJsonbTEST, JsonbCastFromOtherTest) {
"CAST", {Notnull {TypeIndex::String}, ConstedNotnull
{TypeIndex::JSONB}},
{{{STRING(R"("abcd")"), Null()}, STRING(R"("abcd")")}});
}
+
+TEST(FunctionJsonbTEST, GetJSONSTRINGTest) {
+ std::string func_name = "get_json_string";
+ InputTypeSet input_types = {TypeIndex::JSONB, TypeIndex::String};
+
+ // get json from root
+ DataSet data_set = {
+ {{Null(), STRING("$")}, Null()},
+ {{STRING("null"), STRING("$")}, STRING("null")},
+ {{STRING("true"), STRING("$")}, STRING("true")},
+ {{STRING("false"), STRING("$")}, STRING("false")},
+ {{STRING("100"), STRING("$")}, STRING("100")},
//int8
+ {{STRING("10000"), STRING("$")}, STRING("10000")},
// int16
+ {{STRING("1000000000"), STRING("$")}, STRING("1000000000")},
// int32
+ {{STRING("1152921504606846976"), STRING("$")},
STRING("1152921504606846976")}, // int64
+ {{STRING("6.18"), STRING("$")}, STRING("6.18")},
// double
+ {{STRING(R"("abcd")"), STRING("$")}, STRING("abcd")},
// string
+ {{STRING("{}"), STRING("$")}, STRING("{}")}, // empty object
+ {{STRING(R"({"k1":"v31", "k2": 300})"), STRING("$")},
+ STRING(R"({"k1":"v31","k2":300})")}, //
object
+ {{STRING("[]"), STRING("$")}, STRING("[]")}, //
empty array
+ {{STRING("[123, 456]"), STRING("$")}, STRING("[123,456]")}, // int
array
+ {{STRING(R"(["abc", "def"])"), STRING("$")},
+ STRING(R"(["abc","def"])")}, // string array
+ {{STRING(R"([null, true, false, 100, 6.18, "abc"])"), STRING("$")},
+ STRING(R"([null,true,false,100,6.18,"abc"])")}, // multi type
array
+ {{STRING(R"([{"k1":"v41", "k2": 400}, 1, "a", 3.14])"),
STRING("$")},
+ STRING(R"([{"k1":"v41","k2":400},1,"a",3.14])")}, // complex array
+ };
+
+ check_function<DataTypeString, true>(func_name, input_types, data_set);
+
+ // get json from obejct
+ data_set = {
+ {{Null(), STRING("$.k1")}, Null()},
+ {{STRING("null"), STRING("$.k1")}, Null()},
+ {{STRING("true"), STRING("$.k1")}, Null()},
+ {{STRING("false"), STRING("$.k1")}, Null()},
+ {{STRING("100"), STRING("$.k1")}, Null()},
//int8
+ {{STRING("10000"), STRING("$.k1")}, Null()},
// int16
+ {{STRING("1000000000"), STRING("$.k1")}, Null()},
// int32
+ {{STRING("1152921504606846976"), STRING("$.k1")}, Null()},
// int64
+ {{STRING("6.18"), STRING("$.k1")}, Null()},
// double
+ {{STRING(R"("abcd")"), STRING("$.k1")}, Null()},
// string
+ {{STRING("{}"), STRING("$.k1")}, Null()},
// empty object
+ {{STRING(R"({"k1":"v31", "k2": 300})"), STRING("$.k1")},
STRING("v31")}, // object
+ {{STRING("[]"), STRING("$.k1")}, Null()},
// empty array
+ {{STRING("[123, 456]"), STRING("$.k1")}, Null()},
// int array
+ {{STRING(R"(["abc", "def"])"), STRING("$.k1")}, Null()},
// string array
+ {{STRING(R"([null, true, false, 100, 6.18, "abc"])"),
STRING("$.k1")},
+ Null()}, // multi type array
+ {{STRING(R"([{"k1":"v41", "k2": 400}, 1, "a", 3.14])"),
STRING("$.k1")},
+ Null()}, // complex array
+ };
+
+ check_function<DataTypeString, true>(func_name, input_types, data_set);
+
+ // get json from array
+ data_set = {
+ {{Null(), STRING("$[0]")}, Null()},
+ {{STRING("null"), STRING("$[0]")}, Null()},
+ {{STRING("true"), STRING("$[0]")}, Null()},
+ {{STRING("false"), STRING("$[0]")}, Null()},
+ {{STRING("100"), STRING("$[0]")}, Null()}, //int8
+ {{STRING("10000"), STRING("$[0]")}, Null()}, // int16
+ {{STRING("1000000000"), STRING("$[0]")}, Null()}, // int32
+ {{STRING("1152921504606846976"), STRING("$[0]")}, Null()}, // int64
+ {{STRING("6.18"), STRING("$[0]")}, Null()}, //
double
+ {{STRING(R"("abcd")"), STRING("$[0]")}, Null()}, //
string
+ {{STRING("{}"), STRING("$[0]")}, STRING("{}")}, //
empty object
+ {{STRING(R"({"k1":"v31", "k2": 300})"), STRING("$[0]")},
+ STRING(R"({"k1":"v31","k2":300})")}, // object
+ {{STRING("[]"), STRING("$[0]")}, Null()}, // empty array
+ {{STRING("null"), STRING("$[1]")}, Null()},
+ {{STRING("true"), STRING("$[1]")}, Null()},
+ {{STRING("false"), STRING("$[1]")}, Null()},
+ {{STRING("100"), STRING("$[1]")}, Null()},
//int8
+ {{STRING("10000"), STRING("$[1]")}, Null()},
// int16
+ {{STRING("1000000000"), STRING("$[1]")}, Null()},
// int32
+ {{STRING("1152921504606846976"), STRING("$[1]")}, Null()},
// int64
+ {{STRING("6.18"), STRING("$[1]")}, Null()},
// double
+ {{STRING(R"("abcd")"), STRING("$[1]")}, Null()},
// string
+ {{STRING("{}"), STRING("$[1]")}, Null()},
// empty object
+ {{STRING(R"({"k1":"v31", "k2": 300})"), STRING("$[1]")}, Null()},
// object
+ {{STRING("[]"), STRING("$[1]")}, Null()},
// empty array
+ {{STRING("[123, 456]"), STRING("$[0]")}, STRING("123")},
// int array
+ {{STRING("[123, 456]"), STRING("$[1]")}, STRING("456")},
// int array
+ {{STRING("[123, 456]"), STRING("$[2]")}, Null()},
// int array
+ {{STRING(R"(["abc", "def"])"), STRING("$[0]")}, STRING("abc")},
// string array
+ {{STRING(R"(["abc", "def"])"), STRING("$[1]")}, STRING("def")},
// string array
+ {{STRING(R"(["abc", "def"])"), STRING("$[2]")}, Null()},
// string array
+ {{STRING(R"([null, true, false, 100, 6.18, "abc"])"),
STRING("$[0]")},
+ STRING("null")}, // multi type array
+ {{STRING(R"([null, true, false, 100, 6.18, "abc"])"),
STRING("$[1]")},
+ STRING("true")}, // multi type array
+ {{STRING(R"([null, true, false, 100, 6.18, "abc"])"),
STRING("$[2]")},
+ STRING("false")}, // multi type array
+ {{STRING(R"([null, true, false, 100, 6.18, "abc"])"),
STRING("$[3]")},
+ STRING("100")}, // multi type array
+ {{STRING(R"([null, true, false, 100, 6.18, "abc"])"),
STRING("$[4]")},
+ STRING("6.18")}, // multi type array
+ {{STRING(R"([null, true, false, 100, 6.18, "abc"])"),
STRING("$[5]")},
+ STRING("abc")}, // multi type array
+ {{STRING(R"([null, true, false, 100, 6.18, "abc"])"),
STRING("$[6]")},
+ Null()}, // multi type array
+ {{STRING(R"([{"k1":"v41", "k2": 400}, 1, "a", 3.14])"),
STRING("$[0]")},
+ STRING(R"({"k1":"v41","k2":400})")}, // complex array
+ {{STRING(R"([{"k1":"v41", "k2": 400}, 1, "a", 3.14])"),
STRING("$[1]")},
+ STRING("1")}, // complex array
+ {{STRING(R"([{"k1":"v41", "k2": 400}, 1, "a", 3.14])"),
STRING("$[2]")},
+ STRING("a")}, // complex array
+ {{STRING(R"([{"k1":"v41", "k2": 400}, 1, "a", 3.14])"),
STRING("$[3]")},
+ STRING("3.14")}, // complex array
+ {{STRING(R"([{"k1":"v41", "k2": 400}, 1, "a", 3.14])"),
STRING("$[4]")},
+ Null()}, // complex array
+ };
+
+ check_function<DataTypeString, true>(func_name, input_types, data_set);
+
+ // get json with path $[0].k1
+ data_set = {
+ {{Null(), STRING("$[0].k1")}, Null()},
+ {{STRING("null"), STRING("$[0].k1")}, Null()},
+ {{STRING("true"), STRING("$[0].k1")}, Null()},
+ {{STRING("false"), STRING("$[0].k1")}, Null()},
+ {{STRING("100"), STRING("$[0].k1")}, Null()},
//int8
+ {{STRING("10000"), STRING("$[0].k1")}, Null()}, //
int16
+ {{STRING("1000000000"), STRING("$[0].k1")}, Null()}, //
int32
+ {{STRING("1152921504606846976"), STRING("$[0].k1")}, Null()}, //
int64
+ {{STRING("6.18"), STRING("$[0].k1")}, Null()}, //
double
+ {{STRING(R"("abcd")"), STRING("$[0].k1")}, Null()}, //
string
+ {{STRING("{}"), STRING("$[0].k1")}, Null()}, //
empty object
+ {{STRING(R"({"k1":"v31", "k2": 300})"), STRING("$[0].k1")},
STRING(R"(v31)")}, // object
+ {{STRING("[]"), STRING("$[0].k1")}, Null()}, //
empty array
+ {{STRING("[123, 456]"), STRING("$[0].k1")}, Null()}, // int
array
+ {{STRING(R"(["abc", "def"])"), STRING("$[0].k1")}, Null()}, //
string array
+ {{STRING(R"([null, true, false, 100, 6.18, "abc"])"),
STRING("$[0].k1")},
+ Null()}, // multi type array
+ {{STRING(R"([{"k1":"v41", "k2": 400}, 1, "a", 3.14])"),
STRING("$[0].k1")},
+ STRING("v41")}, // complex array
+ };
+
+ check_function<DataTypeString, true>(func_name, input_types, data_set);
+}
+
+TEST(FunctionJsonbTEST, GetJsonIntTest) {
+ std::string func_name = "get_json_int";
+ InputTypeSet input_types = {TypeIndex::JSONB, TypeIndex::String};
Review Comment:
warning: variable 'input_types' is not initialized
[cppcoreguidelines-init-variables]
```suggestion
InputTypeSet input_types = 0 = {TypeIndex::JSONB, TypeIndex::String};
```
##########
be/test/vec/function/function_jsonb_test.cpp:
##########
@@ -1487,4 +1487,574 @@ TEST(FunctionJsonbTEST, JsonbCastFromOtherTest) {
"CAST", {Notnull {TypeIndex::String}, ConstedNotnull
{TypeIndex::JSONB}},
{{{STRING(R"("abcd")"), Null()}, STRING(R"("abcd")")}});
}
+
+TEST(FunctionJsonbTEST, GetJSONSTRINGTest) {
+ std::string func_name = "get_json_string";
+ InputTypeSet input_types = {TypeIndex::JSONB, TypeIndex::String};
+
+ // get json from root
+ DataSet data_set = {
+ {{Null(), STRING("$")}, Null()},
+ {{STRING("null"), STRING("$")}, STRING("null")},
+ {{STRING("true"), STRING("$")}, STRING("true")},
+ {{STRING("false"), STRING("$")}, STRING("false")},
+ {{STRING("100"), STRING("$")}, STRING("100")},
//int8
+ {{STRING("10000"), STRING("$")}, STRING("10000")},
// int16
+ {{STRING("1000000000"), STRING("$")}, STRING("1000000000")},
// int32
+ {{STRING("1152921504606846976"), STRING("$")},
STRING("1152921504606846976")}, // int64
+ {{STRING("6.18"), STRING("$")}, STRING("6.18")},
// double
+ {{STRING(R"("abcd")"), STRING("$")}, STRING("abcd")},
// string
+ {{STRING("{}"), STRING("$")}, STRING("{}")}, // empty object
+ {{STRING(R"({"k1":"v31", "k2": 300})"), STRING("$")},
+ STRING(R"({"k1":"v31","k2":300})")}, //
object
+ {{STRING("[]"), STRING("$")}, STRING("[]")}, //
empty array
+ {{STRING("[123, 456]"), STRING("$")}, STRING("[123,456]")}, // int
array
+ {{STRING(R"(["abc", "def"])"), STRING("$")},
+ STRING(R"(["abc","def"])")}, // string array
+ {{STRING(R"([null, true, false, 100, 6.18, "abc"])"), STRING("$")},
+ STRING(R"([null,true,false,100,6.18,"abc"])")}, // multi type
array
+ {{STRING(R"([{"k1":"v41", "k2": 400}, 1, "a", 3.14])"),
STRING("$")},
+ STRING(R"([{"k1":"v41","k2":400},1,"a",3.14])")}, // complex array
+ };
+
+ check_function<DataTypeString, true>(func_name, input_types, data_set);
+
+ // get json from obejct
+ data_set = {
+ {{Null(), STRING("$.k1")}, Null()},
+ {{STRING("null"), STRING("$.k1")}, Null()},
+ {{STRING("true"), STRING("$.k1")}, Null()},
+ {{STRING("false"), STRING("$.k1")}, Null()},
+ {{STRING("100"), STRING("$.k1")}, Null()},
//int8
+ {{STRING("10000"), STRING("$.k1")}, Null()},
// int16
+ {{STRING("1000000000"), STRING("$.k1")}, Null()},
// int32
+ {{STRING("1152921504606846976"), STRING("$.k1")}, Null()},
// int64
+ {{STRING("6.18"), STRING("$.k1")}, Null()},
// double
+ {{STRING(R"("abcd")"), STRING("$.k1")}, Null()},
// string
+ {{STRING("{}"), STRING("$.k1")}, Null()},
// empty object
+ {{STRING(R"({"k1":"v31", "k2": 300})"), STRING("$.k1")},
STRING("v31")}, // object
+ {{STRING("[]"), STRING("$.k1")}, Null()},
// empty array
+ {{STRING("[123, 456]"), STRING("$.k1")}, Null()},
// int array
+ {{STRING(R"(["abc", "def"])"), STRING("$.k1")}, Null()},
// string array
+ {{STRING(R"([null, true, false, 100, 6.18, "abc"])"),
STRING("$.k1")},
+ Null()}, // multi type array
+ {{STRING(R"([{"k1":"v41", "k2": 400}, 1, "a", 3.14])"),
STRING("$.k1")},
+ Null()}, // complex array
+ };
+
+ check_function<DataTypeString, true>(func_name, input_types, data_set);
+
+ // get json from array
+ data_set = {
+ {{Null(), STRING("$[0]")}, Null()},
+ {{STRING("null"), STRING("$[0]")}, Null()},
+ {{STRING("true"), STRING("$[0]")}, Null()},
+ {{STRING("false"), STRING("$[0]")}, Null()},
+ {{STRING("100"), STRING("$[0]")}, Null()}, //int8
+ {{STRING("10000"), STRING("$[0]")}, Null()}, // int16
+ {{STRING("1000000000"), STRING("$[0]")}, Null()}, // int32
+ {{STRING("1152921504606846976"), STRING("$[0]")}, Null()}, // int64
+ {{STRING("6.18"), STRING("$[0]")}, Null()}, //
double
+ {{STRING(R"("abcd")"), STRING("$[0]")}, Null()}, //
string
+ {{STRING("{}"), STRING("$[0]")}, STRING("{}")}, //
empty object
+ {{STRING(R"({"k1":"v31", "k2": 300})"), STRING("$[0]")},
+ STRING(R"({"k1":"v31","k2":300})")}, // object
+ {{STRING("[]"), STRING("$[0]")}, Null()}, // empty array
+ {{STRING("null"), STRING("$[1]")}, Null()},
+ {{STRING("true"), STRING("$[1]")}, Null()},
+ {{STRING("false"), STRING("$[1]")}, Null()},
+ {{STRING("100"), STRING("$[1]")}, Null()},
//int8
+ {{STRING("10000"), STRING("$[1]")}, Null()},
// int16
+ {{STRING("1000000000"), STRING("$[1]")}, Null()},
// int32
+ {{STRING("1152921504606846976"), STRING("$[1]")}, Null()},
// int64
+ {{STRING("6.18"), STRING("$[1]")}, Null()},
// double
+ {{STRING(R"("abcd")"), STRING("$[1]")}, Null()},
// string
+ {{STRING("{}"), STRING("$[1]")}, Null()},
// empty object
+ {{STRING(R"({"k1":"v31", "k2": 300})"), STRING("$[1]")}, Null()},
// object
+ {{STRING("[]"), STRING("$[1]")}, Null()},
// empty array
+ {{STRING("[123, 456]"), STRING("$[0]")}, STRING("123")},
// int array
+ {{STRING("[123, 456]"), STRING("$[1]")}, STRING("456")},
// int array
+ {{STRING("[123, 456]"), STRING("$[2]")}, Null()},
// int array
+ {{STRING(R"(["abc", "def"])"), STRING("$[0]")}, STRING("abc")},
// string array
+ {{STRING(R"(["abc", "def"])"), STRING("$[1]")}, STRING("def")},
// string array
+ {{STRING(R"(["abc", "def"])"), STRING("$[2]")}, Null()},
// string array
+ {{STRING(R"([null, true, false, 100, 6.18, "abc"])"),
STRING("$[0]")},
+ STRING("null")}, // multi type array
+ {{STRING(R"([null, true, false, 100, 6.18, "abc"])"),
STRING("$[1]")},
+ STRING("true")}, // multi type array
+ {{STRING(R"([null, true, false, 100, 6.18, "abc"])"),
STRING("$[2]")},
+ STRING("false")}, // multi type array
+ {{STRING(R"([null, true, false, 100, 6.18, "abc"])"),
STRING("$[3]")},
+ STRING("100")}, // multi type array
+ {{STRING(R"([null, true, false, 100, 6.18, "abc"])"),
STRING("$[4]")},
+ STRING("6.18")}, // multi type array
+ {{STRING(R"([null, true, false, 100, 6.18, "abc"])"),
STRING("$[5]")},
+ STRING("abc")}, // multi type array
+ {{STRING(R"([null, true, false, 100, 6.18, "abc"])"),
STRING("$[6]")},
+ Null()}, // multi type array
+ {{STRING(R"([{"k1":"v41", "k2": 400}, 1, "a", 3.14])"),
STRING("$[0]")},
+ STRING(R"({"k1":"v41","k2":400})")}, // complex array
+ {{STRING(R"([{"k1":"v41", "k2": 400}, 1, "a", 3.14])"),
STRING("$[1]")},
+ STRING("1")}, // complex array
+ {{STRING(R"([{"k1":"v41", "k2": 400}, 1, "a", 3.14])"),
STRING("$[2]")},
+ STRING("a")}, // complex array
+ {{STRING(R"([{"k1":"v41", "k2": 400}, 1, "a", 3.14])"),
STRING("$[3]")},
+ STRING("3.14")}, // complex array
+ {{STRING(R"([{"k1":"v41", "k2": 400}, 1, "a", 3.14])"),
STRING("$[4]")},
+ Null()}, // complex array
+ };
+
+ check_function<DataTypeString, true>(func_name, input_types, data_set);
+
+ // get json with path $[0].k1
+ data_set = {
+ {{Null(), STRING("$[0].k1")}, Null()},
+ {{STRING("null"), STRING("$[0].k1")}, Null()},
+ {{STRING("true"), STRING("$[0].k1")}, Null()},
+ {{STRING("false"), STRING("$[0].k1")}, Null()},
+ {{STRING("100"), STRING("$[0].k1")}, Null()},
//int8
+ {{STRING("10000"), STRING("$[0].k1")}, Null()}, //
int16
+ {{STRING("1000000000"), STRING("$[0].k1")}, Null()}, //
int32
+ {{STRING("1152921504606846976"), STRING("$[0].k1")}, Null()}, //
int64
+ {{STRING("6.18"), STRING("$[0].k1")}, Null()}, //
double
+ {{STRING(R"("abcd")"), STRING("$[0].k1")}, Null()}, //
string
+ {{STRING("{}"), STRING("$[0].k1")}, Null()}, //
empty object
+ {{STRING(R"({"k1":"v31", "k2": 300})"), STRING("$[0].k1")},
STRING(R"(v31)")}, // object
+ {{STRING("[]"), STRING("$[0].k1")}, Null()}, //
empty array
+ {{STRING("[123, 456]"), STRING("$[0].k1")}, Null()}, // int
array
+ {{STRING(R"(["abc", "def"])"), STRING("$[0].k1")}, Null()}, //
string array
+ {{STRING(R"([null, true, false, 100, 6.18, "abc"])"),
STRING("$[0].k1")},
+ Null()}, // multi type array
+ {{STRING(R"([{"k1":"v41", "k2": 400}, 1, "a", 3.14])"),
STRING("$[0].k1")},
+ STRING("v41")}, // complex array
+ };
+
+ check_function<DataTypeString, true>(func_name, input_types, data_set);
+}
+
+TEST(FunctionJsonbTEST, GetJsonIntTest) {
+ std::string func_name = "get_json_int";
+ InputTypeSet input_types = {TypeIndex::JSONB, TypeIndex::String};
+
+ // get json from root
+ DataSet data_set = {
Review Comment:
warning: variable 'data_set' is not initialized
[cppcoreguidelines-init-variables]
```suggestion
DataSet data_set = 0 = {
```
##########
be/test/vec/function/function_jsonb_test.cpp:
##########
@@ -1487,4 +1487,574 @@ TEST(FunctionJsonbTEST, JsonbCastFromOtherTest) {
"CAST", {Notnull {TypeIndex::String}, ConstedNotnull
{TypeIndex::JSONB}},
{{{STRING(R"("abcd")"), Null()}, STRING(R"("abcd")")}});
}
+
+TEST(FunctionJsonbTEST, GetJSONSTRINGTest) {
+ std::string func_name = "get_json_string";
+ InputTypeSet input_types = {TypeIndex::JSONB, TypeIndex::String};
+
+ // get json from root
+ DataSet data_set = {
+ {{Null(), STRING("$")}, Null()},
+ {{STRING("null"), STRING("$")}, STRING("null")},
+ {{STRING("true"), STRING("$")}, STRING("true")},
+ {{STRING("false"), STRING("$")}, STRING("false")},
+ {{STRING("100"), STRING("$")}, STRING("100")},
//int8
+ {{STRING("10000"), STRING("$")}, STRING("10000")},
// int16
+ {{STRING("1000000000"), STRING("$")}, STRING("1000000000")},
// int32
+ {{STRING("1152921504606846976"), STRING("$")},
STRING("1152921504606846976")}, // int64
+ {{STRING("6.18"), STRING("$")}, STRING("6.18")},
// double
+ {{STRING(R"("abcd")"), STRING("$")}, STRING("abcd")},
// string
+ {{STRING("{}"), STRING("$")}, STRING("{}")}, // empty object
+ {{STRING(R"({"k1":"v31", "k2": 300})"), STRING("$")},
+ STRING(R"({"k1":"v31","k2":300})")}, //
object
+ {{STRING("[]"), STRING("$")}, STRING("[]")}, //
empty array
+ {{STRING("[123, 456]"), STRING("$")}, STRING("[123,456]")}, // int
array
+ {{STRING(R"(["abc", "def"])"), STRING("$")},
+ STRING(R"(["abc","def"])")}, // string array
+ {{STRING(R"([null, true, false, 100, 6.18, "abc"])"), STRING("$")},
+ STRING(R"([null,true,false,100,6.18,"abc"])")}, // multi type
array
+ {{STRING(R"([{"k1":"v41", "k2": 400}, 1, "a", 3.14])"),
STRING("$")},
+ STRING(R"([{"k1":"v41","k2":400},1,"a",3.14])")}, // complex array
+ };
+
+ check_function<DataTypeString, true>(func_name, input_types, data_set);
+
+ // get json from obejct
+ data_set = {
+ {{Null(), STRING("$.k1")}, Null()},
+ {{STRING("null"), STRING("$.k1")}, Null()},
+ {{STRING("true"), STRING("$.k1")}, Null()},
+ {{STRING("false"), STRING("$.k1")}, Null()},
+ {{STRING("100"), STRING("$.k1")}, Null()},
//int8
+ {{STRING("10000"), STRING("$.k1")}, Null()},
// int16
+ {{STRING("1000000000"), STRING("$.k1")}, Null()},
// int32
+ {{STRING("1152921504606846976"), STRING("$.k1")}, Null()},
// int64
+ {{STRING("6.18"), STRING("$.k1")}, Null()},
// double
+ {{STRING(R"("abcd")"), STRING("$.k1")}, Null()},
// string
+ {{STRING("{}"), STRING("$.k1")}, Null()},
// empty object
+ {{STRING(R"({"k1":"v31", "k2": 300})"), STRING("$.k1")},
STRING("v31")}, // object
+ {{STRING("[]"), STRING("$.k1")}, Null()},
// empty array
+ {{STRING("[123, 456]"), STRING("$.k1")}, Null()},
// int array
+ {{STRING(R"(["abc", "def"])"), STRING("$.k1")}, Null()},
// string array
+ {{STRING(R"([null, true, false, 100, 6.18, "abc"])"),
STRING("$.k1")},
+ Null()}, // multi type array
+ {{STRING(R"([{"k1":"v41", "k2": 400}, 1, "a", 3.14])"),
STRING("$.k1")},
+ Null()}, // complex array
+ };
+
+ check_function<DataTypeString, true>(func_name, input_types, data_set);
+
+ // get json from array
+ data_set = {
+ {{Null(), STRING("$[0]")}, Null()},
+ {{STRING("null"), STRING("$[0]")}, Null()},
+ {{STRING("true"), STRING("$[0]")}, Null()},
+ {{STRING("false"), STRING("$[0]")}, Null()},
+ {{STRING("100"), STRING("$[0]")}, Null()}, //int8
+ {{STRING("10000"), STRING("$[0]")}, Null()}, // int16
+ {{STRING("1000000000"), STRING("$[0]")}, Null()}, // int32
+ {{STRING("1152921504606846976"), STRING("$[0]")}, Null()}, // int64
+ {{STRING("6.18"), STRING("$[0]")}, Null()}, //
double
+ {{STRING(R"("abcd")"), STRING("$[0]")}, Null()}, //
string
+ {{STRING("{}"), STRING("$[0]")}, STRING("{}")}, //
empty object
+ {{STRING(R"({"k1":"v31", "k2": 300})"), STRING("$[0]")},
+ STRING(R"({"k1":"v31","k2":300})")}, // object
+ {{STRING("[]"), STRING("$[0]")}, Null()}, // empty array
+ {{STRING("null"), STRING("$[1]")}, Null()},
+ {{STRING("true"), STRING("$[1]")}, Null()},
+ {{STRING("false"), STRING("$[1]")}, Null()},
+ {{STRING("100"), STRING("$[1]")}, Null()},
//int8
+ {{STRING("10000"), STRING("$[1]")}, Null()},
// int16
+ {{STRING("1000000000"), STRING("$[1]")}, Null()},
// int32
+ {{STRING("1152921504606846976"), STRING("$[1]")}, Null()},
// int64
+ {{STRING("6.18"), STRING("$[1]")}, Null()},
// double
+ {{STRING(R"("abcd")"), STRING("$[1]")}, Null()},
// string
+ {{STRING("{}"), STRING("$[1]")}, Null()},
// empty object
+ {{STRING(R"({"k1":"v31", "k2": 300})"), STRING("$[1]")}, Null()},
// object
+ {{STRING("[]"), STRING("$[1]")}, Null()},
// empty array
+ {{STRING("[123, 456]"), STRING("$[0]")}, STRING("123")},
// int array
+ {{STRING("[123, 456]"), STRING("$[1]")}, STRING("456")},
// int array
+ {{STRING("[123, 456]"), STRING("$[2]")}, Null()},
// int array
+ {{STRING(R"(["abc", "def"])"), STRING("$[0]")}, STRING("abc")},
// string array
+ {{STRING(R"(["abc", "def"])"), STRING("$[1]")}, STRING("def")},
// string array
+ {{STRING(R"(["abc", "def"])"), STRING("$[2]")}, Null()},
// string array
+ {{STRING(R"([null, true, false, 100, 6.18, "abc"])"),
STRING("$[0]")},
+ STRING("null")}, // multi type array
+ {{STRING(R"([null, true, false, 100, 6.18, "abc"])"),
STRING("$[1]")},
+ STRING("true")}, // multi type array
+ {{STRING(R"([null, true, false, 100, 6.18, "abc"])"),
STRING("$[2]")},
+ STRING("false")}, // multi type array
+ {{STRING(R"([null, true, false, 100, 6.18, "abc"])"),
STRING("$[3]")},
+ STRING("100")}, // multi type array
+ {{STRING(R"([null, true, false, 100, 6.18, "abc"])"),
STRING("$[4]")},
+ STRING("6.18")}, // multi type array
+ {{STRING(R"([null, true, false, 100, 6.18, "abc"])"),
STRING("$[5]")},
+ STRING("abc")}, // multi type array
+ {{STRING(R"([null, true, false, 100, 6.18, "abc"])"),
STRING("$[6]")},
+ Null()}, // multi type array
+ {{STRING(R"([{"k1":"v41", "k2": 400}, 1, "a", 3.14])"),
STRING("$[0]")},
+ STRING(R"({"k1":"v41","k2":400})")}, // complex array
+ {{STRING(R"([{"k1":"v41", "k2": 400}, 1, "a", 3.14])"),
STRING("$[1]")},
+ STRING("1")}, // complex array
+ {{STRING(R"([{"k1":"v41", "k2": 400}, 1, "a", 3.14])"),
STRING("$[2]")},
+ STRING("a")}, // complex array
+ {{STRING(R"([{"k1":"v41", "k2": 400}, 1, "a", 3.14])"),
STRING("$[3]")},
+ STRING("3.14")}, // complex array
+ {{STRING(R"([{"k1":"v41", "k2": 400}, 1, "a", 3.14])"),
STRING("$[4]")},
+ Null()}, // complex array
+ };
+
+ check_function<DataTypeString, true>(func_name, input_types, data_set);
+
+ // get json with path $[0].k1
+ data_set = {
+ {{Null(), STRING("$[0].k1")}, Null()},
+ {{STRING("null"), STRING("$[0].k1")}, Null()},
+ {{STRING("true"), STRING("$[0].k1")}, Null()},
+ {{STRING("false"), STRING("$[0].k1")}, Null()},
+ {{STRING("100"), STRING("$[0].k1")}, Null()},
//int8
+ {{STRING("10000"), STRING("$[0].k1")}, Null()}, //
int16
+ {{STRING("1000000000"), STRING("$[0].k1")}, Null()}, //
int32
+ {{STRING("1152921504606846976"), STRING("$[0].k1")}, Null()}, //
int64
+ {{STRING("6.18"), STRING("$[0].k1")}, Null()}, //
double
+ {{STRING(R"("abcd")"), STRING("$[0].k1")}, Null()}, //
string
+ {{STRING("{}"), STRING("$[0].k1")}, Null()}, //
empty object
+ {{STRING(R"({"k1":"v31", "k2": 300})"), STRING("$[0].k1")},
STRING(R"(v31)")}, // object
+ {{STRING("[]"), STRING("$[0].k1")}, Null()}, //
empty array
+ {{STRING("[123, 456]"), STRING("$[0].k1")}, Null()}, // int
array
+ {{STRING(R"(["abc", "def"])"), STRING("$[0].k1")}, Null()}, //
string array
+ {{STRING(R"([null, true, false, 100, 6.18, "abc"])"),
STRING("$[0].k1")},
+ Null()}, // multi type array
+ {{STRING(R"([{"k1":"v41", "k2": 400}, 1, "a", 3.14])"),
STRING("$[0].k1")},
+ STRING("v41")}, // complex array
+ };
+
+ check_function<DataTypeString, true>(func_name, input_types, data_set);
+}
+
+TEST(FunctionJsonbTEST, GetJsonIntTest) {
+ std::string func_name = "get_json_int";
+ InputTypeSet input_types = {TypeIndex::JSONB, TypeIndex::String};
+
+ // get json from root
+ DataSet data_set = {
+ {{Null(), STRING("$")}, Null()},
+ {{STRING("null"), STRING("$")}, Null()},
+ {{STRING("true"), STRING("$")}, Null()},
+ {{STRING("false"), STRING("$")}, Null()},
+ {{STRING("100"), STRING("$")}, INT(100)},
//int8
+ {{STRING("10000"), STRING("$")}, INT(10000)}, //
int16
+ {{STRING("1000000000"), STRING("$")}, INT(1000000000)}, //
int32
+ {{STRING("1152921504606846976"), STRING("$")}, Null()}, //
int64
+ {{STRING("6.18"), STRING("$")}, Null()}, //
double
+ {{STRING(R"("abcd")"), STRING("$")}, Null()}, //
string
+ {{STRING("{}"), STRING("$")}, Null()}, //
empty object
+ {{STRING(R"({"k1":"v31", "k2": 300})"), STRING("$")}, Null()}, //
object
+ {{STRING("[]"), STRING("$")}, Null()}, //
empty array
+ {{STRING("[123, 456]"), STRING("$")}, Null()}, //
int array
+ {{STRING(R"(["abc", "def"])"), STRING("$")}, Null()}, //
string array
+ {{STRING(R"([null, true, false, 100, 6.18, "abc"])"), STRING("$")},
+ Null()}, // multi type array
+ {{STRING(R"([{"k1":"v41", "k2": 400}, 1, "a", 3.14])"),
STRING("$")},
+ Null()}, // complex array
+ };
+
+ check_function<DataTypeInt32, true>(func_name, input_types, data_set);
+
+ // get json from obejct
+ data_set = {
+ {{Null(), STRING("$.k1")}, Null()},
+ {{STRING("null"), STRING("$.k1")}, Null()},
+ {{STRING("true"), STRING("$.k1")}, Null()},
+ {{STRING("false"), STRING("$.k1")}, Null()},
+ {{STRING("100"), STRING("$.k1")}, Null()},
//int8
+ {{STRING("10000"), STRING("$.k1")}, Null()},
// int16
+ {{STRING("1000000000"), STRING("$.k1")}, Null()},
// int32
+ {{STRING("1152921504606846976"), STRING("$.k1")}, Null()},
// int64
+ {{STRING("6.18"), STRING("$.k1")}, Null()},
// double
+ {{STRING(R"("abcd")"), STRING("$.k1")}, Null()},
// string
+ {{STRING("{}"), STRING("$.k1")}, Null()},
// empty object
+ {{STRING(R"({"k1":"v31", "k2": 300})"), STRING("$.k1")}, Null()},
// object
+ {{STRING("[]"), STRING("$.k1")}, Null()},
// empty array
+ {{STRING("[123, 456]"), STRING("$.k1")}, Null()},
// int array
+ {{STRING(R"(["abc", "def"])"), STRING("$.k1")}, Null()},
// string array
+ {{STRING(R"([null, true, false, 100, 6.18, "abc"])"),
STRING("$.k1")},
+ Null()}, // multi type array
+ {{STRING(R"([{"k1":"v41", "k2": 400}, 1, "a", 3.14])"),
STRING("$.k1")},
+ Null()}, // complex array
+ };
+
+ check_function<DataTypeInt32, true>(func_name, input_types, data_set);
+
+ // get json from array
+ data_set = {
+ {{Null(), STRING("$[0]")}, Null()},
+ {{STRING("null"), STRING("$[0]")}, Null()},
+ {{STRING("true"), STRING("$[0]")}, Null()},
+ {{STRING("false"), STRING("$[0]")}, Null()},
+ {{STRING("100"), STRING("$[0]")}, Null()},
//int8
+ {{STRING("10000"), STRING("$[0]")}, Null()},
// int16
+ {{STRING("1000000000"), STRING("$[0]")}, Null()},
// int32
+ {{STRING("1152921504606846976"), STRING("$[0]")}, Null()},
// int64
+ {{STRING("6.18"), STRING("$[0]")}, Null()},
// double
+ {{STRING(R"("abcd")"), STRING("$[0]")}, Null()},
// string
+ {{STRING("{}"), STRING("$[0]")}, Null()},
// empty object
+ {{STRING(R"({"k1":"v31", "k2": 300})"), STRING("$[0]")}, Null()},
// object
+ {{STRING("[]"), STRING("$[0]")}, Null()},
// empty array
+ {{STRING("null"), STRING("$[1]")}, Null()},
+ {{STRING("true"), STRING("$[1]")}, Null()},
+ {{STRING("false"), STRING("$[1]")}, Null()},
+ {{STRING("100"), STRING("$[1]")}, Null()},
//int8
+ {{STRING("10000"), STRING("$[1]")}, Null()},
// int16
+ {{STRING("1000000000"), STRING("$[1]")}, Null()},
// int32
+ {{STRING("1152921504606846976"), STRING("$[1]")}, Null()},
// int64
+ {{STRING("6.18"), STRING("$[1]")}, Null()},
// double
+ {{STRING(R"("abcd")"), STRING("$[1]")}, Null()},
// string
+ {{STRING("{}"), STRING("$[1]")}, Null()},
// empty object
+ {{STRING(R"({"k1":"v31", "k2": 300})"), STRING("$[1]")}, Null()},
// object
+ {{STRING("[]"), STRING("$[1]")}, Null()},
// empty array
+ {{STRING("[123, 456]"), STRING("$[0]")}, INT(123)},
// int array
+ {{STRING("[123, 456]"), STRING("$[1]")}, INT(456)},
// int array
+ {{STRING("[123, 456]"), STRING("$[2]")}, Null()},
// int array
+ {{STRING(R"(["abc", "def"])"), STRING("$[0]")}, Null()},
// string array
+ {{STRING(R"(["abc", "def"])"), STRING("$[1]")}, Null()},
// string array
+ {{STRING(R"(["abc", "def"])"), STRING("$[2]")}, Null()},
// string array
+ {{STRING(R"([null, true, false, 100, 6.18, "abc"])"),
STRING("$[0]")},
+ Null()}, // multi type array
+ {{STRING(R"([null, true, false, 100, 6.18, "abc"])"),
STRING("$[1]")},
+ Null()}, // multi type array
+ {{STRING(R"([null, true, false, 100, 6.18, "abc"])"),
STRING("$[2]")},
+ Null()}, // multi type array
+ {{STRING(R"([null, true, false, 100, 6.18, "abc"])"),
STRING("$[3]")},
+ INT(100)}, // multi type array
+ {{STRING(R"([null, true, false, 100, 6.18, "abc"])"),
STRING("$[4]")},
+ Null()}, // multi type array
+ {{STRING(R"([null, true, false, 100, 6.18, "abc"])"),
STRING("$[5]")},
+ Null()}, // multi type array
+ {{STRING(R"([null, true, false, 100, 6.18, "abc"])"),
STRING("$[6]")},
+ Null()}, // multi type array
+ {{STRING(R"([{"k1":"v41", "k2": 400}, 1, "a", 3.14])"),
STRING("$[0]")},
+ Null()}, // complex array
+ {{STRING(R"([{"k1":"v41", "k2": 400}, 1, "a", 3.14])"),
STRING("$[1]")},
+ INT(1)}, // complex array
+ {{STRING(R"([{"k1":"v41", "k2": 400}, 1, "a", 3.14])"),
STRING("$[2]")},
+ Null()}, // complex array
+ {{STRING(R"([{"k1":"v41", "k2": 400}, 1, "a", 3.14])"),
STRING("$[3]")},
+ Null()}, // complex array
+ {{STRING(R"([{"k1":"v41", "k2": 400}, 1, "a", 3.14])"),
STRING("$[4]")},
+ Null()}, // complex array
+ };
+
+ check_function<DataTypeInt32, true>(func_name, input_types, data_set);
+
+ // get json with path $[0].k1
+ data_set = {
+ {{Null(), STRING("$[0].k1")}, Null()},
+ {{STRING("null"), STRING("$[0].k1")}, Null()},
+ {{STRING("true"), STRING("$[0].k1")}, Null()},
+ {{STRING("false"), STRING("$[0].k1")}, Null()},
+ {{STRING("100"), STRING("$[0].k1")}, Null()},
//int8
+ {{STRING("10000"), STRING("$[0].k1")}, Null()},
// int16
+ {{STRING("1000000000"), STRING("$[0].k1")}, Null()},
// int32
+ {{STRING("1152921504606846976"), STRING("$[0].k1")}, Null()},
// int64
+ {{STRING("6.18"), STRING("$[0].k1")}, Null()},
// double
+ {{STRING(R"("abcd")"), STRING("$[0].k1")}, Null()},
// string
+ {{STRING("{}"), STRING("$[0].k1")}, Null()},
// empty object
+ {{STRING(R"({"k1":"v31", "k2": 300})"), STRING("$[0].k1")},
Null()}, // object
+ {{STRING("[]"), STRING("$[0].k1")}, Null()},
// empty array
+ {{STRING("[123, 456]"), STRING("$[0].k1")}, Null()},
// int array
+ {{STRING(R"(["abc", "def"])"), STRING("$[0].k1")}, Null()},
// string array
+ {{STRING(R"([null, true, false, 100, 6.18, "abc"])"),
STRING("$[0].k1")},
+ Null()}, // multi type array
+ {{STRING(R"([{"k1":"v41", "k2": 400}, 1, "a", 3.14])"),
STRING("$[0].k1")},
+ Null()}, // complex array
+ {{STRING(R"([{"k1":"v41", "k2": 400}, 1, "a", 3.14])"),
STRING("$[0].k2")},
+ INT(400)}, // complex array
+ };
+
+ check_function<DataTypeInt32, true>(func_name, input_types, data_set);
+}
+
+TEST(FunctionJsonbTEST, GetJsonBigIntTest) {
+ std::string func_name = "get_json_bigint";
+ InputTypeSet input_types = {TypeIndex::JSONB, TypeIndex::String};
+
+ // get json from root
+ DataSet data_set = {
+ {{Null(), STRING("$")}, Null()},
+ {{STRING("null"), STRING("$")}, Null()},
+ {{STRING("true"), STRING("$")}, Null()},
+ {{STRING("false"), STRING("$")}, Null()},
+ {{STRING("100"), STRING("$")}, BIGINT(100)},
//int8
+ {{STRING("10000"), STRING("$")}, BIGINT(10000)},
// int16
+ {{STRING("1000000000"), STRING("$")}, BIGINT(1000000000)},
// int32
+ {{STRING("1152921504606846976"), STRING("$")},
BIGINT(1152921504606846976)}, // int64
+ {{STRING("6.18"), STRING("$")}, Null()},
// double
+ {{STRING(R"("abcd")"), STRING("$")}, Null()},
// string
+ {{STRING("{}"), STRING("$")}, Null()}, //
empty object
+ {{STRING(R"({"k1":"v31", "k2": 300})"), STRING("$")}, Null()}, //
object
+ {{STRING("[]"), STRING("$")}, Null()}, //
empty array
+ {{STRING("[123, 456]"), STRING("$")}, Null()}, //
int array
+ {{STRING(R"(["abc", "def"])"), STRING("$")}, Null()}, //
string array
+ {{STRING(R"([null, true, false, 100, 6.18, "abc"])"), STRING("$")},
+ Null()}, // multi type array
+ {{STRING(R"([{"k1":"v41", "k2": 400}, 1, "a", 3.14])"),
STRING("$")},
+ Null()}, // complex array
+ };
+
+ check_function<DataTypeInt64, true>(func_name, input_types, data_set);
+
+ // get json from obejct
+ data_set = {
+ {{Null(), STRING("$.k1")}, Null()},
+ {{STRING("null"), STRING("$.k1")}, Null()},
+ {{STRING("true"), STRING("$.k1")}, Null()},
+ {{STRING("false"), STRING("$.k1")}, Null()},
+ {{STRING("100"), STRING("$.k1")}, Null()},
//int8
+ {{STRING("10000"), STRING("$.k1")}, Null()},
// int16
+ {{STRING("1000000000"), STRING("$.k1")}, Null()},
// int32
+ {{STRING("1152921504606846976"), STRING("$.k1")}, Null()},
// int64
+ {{STRING("6.18"), STRING("$.k1")}, Null()},
// double
+ {{STRING(R"("abcd")"), STRING("$.k1")}, Null()},
// string
+ {{STRING("{}"), STRING("$.k1")}, Null()},
// empty object
+ {{STRING(R"({"k1":"v31", "k2": 300})"), STRING("$.k1")}, Null()},
// object
+ {{STRING("[]"), STRING("$.k1")}, Null()},
// empty array
+ {{STRING("[123, 456]"), STRING("$.k1")}, Null()},
// int array
+ {{STRING(R"(["abc", "def"])"), STRING("$.k1")}, Null()},
// string array
+ {{STRING(R"([null, true, false, 100, 6.18, "abc"])"),
STRING("$.k1")},
+ Null()}, // multi type array
+ {{STRING(R"([{"k1":"v41", "k2": 400}, 1, "a", 3.14])"),
STRING("$.k1")},
+ Null()}, // complex array
+ };
+
+ check_function<DataTypeInt64, true>(func_name, input_types, data_set);
+
+ // get json from array
+ data_set = {
+ {{Null(), STRING("$[0]")}, Null()},
+ {{STRING("null"), STRING("$[0]")}, Null()},
+ {{STRING("true"), STRING("$[0]")}, Null()},
+ {{STRING("false"), STRING("$[0]")}, Null()},
+ {{STRING("100"), STRING("$[0]")}, Null()},
//int8
+ {{STRING("10000"), STRING("$[0]")}, Null()},
// int16
+ {{STRING("1000000000"), STRING("$[0]")}, Null()},
// int32
+ {{STRING("1152921504606846976"), STRING("$[0]")}, Null()},
// int64
+ {{STRING("6.18"), STRING("$[0]")}, Null()},
// double
+ {{STRING(R"("abcd")"), STRING("$[0]")}, Null()},
// string
+ {{STRING("{}"), STRING("$[0]")}, Null()},
// empty object
+ {{STRING(R"({"k1":"v31", "k2": 300})"), STRING("$[0]")}, Null()},
// object
+ {{STRING("[]"), STRING("$[0]")}, Null()},
// empty array
+ {{STRING("null"), STRING("$[1]")}, Null()},
+ {{STRING("true"), STRING("$[1]")}, Null()},
+ {{STRING("false"), STRING("$[1]")}, Null()},
+ {{STRING("100"), STRING("$[1]")}, Null()},
//int8
+ {{STRING("10000"), STRING("$[1]")}, Null()},
// int16
+ {{STRING("1000000000"), STRING("$[1]")}, Null()},
// int32
+ {{STRING("1152921504606846976"), STRING("$[1]")}, Null()},
// int64
+ {{STRING("6.18"), STRING("$[1]")}, Null()},
// double
+ {{STRING(R"("abcd")"), STRING("$[1]")}, Null()},
// string
+ {{STRING("{}"), STRING("$[1]")}, Null()},
// empty object
+ {{STRING(R"({"k1":"v31", "k2": 300})"), STRING("$[1]")}, Null()},
// object
+ {{STRING("[]"), STRING("$[1]")}, Null()},
// empty array
+ {{STRING("[123, 456]"), STRING("$[0]")}, BIGINT(123)},
// int array
+ {{STRING("[123, 456]"), STRING("$[1]")}, BIGINT(456)},
// int array
+ {{STRING("[123, 456]"), STRING("$[2]")}, Null()},
// int array
+ {{STRING(R"(["abc", "def"])"), STRING("$[0]")}, Null()},
// string array
+ {{STRING(R"(["abc", "def"])"), STRING("$[1]")}, Null()},
// string array
+ {{STRING(R"(["abc", "def"])"), STRING("$[2]")}, Null()},
// string array
+ {{STRING(R"([null, true, false, 100, 6.18, "abc"])"),
STRING("$[0]")},
+ Null()}, // multi type array
+ {{STRING(R"([null, true, false, 100, 6.18, "abc"])"),
STRING("$[1]")},
+ Null()}, // multi type array
+ {{STRING(R"([null, true, false, 100, 6.18, "abc"])"),
STRING("$[2]")},
+ Null()}, // multi type array
+ {{STRING(R"([null, true, false, 100, 6.18, "abc"])"),
STRING("$[3]")},
+ BIGINT(100)}, // multi type array
+ {{STRING(R"([null, true, false, 100, 6.18, "abc"])"),
STRING("$[4]")},
+ Null()}, // multi type array
+ {{STRING(R"([null, true, false, 100, 6.18, "abc"])"),
STRING("$[5]")},
+ Null()}, // multi type array
+ {{STRING(R"([null, true, false, 100, 6.18, "abc"])"),
STRING("$[6]")},
+ Null()}, // multi type array
+ {{STRING(R"([{"k1":"v41", "k2": 400}, 1, "a", 3.14])"),
STRING("$[0]")},
+ Null()}, // complex array
+ {{STRING(R"([{"k1":"v41", "k2": 400}, 1, "a", 3.14])"),
STRING("$[1]")},
+ BIGINT(1)}, // complex array
+ {{STRING(R"([{"k1":"v41", "k2": 400}, 1, "a", 3.14])"),
STRING("$[2]")},
+ Null()}, // complex array
+ {{STRING(R"([{"k1":"v41", "k2": 400}, 1, "a", 3.14])"),
STRING("$[3]")},
+ Null()}, // complex array
+ {{STRING(R"([{"k1":"v41", "k2": 400}, 1, "a", 3.14])"),
STRING("$[4]")},
+ Null()}, // complex array
+ };
+
+ check_function<DataTypeInt64, true>(func_name, input_types, data_set);
+
+ // get json with path $[0].k1
+ data_set = {
+ {{Null(), STRING("$[0].k1")}, Null()},
+ {{STRING("null"), STRING("$[0].k1")}, Null()},
+ {{STRING("true"), STRING("$[0].k1")}, Null()},
+ {{STRING("false"), STRING("$[0].k1")}, Null()},
+ {{STRING("100"), STRING("$[0].k1")}, Null()},
//int8
+ {{STRING("10000"), STRING("$[0].k1")}, Null()},
// int16
+ {{STRING("1000000000"), STRING("$[0].k1")}, Null()},
// int32
+ {{STRING("1152921504606846976"), STRING("$[0].k1")}, Null()},
// int64
+ {{STRING("6.18"), STRING("$[0].k1")}, Null()},
// double
+ {{STRING(R"("abcd")"), STRING("$[0].k1")}, Null()},
// string
+ {{STRING("{}"), STRING("$[0].k1")}, Null()},
// empty object
+ {{STRING(R"({"k1":"v31", "k2": 300})"), STRING("$[0].k1")},
Null()}, // object
+ {{STRING("[]"), STRING("$[0].k1")}, Null()},
// empty array
+ {{STRING("[123, 456]"), STRING("$[0].k1")}, Null()},
// int array
+ {{STRING(R"(["abc", "def"])"), STRING("$[0].k1")}, Null()},
// string array
+ {{STRING(R"([null, true, false, 100, 6.18, "abc"])"),
STRING("$[0].k1")},
+ Null()}, // multi type array
+ {{STRING(R"([{"k1":"v41", "k2": 400}, 1, "a", 3.14])"),
STRING("$[0].k1")},
+ Null()}, // complex array
+ {{STRING(R"([{"k1":"v41", "k2": 400}, 1, "a", 3.14])"),
STRING("$[0].k2")},
+ BIGINT(400)}, // complex array
+ };
+
+ check_function<DataTypeInt64, true>(func_name, input_types, data_set);
+}
+
+TEST(FunctionJsonbTEST, GetJsonDoubleTest) {
+ std::string func_name = "get_json_double";
+ InputTypeSet input_types = {TypeIndex::JSONB, TypeIndex::String};
+
+ // get json from root
+ DataSet data_set = {
Review Comment:
warning: variable 'data_set' is not initialized
[cppcoreguidelines-init-variables]
```suggestion
DataSet data_set = 0 = {
```
##########
be/test/vec/function/function_jsonb_test.cpp:
##########
@@ -1487,4 +1487,574 @@ TEST(FunctionJsonbTEST, JsonbCastFromOtherTest) {
"CAST", {Notnull {TypeIndex::String}, ConstedNotnull
{TypeIndex::JSONB}},
{{{STRING(R"("abcd")"), Null()}, STRING(R"("abcd")")}});
}
+
+TEST(FunctionJsonbTEST, GetJSONSTRINGTest) {
+ std::string func_name = "get_json_string";
+ InputTypeSet input_types = {TypeIndex::JSONB, TypeIndex::String};
+
+ // get json from root
+ DataSet data_set = {
+ {{Null(), STRING("$")}, Null()},
+ {{STRING("null"), STRING("$")}, STRING("null")},
+ {{STRING("true"), STRING("$")}, STRING("true")},
+ {{STRING("false"), STRING("$")}, STRING("false")},
+ {{STRING("100"), STRING("$")}, STRING("100")},
//int8
+ {{STRING("10000"), STRING("$")}, STRING("10000")},
// int16
+ {{STRING("1000000000"), STRING("$")}, STRING("1000000000")},
// int32
+ {{STRING("1152921504606846976"), STRING("$")},
STRING("1152921504606846976")}, // int64
+ {{STRING("6.18"), STRING("$")}, STRING("6.18")},
// double
+ {{STRING(R"("abcd")"), STRING("$")}, STRING("abcd")},
// string
+ {{STRING("{}"), STRING("$")}, STRING("{}")}, // empty object
+ {{STRING(R"({"k1":"v31", "k2": 300})"), STRING("$")},
+ STRING(R"({"k1":"v31","k2":300})")}, //
object
+ {{STRING("[]"), STRING("$")}, STRING("[]")}, //
empty array
+ {{STRING("[123, 456]"), STRING("$")}, STRING("[123,456]")}, // int
array
+ {{STRING(R"(["abc", "def"])"), STRING("$")},
+ STRING(R"(["abc","def"])")}, // string array
+ {{STRING(R"([null, true, false, 100, 6.18, "abc"])"), STRING("$")},
+ STRING(R"([null,true,false,100,6.18,"abc"])")}, // multi type
array
+ {{STRING(R"([{"k1":"v41", "k2": 400}, 1, "a", 3.14])"),
STRING("$")},
+ STRING(R"([{"k1":"v41","k2":400},1,"a",3.14])")}, // complex array
+ };
+
+ check_function<DataTypeString, true>(func_name, input_types, data_set);
+
+ // get json from obejct
+ data_set = {
+ {{Null(), STRING("$.k1")}, Null()},
+ {{STRING("null"), STRING("$.k1")}, Null()},
+ {{STRING("true"), STRING("$.k1")}, Null()},
+ {{STRING("false"), STRING("$.k1")}, Null()},
+ {{STRING("100"), STRING("$.k1")}, Null()},
//int8
+ {{STRING("10000"), STRING("$.k1")}, Null()},
// int16
+ {{STRING("1000000000"), STRING("$.k1")}, Null()},
// int32
+ {{STRING("1152921504606846976"), STRING("$.k1")}, Null()},
// int64
+ {{STRING("6.18"), STRING("$.k1")}, Null()},
// double
+ {{STRING(R"("abcd")"), STRING("$.k1")}, Null()},
// string
+ {{STRING("{}"), STRING("$.k1")}, Null()},
// empty object
+ {{STRING(R"({"k1":"v31", "k2": 300})"), STRING("$.k1")},
STRING("v31")}, // object
+ {{STRING("[]"), STRING("$.k1")}, Null()},
// empty array
+ {{STRING("[123, 456]"), STRING("$.k1")}, Null()},
// int array
+ {{STRING(R"(["abc", "def"])"), STRING("$.k1")}, Null()},
// string array
+ {{STRING(R"([null, true, false, 100, 6.18, "abc"])"),
STRING("$.k1")},
+ Null()}, // multi type array
+ {{STRING(R"([{"k1":"v41", "k2": 400}, 1, "a", 3.14])"),
STRING("$.k1")},
+ Null()}, // complex array
+ };
+
+ check_function<DataTypeString, true>(func_name, input_types, data_set);
+
+ // get json from array
+ data_set = {
+ {{Null(), STRING("$[0]")}, Null()},
+ {{STRING("null"), STRING("$[0]")}, Null()},
+ {{STRING("true"), STRING("$[0]")}, Null()},
+ {{STRING("false"), STRING("$[0]")}, Null()},
+ {{STRING("100"), STRING("$[0]")}, Null()}, //int8
+ {{STRING("10000"), STRING("$[0]")}, Null()}, // int16
+ {{STRING("1000000000"), STRING("$[0]")}, Null()}, // int32
+ {{STRING("1152921504606846976"), STRING("$[0]")}, Null()}, // int64
+ {{STRING("6.18"), STRING("$[0]")}, Null()}, //
double
+ {{STRING(R"("abcd")"), STRING("$[0]")}, Null()}, //
string
+ {{STRING("{}"), STRING("$[0]")}, STRING("{}")}, //
empty object
+ {{STRING(R"({"k1":"v31", "k2": 300})"), STRING("$[0]")},
+ STRING(R"({"k1":"v31","k2":300})")}, // object
+ {{STRING("[]"), STRING("$[0]")}, Null()}, // empty array
+ {{STRING("null"), STRING("$[1]")}, Null()},
+ {{STRING("true"), STRING("$[1]")}, Null()},
+ {{STRING("false"), STRING("$[1]")}, Null()},
+ {{STRING("100"), STRING("$[1]")}, Null()},
//int8
+ {{STRING("10000"), STRING("$[1]")}, Null()},
// int16
+ {{STRING("1000000000"), STRING("$[1]")}, Null()},
// int32
+ {{STRING("1152921504606846976"), STRING("$[1]")}, Null()},
// int64
+ {{STRING("6.18"), STRING("$[1]")}, Null()},
// double
+ {{STRING(R"("abcd")"), STRING("$[1]")}, Null()},
// string
+ {{STRING("{}"), STRING("$[1]")}, Null()},
// empty object
+ {{STRING(R"({"k1":"v31", "k2": 300})"), STRING("$[1]")}, Null()},
// object
+ {{STRING("[]"), STRING("$[1]")}, Null()},
// empty array
+ {{STRING("[123, 456]"), STRING("$[0]")}, STRING("123")},
// int array
+ {{STRING("[123, 456]"), STRING("$[1]")}, STRING("456")},
// int array
+ {{STRING("[123, 456]"), STRING("$[2]")}, Null()},
// int array
+ {{STRING(R"(["abc", "def"])"), STRING("$[0]")}, STRING("abc")},
// string array
+ {{STRING(R"(["abc", "def"])"), STRING("$[1]")}, STRING("def")},
// string array
+ {{STRING(R"(["abc", "def"])"), STRING("$[2]")}, Null()},
// string array
+ {{STRING(R"([null, true, false, 100, 6.18, "abc"])"),
STRING("$[0]")},
+ STRING("null")}, // multi type array
+ {{STRING(R"([null, true, false, 100, 6.18, "abc"])"),
STRING("$[1]")},
+ STRING("true")}, // multi type array
+ {{STRING(R"([null, true, false, 100, 6.18, "abc"])"),
STRING("$[2]")},
+ STRING("false")}, // multi type array
+ {{STRING(R"([null, true, false, 100, 6.18, "abc"])"),
STRING("$[3]")},
+ STRING("100")}, // multi type array
+ {{STRING(R"([null, true, false, 100, 6.18, "abc"])"),
STRING("$[4]")},
+ STRING("6.18")}, // multi type array
+ {{STRING(R"([null, true, false, 100, 6.18, "abc"])"),
STRING("$[5]")},
+ STRING("abc")}, // multi type array
+ {{STRING(R"([null, true, false, 100, 6.18, "abc"])"),
STRING("$[6]")},
+ Null()}, // multi type array
+ {{STRING(R"([{"k1":"v41", "k2": 400}, 1, "a", 3.14])"),
STRING("$[0]")},
+ STRING(R"({"k1":"v41","k2":400})")}, // complex array
+ {{STRING(R"([{"k1":"v41", "k2": 400}, 1, "a", 3.14])"),
STRING("$[1]")},
+ STRING("1")}, // complex array
+ {{STRING(R"([{"k1":"v41", "k2": 400}, 1, "a", 3.14])"),
STRING("$[2]")},
+ STRING("a")}, // complex array
+ {{STRING(R"([{"k1":"v41", "k2": 400}, 1, "a", 3.14])"),
STRING("$[3]")},
+ STRING("3.14")}, // complex array
+ {{STRING(R"([{"k1":"v41", "k2": 400}, 1, "a", 3.14])"),
STRING("$[4]")},
+ Null()}, // complex array
+ };
+
+ check_function<DataTypeString, true>(func_name, input_types, data_set);
+
+ // get json with path $[0].k1
+ data_set = {
+ {{Null(), STRING("$[0].k1")}, Null()},
+ {{STRING("null"), STRING("$[0].k1")}, Null()},
+ {{STRING("true"), STRING("$[0].k1")}, Null()},
+ {{STRING("false"), STRING("$[0].k1")}, Null()},
+ {{STRING("100"), STRING("$[0].k1")}, Null()},
//int8
+ {{STRING("10000"), STRING("$[0].k1")}, Null()}, //
int16
+ {{STRING("1000000000"), STRING("$[0].k1")}, Null()}, //
int32
+ {{STRING("1152921504606846976"), STRING("$[0].k1")}, Null()}, //
int64
+ {{STRING("6.18"), STRING("$[0].k1")}, Null()}, //
double
+ {{STRING(R"("abcd")"), STRING("$[0].k1")}, Null()}, //
string
+ {{STRING("{}"), STRING("$[0].k1")}, Null()}, //
empty object
+ {{STRING(R"({"k1":"v31", "k2": 300})"), STRING("$[0].k1")},
STRING(R"(v31)")}, // object
+ {{STRING("[]"), STRING("$[0].k1")}, Null()}, //
empty array
+ {{STRING("[123, 456]"), STRING("$[0].k1")}, Null()}, // int
array
+ {{STRING(R"(["abc", "def"])"), STRING("$[0].k1")}, Null()}, //
string array
+ {{STRING(R"([null, true, false, 100, 6.18, "abc"])"),
STRING("$[0].k1")},
+ Null()}, // multi type array
+ {{STRING(R"([{"k1":"v41", "k2": 400}, 1, "a", 3.14])"),
STRING("$[0].k1")},
+ STRING("v41")}, // complex array
+ };
+
+ check_function<DataTypeString, true>(func_name, input_types, data_set);
+}
+
+TEST(FunctionJsonbTEST, GetJsonIntTest) {
+ std::string func_name = "get_json_int";
+ InputTypeSet input_types = {TypeIndex::JSONB, TypeIndex::String};
+
+ // get json from root
+ DataSet data_set = {
+ {{Null(), STRING("$")}, Null()},
+ {{STRING("null"), STRING("$")}, Null()},
+ {{STRING("true"), STRING("$")}, Null()},
+ {{STRING("false"), STRING("$")}, Null()},
+ {{STRING("100"), STRING("$")}, INT(100)},
//int8
+ {{STRING("10000"), STRING("$")}, INT(10000)}, //
int16
+ {{STRING("1000000000"), STRING("$")}, INT(1000000000)}, //
int32
+ {{STRING("1152921504606846976"), STRING("$")}, Null()}, //
int64
+ {{STRING("6.18"), STRING("$")}, Null()}, //
double
+ {{STRING(R"("abcd")"), STRING("$")}, Null()}, //
string
+ {{STRING("{}"), STRING("$")}, Null()}, //
empty object
+ {{STRING(R"({"k1":"v31", "k2": 300})"), STRING("$")}, Null()}, //
object
+ {{STRING("[]"), STRING("$")}, Null()}, //
empty array
+ {{STRING("[123, 456]"), STRING("$")}, Null()}, //
int array
+ {{STRING(R"(["abc", "def"])"), STRING("$")}, Null()}, //
string array
+ {{STRING(R"([null, true, false, 100, 6.18, "abc"])"), STRING("$")},
+ Null()}, // multi type array
+ {{STRING(R"([{"k1":"v41", "k2": 400}, 1, "a", 3.14])"),
STRING("$")},
+ Null()}, // complex array
+ };
+
+ check_function<DataTypeInt32, true>(func_name, input_types, data_set);
+
+ // get json from obejct
+ data_set = {
+ {{Null(), STRING("$.k1")}, Null()},
+ {{STRING("null"), STRING("$.k1")}, Null()},
+ {{STRING("true"), STRING("$.k1")}, Null()},
+ {{STRING("false"), STRING("$.k1")}, Null()},
+ {{STRING("100"), STRING("$.k1")}, Null()},
//int8
+ {{STRING("10000"), STRING("$.k1")}, Null()},
// int16
+ {{STRING("1000000000"), STRING("$.k1")}, Null()},
// int32
+ {{STRING("1152921504606846976"), STRING("$.k1")}, Null()},
// int64
+ {{STRING("6.18"), STRING("$.k1")}, Null()},
// double
+ {{STRING(R"("abcd")"), STRING("$.k1")}, Null()},
// string
+ {{STRING("{}"), STRING("$.k1")}, Null()},
// empty object
+ {{STRING(R"({"k1":"v31", "k2": 300})"), STRING("$.k1")}, Null()},
// object
+ {{STRING("[]"), STRING("$.k1")}, Null()},
// empty array
+ {{STRING("[123, 456]"), STRING("$.k1")}, Null()},
// int array
+ {{STRING(R"(["abc", "def"])"), STRING("$.k1")}, Null()},
// string array
+ {{STRING(R"([null, true, false, 100, 6.18, "abc"])"),
STRING("$.k1")},
+ Null()}, // multi type array
+ {{STRING(R"([{"k1":"v41", "k2": 400}, 1, "a", 3.14])"),
STRING("$.k1")},
+ Null()}, // complex array
+ };
+
+ check_function<DataTypeInt32, true>(func_name, input_types, data_set);
+
+ // get json from array
+ data_set = {
+ {{Null(), STRING("$[0]")}, Null()},
+ {{STRING("null"), STRING("$[0]")}, Null()},
+ {{STRING("true"), STRING("$[0]")}, Null()},
+ {{STRING("false"), STRING("$[0]")}, Null()},
+ {{STRING("100"), STRING("$[0]")}, Null()},
//int8
+ {{STRING("10000"), STRING("$[0]")}, Null()},
// int16
+ {{STRING("1000000000"), STRING("$[0]")}, Null()},
// int32
+ {{STRING("1152921504606846976"), STRING("$[0]")}, Null()},
// int64
+ {{STRING("6.18"), STRING("$[0]")}, Null()},
// double
+ {{STRING(R"("abcd")"), STRING("$[0]")}, Null()},
// string
+ {{STRING("{}"), STRING("$[0]")}, Null()},
// empty object
+ {{STRING(R"({"k1":"v31", "k2": 300})"), STRING("$[0]")}, Null()},
// object
+ {{STRING("[]"), STRING("$[0]")}, Null()},
// empty array
+ {{STRING("null"), STRING("$[1]")}, Null()},
+ {{STRING("true"), STRING("$[1]")}, Null()},
+ {{STRING("false"), STRING("$[1]")}, Null()},
+ {{STRING("100"), STRING("$[1]")}, Null()},
//int8
+ {{STRING("10000"), STRING("$[1]")}, Null()},
// int16
+ {{STRING("1000000000"), STRING("$[1]")}, Null()},
// int32
+ {{STRING("1152921504606846976"), STRING("$[1]")}, Null()},
// int64
+ {{STRING("6.18"), STRING("$[1]")}, Null()},
// double
+ {{STRING(R"("abcd")"), STRING("$[1]")}, Null()},
// string
+ {{STRING("{}"), STRING("$[1]")}, Null()},
// empty object
+ {{STRING(R"({"k1":"v31", "k2": 300})"), STRING("$[1]")}, Null()},
// object
+ {{STRING("[]"), STRING("$[1]")}, Null()},
// empty array
+ {{STRING("[123, 456]"), STRING("$[0]")}, INT(123)},
// int array
+ {{STRING("[123, 456]"), STRING("$[1]")}, INT(456)},
// int array
+ {{STRING("[123, 456]"), STRING("$[2]")}, Null()},
// int array
+ {{STRING(R"(["abc", "def"])"), STRING("$[0]")}, Null()},
// string array
+ {{STRING(R"(["abc", "def"])"), STRING("$[1]")}, Null()},
// string array
+ {{STRING(R"(["abc", "def"])"), STRING("$[2]")}, Null()},
// string array
+ {{STRING(R"([null, true, false, 100, 6.18, "abc"])"),
STRING("$[0]")},
+ Null()}, // multi type array
+ {{STRING(R"([null, true, false, 100, 6.18, "abc"])"),
STRING("$[1]")},
+ Null()}, // multi type array
+ {{STRING(R"([null, true, false, 100, 6.18, "abc"])"),
STRING("$[2]")},
+ Null()}, // multi type array
+ {{STRING(R"([null, true, false, 100, 6.18, "abc"])"),
STRING("$[3]")},
+ INT(100)}, // multi type array
+ {{STRING(R"([null, true, false, 100, 6.18, "abc"])"),
STRING("$[4]")},
+ Null()}, // multi type array
+ {{STRING(R"([null, true, false, 100, 6.18, "abc"])"),
STRING("$[5]")},
+ Null()}, // multi type array
+ {{STRING(R"([null, true, false, 100, 6.18, "abc"])"),
STRING("$[6]")},
+ Null()}, // multi type array
+ {{STRING(R"([{"k1":"v41", "k2": 400}, 1, "a", 3.14])"),
STRING("$[0]")},
+ Null()}, // complex array
+ {{STRING(R"([{"k1":"v41", "k2": 400}, 1, "a", 3.14])"),
STRING("$[1]")},
+ INT(1)}, // complex array
+ {{STRING(R"([{"k1":"v41", "k2": 400}, 1, "a", 3.14])"),
STRING("$[2]")},
+ Null()}, // complex array
+ {{STRING(R"([{"k1":"v41", "k2": 400}, 1, "a", 3.14])"),
STRING("$[3]")},
+ Null()}, // complex array
+ {{STRING(R"([{"k1":"v41", "k2": 400}, 1, "a", 3.14])"),
STRING("$[4]")},
+ Null()}, // complex array
+ };
+
+ check_function<DataTypeInt32, true>(func_name, input_types, data_set);
+
+ // get json with path $[0].k1
+ data_set = {
+ {{Null(), STRING("$[0].k1")}, Null()},
+ {{STRING("null"), STRING("$[0].k1")}, Null()},
+ {{STRING("true"), STRING("$[0].k1")}, Null()},
+ {{STRING("false"), STRING("$[0].k1")}, Null()},
+ {{STRING("100"), STRING("$[0].k1")}, Null()},
//int8
+ {{STRING("10000"), STRING("$[0].k1")}, Null()},
// int16
+ {{STRING("1000000000"), STRING("$[0].k1")}, Null()},
// int32
+ {{STRING("1152921504606846976"), STRING("$[0].k1")}, Null()},
// int64
+ {{STRING("6.18"), STRING("$[0].k1")}, Null()},
// double
+ {{STRING(R"("abcd")"), STRING("$[0].k1")}, Null()},
// string
+ {{STRING("{}"), STRING("$[0].k1")}, Null()},
// empty object
+ {{STRING(R"({"k1":"v31", "k2": 300})"), STRING("$[0].k1")},
Null()}, // object
+ {{STRING("[]"), STRING("$[0].k1")}, Null()},
// empty array
+ {{STRING("[123, 456]"), STRING("$[0].k1")}, Null()},
// int array
+ {{STRING(R"(["abc", "def"])"), STRING("$[0].k1")}, Null()},
// string array
+ {{STRING(R"([null, true, false, 100, 6.18, "abc"])"),
STRING("$[0].k1")},
+ Null()}, // multi type array
+ {{STRING(R"([{"k1":"v41", "k2": 400}, 1, "a", 3.14])"),
STRING("$[0].k1")},
+ Null()}, // complex array
+ {{STRING(R"([{"k1":"v41", "k2": 400}, 1, "a", 3.14])"),
STRING("$[0].k2")},
+ INT(400)}, // complex array
+ };
+
+ check_function<DataTypeInt32, true>(func_name, input_types, data_set);
+}
+
+TEST(FunctionJsonbTEST, GetJsonBigIntTest) {
+ std::string func_name = "get_json_bigint";
+ InputTypeSet input_types = {TypeIndex::JSONB, TypeIndex::String};
Review Comment:
warning: variable 'input_types' is not initialized
[cppcoreguidelines-init-variables]
```suggestion
InputTypeSet input_types = 0 = {TypeIndex::JSONB, TypeIndex::String};
```
##########
be/test/vec/function/function_jsonb_test.cpp:
##########
@@ -1487,4 +1487,574 @@ TEST(FunctionJsonbTEST, JsonbCastFromOtherTest) {
"CAST", {Notnull {TypeIndex::String}, ConstedNotnull
{TypeIndex::JSONB}},
{{{STRING(R"("abcd")"), Null()}, STRING(R"("abcd")")}});
}
+
+TEST(FunctionJsonbTEST, GetJSONSTRINGTest) {
+ std::string func_name = "get_json_string";
+ InputTypeSet input_types = {TypeIndex::JSONB, TypeIndex::String};
+
+ // get json from root
+ DataSet data_set = {
+ {{Null(), STRING("$")}, Null()},
+ {{STRING("null"), STRING("$")}, STRING("null")},
+ {{STRING("true"), STRING("$")}, STRING("true")},
+ {{STRING("false"), STRING("$")}, STRING("false")},
+ {{STRING("100"), STRING("$")}, STRING("100")},
//int8
+ {{STRING("10000"), STRING("$")}, STRING("10000")},
// int16
+ {{STRING("1000000000"), STRING("$")}, STRING("1000000000")},
// int32
+ {{STRING("1152921504606846976"), STRING("$")},
STRING("1152921504606846976")}, // int64
+ {{STRING("6.18"), STRING("$")}, STRING("6.18")},
// double
+ {{STRING(R"("abcd")"), STRING("$")}, STRING("abcd")},
// string
+ {{STRING("{}"), STRING("$")}, STRING("{}")}, // empty object
+ {{STRING(R"({"k1":"v31", "k2": 300})"), STRING("$")},
+ STRING(R"({"k1":"v31","k2":300})")}, //
object
+ {{STRING("[]"), STRING("$")}, STRING("[]")}, //
empty array
+ {{STRING("[123, 456]"), STRING("$")}, STRING("[123,456]")}, // int
array
+ {{STRING(R"(["abc", "def"])"), STRING("$")},
+ STRING(R"(["abc","def"])")}, // string array
+ {{STRING(R"([null, true, false, 100, 6.18, "abc"])"), STRING("$")},
+ STRING(R"([null,true,false,100,6.18,"abc"])")}, // multi type
array
+ {{STRING(R"([{"k1":"v41", "k2": 400}, 1, "a", 3.14])"),
STRING("$")},
+ STRING(R"([{"k1":"v41","k2":400},1,"a",3.14])")}, // complex array
+ };
+
+ check_function<DataTypeString, true>(func_name, input_types, data_set);
+
+ // get json from obejct
+ data_set = {
+ {{Null(), STRING("$.k1")}, Null()},
+ {{STRING("null"), STRING("$.k1")}, Null()},
+ {{STRING("true"), STRING("$.k1")}, Null()},
+ {{STRING("false"), STRING("$.k1")}, Null()},
+ {{STRING("100"), STRING("$.k1")}, Null()},
//int8
+ {{STRING("10000"), STRING("$.k1")}, Null()},
// int16
+ {{STRING("1000000000"), STRING("$.k1")}, Null()},
// int32
+ {{STRING("1152921504606846976"), STRING("$.k1")}, Null()},
// int64
+ {{STRING("6.18"), STRING("$.k1")}, Null()},
// double
+ {{STRING(R"("abcd")"), STRING("$.k1")}, Null()},
// string
+ {{STRING("{}"), STRING("$.k1")}, Null()},
// empty object
+ {{STRING(R"({"k1":"v31", "k2": 300})"), STRING("$.k1")},
STRING("v31")}, // object
+ {{STRING("[]"), STRING("$.k1")}, Null()},
// empty array
+ {{STRING("[123, 456]"), STRING("$.k1")}, Null()},
// int array
+ {{STRING(R"(["abc", "def"])"), STRING("$.k1")}, Null()},
// string array
+ {{STRING(R"([null, true, false, 100, 6.18, "abc"])"),
STRING("$.k1")},
+ Null()}, // multi type array
+ {{STRING(R"([{"k1":"v41", "k2": 400}, 1, "a", 3.14])"),
STRING("$.k1")},
+ Null()}, // complex array
+ };
+
+ check_function<DataTypeString, true>(func_name, input_types, data_set);
+
+ // get json from array
+ data_set = {
+ {{Null(), STRING("$[0]")}, Null()},
+ {{STRING("null"), STRING("$[0]")}, Null()},
+ {{STRING("true"), STRING("$[0]")}, Null()},
+ {{STRING("false"), STRING("$[0]")}, Null()},
+ {{STRING("100"), STRING("$[0]")}, Null()}, //int8
+ {{STRING("10000"), STRING("$[0]")}, Null()}, // int16
+ {{STRING("1000000000"), STRING("$[0]")}, Null()}, // int32
+ {{STRING("1152921504606846976"), STRING("$[0]")}, Null()}, // int64
+ {{STRING("6.18"), STRING("$[0]")}, Null()}, //
double
+ {{STRING(R"("abcd")"), STRING("$[0]")}, Null()}, //
string
+ {{STRING("{}"), STRING("$[0]")}, STRING("{}")}, //
empty object
+ {{STRING(R"({"k1":"v31", "k2": 300})"), STRING("$[0]")},
+ STRING(R"({"k1":"v31","k2":300})")}, // object
+ {{STRING("[]"), STRING("$[0]")}, Null()}, // empty array
+ {{STRING("null"), STRING("$[1]")}, Null()},
+ {{STRING("true"), STRING("$[1]")}, Null()},
+ {{STRING("false"), STRING("$[1]")}, Null()},
+ {{STRING("100"), STRING("$[1]")}, Null()},
//int8
+ {{STRING("10000"), STRING("$[1]")}, Null()},
// int16
+ {{STRING("1000000000"), STRING("$[1]")}, Null()},
// int32
+ {{STRING("1152921504606846976"), STRING("$[1]")}, Null()},
// int64
+ {{STRING("6.18"), STRING("$[1]")}, Null()},
// double
+ {{STRING(R"("abcd")"), STRING("$[1]")}, Null()},
// string
+ {{STRING("{}"), STRING("$[1]")}, Null()},
// empty object
+ {{STRING(R"({"k1":"v31", "k2": 300})"), STRING("$[1]")}, Null()},
// object
+ {{STRING("[]"), STRING("$[1]")}, Null()},
// empty array
+ {{STRING("[123, 456]"), STRING("$[0]")}, STRING("123")},
// int array
+ {{STRING("[123, 456]"), STRING("$[1]")}, STRING("456")},
// int array
+ {{STRING("[123, 456]"), STRING("$[2]")}, Null()},
// int array
+ {{STRING(R"(["abc", "def"])"), STRING("$[0]")}, STRING("abc")},
// string array
+ {{STRING(R"(["abc", "def"])"), STRING("$[1]")}, STRING("def")},
// string array
+ {{STRING(R"(["abc", "def"])"), STRING("$[2]")}, Null()},
// string array
+ {{STRING(R"([null, true, false, 100, 6.18, "abc"])"),
STRING("$[0]")},
+ STRING("null")}, // multi type array
+ {{STRING(R"([null, true, false, 100, 6.18, "abc"])"),
STRING("$[1]")},
+ STRING("true")}, // multi type array
+ {{STRING(R"([null, true, false, 100, 6.18, "abc"])"),
STRING("$[2]")},
+ STRING("false")}, // multi type array
+ {{STRING(R"([null, true, false, 100, 6.18, "abc"])"),
STRING("$[3]")},
+ STRING("100")}, // multi type array
+ {{STRING(R"([null, true, false, 100, 6.18, "abc"])"),
STRING("$[4]")},
+ STRING("6.18")}, // multi type array
+ {{STRING(R"([null, true, false, 100, 6.18, "abc"])"),
STRING("$[5]")},
+ STRING("abc")}, // multi type array
+ {{STRING(R"([null, true, false, 100, 6.18, "abc"])"),
STRING("$[6]")},
+ Null()}, // multi type array
+ {{STRING(R"([{"k1":"v41", "k2": 400}, 1, "a", 3.14])"),
STRING("$[0]")},
+ STRING(R"({"k1":"v41","k2":400})")}, // complex array
+ {{STRING(R"([{"k1":"v41", "k2": 400}, 1, "a", 3.14])"),
STRING("$[1]")},
+ STRING("1")}, // complex array
+ {{STRING(R"([{"k1":"v41", "k2": 400}, 1, "a", 3.14])"),
STRING("$[2]")},
+ STRING("a")}, // complex array
+ {{STRING(R"([{"k1":"v41", "k2": 400}, 1, "a", 3.14])"),
STRING("$[3]")},
+ STRING("3.14")}, // complex array
+ {{STRING(R"([{"k1":"v41", "k2": 400}, 1, "a", 3.14])"),
STRING("$[4]")},
+ Null()}, // complex array
+ };
+
+ check_function<DataTypeString, true>(func_name, input_types, data_set);
+
+ // get json with path $[0].k1
+ data_set = {
+ {{Null(), STRING("$[0].k1")}, Null()},
+ {{STRING("null"), STRING("$[0].k1")}, Null()},
+ {{STRING("true"), STRING("$[0].k1")}, Null()},
+ {{STRING("false"), STRING("$[0].k1")}, Null()},
+ {{STRING("100"), STRING("$[0].k1")}, Null()},
//int8
+ {{STRING("10000"), STRING("$[0].k1")}, Null()}, //
int16
+ {{STRING("1000000000"), STRING("$[0].k1")}, Null()}, //
int32
+ {{STRING("1152921504606846976"), STRING("$[0].k1")}, Null()}, //
int64
+ {{STRING("6.18"), STRING("$[0].k1")}, Null()}, //
double
+ {{STRING(R"("abcd")"), STRING("$[0].k1")}, Null()}, //
string
+ {{STRING("{}"), STRING("$[0].k1")}, Null()}, //
empty object
+ {{STRING(R"({"k1":"v31", "k2": 300})"), STRING("$[0].k1")},
STRING(R"(v31)")}, // object
+ {{STRING("[]"), STRING("$[0].k1")}, Null()}, //
empty array
+ {{STRING("[123, 456]"), STRING("$[0].k1")}, Null()}, // int
array
+ {{STRING(R"(["abc", "def"])"), STRING("$[0].k1")}, Null()}, //
string array
+ {{STRING(R"([null, true, false, 100, 6.18, "abc"])"),
STRING("$[0].k1")},
+ Null()}, // multi type array
+ {{STRING(R"([{"k1":"v41", "k2": 400}, 1, "a", 3.14])"),
STRING("$[0].k1")},
+ STRING("v41")}, // complex array
+ };
+
+ check_function<DataTypeString, true>(func_name, input_types, data_set);
+}
+
+TEST(FunctionJsonbTEST, GetJsonIntTest) {
+ std::string func_name = "get_json_int";
+ InputTypeSet input_types = {TypeIndex::JSONB, TypeIndex::String};
+
+ // get json from root
+ DataSet data_set = {
+ {{Null(), STRING("$")}, Null()},
+ {{STRING("null"), STRING("$")}, Null()},
+ {{STRING("true"), STRING("$")}, Null()},
+ {{STRING("false"), STRING("$")}, Null()},
+ {{STRING("100"), STRING("$")}, INT(100)},
//int8
+ {{STRING("10000"), STRING("$")}, INT(10000)}, //
int16
+ {{STRING("1000000000"), STRING("$")}, INT(1000000000)}, //
int32
+ {{STRING("1152921504606846976"), STRING("$")}, Null()}, //
int64
+ {{STRING("6.18"), STRING("$")}, Null()}, //
double
+ {{STRING(R"("abcd")"), STRING("$")}, Null()}, //
string
+ {{STRING("{}"), STRING("$")}, Null()}, //
empty object
+ {{STRING(R"({"k1":"v31", "k2": 300})"), STRING("$")}, Null()}, //
object
+ {{STRING("[]"), STRING("$")}, Null()}, //
empty array
+ {{STRING("[123, 456]"), STRING("$")}, Null()}, //
int array
+ {{STRING(R"(["abc", "def"])"), STRING("$")}, Null()}, //
string array
+ {{STRING(R"([null, true, false, 100, 6.18, "abc"])"), STRING("$")},
+ Null()}, // multi type array
+ {{STRING(R"([{"k1":"v41", "k2": 400}, 1, "a", 3.14])"),
STRING("$")},
+ Null()}, // complex array
+ };
+
+ check_function<DataTypeInt32, true>(func_name, input_types, data_set);
+
+ // get json from obejct
+ data_set = {
+ {{Null(), STRING("$.k1")}, Null()},
+ {{STRING("null"), STRING("$.k1")}, Null()},
+ {{STRING("true"), STRING("$.k1")}, Null()},
+ {{STRING("false"), STRING("$.k1")}, Null()},
+ {{STRING("100"), STRING("$.k1")}, Null()},
//int8
+ {{STRING("10000"), STRING("$.k1")}, Null()},
// int16
+ {{STRING("1000000000"), STRING("$.k1")}, Null()},
// int32
+ {{STRING("1152921504606846976"), STRING("$.k1")}, Null()},
// int64
+ {{STRING("6.18"), STRING("$.k1")}, Null()},
// double
+ {{STRING(R"("abcd")"), STRING("$.k1")}, Null()},
// string
+ {{STRING("{}"), STRING("$.k1")}, Null()},
// empty object
+ {{STRING(R"({"k1":"v31", "k2": 300})"), STRING("$.k1")}, Null()},
// object
+ {{STRING("[]"), STRING("$.k1")}, Null()},
// empty array
+ {{STRING("[123, 456]"), STRING("$.k1")}, Null()},
// int array
+ {{STRING(R"(["abc", "def"])"), STRING("$.k1")}, Null()},
// string array
+ {{STRING(R"([null, true, false, 100, 6.18, "abc"])"),
STRING("$.k1")},
+ Null()}, // multi type array
+ {{STRING(R"([{"k1":"v41", "k2": 400}, 1, "a", 3.14])"),
STRING("$.k1")},
+ Null()}, // complex array
+ };
+
+ check_function<DataTypeInt32, true>(func_name, input_types, data_set);
+
+ // get json from array
+ data_set = {
+ {{Null(), STRING("$[0]")}, Null()},
+ {{STRING("null"), STRING("$[0]")}, Null()},
+ {{STRING("true"), STRING("$[0]")}, Null()},
+ {{STRING("false"), STRING("$[0]")}, Null()},
+ {{STRING("100"), STRING("$[0]")}, Null()},
//int8
+ {{STRING("10000"), STRING("$[0]")}, Null()},
// int16
+ {{STRING("1000000000"), STRING("$[0]")}, Null()},
// int32
+ {{STRING("1152921504606846976"), STRING("$[0]")}, Null()},
// int64
+ {{STRING("6.18"), STRING("$[0]")}, Null()},
// double
+ {{STRING(R"("abcd")"), STRING("$[0]")}, Null()},
// string
+ {{STRING("{}"), STRING("$[0]")}, Null()},
// empty object
+ {{STRING(R"({"k1":"v31", "k2": 300})"), STRING("$[0]")}, Null()},
// object
+ {{STRING("[]"), STRING("$[0]")}, Null()},
// empty array
+ {{STRING("null"), STRING("$[1]")}, Null()},
+ {{STRING("true"), STRING("$[1]")}, Null()},
+ {{STRING("false"), STRING("$[1]")}, Null()},
+ {{STRING("100"), STRING("$[1]")}, Null()},
//int8
+ {{STRING("10000"), STRING("$[1]")}, Null()},
// int16
+ {{STRING("1000000000"), STRING("$[1]")}, Null()},
// int32
+ {{STRING("1152921504606846976"), STRING("$[1]")}, Null()},
// int64
+ {{STRING("6.18"), STRING("$[1]")}, Null()},
// double
+ {{STRING(R"("abcd")"), STRING("$[1]")}, Null()},
// string
+ {{STRING("{}"), STRING("$[1]")}, Null()},
// empty object
+ {{STRING(R"({"k1":"v31", "k2": 300})"), STRING("$[1]")}, Null()},
// object
+ {{STRING("[]"), STRING("$[1]")}, Null()},
// empty array
+ {{STRING("[123, 456]"), STRING("$[0]")}, INT(123)},
// int array
+ {{STRING("[123, 456]"), STRING("$[1]")}, INT(456)},
// int array
+ {{STRING("[123, 456]"), STRING("$[2]")}, Null()},
// int array
+ {{STRING(R"(["abc", "def"])"), STRING("$[0]")}, Null()},
// string array
+ {{STRING(R"(["abc", "def"])"), STRING("$[1]")}, Null()},
// string array
+ {{STRING(R"(["abc", "def"])"), STRING("$[2]")}, Null()},
// string array
+ {{STRING(R"([null, true, false, 100, 6.18, "abc"])"),
STRING("$[0]")},
+ Null()}, // multi type array
+ {{STRING(R"([null, true, false, 100, 6.18, "abc"])"),
STRING("$[1]")},
+ Null()}, // multi type array
+ {{STRING(R"([null, true, false, 100, 6.18, "abc"])"),
STRING("$[2]")},
+ Null()}, // multi type array
+ {{STRING(R"([null, true, false, 100, 6.18, "abc"])"),
STRING("$[3]")},
+ INT(100)}, // multi type array
+ {{STRING(R"([null, true, false, 100, 6.18, "abc"])"),
STRING("$[4]")},
+ Null()}, // multi type array
+ {{STRING(R"([null, true, false, 100, 6.18, "abc"])"),
STRING("$[5]")},
+ Null()}, // multi type array
+ {{STRING(R"([null, true, false, 100, 6.18, "abc"])"),
STRING("$[6]")},
+ Null()}, // multi type array
+ {{STRING(R"([{"k1":"v41", "k2": 400}, 1, "a", 3.14])"),
STRING("$[0]")},
+ Null()}, // complex array
+ {{STRING(R"([{"k1":"v41", "k2": 400}, 1, "a", 3.14])"),
STRING("$[1]")},
+ INT(1)}, // complex array
+ {{STRING(R"([{"k1":"v41", "k2": 400}, 1, "a", 3.14])"),
STRING("$[2]")},
+ Null()}, // complex array
+ {{STRING(R"([{"k1":"v41", "k2": 400}, 1, "a", 3.14])"),
STRING("$[3]")},
+ Null()}, // complex array
+ {{STRING(R"([{"k1":"v41", "k2": 400}, 1, "a", 3.14])"),
STRING("$[4]")},
+ Null()}, // complex array
+ };
+
+ check_function<DataTypeInt32, true>(func_name, input_types, data_set);
+
+ // get json with path $[0].k1
+ data_set = {
+ {{Null(), STRING("$[0].k1")}, Null()},
+ {{STRING("null"), STRING("$[0].k1")}, Null()},
+ {{STRING("true"), STRING("$[0].k1")}, Null()},
+ {{STRING("false"), STRING("$[0].k1")}, Null()},
+ {{STRING("100"), STRING("$[0].k1")}, Null()},
//int8
+ {{STRING("10000"), STRING("$[0].k1")}, Null()},
// int16
+ {{STRING("1000000000"), STRING("$[0].k1")}, Null()},
// int32
+ {{STRING("1152921504606846976"), STRING("$[0].k1")}, Null()},
// int64
+ {{STRING("6.18"), STRING("$[0].k1")}, Null()},
// double
+ {{STRING(R"("abcd")"), STRING("$[0].k1")}, Null()},
// string
+ {{STRING("{}"), STRING("$[0].k1")}, Null()},
// empty object
+ {{STRING(R"({"k1":"v31", "k2": 300})"), STRING("$[0].k1")},
Null()}, // object
+ {{STRING("[]"), STRING("$[0].k1")}, Null()},
// empty array
+ {{STRING("[123, 456]"), STRING("$[0].k1")}, Null()},
// int array
+ {{STRING(R"(["abc", "def"])"), STRING("$[0].k1")}, Null()},
// string array
+ {{STRING(R"([null, true, false, 100, 6.18, "abc"])"),
STRING("$[0].k1")},
+ Null()}, // multi type array
+ {{STRING(R"([{"k1":"v41", "k2": 400}, 1, "a", 3.14])"),
STRING("$[0].k1")},
+ Null()}, // complex array
+ {{STRING(R"([{"k1":"v41", "k2": 400}, 1, "a", 3.14])"),
STRING("$[0].k2")},
+ INT(400)}, // complex array
+ };
+
+ check_function<DataTypeInt32, true>(func_name, input_types, data_set);
+}
+
+TEST(FunctionJsonbTEST, GetJsonBigIntTest) {
+ std::string func_name = "get_json_bigint";
+ InputTypeSet input_types = {TypeIndex::JSONB, TypeIndex::String};
+
+ // get json from root
+ DataSet data_set = {
Review Comment:
warning: variable 'data_set' is not initialized
[cppcoreguidelines-init-variables]
```suggestion
DataSet data_set = 0 = {
```
##########
be/test/vec/function/function_jsonb_test.cpp:
##########
@@ -1487,4 +1487,574 @@ TEST(FunctionJsonbTEST, JsonbCastFromOtherTest) {
"CAST", {Notnull {TypeIndex::String}, ConstedNotnull
{TypeIndex::JSONB}},
{{{STRING(R"("abcd")"), Null()}, STRING(R"("abcd")")}});
}
+
+TEST(FunctionJsonbTEST, GetJSONSTRINGTest) {
+ std::string func_name = "get_json_string";
+ InputTypeSet input_types = {TypeIndex::JSONB, TypeIndex::String};
+
+ // get json from root
+ DataSet data_set = {
+ {{Null(), STRING("$")}, Null()},
+ {{STRING("null"), STRING("$")}, STRING("null")},
+ {{STRING("true"), STRING("$")}, STRING("true")},
+ {{STRING("false"), STRING("$")}, STRING("false")},
+ {{STRING("100"), STRING("$")}, STRING("100")},
//int8
+ {{STRING("10000"), STRING("$")}, STRING("10000")},
// int16
+ {{STRING("1000000000"), STRING("$")}, STRING("1000000000")},
// int32
+ {{STRING("1152921504606846976"), STRING("$")},
STRING("1152921504606846976")}, // int64
+ {{STRING("6.18"), STRING("$")}, STRING("6.18")},
// double
+ {{STRING(R"("abcd")"), STRING("$")}, STRING("abcd")},
// string
+ {{STRING("{}"), STRING("$")}, STRING("{}")}, // empty object
+ {{STRING(R"({"k1":"v31", "k2": 300})"), STRING("$")},
+ STRING(R"({"k1":"v31","k2":300})")}, //
object
+ {{STRING("[]"), STRING("$")}, STRING("[]")}, //
empty array
+ {{STRING("[123, 456]"), STRING("$")}, STRING("[123,456]")}, // int
array
+ {{STRING(R"(["abc", "def"])"), STRING("$")},
+ STRING(R"(["abc","def"])")}, // string array
+ {{STRING(R"([null, true, false, 100, 6.18, "abc"])"), STRING("$")},
+ STRING(R"([null,true,false,100,6.18,"abc"])")}, // multi type
array
+ {{STRING(R"([{"k1":"v41", "k2": 400}, 1, "a", 3.14])"),
STRING("$")},
+ STRING(R"([{"k1":"v41","k2":400},1,"a",3.14])")}, // complex array
+ };
+
+ check_function<DataTypeString, true>(func_name, input_types, data_set);
+
+ // get json from obejct
+ data_set = {
+ {{Null(), STRING("$.k1")}, Null()},
+ {{STRING("null"), STRING("$.k1")}, Null()},
+ {{STRING("true"), STRING("$.k1")}, Null()},
+ {{STRING("false"), STRING("$.k1")}, Null()},
+ {{STRING("100"), STRING("$.k1")}, Null()},
//int8
+ {{STRING("10000"), STRING("$.k1")}, Null()},
// int16
+ {{STRING("1000000000"), STRING("$.k1")}, Null()},
// int32
+ {{STRING("1152921504606846976"), STRING("$.k1")}, Null()},
// int64
+ {{STRING("6.18"), STRING("$.k1")}, Null()},
// double
+ {{STRING(R"("abcd")"), STRING("$.k1")}, Null()},
// string
+ {{STRING("{}"), STRING("$.k1")}, Null()},
// empty object
+ {{STRING(R"({"k1":"v31", "k2": 300})"), STRING("$.k1")},
STRING("v31")}, // object
+ {{STRING("[]"), STRING("$.k1")}, Null()},
// empty array
+ {{STRING("[123, 456]"), STRING("$.k1")}, Null()},
// int array
+ {{STRING(R"(["abc", "def"])"), STRING("$.k1")}, Null()},
// string array
+ {{STRING(R"([null, true, false, 100, 6.18, "abc"])"),
STRING("$.k1")},
+ Null()}, // multi type array
+ {{STRING(R"([{"k1":"v41", "k2": 400}, 1, "a", 3.14])"),
STRING("$.k1")},
+ Null()}, // complex array
+ };
+
+ check_function<DataTypeString, true>(func_name, input_types, data_set);
+
+ // get json from array
+ data_set = {
+ {{Null(), STRING("$[0]")}, Null()},
+ {{STRING("null"), STRING("$[0]")}, Null()},
+ {{STRING("true"), STRING("$[0]")}, Null()},
+ {{STRING("false"), STRING("$[0]")}, Null()},
+ {{STRING("100"), STRING("$[0]")}, Null()}, //int8
+ {{STRING("10000"), STRING("$[0]")}, Null()}, // int16
+ {{STRING("1000000000"), STRING("$[0]")}, Null()}, // int32
+ {{STRING("1152921504606846976"), STRING("$[0]")}, Null()}, // int64
+ {{STRING("6.18"), STRING("$[0]")}, Null()}, //
double
+ {{STRING(R"("abcd")"), STRING("$[0]")}, Null()}, //
string
+ {{STRING("{}"), STRING("$[0]")}, STRING("{}")}, //
empty object
+ {{STRING(R"({"k1":"v31", "k2": 300})"), STRING("$[0]")},
+ STRING(R"({"k1":"v31","k2":300})")}, // object
+ {{STRING("[]"), STRING("$[0]")}, Null()}, // empty array
+ {{STRING("null"), STRING("$[1]")}, Null()},
+ {{STRING("true"), STRING("$[1]")}, Null()},
+ {{STRING("false"), STRING("$[1]")}, Null()},
+ {{STRING("100"), STRING("$[1]")}, Null()},
//int8
+ {{STRING("10000"), STRING("$[1]")}, Null()},
// int16
+ {{STRING("1000000000"), STRING("$[1]")}, Null()},
// int32
+ {{STRING("1152921504606846976"), STRING("$[1]")}, Null()},
// int64
+ {{STRING("6.18"), STRING("$[1]")}, Null()},
// double
+ {{STRING(R"("abcd")"), STRING("$[1]")}, Null()},
// string
+ {{STRING("{}"), STRING("$[1]")}, Null()},
// empty object
+ {{STRING(R"({"k1":"v31", "k2": 300})"), STRING("$[1]")}, Null()},
// object
+ {{STRING("[]"), STRING("$[1]")}, Null()},
// empty array
+ {{STRING("[123, 456]"), STRING("$[0]")}, STRING("123")},
// int array
+ {{STRING("[123, 456]"), STRING("$[1]")}, STRING("456")},
// int array
+ {{STRING("[123, 456]"), STRING("$[2]")}, Null()},
// int array
+ {{STRING(R"(["abc", "def"])"), STRING("$[0]")}, STRING("abc")},
// string array
+ {{STRING(R"(["abc", "def"])"), STRING("$[1]")}, STRING("def")},
// string array
+ {{STRING(R"(["abc", "def"])"), STRING("$[2]")}, Null()},
// string array
+ {{STRING(R"([null, true, false, 100, 6.18, "abc"])"),
STRING("$[0]")},
+ STRING("null")}, // multi type array
+ {{STRING(R"([null, true, false, 100, 6.18, "abc"])"),
STRING("$[1]")},
+ STRING("true")}, // multi type array
+ {{STRING(R"([null, true, false, 100, 6.18, "abc"])"),
STRING("$[2]")},
+ STRING("false")}, // multi type array
+ {{STRING(R"([null, true, false, 100, 6.18, "abc"])"),
STRING("$[3]")},
+ STRING("100")}, // multi type array
+ {{STRING(R"([null, true, false, 100, 6.18, "abc"])"),
STRING("$[4]")},
+ STRING("6.18")}, // multi type array
+ {{STRING(R"([null, true, false, 100, 6.18, "abc"])"),
STRING("$[5]")},
+ STRING("abc")}, // multi type array
+ {{STRING(R"([null, true, false, 100, 6.18, "abc"])"),
STRING("$[6]")},
+ Null()}, // multi type array
+ {{STRING(R"([{"k1":"v41", "k2": 400}, 1, "a", 3.14])"),
STRING("$[0]")},
+ STRING(R"({"k1":"v41","k2":400})")}, // complex array
+ {{STRING(R"([{"k1":"v41", "k2": 400}, 1, "a", 3.14])"),
STRING("$[1]")},
+ STRING("1")}, // complex array
+ {{STRING(R"([{"k1":"v41", "k2": 400}, 1, "a", 3.14])"),
STRING("$[2]")},
+ STRING("a")}, // complex array
+ {{STRING(R"([{"k1":"v41", "k2": 400}, 1, "a", 3.14])"),
STRING("$[3]")},
+ STRING("3.14")}, // complex array
+ {{STRING(R"([{"k1":"v41", "k2": 400}, 1, "a", 3.14])"),
STRING("$[4]")},
+ Null()}, // complex array
+ };
+
+ check_function<DataTypeString, true>(func_name, input_types, data_set);
+
+ // get json with path $[0].k1
+ data_set = {
+ {{Null(), STRING("$[0].k1")}, Null()},
+ {{STRING("null"), STRING("$[0].k1")}, Null()},
+ {{STRING("true"), STRING("$[0].k1")}, Null()},
+ {{STRING("false"), STRING("$[0].k1")}, Null()},
+ {{STRING("100"), STRING("$[0].k1")}, Null()},
//int8
+ {{STRING("10000"), STRING("$[0].k1")}, Null()}, //
int16
+ {{STRING("1000000000"), STRING("$[0].k1")}, Null()}, //
int32
+ {{STRING("1152921504606846976"), STRING("$[0].k1")}, Null()}, //
int64
+ {{STRING("6.18"), STRING("$[0].k1")}, Null()}, //
double
+ {{STRING(R"("abcd")"), STRING("$[0].k1")}, Null()}, //
string
+ {{STRING("{}"), STRING("$[0].k1")}, Null()}, //
empty object
+ {{STRING(R"({"k1":"v31", "k2": 300})"), STRING("$[0].k1")},
STRING(R"(v31)")}, // object
+ {{STRING("[]"), STRING("$[0].k1")}, Null()}, //
empty array
+ {{STRING("[123, 456]"), STRING("$[0].k1")}, Null()}, // int
array
+ {{STRING(R"(["abc", "def"])"), STRING("$[0].k1")}, Null()}, //
string array
+ {{STRING(R"([null, true, false, 100, 6.18, "abc"])"),
STRING("$[0].k1")},
+ Null()}, // multi type array
+ {{STRING(R"([{"k1":"v41", "k2": 400}, 1, "a", 3.14])"),
STRING("$[0].k1")},
+ STRING("v41")}, // complex array
+ };
+
+ check_function<DataTypeString, true>(func_name, input_types, data_set);
+}
+
+TEST(FunctionJsonbTEST, GetJsonIntTest) {
+ std::string func_name = "get_json_int";
+ InputTypeSet input_types = {TypeIndex::JSONB, TypeIndex::String};
+
+ // get json from root
+ DataSet data_set = {
+ {{Null(), STRING("$")}, Null()},
+ {{STRING("null"), STRING("$")}, Null()},
+ {{STRING("true"), STRING("$")}, Null()},
+ {{STRING("false"), STRING("$")}, Null()},
+ {{STRING("100"), STRING("$")}, INT(100)},
//int8
+ {{STRING("10000"), STRING("$")}, INT(10000)}, //
int16
+ {{STRING("1000000000"), STRING("$")}, INT(1000000000)}, //
int32
+ {{STRING("1152921504606846976"), STRING("$")}, Null()}, //
int64
+ {{STRING("6.18"), STRING("$")}, Null()}, //
double
+ {{STRING(R"("abcd")"), STRING("$")}, Null()}, //
string
+ {{STRING("{}"), STRING("$")}, Null()}, //
empty object
+ {{STRING(R"({"k1":"v31", "k2": 300})"), STRING("$")}, Null()}, //
object
+ {{STRING("[]"), STRING("$")}, Null()}, //
empty array
+ {{STRING("[123, 456]"), STRING("$")}, Null()}, //
int array
+ {{STRING(R"(["abc", "def"])"), STRING("$")}, Null()}, //
string array
+ {{STRING(R"([null, true, false, 100, 6.18, "abc"])"), STRING("$")},
+ Null()}, // multi type array
+ {{STRING(R"([{"k1":"v41", "k2": 400}, 1, "a", 3.14])"),
STRING("$")},
+ Null()}, // complex array
+ };
+
+ check_function<DataTypeInt32, true>(func_name, input_types, data_set);
+
+ // get json from obejct
+ data_set = {
+ {{Null(), STRING("$.k1")}, Null()},
+ {{STRING("null"), STRING("$.k1")}, Null()},
+ {{STRING("true"), STRING("$.k1")}, Null()},
+ {{STRING("false"), STRING("$.k1")}, Null()},
+ {{STRING("100"), STRING("$.k1")}, Null()},
//int8
+ {{STRING("10000"), STRING("$.k1")}, Null()},
// int16
+ {{STRING("1000000000"), STRING("$.k1")}, Null()},
// int32
+ {{STRING("1152921504606846976"), STRING("$.k1")}, Null()},
// int64
+ {{STRING("6.18"), STRING("$.k1")}, Null()},
// double
+ {{STRING(R"("abcd")"), STRING("$.k1")}, Null()},
// string
+ {{STRING("{}"), STRING("$.k1")}, Null()},
// empty object
+ {{STRING(R"({"k1":"v31", "k2": 300})"), STRING("$.k1")}, Null()},
// object
+ {{STRING("[]"), STRING("$.k1")}, Null()},
// empty array
+ {{STRING("[123, 456]"), STRING("$.k1")}, Null()},
// int array
+ {{STRING(R"(["abc", "def"])"), STRING("$.k1")}, Null()},
// string array
+ {{STRING(R"([null, true, false, 100, 6.18, "abc"])"),
STRING("$.k1")},
+ Null()}, // multi type array
+ {{STRING(R"([{"k1":"v41", "k2": 400}, 1, "a", 3.14])"),
STRING("$.k1")},
+ Null()}, // complex array
+ };
+
+ check_function<DataTypeInt32, true>(func_name, input_types, data_set);
+
+ // get json from array
+ data_set = {
+ {{Null(), STRING("$[0]")}, Null()},
+ {{STRING("null"), STRING("$[0]")}, Null()},
+ {{STRING("true"), STRING("$[0]")}, Null()},
+ {{STRING("false"), STRING("$[0]")}, Null()},
+ {{STRING("100"), STRING("$[0]")}, Null()},
//int8
+ {{STRING("10000"), STRING("$[0]")}, Null()},
// int16
+ {{STRING("1000000000"), STRING("$[0]")}, Null()},
// int32
+ {{STRING("1152921504606846976"), STRING("$[0]")}, Null()},
// int64
+ {{STRING("6.18"), STRING("$[0]")}, Null()},
// double
+ {{STRING(R"("abcd")"), STRING("$[0]")}, Null()},
// string
+ {{STRING("{}"), STRING("$[0]")}, Null()},
// empty object
+ {{STRING(R"({"k1":"v31", "k2": 300})"), STRING("$[0]")}, Null()},
// object
+ {{STRING("[]"), STRING("$[0]")}, Null()},
// empty array
+ {{STRING("null"), STRING("$[1]")}, Null()},
+ {{STRING("true"), STRING("$[1]")}, Null()},
+ {{STRING("false"), STRING("$[1]")}, Null()},
+ {{STRING("100"), STRING("$[1]")}, Null()},
//int8
+ {{STRING("10000"), STRING("$[1]")}, Null()},
// int16
+ {{STRING("1000000000"), STRING("$[1]")}, Null()},
// int32
+ {{STRING("1152921504606846976"), STRING("$[1]")}, Null()},
// int64
+ {{STRING("6.18"), STRING("$[1]")}, Null()},
// double
+ {{STRING(R"("abcd")"), STRING("$[1]")}, Null()},
// string
+ {{STRING("{}"), STRING("$[1]")}, Null()},
// empty object
+ {{STRING(R"({"k1":"v31", "k2": 300})"), STRING("$[1]")}, Null()},
// object
+ {{STRING("[]"), STRING("$[1]")}, Null()},
// empty array
+ {{STRING("[123, 456]"), STRING("$[0]")}, INT(123)},
// int array
+ {{STRING("[123, 456]"), STRING("$[1]")}, INT(456)},
// int array
+ {{STRING("[123, 456]"), STRING("$[2]")}, Null()},
// int array
+ {{STRING(R"(["abc", "def"])"), STRING("$[0]")}, Null()},
// string array
+ {{STRING(R"(["abc", "def"])"), STRING("$[1]")}, Null()},
// string array
+ {{STRING(R"(["abc", "def"])"), STRING("$[2]")}, Null()},
// string array
+ {{STRING(R"([null, true, false, 100, 6.18, "abc"])"),
STRING("$[0]")},
+ Null()}, // multi type array
+ {{STRING(R"([null, true, false, 100, 6.18, "abc"])"),
STRING("$[1]")},
+ Null()}, // multi type array
+ {{STRING(R"([null, true, false, 100, 6.18, "abc"])"),
STRING("$[2]")},
+ Null()}, // multi type array
+ {{STRING(R"([null, true, false, 100, 6.18, "abc"])"),
STRING("$[3]")},
+ INT(100)}, // multi type array
+ {{STRING(R"([null, true, false, 100, 6.18, "abc"])"),
STRING("$[4]")},
+ Null()}, // multi type array
+ {{STRING(R"([null, true, false, 100, 6.18, "abc"])"),
STRING("$[5]")},
+ Null()}, // multi type array
+ {{STRING(R"([null, true, false, 100, 6.18, "abc"])"),
STRING("$[6]")},
+ Null()}, // multi type array
+ {{STRING(R"([{"k1":"v41", "k2": 400}, 1, "a", 3.14])"),
STRING("$[0]")},
+ Null()}, // complex array
+ {{STRING(R"([{"k1":"v41", "k2": 400}, 1, "a", 3.14])"),
STRING("$[1]")},
+ INT(1)}, // complex array
+ {{STRING(R"([{"k1":"v41", "k2": 400}, 1, "a", 3.14])"),
STRING("$[2]")},
+ Null()}, // complex array
+ {{STRING(R"([{"k1":"v41", "k2": 400}, 1, "a", 3.14])"),
STRING("$[3]")},
+ Null()}, // complex array
+ {{STRING(R"([{"k1":"v41", "k2": 400}, 1, "a", 3.14])"),
STRING("$[4]")},
+ Null()}, // complex array
+ };
+
+ check_function<DataTypeInt32, true>(func_name, input_types, data_set);
+
+ // get json with path $[0].k1
+ data_set = {
+ {{Null(), STRING("$[0].k1")}, Null()},
+ {{STRING("null"), STRING("$[0].k1")}, Null()},
+ {{STRING("true"), STRING("$[0].k1")}, Null()},
+ {{STRING("false"), STRING("$[0].k1")}, Null()},
+ {{STRING("100"), STRING("$[0].k1")}, Null()},
//int8
+ {{STRING("10000"), STRING("$[0].k1")}, Null()},
// int16
+ {{STRING("1000000000"), STRING("$[0].k1")}, Null()},
// int32
+ {{STRING("1152921504606846976"), STRING("$[0].k1")}, Null()},
// int64
+ {{STRING("6.18"), STRING("$[0].k1")}, Null()},
// double
+ {{STRING(R"("abcd")"), STRING("$[0].k1")}, Null()},
// string
+ {{STRING("{}"), STRING("$[0].k1")}, Null()},
// empty object
+ {{STRING(R"({"k1":"v31", "k2": 300})"), STRING("$[0].k1")},
Null()}, // object
+ {{STRING("[]"), STRING("$[0].k1")}, Null()},
// empty array
+ {{STRING("[123, 456]"), STRING("$[0].k1")}, Null()},
// int array
+ {{STRING(R"(["abc", "def"])"), STRING("$[0].k1")}, Null()},
// string array
+ {{STRING(R"([null, true, false, 100, 6.18, "abc"])"),
STRING("$[0].k1")},
+ Null()}, // multi type array
+ {{STRING(R"([{"k1":"v41", "k2": 400}, 1, "a", 3.14])"),
STRING("$[0].k1")},
+ Null()}, // complex array
+ {{STRING(R"([{"k1":"v41", "k2": 400}, 1, "a", 3.14])"),
STRING("$[0].k2")},
+ INT(400)}, // complex array
+ };
+
+ check_function<DataTypeInt32, true>(func_name, input_types, data_set);
+}
+
+TEST(FunctionJsonbTEST, GetJsonBigIntTest) {
+ std::string func_name = "get_json_bigint";
+ InputTypeSet input_types = {TypeIndex::JSONB, TypeIndex::String};
+
+ // get json from root
+ DataSet data_set = {
+ {{Null(), STRING("$")}, Null()},
+ {{STRING("null"), STRING("$")}, Null()},
+ {{STRING("true"), STRING("$")}, Null()},
+ {{STRING("false"), STRING("$")}, Null()},
+ {{STRING("100"), STRING("$")}, BIGINT(100)},
//int8
+ {{STRING("10000"), STRING("$")}, BIGINT(10000)},
// int16
+ {{STRING("1000000000"), STRING("$")}, BIGINT(1000000000)},
// int32
+ {{STRING("1152921504606846976"), STRING("$")},
BIGINT(1152921504606846976)}, // int64
+ {{STRING("6.18"), STRING("$")}, Null()},
// double
+ {{STRING(R"("abcd")"), STRING("$")}, Null()},
// string
+ {{STRING("{}"), STRING("$")}, Null()}, //
empty object
+ {{STRING(R"({"k1":"v31", "k2": 300})"), STRING("$")}, Null()}, //
object
+ {{STRING("[]"), STRING("$")}, Null()}, //
empty array
+ {{STRING("[123, 456]"), STRING("$")}, Null()}, //
int array
+ {{STRING(R"(["abc", "def"])"), STRING("$")}, Null()}, //
string array
+ {{STRING(R"([null, true, false, 100, 6.18, "abc"])"), STRING("$")},
+ Null()}, // multi type array
+ {{STRING(R"([{"k1":"v41", "k2": 400}, 1, "a", 3.14])"),
STRING("$")},
+ Null()}, // complex array
+ };
+
+ check_function<DataTypeInt64, true>(func_name, input_types, data_set);
+
+ // get json from obejct
+ data_set = {
+ {{Null(), STRING("$.k1")}, Null()},
+ {{STRING("null"), STRING("$.k1")}, Null()},
+ {{STRING("true"), STRING("$.k1")}, Null()},
+ {{STRING("false"), STRING("$.k1")}, Null()},
+ {{STRING("100"), STRING("$.k1")}, Null()},
//int8
+ {{STRING("10000"), STRING("$.k1")}, Null()},
// int16
+ {{STRING("1000000000"), STRING("$.k1")}, Null()},
// int32
+ {{STRING("1152921504606846976"), STRING("$.k1")}, Null()},
// int64
+ {{STRING("6.18"), STRING("$.k1")}, Null()},
// double
+ {{STRING(R"("abcd")"), STRING("$.k1")}, Null()},
// string
+ {{STRING("{}"), STRING("$.k1")}, Null()},
// empty object
+ {{STRING(R"({"k1":"v31", "k2": 300})"), STRING("$.k1")}, Null()},
// object
+ {{STRING("[]"), STRING("$.k1")}, Null()},
// empty array
+ {{STRING("[123, 456]"), STRING("$.k1")}, Null()},
// int array
+ {{STRING(R"(["abc", "def"])"), STRING("$.k1")}, Null()},
// string array
+ {{STRING(R"([null, true, false, 100, 6.18, "abc"])"),
STRING("$.k1")},
+ Null()}, // multi type array
+ {{STRING(R"([{"k1":"v41", "k2": 400}, 1, "a", 3.14])"),
STRING("$.k1")},
+ Null()}, // complex array
+ };
+
+ check_function<DataTypeInt64, true>(func_name, input_types, data_set);
+
+ // get json from array
+ data_set = {
+ {{Null(), STRING("$[0]")}, Null()},
+ {{STRING("null"), STRING("$[0]")}, Null()},
+ {{STRING("true"), STRING("$[0]")}, Null()},
+ {{STRING("false"), STRING("$[0]")}, Null()},
+ {{STRING("100"), STRING("$[0]")}, Null()},
//int8
+ {{STRING("10000"), STRING("$[0]")}, Null()},
// int16
+ {{STRING("1000000000"), STRING("$[0]")}, Null()},
// int32
+ {{STRING("1152921504606846976"), STRING("$[0]")}, Null()},
// int64
+ {{STRING("6.18"), STRING("$[0]")}, Null()},
// double
+ {{STRING(R"("abcd")"), STRING("$[0]")}, Null()},
// string
+ {{STRING("{}"), STRING("$[0]")}, Null()},
// empty object
+ {{STRING(R"({"k1":"v31", "k2": 300})"), STRING("$[0]")}, Null()},
// object
+ {{STRING("[]"), STRING("$[0]")}, Null()},
// empty array
+ {{STRING("null"), STRING("$[1]")}, Null()},
+ {{STRING("true"), STRING("$[1]")}, Null()},
+ {{STRING("false"), STRING("$[1]")}, Null()},
+ {{STRING("100"), STRING("$[1]")}, Null()},
//int8
+ {{STRING("10000"), STRING("$[1]")}, Null()},
// int16
+ {{STRING("1000000000"), STRING("$[1]")}, Null()},
// int32
+ {{STRING("1152921504606846976"), STRING("$[1]")}, Null()},
// int64
+ {{STRING("6.18"), STRING("$[1]")}, Null()},
// double
+ {{STRING(R"("abcd")"), STRING("$[1]")}, Null()},
// string
+ {{STRING("{}"), STRING("$[1]")}, Null()},
// empty object
+ {{STRING(R"({"k1":"v31", "k2": 300})"), STRING("$[1]")}, Null()},
// object
+ {{STRING("[]"), STRING("$[1]")}, Null()},
// empty array
+ {{STRING("[123, 456]"), STRING("$[0]")}, BIGINT(123)},
// int array
+ {{STRING("[123, 456]"), STRING("$[1]")}, BIGINT(456)},
// int array
+ {{STRING("[123, 456]"), STRING("$[2]")}, Null()},
// int array
+ {{STRING(R"(["abc", "def"])"), STRING("$[0]")}, Null()},
// string array
+ {{STRING(R"(["abc", "def"])"), STRING("$[1]")}, Null()},
// string array
+ {{STRING(R"(["abc", "def"])"), STRING("$[2]")}, Null()},
// string array
+ {{STRING(R"([null, true, false, 100, 6.18, "abc"])"),
STRING("$[0]")},
+ Null()}, // multi type array
+ {{STRING(R"([null, true, false, 100, 6.18, "abc"])"),
STRING("$[1]")},
+ Null()}, // multi type array
+ {{STRING(R"([null, true, false, 100, 6.18, "abc"])"),
STRING("$[2]")},
+ Null()}, // multi type array
+ {{STRING(R"([null, true, false, 100, 6.18, "abc"])"),
STRING("$[3]")},
+ BIGINT(100)}, // multi type array
+ {{STRING(R"([null, true, false, 100, 6.18, "abc"])"),
STRING("$[4]")},
+ Null()}, // multi type array
+ {{STRING(R"([null, true, false, 100, 6.18, "abc"])"),
STRING("$[5]")},
+ Null()}, // multi type array
+ {{STRING(R"([null, true, false, 100, 6.18, "abc"])"),
STRING("$[6]")},
+ Null()}, // multi type array
+ {{STRING(R"([{"k1":"v41", "k2": 400}, 1, "a", 3.14])"),
STRING("$[0]")},
+ Null()}, // complex array
+ {{STRING(R"([{"k1":"v41", "k2": 400}, 1, "a", 3.14])"),
STRING("$[1]")},
+ BIGINT(1)}, // complex array
+ {{STRING(R"([{"k1":"v41", "k2": 400}, 1, "a", 3.14])"),
STRING("$[2]")},
+ Null()}, // complex array
+ {{STRING(R"([{"k1":"v41", "k2": 400}, 1, "a", 3.14])"),
STRING("$[3]")},
+ Null()}, // complex array
+ {{STRING(R"([{"k1":"v41", "k2": 400}, 1, "a", 3.14])"),
STRING("$[4]")},
+ Null()}, // complex array
+ };
+
+ check_function<DataTypeInt64, true>(func_name, input_types, data_set);
+
+ // get json with path $[0].k1
+ data_set = {
+ {{Null(), STRING("$[0].k1")}, Null()},
+ {{STRING("null"), STRING("$[0].k1")}, Null()},
+ {{STRING("true"), STRING("$[0].k1")}, Null()},
+ {{STRING("false"), STRING("$[0].k1")}, Null()},
+ {{STRING("100"), STRING("$[0].k1")}, Null()},
//int8
+ {{STRING("10000"), STRING("$[0].k1")}, Null()},
// int16
+ {{STRING("1000000000"), STRING("$[0].k1")}, Null()},
// int32
+ {{STRING("1152921504606846976"), STRING("$[0].k1")}, Null()},
// int64
+ {{STRING("6.18"), STRING("$[0].k1")}, Null()},
// double
+ {{STRING(R"("abcd")"), STRING("$[0].k1")}, Null()},
// string
+ {{STRING("{}"), STRING("$[0].k1")}, Null()},
// empty object
+ {{STRING(R"({"k1":"v31", "k2": 300})"), STRING("$[0].k1")},
Null()}, // object
+ {{STRING("[]"), STRING("$[0].k1")}, Null()},
// empty array
+ {{STRING("[123, 456]"), STRING("$[0].k1")}, Null()},
// int array
+ {{STRING(R"(["abc", "def"])"), STRING("$[0].k1")}, Null()},
// string array
+ {{STRING(R"([null, true, false, 100, 6.18, "abc"])"),
STRING("$[0].k1")},
+ Null()}, // multi type array
+ {{STRING(R"([{"k1":"v41", "k2": 400}, 1, "a", 3.14])"),
STRING("$[0].k1")},
+ Null()}, // complex array
+ {{STRING(R"([{"k1":"v41", "k2": 400}, 1, "a", 3.14])"),
STRING("$[0].k2")},
+ BIGINT(400)}, // complex array
+ };
+
+ check_function<DataTypeInt64, true>(func_name, input_types, data_set);
+}
+
+TEST(FunctionJsonbTEST, GetJsonDoubleTest) {
+ std::string func_name = "get_json_double";
+ InputTypeSet input_types = {TypeIndex::JSONB, TypeIndex::String};
Review Comment:
warning: variable 'input_types' is not initialized
[cppcoreguidelines-init-variables]
```suggestion
InputTypeSet input_types = 0 = {TypeIndex::JSONB, TypeIndex::String};
```
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]