This is an automated email from the ASF dual-hosted git repository.

yiguolei pushed a commit to branch branch-2.1
in repository https://gitbox.apache.org/repos/asf/doris.git


The following commit(s) were added to refs/heads/branch-2.1 by this push:
     new 773008d6fa4 [Fix](Json) fix some cast issue (#38683) (#39025)
773008d6fa4 is described below

commit 773008d6fa4362a4ea6d3204449efbce700332b6
Author: lihangyu <[email protected]>
AuthorDate: Wed Aug 7 22:05:43 2024 +0800

    [Fix](Json) fix some cast issue (#38683) (#39025)
    
    #38683
---
 be/src/vec/functions/function_cast.h               |  27 ++-
 be/test/vec/function/function_jsonb_test.cpp       | 223 ---------------------
 .../data/datatype_p0/json/json_cast.out            |  37 +++-
 .../data/json_p0/test_json_load_and_function.out   |  76 +++----
 .../test_json_load_unique_key_and_function.out     |  64 +++---
 .../data/jsonb_p0/test_jsonb_load_and_function.out |  76 +++----
 .../test_jsonb_load_unique_key_and_function.out    |  64 +++---
 .../data/nereids_function_p0/scalar_function/J.out |  76 +++----
 .../json_p0/test_json_load_and_function.out        |  76 +++----
 .../test_json_load_unique_key_and_function.out     |  64 +++---
 .../test_jsonb_load_unique_key_and_function.out    |  64 +++---
 .../suites/datatype_p0/json/json_cast.groovy       |  14 ++
 12 files changed, 354 insertions(+), 507 deletions(-)

diff --git a/be/src/vec/functions/function_cast.h 
b/be/src/vec/functions/function_cast.h
index eee6b9cbfae..acb267b83e5 100644
--- a/be/src/vec/functions/function_cast.h
+++ b/be/src/vec/functions/function_cast.h
@@ -863,12 +863,19 @@ struct ConvertImplFromJsonb {
                     res[i] = 0;
                     continue;
                 }
-
                 if constexpr (type_index == TypeIndex::UInt8) {
+                    // cast from json value to boolean type
                     if (value->isTrue()) {
                         res[i] = 1;
                     } else if (value->isFalse()) {
                         res[i] = 0;
+                    } else if (value->isInt()) {
+                        res[i] = ((const JsonbIntVal*)value)->val() == 0 ? 0 : 
1;
+                    } else if (value->isDouble()) {
+                        res[i] = static_cast<ColumnType::value_type>(
+                                         ((const 
JsonbDoubleVal*)value)->val()) == 0
+                                         ? 0
+                                         : 1;
                     } else {
                         null_map[i] = 1;
                         res[i] = 0;
@@ -878,15 +885,31 @@ struct ConvertImplFromJsonb {
                                      type_index == TypeIndex::Int32 ||
                                      type_index == TypeIndex::Int64 ||
                                      type_index == TypeIndex::Int128) {
+                    // cast from json value to integer types
                     if (value->isInt()) {
                         res[i] = ((const JsonbIntVal*)value)->val();
+                    } else if (value->isDouble()) {
+                        res[i] = static_cast<ColumnType::value_type>(
+                                ((const JsonbDoubleVal*)value)->val());
+                    } else if (value->isTrue()) {
+                        res[i] = 1;
+                    } else if (value->isFalse()) {
+                        res[i] = 0;
                     } else {
                         null_map[i] = 1;
                         res[i] = 0;
                     }
-                } else if constexpr (type_index == TypeIndex::Float64) {
+                } else if constexpr (type_index == TypeIndex::Float64 ||
+                                     type_index == TypeIndex::Float32) {
+                    // cast from json value to floating point types
                     if (value->isDouble()) {
                         res[i] = ((const JsonbDoubleVal*)value)->val();
+                    } else if (value->isFloat()) {
+                        res[i] = ((const JsonbFloatVal*)value)->val();
+                    } else if (value->isTrue()) {
+                        res[i] = 1;
+                    } else if (value->isFalse()) {
+                        res[i] = 0;
                     } else if (value->isInt()) {
                         res[i] = ((const JsonbIntVal*)value)->val();
                     } else {
diff --git a/be/test/vec/function/function_jsonb_test.cpp 
b/be/test/vec/function/function_jsonb_test.cpp
index 91206028ef1..03887d855e5 100644
--- a/be/test/vec/function/function_jsonb_test.cpp
+++ b/be/test/vec/function/function_jsonb_test.cpp
@@ -1230,229 +1230,6 @@ TEST(FunctionJsonbTEST, JsonbExtractDoubleTest) {
     static_cast<void>(check_function<DataTypeFloat64, true>(func_name, 
input_types, data_set));
 }
 
-TEST(FunctionJsonbTEST, JsonbCastToOtherTest) {
-    std::string func_name = "CAST";
-    InputTypeSet input_types = {Nullable {TypeIndex::JSONB}, ConstedNotnull 
{TypeIndex::UInt8}};
-
-    // cast to boolean
-    DataSet data_set = {
-            {{STRING("null"), static_cast<uint8_t>(TypeIndex::UInt8)}, Null()},
-            {{STRING("true"), static_cast<uint8_t>(TypeIndex::UInt8)}, 
BOOLEAN(1)},
-            {{STRING("false"), static_cast<uint8_t>(TypeIndex::UInt8)}, 
BOOLEAN(0)},
-            {{STRING("100"), static_cast<uint8_t>(TypeIndex::UInt8)}, Null()}, 
       //int8
-            {{STRING("10000"), static_cast<uint8_t>(TypeIndex::UInt8)}, 
Null()},      // int16
-            {{STRING("1000000000"), static_cast<uint8_t>(TypeIndex::UInt8)}, 
Null()}, // int32
-            {{STRING("1152921504606846976"), 
static_cast<uint8_t>(TypeIndex::UInt8)},
-             Null()},                                                          
      // int64
-            {{STRING("6.18"), static_cast<uint8_t>(TypeIndex::UInt8)}, 
Null()},      // double
-            {{STRING(R"("abcd")"), static_cast<uint8_t>(TypeIndex::UInt8)}, 
Null()}, // string
-            {{STRING("{}"), static_cast<uint8_t>(TypeIndex::UInt8)}, Null()},  
      // empty object
-            {{STRING(R"({"k1":"v31", "k2": 300})"), 
static_cast<uint8_t>(TypeIndex::UInt8)},
-             Null()},                                                          
       // object
-            {{STRING("[]"), static_cast<uint8_t>(TypeIndex::UInt8)}, Null()},  
       // empty array
-            {{STRING("[123, 456]"), static_cast<uint8_t>(TypeIndex::UInt8)}, 
Null()}, // int array
-            {{STRING(R"(["abc", "def"])"), 
static_cast<uint8_t>(TypeIndex::UInt8)},
-             Null()}, // string array
-            {{STRING(R"([null, true, false, 100, 6.18, "abc"])"),
-              static_cast<uint8_t>(TypeIndex::UInt8)},
-             Null()}, // multi type array
-            {{STRING(R"([{"k1":"v41", "k2": 400}, 1, "a", 3.14])"),
-              static_cast<uint8_t>(TypeIndex::UInt8)},
-             Null()}, // complex array
-    };
-    for (const auto& row : data_set) {
-        DataSet const_dataset = {row};
-        static_cast<void>(
-                check_function<DataTypeUInt8, true>(func_name, input_types, 
const_dataset));
-    }
-    input_types = {Nullable {TypeIndex::JSONB}, ConstedNotnull 
{TypeIndex::Int8}};
-    // cast to TINYINT
-    data_set = {
-            {{STRING("null"), static_cast<int8_t>(TypeIndex::Int8)}, Null()},
-            {{STRING("true"), static_cast<int8_t>(TypeIndex::Int8)}, Null()},
-            {{STRING("false"), static_cast<int8_t>(TypeIndex::Int8)}, Null()},
-            {{STRING("100"), static_cast<int8_t>(TypeIndex::Int8)}, 
TINYINT(100)},      //int8
-            {{STRING("10000"), static_cast<int8_t>(TypeIndex::Int8)}, 
TINYINT(16)},     // int16
-            {{STRING("1000000000"), static_cast<int8_t>(TypeIndex::Int8)}, 
TINYINT(0)}, // int32
-            {{STRING("1152921504606846976"), 
static_cast<int8_t>(TypeIndex::Int8)},
-             TINYINT(0)},                                                      
    // int64
-            {{STRING("6.18"), static_cast<int8_t>(TypeIndex::Int8)}, Null()},  
    // double
-            {{STRING(R"("abcd")"), static_cast<int8_t>(TypeIndex::Int8)}, 
Null()}, // string
-            {{STRING("{}"), static_cast<int8_t>(TypeIndex::Int8)}, Null()},    
    // empty object
-            {{STRING(R"({"k1":"v31", "k2": 300})"), 
static_cast<int8_t>(TypeIndex::Int8)},
-             Null()},                                                          
     // object
-            {{STRING("[]"), static_cast<int8_t>(TypeIndex::Int8)}, Null()},    
     // empty array
-            {{STRING("[123, 456]"), static_cast<int8_t>(TypeIndex::Int8)}, 
Null()}, // int array
-            {{STRING(R"(["abc", "def"])"), 
static_cast<int8_t>(TypeIndex::Int8)},
-             Null()}, // string array
-            {{STRING(R"([null, true, false, 100, 6.18, "abc"])"),
-              static_cast<int8_t>(TypeIndex::Int8)},
-             Null()}, // multi type array
-            {{STRING(R"([{"k1":"v41", "k2": 400}, 1, "a", 3.14])"),
-              static_cast<int8_t>(TypeIndex::Int8)},
-             Null()}, // complex array
-    };
-    for (const auto& row : data_set) {
-        DataSet const_dataset = {row};
-        static_cast<void>(
-                check_function<DataTypeInt8, true>(func_name, input_types, 
const_dataset));
-    }
-
-    input_types = {Nullable {TypeIndex::JSONB}, ConstedNotnull 
{TypeIndex::Int16}};
-    // cast to SMALLINT
-    data_set = {
-            {{STRING("null"), static_cast<int16_t>(TypeIndex::Int16)}, Null()},
-            {{STRING("true"), static_cast<int16_t>(TypeIndex::Int16)}, Null()},
-            {{STRING("false"), static_cast<int16_t>(TypeIndex::Int16)}, 
Null()},
-            {{STRING("100"), static_cast<int16_t>(TypeIndex::Int16)}, 
SMALLINT(100)},     //int8
-            {{STRING("10000"), static_cast<int16_t>(TypeIndex::Int16)}, 
SMALLINT(10000)}, // int16
-            {{STRING("1000000000"), static_cast<int16_t>(TypeIndex::Int16)},
-             SMALLINT(-13824)}, // int32
-            {{STRING("1152921504606846976"), 
static_cast<int16_t>(TypeIndex::Int16)},
-             SMALLINT(0)},                                                     
      // int64
-            {{STRING("6.18"), static_cast<int16_t>(TypeIndex::Int16)}, 
Null()},      // double
-            {{STRING(R"("abcd")"), static_cast<int16_t>(TypeIndex::Int16)}, 
Null()}, // string
-            {{STRING("{}"), static_cast<int16_t>(TypeIndex::Int16)}, Null()},  
      // empty object
-            {{STRING(R"({"k1":"v31", "k2": 300})"), 
static_cast<int16_t>(TypeIndex::Int16)},
-             Null()},                                                          
       // object
-            {{STRING("[]"), static_cast<int16_t>(TypeIndex::Int16)}, Null()},  
       // empty array
-            {{STRING("[123, 456]"), static_cast<int16_t>(TypeIndex::Int16)}, 
Null()}, // int array
-            {{STRING(R"(["abc", "def"])"), 
static_cast<int16_t>(TypeIndex::Int16)},
-             Null()}, // string array
-            {{STRING(R"([null, true, false, 100, 6.18, "abc"])"),
-              static_cast<int16_t>(TypeIndex::Int16)},
-             Null()}, // multi type array
-            {{STRING(R"([{"k1":"v41", "k2": 400}, 1, "a", 3.14])"),
-              static_cast<int16_t>(TypeIndex::Int16)},
-             Null()}, // complex array
-    };
-    for (const auto& row : data_set) {
-        DataSet const_dataset = {row};
-        static_cast<void>(
-                check_function<DataTypeInt16, true>(func_name, input_types, 
const_dataset));
-    }
-
-    input_types = {Nullable {TypeIndex::JSONB}, ConstedNotnull 
{TypeIndex::Int32}};
-    // cast to INT
-    data_set = {
-            {{STRING("null"), static_cast<int32_t>(TypeIndex::Int32)}, Null()},
-            {{STRING("true"), static_cast<int32_t>(TypeIndex::Int32)}, Null()},
-            {{STRING("false"), static_cast<int32_t>(TypeIndex::Int32)}, 
Null()},
-            {{STRING("100"), static_cast<int32_t>(TypeIndex::Int32)}, 
INT(100)},     //int8
-            {{STRING("10000"), static_cast<int32_t>(TypeIndex::Int32)}, 
INT(10000)}, // int16
-            {{STRING("1000000000"), static_cast<int32_t>(TypeIndex::Int32)},
-             INT(1000000000)}, // int32
-            {{STRING("1152921504606846976"), 
static_cast<int32_t>(TypeIndex::Int32)},
-             INT(0)},                                                          
      // int64
-            {{STRING("6.18"), static_cast<int32_t>(TypeIndex::Int32)}, 
Null()},      // double
-            {{STRING(R"("abcd")"), static_cast<int32_t>(TypeIndex::Int32)}, 
Null()}, // string
-            {{STRING("{}"), static_cast<int32_t>(TypeIndex::Int32)}, Null()},  
      // empty object
-            {{STRING(R"({"k1":"v31", "k2": 300})"), 
static_cast<int32_t>(TypeIndex::Int32)},
-             Null()},                                                          
       // object
-            {{STRING("[]"), static_cast<int32_t>(TypeIndex::Int32)}, Null()},  
       // empty array
-            {{STRING("[123, 456]"), static_cast<int32_t>(TypeIndex::Int32)}, 
Null()}, // int array
-            {{STRING(R"(["abc", "def"])"), 
static_cast<int32_t>(TypeIndex::Int32)},
-             Null()}, // string array
-            {{STRING(R"([null, true, false, 100, 6.18, "abc"])"),
-              static_cast<int32_t>(TypeIndex::Int32)},
-             Null()}, // multi type array
-            {{STRING(R"([{"k1":"v41", "k2": 400}, 1, "a", 3.14])"),
-              static_cast<int32_t>(TypeIndex::Int32)},
-             Null()}, // complex array
-    };
-    for (const auto& row : data_set) {
-        DataSet const_dataset = {row};
-        static_cast<void>(
-                check_function<DataTypeInt32, true>(func_name, input_types, 
const_dataset));
-    }
-
-    input_types = {Nullable {TypeIndex::JSONB}, ConstedNotnull 
{TypeIndex::Int64}};
-    // cast to BIGINT
-    data_set = {
-            {{STRING("null"), BIGINT(1)}, Null()},
-            {{STRING("true"), BIGINT(1)}, Null()},
-            {{STRING("false"), BIGINT(1)}, Null()},
-            {{STRING("100"), BIGINT(1)}, BIGINT(100)},                         
        //int8
-            {{STRING("10000"), BIGINT(1)}, BIGINT(10000)},                     
        // int16
-            {{STRING("1000000000"), BIGINT(1)}, BIGINT(1000000000)},           
        // int32
-            {{STRING("1152921504606846976"), BIGINT(1)}, 
BIGINT(1152921504606846976)}, // int64
-            {{STRING("6.18"), BIGINT(1)}, Null()},                             
        // double
-            {{STRING(R"("abcd")"), BIGINT(1)}, Null()},                        
        // string
-            {{STRING("{}"), BIGINT(1)}, Null()},                         // 
empty object
-            {{STRING(R"({"k1":"v31", "k2": 300})"), BIGINT(1)}, Null()}, // 
object
-            {{STRING("[]"), BIGINT(1)}, Null()},                         // 
empty array
-            {{STRING("[123, 456]"), BIGINT(1)}, Null()},                 // 
int array
-            {{STRING(R"(["abc", "def"])"), BIGINT(1)}, Null()},          // 
string array
-            {{STRING(R"([null, true, false, 100, 6.18, "abc"])"), BIGINT(1)},
-             Null()}, // multi type array
-            {{STRING(R"([{"k1":"v41", "k2": 400}, 1, "a", 3.14])"), BIGINT(1)},
-             Null()}, // complex array
-    };
-    for (const auto& row : data_set) {
-        DataSet const_dataset = {row};
-        static_cast<void>(
-                check_function<DataTypeInt64, true>(func_name, input_types, 
const_dataset));
-    }
-
-    input_types = {Nullable {TypeIndex::JSONB}, ConstedNotnull 
{TypeIndex::Float64}};
-    // cast to DOUBLE
-    data_set = {
-            {{STRING("null"), DOUBLE(1)}, Null()},
-            {{STRING("true"), DOUBLE(1)}, Null()},
-            {{STRING("false"), DOUBLE(1)}, Null()},
-            {{STRING("100"), DOUBLE(1)}, DOUBLE(100)},                         
        //int8
-            {{STRING("10000"), DOUBLE(1)}, DOUBLE(10000)},                     
        // int16
-            {{STRING("1000000000"), DOUBLE(1)}, DOUBLE(1000000000)},           
        // int32
-            {{STRING("1152921504606846976"), DOUBLE(1)}, 
DOUBLE(1152921504606846976)}, // int64
-            {{STRING("6.18"), DOUBLE(1)}, DOUBLE(6.18)},                       
        // double
-            {{STRING(R"("abcd")"), DOUBLE(1)}, Null()},                        
        // string
-            {{STRING("{}"), DOUBLE(1)}, Null()},                         // 
empty object
-            {{STRING(R"({"k1":"v31", "k2": 300})"), DOUBLE(1)}, Null()}, // 
object
-            {{STRING("[]"), DOUBLE(1)}, Null()},                         // 
empty array
-            {{STRING("[123, 456]"), DOUBLE(1)}, Null()},                 // 
int array
-            {{STRING(R"(["abc", "def"])"), DOUBLE(1)}, Null()},          // 
string array
-            {{STRING(R"([null, true, false, 100, 6.18, "abc"])"), DOUBLE(1)},
-             Null()}, // multi type array
-            {{STRING(R"([{"k1":"v41", "k2": 400}, 1, "a", 3.14])"), DOUBLE(1)},
-             Null()}, // complex array
-    };
-    for (const auto& row : data_set) {
-        DataSet const_dataset = {row};
-        static_cast<void>(
-                check_function<DataTypeFloat64, true>(func_name, input_types, 
const_dataset));
-    }
-
-    input_types = {Nullable {TypeIndex::JSONB}, ConstedNotnull 
{TypeIndex::String}};
-    // cast to STRING
-    data_set = {
-            {{STRING("null"), STRING("1")}, STRING("null")},
-            {{STRING("true"), STRING("1")}, STRING("true")},
-            {{STRING("false"), STRING("1")}, STRING("false")},
-            {{STRING("100"), STRING("1")}, STRING("100")},                     
            //int8
-            {{STRING("10000"), STRING("1")}, STRING("10000")},                 
            // int16
-            {{STRING("1000000000"), STRING("1")}, STRING("1000000000")},       
            // int32
-            {{STRING("1152921504606846976"), STRING("1")}, 
STRING("1152921504606846976")}, // int64
-            {{STRING("6.18"), STRING("1")}, STRING("6.18")},                   
            // double
-            {{STRING(R"("abcd")"), STRING("1")}, STRING(R"("abcd")")},         
            // string
-            {{STRING("{}"), STRING("1")}, STRING("{}")}, // empty object
-            {{STRING(R"({"k1":"v31", "k2": 300})"), STRING("1")},
-             STRING(R"({"k1":"v31","k2":300})")},                       // 
object
-            {{STRING("[]"), STRING("1")}, STRING("[]")},                // 
empty array
-            {{STRING("[123, 456]"), STRING("1")}, STRING("[123,456]")}, // int 
array
-            {{STRING(R"(["abc", "def"])"), STRING("1")},
-             STRING(R"(["abc","def"])")}, // string array
-            {{STRING(R"([null, true, false, 100, 6.18, "abc"])"), STRING("1")},
-             STRING(R"([null,true,false,100,6.18,"abc"])")}, // multi type 
array
-            {{STRING(R"([{"k1":"v41", "k2": 400}, 1, "a", 3.14])"), 
STRING("1")},
-             STRING(R"([{"k1":"v41","k2":400},1,"a",3.14])")}, // complex array
-    };
-    for (const auto& row : data_set) {
-        DataSet const_dataset = {row};
-        static_cast<void>(
-                check_function<DataTypeString, true>(func_name, input_types, 
const_dataset));
-    }
-}
-
 TEST(FunctionJsonbTEST, JsonbCastFromOtherTest) {
     // CAST Nullable(X) to Nullable(JSONB)
     static_cast<void>(check_function<DataTypeJsonb, true>(
diff --git a/regression-test/data/datatype_p0/json/json_cast.out 
b/regression-test/data/datatype_p0/json/json_cast.out
index 8f58f45ce74..f7d9363df38 100644
--- a/regression-test/data/datatype_p0/json/json_cast.out
+++ b/regression-test/data/datatype_p0/json/json_cast.out
@@ -21,13 +21,13 @@
 true
 
 -- !sql8 --
-\N
+1000
 
 -- !sql9 --
 1000.1111
 
 -- !sql10 --
-\N
+true
 
 -- !sql11 --
 ["CXO0N: 1045901740","HMkTa: 1348450505","44 HHD: 915015173","j9WoJ: 
-1517316688"]
@@ -53,3 +53,36 @@ true
 -- !sql18 --
 \N
 
+-- !sql19 --
+1
+
+-- !sql19 --
+0
+
+-- !sql20 --
+1.0
+
+-- !sql20 --
+0.0
+
+-- !sql21 --
+true
+
+-- !sql22 --
+1024.0
+
+-- !sql23 --
+1024.0
+
+-- !sql24 --
+1024.0
+
+-- !sql24 --
+[1,2,3]
+
+-- !sql25 --
+[1,2,3]
+
+-- !sql26 --
+["2020-01-01"]
+
diff --git a/regression-test/data/json_p0/test_json_load_and_function.out 
b/regression-test/data/json_p0/test_json_load_and_function.out
index b7e51e5acce..27a99c8959b 100644
--- a/regression-test/data/json_p0/test_json_load_and_function.out
+++ b/regression-test/data/json_p0/test_json_load_and_function.out
@@ -5716,11 +5716,11 @@
 2      null    \N
 3      true    true
 4      false   false
-5      100     \N
-6      10000   \N
-7      1000000000      \N
-8      1152921504606846976     \N
-9      6.18    \N
+5      100     true
+6      10000   true
+7      1000000000      true
+8      1152921504606846976     true
+9      6.18    true
 10     "abcd"  \N
 11     {}      \N
 12     {"k1":"v31","k2":300}   \N
@@ -5733,9 +5733,9 @@
 26     \N      \N
 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
+29     12524337771678448270    true
+30     -9223372036854775808    true
+31     18446744073709551615    true
 32     {"":"v1"}       \N
 33     {"":1,"":"v1"}  \N
 34     {"":1,"ab":"v1","":"v1","":2}   \N
@@ -5743,13 +5743,13 @@
 -- !select --
 1      \N      \N
 2      null    \N
-3      true    \N
-4      false   \N
+3      true    1
+4      false   0
 5      100     100
 6      10000   10000
 7      1000000000      -13824
 8      1152921504606846976     0
-9      6.18    \N
+9      6.18    6
 10     "abcd"  \N
 11     {}      \N
 12     {"k1":"v31","k2":300}   \N
@@ -5772,13 +5772,13 @@
 -- !select --
 1      \N      \N
 2      null    \N
-3      true    \N
-4      false   \N
+3      true    1
+4      false   0
 5      100     100
 6      10000   10000
 7      1000000000      1000000000
 8      1152921504606846976     0
-9      6.18    \N
+9      6.18    6
 10     "abcd"  \N
 11     {}      \N
 12     {"k1":"v31","k2":300}   \N
@@ -5801,13 +5801,13 @@
 -- !select --
 1      \N      \N
 2      null    \N
-3      true    \N
-4      false   \N
+3      true    1
+4      false   0
 5      100     100
 6      10000   10000
 7      1000000000      1000000000
 8      1152921504606846976     1152921504606846976
-9      6.18    \N
+9      6.18    6
 10     "abcd"  \N
 11     {}      \N
 12     {"k1":"v31","k2":300}   \N
@@ -5830,8 +5830,8 @@
 -- !select --
 1      \N      \N
 2      null    \N
-3      true    \N
-4      false   \N
+3      true    1.0
+4      false   0.0
 5      100     100.0
 6      10000   10000.0
 7      1000000000      1.0E9
@@ -5890,11 +5890,11 @@
 2      null    \N
 3      true    true
 4      false   false
-5      100     \N
-6      10000   \N
-7      1000000000      \N
-8      1152921504606846976     \N
-9      6.18    \N
+5      100     true
+6      10000   true
+7      1000000000      true
+8      1152921504606846976     true
+9      6.18    true
 10     "abcd"  \N
 11     {}      \N
 12     {"k1":"v31","k2":300}   \N
@@ -5907,9 +5907,9 @@
 26     \N      \N
 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
+29     12524337771678448270    true
+30     -9223372036854775808    true
+31     18446744073709551615    true
 32     {"":"v1"}       \N
 33     {"":1,"":"v1"}  \N
 34     {"":1,"ab":"v1","":"v1","":2}   \N
@@ -5917,13 +5917,13 @@
 -- !select --
 1      \N      \N
 2      null    \N
-3      true    \N
-4      false   \N
+3      true    1
+4      false   0
 5      100     100
 6      10000   10000
 7      1000000000      -13824
 8      1152921504606846976     0
-9      6.18    \N
+9      6.18    6
 10     "abcd"  \N
 11     {}      \N
 12     {"k1":"v31","k2":300}   \N
@@ -5946,13 +5946,13 @@
 -- !select --
 1      \N      \N
 2      null    \N
-3      true    \N
-4      false   \N
+3      true    1
+4      false   0
 5      100     100
 6      10000   10000
 7      1000000000      1000000000
 8      1152921504606846976     0
-9      6.18    \N
+9      6.18    6
 10     "abcd"  \N
 11     {}      \N
 12     {"k1":"v31","k2":300}   \N
@@ -5975,13 +5975,13 @@
 -- !select --
 1      \N      \N
 2      null    \N
-3      true    \N
-4      false   \N
+3      true    1
+4      false   0
 5      100     100
 6      10000   10000
 7      1000000000      1000000000
 8      1152921504606846976     1152921504606846976
-9      6.18    \N
+9      6.18    6
 10     "abcd"  \N
 11     {}      \N
 12     {"k1":"v31","k2":300}   \N
@@ -6004,8 +6004,8 @@
 -- !select --
 1      \N      \N
 2      null    \N
-3      true    \N
-4      false   \N
+3      true    1
+4      false   0
 5      100     100
 6      10000   10000
 7      1000000000      1000000000
diff --git 
a/regression-test/data/json_p0/test_json_load_unique_key_and_function.out 
b/regression-test/data/json_p0/test_json_load_unique_key_and_function.out
index 3cb34304af4..a0a12b2c276 100644
--- a/regression-test/data/json_p0/test_json_load_unique_key_and_function.out
+++ b/regression-test/data/json_p0/test_json_load_unique_key_and_function.out
@@ -3934,11 +3934,11 @@
 2      null    \N
 3      true    true
 4      false   false
-5      100     \N
-6      10000   \N
-7      1000000000      \N
-8      1152921504606846976     \N
-9      6.18    \N
+5      100     true
+6      10000   true
+7      1000000000      true
+8      1152921504606846976     true
+9      6.18    true
 10     "abcd"  \N
 11     {}      \N
 12     {"k1":"v31","k2":300}   \N
@@ -3955,13 +3955,13 @@
 -- !select --
 1      \N      \N
 2      null    \N
-3      true    \N
-4      false   \N
+3      true    1
+4      false   0
 5      100     100
 6      10000   10000
 7      1000000000      -13824
 8      1152921504606846976     0
-9      6.18    \N
+9      6.18    6
 10     "abcd"  \N
 11     {}      \N
 12     {"k1":"v31","k2":300}   \N
@@ -3978,13 +3978,13 @@
 -- !select --
 1      \N      \N
 2      null    \N
-3      true    \N
-4      false   \N
+3      true    1
+4      false   0
 5      100     100
 6      10000   10000
 7      1000000000      1000000000
 8      1152921504606846976     0
-9      6.18    \N
+9      6.18    6
 10     "abcd"  \N
 11     {}      \N
 12     {"k1":"v31","k2":300}   \N
@@ -4001,13 +4001,13 @@
 -- !select --
 1      \N      \N
 2      null    \N
-3      true    \N
-4      false   \N
+3      true    1
+4      false   0
 5      100     100
 6      10000   10000
 7      1000000000      1000000000
 8      1152921504606846976     1152921504606846976
-9      6.18    \N
+9      6.18    6
 10     "abcd"  \N
 11     {}      \N
 12     {"k1":"v31","k2":300}   \N
@@ -4024,8 +4024,8 @@
 -- !select --
 1      \N      \N
 2      null    \N
-3      true    \N
-4      false   \N
+3      true    1.0
+4      false   0.0
 5      100     100.0
 6      10000   10000.0
 7      1000000000      1.0E9
@@ -4072,11 +4072,11 @@
 2      null    \N
 3      true    true
 4      false   false
-5      100     \N
-6      10000   \N
-7      1000000000      \N
-8      1152921504606846976     \N
-9      6.18    \N
+5      100     true
+6      10000   true
+7      1000000000      true
+8      1152921504606846976     true
+9      6.18    true
 10     "abcd"  \N
 11     {}      \N
 12     {"k1":"v31","k2":300}   \N
@@ -4093,13 +4093,13 @@
 -- !select --
 1      \N      \N
 2      null    \N
-3      true    \N
-4      false   \N
+3      true    1
+4      false   0
 5      100     100
 6      10000   10000
 7      1000000000      -13824
 8      1152921504606846976     0
-9      6.18    \N
+9      6.18    6
 10     "abcd"  \N
 11     {}      \N
 12     {"k1":"v31","k2":300}   \N
@@ -4116,13 +4116,13 @@
 -- !select --
 1      \N      \N
 2      null    \N
-3      true    \N
-4      false   \N
+3      true    1
+4      false   0
 5      100     100
 6      10000   10000
 7      1000000000      1000000000
 8      1152921504606846976     0
-9      6.18    \N
+9      6.18    6
 10     "abcd"  \N
 11     {}      \N
 12     {"k1":"v31","k2":300}   \N
@@ -4139,13 +4139,13 @@
 -- !select --
 1      \N      \N
 2      null    \N
-3      true    \N
-4      false   \N
+3      true    1
+4      false   0
 5      100     100
 6      10000   10000
 7      1000000000      1000000000
 8      1152921504606846976     1152921504606846976
-9      6.18    \N
+9      6.18    6
 10     "abcd"  \N
 11     {}      \N
 12     {"k1":"v31","k2":300}   \N
@@ -4162,8 +4162,8 @@
 -- !select --
 1      \N      \N
 2      null    \N
-3      true    \N
-4      false   \N
+3      true    1
+4      false   0
 5      100     100
 6      10000   10000
 7      1000000000      1000000000
diff --git a/regression-test/data/jsonb_p0/test_jsonb_load_and_function.out 
b/regression-test/data/jsonb_p0/test_jsonb_load_and_function.out
index 271083fbeba..0c9753215c5 100644
--- a/regression-test/data/jsonb_p0/test_jsonb_load_and_function.out
+++ b/regression-test/data/jsonb_p0/test_jsonb_load_and_function.out
@@ -7714,11 +7714,11 @@
 2      null    \N
 3      true    true
 4      false   false
-5      100     \N
-6      10000   \N
-7      1000000000      \N
-8      1152921504606846976     \N
-9      6.18    \N
+5      100     true
+6      10000   true
+7      1000000000      true
+8      1152921504606846976     true
+9      6.18    true
 10     "abcd"  \N
 11     {}      \N
 12     {"k1":"v31","k2":300}   \N
@@ -7731,9 +7731,9 @@
 26     \N      \N
 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
+29     12524337771678448270    true
+30     -9223372036854775808    true
+31     18446744073709551615    true
 32     {"":"v1"}       \N
 33     {"":1,"":"v1"}  \N
 34     {"":1,"ab":"v1","":"v1","":2}   \N
@@ -7741,13 +7741,13 @@
 -- !select --
 1      \N      \N
 2      null    \N
-3      true    \N
-4      false   \N
+3      true    1
+4      false   0
 5      100     100
 6      10000   10000
 7      1000000000      -13824
 8      1152921504606846976     0
-9      6.18    \N
+9      6.18    6
 10     "abcd"  \N
 11     {}      \N
 12     {"k1":"v31","k2":300}   \N
@@ -7770,13 +7770,13 @@
 -- !select --
 1      \N      \N
 2      null    \N
-3      true    \N
-4      false   \N
+3      true    1
+4      false   0
 5      100     100
 6      10000   10000
 7      1000000000      1000000000
 8      1152921504606846976     0
-9      6.18    \N
+9      6.18    6
 10     "abcd"  \N
 11     {}      \N
 12     {"k1":"v31","k2":300}   \N
@@ -7799,13 +7799,13 @@
 -- !select --
 1      \N      \N
 2      null    \N
-3      true    \N
-4      false   \N
+3      true    1
+4      false   0
 5      100     100
 6      10000   10000
 7      1000000000      1000000000
 8      1152921504606846976     1152921504606846976
-9      6.18    \N
+9      6.18    6
 10     "abcd"  \N
 11     {}      \N
 12     {"k1":"v31","k2":300}   \N
@@ -7828,8 +7828,8 @@
 -- !select --
 1      \N      \N
 2      null    \N
-3      true    \N
-4      false   \N
+3      true    1.0
+4      false   0.0
 5      100     100.0
 6      10000   10000.0
 7      1000000000      1.0E9
@@ -7888,11 +7888,11 @@
 2      null    \N
 3      true    true
 4      false   false
-5      100     \N
-6      10000   \N
-7      1000000000      \N
-8      1152921504606846976     \N
-9      6.18    \N
+5      100     true
+6      10000   true
+7      1000000000      true
+8      1152921504606846976     true
+9      6.18    true
 10     "abcd"  \N
 11     {}      \N
 12     {"k1":"v31","k2":300}   \N
@@ -7905,9 +7905,9 @@
 26     \N      \N
 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
+29     12524337771678448270    true
+30     -9223372036854775808    true
+31     18446744073709551615    true
 32     {"":"v1"}       \N
 33     {"":1,"":"v1"}  \N
 34     {"":1,"ab":"v1","":"v1","":2}   \N
@@ -7915,13 +7915,13 @@
 -- !select --
 1      \N      \N
 2      null    \N
-3      true    \N
-4      false   \N
+3      true    1
+4      false   0
 5      100     100
 6      10000   10000
 7      1000000000      -13824
 8      1152921504606846976     0
-9      6.18    \N
+9      6.18    6
 10     "abcd"  \N
 11     {}      \N
 12     {"k1":"v31","k2":300}   \N
@@ -7944,13 +7944,13 @@
 -- !select --
 1      \N      \N
 2      null    \N
-3      true    \N
-4      false   \N
+3      true    1
+4      false   0
 5      100     100
 6      10000   10000
 7      1000000000      1000000000
 8      1152921504606846976     0
-9      6.18    \N
+9      6.18    6
 10     "abcd"  \N
 11     {}      \N
 12     {"k1":"v31","k2":300}   \N
@@ -7973,13 +7973,13 @@
 -- !select --
 1      \N      \N
 2      null    \N
-3      true    \N
-4      false   \N
+3      true    1
+4      false   0
 5      100     100
 6      10000   10000
 7      1000000000      1000000000
 8      1152921504606846976     1152921504606846976
-9      6.18    \N
+9      6.18    6
 10     "abcd"  \N
 11     {}      \N
 12     {"k1":"v31","k2":300}   \N
@@ -8002,8 +8002,8 @@
 -- !select --
 1      \N      \N
 2      null    \N
-3      true    \N
-4      false   \N
+3      true    1
+4      false   0
 5      100     100
 6      10000   10000
 7      1000000000      1000000000
diff --git 
a/regression-test/data/jsonb_p0/test_jsonb_load_unique_key_and_function.out 
b/regression-test/data/jsonb_p0/test_jsonb_load_unique_key_and_function.out
index a9bec25de09..c699a010fc8 100644
--- a/regression-test/data/jsonb_p0/test_jsonb_load_unique_key_and_function.out
+++ b/regression-test/data/jsonb_p0/test_jsonb_load_unique_key_and_function.out
@@ -5521,11 +5521,11 @@
 2      null    \N
 3      true    true
 4      false   false
-5      100     \N
-6      10000   \N
-7      1000000000      \N
-8      1152921504606846976     \N
-9      6.18    \N
+5      100     true
+6      10000   true
+7      1000000000      true
+8      1152921504606846976     true
+9      6.18    true
 10     "abcd"  \N
 11     {}      \N
 12     {"k1":"v31","k2":300}   \N
@@ -5542,13 +5542,13 @@
 -- !select --
 1      \N      \N
 2      null    \N
-3      true    \N
-4      false   \N
+3      true    1
+4      false   0
 5      100     100
 6      10000   10000
 7      1000000000      -13824
 8      1152921504606846976     0
-9      6.18    \N
+9      6.18    6
 10     "abcd"  \N
 11     {}      \N
 12     {"k1":"v31","k2":300}   \N
@@ -5565,13 +5565,13 @@
 -- !select --
 1      \N      \N
 2      null    \N
-3      true    \N
-4      false   \N
+3      true    1
+4      false   0
 5      100     100
 6      10000   10000
 7      1000000000      1000000000
 8      1152921504606846976     0
-9      6.18    \N
+9      6.18    6
 10     "abcd"  \N
 11     {}      \N
 12     {"k1":"v31","k2":300}   \N
@@ -5588,13 +5588,13 @@
 -- !select --
 1      \N      \N
 2      null    \N
-3      true    \N
-4      false   \N
+3      true    1
+4      false   0
 5      100     100
 6      10000   10000
 7      1000000000      1000000000
 8      1152921504606846976     1152921504606846976
-9      6.18    \N
+9      6.18    6
 10     "abcd"  \N
 11     {}      \N
 12     {"k1":"v31","k2":300}   \N
@@ -5611,8 +5611,8 @@
 -- !select --
 1      \N      \N
 2      null    \N
-3      true    \N
-4      false   \N
+3      true    1.0
+4      false   0.0
 5      100     100.0
 6      10000   10000.0
 7      1000000000      1.0E9
@@ -5659,11 +5659,11 @@
 2      null    \N
 3      true    true
 4      false   false
-5      100     \N
-6      10000   \N
-7      1000000000      \N
-8      1152921504606846976     \N
-9      6.18    \N
+5      100     true
+6      10000   true
+7      1000000000      true
+8      1152921504606846976     true
+9      6.18    true
 10     "abcd"  \N
 11     {}      \N
 12     {"k1":"v31","k2":300}   \N
@@ -5680,13 +5680,13 @@
 -- !select --
 1      \N      \N
 2      null    \N
-3      true    \N
-4      false   \N
+3      true    1
+4      false   0
 5      100     100
 6      10000   10000
 7      1000000000      -13824
 8      1152921504606846976     0
-9      6.18    \N
+9      6.18    6
 10     "abcd"  \N
 11     {}      \N
 12     {"k1":"v31","k2":300}   \N
@@ -5703,13 +5703,13 @@
 -- !select --
 1      \N      \N
 2      null    \N
-3      true    \N
-4      false   \N
+3      true    1
+4      false   0
 5      100     100
 6      10000   10000
 7      1000000000      1000000000
 8      1152921504606846976     0
-9      6.18    \N
+9      6.18    6
 10     "abcd"  \N
 11     {}      \N
 12     {"k1":"v31","k2":300}   \N
@@ -5726,13 +5726,13 @@
 -- !select --
 1      \N      \N
 2      null    \N
-3      true    \N
-4      false   \N
+3      true    1
+4      false   0
 5      100     100
 6      10000   10000
 7      1000000000      1000000000
 8      1152921504606846976     1152921504606846976
-9      6.18    \N
+9      6.18    6
 10     "abcd"  \N
 11     {}      \N
 12     {"k1":"v31","k2":300}   \N
@@ -5749,8 +5749,8 @@
 -- !select --
 1      \N      \N
 2      null    \N
-3      true    \N
-4      false   \N
+3      true    1
+4      false   0
 5      100     100
 6      10000   10000
 7      1000000000      1000000000
diff --git a/regression-test/data/nereids_function_p0/scalar_function/J.out 
b/regression-test/data/nereids_function_p0/scalar_function/J.out
index 0994891dc71..41606ca51a7 100644
--- a/regression-test/data/nereids_function_p0/scalar_function/J.out
+++ b/regression-test/data/nereids_function_p0/scalar_function/J.out
@@ -6914,11 +6914,11 @@
 2      null    \N
 3      true    true
 4      false   false
-5      100     \N
-6      10000   \N
-7      1000000000      \N
-8      1152921504606846976     \N
-9      6.18    \N
+5      100     true
+6      10000   true
+7      1000000000      true
+8      1152921504606846976     true
+9      6.18    true
 10     "abcd"  \N
 11     {}      \N
 12     {"k1":"v31","k2":300}   \N
@@ -6931,20 +6931,20 @@
 26     \N      \N
 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
+29     12524337771678448270    true
+30     -9223372036854775808    true
+31     18446744073709551615    true
 
 -- !select --
 1      \N      \N
 2      null    \N
-3      true    \N
-4      false   \N
+3      true    1
+4      false   0
 5      100     100
 6      10000   10000
 7      1000000000      -13824
 8      1152921504606846976     0
-9      6.18    \N
+9      6.18    6
 10     "abcd"  \N
 11     {}      \N
 12     {"k1":"v31","k2":300}   \N
@@ -6964,13 +6964,13 @@
 -- !select --
 1      \N      \N
 2      null    \N
-3      true    \N
-4      false   \N
+3      true    1
+4      false   0
 5      100     100
 6      10000   10000
 7      1000000000      1000000000
 8      1152921504606846976     0
-9      6.18    \N
+9      6.18    6
 10     "abcd"  \N
 11     {}      \N
 12     {"k1":"v31","k2":300}   \N
@@ -6990,13 +6990,13 @@
 -- !select --
 1      \N      \N
 2      null    \N
-3      true    \N
-4      false   \N
+3      true    1
+4      false   0
 5      100     100
 6      10000   10000
 7      1000000000      1000000000
 8      1152921504606846976     1152921504606846976
-9      6.18    \N
+9      6.18    6
 10     "abcd"  \N
 11     {}      \N
 12     {"k1":"v31","k2":300}   \N
@@ -7016,8 +7016,8 @@
 -- !select --
 1      \N      \N
 2      null    \N
-3      true    \N
-4      false   \N
+3      true    1.0
+4      false   0.0
 5      100     100.0
 6      10000   10000.0
 7      1000000000      1.0E9
@@ -7070,11 +7070,11 @@
 2      null    \N
 3      true    true
 4      false   false
-5      100     \N
-6      10000   \N
-7      1000000000      \N
-8      1152921504606846976     \N
-9      6.18    \N
+5      100     true
+6      10000   true
+7      1000000000      true
+8      1152921504606846976     true
+9      6.18    true
 10     "abcd"  \N
 11     {}      \N
 12     {"k1":"v31","k2":300}   \N
@@ -7087,20 +7087,20 @@
 26     \N      \N
 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
+29     12524337771678448270    true
+30     -9223372036854775808    true
+31     18446744073709551615    true
 
 -- !select --
 1      \N      \N
 2      null    \N
-3      true    \N
-4      false   \N
+3      true    1
+4      false   0
 5      100     100
 6      10000   10000
 7      1000000000      -13824
 8      1152921504606846976     0
-9      6.18    \N
+9      6.18    6
 10     "abcd"  \N
 11     {}      \N
 12     {"k1":"v31","k2":300}   \N
@@ -7120,13 +7120,13 @@
 -- !select --
 1      \N      \N
 2      null    \N
-3      true    \N
-4      false   \N
+3      true    1
+4      false   0
 5      100     100
 6      10000   10000
 7      1000000000      1000000000
 8      1152921504606846976     0
-9      6.18    \N
+9      6.18    6
 10     "abcd"  \N
 11     {}      \N
 12     {"k1":"v31","k2":300}   \N
@@ -7146,13 +7146,13 @@
 -- !select --
 1      \N      \N
 2      null    \N
-3      true    \N
-4      false   \N
+3      true    1
+4      false   0
 5      100     100
 6      10000   10000
 7      1000000000      1000000000
 8      1152921504606846976     1152921504606846976
-9      6.18    \N
+9      6.18    6
 10     "abcd"  \N
 11     {}      \N
 12     {"k1":"v31","k2":300}   \N
@@ -7172,8 +7172,8 @@
 -- !select --
 1      \N      \N
 2      null    \N
-3      true    \N
-4      false   \N
+3      true    1
+4      false   0
 5      100     100
 6      10000   10000
 7      1000000000      1000000000
diff --git 
a/regression-test/data/nereids_p0/json_p0/test_json_load_and_function.out 
b/regression-test/data/nereids_p0/json_p0/test_json_load_and_function.out
index 17a8db24d33..295685a8c05 100644
--- a/regression-test/data/nereids_p0/json_p0/test_json_load_and_function.out
+++ b/regression-test/data/nereids_p0/json_p0/test_json_load_and_function.out
@@ -5713,11 +5713,11 @@
 2      null    \N
 3      true    true
 4      false   false
-5      100     \N
-6      10000   \N
-7      1000000000      \N
-8      1152921504606846976     \N
-9      6.18    \N
+5      100     true
+6      10000   true
+7      1000000000      true
+8      1152921504606846976     true
+9      6.18    true
 10     "abcd"  \N
 11     {}      \N
 12     {"k1":"v31","k2":300}   \N
@@ -5730,9 +5730,9 @@
 26     \N      \N
 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
+29     12524337771678448270    true
+30     -9223372036854775808    true
+31     18446744073709551615    true
 32     {"":"v1"}       \N
 33     {"":1,"":"v1"}  \N
 34     {"":1,"ab":"v1","":"v1","":2}   \N
@@ -5740,13 +5740,13 @@
 -- !select --
 1      \N      \N
 2      null    \N
-3      true    \N
-4      false   \N
+3      true    1
+4      false   0
 5      100     100
 6      10000   10000
 7      1000000000      -13824
 8      1152921504606846976     0
-9      6.18    \N
+9      6.18    6
 10     "abcd"  \N
 11     {}      \N
 12     {"k1":"v31","k2":300}   \N
@@ -5769,13 +5769,13 @@
 -- !select --
 1      \N      \N
 2      null    \N
-3      true    \N
-4      false   \N
+3      true    1
+4      false   0
 5      100     100
 6      10000   10000
 7      1000000000      1000000000
 8      1152921504606846976     0
-9      6.18    \N
+9      6.18    6
 10     "abcd"  \N
 11     {}      \N
 12     {"k1":"v31","k2":300}   \N
@@ -5798,13 +5798,13 @@
 -- !select --
 1      \N      \N
 2      null    \N
-3      true    \N
-4      false   \N
+3      true    1
+4      false   0
 5      100     100
 6      10000   10000
 7      1000000000      1000000000
 8      1152921504606846976     1152921504606846976
-9      6.18    \N
+9      6.18    6
 10     "abcd"  \N
 11     {}      \N
 12     {"k1":"v31","k2":300}   \N
@@ -5827,8 +5827,8 @@
 -- !select --
 1      \N      \N
 2      null    \N
-3      true    \N
-4      false   \N
+3      true    1.0
+4      false   0.0
 5      100     100.0
 6      10000   10000.0
 7      1000000000      1.0E9
@@ -5887,11 +5887,11 @@
 2      null    \N
 3      true    true
 4      false   false
-5      100     \N
-6      10000   \N
-7      1000000000      \N
-8      1152921504606846976     \N
-9      6.18    \N
+5      100     true
+6      10000   true
+7      1000000000      true
+8      1152921504606846976     true
+9      6.18    true
 10     "abcd"  \N
 11     {}      \N
 12     {"k1":"v31","k2":300}   \N
@@ -5904,9 +5904,9 @@
 26     \N      \N
 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
+29     12524337771678448270    true
+30     -9223372036854775808    true
+31     18446744073709551615    true
 32     {"":"v1"}       \N
 33     {"":1,"":"v1"}  \N
 34     {"":1,"ab":"v1","":"v1","":2}   \N
@@ -5914,13 +5914,13 @@
 -- !select --
 1      \N      \N
 2      null    \N
-3      true    \N
-4      false   \N
+3      true    1
+4      false   0
 5      100     100
 6      10000   10000
 7      1000000000      -13824
 8      1152921504606846976     0
-9      6.18    \N
+9      6.18    6
 10     "abcd"  \N
 11     {}      \N
 12     {"k1":"v31","k2":300}   \N
@@ -5943,13 +5943,13 @@
 -- !select --
 1      \N      \N
 2      null    \N
-3      true    \N
-4      false   \N
+3      true    1
+4      false   0
 5      100     100
 6      10000   10000
 7      1000000000      1000000000
 8      1152921504606846976     0
-9      6.18    \N
+9      6.18    6
 10     "abcd"  \N
 11     {}      \N
 12     {"k1":"v31","k2":300}   \N
@@ -5972,13 +5972,13 @@
 -- !select --
 1      \N      \N
 2      null    \N
-3      true    \N
-4      false   \N
+3      true    1
+4      false   0
 5      100     100
 6      10000   10000
 7      1000000000      1000000000
 8      1152921504606846976     1152921504606846976
-9      6.18    \N
+9      6.18    6
 10     "abcd"  \N
 11     {}      \N
 12     {"k1":"v31","k2":300}   \N
@@ -6001,8 +6001,8 @@
 -- !select --
 1      \N      \N
 2      null    \N
-3      true    \N
-4      false   \N
+3      true    1
+4      false   0
 5      100     100
 6      10000   10000
 7      1000000000      1000000000
diff --git 
a/regression-test/data/nereids_p0/json_p0/test_json_load_unique_key_and_function.out
 
b/regression-test/data/nereids_p0/json_p0/test_json_load_unique_key_and_function.out
index 3cb34304af4..a0a12b2c276 100644
--- 
a/regression-test/data/nereids_p0/json_p0/test_json_load_unique_key_and_function.out
+++ 
b/regression-test/data/nereids_p0/json_p0/test_json_load_unique_key_and_function.out
@@ -3934,11 +3934,11 @@
 2      null    \N
 3      true    true
 4      false   false
-5      100     \N
-6      10000   \N
-7      1000000000      \N
-8      1152921504606846976     \N
-9      6.18    \N
+5      100     true
+6      10000   true
+7      1000000000      true
+8      1152921504606846976     true
+9      6.18    true
 10     "abcd"  \N
 11     {}      \N
 12     {"k1":"v31","k2":300}   \N
@@ -3955,13 +3955,13 @@
 -- !select --
 1      \N      \N
 2      null    \N
-3      true    \N
-4      false   \N
+3      true    1
+4      false   0
 5      100     100
 6      10000   10000
 7      1000000000      -13824
 8      1152921504606846976     0
-9      6.18    \N
+9      6.18    6
 10     "abcd"  \N
 11     {}      \N
 12     {"k1":"v31","k2":300}   \N
@@ -3978,13 +3978,13 @@
 -- !select --
 1      \N      \N
 2      null    \N
-3      true    \N
-4      false   \N
+3      true    1
+4      false   0
 5      100     100
 6      10000   10000
 7      1000000000      1000000000
 8      1152921504606846976     0
-9      6.18    \N
+9      6.18    6
 10     "abcd"  \N
 11     {}      \N
 12     {"k1":"v31","k2":300}   \N
@@ -4001,13 +4001,13 @@
 -- !select --
 1      \N      \N
 2      null    \N
-3      true    \N
-4      false   \N
+3      true    1
+4      false   0
 5      100     100
 6      10000   10000
 7      1000000000      1000000000
 8      1152921504606846976     1152921504606846976
-9      6.18    \N
+9      6.18    6
 10     "abcd"  \N
 11     {}      \N
 12     {"k1":"v31","k2":300}   \N
@@ -4024,8 +4024,8 @@
 -- !select --
 1      \N      \N
 2      null    \N
-3      true    \N
-4      false   \N
+3      true    1.0
+4      false   0.0
 5      100     100.0
 6      10000   10000.0
 7      1000000000      1.0E9
@@ -4072,11 +4072,11 @@
 2      null    \N
 3      true    true
 4      false   false
-5      100     \N
-6      10000   \N
-7      1000000000      \N
-8      1152921504606846976     \N
-9      6.18    \N
+5      100     true
+6      10000   true
+7      1000000000      true
+8      1152921504606846976     true
+9      6.18    true
 10     "abcd"  \N
 11     {}      \N
 12     {"k1":"v31","k2":300}   \N
@@ -4093,13 +4093,13 @@
 -- !select --
 1      \N      \N
 2      null    \N
-3      true    \N
-4      false   \N
+3      true    1
+4      false   0
 5      100     100
 6      10000   10000
 7      1000000000      -13824
 8      1152921504606846976     0
-9      6.18    \N
+9      6.18    6
 10     "abcd"  \N
 11     {}      \N
 12     {"k1":"v31","k2":300}   \N
@@ -4116,13 +4116,13 @@
 -- !select --
 1      \N      \N
 2      null    \N
-3      true    \N
-4      false   \N
+3      true    1
+4      false   0
 5      100     100
 6      10000   10000
 7      1000000000      1000000000
 8      1152921504606846976     0
-9      6.18    \N
+9      6.18    6
 10     "abcd"  \N
 11     {}      \N
 12     {"k1":"v31","k2":300}   \N
@@ -4139,13 +4139,13 @@
 -- !select --
 1      \N      \N
 2      null    \N
-3      true    \N
-4      false   \N
+3      true    1
+4      false   0
 5      100     100
 6      10000   10000
 7      1000000000      1000000000
 8      1152921504606846976     1152921504606846976
-9      6.18    \N
+9      6.18    6
 10     "abcd"  \N
 11     {}      \N
 12     {"k1":"v31","k2":300}   \N
@@ -4162,8 +4162,8 @@
 -- !select --
 1      \N      \N
 2      null    \N
-3      true    \N
-4      false   \N
+3      true    1
+4      false   0
 5      100     100
 6      10000   10000
 7      1000000000      1000000000
diff --git 
a/regression-test/data/nereids_p0/jsonb_p0/test_jsonb_load_unique_key_and_function.out
 
b/regression-test/data/nereids_p0/jsonb_p0/test_jsonb_load_unique_key_and_function.out
index f69d695d455..12e3742583c 100644
--- 
a/regression-test/data/nereids_p0/jsonb_p0/test_jsonb_load_unique_key_and_function.out
+++ 
b/regression-test/data/nereids_p0/jsonb_p0/test_jsonb_load_unique_key_and_function.out
@@ -5521,11 +5521,11 @@
 2      null    \N
 3      true    true
 4      false   false
-5      100     \N
-6      10000   \N
-7      1000000000      \N
-8      1152921504606846976     \N
-9      6.18    \N
+5      100     true
+6      10000   true
+7      1000000000      true
+8      1152921504606846976     true
+9      6.18    true
 10     "abcd"  \N
 11     {}      \N
 12     {"k1":"v31","k2":300}   \N
@@ -5542,13 +5542,13 @@
 -- !select --
 1      \N      \N
 2      null    \N
-3      true    \N
-4      false   \N
+3      true    1
+4      false   0
 5      100     100
 6      10000   10000
 7      1000000000      -13824
 8      1152921504606846976     0
-9      6.18    \N
+9      6.18    6
 10     "abcd"  \N
 11     {}      \N
 12     {"k1":"v31","k2":300}   \N
@@ -5565,13 +5565,13 @@
 -- !select --
 1      \N      \N
 2      null    \N
-3      true    \N
-4      false   \N
+3      true    1
+4      false   0
 5      100     100
 6      10000   10000
 7      1000000000      1000000000
 8      1152921504606846976     0
-9      6.18    \N
+9      6.18    6
 10     "abcd"  \N
 11     {}      \N
 12     {"k1":"v31","k2":300}   \N
@@ -5588,13 +5588,13 @@
 -- !select --
 1      \N      \N
 2      null    \N
-3      true    \N
-4      false   \N
+3      true    1
+4      false   0
 5      100     100
 6      10000   10000
 7      1000000000      1000000000
 8      1152921504606846976     1152921504606846976
-9      6.18    \N
+9      6.18    6
 10     "abcd"  \N
 11     {}      \N
 12     {"k1":"v31","k2":300}   \N
@@ -5611,8 +5611,8 @@
 -- !select --
 1      \N      \N
 2      null    \N
-3      true    \N
-4      false   \N
+3      true    1.0
+4      false   0.0
 5      100     100.0
 6      10000   10000.0
 7      1000000000      1.0E9
@@ -5659,11 +5659,11 @@
 2      null    \N
 3      true    true
 4      false   false
-5      100     \N
-6      10000   \N
-7      1000000000      \N
-8      1152921504606846976     \N
-9      6.18    \N
+5      100     true
+6      10000   true
+7      1000000000      true
+8      1152921504606846976     true
+9      6.18    true
 10     "abcd"  \N
 11     {}      \N
 12     {"k1":"v31","k2":300}   \N
@@ -5680,13 +5680,13 @@
 -- !select --
 1      \N      \N
 2      null    \N
-3      true    \N
-4      false   \N
+3      true    1
+4      false   0
 5      100     100
 6      10000   10000
 7      1000000000      -13824
 8      1152921504606846976     0
-9      6.18    \N
+9      6.18    6
 10     "abcd"  \N
 11     {}      \N
 12     {"k1":"v31","k2":300}   \N
@@ -5703,13 +5703,13 @@
 -- !select --
 1      \N      \N
 2      null    \N
-3      true    \N
-4      false   \N
+3      true    1
+4      false   0
 5      100     100
 6      10000   10000
 7      1000000000      1000000000
 8      1152921504606846976     0
-9      6.18    \N
+9      6.18    6
 10     "abcd"  \N
 11     {}      \N
 12     {"k1":"v31","k2":300}   \N
@@ -5726,13 +5726,13 @@
 -- !select --
 1      \N      \N
 2      null    \N
-3      true    \N
-4      false   \N
+3      true    1
+4      false   0
 5      100     100
 6      10000   10000
 7      1000000000      1000000000
 8      1152921504606846976     1152921504606846976
-9      6.18    \N
+9      6.18    6
 10     "abcd"  \N
 11     {}      \N
 12     {"k1":"v31","k2":300}   \N
@@ -5749,8 +5749,8 @@
 -- !select --
 1      \N      \N
 2      null    \N
-3      true    \N
-4      false   \N
+3      true    1
+4      false   0
 5      100     100
 6      10000   10000
 7      1000000000      1000000000
diff --git a/regression-test/suites/datatype_p0/json/json_cast.groovy 
b/regression-test/suites/datatype_p0/json/json_cast.groovy
index 458c60992d9..683d9740bdb 100644
--- a/regression-test/suites/datatype_p0/json/json_cast.groovy
+++ b/regression-test/suites/datatype_p0/json/json_cast.groovy
@@ -36,4 +36,18 @@ suite("test_json_type_cast", "p0") {
     qt_sql16 """select cast("-" as int);"""
     qt_sql17 """select cast("a" as int);"""
     qt_sql18 """select cast("/" as int);"""
+
+    qt_sql19 "SELECT CAST(CAST(CAST(1 AS BOOLEAN) AS JSON) as INT)"
+    qt_sql19 "SELECT CAST(CAST(CAST(0 AS BOOLEAN) AS JSON) as INT)"
+    qt_sql20 "SELECT CAST(CAST(CAST(1 AS BOOLEAN) AS JSON) as DOUBLE)"
+    qt_sql20 "SELECT CAST(CAST(CAST(0 AS BOOLEAN) AS JSON) as DOUBLE)"
+    qt_sql21 "SELECT CAST(CAST(CAST(1 AS BOOLEAN) AS JSON) as BOOLEAN)"
+
+    qt_sql22 "SELECT CAST(CAST(CAST(1024 AS INT) AS JSON) as DOUBLE)"
+    qt_sql23 "SELECT CAST(CAST(CAST(1024 AS INT) AS JSON) as FLOAT)"
+    qt_sql24 "SELECT CAST(CAST(CAST(1024.0 AS DOUBLE) AS JSON) as DOUBLE)"
+
+    qt_sql24 "SELECT CAST(CAST(CAST('[1, 2, 3]' AS TEXT) AS JSON) as TEXT)"
+    qt_sql25 "SELECT CAST(CAST(CAST('[1, 2, 3]' AS TEXT) AS JSON) as TEXT)"
+    qt_sql26 """SELECT CAST(CAST(CAST('["2020-01-01"]' AS TEXT) AS JSON) as 
TEXT)"""
 }
\ No newline at end of file


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]


Reply via email to