You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@doris.apache.org by zy...@apache.org on 2023/06/30 06:29:28 UTC

[doris] branch master updated: [improve](jsonb)Invalid json path prompts an error instead of null (#19646)

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

zykkk pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/doris.git


The following commit(s) were added to refs/heads/master by this push:
     new d76fa427a3 [improve](jsonb)Invalid json path prompts an error instead of null (#19646)
d76fa427a3 is described below

commit d76fa427a3006a02cea414c4496fd4397a0ed9df
Author: Liqf <10...@users.noreply.github.com>
AuthorDate: Fri Jun 30 14:29:21 2023 +0800

    [improve](jsonb)Invalid json path prompts an error instead of null (#19646)
    
    1. Invalid json path prompts an error instead of null:
    before:
    ```sql
    mysql> SELECT jsonb_extract('[{"k1":"v41","k2":400},1,"a",3.14]', '$[a]');
    +-------------------------------------------------------------+
    | jsonb_extract('[{"k1":"v41","k2":400},1,"a",3.14]', '$[a]') |
    +-------------------------------------------------------------+
    | NULL                                                        |
    +-------------------------------------------------------------+
    1 row in set (0.01 sec)
    ```
    now
    ```sql
    mysql> SELECT jsonb_extract('[{"k1":"v41","k2":400},1,"a",3.14]', '$[a]');
    ERROR 1105 (HY000): errCode = 2, detailMessage = (127.0.0.1)[INVALID_ARGUMENT]Json path error: Invalid Json Path for value: $[a]
    ```
    2. fix some problem: https://github.com/apache/doris/pull/19185
       a. support negative numbers
    ```sql
    mysql> SELECT jsonb_extract('[{"k1":"v41","k2":400},1,"a",3.14]', '$[-2]');
    +--------------------------------------------------------------+
    | jsonb_extract('[{"k1":"v41","k2":400},1,"a",3.14]', '$[-2]') |
    +--------------------------------------------------------------+
    | "a"                                                          |
    +--------------------------------------------------------------+
    1 row in set (0.02 sec)
    ```
      b. Avoid using unnecessary memory
    3. Supplementary regression test
---
 be/src/util/jsonb_document.h                       |  247 ++-
 be/src/util/jsonb_error.h                          |    2 +
 be/src/vec/functions/function_jsonb.cpp            |   68 +-
 be/test/vec/function/function_jsonb_test.cpp       |   83 +-
 .../data/json_p0/test_json_load_and_function.out   |   50 +-
 .../test_json_load_unique_key_and_function.out     |   50 +-
 .../data/jsonb_p0/test_jsonb_load_and_function.out | 1940 ++++++++++++++++++--
 .../test_jsonb_load_unique_key_and_function.out    | 1940 ++++++++++++++++++--
 .../jsonb_p0/test_jsonb_load_and_function.groovy   |   90 +-
 .../test_jsonb_load_unique_key_and_function.groovy |   90 +-
 10 files changed, 3972 insertions(+), 588 deletions(-)

diff --git a/be/src/util/jsonb_document.h b/be/src/util/jsonb_document.h
index b18d3d47e0..d54e7291dd 100644
--- a/be/src/util/jsonb_document.h
+++ b/be/src/util/jsonb_document.h
@@ -72,6 +72,7 @@
 
 #include <algorithm>
 #include <cctype>
+#include <charconv>
 #include <limits>
 #include <string>
 #include <type_traits>
@@ -144,6 +145,8 @@ constexpr char WILDCARD = '*';
 constexpr char MINUS = '-';
 constexpr char LAST[] = "last";
 constexpr char ESCAPE = '\\';
+constexpr unsigned int MEMBER_CODE = 0;
+constexpr unsigned int ARRAY_CODE = 1;
 
 /*
  * JsonbDocument is the main object that accesses and queries JSONB packed
@@ -276,35 +279,43 @@ public:
         skip_whitespace();
     }
 
-    void clear_legPtr() { legPtr = nullptr; }
+    void clear_leg_ptr() { leg_ptr = nullptr; }
 
-    void set_legPtr(char* ptr) {
-        clear_legPtr();
-        legPtr = ptr;
+    void set_leg_ptr(char* ptr) {
+        clear_leg_ptr();
+        leg_ptr = ptr;
     }
 
-    char* get_legPtr() { return legPtr; }
+    char* get_leg_ptr() { return leg_ptr; }
 
-    void clear_legLen() { legLen = 0; }
+    void clear_leg_len() { leg_len = 0; }
 
-    void add_legLen() { legLen++; }
+    void add_leg_len() { leg_len++; }
 
-    unsigned int get_legLen() { return legLen; }
+    unsigned int get_leg_len() const { return leg_len; }
 
     void remove_escapes() {
         int new_len = 0;
-        for (int i = 0; i < legLen; i++) {
-            if (legPtr[i] != '\\') {
-                legPtr[new_len++] = legPtr[i];
+        for (int i = 0; i < leg_len; i++) {
+            if (leg_ptr[i] != '\\') {
+                leg_ptr[new_len++] = leg_ptr[i];
             }
         }
-        legPtr[new_len] = '\0';
-        legLen = new_len;
+        leg_ptr[new_len] = '\0';
+        leg_len = new_len;
     }
 
-    void set_hasEscapes(bool has) { hasEscapes = has; }
+    void set_has_escapes(bool has) { has_escapes = has; }
 
-    bool get_hasEscapes() { return hasEscapes; }
+    bool get_has_escapes() const { return has_escapes; }
+
+    void set_is_invalid_json_path(bool has) { is_invalid_json_path = has; }
+
+    bool get_is_invalid_json_path() const { return is_invalid_json_path; }
+
+    void set_type(unsigned int code) { type = code; }
+
+    bool get_type() const { return type; }
 
 private:
     /// The current position in the stream.
@@ -314,19 +325,25 @@ private:
     const char* const m_end;
 
     ///path leg ptr
-    char* legPtr;
+    char* leg_ptr;
 
     ///path leg len
-    unsigned int legLen;
+    unsigned int leg_len;
+
+    ///Whether to contain escape characters
+    bool has_escapes = false;
 
-    ///
-    bool hasEscapes = false;
+    ///Is the json path valid
+    bool is_invalid_json_path = false;
+
+    ///type: 0 is member 1 is array
+    unsigned int type;
 };
 
 class JsonbPath {
 public:
     // parse json path
-    static bool parsePath(Stream* stream, JsonbValue* value);
+    static bool parsePath(Stream* stream);
 
     static bool parse_array(Stream* stream);
     static bool parse_member(Stream* stream);
@@ -513,12 +530,14 @@ public:
     const char* getValuePtr() const;
 
     // find the JSONB value by a key path string (null terminated)
-    JsonbValue* findPath(const char* key_path, hDictFind handler = nullptr) {
-        return findPath(key_path, (unsigned int)strlen(key_path), handler);
+    JsonbValue* findPath(const char* key_path, bool& is_invalid_json_path,
+                         hDictFind handler = nullptr) {
+        return findPath(key_path, (unsigned int)strlen(key_path), is_invalid_json_path, handler);
     }
 
     // find the JSONB value by a key path string (with length)
-    JsonbValue* findPath(const char* key_path, unsigned int len, hDictFind handler);
+    JsonbValue* findPath(const char* key_path, unsigned int len, bool& is_invalid_json_path,
+                         hDictFind handler);
     friend class JsonbDocument;
 
 protected:
@@ -1189,82 +1208,144 @@ inline const char* JsonbValue::getValuePtr() const {
 }
 
 inline JsonbValue* JsonbValue::findPath(const char* key_path, unsigned int kp_len,
-                                        hDictFind handler = nullptr) {
+                                        bool& is_invalid_json_path, hDictFind handler = nullptr) {
     if (!key_path) return nullptr;
-    if (kp_len == 0) return this;
+    if (kp_len == 0) {
+        is_invalid_json_path = true;
+        return nullptr;
+    }
     Stream stream(key_path, kp_len);
     stream.skip_whitespace();
-    if (stream.exhausted() || stream.read() != SCOPE) return nullptr;
+    if (stream.exhausted() || stream.read() != SCOPE) {
+        is_invalid_json_path = true;
+        return nullptr;
+    }
 
     JsonbValue* pval = this;
 
     while (pval && !stream.exhausted()) {
         stream.skip_whitespace();
-        stream.clear_legPtr();
-        stream.clear_legLen();
+        stream.clear_leg_ptr();
+        stream.clear_leg_len();
 
-        if (!JsonbPath::parsePath(&stream, pval)) {
+        if (!JsonbPath::parsePath(&stream)) {
+            is_invalid_json_path = stream.get_is_invalid_json_path();
             return nullptr;
         }
 
-        if (stream.get_legLen() == 0) {
+        if (stream.get_leg_len() == 0) {
             return nullptr;
         }
 
-        if (LIKELY(pval->type_ == JsonbType::T_Object)) {
-            if (stream.get_legLen() == 1 && *stream.get_legPtr() == WILDCARD) {
-                return pval;
-            } else if (stream.get_hasEscapes()) {
-                stream.remove_escapes();
-            }
+        if (stream.get_type() == MEMBER_CODE) {
+            if (LIKELY(pval->type_ == JsonbType::T_Object)) {
+                if (stream.get_leg_len() == 1 && *stream.get_leg_ptr() == WILDCARD) {
+                    return pval;
+                } else if (stream.get_has_escapes()) {
+                    stream.remove_escapes();
+                }
 
-            pval = ((ObjectVal*)pval)->find(stream.get_legPtr(), stream.get_legLen(), handler);
+                pval = ((ObjectVal*)pval)
+                               ->find(stream.get_leg_ptr(), stream.get_leg_len(), handler);
 
-            if (!pval) return nullptr;
-        } else if (LIKELY(pval->type_ == JsonbType::T_Array)) {
+                if (!pval) return nullptr;
+            } else {
+                return nullptr;
+            }
+        } else if (stream.get_type() == ARRAY_CODE) {
             int index = 0;
-            std::string idx_string(stream.get_legPtr(), stream.get_legLen());
+            std::string_view idx_string(stream.get_leg_ptr(), stream.get_leg_len());
 
-            if (stream.get_legLen() == 1 && *stream.get_legPtr() == WILDCARD) {
-                return pval;
-            } else if (std::string(stream.get_legPtr(), 4) == LAST) {
+            if (stream.get_leg_len() == 1 && *stream.get_leg_ptr() == WILDCARD) {
+                if (LIKELY(pval->type_ == JsonbType::T_Array)) {
+                    stream.skip(1);
+                    stream.skip_whitespace();
+                    continue;
+                } else {
+                    return nullptr;
+                }
+            } else if (std::equal(LAST, LAST + 4, stream.get_leg_ptr(),
+                                  [](char c1, char c2) {
+                                      return std::tolower(c1) == std::tolower(c2);
+                                  }) &&
+                       stream.get_leg_len() >= 4) {
                 auto pos = idx_string.find(MINUS);
 
                 if (pos != std::string::npos) {
                     idx_string = idx_string.substr(pos + 1);
-                    size_t num = ((ArrayVal*)pval)->numElem();
-                    if (std::stoi(idx_string) > num) {
-                        return nullptr; //invalid json path
+
+                    auto result = std::from_chars(idx_string.data(),
+                                                  idx_string.data() + idx_string.size(), index);
+                    if (result.ec != std::errc()) {
+                        is_invalid_json_path = true;
+                        return nullptr;
                     }
-                    index = num - 1 - std::stoi(idx_string);
-                } else if (stream.get_legLen() == 4) {
-                    index = ((ArrayVal*)pval)->numElem() - 1;
+
+                    if (pval->type_ == JsonbType::T_Object) {
+                        if (index == 0) {
+                            continue;
+                        } else {
+                            return nullptr;
+                        }
+                    } else if (LIKELY(pval->type_ == JsonbType::T_Array)) {
+                        size_t num = ((ArrayVal*)pval)->numElem();
+                        if (index > num) return nullptr;
+                        index = num - 1 - index;
+                    } else {
+                        return nullptr;
+                    }
+                } else if (stream.get_leg_len() == 4) {
+                    if (pval->type_ == JsonbType::T_Object) {
+                        continue;
+                    } else if (LIKELY(pval->type_ == JsonbType::T_Array)) {
+                        index = ((ArrayVal*)pval)->numElem() - 1;
+                    } else {
+                        return nullptr;
+                    }
+
                 } else {
-                    return nullptr; //invalid json path
+                    is_invalid_json_path = true;
+                    return nullptr;
                 }
             } else {
-                std::string::size_type pos;
-                index = std::stoi(idx_string, &pos, 10);
-                if (pos != idx_string.size()) {
-                    return nullptr; //invalid json path
-                } else if (index >= ((ArrayVal*)pval)->numElem()) {
-                    return nullptr; //invalid json path
+                auto result = std::from_chars(idx_string.data(),
+                                              idx_string.data() + idx_string.size(), index);
+                if (result.ec != std::errc()) {
+                    is_invalid_json_path = true;
+                    return nullptr;
+                }
+
+                if (pval->type_ == JsonbType::T_Object) {
+                    if (index == 0) {
+                        continue;
+                    } else {
+                        return nullptr;
+                    }
+                } else if (LIKELY(pval->type_ == JsonbType::T_Array)) {
+                    if (std::abs(index) >= ((ArrayVal*)pval)->numElem()) return nullptr;
+                } else {
+                    return nullptr;
                 }
             }
 
-            pval = ((ArrayVal*)pval)->get(index);
+            if (index >= 0) {
+                pval = ((ArrayVal*)pval)->get(index);
+            } else {
+                pval = ((ArrayVal*)pval)->get(((ArrayVal*)pval)->numElem() + index);
+            }
         }
     }
 
     return pval;
 }
 
-inline bool JsonbPath::parsePath(Stream* stream, JsonbValue* value) {
-    if (stream->peek() == BEGIN_ARRAY && value->type() == JsonbType::T_Array) {
+inline bool JsonbPath::parsePath(Stream* stream) {
+    if (stream->peek() == BEGIN_ARRAY) {
         return parse_array(stream);
-    } else if (stream->peek() == BEGIN_MEMBER && value->type() == JsonbType::T_Object) {
+    } else if (stream->peek() == BEGIN_MEMBER) {
         return parse_member(stream);
     } else {
+        stream->set_is_invalid_json_path(true);
         return false; //invalid json path
     }
 }
@@ -1272,30 +1353,37 @@ inline bool JsonbPath::parsePath(Stream* stream, JsonbValue* value) {
 inline bool JsonbPath::parse_array(Stream* stream) {
     assert(stream->peek() == BEGIN_ARRAY);
     stream->skip(1);
-    if (stream->exhausted()) return false; //invalid json path
+    if (stream->exhausted()) {
+        stream->set_is_invalid_json_path(true);
+        return false;
+    }
 
     if (stream->peek() == WILDCARD) {
-        stream->set_legPtr(const_cast<char*>(stream->position()));
-        stream->add_legLen();
+        stream->set_leg_ptr(const_cast<char*>(stream->position()));
+        stream->add_leg_len();
         stream->skip(1);
         if (stream->peek() == END_ARRAY) {
+            stream->set_type(ARRAY_CODE);
             return true;
         } else {
-            return false; //invalid json path
+            stream->set_is_invalid_json_path(true);
+            return false;
         }
     }
 
-    stream->set_legPtr(const_cast<char*>(stream->position()));
+    stream->set_leg_ptr(const_cast<char*>(stream->position()));
 
     for (; !stream->exhausted() && stream->peek() != END_ARRAY; stream->skip(1)) {
-        stream->add_legLen();
+        stream->add_leg_len();
     }
 
     if (!stream->exhausted() && stream->peek() == END_ARRAY) {
         stream->skip(1);
+        stream->set_type(ARRAY_CODE);
         return true;
     } else {
-        return false; //invalid json path
+        stream->set_is_invalid_json_path(true);
+        return false;
     }
 }
 
@@ -1303,31 +1391,35 @@ inline bool JsonbPath::parse_member(Stream* stream) {
     // advance past the .
     assert(stream->peek() == BEGIN_MEMBER);
     stream->skip(1);
-    if (stream->exhausted()) return false; //invalid json path
+    if (stream->exhausted()) {
+        stream->set_is_invalid_json_path(true);
+        return false;
+    }
 
     if (stream->peek() == WILDCARD) {
-        stream->set_legPtr(const_cast<char*>(stream->position()));
-        stream->add_legLen();
+        stream->set_leg_ptr(const_cast<char*>(stream->position()));
+        stream->add_leg_len();
         stream->skip(1);
+        stream->set_type(MEMBER_CODE);
         return true;
     }
 
-    stream->set_legPtr(const_cast<char*>(stream->position()));
+    stream->set_leg_ptr(const_cast<char*>(stream->position()));
 
     const char* left_quotation_marks = nullptr;
     const char* right_quotation_marks = nullptr;
 
     for (; !stream->exhausted(); stream->skip(1)) {
         if (stream->peek() == ESCAPE) {
-            stream->add_legLen();
+            stream->add_leg_len();
             stream->skip(1);
-            stream->add_legLen();
-            stream->set_hasEscapes(true);
+            stream->add_leg_len();
+            stream->set_has_escapes(true);
             continue;
         } else if (stream->peek() == DOUBLE_QUOTE) {
             if (left_quotation_marks == nullptr) {
                 left_quotation_marks = stream->position();
-                stream->set_legPtr(const_cast<char*>(++left_quotation_marks));
+                stream->set_leg_ptr(const_cast<char*>(++left_quotation_marks));
                 continue;
             } else {
                 right_quotation_marks = stream->position();
@@ -1340,13 +1432,16 @@ inline bool JsonbPath::parse_member(Stream* stream) {
             }
         }
 
-        stream->add_legLen();
+        stream->add_leg_len();
     }
 
     if (left_quotation_marks != nullptr && right_quotation_marks == nullptr) {
+        stream->set_is_invalid_json_path(true);
         return false; //invalid json path
     }
 
+    stream->set_type(MEMBER_CODE);
+
     return true;
 }
 
diff --git a/be/src/util/jsonb_error.h b/be/src/util/jsonb_error.h
index 2ad632fb8b..49c061a32f 100644
--- a/be/src/util/jsonb_error.h
+++ b/be/src/util/jsonb_error.h
@@ -56,6 +56,7 @@ enum class JsonbErrType {
     E_NESTING_LVL_OVERFLOW,
     E_INVALID_DOCU_COMPAT,
     E_EXCEPTION,
+    E_INVALID_JSON_PATH,
 
     // new error code should always be added above
     E_NUM_ERRORS
@@ -107,6 +108,7 @@ private:
             "Object or array has too many nesting levels",
             "Invalid document",
             "Exception throwed",
+            "Invalid Json Path",
 
             nullptr /* E_NUM_ERRORS */
     };
diff --git a/be/src/vec/functions/function_jsonb.cpp b/be/src/vec/functions/function_jsonb.cpp
index ac62c59ef7..42bdbe4b85 100644
--- a/be/src/vec/functions/function_jsonb.cpp
+++ b/be/src/vec/functions/function_jsonb.cpp
@@ -375,6 +375,8 @@ public:
         auto& rdata = jsonb_path_column->get_chars();
         auto& roffsets = jsonb_path_column->get_offsets();
 
+        bool is_invalid_json_path = false;
+
         // execute Impl
         if constexpr (std::is_same_v<typename Impl::ReturnType, DataTypeString> ||
                       std::is_same_v<typename Impl::ReturnType, DataTypeJsonb>) {
@@ -382,26 +384,36 @@ public:
             auto& res_offsets = res->get_offsets();
             if (col_const[0]) {
                 Impl::scalar_vector(context, jsonb_data_column->get_data_at(0), rdata, roffsets,
-                                    res_data, res_offsets, null_map->get_data());
+                                    res_data, res_offsets, null_map->get_data(),
+                                    is_invalid_json_path);
             } else if (col_const[1]) {
                 Impl::vector_scalar(context, ldata, loffsets, jsonb_path_column->get_data_at(0),
-                                    res_data, res_offsets, null_map->get_data());
+                                    res_data, res_offsets, null_map->get_data(),
+                                    is_invalid_json_path);
             } else {
                 Impl::vector_vector(context, ldata, loffsets, rdata, roffsets, res_data,
-                                    res_offsets, null_map->get_data());
+                                    res_offsets, null_map->get_data(), is_invalid_json_path);
             }
         } else {
             if (col_const[0]) {
                 Impl::scalar_vector(context, jsonb_data_column->get_data_at(0), rdata, roffsets,
-                                    res->get_data(), null_map->get_data());
+                                    res->get_data(), null_map->get_data(), is_invalid_json_path);
             } else if (col_const[1]) {
                 Impl::vector_scalar(context, ldata, loffsets, jsonb_path_column->get_data_at(0),
-                                    res->get_data(), null_map->get_data());
+                                    res->get_data(), null_map->get_data(), is_invalid_json_path);
             } else {
                 Impl::vector_vector(context, ldata, loffsets, rdata, roffsets, res->get_data(),
-                                    null_map->get_data());
+                                    null_map->get_data(), is_invalid_json_path);
             }
         }
+
+        if (is_invalid_json_path) {
+            return Status::InvalidArgument(
+                    "Json path error: {} for value: {}",
+                    JsonbErrMsg::getErrMsg(JsonbErrType::E_INVALID_JSON_PATH),
+                    std::string_view(reinterpret_cast<const char*>(rdata.data()), rdata.size()));
+        }
+
         block.get_by_position(result).column =
                 ColumnNullable::create(std::move(res), std::move(null_map));
         return Status::OK();
@@ -420,7 +432,7 @@ private:
                                               const std::unique_ptr<JsonbWriter>& writer,
                                               std::unique_ptr<JsonbToJson>& formater,
                                               const char* l_raw, int l_size, const char* r_raw,
-                                              int r_size) {
+                                              int r_size, bool& is_invalid_json_path) {
         String path(r_raw, r_size);
 
         if (null_map[i]) {
@@ -436,8 +448,9 @@ private:
         }
 
         // value is NOT necessary to be deleted since JsonbValue will not allocate memory
-        JsonbValue* value = doc->getValue()->findPath(r_raw, r_size, nullptr);
-        if (UNLIKELY(!value)) {
+        JsonbValue* value = doc->getValue()->findPath(r_raw, r_size, is_invalid_json_path, nullptr);
+
+        if (UNLIKELY(!value) || is_invalid_json_path) {
             StringOP::push_null_string(i, res_data, res_offsets, null_map);
             return;
         }
@@ -494,7 +507,8 @@ public:
                               const ColumnString::Offsets& loffsets,
                               const ColumnString::Chars& rdata,
                               const ColumnString::Offsets& roffsets, ColumnString::Chars& res_data,
-                              ColumnString::Offsets& res_offsets, NullMap& null_map) {
+                              ColumnString::Offsets& res_offsets, NullMap& null_map,
+                              bool& is_invalid_json_path) {
         size_t input_rows_count = loffsets.size();
         res_offsets.resize(input_rows_count);
 
@@ -513,13 +527,13 @@ public:
             const char* r_raw = reinterpret_cast<const char*>(&rdata[roffsets[i - 1]]);
 
             inner_loop_impl(i, res_data, res_offsets, null_map, writer, formater, l_raw, l_size,
-                            r_raw, r_size);
+                            r_raw, r_size, is_invalid_json_path);
         } //for
     }     //function
     static void vector_scalar(FunctionContext* context, const ColumnString::Chars& ldata,
                               const ColumnString::Offsets& loffsets, const StringRef& rdata,
                               ColumnString::Chars& res_data, ColumnString::Offsets& res_offsets,
-                              NullMap& null_map) {
+                              NullMap& null_map, bool& is_invalid_json_path) {
         size_t input_rows_count = loffsets.size();
         res_offsets.resize(input_rows_count);
 
@@ -535,13 +549,14 @@ public:
             const char* l_raw = reinterpret_cast<const char*>(&ldata[loffsets[i - 1]]);
 
             inner_loop_impl(i, res_data, res_offsets, null_map, writer, formater, l_raw, l_size,
-                            rdata.data, rdata.size);
+                            rdata.data, rdata.size, is_invalid_json_path);
         } //for
     }     //function
     static void scalar_vector(FunctionContext* context, const StringRef& ldata,
                               const ColumnString::Chars& rdata,
                               const ColumnString::Offsets& roffsets, ColumnString::Chars& res_data,
-                              ColumnString::Offsets& res_offsets, NullMap& null_map) {
+                              ColumnString::Offsets& res_offsets, NullMap& null_map,
+                              bool& is_invalid_json_path) {
         size_t input_rows_count = roffsets.size();
         res_offsets.resize(input_rows_count);
 
@@ -557,7 +572,7 @@ public:
             const char* r_raw = reinterpret_cast<const char*>(&rdata[roffsets[i - 1]]);
 
             inner_loop_impl(i, res_data, res_offsets, null_map, writer, formater, ldata.data,
-                            ldata.size, r_raw, r_size);
+                            ldata.size, r_raw, r_size, is_invalid_json_path);
         } //for
     }     //function
 };
@@ -572,7 +587,8 @@ struct JsonbExtractImpl {
 private:
     static ALWAYS_INLINE void inner_loop_impl(size_t i, Container& res, NullMap& null_map,
                                               const char* l_raw_str, int l_str_size,
-                                              const char* r_raw_str, int r_str_size) {
+                                              const char* r_raw_str, int r_str_size,
+                                              bool& is_invalid_json_path) {
         if (null_map[i]) {
             res[i] = 0;
             return;
@@ -587,9 +603,10 @@ private:
         }
 
         // value is NOT necessary to be deleted since JsonbValue will not allocate memory
-        JsonbValue* value = doc->getValue()->findPath(r_raw_str, r_str_size, nullptr);
+        JsonbValue* value =
+                doc->getValue()->findPath(r_raw_str, r_str_size, is_invalid_json_path, nullptr);
 
-        if (UNLIKELY(!value)) {
+        if (UNLIKELY(!value) || is_invalid_json_path) {
             if constexpr (!only_check_exists) {
                 null_map[i] = 1;
             }
@@ -653,7 +670,7 @@ public:
                               const ColumnString::Offsets& loffsets,
                               const ColumnString::Chars& rdata,
                               const ColumnString::Offsets& roffsets, Container& res,
-                              NullMap& null_map) {
+                              NullMap& null_map, bool& is_invalid_json_path) {
         size_t size = loffsets.size();
         res.resize(size);
 
@@ -668,13 +685,14 @@ public:
             const char* r_raw_str = reinterpret_cast<const char*>(&rdata[roffsets[i - 1]]);
             int r_str_size = roffsets[i] - roffsets[i - 1];
 
-            inner_loop_impl(i, res, null_map, l_raw_str, l_str_size, r_raw_str, r_str_size);
+            inner_loop_impl(i, res, null_map, l_raw_str, l_str_size, r_raw_str, r_str_size,
+                            is_invalid_json_path);
         } //for
     }     //function
     static void scalar_vector(FunctionContext* context, const StringRef& ldata,
                               const ColumnString::Chars& rdata,
                               const ColumnString::Offsets& roffsets, Container& res,
-                              NullMap& null_map) {
+                              NullMap& null_map, bool& is_invalid_json_path) {
         size_t size = roffsets.size();
         res.resize(size);
 
@@ -686,12 +704,13 @@ public:
             const char* r_raw_str = reinterpret_cast<const char*>(&rdata[roffsets[i - 1]]);
             int r_str_size = roffsets[i] - roffsets[i - 1];
 
-            inner_loop_impl(i, res, null_map, ldata.data, ldata.size, r_raw_str, r_str_size);
+            inner_loop_impl(i, res, null_map, ldata.data, ldata.size, r_raw_str, r_str_size,
+                            is_invalid_json_path);
         } //for
     }     //function
     static void vector_scalar(FunctionContext* context, const ColumnString::Chars& ldata,
                               const ColumnString::Offsets& loffsets, const StringRef& rdata,
-                              Container& res, NullMap& null_map) {
+                              Container& res, NullMap& null_map, bool& is_invalid_json_path) {
         size_t size = loffsets.size();
         res.resize(size);
 
@@ -703,7 +722,8 @@ public:
             const char* l_raw_str = reinterpret_cast<const char*>(&ldata[loffsets[i - 1]]);
             int l_str_size = loffsets[i] - loffsets[i - 1];
 
-            inner_loop_impl(i, res, null_map, l_raw_str, l_str_size, rdata.data, rdata.size);
+            inner_loop_impl(i, res, null_map, l_raw_str, l_str_size, rdata.data, rdata.size,
+                            is_invalid_json_path);
         } //for
     }     //function
 };
diff --git a/be/test/vec/function/function_jsonb_test.cpp b/be/test/vec/function/function_jsonb_test.cpp
index fe2052e9f1..3efc33a9f9 100644
--- a/be/test/vec/function/function_jsonb_test.cpp
+++ b/be/test/vec/function/function_jsonb_test.cpp
@@ -559,15 +559,16 @@ TEST(FunctionJsonbTEST, JsonbExtractTest) {
             {{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("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()},
@@ -620,17 +621,18 @@ TEST(FunctionJsonbTEST, JsonbExtractTest) {
             {{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("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")},
@@ -702,15 +704,16 @@ TEST(FunctionJsonbTEST, JsonbExtractStringTest) {
             {{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("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()},
@@ -763,17 +766,17 @@ TEST(FunctionJsonbTEST, JsonbExtractStringTest) {
             {{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("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")},
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 51d4485d6a..21c25c4ff9 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
@@ -191,17 +191,17 @@
 8	1152921504606846976	\N
 9	6.18	\N
 10	"abcd"	\N
-11	{}	\N
-12	{"k1":"v31","k2":300}	\N
+11	{}	{}
+12	{"k1":"v31","k2":300}	{"k1":"v31","k2":300}
 13	[]	\N
 14	[123,456]	123
 15	["abc","def"]	"abc"
 16	[null,true,false,100,6.18,"abc"]	null
 17	[{"k1":"v41","k2":400},1,"a",3.14]	{"k1":"v41","k2":400}
-18	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}	\N
+18	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}
 26	\N	\N
-27	{"k1":"v1","k2":200}	\N
-28	{"a.b.c":{"k1.a1":"v31","k2":300},"a":"niu"}	\N
+27	{"k1":"v1","k2":200}	{"k1":"v1","k2":200}
+28	{"a.b.c":{"k1.a1":"v31","k2":300},"a":"niu"}	{"a.b.c":{"k1.a1":"v31","k2":300},"a":"niu"}
 
 -- !select --
 1	\N	\N
@@ -697,17 +697,17 @@
 8	1152921504606846976	\N
 9	6.18	\N
 10	"abcd"	\N
-11	{}	\N
-12	{"k1":"v31","k2":300}	\N
+11	{}	{}
+12	{"k1":"v31","k2":300}	{"k1":"v31","k2":300}
 13	[]	\N
 14	[123,456]	123
 15	["abc","def"]	abc
 16	[null,true,false,100,6.18,"abc"]	null
 17	[{"k1":"v41","k2":400},1,"a",3.14]	{"k1":"v41","k2":400}
-18	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}	\N
+18	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}
 26	\N	\N
-27	{"k1":"v1","k2":200}	\N
-28	{"a.b.c":{"k1.a1":"v31","k2":300},"a":"niu"}	\N
+27	{"k1":"v1","k2":200}	{"k1":"v1","k2":200}
+28	{"a.b.c":{"k1.a1":"v31","k2":300},"a":"niu"}	{"a.b.c":{"k1.a1":"v31","k2":300},"a":"niu"}
 
 -- !select --
 1	\N	\N
@@ -2767,17 +2767,17 @@
 8	1152921504606846976	\N
 9	6.18	\N
 10	"abcd"	\N
-11	{}	\N
-12	{"k1":"v31","k2":300}	\N
+11	{}	false
+12	{"k1":"v31","k2":300}	false
 13	[]	\N
 14	[123,456]	false
 15	["abc","def"]	false
 16	[null,true,false,100,6.18,"abc"]	true
 17	[{"k1":"v41","k2":400},1,"a",3.14]	false
-18	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}	\N
+18	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}	false
 26	\N	\N
-27	{"k1":"v1","k2":200}	\N
-28	{"a.b.c":{"k1.a1":"v31","k2":300},"a":"niu"}	\N
+27	{"k1":"v1","k2":200}	false
+28	{"a.b.c":{"k1.a1":"v31","k2":300},"a":"niu"}	false
 
 -- !select --
 1	\N	\N
@@ -3181,17 +3181,17 @@
 8	1152921504606846976	false
 9	6.18	false
 10	"abcd"	false
-11	{}	false
-12	{"k1":"v31","k2":300}	false
+11	{}	true
+12	{"k1":"v31","k2":300}	true
 13	[]	false
 14	[123,456]	true
 15	["abc","def"]	true
 16	[null,true,false,100,6.18,"abc"]	true
 17	[{"k1":"v41","k2":400},1,"a",3.14]	true
-18	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}	false
+18	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}	true
 26	\N	\N
-27	{"k1":"v1","k2":200}	false
-28	{"a.b.c":{"k1.a1":"v31","k2":300},"a":"niu"}	false
+27	{"k1":"v1","k2":200}	true
+28	{"a.b.c":{"k1.a1":"v31","k2":300},"a":"niu"}	true
 
 -- !select --
 1	\N	\N
@@ -3595,17 +3595,17 @@
 8	1152921504606846976	\N
 9	6.18	\N
 10	"abcd"	\N
-11	{}	\N
-12	{"k1":"v31","k2":300}	\N
+11	{}	object
+12	{"k1":"v31","k2":300}	object
 13	[]	\N
 14	[123,456]	int
 15	["abc","def"]	string
 16	[null,true,false,100,6.18,"abc"]	null
 17	[{"k1":"v41","k2":400},1,"a",3.14]	object
-18	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}	\N
+18	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}	object
 26	\N	\N
-27	{"k1":"v1","k2":200}	\N
-28	{"a.b.c":{"k1.a1":"v31","k2":300},"a":"niu"}	\N
+27	{"k1":"v1","k2":200}	object
+28	{"a.b.c":{"k1.a1":"v31","k2":300},"a":"niu"}	object
 
 -- !select --
 1	\N	\N
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 01bc0b3de7..f63959c2e0 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
@@ -191,17 +191,17 @@
 8	1152921504606846976	\N
 9	6.18	\N
 10	"abcd"	\N
-11	{}	\N
-12	{"k1":"v31","k2":300}	\N
+11	{}	{}
+12	{"k1":"v31","k2":300}	{"k1":"v31","k2":300}
 13	[]	\N
 14	[123,456]	123
 15	["abc","def"]	"abc"
 16	[null,true,false,100,6.18,"abc"]	null
 17	[{"k1":"v41","k2":400},1,"a",3.14]	{"k1":"v41","k2":400}
-18	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}	\N
+18	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}
 26	\N	\N
-27	{"k1":"v1","k2":200}	\N
-28	{"a.b.c":{"k1.a1":"v31","k2":300},"a":"niu"}	\N
+27	{"k1":"v1","k2":200}	{"k1":"v1","k2":200}
+28	{"a.b.c":{"k1.a1":"v31","k2":300},"a":"niu"}	{"a.b.c":{"k1.a1":"v31","k2":300},"a":"niu"}
 
 -- !select --
 1	\N	\N
@@ -697,17 +697,17 @@
 8	1152921504606846976	\N
 9	6.18	\N
 10	"abcd"	\N
-11	{}	\N
-12	{"k1":"v31","k2":300}	\N
+11	{}	{}
+12	{"k1":"v31","k2":300}	{"k1":"v31","k2":300}
 13	[]	\N
 14	[123,456]	123
 15	["abc","def"]	abc
 16	[null,true,false,100,6.18,"abc"]	null
 17	[{"k1":"v41","k2":400},1,"a",3.14]	{"k1":"v41","k2":400}
-18	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}	\N
+18	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}
 26	\N	\N
-27	{"k1":"v1","k2":200}	\N
-28	{"a.b.c":{"k1.a1":"v31","k2":300},"a":"niu"}	\N
+27	{"k1":"v1","k2":200}	{"k1":"v1","k2":200}
+28	{"a.b.c":{"k1.a1":"v31","k2":300},"a":"niu"}	{"a.b.c":{"k1.a1":"v31","k2":300},"a":"niu"}
 
 -- !select --
 1	\N	\N
@@ -2767,17 +2767,17 @@
 8	1152921504606846976	\N
 9	6.18	\N
 10	"abcd"	\N
-11	{}	\N
-12	{"k1":"v31","k2":300}	\N
+11	{}	false
+12	{"k1":"v31","k2":300}	false
 13	[]	\N
 14	[123,456]	false
 15	["abc","def"]	false
 16	[null,true,false,100,6.18,"abc"]	true
 17	[{"k1":"v41","k2":400},1,"a",3.14]	false
-18	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}	\N
+18	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}	false
 26	\N	\N
-27	{"k1":"v1","k2":200}	\N
-28	{"a.b.c":{"k1.a1":"v31","k2":300},"a":"niu"}	\N
+27	{"k1":"v1","k2":200}	false
+28	{"a.b.c":{"k1.a1":"v31","k2":300},"a":"niu"}	false
 
 -- !select --
 1	\N	\N
@@ -3181,17 +3181,17 @@
 8	1152921504606846976	false
 9	6.18	false
 10	"abcd"	false
-11	{}	false
-12	{"k1":"v31","k2":300}	false
+11	{}	true
+12	{"k1":"v31","k2":300}	true
 13	[]	false
 14	[123,456]	true
 15	["abc","def"]	true
 16	[null,true,false,100,6.18,"abc"]	true
 17	[{"k1":"v41","k2":400},1,"a",3.14]	true
-18	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}	false
+18	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}	true
 26	\N	\N
-27	{"k1":"v1","k2":200}	false
-28	{"a.b.c":{"k1.a1":"v31","k2":300},"a":"niu"}	false
+27	{"k1":"v1","k2":200}	true
+28	{"a.b.c":{"k1.a1":"v31","k2":300},"a":"niu"}	true
 
 -- !select --
 1	\N	\N
@@ -3595,17 +3595,17 @@
 8	1152921504606846976	\N
 9	6.18	\N
 10	"abcd"	\N
-11	{}	\N
-12	{"k1":"v31","k2":300}	\N
+11	{}	object
+12	{"k1":"v31","k2":300}	object
 13	[]	\N
 14	[123,456]	int
 15	["abc","def"]	string
 16	[null,true,false,100,6.18,"abc"]	null
 17	[{"k1":"v41","k2":400},1,"a",3.14]	object
-18	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}	\N
+18	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}	object
 26	\N	\N
-27	{"k1":"v1","k2":200}	\N
-28	{"a.b.c":{"k1.a1":"v31","k2":300},"a":"niu"}	\N
+27	{"k1":"v1","k2":200}	object
+28	{"a.b.c":{"k1.a1":"v31","k2":300},"a":"niu"}	object
 
 -- !select --
 1	\N	\N
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 cd10f5cb1d..00944828bd 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
@@ -42,7 +42,7 @@
 27	{"k1":"v1","k2":200}
 28	{"a.b.c":{"k1.a1":"v31","k2":300},"a":"niu"}
 
--- !select --
+-- !jsonb_extract_select --
 1	\N	\N
 2	null	null
 3	true	true
@@ -191,17 +191,17 @@
 8	1152921504606846976	\N
 9	6.18	\N
 10	"abcd"	\N
-11	{}	\N
-12	{"k1":"v31","k2":300}	\N
+11	{}	{}
+12	{"k1":"v31","k2":300}	{"k1":"v31","k2":300}
 13	[]	\N
 14	[123,456]	123
 15	["abc","def"]	"abc"
 16	[null,true,false,100,6.18,"abc"]	null
 17	[{"k1":"v41","k2":400},1,"a",3.14]	{"k1":"v41","k2":400}
-18	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}	\N
+18	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}
 26	\N	\N
-27	{"k1":"v1","k2":200}	\N
-28	{"a.b.c":{"k1.a1":"v31","k2":300},"a":"niu"}	\N
+27	{"k1":"v1","k2":200}	{"k1":"v1","k2":200}
+28	{"a.b.c":{"k1.a1":"v31","k2":300},"a":"niu"}	{"a.b.c":{"k1.a1":"v31","k2":300},"a":"niu"}
 
 -- !select --
 1	\N	\N
@@ -548,6 +548,29 @@
 27	{"k1":"v1","k2":200}	\N
 28	{"a.b.c":{"k1.a1":"v31","k2":300},"a":"niu"}	\N
 
+-- !select --
+1	\N	\N
+2	null	\N
+3	true	\N
+4	false	\N
+5	100	\N
+6	10000	\N
+7	1000000000	\N
+8	1152921504606846976	\N
+9	6.18	\N
+10	"abcd"	\N
+11	{}	\N
+12	{"k1":"v31","k2":300}	\N
+13	[]	\N
+14	[123,456]	\N
+15	["abc","def"]	\N
+16	[null,true,false,100,6.18,"abc"]	\N
+17	[{"k1":"v41","k2":400},1,"a",3.14]	\N
+18	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}	3.14
+26	\N	\N
+27	{"k1":"v1","k2":200}	\N
+28	{"a.b.c":{"k1.a1":"v31","k2":300},"a":"niu"}	\N
+
 -- !select --
 1	\N	\N
 2	null	\N
@@ -619,6 +642,75 @@
 
 -- !select --
 1	\N	\N
+2	null	\N
+3	true	\N
+4	false	\N
+5	100	\N
+6	10000	\N
+7	1000000000	\N
+8	1152921504606846976	\N
+9	6.18	\N
+10	"abcd"	\N
+11	{}	\N
+12	{"k1":"v31","k2":300}	\N
+13	[]	\N
+14	[123,456]	\N
+15	["abc","def"]	\N
+16	[null,true,false,100,6.18,"abc"]	\N
+17	[{"k1":"v41","k2":400},1,"a",3.14]	\N
+18	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}	{"k1":"v41","k2":400}
+26	\N	\N
+27	{"k1":"v1","k2":200}	\N
+28	{"a.b.c":{"k1.a1":"v31","k2":300},"a":"niu"}	\N
+
+-- !select --
+1	\N	\N
+2	null	\N
+3	true	\N
+4	false	\N
+5	100	\N
+6	10000	\N
+7	1000000000	\N
+8	1152921504606846976	\N
+9	6.18	\N
+10	"abcd"	\N
+11	{}	\N
+12	{"k1":"v31","k2":300}	\N
+13	[]	\N
+14	[123,456]	\N
+15	["abc","def"]	\N
+16	[null,true,false,100,6.18,"abc"]	\N
+17	[{"k1":"v41","k2":400},1,"a",3.14]	\N
+18	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}	3.14
+26	\N	\N
+27	{"k1":"v1","k2":200}	\N
+28	{"a.b.c":{"k1.a1":"v31","k2":300},"a":"niu"}	\N
+
+-- !select --
+1	\N	\N
+2	null	\N
+3	true	\N
+4	false	\N
+5	100	\N
+6	10000	\N
+7	1000000000	\N
+8	1152921504606846976	\N
+9	6.18	\N
+10	"abcd"	\N
+11	{}	\N
+12	{"k1":"v31","k2":300}	\N
+13	[]	\N
+14	[123,456]	\N
+15	["abc","def"]	\N
+16	[null,true,false,100,6.18,"abc"]	\N
+17	[{"k1":"v41","k2":400},1,"a",3.14]	\N
+18	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}	\N
+26	\N	\N
+27	{"k1":"v1","k2":200}	\N
+28	{"a.b.c":{"k1.a1":"v31","k2":300},"a":"niu"}	\N
+
+-- !jsonb_extract_string_select --
+1	\N	\N
 2	null	null
 3	true	true
 4	false	false
@@ -697,17 +789,17 @@
 8	1152921504606846976	\N
 9	6.18	\N
 10	"abcd"	\N
-11	{}	\N
-12	{"k1":"v31","k2":300}	\N
+11	{}	{}
+12	{"k1":"v31","k2":300}	{"k1":"v31","k2":300}
 13	[]	\N
 14	[123,456]	123
 15	["abc","def"]	abc
 16	[null,true,false,100,6.18,"abc"]	null
 17	[{"k1":"v41","k2":400},1,"a",3.14]	{"k1":"v41","k2":400}
-18	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}	\N
+18	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}
 26	\N	\N
-27	{"k1":"v1","k2":200}	\N
-28	{"a.b.c":{"k1.a1":"v31","k2":300},"a":"niu"}	\N
+27	{"k1":"v1","k2":200}	{"k1":"v1","k2":200}
+28	{"a.b.c":{"k1.a1":"v31","k2":300},"a":"niu"}	{"a.b.c":{"k1.a1":"v31","k2":300},"a":"niu"}
 
 -- !select --
 1	\N	\N
@@ -1036,9 +1128,9 @@
 2	null	\N
 3	true	\N
 4	false	\N
-5	100	100
-6	10000	10000
-7	1000000000	1000000000
+5	100	\N
+6	10000	\N
+7	1000000000	\N
 8	1152921504606846976	\N
 9	6.18	\N
 10	"abcd"	\N
@@ -1049,7 +1141,7 @@
 15	["abc","def"]	\N
 16	[null,true,false,100,6.18,"abc"]	\N
 17	[{"k1":"v41","k2":400},1,"a",3.14]	\N
-18	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}	\N
+18	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}	3.14
 26	\N	\N
 27	{"k1":"v1","k2":200}	\N
 28	{"a.b.c":{"k1.a1":"v31","k2":300},"a":"niu"}	\N
@@ -1072,7 +1164,7 @@
 15	["abc","def"]	\N
 16	[null,true,false,100,6.18,"abc"]	\N
 17	[{"k1":"v41","k2":400},1,"a",3.14]	\N
-18	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}	\N
+18	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}	3.14
 26	\N	\N
 27	{"k1":"v1","k2":200}	\N
 28	{"a.b.c":{"k1.a1":"v31","k2":300},"a":"niu"}	\N
@@ -1089,15 +1181,15 @@
 9	6.18	\N
 10	"abcd"	\N
 11	{}	\N
-12	{"k1":"v31","k2":300}	300
+12	{"k1":"v31","k2":300}	\N
 13	[]	\N
 14	[123,456]	\N
 15	["abc","def"]	\N
 16	[null,true,false,100,6.18,"abc"]	\N
 17	[{"k1":"v41","k2":400},1,"a",3.14]	\N
-18	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}	300
+18	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}	a
 26	\N	\N
-27	{"k1":"v1","k2":200}	200
+27	{"k1":"v1","k2":200}	\N
 28	{"a.b.c":{"k1.a1":"v31","k2":300},"a":"niu"}	\N
 
 -- !select --
@@ -1114,11 +1206,11 @@
 11	{}	\N
 12	{"k1":"v31","k2":300}	\N
 13	[]	\N
-14	[123,456]	123
+14	[123,456]	\N
 15	["abc","def"]	\N
 16	[null,true,false,100,6.18,"abc"]	\N
 17	[{"k1":"v41","k2":400},1,"a",3.14]	\N
-18	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}	\N
+18	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}	1
 26	\N	\N
 27	{"k1":"v1","k2":200}	\N
 28	{"a.b.c":{"k1.a1":"v31","k2":300},"a":"niu"}	\N
@@ -1137,10 +1229,10 @@
 11	{}	\N
 12	{"k1":"v31","k2":300}	\N
 13	[]	\N
-14	[123,456]	456
+14	[123,456]	\N
 15	["abc","def"]	\N
 16	[null,true,false,100,6.18,"abc"]	\N
-17	[{"k1":"v41","k2":400},1,"a",3.14]	1
+17	[{"k1":"v41","k2":400},1,"a",3.14]	\N
 18	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}	\N
 26	\N	\N
 27	{"k1":"v1","k2":200}	\N
@@ -1164,7 +1256,7 @@
 15	["abc","def"]	\N
 16	[null,true,false,100,6.18,"abc"]	\N
 17	[{"k1":"v41","k2":400},1,"a",3.14]	\N
-18	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}	\N
+18	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}	{"k1":"v41","k2":400}
 26	\N	\N
 27	{"k1":"v1","k2":200}	\N
 28	{"a.b.c":{"k1.a1":"v31","k2":300},"a":"niu"}	\N
@@ -1185,9 +1277,9 @@
 13	[]	\N
 14	[123,456]	\N
 15	["abc","def"]	\N
-16	[null,true,false,100,6.18,"abc"]	100
+16	[null,true,false,100,6.18,"abc"]	\N
 17	[{"k1":"v41","k2":400},1,"a",3.14]	\N
-18	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}	\N
+18	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}	3.14
 26	\N	\N
 27	{"k1":"v1","k2":200}	\N
 28	{"a.b.c":{"k1.a1":"v31","k2":300},"a":"niu"}	\N
@@ -1215,14 +1307,14 @@
 27	{"k1":"v1","k2":200}	\N
 28	{"a.b.c":{"k1.a1":"v31","k2":300},"a":"niu"}	\N
 
--- !select --
+-- !jsonb_extract_int_select --
 1	\N	\N
 2	null	\N
 3	true	\N
 4	false	\N
-5	100	\N
-6	10000	\N
-7	1000000000	\N
+5	100	100
+6	10000	10000
+7	1000000000	1000000000
 8	1152921504606846976	\N
 9	6.18	\N
 10	"abcd"	\N
@@ -1273,15 +1365,15 @@
 9	6.18	\N
 10	"abcd"	\N
 11	{}	\N
-12	{"k1":"v31","k2":300}	\N
+12	{"k1":"v31","k2":300}	300
 13	[]	\N
 14	[123,456]	\N
 15	["abc","def"]	\N
 16	[null,true,false,100,6.18,"abc"]	\N
 17	[{"k1":"v41","k2":400},1,"a",3.14]	\N
-18	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}	\N
+18	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}	300
 26	\N	\N
-27	{"k1":"v1","k2":200}	\N
+27	{"k1":"v1","k2":200}	200
 28	{"a.b.c":{"k1.a1":"v31","k2":300},"a":"niu"}	\N
 
 -- !select --
@@ -1298,7 +1390,7 @@
 11	{}	\N
 12	{"k1":"v31","k2":300}	\N
 13	[]	\N
-14	[123,456]	\N
+14	[123,456]	123
 15	["abc","def"]	\N
 16	[null,true,false,100,6.18,"abc"]	\N
 17	[{"k1":"v41","k2":400},1,"a",3.14]	\N
@@ -1321,10 +1413,10 @@
 11	{}	\N
 12	{"k1":"v31","k2":300}	\N
 13	[]	\N
-14	[123,456]	\N
+14	[123,456]	456
 15	["abc","def"]	\N
 16	[null,true,false,100,6.18,"abc"]	\N
-17	[{"k1":"v41","k2":400},1,"a",3.14]	\N
+17	[{"k1":"v41","k2":400},1,"a",3.14]	1
 18	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}	\N
 26	\N	\N
 27	{"k1":"v1","k2":200}	\N
@@ -1348,7 +1440,7 @@
 15	["abc","def"]	\N
 16	[null,true,false,100,6.18,"abc"]	\N
 17	[{"k1":"v41","k2":400},1,"a",3.14]	\N
-18	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}	1
+18	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}	\N
 26	\N	\N
 27	{"k1":"v1","k2":200}	\N
 28	{"a.b.c":{"k1.a1":"v31","k2":300},"a":"niu"}	\N
@@ -1369,7 +1461,7 @@
 13	[]	\N
 14	[123,456]	\N
 15	["abc","def"]	\N
-16	[null,true,false,100,6.18,"abc"]	\N
+16	[null,true,false,100,6.18,"abc"]	100
 17	[{"k1":"v41","k2":400},1,"a",3.14]	\N
 18	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}	\N
 26	\N	\N
@@ -1450,10 +1542,10 @@
 2	null	\N
 3	true	\N
 4	false	\N
-5	100	100
-6	10000	10000
-7	1000000000	1000000000
-8	1152921504606846976	1152921504606846976
+5	100	\N
+6	10000	\N
+7	1000000000	\N
+8	1152921504606846976	\N
 9	6.18	\N
 10	"abcd"	\N
 11	{}	\N
@@ -1503,15 +1595,15 @@
 9	6.18	\N
 10	"abcd"	\N
 11	{}	\N
-12	{"k1":"v31","k2":300}	300
+12	{"k1":"v31","k2":300}	\N
 13	[]	\N
 14	[123,456]	\N
 15	["abc","def"]	\N
 16	[null,true,false,100,6.18,"abc"]	\N
 17	[{"k1":"v41","k2":400},1,"a",3.14]	\N
-18	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}	300
+18	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}	\N
 26	\N	\N
-27	{"k1":"v1","k2":200}	200
+27	{"k1":"v1","k2":200}	\N
 28	{"a.b.c":{"k1.a1":"v31","k2":300},"a":"niu"}	\N
 
 -- !select --
@@ -1528,11 +1620,11 @@
 11	{}	\N
 12	{"k1":"v31","k2":300}	\N
 13	[]	\N
-14	[123,456]	123
+14	[123,456]	\N
 15	["abc","def"]	\N
 16	[null,true,false,100,6.18,"abc"]	\N
 17	[{"k1":"v41","k2":400},1,"a",3.14]	\N
-18	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}	\N
+18	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}	1
 26	\N	\N
 27	{"k1":"v1","k2":200}	\N
 28	{"a.b.c":{"k1.a1":"v31","k2":300},"a":"niu"}	\N
@@ -1551,10 +1643,10 @@
 11	{}	\N
 12	{"k1":"v31","k2":300}	\N
 13	[]	\N
-14	[123,456]	456
+14	[123,456]	\N
 15	["abc","def"]	\N
 16	[null,true,false,100,6.18,"abc"]	\N
-17	[{"k1":"v41","k2":400},1,"a",3.14]	1
+17	[{"k1":"v41","k2":400},1,"a",3.14]	\N
 18	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}	\N
 26	\N	\N
 27	{"k1":"v1","k2":200}	\N
@@ -1599,7 +1691,7 @@
 13	[]	\N
 14	[123,456]	\N
 15	["abc","def"]	\N
-16	[null,true,false,100,6.18,"abc"]	100
+16	[null,true,false,100,6.18,"abc"]	\N
 17	[{"k1":"v41","k2":400},1,"a",3.14]	\N
 18	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}	\N
 26	\N	\N
@@ -1716,7 +1808,7 @@
 15	["abc","def"]	\N
 16	[null,true,false,100,6.18,"abc"]	\N
 17	[{"k1":"v41","k2":400},1,"a",3.14]	\N
-18	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}	\N
+18	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}	1
 26	\N	\N
 27	{"k1":"v1","k2":200}	\N
 28	{"a.b.c":{"k1.a1":"v31","k2":300},"a":"niu"}	\N
@@ -1762,7 +1854,7 @@
 15	["abc","def"]	\N
 16	[null,true,false,100,6.18,"abc"]	\N
 17	[{"k1":"v41","k2":400},1,"a",3.14]	\N
-18	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}	1
+18	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}	\N
 26	\N	\N
 27	{"k1":"v1","k2":200}	\N
 28	{"a.b.c":{"k1.a1":"v31","k2":300},"a":"niu"}	\N
@@ -1813,15 +1905,15 @@
 27	{"k1":"v1","k2":200}	\N
 28	{"a.b.c":{"k1.a1":"v31","k2":300},"a":"niu"}	\N
 
--- !select --
+-- !jsonb_extract_bigint_select --
 1	\N	\N
 2	null	\N
 3	true	\N
 4	false	\N
-5	100	\N
-6	10000	\N
-7	1000000000	\N
-8	1152921504606846976	\N
+5	100	100
+6	10000	10000
+7	1000000000	1000000000
+8	1152921504606846976	1152921504606846976
 9	6.18	\N
 10	"abcd"	\N
 11	{}	\N
@@ -1864,22 +1956,22 @@
 2	null	\N
 3	true	\N
 4	false	\N
-5	100	100.0
-6	10000	10000.0
-7	1000000000	1.0E9
-8	1152921504606846976	1.15292150460684698E18
-9	6.18	6.18
+5	100	\N
+6	10000	\N
+7	1000000000	\N
+8	1152921504606846976	\N
+9	6.18	\N
 10	"abcd"	\N
 11	{}	\N
-12	{"k1":"v31","k2":300}	\N
+12	{"k1":"v31","k2":300}	300
 13	[]	\N
 14	[123,456]	\N
 15	["abc","def"]	\N
 16	[null,true,false,100,6.18,"abc"]	\N
 17	[{"k1":"v41","k2":400},1,"a",3.14]	\N
-18	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}	\N
+18	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}	300
 26	\N	\N
-27	{"k1":"v1","k2":200}	\N
+27	{"k1":"v1","k2":200}	200
 28	{"a.b.c":{"k1.a1":"v31","k2":300},"a":"niu"}	\N
 
 -- !select --
@@ -1896,7 +1988,7 @@
 11	{}	\N
 12	{"k1":"v31","k2":300}	\N
 13	[]	\N
-14	[123,456]	\N
+14	[123,456]	123
 15	["abc","def"]	\N
 16	[null,true,false,100,6.18,"abc"]	\N
 17	[{"k1":"v41","k2":400},1,"a",3.14]	\N
@@ -1917,15 +2009,15 @@
 9	6.18	\N
 10	"abcd"	\N
 11	{}	\N
-12	{"k1":"v31","k2":300}	300.0
+12	{"k1":"v31","k2":300}	\N
 13	[]	\N
-14	[123,456]	\N
+14	[123,456]	456
 15	["abc","def"]	\N
 16	[null,true,false,100,6.18,"abc"]	\N
-17	[{"k1":"v41","k2":400},1,"a",3.14]	\N
-18	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}	300.0
+17	[{"k1":"v41","k2":400},1,"a",3.14]	1
+18	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}	\N
 26	\N	\N
-27	{"k1":"v1","k2":200}	200.0
+27	{"k1":"v1","k2":200}	\N
 28	{"a.b.c":{"k1.a1":"v31","k2":300},"a":"niu"}	\N
 
 -- !select --
@@ -1942,7 +2034,7 @@
 11	{}	\N
 12	{"k1":"v31","k2":300}	\N
 13	[]	\N
-14	[123,456]	123.0
+14	[123,456]	\N
 15	["abc","def"]	\N
 16	[null,true,false,100,6.18,"abc"]	\N
 17	[{"k1":"v41","k2":400},1,"a",3.14]	\N
@@ -1965,10 +2057,10 @@
 11	{}	\N
 12	{"k1":"v31","k2":300}	\N
 13	[]	\N
-14	[123,456]	456.0
+14	[123,456]	\N
 15	["abc","def"]	\N
-16	[null,true,false,100,6.18,"abc"]	\N
-17	[{"k1":"v41","k2":400},1,"a",3.14]	1.0
+16	[null,true,false,100,6.18,"abc"]	100
+17	[{"k1":"v41","k2":400},1,"a",3.14]	\N
 18	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}	\N
 26	\N	\N
 27	{"k1":"v1","k2":200}	\N
@@ -2013,8 +2105,8 @@
 13	[]	\N
 14	[123,456]	\N
 15	["abc","def"]	\N
-16	[null,true,false,100,6.18,"abc"]	100.0
-17	[{"k1":"v41","k2":400},1,"a",3.14]	3.14
+16	[null,true,false,100,6.18,"abc"]	\N
+17	[{"k1":"v41","k2":400},1,"a",3.14]	\N
 18	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}	\N
 26	\N	\N
 27	{"k1":"v1","k2":200}	\N
@@ -2036,7 +2128,7 @@
 13	[]	\N
 14	[123,456]	\N
 15	["abc","def"]	\N
-16	[null,true,false,100,6.18,"abc"]	6.18
+16	[null,true,false,100,6.18,"abc"]	\N
 17	[{"k1":"v41","k2":400},1,"a",3.14]	\N
 18	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}	\N
 26	\N	\N
@@ -2130,7 +2222,7 @@
 15	["abc","def"]	\N
 16	[null,true,false,100,6.18,"abc"]	\N
 17	[{"k1":"v41","k2":400},1,"a",3.14]	\N
-18	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}	\N
+18	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}	1
 26	\N	\N
 27	{"k1":"v1","k2":200}	\N
 28	{"a.b.c":{"k1.a1":"v31","k2":300},"a":"niu"}	\N
@@ -2176,7 +2268,7 @@
 15	["abc","def"]	\N
 16	[null,true,false,100,6.18,"abc"]	\N
 17	[{"k1":"v41","k2":400},1,"a",3.14]	\N
-18	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}	1.0
+18	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}	\N
 26	\N	\N
 27	{"k1":"v1","k2":200}	\N
 28	{"a.b.c":{"k1.a1":"v31","k2":300},"a":"niu"}	\N
@@ -2222,7 +2314,7 @@
 15	["abc","def"]	\N
 16	[null,true,false,100,6.18,"abc"]	\N
 17	[{"k1":"v41","k2":400},1,"a",3.14]	\N
-18	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}	3.14
+18	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}	\N
 26	\N	\N
 27	{"k1":"v1","k2":200}	\N
 28	{"a.b.c":{"k1.a1":"v31","k2":300},"a":"niu"}	\N
@@ -2276,8 +2368,8 @@
 -- !select --
 1	\N	\N
 2	null	\N
-3	true	true
-4	false	false
+3	true	\N
+4	false	\N
 5	100	\N
 6	10000	\N
 7	1000000000	\N
@@ -2314,7 +2406,7 @@
 15	["abc","def"]	\N
 16	[null,true,false,100,6.18,"abc"]	\N
 17	[{"k1":"v41","k2":400},1,"a",3.14]	\N
-18	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}	\N
+18	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}	1
 26	\N	\N
 27	{"k1":"v1","k2":200}	\N
 28	{"a.b.c":{"k1.a1":"v31","k2":300},"a":"niu"}	\N
@@ -2381,7 +2473,7 @@
 13	[]	\N
 14	[123,456]	\N
 15	["abc","def"]	\N
-16	[null,true,false,100,6.18,"abc"]	true
+16	[null,true,false,100,6.18,"abc"]	\N
 17	[{"k1":"v41","k2":400},1,"a",3.14]	\N
 18	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}	\N
 26	\N	\N
@@ -2404,7 +2496,30 @@
 13	[]	\N
 14	[123,456]	\N
 15	["abc","def"]	\N
-16	[null,true,false,100,6.18,"abc"]	false
+16	[null,true,false,100,6.18,"abc"]	\N
+17	[{"k1":"v41","k2":400},1,"a",3.14]	\N
+18	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}	\N
+26	\N	\N
+27	{"k1":"v1","k2":200}	\N
+28	{"a.b.c":{"k1.a1":"v31","k2":300},"a":"niu"}	\N
+
+-- !jsonb_extract_double_select --
+1	\N	\N
+2	null	\N
+3	true	\N
+4	false	\N
+5	100	100.0
+6	10000	10000.0
+7	1000000000	1.0E9
+8	1152921504606846976	1.15292150460684698E18
+9	6.18	6.18
+10	"abcd"	\N
+11	{}	\N
+12	{"k1":"v31","k2":300}	\N
+13	[]	\N
+14	[123,456]	\N
+15	["abc","def"]	\N
+16	[null,true,false,100,6.18,"abc"]	\N
 17	[{"k1":"v41","k2":400},1,"a",3.14]	\N
 18	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}	\N
 26	\N	\N
@@ -2446,12 +2561,58 @@
 9	6.18	\N
 10	"abcd"	\N
 11	{}	\N
-12	{"k1":"v31","k2":300}	\N
+12	{"k1":"v31","k2":300}	300.0
 13	[]	\N
 14	[123,456]	\N
 15	["abc","def"]	\N
 16	[null,true,false,100,6.18,"abc"]	\N
 17	[{"k1":"v41","k2":400},1,"a",3.14]	\N
+18	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}	300.0
+26	\N	\N
+27	{"k1":"v1","k2":200}	200.0
+28	{"a.b.c":{"k1.a1":"v31","k2":300},"a":"niu"}	\N
+
+-- !select --
+1	\N	\N
+2	null	\N
+3	true	\N
+4	false	\N
+5	100	\N
+6	10000	\N
+7	1000000000	\N
+8	1152921504606846976	\N
+9	6.18	\N
+10	"abcd"	\N
+11	{}	\N
+12	{"k1":"v31","k2":300}	\N
+13	[]	\N
+14	[123,456]	123.0
+15	["abc","def"]	\N
+16	[null,true,false,100,6.18,"abc"]	\N
+17	[{"k1":"v41","k2":400},1,"a",3.14]	\N
+18	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}	\N
+26	\N	\N
+27	{"k1":"v1","k2":200}	\N
+28	{"a.b.c":{"k1.a1":"v31","k2":300},"a":"niu"}	\N
+
+-- !select --
+1	\N	\N
+2	null	\N
+3	true	\N
+4	false	\N
+5	100	\N
+6	10000	\N
+7	1000000000	\N
+8	1152921504606846976	\N
+9	6.18	\N
+10	"abcd"	\N
+11	{}	\N
+12	{"k1":"v31","k2":300}	\N
+13	[]	\N
+14	[123,456]	456.0
+15	["abc","def"]	\N
+16	[null,true,false,100,6.18,"abc"]	\N
+17	[{"k1":"v41","k2":400},1,"a",3.14]	1.0
 18	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}	\N
 26	\N	\N
 27	{"k1":"v1","k2":200}	\N
@@ -2496,7 +2657,30 @@
 13	[]	\N
 14	[123,456]	\N
 15	["abc","def"]	\N
-16	[null,true,false,100,6.18,"abc"]	\N
+16	[null,true,false,100,6.18,"abc"]	100.0
+17	[{"k1":"v41","k2":400},1,"a",3.14]	3.14
+18	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}	\N
+26	\N	\N
+27	{"k1":"v1","k2":200}	\N
+28	{"a.b.c":{"k1.a1":"v31","k2":300},"a":"niu"}	\N
+
+-- !select --
+1	\N	\N
+2	null	\N
+3	true	\N
+4	false	\N
+5	100	\N
+6	10000	\N
+7	1000000000	\N
+8	1152921504606846976	\N
+9	6.18	\N
+10	"abcd"	\N
+11	{}	\N
+12	{"k1":"v31","k2":300}	\N
+13	[]	\N
+14	[123,456]	\N
+15	["abc","def"]	\N
+16	[null,true,false,100,6.18,"abc"]	6.18
 17	[{"k1":"v41","k2":400},1,"a",3.14]	\N
 18	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}	\N
 26	\N	\N
@@ -2636,7 +2820,7 @@
 15	["abc","def"]	\N
 16	[null,true,false,100,6.18,"abc"]	\N
 17	[{"k1":"v41","k2":400},1,"a",3.14]	\N
-18	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}	\N
+18	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}	1.0
 26	\N	\N
 27	{"k1":"v1","k2":200}	\N
 28	{"a.b.c":{"k1.a1":"v31","k2":300},"a":"niu"}	\N
@@ -2664,6 +2848,29 @@
 27	{"k1":"v1","k2":200}	\N
 28	{"a.b.c":{"k1.a1":"v31","k2":300},"a":"niu"}	\N
 
+-- !select --
+1	\N	\N
+2	null	\N
+3	true	\N
+4	false	\N
+5	100	\N
+6	10000	\N
+7	1000000000	\N
+8	1152921504606846976	\N
+9	6.18	\N
+10	"abcd"	\N
+11	{}	\N
+12	{"k1":"v31","k2":300}	\N
+13	[]	\N
+14	[123,456]	\N
+15	["abc","def"]	\N
+16	[null,true,false,100,6.18,"abc"]	\N
+17	[{"k1":"v41","k2":400},1,"a",3.14]	\N
+18	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}	3.14
+26	\N	\N
+27	{"k1":"v1","k2":200}	\N
+28	{"a.b.c":{"k1.a1":"v31","k2":300},"a":"niu"}	\N
+
 -- !select --
 1	\N	\N
 2	null	\N
@@ -2689,26 +2896,26 @@
 
 -- !select --
 1	\N	\N
-2	null	true
-3	true	false
-4	false	false
-5	100	false
-6	10000	false
-7	1000000000	false
-8	1152921504606846976	false
-9	6.18	false
-10	"abcd"	false
-11	{}	false
-12	{"k1":"v31","k2":300}	false
-13	[]	false
-14	[123,456]	false
-15	["abc","def"]	false
-16	[null,true,false,100,6.18,"abc"]	false
-17	[{"k1":"v41","k2":400},1,"a",3.14]	false
-18	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}	false
+2	null	\N
+3	true	\N
+4	false	\N
+5	100	\N
+6	10000	\N
+7	1000000000	\N
+8	1152921504606846976	\N
+9	6.18	\N
+10	"abcd"	\N
+11	{}	\N
+12	{"k1":"v31","k2":300}	\N
+13	[]	\N
+14	[123,456]	\N
+15	["abc","def"]	\N
+16	[null,true,false,100,6.18,"abc"]	\N
+17	[{"k1":"v41","k2":400},1,"a",3.14]	\N
+18	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}	\N
 26	\N	\N
-27	{"k1":"v1","k2":200}	false
-28	{"a.b.c":{"k1.a1":"v31","k2":300},"a":"niu"}	false
+27	{"k1":"v1","k2":200}	\N
+28	{"a.b.c":{"k1.a1":"v31","k2":300},"a":"niu"}	\N
 
 -- !select --
 1	\N	\N
@@ -2722,15 +2929,15 @@
 9	6.18	\N
 10	"abcd"	\N
 11	{}	\N
-12	{"k1":"v31","k2":300}	false
+12	{"k1":"v31","k2":300}	\N
 13	[]	\N
 14	[123,456]	\N
 15	["abc","def"]	\N
 16	[null,true,false,100,6.18,"abc"]	\N
 17	[{"k1":"v41","k2":400},1,"a",3.14]	\N
-18	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}	false
+18	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}	3.14
 26	\N	\N
-27	{"k1":"v1","k2":200}	false
+27	{"k1":"v1","k2":200}	\N
 28	{"a.b.c":{"k1.a1":"v31","k2":300},"a":"niu"}	\N
 
 -- !select --
@@ -2745,15 +2952,15 @@
 9	6.18	\N
 10	"abcd"	\N
 11	{}	\N
-12	{"k1":"v31","k2":300}	false
+12	{"k1":"v31","k2":300}	\N
 13	[]	\N
 14	[123,456]	\N
 15	["abc","def"]	\N
 16	[null,true,false,100,6.18,"abc"]	\N
 17	[{"k1":"v41","k2":400},1,"a",3.14]	\N
-18	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}	false
+18	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}	3.14
 26	\N	\N
-27	{"k1":"v1","k2":200}	false
+27	{"k1":"v1","k2":200}	\N
 28	{"a.b.c":{"k1.a1":"v31","k2":300},"a":"niu"}	\N
 
 -- !select --
@@ -2770,10 +2977,10 @@
 11	{}	\N
 12	{"k1":"v31","k2":300}	\N
 13	[]	\N
-14	[123,456]	false
-15	["abc","def"]	false
-16	[null,true,false,100,6.18,"abc"]	true
-17	[{"k1":"v41","k2":400},1,"a",3.14]	false
+14	[123,456]	\N
+15	["abc","def"]	\N
+16	[null,true,false,100,6.18,"abc"]	\N
+17	[{"k1":"v41","k2":400},1,"a",3.14]	\N
 18	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}	\N
 26	\N	\N
 27	{"k1":"v1","k2":200}	\N
@@ -2793,11 +3000,11 @@
 11	{}	\N
 12	{"k1":"v31","k2":300}	\N
 13	[]	\N
-14	[123,456]	false
-15	["abc","def"]	false
-16	[null,true,false,100,6.18,"abc"]	false
-17	[{"k1":"v41","k2":400},1,"a",3.14]	false
-18	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}	\N
+14	[123,456]	\N
+15	["abc","def"]	\N
+16	[null,true,false,100,6.18,"abc"]	\N
+17	[{"k1":"v41","k2":400},1,"a",3.14]	\N
+18	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}	1.0
 26	\N	\N
 27	{"k1":"v1","k2":200}	\N
 28	{"a.b.c":{"k1.a1":"v31","k2":300},"a":"niu"}	\N
@@ -2818,8 +3025,8 @@
 13	[]	\N
 14	[123,456]	\N
 15	["abc","def"]	\N
-16	[null,true,false,100,6.18,"abc"]	false
-17	[{"k1":"v41","k2":400},1,"a",3.14]	false
+16	[null,true,false,100,6.18,"abc"]	\N
+17	[{"k1":"v41","k2":400},1,"a",3.14]	\N
 18	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}	\N
 26	\N	\N
 27	{"k1":"v1","k2":200}	\N
@@ -2841,8 +3048,8 @@
 13	[]	\N
 14	[123,456]	\N
 15	["abc","def"]	\N
-16	[null,true,false,100,6.18,"abc"]	false
-17	[{"k1":"v41","k2":400},1,"a",3.14]	false
+16	[null,true,false,100,6.18,"abc"]	\N
+17	[{"k1":"v41","k2":400},1,"a",3.14]	\N
 18	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}	\N
 26	\N	\N
 27	{"k1":"v1","k2":200}	\N
@@ -2864,9 +3071,9 @@
 13	[]	\N
 14	[123,456]	\N
 15	["abc","def"]	\N
-16	[null,true,false,100,6.18,"abc"]	false
+16	[null,true,false,100,6.18,"abc"]	\N
 17	[{"k1":"v41","k2":400},1,"a",3.14]	\N
-18	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}	\N
+18	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}	3.14
 26	\N	\N
 27	{"k1":"v1","k2":200}	\N
 28	{"a.b.c":{"k1.a1":"v31","k2":300},"a":"niu"}	\N
@@ -2887,7 +3094,30 @@
 13	[]	\N
 14	[123,456]	\N
 15	["abc","def"]	\N
-16	[null,true,false,100,6.18,"abc"]	false
+16	[null,true,false,100,6.18,"abc"]	\N
+17	[{"k1":"v41","k2":400},1,"a",3.14]	\N
+18	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}	\N
+26	\N	\N
+27	{"k1":"v1","k2":200}	\N
+28	{"a.b.c":{"k1.a1":"v31","k2":300},"a":"niu"}	\N
+
+-- !jsonb_extract_bool_select --
+1	\N	\N
+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
+10	"abcd"	\N
+11	{}	\N
+12	{"k1":"v31","k2":300}	\N
+13	[]	\N
+14	[123,456]	\N
+15	["abc","def"]	\N
+16	[null,true,false,100,6.18,"abc"]	\N
 17	[{"k1":"v41","k2":400},1,"a",3.14]	\N
 18	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}	\N
 26	\N	\N
@@ -2958,7 +3188,7 @@
 15	["abc","def"]	\N
 16	[null,true,false,100,6.18,"abc"]	\N
 17	[{"k1":"v41","k2":400},1,"a",3.14]	\N
-18	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}	false
+18	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}	\N
 26	\N	\N
 27	{"k1":"v1","k2":200}	\N
 28	{"a.b.c":{"k1.a1":"v31","k2":300},"a":"niu"}	\N
@@ -2979,9 +3209,9 @@
 13	[]	\N
 14	[123,456]	\N
 15	["abc","def"]	\N
-16	[null,true,false,100,6.18,"abc"]	\N
+16	[null,true,false,100,6.18,"abc"]	true
 17	[{"k1":"v41","k2":400},1,"a",3.14]	\N
-18	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}	false
+18	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}	\N
 26	\N	\N
 27	{"k1":"v1","k2":200}	\N
 28	{"a.b.c":{"k1.a1":"v31","k2":300},"a":"niu"}	\N
@@ -3002,9 +3232,9 @@
 13	[]	\N
 14	[123,456]	\N
 15	["abc","def"]	\N
-16	[null,true,false,100,6.18,"abc"]	\N
+16	[null,true,false,100,6.18,"abc"]	false
 17	[{"k1":"v41","k2":400},1,"a",3.14]	\N
-18	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}	false
+18	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}	\N
 26	\N	\N
 27	{"k1":"v1","k2":200}	\N
 28	{"a.b.c":{"k1.a1":"v31","k2":300},"a":"niu"}	\N
@@ -3027,7 +3257,7 @@
 15	["abc","def"]	\N
 16	[null,true,false,100,6.18,"abc"]	\N
 17	[{"k1":"v41","k2":400},1,"a",3.14]	\N
-18	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}	false
+18	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}	\N
 26	\N	\N
 27	{"k1":"v1","k2":200}	\N
 28	{"a.b.c":{"k1.a1":"v31","k2":300},"a":"niu"}	\N
@@ -3050,7 +3280,7 @@
 15	["abc","def"]	\N
 16	[null,true,false,100,6.18,"abc"]	\N
 17	[{"k1":"v41","k2":400},1,"a",3.14]	\N
-18	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}	false
+18	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}	\N
 26	\N	\N
 27	{"k1":"v1","k2":200}	\N
 28	{"a.b.c":{"k1.a1":"v31","k2":300},"a":"niu"}	\N
@@ -3103,26 +3333,1176 @@
 
 -- !select --
 1	\N	\N
-2	null	true
-3	true	true
-4	false	true
-5	100	true
-6	10000	true
-7	1000000000	true
-8	1152921504606846976	true
-9	6.18	true
-10	"abcd"	true
-11	{}	true
-12	{"k1":"v31","k2":300}	true
-13	[]	true
-14	[123,456]	true
-15	["abc","def"]	true
+2	null	\N
+3	true	\N
+4	false	\N
+5	100	\N
+6	10000	\N
+7	1000000000	\N
+8	1152921504606846976	\N
+9	6.18	\N
+10	"abcd"	\N
+11	{}	\N
+12	{"k1":"v31","k2":300}	\N
+13	[]	\N
+14	[123,456]	\N
+15	["abc","def"]	\N
+16	[null,true,false,100,6.18,"abc"]	\N
+17	[{"k1":"v41","k2":400},1,"a",3.14]	\N
+18	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}	\N
+26	\N	\N
+27	{"k1":"v1","k2":200}	\N
+28	{"a.b.c":{"k1.a1":"v31","k2":300},"a":"niu"}	\N
+
+-- !select --
+1	\N	\N
+2	null	\N
+3	true	\N
+4	false	\N
+5	100	\N
+6	10000	\N
+7	1000000000	\N
+8	1152921504606846976	\N
+9	6.18	\N
+10	"abcd"	\N
+11	{}	\N
+12	{"k1":"v31","k2":300}	\N
+13	[]	\N
+14	[123,456]	\N
+15	["abc","def"]	\N
+16	[null,true,false,100,6.18,"abc"]	\N
+17	[{"k1":"v41","k2":400},1,"a",3.14]	\N
+18	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}	\N
+26	\N	\N
+27	{"k1":"v1","k2":200}	\N
+28	{"a.b.c":{"k1.a1":"v31","k2":300},"a":"niu"}	\N
+
+-- !select --
+1	\N	\N
+2	null	\N
+3	true	\N
+4	false	\N
+5	100	\N
+6	10000	\N
+7	1000000000	\N
+8	1152921504606846976	\N
+9	6.18	\N
+10	"abcd"	\N
+11	{}	\N
+12	{"k1":"v31","k2":300}	\N
+13	[]	\N
+14	[123,456]	\N
+15	["abc","def"]	\N
+16	[null,true,false,100,6.18,"abc"]	\N
+17	[{"k1":"v41","k2":400},1,"a",3.14]	\N
+18	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}	\N
+26	\N	\N
+27	{"k1":"v1","k2":200}	\N
+28	{"a.b.c":{"k1.a1":"v31","k2":300},"a":"niu"}	\N
+
+-- !select --
+1	\N	\N
+2	null	\N
+3	true	\N
+4	false	\N
+5	100	\N
+6	10000	\N
+7	1000000000	\N
+8	1152921504606846976	\N
+9	6.18	\N
+10	"abcd"	\N
+11	{}	\N
+12	{"k1":"v31","k2":300}	\N
+13	[]	\N
+14	[123,456]	\N
+15	["abc","def"]	\N
+16	[null,true,false,100,6.18,"abc"]	\N
+17	[{"k1":"v41","k2":400},1,"a",3.14]	\N
+18	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}	\N
+26	\N	\N
+27	{"k1":"v1","k2":200}	\N
+28	{"a.b.c":{"k1.a1":"v31","k2":300},"a":"niu"}	\N
+
+-- !select --
+1	\N	\N
+2	null	\N
+3	true	\N
+4	false	\N
+5	100	\N
+6	10000	\N
+7	1000000000	\N
+8	1152921504606846976	\N
+9	6.18	\N
+10	"abcd"	\N
+11	{}	\N
+12	{"k1":"v31","k2":300}	\N
+13	[]	\N
+14	[123,456]	\N
+15	["abc","def"]	\N
+16	[null,true,false,100,6.18,"abc"]	\N
+17	[{"k1":"v41","k2":400},1,"a",3.14]	\N
+18	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}	\N
+26	\N	\N
+27	{"k1":"v1","k2":200}	\N
+28	{"a.b.c":{"k1.a1":"v31","k2":300},"a":"niu"}	\N
+
+-- !select --
+1	\N	\N
+2	null	\N
+3	true	\N
+4	false	\N
+5	100	\N
+6	10000	\N
+7	1000000000	\N
+8	1152921504606846976	\N
+9	6.18	\N
+10	"abcd"	\N
+11	{}	\N
+12	{"k1":"v31","k2":300}	\N
+13	[]	\N
+14	[123,456]	\N
+15	["abc","def"]	\N
+16	[null,true,false,100,6.18,"abc"]	\N
+17	[{"k1":"v41","k2":400},1,"a",3.14]	\N
+18	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}	\N
+26	\N	\N
+27	{"k1":"v1","k2":200}	\N
+28	{"a.b.c":{"k1.a1":"v31","k2":300},"a":"niu"}	\N
+
+-- !select --
+1	\N	\N
+2	null	\N
+3	true	\N
+4	false	\N
+5	100	\N
+6	10000	\N
+7	1000000000	\N
+8	1152921504606846976	\N
+9	6.18	\N
+10	"abcd"	\N
+11	{}	\N
+12	{"k1":"v31","k2":300}	\N
+13	[]	\N
+14	[123,456]	\N
+15	["abc","def"]	\N
+16	[null,true,false,100,6.18,"abc"]	\N
+17	[{"k1":"v41","k2":400},1,"a",3.14]	\N
+18	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}	\N
+26	\N	\N
+27	{"k1":"v1","k2":200}	\N
+28	{"a.b.c":{"k1.a1":"v31","k2":300},"a":"niu"}	\N
+
+-- !select --
+1	\N	\N
+2	null	\N
+3	true	\N
+4	false	\N
+5	100	\N
+6	10000	\N
+7	1000000000	\N
+8	1152921504606846976	\N
+9	6.18	\N
+10	"abcd"	\N
+11	{}	\N
+12	{"k1":"v31","k2":300}	\N
+13	[]	\N
+14	[123,456]	\N
+15	["abc","def"]	\N
+16	[null,true,false,100,6.18,"abc"]	\N
+17	[{"k1":"v41","k2":400},1,"a",3.14]	\N
+18	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}	\N
+26	\N	\N
+27	{"k1":"v1","k2":200}	\N
+28	{"a.b.c":{"k1.a1":"v31","k2":300},"a":"niu"}	\N
+
+-- !select --
+1	\N	\N
+2	null	\N
+3	true	\N
+4	false	\N
+5	100	\N
+6	10000	\N
+7	1000000000	\N
+8	1152921504606846976	\N
+9	6.18	\N
+10	"abcd"	\N
+11	{}	\N
+12	{"k1":"v31","k2":300}	\N
+13	[]	\N
+14	[123,456]	\N
+15	["abc","def"]	\N
+16	[null,true,false,100,6.18,"abc"]	\N
+17	[{"k1":"v41","k2":400},1,"a",3.14]	\N
+18	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}	\N
+26	\N	\N
+27	{"k1":"v1","k2":200}	\N
+28	{"a.b.c":{"k1.a1":"v31","k2":300},"a":"niu"}	\N
+
+-- !select --
+1	\N	\N
+2	null	\N
+3	true	\N
+4	false	\N
+5	100	\N
+6	10000	\N
+7	1000000000	\N
+8	1152921504606846976	\N
+9	6.18	\N
+10	"abcd"	\N
+11	{}	\N
+12	{"k1":"v31","k2":300}	\N
+13	[]	\N
+14	[123,456]	\N
+15	["abc","def"]	\N
+16	[null,true,false,100,6.18,"abc"]	\N
+17	[{"k1":"v41","k2":400},1,"a",3.14]	\N
+18	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}	\N
+26	\N	\N
+27	{"k1":"v1","k2":200}	\N
+28	{"a.b.c":{"k1.a1":"v31","k2":300},"a":"niu"}	\N
+
+-- !select --
+1	\N	\N
+2	null	\N
+3	true	\N
+4	false	\N
+5	100	\N
+6	10000	\N
+7	1000000000	\N
+8	1152921504606846976	\N
+9	6.18	\N
+10	"abcd"	\N
+11	{}	\N
+12	{"k1":"v31","k2":300}	\N
+13	[]	\N
+14	[123,456]	\N
+15	["abc","def"]	\N
+16	[null,true,false,100,6.18,"abc"]	\N
+17	[{"k1":"v41","k2":400},1,"a",3.14]	\N
+18	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}	\N
+26	\N	\N
+27	{"k1":"v1","k2":200}	\N
+28	{"a.b.c":{"k1.a1":"v31","k2":300},"a":"niu"}	\N
+
+-- !select --
+1	\N	\N
+2	null	\N
+3	true	\N
+4	false	\N
+5	100	\N
+6	10000	\N
+7	1000000000	\N
+8	1152921504606846976	\N
+9	6.18	\N
+10	"abcd"	\N
+11	{}	\N
+12	{"k1":"v31","k2":300}	\N
+13	[]	\N
+14	[123,456]	\N
+15	["abc","def"]	\N
+16	[null,true,false,100,6.18,"abc"]	\N
+17	[{"k1":"v41","k2":400},1,"a",3.14]	\N
+18	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}	\N
+26	\N	\N
+27	{"k1":"v1","k2":200}	\N
+28	{"a.b.c":{"k1.a1":"v31","k2":300},"a":"niu"}	\N
+
+-- !select --
+1	\N	\N
+2	null	\N
+3	true	\N
+4	false	\N
+5	100	\N
+6	10000	\N
+7	1000000000	\N
+8	1152921504606846976	\N
+9	6.18	\N
+10	"abcd"	\N
+11	{}	\N
+12	{"k1":"v31","k2":300}	\N
+13	[]	\N
+14	[123,456]	\N
+15	["abc","def"]	\N
+16	[null,true,false,100,6.18,"abc"]	\N
+17	[{"k1":"v41","k2":400},1,"a",3.14]	\N
+18	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}	\N
+26	\N	\N
+27	{"k1":"v1","k2":200}	\N
+28	{"a.b.c":{"k1.a1":"v31","k2":300},"a":"niu"}	\N
+
+-- !select --
+1	\N	\N
+2	null	\N
+3	true	\N
+4	false	\N
+5	100	\N
+6	10000	\N
+7	1000000000	\N
+8	1152921504606846976	\N
+9	6.18	\N
+10	"abcd"	\N
+11	{}	\N
+12	{"k1":"v31","k2":300}	\N
+13	[]	\N
+14	[123,456]	\N
+15	["abc","def"]	\N
+16	[null,true,false,100,6.18,"abc"]	\N
+17	[{"k1":"v41","k2":400},1,"a",3.14]	\N
+18	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}	\N
+26	\N	\N
+27	{"k1":"v1","k2":200}	\N
+28	{"a.b.c":{"k1.a1":"v31","k2":300},"a":"niu"}	\N
+
+-- !select --
+1	\N	\N
+2	null	\N
+3	true	\N
+4	false	\N
+5	100	\N
+6	10000	\N
+7	1000000000	\N
+8	1152921504606846976	\N
+9	6.18	\N
+10	"abcd"	\N
+11	{}	\N
+12	{"k1":"v31","k2":300}	\N
+13	[]	\N
+14	[123,456]	\N
+15	["abc","def"]	\N
+16	[null,true,false,100,6.18,"abc"]	\N
+17	[{"k1":"v41","k2":400},1,"a",3.14]	\N
+18	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}	\N
+26	\N	\N
+27	{"k1":"v1","k2":200}	\N
+28	{"a.b.c":{"k1.a1":"v31","k2":300},"a":"niu"}	\N
+
+-- !select --
+1	\N	\N
+2	null	\N
+3	true	\N
+4	false	\N
+5	100	\N
+6	10000	\N
+7	1000000000	\N
+8	1152921504606846976	\N
+9	6.18	\N
+10	"abcd"	\N
+11	{}	\N
+12	{"k1":"v31","k2":300}	\N
+13	[]	\N
+14	[123,456]	\N
+15	["abc","def"]	\N
+16	[null,true,false,100,6.18,"abc"]	\N
+17	[{"k1":"v41","k2":400},1,"a",3.14]	\N
+18	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}	\N
+26	\N	\N
+27	{"k1":"v1","k2":200}	\N
+28	{"a.b.c":{"k1.a1":"v31","k2":300},"a":"niu"}	\N
+
+-- !jsonb_extract_isnull_select --
+1	\N	\N
+2	null	true
+3	true	false
+4	false	false
+5	100	false
+6	10000	false
+7	1000000000	false
+8	1152921504606846976	false
+9	6.18	false
+10	"abcd"	false
+11	{}	false
+12	{"k1":"v31","k2":300}	false
+13	[]	false
+14	[123,456]	false
+15	["abc","def"]	false
+16	[null,true,false,100,6.18,"abc"]	false
+17	[{"k1":"v41","k2":400},1,"a",3.14]	false
+18	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}	false
+26	\N	\N
+27	{"k1":"v1","k2":200}	false
+28	{"a.b.c":{"k1.a1":"v31","k2":300},"a":"niu"}	false
+
+-- !select --
+1	\N	\N
+2	null	\N
+3	true	\N
+4	false	\N
+5	100	\N
+6	10000	\N
+7	1000000000	\N
+8	1152921504606846976	\N
+9	6.18	\N
+10	"abcd"	\N
+11	{}	\N
+12	{"k1":"v31","k2":300}	false
+13	[]	\N
+14	[123,456]	\N
+15	["abc","def"]	\N
+16	[null,true,false,100,6.18,"abc"]	\N
+17	[{"k1":"v41","k2":400},1,"a",3.14]	\N
+18	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}	false
+26	\N	\N
+27	{"k1":"v1","k2":200}	false
+28	{"a.b.c":{"k1.a1":"v31","k2":300},"a":"niu"}	\N
+
+-- !select --
+1	\N	\N
+2	null	\N
+3	true	\N
+4	false	\N
+5	100	\N
+6	10000	\N
+7	1000000000	\N
+8	1152921504606846976	\N
+9	6.18	\N
+10	"abcd"	\N
+11	{}	\N
+12	{"k1":"v31","k2":300}	false
+13	[]	\N
+14	[123,456]	\N
+15	["abc","def"]	\N
+16	[null,true,false,100,6.18,"abc"]	\N
+17	[{"k1":"v41","k2":400},1,"a",3.14]	\N
+18	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}	false
+26	\N	\N
+27	{"k1":"v1","k2":200}	false
+28	{"a.b.c":{"k1.a1":"v31","k2":300},"a":"niu"}	\N
+
+-- !select --
+1	\N	\N
+2	null	\N
+3	true	\N
+4	false	\N
+5	100	\N
+6	10000	\N
+7	1000000000	\N
+8	1152921504606846976	\N
+9	6.18	\N
+10	"abcd"	\N
+11	{}	false
+12	{"k1":"v31","k2":300}	false
+13	[]	\N
+14	[123,456]	false
+15	["abc","def"]	false
+16	[null,true,false,100,6.18,"abc"]	true
+17	[{"k1":"v41","k2":400},1,"a",3.14]	false
+18	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}	false
+26	\N	\N
+27	{"k1":"v1","k2":200}	false
+28	{"a.b.c":{"k1.a1":"v31","k2":300},"a":"niu"}	false
+
+-- !select --
+1	\N	\N
+2	null	\N
+3	true	\N
+4	false	\N
+5	100	\N
+6	10000	\N
+7	1000000000	\N
+8	1152921504606846976	\N
+9	6.18	\N
+10	"abcd"	\N
+11	{}	\N
+12	{"k1":"v31","k2":300}	\N
+13	[]	\N
+14	[123,456]	false
+15	["abc","def"]	false
+16	[null,true,false,100,6.18,"abc"]	false
+17	[{"k1":"v41","k2":400},1,"a",3.14]	false
+18	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}	\N
+26	\N	\N
+27	{"k1":"v1","k2":200}	\N
+28	{"a.b.c":{"k1.a1":"v31","k2":300},"a":"niu"}	\N
+
+-- !select --
+1	\N	\N
+2	null	\N
+3	true	\N
+4	false	\N
+5	100	\N
+6	10000	\N
+7	1000000000	\N
+8	1152921504606846976	\N
+9	6.18	\N
+10	"abcd"	\N
+11	{}	\N
+12	{"k1":"v31","k2":300}	\N
+13	[]	\N
+14	[123,456]	\N
+15	["abc","def"]	\N
+16	[null,true,false,100,6.18,"abc"]	false
+17	[{"k1":"v41","k2":400},1,"a",3.14]	false
+18	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}	\N
+26	\N	\N
+27	{"k1":"v1","k2":200}	\N
+28	{"a.b.c":{"k1.a1":"v31","k2":300},"a":"niu"}	\N
+
+-- !select --
+1	\N	\N
+2	null	\N
+3	true	\N
+4	false	\N
+5	100	\N
+6	10000	\N
+7	1000000000	\N
+8	1152921504606846976	\N
+9	6.18	\N
+10	"abcd"	\N
+11	{}	\N
+12	{"k1":"v31","k2":300}	\N
+13	[]	\N
+14	[123,456]	\N
+15	["abc","def"]	\N
+16	[null,true,false,100,6.18,"abc"]	false
+17	[{"k1":"v41","k2":400},1,"a",3.14]	false
+18	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}	\N
+26	\N	\N
+27	{"k1":"v1","k2":200}	\N
+28	{"a.b.c":{"k1.a1":"v31","k2":300},"a":"niu"}	\N
+
+-- !select --
+1	\N	\N
+2	null	\N
+3	true	\N
+4	false	\N
+5	100	\N
+6	10000	\N
+7	1000000000	\N
+8	1152921504606846976	\N
+9	6.18	\N
+10	"abcd"	\N
+11	{}	\N
+12	{"k1":"v31","k2":300}	\N
+13	[]	\N
+14	[123,456]	\N
+15	["abc","def"]	\N
+16	[null,true,false,100,6.18,"abc"]	false
+17	[{"k1":"v41","k2":400},1,"a",3.14]	\N
+18	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}	\N
+26	\N	\N
+27	{"k1":"v1","k2":200}	\N
+28	{"a.b.c":{"k1.a1":"v31","k2":300},"a":"niu"}	\N
+
+-- !select --
+1	\N	\N
+2	null	\N
+3	true	\N
+4	false	\N
+5	100	\N
+6	10000	\N
+7	1000000000	\N
+8	1152921504606846976	\N
+9	6.18	\N
+10	"abcd"	\N
+11	{}	\N
+12	{"k1":"v31","k2":300}	\N
+13	[]	\N
+14	[123,456]	\N
+15	["abc","def"]	\N
+16	[null,true,false,100,6.18,"abc"]	false
+17	[{"k1":"v41","k2":400},1,"a",3.14]	\N
+18	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}	\N
+26	\N	\N
+27	{"k1":"v1","k2":200}	\N
+28	{"a.b.c":{"k1.a1":"v31","k2":300},"a":"niu"}	\N
+
+-- !select --
+1	\N	\N
+2	null	\N
+3	true	\N
+4	false	\N
+5	100	\N
+6	10000	\N
+7	1000000000	\N
+8	1152921504606846976	\N
+9	6.18	\N
+10	"abcd"	\N
+11	{}	\N
+12	{"k1":"v31","k2":300}	\N
+13	[]	\N
+14	[123,456]	\N
+15	["abc","def"]	\N
+16	[null,true,false,100,6.18,"abc"]	\N
+17	[{"k1":"v41","k2":400},1,"a",3.14]	\N
+18	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}	\N
+26	\N	\N
+27	{"k1":"v1","k2":200}	\N
+28	{"a.b.c":{"k1.a1":"v31","k2":300},"a":"niu"}	\N
+
+-- !select --
+1	\N	\N
+2	null	\N
+3	true	\N
+4	false	\N
+5	100	\N
+6	10000	\N
+7	1000000000	\N
+8	1152921504606846976	\N
+9	6.18	\N
+10	"abcd"	\N
+11	{}	\N
+12	{"k1":"v31","k2":300}	\N
+13	[]	\N
+14	[123,456]	\N
+15	["abc","def"]	\N
+16	[null,true,false,100,6.18,"abc"]	\N
+17	[{"k1":"v41","k2":400},1,"a",3.14]	\N
+18	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}	\N
+26	\N	\N
+27	{"k1":"v1","k2":200}	\N
+28	{"a.b.c":{"k1.a1":"v31","k2":300},"a":"niu"}	\N
+
+-- !select --
+1	\N	\N
+2	null	\N
+3	true	\N
+4	false	\N
+5	100	\N
+6	10000	\N
+7	1000000000	\N
+8	1152921504606846976	\N
+9	6.18	\N
+10	"abcd"	\N
+11	{}	\N
+12	{"k1":"v31","k2":300}	\N
+13	[]	\N
+14	[123,456]	\N
+15	["abc","def"]	\N
+16	[null,true,false,100,6.18,"abc"]	\N
+17	[{"k1":"v41","k2":400},1,"a",3.14]	\N
+18	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}	false
+26	\N	\N
+27	{"k1":"v1","k2":200}	\N
+28	{"a.b.c":{"k1.a1":"v31","k2":300},"a":"niu"}	\N
+
+-- !select --
+1	\N	\N
+2	null	\N
+3	true	\N
+4	false	\N
+5	100	\N
+6	10000	\N
+7	1000000000	\N
+8	1152921504606846976	\N
+9	6.18	\N
+10	"abcd"	\N
+11	{}	\N
+12	{"k1":"v31","k2":300}	\N
+13	[]	\N
+14	[123,456]	\N
+15	["abc","def"]	\N
+16	[null,true,false,100,6.18,"abc"]	\N
+17	[{"k1":"v41","k2":400},1,"a",3.14]	\N
+18	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}	false
+26	\N	\N
+27	{"k1":"v1","k2":200}	\N
+28	{"a.b.c":{"k1.a1":"v31","k2":300},"a":"niu"}	\N
+
+-- !select --
+1	\N	\N
+2	null	\N
+3	true	\N
+4	false	\N
+5	100	\N
+6	10000	\N
+7	1000000000	\N
+8	1152921504606846976	\N
+9	6.18	\N
+10	"abcd"	\N
+11	{}	\N
+12	{"k1":"v31","k2":300}	\N
+13	[]	\N
+14	[123,456]	\N
+15	["abc","def"]	\N
+16	[null,true,false,100,6.18,"abc"]	\N
+17	[{"k1":"v41","k2":400},1,"a",3.14]	\N
+18	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}	false
+26	\N	\N
+27	{"k1":"v1","k2":200}	\N
+28	{"a.b.c":{"k1.a1":"v31","k2":300},"a":"niu"}	\N
+
+-- !select --
+1	\N	\N
+2	null	\N
+3	true	\N
+4	false	\N
+5	100	\N
+6	10000	\N
+7	1000000000	\N
+8	1152921504606846976	\N
+9	6.18	\N
+10	"abcd"	\N
+11	{}	\N
+12	{"k1":"v31","k2":300}	\N
+13	[]	\N
+14	[123,456]	\N
+15	["abc","def"]	\N
+16	[null,true,false,100,6.18,"abc"]	\N
+17	[{"k1":"v41","k2":400},1,"a",3.14]	\N
+18	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}	false
+26	\N	\N
+27	{"k1":"v1","k2":200}	\N
+28	{"a.b.c":{"k1.a1":"v31","k2":300},"a":"niu"}	\N
+
+-- !select --
+1	\N	\N
+2	null	\N
+3	true	\N
+4	false	\N
+5	100	\N
+6	10000	\N
+7	1000000000	\N
+8	1152921504606846976	\N
+9	6.18	\N
+10	"abcd"	\N
+11	{}	\N
+12	{"k1":"v31","k2":300}	\N
+13	[]	\N
+14	[123,456]	\N
+15	["abc","def"]	\N
+16	[null,true,false,100,6.18,"abc"]	\N
+17	[{"k1":"v41","k2":400},1,"a",3.14]	\N
+18	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}	false
+26	\N	\N
+27	{"k1":"v1","k2":200}	\N
+28	{"a.b.c":{"k1.a1":"v31","k2":300},"a":"niu"}	\N
+
+-- !select --
+1	\N	\N
+2	null	\N
+3	true	\N
+4	false	\N
+5	100	\N
+6	10000	\N
+7	1000000000	\N
+8	1152921504606846976	\N
+9	6.18	\N
+10	"abcd"	\N
+11	{}	\N
+12	{"k1":"v31","k2":300}	\N
+13	[]	\N
+14	[123,456]	\N
+15	["abc","def"]	\N
+16	[null,true,false,100,6.18,"abc"]	\N
+17	[{"k1":"v41","k2":400},1,"a",3.14]	\N
+18	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}	\N
+26	\N	\N
+27	{"k1":"v1","k2":200}	\N
+28	{"a.b.c":{"k1.a1":"v31","k2":300},"a":"niu"}	\N
+
+-- !select --
+1	\N	\N
+2	null	\N
+3	true	\N
+4	false	\N
+5	100	\N
+6	10000	\N
+7	1000000000	\N
+8	1152921504606846976	\N
+9	6.18	\N
+10	"abcd"	\N
+11	{}	\N
+12	{"k1":"v31","k2":300}	\N
+13	[]	\N
+14	[123,456]	\N
+15	["abc","def"]	\N
+16	[null,true,false,100,6.18,"abc"]	\N
+17	[{"k1":"v41","k2":400},1,"a",3.14]	\N
+18	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}	\N
+26	\N	\N
+27	{"k1":"v1","k2":200}	\N
+28	{"a.b.c":{"k1.a1":"v31","k2":300},"a":"niu"}	\N
+
+-- !select --
+1	\N	\N
+2	null	\N
+3	true	\N
+4	false	\N
+5	100	\N
+6	10000	\N
+7	1000000000	\N
+8	1152921504606846976	\N
+9	6.18	\N
+10	"abcd"	\N
+11	{}	\N
+12	{"k1":"v31","k2":300}	\N
+13	[]	\N
+14	[123,456]	\N
+15	["abc","def"]	\N
+16	[null,true,false,100,6.18,"abc"]	\N
+17	[{"k1":"v41","k2":400},1,"a",3.14]	\N
+18	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}	false
+26	\N	\N
+27	{"k1":"v1","k2":200}	\N
+28	{"a.b.c":{"k1.a1":"v31","k2":300},"a":"niu"}	\N
+
+-- !select --
+1	\N	\N
+2	null	\N
+3	true	\N
+4	false	\N
+5	100	\N
+6	10000	\N
+7	1000000000	\N
+8	1152921504606846976	\N
+9	6.18	\N
+10	"abcd"	\N
+11	{}	\N
+12	{"k1":"v31","k2":300}	\N
+13	[]	\N
+14	[123,456]	\N
+15	["abc","def"]	\N
+16	[null,true,false,100,6.18,"abc"]	\N
+17	[{"k1":"v41","k2":400},1,"a",3.14]	\N
+18	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}	false
+26	\N	\N
+27	{"k1":"v1","k2":200}	\N
+28	{"a.b.c":{"k1.a1":"v31","k2":300},"a":"niu"}	\N
+
+-- !select --
+1	\N	\N
+2	null	\N
+3	true	\N
+4	false	\N
+5	100	\N
+6	10000	\N
+7	1000000000	\N
+8	1152921504606846976	\N
+9	6.18	\N
+10	"abcd"	\N
+11	{}	\N
+12	{"k1":"v31","k2":300}	\N
+13	[]	\N
+14	[123,456]	\N
+15	["abc","def"]	\N
+16	[null,true,false,100,6.18,"abc"]	\N
+17	[{"k1":"v41","k2":400},1,"a",3.14]	\N
+18	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}	false
+26	\N	\N
+27	{"k1":"v1","k2":200}	\N
+28	{"a.b.c":{"k1.a1":"v31","k2":300},"a":"niu"}	\N
+
+-- !select --
+1	\N	\N
+2	null	\N
+3	true	\N
+4	false	\N
+5	100	\N
+6	10000	\N
+7	1000000000	\N
+8	1152921504606846976	\N
+9	6.18	\N
+10	"abcd"	\N
+11	{}	\N
+12	{"k1":"v31","k2":300}	\N
+13	[]	\N
+14	[123,456]	\N
+15	["abc","def"]	\N
+16	[null,true,false,100,6.18,"abc"]	\N
+17	[{"k1":"v41","k2":400},1,"a",3.14]	\N
+18	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}	false
+26	\N	\N
+27	{"k1":"v1","k2":200}	\N
+28	{"a.b.c":{"k1.a1":"v31","k2":300},"a":"niu"}	\N
+
+-- !select --
+1	\N	\N
+2	null	\N
+3	true	\N
+4	false	\N
+5	100	\N
+6	10000	\N
+7	1000000000	\N
+8	1152921504606846976	\N
+9	6.18	\N
+10	"abcd"	\N
+11	{}	\N
+12	{"k1":"v31","k2":300}	\N
+13	[]	\N
+14	[123,456]	\N
+15	["abc","def"]	\N
+16	[null,true,false,100,6.18,"abc"]	\N
+17	[{"k1":"v41","k2":400},1,"a",3.14]	\N
+18	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}	\N
+26	\N	\N
+27	{"k1":"v1","k2":200}	\N
+28	{"a.b.c":{"k1.a1":"v31","k2":300},"a":"niu"}	\N
+
+-- !select --
+1	\N	\N
+2	null	\N
+3	true	\N
+4	false	\N
+5	100	\N
+6	10000	\N
+7	1000000000	\N
+8	1152921504606846976	\N
+9	6.18	\N
+10	"abcd"	\N
+11	{}	\N
+12	{"k1":"v31","k2":300}	\N
+13	[]	\N
+14	[123,456]	\N
+15	["abc","def"]	\N
+16	[null,true,false,100,6.18,"abc"]	\N
+17	[{"k1":"v41","k2":400},1,"a",3.14]	\N
+18	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}	false
+26	\N	\N
+27	{"k1":"v1","k2":200}	\N
+28	{"a.b.c":{"k1.a1":"v31","k2":300},"a":"niu"}	\N
+
+-- !select --
+1	\N	\N
+2	null	\N
+3	true	\N
+4	false	\N
+5	100	\N
+6	10000	\N
+7	1000000000	\N
+8	1152921504606846976	\N
+9	6.18	\N
+10	"abcd"	\N
+11	{}	\N
+12	{"k1":"v31","k2":300}	\N
+13	[]	\N
+14	[123,456]	\N
+15	["abc","def"]	\N
+16	[null,true,false,100,6.18,"abc"]	\N
+17	[{"k1":"v41","k2":400},1,"a",3.14]	\N
+18	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}	false
+26	\N	\N
+27	{"k1":"v1","k2":200}	\N
+28	{"a.b.c":{"k1.a1":"v31","k2":300},"a":"niu"}	\N
+
+-- !select --
+1	\N	\N
+2	null	\N
+3	true	\N
+4	false	\N
+5	100	\N
+6	10000	\N
+7	1000000000	\N
+8	1152921504606846976	\N
+9	6.18	\N
+10	"abcd"	\N
+11	{}	\N
+12	{"k1":"v31","k2":300}	\N
+13	[]	\N
+14	[123,456]	\N
+15	["abc","def"]	\N
+16	[null,true,false,100,6.18,"abc"]	\N
+17	[{"k1":"v41","k2":400},1,"a",3.14]	\N
+18	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}	\N
+26	\N	\N
+27	{"k1":"v1","k2":200}	\N
+28	{"a.b.c":{"k1.a1":"v31","k2":300},"a":"niu"}	\N
+
+-- !jsonb_exists_path_select --
+1	\N	\N
+2	null	true
+3	true	true
+4	false	true
+5	100	true
+6	10000	true
+7	1000000000	true
+8	1152921504606846976	true
+9	6.18	true
+10	"abcd"	true
+11	{}	true
+12	{"k1":"v31","k2":300}	true
+13	[]	true
+14	[123,456]	true
+15	["abc","def"]	true
+16	[null,true,false,100,6.18,"abc"]	true
+17	[{"k1":"v41","k2":400},1,"a",3.14]	true
+18	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}	true
+26	\N	\N
+27	{"k1":"v1","k2":200}	true
+28	{"a.b.c":{"k1.a1":"v31","k2":300},"a":"niu"}	true
+
+-- !select --
+1	\N	\N
+2	null	false
+3	true	false
+4	false	false
+5	100	false
+6	10000	false
+7	1000000000	false
+8	1152921504606846976	false
+9	6.18	false
+10	"abcd"	false
+11	{}	false
+12	{"k1":"v31","k2":300}	true
+13	[]	false
+14	[123,456]	false
+15	["abc","def"]	false
+16	[null,true,false,100,6.18,"abc"]	false
+17	[{"k1":"v41","k2":400},1,"a",3.14]	false
+18	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}	true
+26	\N	\N
+27	{"k1":"v1","k2":200}	true
+28	{"a.b.c":{"k1.a1":"v31","k2":300},"a":"niu"}	false
+
+-- !select --
+1	\N	\N
+2	null	false
+3	true	false
+4	false	false
+5	100	false
+6	10000	false
+7	1000000000	false
+8	1152921504606846976	false
+9	6.18	false
+10	"abcd"	false
+11	{}	false
+12	{"k1":"v31","k2":300}	true
+13	[]	false
+14	[123,456]	false
+15	["abc","def"]	false
+16	[null,true,false,100,6.18,"abc"]	false
+17	[{"k1":"v41","k2":400},1,"a",3.14]	false
+18	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}	true
+26	\N	\N
+27	{"k1":"v1","k2":200}	true
+28	{"a.b.c":{"k1.a1":"v31","k2":300},"a":"niu"}	false
+
+-- !select --
+1	\N	\N
+2	null	false
+3	true	false
+4	false	false
+5	100	false
+6	10000	false
+7	1000000000	false
+8	1152921504606846976	false
+9	6.18	false
+10	"abcd"	false
+11	{}	true
+12	{"k1":"v31","k2":300}	true
+13	[]	false
+14	[123,456]	true
+15	["abc","def"]	true
 16	[null,true,false,100,6.18,"abc"]	true
 17	[{"k1":"v41","k2":400},1,"a",3.14]	true
 18	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}	true
 26	\N	\N
-27	{"k1":"v1","k2":200}	true
-28	{"a.b.c":{"k1.a1":"v31","k2":300},"a":"niu"}	true
+27	{"k1":"v1","k2":200}	true
+28	{"a.b.c":{"k1.a1":"v31","k2":300},"a":"niu"}	true
+
+-- !select --
+1	\N	\N
+2	null	false
+3	true	false
+4	false	false
+5	100	false
+6	10000	false
+7	1000000000	false
+8	1152921504606846976	false
+9	6.18	false
+10	"abcd"	false
+11	{}	false
+12	{"k1":"v31","k2":300}	false
+13	[]	false
+14	[123,456]	true
+15	["abc","def"]	true
+16	[null,true,false,100,6.18,"abc"]	true
+17	[{"k1":"v41","k2":400},1,"a",3.14]	true
+18	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}	false
+26	\N	\N
+27	{"k1":"v1","k2":200}	false
+28	{"a.b.c":{"k1.a1":"v31","k2":300},"a":"niu"}	false
+
+-- !select --
+1	\N	\N
+2	null	false
+3	true	false
+4	false	false
+5	100	false
+6	10000	false
+7	1000000000	false
+8	1152921504606846976	false
+9	6.18	false
+10	"abcd"	false
+11	{}	false
+12	{"k1":"v31","k2":300}	false
+13	[]	false
+14	[123,456]	false
+15	["abc","def"]	false
+16	[null,true,false,100,6.18,"abc"]	true
+17	[{"k1":"v41","k2":400},1,"a",3.14]	true
+18	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}	false
+26	\N	\N
+27	{"k1":"v1","k2":200}	false
+28	{"a.b.c":{"k1.a1":"v31","k2":300},"a":"niu"}	false
+
+-- !select --
+1	\N	\N
+2	null	false
+3	true	false
+4	false	false
+5	100	false
+6	10000	false
+7	1000000000	false
+8	1152921504606846976	false
+9	6.18	false
+10	"abcd"	false
+11	{}	false
+12	{"k1":"v31","k2":300}	false
+13	[]	false
+14	[123,456]	false
+15	["abc","def"]	false
+16	[null,true,false,100,6.18,"abc"]	true
+17	[{"k1":"v41","k2":400},1,"a",3.14]	true
+18	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}	false
+26	\N	\N
+27	{"k1":"v1","k2":200}	false
+28	{"a.b.c":{"k1.a1":"v31","k2":300},"a":"niu"}	false
+
+-- !select --
+1	\N	\N
+2	null	false
+3	true	false
+4	false	false
+5	100	false
+6	10000	false
+7	1000000000	false
+8	1152921504606846976	false
+9	6.18	false
+10	"abcd"	false
+11	{}	false
+12	{"k1":"v31","k2":300}	false
+13	[]	false
+14	[123,456]	false
+15	["abc","def"]	false
+16	[null,true,false,100,6.18,"abc"]	true
+17	[{"k1":"v41","k2":400},1,"a",3.14]	false
+18	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}	false
+26	\N	\N
+27	{"k1":"v1","k2":200}	false
+28	{"a.b.c":{"k1.a1":"v31","k2":300},"a":"niu"}	false
+
+-- !select --
+1	\N	\N
+2	null	false
+3	true	false
+4	false	false
+5	100	false
+6	10000	false
+7	1000000000	false
+8	1152921504606846976	false
+9	6.18	false
+10	"abcd"	false
+11	{}	false
+12	{"k1":"v31","k2":300}	false
+13	[]	false
+14	[123,456]	false
+15	["abc","def"]	false
+16	[null,true,false,100,6.18,"abc"]	true
+17	[{"k1":"v41","k2":400},1,"a",3.14]	false
+18	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}	false
+26	\N	\N
+27	{"k1":"v1","k2":200}	false
+28	{"a.b.c":{"k1.a1":"v31","k2":300},"a":"niu"}	false
 
 -- !select --
 1	\N	\N
@@ -3136,15 +4516,15 @@
 9	6.18	false
 10	"abcd"	false
 11	{}	false
-12	{"k1":"v31","k2":300}	true
+12	{"k1":"v31","k2":300}	false
 13	[]	false
 14	[123,456]	false
 15	["abc","def"]	false
 16	[null,true,false,100,6.18,"abc"]	false
 17	[{"k1":"v41","k2":400},1,"a",3.14]	false
-18	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}	true
+18	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}	false
 26	\N	\N
-27	{"k1":"v1","k2":200}	true
+27	{"k1":"v1","k2":200}	false
 28	{"a.b.c":{"k1.a1":"v31","k2":300},"a":"niu"}	false
 
 -- !select --
@@ -3159,15 +4539,15 @@
 9	6.18	false
 10	"abcd"	false
 11	{}	false
-12	{"k1":"v31","k2":300}	true
+12	{"k1":"v31","k2":300}	false
 13	[]	false
 14	[123,456]	false
 15	["abc","def"]	false
 16	[null,true,false,100,6.18,"abc"]	false
 17	[{"k1":"v41","k2":400},1,"a",3.14]	false
-18	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}	true
+18	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}	false
 26	\N	\N
-27	{"k1":"v1","k2":200}	true
+27	{"k1":"v1","k2":200}	false
 28	{"a.b.c":{"k1.a1":"v31","k2":300},"a":"niu"}	false
 
 -- !select --
@@ -3184,11 +4564,11 @@
 11	{}	false
 12	{"k1":"v31","k2":300}	false
 13	[]	false
-14	[123,456]	true
-15	["abc","def"]	true
-16	[null,true,false,100,6.18,"abc"]	true
-17	[{"k1":"v41","k2":400},1,"a",3.14]	true
-18	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}	false
+14	[123,456]	false
+15	["abc","def"]	false
+16	[null,true,false,100,6.18,"abc"]	false
+17	[{"k1":"v41","k2":400},1,"a",3.14]	false
+18	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}	true
 26	\N	\N
 27	{"k1":"v1","k2":200}	false
 28	{"a.b.c":{"k1.a1":"v31","k2":300},"a":"niu"}	false
@@ -3207,11 +4587,11 @@
 11	{}	false
 12	{"k1":"v31","k2":300}	false
 13	[]	false
-14	[123,456]	true
-15	["abc","def"]	true
-16	[null,true,false,100,6.18,"abc"]	true
-17	[{"k1":"v41","k2":400},1,"a",3.14]	true
-18	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}	false
+14	[123,456]	false
+15	["abc","def"]	false
+16	[null,true,false,100,6.18,"abc"]	false
+17	[{"k1":"v41","k2":400},1,"a",3.14]	false
+18	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}	true
 26	\N	\N
 27	{"k1":"v1","k2":200}	false
 28	{"a.b.c":{"k1.a1":"v31","k2":300},"a":"niu"}	false
@@ -3232,9 +4612,9 @@
 13	[]	false
 14	[123,456]	false
 15	["abc","def"]	false
-16	[null,true,false,100,6.18,"abc"]	true
-17	[{"k1":"v41","k2":400},1,"a",3.14]	true
-18	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}	false
+16	[null,true,false,100,6.18,"abc"]	false
+17	[{"k1":"v41","k2":400},1,"a",3.14]	false
+18	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}	true
 26	\N	\N
 27	{"k1":"v1","k2":200}	false
 28	{"a.b.c":{"k1.a1":"v31","k2":300},"a":"niu"}	false
@@ -3255,9 +4635,9 @@
 13	[]	false
 14	[123,456]	false
 15	["abc","def"]	false
-16	[null,true,false,100,6.18,"abc"]	true
-17	[{"k1":"v41","k2":400},1,"a",3.14]	true
-18	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}	false
+16	[null,true,false,100,6.18,"abc"]	false
+17	[{"k1":"v41","k2":400},1,"a",3.14]	false
+18	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}	true
 26	\N	\N
 27	{"k1":"v1","k2":200}	false
 28	{"a.b.c":{"k1.a1":"v31","k2":300},"a":"niu"}	false
@@ -3278,9 +4658,9 @@
 13	[]	false
 14	[123,456]	false
 15	["abc","def"]	false
-16	[null,true,false,100,6.18,"abc"]	true
+16	[null,true,false,100,6.18,"abc"]	false
 17	[{"k1":"v41","k2":400},1,"a",3.14]	false
-18	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}	false
+18	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}	true
 26	\N	\N
 27	{"k1":"v1","k2":200}	false
 28	{"a.b.c":{"k1.a1":"v31","k2":300},"a":"niu"}	false
@@ -3301,7 +4681,7 @@
 13	[]	false
 14	[123,456]	false
 15	["abc","def"]	false
-16	[null,true,false,100,6.18,"abc"]	true
+16	[null,true,false,100,6.18,"abc"]	false
 17	[{"k1":"v41","k2":400},1,"a",3.14]	false
 18	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}	false
 26	\N	\N
@@ -3349,7 +4729,7 @@
 15	["abc","def"]	false
 16	[null,true,false,100,6.18,"abc"]	false
 17	[{"k1":"v41","k2":400},1,"a",3.14]	false
-18	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}	false
+18	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}	true
 26	\N	\N
 27	{"k1":"v1","k2":200}	false
 28	{"a.b.c":{"k1.a1":"v31","k2":300},"a":"niu"}	false
@@ -3441,7 +4821,7 @@
 15	["abc","def"]	false
 16	[null,true,false,100,6.18,"abc"]	false
 17	[{"k1":"v41","k2":400},1,"a",3.14]	false
-18	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}	true
+18	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}	false
 26	\N	\N
 27	{"k1":"v1","k2":200}	false
 28	{"a.b.c":{"k1.a1":"v31","k2":300},"a":"niu"}	false
@@ -3487,7 +4867,7 @@
 15	["abc","def"]	false
 16	[null,true,false,100,6.18,"abc"]	false
 17	[{"k1":"v41","k2":400},1,"a",3.14]	false
-18	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}	false
+18	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}	true
 26	\N	\N
 27	{"k1":"v1","k2":200}	false
 28	{"a.b.c":{"k1.a1":"v31","k2":300},"a":"niu"}	false
@@ -3515,7 +4895,7 @@
 27	{"k1":"v1","k2":200}	false
 28	{"a.b.c":{"k1.a1":"v31","k2":300},"a":"niu"}	false
 
--- !select --
+-- !jsonb_type_select --
 1	\N	\N
 2	null	null
 3	true	bool
@@ -3595,17 +4975,17 @@
 8	1152921504606846976	\N
 9	6.18	\N
 10	"abcd"	\N
-11	{}	\N
-12	{"k1":"v31","k2":300}	\N
+11	{}	object
+12	{"k1":"v31","k2":300}	object
 13	[]	\N
 14	[123,456]	int
 15	["abc","def"]	string
 16	[null,true,false,100,6.18,"abc"]	null
 17	[{"k1":"v41","k2":400},1,"a",3.14]	object
-18	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}	\N
+18	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}	object
 26	\N	\N
-27	{"k1":"v1","k2":200}	\N
-28	{"a.b.c":{"k1.a1":"v31","k2":300},"a":"niu"}	\N
+27	{"k1":"v1","k2":200}	object
+28	{"a.b.c":{"k1.a1":"v31","k2":300},"a":"niu"}	object
 
 -- !select --
 1	\N	\N
@@ -3932,6 +5312,190 @@
 -- !select --
 1	\N	\N
 2	null	\N
+3	true	\N
+4	false	\N
+5	100	\N
+6	10000	\N
+7	1000000000	\N
+8	1152921504606846976	\N
+9	6.18	\N
+10	"abcd"	\N
+11	{}	\N
+12	{"k1":"v31","k2":300}	\N
+13	[]	\N
+14	[123,456]	\N
+15	["abc","def"]	\N
+16	[null,true,false,100,6.18,"abc"]	\N
+17	[{"k1":"v41","k2":400},1,"a",3.14]	\N
+18	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}	double
+26	\N	\N
+27	{"k1":"v1","k2":200}	\N
+28	{"a.b.c":{"k1.a1":"v31","k2":300},"a":"niu"}	\N
+
+-- !select --
+1	\N	\N
+2	null	\N
+3	true	\N
+4	false	\N
+5	100	\N
+6	10000	\N
+7	1000000000	\N
+8	1152921504606846976	\N
+9	6.18	\N
+10	"abcd"	\N
+11	{}	\N
+12	{"k1":"v31","k2":300}	\N
+13	[]	\N
+14	[123,456]	\N
+15	["abc","def"]	\N
+16	[null,true,false,100,6.18,"abc"]	\N
+17	[{"k1":"v41","k2":400},1,"a",3.14]	\N
+18	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}	double
+26	\N	\N
+27	{"k1":"v1","k2":200}	\N
+28	{"a.b.c":{"k1.a1":"v31","k2":300},"a":"niu"}	\N
+
+-- !select --
+1	\N	\N
+2	null	\N
+3	true	\N
+4	false	\N
+5	100	\N
+6	10000	\N
+7	1000000000	\N
+8	1152921504606846976	\N
+9	6.18	\N
+10	"abcd"	\N
+11	{}	\N
+12	{"k1":"v31","k2":300}	\N
+13	[]	\N
+14	[123,456]	\N
+15	["abc","def"]	\N
+16	[null,true,false,100,6.18,"abc"]	\N
+17	[{"k1":"v41","k2":400},1,"a",3.14]	\N
+18	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}	string
+26	\N	\N
+27	{"k1":"v1","k2":200}	\N
+28	{"a.b.c":{"k1.a1":"v31","k2":300},"a":"niu"}	\N
+
+-- !select --
+1	\N	\N
+2	null	\N
+3	true	\N
+4	false	\N
+5	100	\N
+6	10000	\N
+7	1000000000	\N
+8	1152921504606846976	\N
+9	6.18	\N
+10	"abcd"	\N
+11	{}	\N
+12	{"k1":"v31","k2":300}	\N
+13	[]	\N
+14	[123,456]	\N
+15	["abc","def"]	\N
+16	[null,true,false,100,6.18,"abc"]	\N
+17	[{"k1":"v41","k2":400},1,"a",3.14]	\N
+18	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}	int
+26	\N	\N
+27	{"k1":"v1","k2":200}	\N
+28	{"a.b.c":{"k1.a1":"v31","k2":300},"a":"niu"}	\N
+
+-- !select --
+1	\N	\N
+2	null	\N
+3	true	\N
+4	false	\N
+5	100	\N
+6	10000	\N
+7	1000000000	\N
+8	1152921504606846976	\N
+9	6.18	\N
+10	"abcd"	\N
+11	{}	\N
+12	{"k1":"v31","k2":300}	\N
+13	[]	\N
+14	[123,456]	\N
+15	["abc","def"]	\N
+16	[null,true,false,100,6.18,"abc"]	\N
+17	[{"k1":"v41","k2":400},1,"a",3.14]	\N
+18	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}	\N
+26	\N	\N
+27	{"k1":"v1","k2":200}	\N
+28	{"a.b.c":{"k1.a1":"v31","k2":300},"a":"niu"}	\N
+
+-- !select --
+1	\N	\N
+2	null	\N
+3	true	\N
+4	false	\N
+5	100	\N
+6	10000	\N
+7	1000000000	\N
+8	1152921504606846976	\N
+9	6.18	\N
+10	"abcd"	\N
+11	{}	\N
+12	{"k1":"v31","k2":300}	\N
+13	[]	\N
+14	[123,456]	\N
+15	["abc","def"]	\N
+16	[null,true,false,100,6.18,"abc"]	\N
+17	[{"k1":"v41","k2":400},1,"a",3.14]	\N
+18	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}	object
+26	\N	\N
+27	{"k1":"v1","k2":200}	\N
+28	{"a.b.c":{"k1.a1":"v31","k2":300},"a":"niu"}	\N
+
+-- !select --
+1	\N	\N
+2	null	\N
+3	true	\N
+4	false	\N
+5	100	\N
+6	10000	\N
+7	1000000000	\N
+8	1152921504606846976	\N
+9	6.18	\N
+10	"abcd"	\N
+11	{}	\N
+12	{"k1":"v31","k2":300}	\N
+13	[]	\N
+14	[123,456]	\N
+15	["abc","def"]	\N
+16	[null,true,false,100,6.18,"abc"]	\N
+17	[{"k1":"v41","k2":400},1,"a",3.14]	\N
+18	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}	double
+26	\N	\N
+27	{"k1":"v1","k2":200}	\N
+28	{"a.b.c":{"k1.a1":"v31","k2":300},"a":"niu"}	\N
+
+-- !select --
+1	\N	\N
+2	null	\N
+3	true	\N
+4	false	\N
+5	100	\N
+6	10000	\N
+7	1000000000	\N
+8	1152921504606846976	\N
+9	6.18	\N
+10	"abcd"	\N
+11	{}	\N
+12	{"k1":"v31","k2":300}	\N
+13	[]	\N
+14	[123,456]	\N
+15	["abc","def"]	\N
+16	[null,true,false,100,6.18,"abc"]	\N
+17	[{"k1":"v41","k2":400},1,"a",3.14]	\N
+18	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}	\N
+26	\N	\N
+27	{"k1":"v1","k2":200}	\N
+28	{"a.b.c":{"k1.a1":"v31","k2":300},"a":"niu"}	\N
+
+-- !cast_from_select --
+1	\N	\N
+2	null	\N
 3	true	true
 4	false	false
 5	100	\N
@@ -4067,7 +5631,7 @@
 27	{"k1":"v1","k2":200}	{"k1":"v1","k2":200}
 28	{"a.b.c":{"k1.a1":"v31","k2":300},"a":"niu"}	{"a.b.c":{"k1.a1":"v31","k2":300},"a":"niu"}
 
--- !select --
+-- !cast_to_select --
 1	\N	\N
 2	null	\N
 3	true	true
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 01bc0b3de7..04946beaa1 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
@@ -42,7 +42,7 @@
 27	{"k1":"v1","k2":200}
 28	{"a.b.c":{"k1.a1":"v31","k2":300},"a":"niu"}
 
--- !select --
+-- !jsonb_extract_select --
 1	\N	\N
 2	null	null
 3	true	true
@@ -191,17 +191,17 @@
 8	1152921504606846976	\N
 9	6.18	\N
 10	"abcd"	\N
-11	{}	\N
-12	{"k1":"v31","k2":300}	\N
+11	{}	{}
+12	{"k1":"v31","k2":300}	{"k1":"v31","k2":300}
 13	[]	\N
 14	[123,456]	123
 15	["abc","def"]	"abc"
 16	[null,true,false,100,6.18,"abc"]	null
 17	[{"k1":"v41","k2":400},1,"a",3.14]	{"k1":"v41","k2":400}
-18	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}	\N
+18	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}
 26	\N	\N
-27	{"k1":"v1","k2":200}	\N
-28	{"a.b.c":{"k1.a1":"v31","k2":300},"a":"niu"}	\N
+27	{"k1":"v1","k2":200}	{"k1":"v1","k2":200}
+28	{"a.b.c":{"k1.a1":"v31","k2":300},"a":"niu"}	{"a.b.c":{"k1.a1":"v31","k2":300},"a":"niu"}
 
 -- !select --
 1	\N	\N
@@ -548,6 +548,29 @@
 27	{"k1":"v1","k2":200}	\N
 28	{"a.b.c":{"k1.a1":"v31","k2":300},"a":"niu"}	\N
 
+-- !select --
+1	\N	\N
+2	null	\N
+3	true	\N
+4	false	\N
+5	100	\N
+6	10000	\N
+7	1000000000	\N
+8	1152921504606846976	\N
+9	6.18	\N
+10	"abcd"	\N
+11	{}	\N
+12	{"k1":"v31","k2":300}	\N
+13	[]	\N
+14	[123,456]	\N
+15	["abc","def"]	\N
+16	[null,true,false,100,6.18,"abc"]	\N
+17	[{"k1":"v41","k2":400},1,"a",3.14]	\N
+18	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}	3.14
+26	\N	\N
+27	{"k1":"v1","k2":200}	\N
+28	{"a.b.c":{"k1.a1":"v31","k2":300},"a":"niu"}	\N
+
 -- !select --
 1	\N	\N
 2	null	\N
@@ -619,6 +642,75 @@
 
 -- !select --
 1	\N	\N
+2	null	\N
+3	true	\N
+4	false	\N
+5	100	\N
+6	10000	\N
+7	1000000000	\N
+8	1152921504606846976	\N
+9	6.18	\N
+10	"abcd"	\N
+11	{}	\N
+12	{"k1":"v31","k2":300}	\N
+13	[]	\N
+14	[123,456]	\N
+15	["abc","def"]	\N
+16	[null,true,false,100,6.18,"abc"]	\N
+17	[{"k1":"v41","k2":400},1,"a",3.14]	\N
+18	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}	{"k1":"v41","k2":400}
+26	\N	\N
+27	{"k1":"v1","k2":200}	\N
+28	{"a.b.c":{"k1.a1":"v31","k2":300},"a":"niu"}	\N
+
+-- !select --
+1	\N	\N
+2	null	\N
+3	true	\N
+4	false	\N
+5	100	\N
+6	10000	\N
+7	1000000000	\N
+8	1152921504606846976	\N
+9	6.18	\N
+10	"abcd"	\N
+11	{}	\N
+12	{"k1":"v31","k2":300}	\N
+13	[]	\N
+14	[123,456]	\N
+15	["abc","def"]	\N
+16	[null,true,false,100,6.18,"abc"]	\N
+17	[{"k1":"v41","k2":400},1,"a",3.14]	\N
+18	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}	3.14
+26	\N	\N
+27	{"k1":"v1","k2":200}	\N
+28	{"a.b.c":{"k1.a1":"v31","k2":300},"a":"niu"}	\N
+
+-- !select --
+1	\N	\N
+2	null	\N
+3	true	\N
+4	false	\N
+5	100	\N
+6	10000	\N
+7	1000000000	\N
+8	1152921504606846976	\N
+9	6.18	\N
+10	"abcd"	\N
+11	{}	\N
+12	{"k1":"v31","k2":300}	\N
+13	[]	\N
+14	[123,456]	\N
+15	["abc","def"]	\N
+16	[null,true,false,100,6.18,"abc"]	\N
+17	[{"k1":"v41","k2":400},1,"a",3.14]	\N
+18	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}	\N
+26	\N	\N
+27	{"k1":"v1","k2":200}	\N
+28	{"a.b.c":{"k1.a1":"v31","k2":300},"a":"niu"}	\N
+
+-- !jsonb_extract_string_select --
+1	\N	\N
 2	null	null
 3	true	true
 4	false	false
@@ -697,17 +789,17 @@
 8	1152921504606846976	\N
 9	6.18	\N
 10	"abcd"	\N
-11	{}	\N
-12	{"k1":"v31","k2":300}	\N
+11	{}	{}
+12	{"k1":"v31","k2":300}	{"k1":"v31","k2":300}
 13	[]	\N
 14	[123,456]	123
 15	["abc","def"]	abc
 16	[null,true,false,100,6.18,"abc"]	null
 17	[{"k1":"v41","k2":400},1,"a",3.14]	{"k1":"v41","k2":400}
-18	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}	\N
+18	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}
 26	\N	\N
-27	{"k1":"v1","k2":200}	\N
-28	{"a.b.c":{"k1.a1":"v31","k2":300},"a":"niu"}	\N
+27	{"k1":"v1","k2":200}	{"k1":"v1","k2":200}
+28	{"a.b.c":{"k1.a1":"v31","k2":300},"a":"niu"}	{"a.b.c":{"k1.a1":"v31","k2":300},"a":"niu"}
 
 -- !select --
 1	\N	\N
@@ -1036,9 +1128,9 @@
 2	null	\N
 3	true	\N
 4	false	\N
-5	100	100
-6	10000	10000
-7	1000000000	1000000000
+5	100	\N
+6	10000	\N
+7	1000000000	\N
 8	1152921504606846976	\N
 9	6.18	\N
 10	"abcd"	\N
@@ -1049,7 +1141,7 @@
 15	["abc","def"]	\N
 16	[null,true,false,100,6.18,"abc"]	\N
 17	[{"k1":"v41","k2":400},1,"a",3.14]	\N
-18	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}	\N
+18	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}	3.14
 26	\N	\N
 27	{"k1":"v1","k2":200}	\N
 28	{"a.b.c":{"k1.a1":"v31","k2":300},"a":"niu"}	\N
@@ -1072,7 +1164,7 @@
 15	["abc","def"]	\N
 16	[null,true,false,100,6.18,"abc"]	\N
 17	[{"k1":"v41","k2":400},1,"a",3.14]	\N
-18	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}	\N
+18	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}	3.14
 26	\N	\N
 27	{"k1":"v1","k2":200}	\N
 28	{"a.b.c":{"k1.a1":"v31","k2":300},"a":"niu"}	\N
@@ -1089,15 +1181,15 @@
 9	6.18	\N
 10	"abcd"	\N
 11	{}	\N
-12	{"k1":"v31","k2":300}	300
+12	{"k1":"v31","k2":300}	\N
 13	[]	\N
 14	[123,456]	\N
 15	["abc","def"]	\N
 16	[null,true,false,100,6.18,"abc"]	\N
 17	[{"k1":"v41","k2":400},1,"a",3.14]	\N
-18	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}	300
+18	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}	a
 26	\N	\N
-27	{"k1":"v1","k2":200}	200
+27	{"k1":"v1","k2":200}	\N
 28	{"a.b.c":{"k1.a1":"v31","k2":300},"a":"niu"}	\N
 
 -- !select --
@@ -1114,11 +1206,11 @@
 11	{}	\N
 12	{"k1":"v31","k2":300}	\N
 13	[]	\N
-14	[123,456]	123
+14	[123,456]	\N
 15	["abc","def"]	\N
 16	[null,true,false,100,6.18,"abc"]	\N
 17	[{"k1":"v41","k2":400},1,"a",3.14]	\N
-18	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}	\N
+18	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}	1
 26	\N	\N
 27	{"k1":"v1","k2":200}	\N
 28	{"a.b.c":{"k1.a1":"v31","k2":300},"a":"niu"}	\N
@@ -1137,10 +1229,10 @@
 11	{}	\N
 12	{"k1":"v31","k2":300}	\N
 13	[]	\N
-14	[123,456]	456
+14	[123,456]	\N
 15	["abc","def"]	\N
 16	[null,true,false,100,6.18,"abc"]	\N
-17	[{"k1":"v41","k2":400},1,"a",3.14]	1
+17	[{"k1":"v41","k2":400},1,"a",3.14]	\N
 18	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}	\N
 26	\N	\N
 27	{"k1":"v1","k2":200}	\N
@@ -1164,7 +1256,7 @@
 15	["abc","def"]	\N
 16	[null,true,false,100,6.18,"abc"]	\N
 17	[{"k1":"v41","k2":400},1,"a",3.14]	\N
-18	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}	\N
+18	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}	{"k1":"v41","k2":400}
 26	\N	\N
 27	{"k1":"v1","k2":200}	\N
 28	{"a.b.c":{"k1.a1":"v31","k2":300},"a":"niu"}	\N
@@ -1185,9 +1277,9 @@
 13	[]	\N
 14	[123,456]	\N
 15	["abc","def"]	\N
-16	[null,true,false,100,6.18,"abc"]	100
+16	[null,true,false,100,6.18,"abc"]	\N
 17	[{"k1":"v41","k2":400},1,"a",3.14]	\N
-18	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}	\N
+18	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}	3.14
 26	\N	\N
 27	{"k1":"v1","k2":200}	\N
 28	{"a.b.c":{"k1.a1":"v31","k2":300},"a":"niu"}	\N
@@ -1215,14 +1307,14 @@
 27	{"k1":"v1","k2":200}	\N
 28	{"a.b.c":{"k1.a1":"v31","k2":300},"a":"niu"}	\N
 
--- !select --
+-- !jsonb_extract_int_select --
 1	\N	\N
 2	null	\N
 3	true	\N
 4	false	\N
-5	100	\N
-6	10000	\N
-7	1000000000	\N
+5	100	100
+6	10000	10000
+7	1000000000	1000000000
 8	1152921504606846976	\N
 9	6.18	\N
 10	"abcd"	\N
@@ -1273,15 +1365,15 @@
 9	6.18	\N
 10	"abcd"	\N
 11	{}	\N
-12	{"k1":"v31","k2":300}	\N
+12	{"k1":"v31","k2":300}	300
 13	[]	\N
 14	[123,456]	\N
 15	["abc","def"]	\N
 16	[null,true,false,100,6.18,"abc"]	\N
 17	[{"k1":"v41","k2":400},1,"a",3.14]	\N
-18	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}	\N
+18	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}	300
 26	\N	\N
-27	{"k1":"v1","k2":200}	\N
+27	{"k1":"v1","k2":200}	200
 28	{"a.b.c":{"k1.a1":"v31","k2":300},"a":"niu"}	\N
 
 -- !select --
@@ -1298,7 +1390,7 @@
 11	{}	\N
 12	{"k1":"v31","k2":300}	\N
 13	[]	\N
-14	[123,456]	\N
+14	[123,456]	123
 15	["abc","def"]	\N
 16	[null,true,false,100,6.18,"abc"]	\N
 17	[{"k1":"v41","k2":400},1,"a",3.14]	\N
@@ -1321,10 +1413,10 @@
 11	{}	\N
 12	{"k1":"v31","k2":300}	\N
 13	[]	\N
-14	[123,456]	\N
+14	[123,456]	456
 15	["abc","def"]	\N
 16	[null,true,false,100,6.18,"abc"]	\N
-17	[{"k1":"v41","k2":400},1,"a",3.14]	\N
+17	[{"k1":"v41","k2":400},1,"a",3.14]	1
 18	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}	\N
 26	\N	\N
 27	{"k1":"v1","k2":200}	\N
@@ -1348,7 +1440,7 @@
 15	["abc","def"]	\N
 16	[null,true,false,100,6.18,"abc"]	\N
 17	[{"k1":"v41","k2":400},1,"a",3.14]	\N
-18	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}	1
+18	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}	\N
 26	\N	\N
 27	{"k1":"v1","k2":200}	\N
 28	{"a.b.c":{"k1.a1":"v31","k2":300},"a":"niu"}	\N
@@ -1369,7 +1461,7 @@
 13	[]	\N
 14	[123,456]	\N
 15	["abc","def"]	\N
-16	[null,true,false,100,6.18,"abc"]	\N
+16	[null,true,false,100,6.18,"abc"]	100
 17	[{"k1":"v41","k2":400},1,"a",3.14]	\N
 18	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}	\N
 26	\N	\N
@@ -1450,10 +1542,10 @@
 2	null	\N
 3	true	\N
 4	false	\N
-5	100	100
-6	10000	10000
-7	1000000000	1000000000
-8	1152921504606846976	1152921504606846976
+5	100	\N
+6	10000	\N
+7	1000000000	\N
+8	1152921504606846976	\N
 9	6.18	\N
 10	"abcd"	\N
 11	{}	\N
@@ -1503,15 +1595,15 @@
 9	6.18	\N
 10	"abcd"	\N
 11	{}	\N
-12	{"k1":"v31","k2":300}	300
+12	{"k1":"v31","k2":300}	\N
 13	[]	\N
 14	[123,456]	\N
 15	["abc","def"]	\N
 16	[null,true,false,100,6.18,"abc"]	\N
 17	[{"k1":"v41","k2":400},1,"a",3.14]	\N
-18	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}	300
+18	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}	\N
 26	\N	\N
-27	{"k1":"v1","k2":200}	200
+27	{"k1":"v1","k2":200}	\N
 28	{"a.b.c":{"k1.a1":"v31","k2":300},"a":"niu"}	\N
 
 -- !select --
@@ -1528,11 +1620,11 @@
 11	{}	\N
 12	{"k1":"v31","k2":300}	\N
 13	[]	\N
-14	[123,456]	123
+14	[123,456]	\N
 15	["abc","def"]	\N
 16	[null,true,false,100,6.18,"abc"]	\N
 17	[{"k1":"v41","k2":400},1,"a",3.14]	\N
-18	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}	\N
+18	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}	1
 26	\N	\N
 27	{"k1":"v1","k2":200}	\N
 28	{"a.b.c":{"k1.a1":"v31","k2":300},"a":"niu"}	\N
@@ -1551,10 +1643,10 @@
 11	{}	\N
 12	{"k1":"v31","k2":300}	\N
 13	[]	\N
-14	[123,456]	456
+14	[123,456]	\N
 15	["abc","def"]	\N
 16	[null,true,false,100,6.18,"abc"]	\N
-17	[{"k1":"v41","k2":400},1,"a",3.14]	1
+17	[{"k1":"v41","k2":400},1,"a",3.14]	\N
 18	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}	\N
 26	\N	\N
 27	{"k1":"v1","k2":200}	\N
@@ -1599,7 +1691,7 @@
 13	[]	\N
 14	[123,456]	\N
 15	["abc","def"]	\N
-16	[null,true,false,100,6.18,"abc"]	100
+16	[null,true,false,100,6.18,"abc"]	\N
 17	[{"k1":"v41","k2":400},1,"a",3.14]	\N
 18	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}	\N
 26	\N	\N
@@ -1716,7 +1808,7 @@
 15	["abc","def"]	\N
 16	[null,true,false,100,6.18,"abc"]	\N
 17	[{"k1":"v41","k2":400},1,"a",3.14]	\N
-18	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}	\N
+18	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}	1
 26	\N	\N
 27	{"k1":"v1","k2":200}	\N
 28	{"a.b.c":{"k1.a1":"v31","k2":300},"a":"niu"}	\N
@@ -1762,7 +1854,7 @@
 15	["abc","def"]	\N
 16	[null,true,false,100,6.18,"abc"]	\N
 17	[{"k1":"v41","k2":400},1,"a",3.14]	\N
-18	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}	1
+18	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}	\N
 26	\N	\N
 27	{"k1":"v1","k2":200}	\N
 28	{"a.b.c":{"k1.a1":"v31","k2":300},"a":"niu"}	\N
@@ -1813,15 +1905,15 @@
 27	{"k1":"v1","k2":200}	\N
 28	{"a.b.c":{"k1.a1":"v31","k2":300},"a":"niu"}	\N
 
--- !select --
+-- !jsonb_extract_bigint_select --
 1	\N	\N
 2	null	\N
 3	true	\N
 4	false	\N
-5	100	\N
-6	10000	\N
-7	1000000000	\N
-8	1152921504606846976	\N
+5	100	100
+6	10000	10000
+7	1000000000	1000000000
+8	1152921504606846976	1152921504606846976
 9	6.18	\N
 10	"abcd"	\N
 11	{}	\N
@@ -1864,22 +1956,22 @@
 2	null	\N
 3	true	\N
 4	false	\N
-5	100	100.0
-6	10000	10000.0
-7	1000000000	1.0E9
-8	1152921504606846976	1.15292150460684698E18
-9	6.18	6.18
+5	100	\N
+6	10000	\N
+7	1000000000	\N
+8	1152921504606846976	\N
+9	6.18	\N
 10	"abcd"	\N
 11	{}	\N
-12	{"k1":"v31","k2":300}	\N
+12	{"k1":"v31","k2":300}	300
 13	[]	\N
 14	[123,456]	\N
 15	["abc","def"]	\N
 16	[null,true,false,100,6.18,"abc"]	\N
 17	[{"k1":"v41","k2":400},1,"a",3.14]	\N
-18	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}	\N
+18	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}	300
 26	\N	\N
-27	{"k1":"v1","k2":200}	\N
+27	{"k1":"v1","k2":200}	200
 28	{"a.b.c":{"k1.a1":"v31","k2":300},"a":"niu"}	\N
 
 -- !select --
@@ -1896,7 +1988,7 @@
 11	{}	\N
 12	{"k1":"v31","k2":300}	\N
 13	[]	\N
-14	[123,456]	\N
+14	[123,456]	123
 15	["abc","def"]	\N
 16	[null,true,false,100,6.18,"abc"]	\N
 17	[{"k1":"v41","k2":400},1,"a",3.14]	\N
@@ -1917,15 +2009,15 @@
 9	6.18	\N
 10	"abcd"	\N
 11	{}	\N
-12	{"k1":"v31","k2":300}	300.0
+12	{"k1":"v31","k2":300}	\N
 13	[]	\N
-14	[123,456]	\N
+14	[123,456]	456
 15	["abc","def"]	\N
 16	[null,true,false,100,6.18,"abc"]	\N
-17	[{"k1":"v41","k2":400},1,"a",3.14]	\N
-18	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}	300.0
+17	[{"k1":"v41","k2":400},1,"a",3.14]	1
+18	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}	\N
 26	\N	\N
-27	{"k1":"v1","k2":200}	200.0
+27	{"k1":"v1","k2":200}	\N
 28	{"a.b.c":{"k1.a1":"v31","k2":300},"a":"niu"}	\N
 
 -- !select --
@@ -1942,7 +2034,7 @@
 11	{}	\N
 12	{"k1":"v31","k2":300}	\N
 13	[]	\N
-14	[123,456]	123.0
+14	[123,456]	\N
 15	["abc","def"]	\N
 16	[null,true,false,100,6.18,"abc"]	\N
 17	[{"k1":"v41","k2":400},1,"a",3.14]	\N
@@ -1965,10 +2057,10 @@
 11	{}	\N
 12	{"k1":"v31","k2":300}	\N
 13	[]	\N
-14	[123,456]	456.0
+14	[123,456]	\N
 15	["abc","def"]	\N
-16	[null,true,false,100,6.18,"abc"]	\N
-17	[{"k1":"v41","k2":400},1,"a",3.14]	1.0
+16	[null,true,false,100,6.18,"abc"]	100
+17	[{"k1":"v41","k2":400},1,"a",3.14]	\N
 18	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}	\N
 26	\N	\N
 27	{"k1":"v1","k2":200}	\N
@@ -2013,8 +2105,8 @@
 13	[]	\N
 14	[123,456]	\N
 15	["abc","def"]	\N
-16	[null,true,false,100,6.18,"abc"]	100.0
-17	[{"k1":"v41","k2":400},1,"a",3.14]	3.14
+16	[null,true,false,100,6.18,"abc"]	\N
+17	[{"k1":"v41","k2":400},1,"a",3.14]	\N
 18	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}	\N
 26	\N	\N
 27	{"k1":"v1","k2":200}	\N
@@ -2036,7 +2128,7 @@
 13	[]	\N
 14	[123,456]	\N
 15	["abc","def"]	\N
-16	[null,true,false,100,6.18,"abc"]	6.18
+16	[null,true,false,100,6.18,"abc"]	\N
 17	[{"k1":"v41","k2":400},1,"a",3.14]	\N
 18	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}	\N
 26	\N	\N
@@ -2130,7 +2222,7 @@
 15	["abc","def"]	\N
 16	[null,true,false,100,6.18,"abc"]	\N
 17	[{"k1":"v41","k2":400},1,"a",3.14]	\N
-18	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}	\N
+18	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}	1
 26	\N	\N
 27	{"k1":"v1","k2":200}	\N
 28	{"a.b.c":{"k1.a1":"v31","k2":300},"a":"niu"}	\N
@@ -2176,7 +2268,7 @@
 15	["abc","def"]	\N
 16	[null,true,false,100,6.18,"abc"]	\N
 17	[{"k1":"v41","k2":400},1,"a",3.14]	\N
-18	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}	1.0
+18	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}	\N
 26	\N	\N
 27	{"k1":"v1","k2":200}	\N
 28	{"a.b.c":{"k1.a1":"v31","k2":300},"a":"niu"}	\N
@@ -2222,7 +2314,7 @@
 15	["abc","def"]	\N
 16	[null,true,false,100,6.18,"abc"]	\N
 17	[{"k1":"v41","k2":400},1,"a",3.14]	\N
-18	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}	3.14
+18	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}	\N
 26	\N	\N
 27	{"k1":"v1","k2":200}	\N
 28	{"a.b.c":{"k1.a1":"v31","k2":300},"a":"niu"}	\N
@@ -2276,8 +2368,8 @@
 -- !select --
 1	\N	\N
 2	null	\N
-3	true	true
-4	false	false
+3	true	\N
+4	false	\N
 5	100	\N
 6	10000	\N
 7	1000000000	\N
@@ -2314,7 +2406,7 @@
 15	["abc","def"]	\N
 16	[null,true,false,100,6.18,"abc"]	\N
 17	[{"k1":"v41","k2":400},1,"a",3.14]	\N
-18	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}	\N
+18	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}	1
 26	\N	\N
 27	{"k1":"v1","k2":200}	\N
 28	{"a.b.c":{"k1.a1":"v31","k2":300},"a":"niu"}	\N
@@ -2381,7 +2473,7 @@
 13	[]	\N
 14	[123,456]	\N
 15	["abc","def"]	\N
-16	[null,true,false,100,6.18,"abc"]	true
+16	[null,true,false,100,6.18,"abc"]	\N
 17	[{"k1":"v41","k2":400},1,"a",3.14]	\N
 18	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}	\N
 26	\N	\N
@@ -2404,7 +2496,30 @@
 13	[]	\N
 14	[123,456]	\N
 15	["abc","def"]	\N
-16	[null,true,false,100,6.18,"abc"]	false
+16	[null,true,false,100,6.18,"abc"]	\N
+17	[{"k1":"v41","k2":400},1,"a",3.14]	\N
+18	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}	\N
+26	\N	\N
+27	{"k1":"v1","k2":200}	\N
+28	{"a.b.c":{"k1.a1":"v31","k2":300},"a":"niu"}	\N
+
+-- !jsonb_extract_double_select --
+1	\N	\N
+2	null	\N
+3	true	\N
+4	false	\N
+5	100	100.0
+6	10000	10000.0
+7	1000000000	1.0E9
+8	1152921504606846976	1.15292150460684698E18
+9	6.18	6.18
+10	"abcd"	\N
+11	{}	\N
+12	{"k1":"v31","k2":300}	\N
+13	[]	\N
+14	[123,456]	\N
+15	["abc","def"]	\N
+16	[null,true,false,100,6.18,"abc"]	\N
 17	[{"k1":"v41","k2":400},1,"a",3.14]	\N
 18	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}	\N
 26	\N	\N
@@ -2446,12 +2561,58 @@
 9	6.18	\N
 10	"abcd"	\N
 11	{}	\N
-12	{"k1":"v31","k2":300}	\N
+12	{"k1":"v31","k2":300}	300.0
 13	[]	\N
 14	[123,456]	\N
 15	["abc","def"]	\N
 16	[null,true,false,100,6.18,"abc"]	\N
 17	[{"k1":"v41","k2":400},1,"a",3.14]	\N
+18	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}	300.0
+26	\N	\N
+27	{"k1":"v1","k2":200}	200.0
+28	{"a.b.c":{"k1.a1":"v31","k2":300},"a":"niu"}	\N
+
+-- !select --
+1	\N	\N
+2	null	\N
+3	true	\N
+4	false	\N
+5	100	\N
+6	10000	\N
+7	1000000000	\N
+8	1152921504606846976	\N
+9	6.18	\N
+10	"abcd"	\N
+11	{}	\N
+12	{"k1":"v31","k2":300}	\N
+13	[]	\N
+14	[123,456]	123.0
+15	["abc","def"]	\N
+16	[null,true,false,100,6.18,"abc"]	\N
+17	[{"k1":"v41","k2":400},1,"a",3.14]	\N
+18	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}	\N
+26	\N	\N
+27	{"k1":"v1","k2":200}	\N
+28	{"a.b.c":{"k1.a1":"v31","k2":300},"a":"niu"}	\N
+
+-- !select --
+1	\N	\N
+2	null	\N
+3	true	\N
+4	false	\N
+5	100	\N
+6	10000	\N
+7	1000000000	\N
+8	1152921504606846976	\N
+9	6.18	\N
+10	"abcd"	\N
+11	{}	\N
+12	{"k1":"v31","k2":300}	\N
+13	[]	\N
+14	[123,456]	456.0
+15	["abc","def"]	\N
+16	[null,true,false,100,6.18,"abc"]	\N
+17	[{"k1":"v41","k2":400},1,"a",3.14]	1.0
 18	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}	\N
 26	\N	\N
 27	{"k1":"v1","k2":200}	\N
@@ -2496,7 +2657,30 @@
 13	[]	\N
 14	[123,456]	\N
 15	["abc","def"]	\N
-16	[null,true,false,100,6.18,"abc"]	\N
+16	[null,true,false,100,6.18,"abc"]	100.0
+17	[{"k1":"v41","k2":400},1,"a",3.14]	3.14
+18	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}	\N
+26	\N	\N
+27	{"k1":"v1","k2":200}	\N
+28	{"a.b.c":{"k1.a1":"v31","k2":300},"a":"niu"}	\N
+
+-- !select --
+1	\N	\N
+2	null	\N
+3	true	\N
+4	false	\N
+5	100	\N
+6	10000	\N
+7	1000000000	\N
+8	1152921504606846976	\N
+9	6.18	\N
+10	"abcd"	\N
+11	{}	\N
+12	{"k1":"v31","k2":300}	\N
+13	[]	\N
+14	[123,456]	\N
+15	["abc","def"]	\N
+16	[null,true,false,100,6.18,"abc"]	6.18
 17	[{"k1":"v41","k2":400},1,"a",3.14]	\N
 18	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}	\N
 26	\N	\N
@@ -2636,7 +2820,7 @@
 15	["abc","def"]	\N
 16	[null,true,false,100,6.18,"abc"]	\N
 17	[{"k1":"v41","k2":400},1,"a",3.14]	\N
-18	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}	\N
+18	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}	1.0
 26	\N	\N
 27	{"k1":"v1","k2":200}	\N
 28	{"a.b.c":{"k1.a1":"v31","k2":300},"a":"niu"}	\N
@@ -2664,6 +2848,29 @@
 27	{"k1":"v1","k2":200}	\N
 28	{"a.b.c":{"k1.a1":"v31","k2":300},"a":"niu"}	\N
 
+-- !select --
+1	\N	\N
+2	null	\N
+3	true	\N
+4	false	\N
+5	100	\N
+6	10000	\N
+7	1000000000	\N
+8	1152921504606846976	\N
+9	6.18	\N
+10	"abcd"	\N
+11	{}	\N
+12	{"k1":"v31","k2":300}	\N
+13	[]	\N
+14	[123,456]	\N
+15	["abc","def"]	\N
+16	[null,true,false,100,6.18,"abc"]	\N
+17	[{"k1":"v41","k2":400},1,"a",3.14]	\N
+18	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}	3.14
+26	\N	\N
+27	{"k1":"v1","k2":200}	\N
+28	{"a.b.c":{"k1.a1":"v31","k2":300},"a":"niu"}	\N
+
 -- !select --
 1	\N	\N
 2	null	\N
@@ -2689,26 +2896,26 @@
 
 -- !select --
 1	\N	\N
-2	null	true
-3	true	false
-4	false	false
-5	100	false
-6	10000	false
-7	1000000000	false
-8	1152921504606846976	false
-9	6.18	false
-10	"abcd"	false
-11	{}	false
-12	{"k1":"v31","k2":300}	false
-13	[]	false
-14	[123,456]	false
-15	["abc","def"]	false
-16	[null,true,false,100,6.18,"abc"]	false
-17	[{"k1":"v41","k2":400},1,"a",3.14]	false
-18	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}	false
+2	null	\N
+3	true	\N
+4	false	\N
+5	100	\N
+6	10000	\N
+7	1000000000	\N
+8	1152921504606846976	\N
+9	6.18	\N
+10	"abcd"	\N
+11	{}	\N
+12	{"k1":"v31","k2":300}	\N
+13	[]	\N
+14	[123,456]	\N
+15	["abc","def"]	\N
+16	[null,true,false,100,6.18,"abc"]	\N
+17	[{"k1":"v41","k2":400},1,"a",3.14]	\N
+18	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}	\N
 26	\N	\N
-27	{"k1":"v1","k2":200}	false
-28	{"a.b.c":{"k1.a1":"v31","k2":300},"a":"niu"}	false
+27	{"k1":"v1","k2":200}	\N
+28	{"a.b.c":{"k1.a1":"v31","k2":300},"a":"niu"}	\N
 
 -- !select --
 1	\N	\N
@@ -2722,15 +2929,15 @@
 9	6.18	\N
 10	"abcd"	\N
 11	{}	\N
-12	{"k1":"v31","k2":300}	false
+12	{"k1":"v31","k2":300}	\N
 13	[]	\N
 14	[123,456]	\N
 15	["abc","def"]	\N
 16	[null,true,false,100,6.18,"abc"]	\N
 17	[{"k1":"v41","k2":400},1,"a",3.14]	\N
-18	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}	false
+18	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}	3.14
 26	\N	\N
-27	{"k1":"v1","k2":200}	false
+27	{"k1":"v1","k2":200}	\N
 28	{"a.b.c":{"k1.a1":"v31","k2":300},"a":"niu"}	\N
 
 -- !select --
@@ -2745,15 +2952,15 @@
 9	6.18	\N
 10	"abcd"	\N
 11	{}	\N
-12	{"k1":"v31","k2":300}	false
+12	{"k1":"v31","k2":300}	\N
 13	[]	\N
 14	[123,456]	\N
 15	["abc","def"]	\N
 16	[null,true,false,100,6.18,"abc"]	\N
 17	[{"k1":"v41","k2":400},1,"a",3.14]	\N
-18	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}	false
+18	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}	3.14
 26	\N	\N
-27	{"k1":"v1","k2":200}	false
+27	{"k1":"v1","k2":200}	\N
 28	{"a.b.c":{"k1.a1":"v31","k2":300},"a":"niu"}	\N
 
 -- !select --
@@ -2770,10 +2977,10 @@
 11	{}	\N
 12	{"k1":"v31","k2":300}	\N
 13	[]	\N
-14	[123,456]	false
-15	["abc","def"]	false
-16	[null,true,false,100,6.18,"abc"]	true
-17	[{"k1":"v41","k2":400},1,"a",3.14]	false
+14	[123,456]	\N
+15	["abc","def"]	\N
+16	[null,true,false,100,6.18,"abc"]	\N
+17	[{"k1":"v41","k2":400},1,"a",3.14]	\N
 18	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}	\N
 26	\N	\N
 27	{"k1":"v1","k2":200}	\N
@@ -2793,11 +3000,11 @@
 11	{}	\N
 12	{"k1":"v31","k2":300}	\N
 13	[]	\N
-14	[123,456]	false
-15	["abc","def"]	false
-16	[null,true,false,100,6.18,"abc"]	false
-17	[{"k1":"v41","k2":400},1,"a",3.14]	false
-18	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}	\N
+14	[123,456]	\N
+15	["abc","def"]	\N
+16	[null,true,false,100,6.18,"abc"]	\N
+17	[{"k1":"v41","k2":400},1,"a",3.14]	\N
+18	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}	1.0
 26	\N	\N
 27	{"k1":"v1","k2":200}	\N
 28	{"a.b.c":{"k1.a1":"v31","k2":300},"a":"niu"}	\N
@@ -2818,8 +3025,8 @@
 13	[]	\N
 14	[123,456]	\N
 15	["abc","def"]	\N
-16	[null,true,false,100,6.18,"abc"]	false
-17	[{"k1":"v41","k2":400},1,"a",3.14]	false
+16	[null,true,false,100,6.18,"abc"]	\N
+17	[{"k1":"v41","k2":400},1,"a",3.14]	\N
 18	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}	\N
 26	\N	\N
 27	{"k1":"v1","k2":200}	\N
@@ -2841,8 +3048,8 @@
 13	[]	\N
 14	[123,456]	\N
 15	["abc","def"]	\N
-16	[null,true,false,100,6.18,"abc"]	false
-17	[{"k1":"v41","k2":400},1,"a",3.14]	false
+16	[null,true,false,100,6.18,"abc"]	\N
+17	[{"k1":"v41","k2":400},1,"a",3.14]	\N
 18	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}	\N
 26	\N	\N
 27	{"k1":"v1","k2":200}	\N
@@ -2864,9 +3071,9 @@
 13	[]	\N
 14	[123,456]	\N
 15	["abc","def"]	\N
-16	[null,true,false,100,6.18,"abc"]	false
+16	[null,true,false,100,6.18,"abc"]	\N
 17	[{"k1":"v41","k2":400},1,"a",3.14]	\N
-18	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}	\N
+18	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}	3.14
 26	\N	\N
 27	{"k1":"v1","k2":200}	\N
 28	{"a.b.c":{"k1.a1":"v31","k2":300},"a":"niu"}	\N
@@ -2887,7 +3094,30 @@
 13	[]	\N
 14	[123,456]	\N
 15	["abc","def"]	\N
-16	[null,true,false,100,6.18,"abc"]	false
+16	[null,true,false,100,6.18,"abc"]	\N
+17	[{"k1":"v41","k2":400},1,"a",3.14]	\N
+18	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}	\N
+26	\N	\N
+27	{"k1":"v1","k2":200}	\N
+28	{"a.b.c":{"k1.a1":"v31","k2":300},"a":"niu"}	\N
+
+-- !jsonb_extract_bool_select --
+1	\N	\N
+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
+10	"abcd"	\N
+11	{}	\N
+12	{"k1":"v31","k2":300}	\N
+13	[]	\N
+14	[123,456]	\N
+15	["abc","def"]	\N
+16	[null,true,false,100,6.18,"abc"]	\N
 17	[{"k1":"v41","k2":400},1,"a",3.14]	\N
 18	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}	\N
 26	\N	\N
@@ -2958,7 +3188,7 @@
 15	["abc","def"]	\N
 16	[null,true,false,100,6.18,"abc"]	\N
 17	[{"k1":"v41","k2":400},1,"a",3.14]	\N
-18	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}	false
+18	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}	\N
 26	\N	\N
 27	{"k1":"v1","k2":200}	\N
 28	{"a.b.c":{"k1.a1":"v31","k2":300},"a":"niu"}	\N
@@ -2979,9 +3209,9 @@
 13	[]	\N
 14	[123,456]	\N
 15	["abc","def"]	\N
-16	[null,true,false,100,6.18,"abc"]	\N
+16	[null,true,false,100,6.18,"abc"]	true
 17	[{"k1":"v41","k2":400},1,"a",3.14]	\N
-18	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}	false
+18	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}	\N
 26	\N	\N
 27	{"k1":"v1","k2":200}	\N
 28	{"a.b.c":{"k1.a1":"v31","k2":300},"a":"niu"}	\N
@@ -3002,9 +3232,9 @@
 13	[]	\N
 14	[123,456]	\N
 15	["abc","def"]	\N
-16	[null,true,false,100,6.18,"abc"]	\N
+16	[null,true,false,100,6.18,"abc"]	false
 17	[{"k1":"v41","k2":400},1,"a",3.14]	\N
-18	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}	false
+18	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}	\N
 26	\N	\N
 27	{"k1":"v1","k2":200}	\N
 28	{"a.b.c":{"k1.a1":"v31","k2":300},"a":"niu"}	\N
@@ -3027,7 +3257,7 @@
 15	["abc","def"]	\N
 16	[null,true,false,100,6.18,"abc"]	\N
 17	[{"k1":"v41","k2":400},1,"a",3.14]	\N
-18	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}	false
+18	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}	\N
 26	\N	\N
 27	{"k1":"v1","k2":200}	\N
 28	{"a.b.c":{"k1.a1":"v31","k2":300},"a":"niu"}	\N
@@ -3050,7 +3280,7 @@
 15	["abc","def"]	\N
 16	[null,true,false,100,6.18,"abc"]	\N
 17	[{"k1":"v41","k2":400},1,"a",3.14]	\N
-18	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}	false
+18	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}	\N
 26	\N	\N
 27	{"k1":"v1","k2":200}	\N
 28	{"a.b.c":{"k1.a1":"v31","k2":300},"a":"niu"}	\N
@@ -3103,26 +3333,1176 @@
 
 -- !select --
 1	\N	\N
-2	null	true
-3	true	true
-4	false	true
-5	100	true
-6	10000	true
-7	1000000000	true
-8	1152921504606846976	true
-9	6.18	true
-10	"abcd"	true
-11	{}	true
-12	{"k1":"v31","k2":300}	true
-13	[]	true
-14	[123,456]	true
-15	["abc","def"]	true
+2	null	\N
+3	true	\N
+4	false	\N
+5	100	\N
+6	10000	\N
+7	1000000000	\N
+8	1152921504606846976	\N
+9	6.18	\N
+10	"abcd"	\N
+11	{}	\N
+12	{"k1":"v31","k2":300}	\N
+13	[]	\N
+14	[123,456]	\N
+15	["abc","def"]	\N
+16	[null,true,false,100,6.18,"abc"]	\N
+17	[{"k1":"v41","k2":400},1,"a",3.14]	\N
+18	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}	\N
+26	\N	\N
+27	{"k1":"v1","k2":200}	\N
+28	{"a.b.c":{"k1.a1":"v31","k2":300},"a":"niu"}	\N
+
+-- !select --
+1	\N	\N
+2	null	\N
+3	true	\N
+4	false	\N
+5	100	\N
+6	10000	\N
+7	1000000000	\N
+8	1152921504606846976	\N
+9	6.18	\N
+10	"abcd"	\N
+11	{}	\N
+12	{"k1":"v31","k2":300}	\N
+13	[]	\N
+14	[123,456]	\N
+15	["abc","def"]	\N
+16	[null,true,false,100,6.18,"abc"]	\N
+17	[{"k1":"v41","k2":400},1,"a",3.14]	\N
+18	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}	\N
+26	\N	\N
+27	{"k1":"v1","k2":200}	\N
+28	{"a.b.c":{"k1.a1":"v31","k2":300},"a":"niu"}	\N
+
+-- !select --
+1	\N	\N
+2	null	\N
+3	true	\N
+4	false	\N
+5	100	\N
+6	10000	\N
+7	1000000000	\N
+8	1152921504606846976	\N
+9	6.18	\N
+10	"abcd"	\N
+11	{}	\N
+12	{"k1":"v31","k2":300}	\N
+13	[]	\N
+14	[123,456]	\N
+15	["abc","def"]	\N
+16	[null,true,false,100,6.18,"abc"]	\N
+17	[{"k1":"v41","k2":400},1,"a",3.14]	\N
+18	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}	\N
+26	\N	\N
+27	{"k1":"v1","k2":200}	\N
+28	{"a.b.c":{"k1.a1":"v31","k2":300},"a":"niu"}	\N
+
+-- !select --
+1	\N	\N
+2	null	\N
+3	true	\N
+4	false	\N
+5	100	\N
+6	10000	\N
+7	1000000000	\N
+8	1152921504606846976	\N
+9	6.18	\N
+10	"abcd"	\N
+11	{}	\N
+12	{"k1":"v31","k2":300}	\N
+13	[]	\N
+14	[123,456]	\N
+15	["abc","def"]	\N
+16	[null,true,false,100,6.18,"abc"]	\N
+17	[{"k1":"v41","k2":400},1,"a",3.14]	\N
+18	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}	\N
+26	\N	\N
+27	{"k1":"v1","k2":200}	\N
+28	{"a.b.c":{"k1.a1":"v31","k2":300},"a":"niu"}	\N
+
+-- !select --
+1	\N	\N
+2	null	\N
+3	true	\N
+4	false	\N
+5	100	\N
+6	10000	\N
+7	1000000000	\N
+8	1152921504606846976	\N
+9	6.18	\N
+10	"abcd"	\N
+11	{}	\N
+12	{"k1":"v31","k2":300}	\N
+13	[]	\N
+14	[123,456]	\N
+15	["abc","def"]	\N
+16	[null,true,false,100,6.18,"abc"]	\N
+17	[{"k1":"v41","k2":400},1,"a",3.14]	\N
+18	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}	\N
+26	\N	\N
+27	{"k1":"v1","k2":200}	\N
+28	{"a.b.c":{"k1.a1":"v31","k2":300},"a":"niu"}	\N
+
+-- !select --
+1	\N	\N
+2	null	\N
+3	true	\N
+4	false	\N
+5	100	\N
+6	10000	\N
+7	1000000000	\N
+8	1152921504606846976	\N
+9	6.18	\N
+10	"abcd"	\N
+11	{}	\N
+12	{"k1":"v31","k2":300}	\N
+13	[]	\N
+14	[123,456]	\N
+15	["abc","def"]	\N
+16	[null,true,false,100,6.18,"abc"]	\N
+17	[{"k1":"v41","k2":400},1,"a",3.14]	\N
+18	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}	\N
+26	\N	\N
+27	{"k1":"v1","k2":200}	\N
+28	{"a.b.c":{"k1.a1":"v31","k2":300},"a":"niu"}	\N
+
+-- !select --
+1	\N	\N
+2	null	\N
+3	true	\N
+4	false	\N
+5	100	\N
+6	10000	\N
+7	1000000000	\N
+8	1152921504606846976	\N
+9	6.18	\N
+10	"abcd"	\N
+11	{}	\N
+12	{"k1":"v31","k2":300}	\N
+13	[]	\N
+14	[123,456]	\N
+15	["abc","def"]	\N
+16	[null,true,false,100,6.18,"abc"]	\N
+17	[{"k1":"v41","k2":400},1,"a",3.14]	\N
+18	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}	\N
+26	\N	\N
+27	{"k1":"v1","k2":200}	\N
+28	{"a.b.c":{"k1.a1":"v31","k2":300},"a":"niu"}	\N
+
+-- !select --
+1	\N	\N
+2	null	\N
+3	true	\N
+4	false	\N
+5	100	\N
+6	10000	\N
+7	1000000000	\N
+8	1152921504606846976	\N
+9	6.18	\N
+10	"abcd"	\N
+11	{}	\N
+12	{"k1":"v31","k2":300}	\N
+13	[]	\N
+14	[123,456]	\N
+15	["abc","def"]	\N
+16	[null,true,false,100,6.18,"abc"]	\N
+17	[{"k1":"v41","k2":400},1,"a",3.14]	\N
+18	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}	\N
+26	\N	\N
+27	{"k1":"v1","k2":200}	\N
+28	{"a.b.c":{"k1.a1":"v31","k2":300},"a":"niu"}	\N
+
+-- !select --
+1	\N	\N
+2	null	\N
+3	true	\N
+4	false	\N
+5	100	\N
+6	10000	\N
+7	1000000000	\N
+8	1152921504606846976	\N
+9	6.18	\N
+10	"abcd"	\N
+11	{}	\N
+12	{"k1":"v31","k2":300}	\N
+13	[]	\N
+14	[123,456]	\N
+15	["abc","def"]	\N
+16	[null,true,false,100,6.18,"abc"]	\N
+17	[{"k1":"v41","k2":400},1,"a",3.14]	\N
+18	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}	\N
+26	\N	\N
+27	{"k1":"v1","k2":200}	\N
+28	{"a.b.c":{"k1.a1":"v31","k2":300},"a":"niu"}	\N
+
+-- !select --
+1	\N	\N
+2	null	\N
+3	true	\N
+4	false	\N
+5	100	\N
+6	10000	\N
+7	1000000000	\N
+8	1152921504606846976	\N
+9	6.18	\N
+10	"abcd"	\N
+11	{}	\N
+12	{"k1":"v31","k2":300}	\N
+13	[]	\N
+14	[123,456]	\N
+15	["abc","def"]	\N
+16	[null,true,false,100,6.18,"abc"]	\N
+17	[{"k1":"v41","k2":400},1,"a",3.14]	\N
+18	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}	\N
+26	\N	\N
+27	{"k1":"v1","k2":200}	\N
+28	{"a.b.c":{"k1.a1":"v31","k2":300},"a":"niu"}	\N
+
+-- !select --
+1	\N	\N
+2	null	\N
+3	true	\N
+4	false	\N
+5	100	\N
+6	10000	\N
+7	1000000000	\N
+8	1152921504606846976	\N
+9	6.18	\N
+10	"abcd"	\N
+11	{}	\N
+12	{"k1":"v31","k2":300}	\N
+13	[]	\N
+14	[123,456]	\N
+15	["abc","def"]	\N
+16	[null,true,false,100,6.18,"abc"]	\N
+17	[{"k1":"v41","k2":400},1,"a",3.14]	\N
+18	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}	\N
+26	\N	\N
+27	{"k1":"v1","k2":200}	\N
+28	{"a.b.c":{"k1.a1":"v31","k2":300},"a":"niu"}	\N
+
+-- !select --
+1	\N	\N
+2	null	\N
+3	true	\N
+4	false	\N
+5	100	\N
+6	10000	\N
+7	1000000000	\N
+8	1152921504606846976	\N
+9	6.18	\N
+10	"abcd"	\N
+11	{}	\N
+12	{"k1":"v31","k2":300}	\N
+13	[]	\N
+14	[123,456]	\N
+15	["abc","def"]	\N
+16	[null,true,false,100,6.18,"abc"]	\N
+17	[{"k1":"v41","k2":400},1,"a",3.14]	\N
+18	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}	\N
+26	\N	\N
+27	{"k1":"v1","k2":200}	\N
+28	{"a.b.c":{"k1.a1":"v31","k2":300},"a":"niu"}	\N
+
+-- !select --
+1	\N	\N
+2	null	\N
+3	true	\N
+4	false	\N
+5	100	\N
+6	10000	\N
+7	1000000000	\N
+8	1152921504606846976	\N
+9	6.18	\N
+10	"abcd"	\N
+11	{}	\N
+12	{"k1":"v31","k2":300}	\N
+13	[]	\N
+14	[123,456]	\N
+15	["abc","def"]	\N
+16	[null,true,false,100,6.18,"abc"]	\N
+17	[{"k1":"v41","k2":400},1,"a",3.14]	\N
+18	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}	\N
+26	\N	\N
+27	{"k1":"v1","k2":200}	\N
+28	{"a.b.c":{"k1.a1":"v31","k2":300},"a":"niu"}	\N
+
+-- !select --
+1	\N	\N
+2	null	\N
+3	true	\N
+4	false	\N
+5	100	\N
+6	10000	\N
+7	1000000000	\N
+8	1152921504606846976	\N
+9	6.18	\N
+10	"abcd"	\N
+11	{}	\N
+12	{"k1":"v31","k2":300}	\N
+13	[]	\N
+14	[123,456]	\N
+15	["abc","def"]	\N
+16	[null,true,false,100,6.18,"abc"]	\N
+17	[{"k1":"v41","k2":400},1,"a",3.14]	\N
+18	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}	\N
+26	\N	\N
+27	{"k1":"v1","k2":200}	\N
+28	{"a.b.c":{"k1.a1":"v31","k2":300},"a":"niu"}	\N
+
+-- !select --
+1	\N	\N
+2	null	\N
+3	true	\N
+4	false	\N
+5	100	\N
+6	10000	\N
+7	1000000000	\N
+8	1152921504606846976	\N
+9	6.18	\N
+10	"abcd"	\N
+11	{}	\N
+12	{"k1":"v31","k2":300}	\N
+13	[]	\N
+14	[123,456]	\N
+15	["abc","def"]	\N
+16	[null,true,false,100,6.18,"abc"]	\N
+17	[{"k1":"v41","k2":400},1,"a",3.14]	\N
+18	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}	\N
+26	\N	\N
+27	{"k1":"v1","k2":200}	\N
+28	{"a.b.c":{"k1.a1":"v31","k2":300},"a":"niu"}	\N
+
+-- !select --
+1	\N	\N
+2	null	\N
+3	true	\N
+4	false	\N
+5	100	\N
+6	10000	\N
+7	1000000000	\N
+8	1152921504606846976	\N
+9	6.18	\N
+10	"abcd"	\N
+11	{}	\N
+12	{"k1":"v31","k2":300}	\N
+13	[]	\N
+14	[123,456]	\N
+15	["abc","def"]	\N
+16	[null,true,false,100,6.18,"abc"]	\N
+17	[{"k1":"v41","k2":400},1,"a",3.14]	\N
+18	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}	\N
+26	\N	\N
+27	{"k1":"v1","k2":200}	\N
+28	{"a.b.c":{"k1.a1":"v31","k2":300},"a":"niu"}	\N
+
+-- !jsonb_extract_isnull_select --
+1	\N	\N
+2	null	true
+3	true	false
+4	false	false
+5	100	false
+6	10000	false
+7	1000000000	false
+8	1152921504606846976	false
+9	6.18	false
+10	"abcd"	false
+11	{}	false
+12	{"k1":"v31","k2":300}	false
+13	[]	false
+14	[123,456]	false
+15	["abc","def"]	false
+16	[null,true,false,100,6.18,"abc"]	false
+17	[{"k1":"v41","k2":400},1,"a",3.14]	false
+18	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}	false
+26	\N	\N
+27	{"k1":"v1","k2":200}	false
+28	{"a.b.c":{"k1.a1":"v31","k2":300},"a":"niu"}	false
+
+-- !select --
+1	\N	\N
+2	null	\N
+3	true	\N
+4	false	\N
+5	100	\N
+6	10000	\N
+7	1000000000	\N
+8	1152921504606846976	\N
+9	6.18	\N
+10	"abcd"	\N
+11	{}	\N
+12	{"k1":"v31","k2":300}	false
+13	[]	\N
+14	[123,456]	\N
+15	["abc","def"]	\N
+16	[null,true,false,100,6.18,"abc"]	\N
+17	[{"k1":"v41","k2":400},1,"a",3.14]	\N
+18	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}	false
+26	\N	\N
+27	{"k1":"v1","k2":200}	false
+28	{"a.b.c":{"k1.a1":"v31","k2":300},"a":"niu"}	\N
+
+-- !select --
+1	\N	\N
+2	null	\N
+3	true	\N
+4	false	\N
+5	100	\N
+6	10000	\N
+7	1000000000	\N
+8	1152921504606846976	\N
+9	6.18	\N
+10	"abcd"	\N
+11	{}	\N
+12	{"k1":"v31","k2":300}	false
+13	[]	\N
+14	[123,456]	\N
+15	["abc","def"]	\N
+16	[null,true,false,100,6.18,"abc"]	\N
+17	[{"k1":"v41","k2":400},1,"a",3.14]	\N
+18	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}	false
+26	\N	\N
+27	{"k1":"v1","k2":200}	false
+28	{"a.b.c":{"k1.a1":"v31","k2":300},"a":"niu"}	\N
+
+-- !select --
+1	\N	\N
+2	null	\N
+3	true	\N
+4	false	\N
+5	100	\N
+6	10000	\N
+7	1000000000	\N
+8	1152921504606846976	\N
+9	6.18	\N
+10	"abcd"	\N
+11	{}	false
+12	{"k1":"v31","k2":300}	false
+13	[]	\N
+14	[123,456]	false
+15	["abc","def"]	false
+16	[null,true,false,100,6.18,"abc"]	true
+17	[{"k1":"v41","k2":400},1,"a",3.14]	false
+18	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}	false
+26	\N	\N
+27	{"k1":"v1","k2":200}	false
+28	{"a.b.c":{"k1.a1":"v31","k2":300},"a":"niu"}	false
+
+-- !select --
+1	\N	\N
+2	null	\N
+3	true	\N
+4	false	\N
+5	100	\N
+6	10000	\N
+7	1000000000	\N
+8	1152921504606846976	\N
+9	6.18	\N
+10	"abcd"	\N
+11	{}	\N
+12	{"k1":"v31","k2":300}	\N
+13	[]	\N
+14	[123,456]	false
+15	["abc","def"]	false
+16	[null,true,false,100,6.18,"abc"]	false
+17	[{"k1":"v41","k2":400},1,"a",3.14]	false
+18	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}	\N
+26	\N	\N
+27	{"k1":"v1","k2":200}	\N
+28	{"a.b.c":{"k1.a1":"v31","k2":300},"a":"niu"}	\N
+
+-- !select --
+1	\N	\N
+2	null	\N
+3	true	\N
+4	false	\N
+5	100	\N
+6	10000	\N
+7	1000000000	\N
+8	1152921504606846976	\N
+9	6.18	\N
+10	"abcd"	\N
+11	{}	\N
+12	{"k1":"v31","k2":300}	\N
+13	[]	\N
+14	[123,456]	\N
+15	["abc","def"]	\N
+16	[null,true,false,100,6.18,"abc"]	false
+17	[{"k1":"v41","k2":400},1,"a",3.14]	false
+18	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}	\N
+26	\N	\N
+27	{"k1":"v1","k2":200}	\N
+28	{"a.b.c":{"k1.a1":"v31","k2":300},"a":"niu"}	\N
+
+-- !select --
+1	\N	\N
+2	null	\N
+3	true	\N
+4	false	\N
+5	100	\N
+6	10000	\N
+7	1000000000	\N
+8	1152921504606846976	\N
+9	6.18	\N
+10	"abcd"	\N
+11	{}	\N
+12	{"k1":"v31","k2":300}	\N
+13	[]	\N
+14	[123,456]	\N
+15	["abc","def"]	\N
+16	[null,true,false,100,6.18,"abc"]	false
+17	[{"k1":"v41","k2":400},1,"a",3.14]	false
+18	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}	\N
+26	\N	\N
+27	{"k1":"v1","k2":200}	\N
+28	{"a.b.c":{"k1.a1":"v31","k2":300},"a":"niu"}	\N
+
+-- !select --
+1	\N	\N
+2	null	\N
+3	true	\N
+4	false	\N
+5	100	\N
+6	10000	\N
+7	1000000000	\N
+8	1152921504606846976	\N
+9	6.18	\N
+10	"abcd"	\N
+11	{}	\N
+12	{"k1":"v31","k2":300}	\N
+13	[]	\N
+14	[123,456]	\N
+15	["abc","def"]	\N
+16	[null,true,false,100,6.18,"abc"]	false
+17	[{"k1":"v41","k2":400},1,"a",3.14]	\N
+18	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}	\N
+26	\N	\N
+27	{"k1":"v1","k2":200}	\N
+28	{"a.b.c":{"k1.a1":"v31","k2":300},"a":"niu"}	\N
+
+-- !select --
+1	\N	\N
+2	null	\N
+3	true	\N
+4	false	\N
+5	100	\N
+6	10000	\N
+7	1000000000	\N
+8	1152921504606846976	\N
+9	6.18	\N
+10	"abcd"	\N
+11	{}	\N
+12	{"k1":"v31","k2":300}	\N
+13	[]	\N
+14	[123,456]	\N
+15	["abc","def"]	\N
+16	[null,true,false,100,6.18,"abc"]	false
+17	[{"k1":"v41","k2":400},1,"a",3.14]	\N
+18	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}	\N
+26	\N	\N
+27	{"k1":"v1","k2":200}	\N
+28	{"a.b.c":{"k1.a1":"v31","k2":300},"a":"niu"}	\N
+
+-- !select --
+1	\N	\N
+2	null	\N
+3	true	\N
+4	false	\N
+5	100	\N
+6	10000	\N
+7	1000000000	\N
+8	1152921504606846976	\N
+9	6.18	\N
+10	"abcd"	\N
+11	{}	\N
+12	{"k1":"v31","k2":300}	\N
+13	[]	\N
+14	[123,456]	\N
+15	["abc","def"]	\N
+16	[null,true,false,100,6.18,"abc"]	\N
+17	[{"k1":"v41","k2":400},1,"a",3.14]	\N
+18	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}	\N
+26	\N	\N
+27	{"k1":"v1","k2":200}	\N
+28	{"a.b.c":{"k1.a1":"v31","k2":300},"a":"niu"}	\N
+
+-- !select --
+1	\N	\N
+2	null	\N
+3	true	\N
+4	false	\N
+5	100	\N
+6	10000	\N
+7	1000000000	\N
+8	1152921504606846976	\N
+9	6.18	\N
+10	"abcd"	\N
+11	{}	\N
+12	{"k1":"v31","k2":300}	\N
+13	[]	\N
+14	[123,456]	\N
+15	["abc","def"]	\N
+16	[null,true,false,100,6.18,"abc"]	\N
+17	[{"k1":"v41","k2":400},1,"a",3.14]	\N
+18	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}	\N
+26	\N	\N
+27	{"k1":"v1","k2":200}	\N
+28	{"a.b.c":{"k1.a1":"v31","k2":300},"a":"niu"}	\N
+
+-- !select --
+1	\N	\N
+2	null	\N
+3	true	\N
+4	false	\N
+5	100	\N
+6	10000	\N
+7	1000000000	\N
+8	1152921504606846976	\N
+9	6.18	\N
+10	"abcd"	\N
+11	{}	\N
+12	{"k1":"v31","k2":300}	\N
+13	[]	\N
+14	[123,456]	\N
+15	["abc","def"]	\N
+16	[null,true,false,100,6.18,"abc"]	\N
+17	[{"k1":"v41","k2":400},1,"a",3.14]	\N
+18	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}	false
+26	\N	\N
+27	{"k1":"v1","k2":200}	\N
+28	{"a.b.c":{"k1.a1":"v31","k2":300},"a":"niu"}	\N
+
+-- !select --
+1	\N	\N
+2	null	\N
+3	true	\N
+4	false	\N
+5	100	\N
+6	10000	\N
+7	1000000000	\N
+8	1152921504606846976	\N
+9	6.18	\N
+10	"abcd"	\N
+11	{}	\N
+12	{"k1":"v31","k2":300}	\N
+13	[]	\N
+14	[123,456]	\N
+15	["abc","def"]	\N
+16	[null,true,false,100,6.18,"abc"]	\N
+17	[{"k1":"v41","k2":400},1,"a",3.14]	\N
+18	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}	false
+26	\N	\N
+27	{"k1":"v1","k2":200}	\N
+28	{"a.b.c":{"k1.a1":"v31","k2":300},"a":"niu"}	\N
+
+-- !select --
+1	\N	\N
+2	null	\N
+3	true	\N
+4	false	\N
+5	100	\N
+6	10000	\N
+7	1000000000	\N
+8	1152921504606846976	\N
+9	6.18	\N
+10	"abcd"	\N
+11	{}	\N
+12	{"k1":"v31","k2":300}	\N
+13	[]	\N
+14	[123,456]	\N
+15	["abc","def"]	\N
+16	[null,true,false,100,6.18,"abc"]	\N
+17	[{"k1":"v41","k2":400},1,"a",3.14]	\N
+18	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}	false
+26	\N	\N
+27	{"k1":"v1","k2":200}	\N
+28	{"a.b.c":{"k1.a1":"v31","k2":300},"a":"niu"}	\N
+
+-- !select --
+1	\N	\N
+2	null	\N
+3	true	\N
+4	false	\N
+5	100	\N
+6	10000	\N
+7	1000000000	\N
+8	1152921504606846976	\N
+9	6.18	\N
+10	"abcd"	\N
+11	{}	\N
+12	{"k1":"v31","k2":300}	\N
+13	[]	\N
+14	[123,456]	\N
+15	["abc","def"]	\N
+16	[null,true,false,100,6.18,"abc"]	\N
+17	[{"k1":"v41","k2":400},1,"a",3.14]	\N
+18	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}	false
+26	\N	\N
+27	{"k1":"v1","k2":200}	\N
+28	{"a.b.c":{"k1.a1":"v31","k2":300},"a":"niu"}	\N
+
+-- !select --
+1	\N	\N
+2	null	\N
+3	true	\N
+4	false	\N
+5	100	\N
+6	10000	\N
+7	1000000000	\N
+8	1152921504606846976	\N
+9	6.18	\N
+10	"abcd"	\N
+11	{}	\N
+12	{"k1":"v31","k2":300}	\N
+13	[]	\N
+14	[123,456]	\N
+15	["abc","def"]	\N
+16	[null,true,false,100,6.18,"abc"]	\N
+17	[{"k1":"v41","k2":400},1,"a",3.14]	\N
+18	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}	false
+26	\N	\N
+27	{"k1":"v1","k2":200}	\N
+28	{"a.b.c":{"k1.a1":"v31","k2":300},"a":"niu"}	\N
+
+-- !select --
+1	\N	\N
+2	null	\N
+3	true	\N
+4	false	\N
+5	100	\N
+6	10000	\N
+7	1000000000	\N
+8	1152921504606846976	\N
+9	6.18	\N
+10	"abcd"	\N
+11	{}	\N
+12	{"k1":"v31","k2":300}	\N
+13	[]	\N
+14	[123,456]	\N
+15	["abc","def"]	\N
+16	[null,true,false,100,6.18,"abc"]	\N
+17	[{"k1":"v41","k2":400},1,"a",3.14]	\N
+18	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}	\N
+26	\N	\N
+27	{"k1":"v1","k2":200}	\N
+28	{"a.b.c":{"k1.a1":"v31","k2":300},"a":"niu"}	\N
+
+-- !select --
+1	\N	\N
+2	null	\N
+3	true	\N
+4	false	\N
+5	100	\N
+6	10000	\N
+7	1000000000	\N
+8	1152921504606846976	\N
+9	6.18	\N
+10	"abcd"	\N
+11	{}	\N
+12	{"k1":"v31","k2":300}	\N
+13	[]	\N
+14	[123,456]	\N
+15	["abc","def"]	\N
+16	[null,true,false,100,6.18,"abc"]	\N
+17	[{"k1":"v41","k2":400},1,"a",3.14]	\N
+18	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}	\N
+26	\N	\N
+27	{"k1":"v1","k2":200}	\N
+28	{"a.b.c":{"k1.a1":"v31","k2":300},"a":"niu"}	\N
+
+-- !select --
+1	\N	\N
+2	null	\N
+3	true	\N
+4	false	\N
+5	100	\N
+6	10000	\N
+7	1000000000	\N
+8	1152921504606846976	\N
+9	6.18	\N
+10	"abcd"	\N
+11	{}	\N
+12	{"k1":"v31","k2":300}	\N
+13	[]	\N
+14	[123,456]	\N
+15	["abc","def"]	\N
+16	[null,true,false,100,6.18,"abc"]	\N
+17	[{"k1":"v41","k2":400},1,"a",3.14]	\N
+18	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}	false
+26	\N	\N
+27	{"k1":"v1","k2":200}	\N
+28	{"a.b.c":{"k1.a1":"v31","k2":300},"a":"niu"}	\N
+
+-- !select --
+1	\N	\N
+2	null	\N
+3	true	\N
+4	false	\N
+5	100	\N
+6	10000	\N
+7	1000000000	\N
+8	1152921504606846976	\N
+9	6.18	\N
+10	"abcd"	\N
+11	{}	\N
+12	{"k1":"v31","k2":300}	\N
+13	[]	\N
+14	[123,456]	\N
+15	["abc","def"]	\N
+16	[null,true,false,100,6.18,"abc"]	\N
+17	[{"k1":"v41","k2":400},1,"a",3.14]	\N
+18	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}	false
+26	\N	\N
+27	{"k1":"v1","k2":200}	\N
+28	{"a.b.c":{"k1.a1":"v31","k2":300},"a":"niu"}	\N
+
+-- !select --
+1	\N	\N
+2	null	\N
+3	true	\N
+4	false	\N
+5	100	\N
+6	10000	\N
+7	1000000000	\N
+8	1152921504606846976	\N
+9	6.18	\N
+10	"abcd"	\N
+11	{}	\N
+12	{"k1":"v31","k2":300}	\N
+13	[]	\N
+14	[123,456]	\N
+15	["abc","def"]	\N
+16	[null,true,false,100,6.18,"abc"]	\N
+17	[{"k1":"v41","k2":400},1,"a",3.14]	\N
+18	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}	false
+26	\N	\N
+27	{"k1":"v1","k2":200}	\N
+28	{"a.b.c":{"k1.a1":"v31","k2":300},"a":"niu"}	\N
+
+-- !select --
+1	\N	\N
+2	null	\N
+3	true	\N
+4	false	\N
+5	100	\N
+6	10000	\N
+7	1000000000	\N
+8	1152921504606846976	\N
+9	6.18	\N
+10	"abcd"	\N
+11	{}	\N
+12	{"k1":"v31","k2":300}	\N
+13	[]	\N
+14	[123,456]	\N
+15	["abc","def"]	\N
+16	[null,true,false,100,6.18,"abc"]	\N
+17	[{"k1":"v41","k2":400},1,"a",3.14]	\N
+18	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}	false
+26	\N	\N
+27	{"k1":"v1","k2":200}	\N
+28	{"a.b.c":{"k1.a1":"v31","k2":300},"a":"niu"}	\N
+
+-- !select --
+1	\N	\N
+2	null	\N
+3	true	\N
+4	false	\N
+5	100	\N
+6	10000	\N
+7	1000000000	\N
+8	1152921504606846976	\N
+9	6.18	\N
+10	"abcd"	\N
+11	{}	\N
+12	{"k1":"v31","k2":300}	\N
+13	[]	\N
+14	[123,456]	\N
+15	["abc","def"]	\N
+16	[null,true,false,100,6.18,"abc"]	\N
+17	[{"k1":"v41","k2":400},1,"a",3.14]	\N
+18	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}	\N
+26	\N	\N
+27	{"k1":"v1","k2":200}	\N
+28	{"a.b.c":{"k1.a1":"v31","k2":300},"a":"niu"}	\N
+
+-- !select --
+1	\N	\N
+2	null	\N
+3	true	\N
+4	false	\N
+5	100	\N
+6	10000	\N
+7	1000000000	\N
+8	1152921504606846976	\N
+9	6.18	\N
+10	"abcd"	\N
+11	{}	\N
+12	{"k1":"v31","k2":300}	\N
+13	[]	\N
+14	[123,456]	\N
+15	["abc","def"]	\N
+16	[null,true,false,100,6.18,"abc"]	\N
+17	[{"k1":"v41","k2":400},1,"a",3.14]	\N
+18	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}	false
+26	\N	\N
+27	{"k1":"v1","k2":200}	\N
+28	{"a.b.c":{"k1.a1":"v31","k2":300},"a":"niu"}	\N
+
+-- !select --
+1	\N	\N
+2	null	\N
+3	true	\N
+4	false	\N
+5	100	\N
+6	10000	\N
+7	1000000000	\N
+8	1152921504606846976	\N
+9	6.18	\N
+10	"abcd"	\N
+11	{}	\N
+12	{"k1":"v31","k2":300}	\N
+13	[]	\N
+14	[123,456]	\N
+15	["abc","def"]	\N
+16	[null,true,false,100,6.18,"abc"]	\N
+17	[{"k1":"v41","k2":400},1,"a",3.14]	\N
+18	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}	false
+26	\N	\N
+27	{"k1":"v1","k2":200}	\N
+28	{"a.b.c":{"k1.a1":"v31","k2":300},"a":"niu"}	\N
+
+-- !select --
+1	\N	\N
+2	null	\N
+3	true	\N
+4	false	\N
+5	100	\N
+6	10000	\N
+7	1000000000	\N
+8	1152921504606846976	\N
+9	6.18	\N
+10	"abcd"	\N
+11	{}	\N
+12	{"k1":"v31","k2":300}	\N
+13	[]	\N
+14	[123,456]	\N
+15	["abc","def"]	\N
+16	[null,true,false,100,6.18,"abc"]	\N
+17	[{"k1":"v41","k2":400},1,"a",3.14]	\N
+18	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}	\N
+26	\N	\N
+27	{"k1":"v1","k2":200}	\N
+28	{"a.b.c":{"k1.a1":"v31","k2":300},"a":"niu"}	\N
+
+-- !jsonb_exists_path_select --
+1	\N	\N
+2	null	true
+3	true	true
+4	false	true
+5	100	true
+6	10000	true
+7	1000000000	true
+8	1152921504606846976	true
+9	6.18	true
+10	"abcd"	true
+11	{}	true
+12	{"k1":"v31","k2":300}	true
+13	[]	true
+14	[123,456]	true
+15	["abc","def"]	true
+16	[null,true,false,100,6.18,"abc"]	true
+17	[{"k1":"v41","k2":400},1,"a",3.14]	true
+18	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}	true
+26	\N	\N
+27	{"k1":"v1","k2":200}	true
+28	{"a.b.c":{"k1.a1":"v31","k2":300},"a":"niu"}	true
+
+-- !select --
+1	\N	\N
+2	null	false
+3	true	false
+4	false	false
+5	100	false
+6	10000	false
+7	1000000000	false
+8	1152921504606846976	false
+9	6.18	false
+10	"abcd"	false
+11	{}	false
+12	{"k1":"v31","k2":300}	true
+13	[]	false
+14	[123,456]	false
+15	["abc","def"]	false
+16	[null,true,false,100,6.18,"abc"]	false
+17	[{"k1":"v41","k2":400},1,"a",3.14]	false
+18	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}	true
+26	\N	\N
+27	{"k1":"v1","k2":200}	true
+28	{"a.b.c":{"k1.a1":"v31","k2":300},"a":"niu"}	false
+
+-- !select --
+1	\N	\N
+2	null	false
+3	true	false
+4	false	false
+5	100	false
+6	10000	false
+7	1000000000	false
+8	1152921504606846976	false
+9	6.18	false
+10	"abcd"	false
+11	{}	false
+12	{"k1":"v31","k2":300}	true
+13	[]	false
+14	[123,456]	false
+15	["abc","def"]	false
+16	[null,true,false,100,6.18,"abc"]	false
+17	[{"k1":"v41","k2":400},1,"a",3.14]	false
+18	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}	true
+26	\N	\N
+27	{"k1":"v1","k2":200}	true
+28	{"a.b.c":{"k1.a1":"v31","k2":300},"a":"niu"}	false
+
+-- !select --
+1	\N	\N
+2	null	false
+3	true	false
+4	false	false
+5	100	false
+6	10000	false
+7	1000000000	false
+8	1152921504606846976	false
+9	6.18	false
+10	"abcd"	false
+11	{}	true
+12	{"k1":"v31","k2":300}	true
+13	[]	false
+14	[123,456]	true
+15	["abc","def"]	true
 16	[null,true,false,100,6.18,"abc"]	true
 17	[{"k1":"v41","k2":400},1,"a",3.14]	true
 18	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}	true
 26	\N	\N
-27	{"k1":"v1","k2":200}	true
-28	{"a.b.c":{"k1.a1":"v31","k2":300},"a":"niu"}	true
+27	{"k1":"v1","k2":200}	true
+28	{"a.b.c":{"k1.a1":"v31","k2":300},"a":"niu"}	true
+
+-- !select --
+1	\N	\N
+2	null	false
+3	true	false
+4	false	false
+5	100	false
+6	10000	false
+7	1000000000	false
+8	1152921504606846976	false
+9	6.18	false
+10	"abcd"	false
+11	{}	false
+12	{"k1":"v31","k2":300}	false
+13	[]	false
+14	[123,456]	true
+15	["abc","def"]	true
+16	[null,true,false,100,6.18,"abc"]	true
+17	[{"k1":"v41","k2":400},1,"a",3.14]	true
+18	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}	false
+26	\N	\N
+27	{"k1":"v1","k2":200}	false
+28	{"a.b.c":{"k1.a1":"v31","k2":300},"a":"niu"}	false
+
+-- !select --
+1	\N	\N
+2	null	false
+3	true	false
+4	false	false
+5	100	false
+6	10000	false
+7	1000000000	false
+8	1152921504606846976	false
+9	6.18	false
+10	"abcd"	false
+11	{}	false
+12	{"k1":"v31","k2":300}	false
+13	[]	false
+14	[123,456]	false
+15	["abc","def"]	false
+16	[null,true,false,100,6.18,"abc"]	true
+17	[{"k1":"v41","k2":400},1,"a",3.14]	true
+18	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}	false
+26	\N	\N
+27	{"k1":"v1","k2":200}	false
+28	{"a.b.c":{"k1.a1":"v31","k2":300},"a":"niu"}	false
+
+-- !select --
+1	\N	\N
+2	null	false
+3	true	false
+4	false	false
+5	100	false
+6	10000	false
+7	1000000000	false
+8	1152921504606846976	false
+9	6.18	false
+10	"abcd"	false
+11	{}	false
+12	{"k1":"v31","k2":300}	false
+13	[]	false
+14	[123,456]	false
+15	["abc","def"]	false
+16	[null,true,false,100,6.18,"abc"]	true
+17	[{"k1":"v41","k2":400},1,"a",3.14]	true
+18	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}	false
+26	\N	\N
+27	{"k1":"v1","k2":200}	false
+28	{"a.b.c":{"k1.a1":"v31","k2":300},"a":"niu"}	false
+
+-- !select --
+1	\N	\N
+2	null	false
+3	true	false
+4	false	false
+5	100	false
+6	10000	false
+7	1000000000	false
+8	1152921504606846976	false
+9	6.18	false
+10	"abcd"	false
+11	{}	false
+12	{"k1":"v31","k2":300}	false
+13	[]	false
+14	[123,456]	false
+15	["abc","def"]	false
+16	[null,true,false,100,6.18,"abc"]	true
+17	[{"k1":"v41","k2":400},1,"a",3.14]	false
+18	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}	false
+26	\N	\N
+27	{"k1":"v1","k2":200}	false
+28	{"a.b.c":{"k1.a1":"v31","k2":300},"a":"niu"}	false
+
+-- !select --
+1	\N	\N
+2	null	false
+3	true	false
+4	false	false
+5	100	false
+6	10000	false
+7	1000000000	false
+8	1152921504606846976	false
+9	6.18	false
+10	"abcd"	false
+11	{}	false
+12	{"k1":"v31","k2":300}	false
+13	[]	false
+14	[123,456]	false
+15	["abc","def"]	false
+16	[null,true,false,100,6.18,"abc"]	true
+17	[{"k1":"v41","k2":400},1,"a",3.14]	false
+18	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}	false
+26	\N	\N
+27	{"k1":"v1","k2":200}	false
+28	{"a.b.c":{"k1.a1":"v31","k2":300},"a":"niu"}	false
 
 -- !select --
 1	\N	\N
@@ -3136,15 +4516,15 @@
 9	6.18	false
 10	"abcd"	false
 11	{}	false
-12	{"k1":"v31","k2":300}	true
+12	{"k1":"v31","k2":300}	false
 13	[]	false
 14	[123,456]	false
 15	["abc","def"]	false
 16	[null,true,false,100,6.18,"abc"]	false
 17	[{"k1":"v41","k2":400},1,"a",3.14]	false
-18	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}	true
+18	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}	false
 26	\N	\N
-27	{"k1":"v1","k2":200}	true
+27	{"k1":"v1","k2":200}	false
 28	{"a.b.c":{"k1.a1":"v31","k2":300},"a":"niu"}	false
 
 -- !select --
@@ -3159,15 +4539,15 @@
 9	6.18	false
 10	"abcd"	false
 11	{}	false
-12	{"k1":"v31","k2":300}	true
+12	{"k1":"v31","k2":300}	false
 13	[]	false
 14	[123,456]	false
 15	["abc","def"]	false
 16	[null,true,false,100,6.18,"abc"]	false
 17	[{"k1":"v41","k2":400},1,"a",3.14]	false
-18	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}	true
+18	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}	false
 26	\N	\N
-27	{"k1":"v1","k2":200}	true
+27	{"k1":"v1","k2":200}	false
 28	{"a.b.c":{"k1.a1":"v31","k2":300},"a":"niu"}	false
 
 -- !select --
@@ -3184,11 +4564,11 @@
 11	{}	false
 12	{"k1":"v31","k2":300}	false
 13	[]	false
-14	[123,456]	true
-15	["abc","def"]	true
-16	[null,true,false,100,6.18,"abc"]	true
-17	[{"k1":"v41","k2":400},1,"a",3.14]	true
-18	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}	false
+14	[123,456]	false
+15	["abc","def"]	false
+16	[null,true,false,100,6.18,"abc"]	false
+17	[{"k1":"v41","k2":400},1,"a",3.14]	false
+18	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}	true
 26	\N	\N
 27	{"k1":"v1","k2":200}	false
 28	{"a.b.c":{"k1.a1":"v31","k2":300},"a":"niu"}	false
@@ -3207,11 +4587,11 @@
 11	{}	false
 12	{"k1":"v31","k2":300}	false
 13	[]	false
-14	[123,456]	true
-15	["abc","def"]	true
-16	[null,true,false,100,6.18,"abc"]	true
-17	[{"k1":"v41","k2":400},1,"a",3.14]	true
-18	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}	false
+14	[123,456]	false
+15	["abc","def"]	false
+16	[null,true,false,100,6.18,"abc"]	false
+17	[{"k1":"v41","k2":400},1,"a",3.14]	false
+18	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}	true
 26	\N	\N
 27	{"k1":"v1","k2":200}	false
 28	{"a.b.c":{"k1.a1":"v31","k2":300},"a":"niu"}	false
@@ -3232,9 +4612,9 @@
 13	[]	false
 14	[123,456]	false
 15	["abc","def"]	false
-16	[null,true,false,100,6.18,"abc"]	true
-17	[{"k1":"v41","k2":400},1,"a",3.14]	true
-18	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}	false
+16	[null,true,false,100,6.18,"abc"]	false
+17	[{"k1":"v41","k2":400},1,"a",3.14]	false
+18	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}	true
 26	\N	\N
 27	{"k1":"v1","k2":200}	false
 28	{"a.b.c":{"k1.a1":"v31","k2":300},"a":"niu"}	false
@@ -3255,9 +4635,9 @@
 13	[]	false
 14	[123,456]	false
 15	["abc","def"]	false
-16	[null,true,false,100,6.18,"abc"]	true
-17	[{"k1":"v41","k2":400},1,"a",3.14]	true
-18	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}	false
+16	[null,true,false,100,6.18,"abc"]	false
+17	[{"k1":"v41","k2":400},1,"a",3.14]	false
+18	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}	true
 26	\N	\N
 27	{"k1":"v1","k2":200}	false
 28	{"a.b.c":{"k1.a1":"v31","k2":300},"a":"niu"}	false
@@ -3278,9 +4658,9 @@
 13	[]	false
 14	[123,456]	false
 15	["abc","def"]	false
-16	[null,true,false,100,6.18,"abc"]	true
+16	[null,true,false,100,6.18,"abc"]	false
 17	[{"k1":"v41","k2":400},1,"a",3.14]	false
-18	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}	false
+18	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}	true
 26	\N	\N
 27	{"k1":"v1","k2":200}	false
 28	{"a.b.c":{"k1.a1":"v31","k2":300},"a":"niu"}	false
@@ -3301,7 +4681,7 @@
 13	[]	false
 14	[123,456]	false
 15	["abc","def"]	false
-16	[null,true,false,100,6.18,"abc"]	true
+16	[null,true,false,100,6.18,"abc"]	false
 17	[{"k1":"v41","k2":400},1,"a",3.14]	false
 18	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}	false
 26	\N	\N
@@ -3349,7 +4729,7 @@
 15	["abc","def"]	false
 16	[null,true,false,100,6.18,"abc"]	false
 17	[{"k1":"v41","k2":400},1,"a",3.14]	false
-18	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}	false
+18	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}	true
 26	\N	\N
 27	{"k1":"v1","k2":200}	false
 28	{"a.b.c":{"k1.a1":"v31","k2":300},"a":"niu"}	false
@@ -3441,7 +4821,7 @@
 15	["abc","def"]	false
 16	[null,true,false,100,6.18,"abc"]	false
 17	[{"k1":"v41","k2":400},1,"a",3.14]	false
-18	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}	true
+18	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}	false
 26	\N	\N
 27	{"k1":"v1","k2":200}	false
 28	{"a.b.c":{"k1.a1":"v31","k2":300},"a":"niu"}	false
@@ -3487,7 +4867,7 @@
 15	["abc","def"]	false
 16	[null,true,false,100,6.18,"abc"]	false
 17	[{"k1":"v41","k2":400},1,"a",3.14]	false
-18	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}	false
+18	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}	true
 26	\N	\N
 27	{"k1":"v1","k2":200}	false
 28	{"a.b.c":{"k1.a1":"v31","k2":300},"a":"niu"}	false
@@ -3515,7 +4895,7 @@
 27	{"k1":"v1","k2":200}	false
 28	{"a.b.c":{"k1.a1":"v31","k2":300},"a":"niu"}	false
 
--- !select --
+-- !jsonb_type_select --
 1	\N	\N
 2	null	null
 3	true	bool
@@ -3595,17 +4975,17 @@
 8	1152921504606846976	\N
 9	6.18	\N
 10	"abcd"	\N
-11	{}	\N
-12	{"k1":"v31","k2":300}	\N
+11	{}	object
+12	{"k1":"v31","k2":300}	object
 13	[]	\N
 14	[123,456]	int
 15	["abc","def"]	string
 16	[null,true,false,100,6.18,"abc"]	null
 17	[{"k1":"v41","k2":400},1,"a",3.14]	object
-18	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}	\N
+18	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}	object
 26	\N	\N
-27	{"k1":"v1","k2":200}	\N
-28	{"a.b.c":{"k1.a1":"v31","k2":300},"a":"niu"}	\N
+27	{"k1":"v1","k2":200}	object
+28	{"a.b.c":{"k1.a1":"v31","k2":300},"a":"niu"}	object
 
 -- !select --
 1	\N	\N
@@ -3932,6 +5312,190 @@
 -- !select --
 1	\N	\N
 2	null	\N
+3	true	\N
+4	false	\N
+5	100	\N
+6	10000	\N
+7	1000000000	\N
+8	1152921504606846976	\N
+9	6.18	\N
+10	"abcd"	\N
+11	{}	\N
+12	{"k1":"v31","k2":300}	\N
+13	[]	\N
+14	[123,456]	\N
+15	["abc","def"]	\N
+16	[null,true,false,100,6.18,"abc"]	\N
+17	[{"k1":"v41","k2":400},1,"a",3.14]	\N
+18	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}	double
+26	\N	\N
+27	{"k1":"v1","k2":200}	\N
+28	{"a.b.c":{"k1.a1":"v31","k2":300},"a":"niu"}	\N
+
+-- !select --
+1	\N	\N
+2	null	\N
+3	true	\N
+4	false	\N
+5	100	\N
+6	10000	\N
+7	1000000000	\N
+8	1152921504606846976	\N
+9	6.18	\N
+10	"abcd"	\N
+11	{}	\N
+12	{"k1":"v31","k2":300}	\N
+13	[]	\N
+14	[123,456]	\N
+15	["abc","def"]	\N
+16	[null,true,false,100,6.18,"abc"]	\N
+17	[{"k1":"v41","k2":400},1,"a",3.14]	\N
+18	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}	double
+26	\N	\N
+27	{"k1":"v1","k2":200}	\N
+28	{"a.b.c":{"k1.a1":"v31","k2":300},"a":"niu"}	\N
+
+-- !select --
+1	\N	\N
+2	null	\N
+3	true	\N
+4	false	\N
+5	100	\N
+6	10000	\N
+7	1000000000	\N
+8	1152921504606846976	\N
+9	6.18	\N
+10	"abcd"	\N
+11	{}	\N
+12	{"k1":"v31","k2":300}	\N
+13	[]	\N
+14	[123,456]	\N
+15	["abc","def"]	\N
+16	[null,true,false,100,6.18,"abc"]	\N
+17	[{"k1":"v41","k2":400},1,"a",3.14]	\N
+18	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}	string
+26	\N	\N
+27	{"k1":"v1","k2":200}	\N
+28	{"a.b.c":{"k1.a1":"v31","k2":300},"a":"niu"}	\N
+
+-- !select --
+1	\N	\N
+2	null	\N
+3	true	\N
+4	false	\N
+5	100	\N
+6	10000	\N
+7	1000000000	\N
+8	1152921504606846976	\N
+9	6.18	\N
+10	"abcd"	\N
+11	{}	\N
+12	{"k1":"v31","k2":300}	\N
+13	[]	\N
+14	[123,456]	\N
+15	["abc","def"]	\N
+16	[null,true,false,100,6.18,"abc"]	\N
+17	[{"k1":"v41","k2":400},1,"a",3.14]	\N
+18	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}	int
+26	\N	\N
+27	{"k1":"v1","k2":200}	\N
+28	{"a.b.c":{"k1.a1":"v31","k2":300},"a":"niu"}	\N
+
+-- !select --
+1	\N	\N
+2	null	\N
+3	true	\N
+4	false	\N
+5	100	\N
+6	10000	\N
+7	1000000000	\N
+8	1152921504606846976	\N
+9	6.18	\N
+10	"abcd"	\N
+11	{}	\N
+12	{"k1":"v31","k2":300}	\N
+13	[]	\N
+14	[123,456]	\N
+15	["abc","def"]	\N
+16	[null,true,false,100,6.18,"abc"]	\N
+17	[{"k1":"v41","k2":400},1,"a",3.14]	\N
+18	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}	\N
+26	\N	\N
+27	{"k1":"v1","k2":200}	\N
+28	{"a.b.c":{"k1.a1":"v31","k2":300},"a":"niu"}	\N
+
+-- !select --
+1	\N	\N
+2	null	\N
+3	true	\N
+4	false	\N
+5	100	\N
+6	10000	\N
+7	1000000000	\N
+8	1152921504606846976	\N
+9	6.18	\N
+10	"abcd"	\N
+11	{}	\N
+12	{"k1":"v31","k2":300}	\N
+13	[]	\N
+14	[123,456]	\N
+15	["abc","def"]	\N
+16	[null,true,false,100,6.18,"abc"]	\N
+17	[{"k1":"v41","k2":400},1,"a",3.14]	\N
+18	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}	object
+26	\N	\N
+27	{"k1":"v1","k2":200}	\N
+28	{"a.b.c":{"k1.a1":"v31","k2":300},"a":"niu"}	\N
+
+-- !select --
+1	\N	\N
+2	null	\N
+3	true	\N
+4	false	\N
+5	100	\N
+6	10000	\N
+7	1000000000	\N
+8	1152921504606846976	\N
+9	6.18	\N
+10	"abcd"	\N
+11	{}	\N
+12	{"k1":"v31","k2":300}	\N
+13	[]	\N
+14	[123,456]	\N
+15	["abc","def"]	\N
+16	[null,true,false,100,6.18,"abc"]	\N
+17	[{"k1":"v41","k2":400},1,"a",3.14]	\N
+18	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}	double
+26	\N	\N
+27	{"k1":"v1","k2":200}	\N
+28	{"a.b.c":{"k1.a1":"v31","k2":300},"a":"niu"}	\N
+
+-- !select --
+1	\N	\N
+2	null	\N
+3	true	\N
+4	false	\N
+5	100	\N
+6	10000	\N
+7	1000000000	\N
+8	1152921504606846976	\N
+9	6.18	\N
+10	"abcd"	\N
+11	{}	\N
+12	{"k1":"v31","k2":300}	\N
+13	[]	\N
+14	[123,456]	\N
+15	["abc","def"]	\N
+16	[null,true,false,100,6.18,"abc"]	\N
+17	[{"k1":"v41","k2":400},1,"a",3.14]	\N
+18	{"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]}	\N
+26	\N	\N
+27	{"k1":"v1","k2":200}	\N
+28	{"a.b.c":{"k1.a1":"v31","k2":300},"a":"niu"}	\N
+
+-- !cast_from_select --
+1	\N	\N
+2	null	\N
 3	true	true
 4	false	false
 5	100	\N
@@ -4067,7 +5631,7 @@
 27	{"k1":"v1","k2":200}	{"k1":"v1","k2":200}
 28	{"a.b.c":{"k1.a1":"v31","k2":300},"a":"niu"}	{"a.b.c":{"k1.a1":"v31","k2":300},"a":"niu"}
 
--- !select --
+-- !cast_to_select --
 1	\N	\N
 2	null	\N
 3	true	true
diff --git a/regression-test/suites/jsonb_p0/test_jsonb_load_and_function.groovy b/regression-test/suites/jsonb_p0/test_jsonb_load_and_function.groovy
index b1a91d06f0..4daa5a79f3 100644
--- a/regression-test/suites/jsonb_p0/test_jsonb_load_and_function.groovy
+++ b/regression-test/suites/jsonb_p0/test_jsonb_load_and_function.groovy
@@ -144,7 +144,7 @@ suite("test_jsonb_load_and_function", "p0") {
     qt_select "SELECT * FROM ${testTable} ORDER BY id"
 
     // jsonb_extract
-    qt_select "SELECT id, j, jsonb_extract(j, '\$') FROM ${testTable} ORDER BY id"
+    qt_jsonb_extract_select "SELECT id, j, jsonb_extract(j, '\$') FROM ${testTable} ORDER BY id"
     qt_select "SELECT id, j, jsonb_extract(j, '\$.*') FROM ${testTable} ORDER BY id"
 
     qt_select "SELECT id, j, jsonb_extract(j, '\$.k1') FROM ${testTable} ORDER BY id"
@@ -170,12 +170,16 @@ suite("test_jsonb_load_and_function", "p0") {
     qt_select "SELECT id, j, jsonb_extract(j, '\$.a1[4]') FROM ${testTable} ORDER BY id"
     qt_select "SELECT id, j, jsonb_extract(j, '\$.a1[10]') FROM ${testTable} ORDER BY id"
     qt_select "SELECT id, j, jsonb_extract(j, '\$.a1[last]') FROM ${testTable} ORDER BY id"
+    qt_select "SELECT id, j, jsonb_extract(j, '\$.a1[last-0]') FROM ${testTable} ORDER BY id"
     qt_select "SELECT id, j, jsonb_extract(j, '\$.a1[last-1]') FROM ${testTable} ORDER BY id"
     qt_select "SELECT id, j, jsonb_extract(j, '\$.a1[last-2]') FROM ${testTable} ORDER BY id"
     qt_select "SELECT id, j, jsonb_extract(j, '\$.a1[last-10]') FROM ${testTable} ORDER BY id"
+    qt_select "SELECT id, j, jsonb_extract(j, '\$.a1[-0]') FROM ${testTable} ORDER BY id"
+    qt_select "SELECT id, j, jsonb_extract(j, '\$.a1[-1]') FROM ${testTable} ORDER BY id"
+    qt_select "SELECT id, j, jsonb_extract(j, '\$.a1[-10]') FROM ${testTable} ORDER BY id"
 
     // jsonb_extract_string
-    qt_select "SELECT id, j, jsonb_extract_string(j, '\$') FROM ${testTable} ORDER BY id"
+    qt_jsonb_extract_string_select "SELECT id, j, jsonb_extract_string(j, '\$') FROM ${testTable} ORDER BY id"
 
     qt_select "SELECT id, j, jsonb_extract_string(j, '\$.k1') FROM ${testTable} ORDER BY id"
     qt_select "SELECT id, j, jsonb_extract_string(j, '\$.k2') FROM ${testTable} ORDER BY id"
@@ -197,9 +201,17 @@ suite("test_jsonb_load_and_function", "p0") {
     qt_select "SELECT id, j, jsonb_extract_string(j, '\$.a1[3]') FROM ${testTable} ORDER BY id"
     qt_select "SELECT id, j, jsonb_extract_string(j, '\$.a1[4]') FROM ${testTable} ORDER BY id"
     qt_select "SELECT id, j, jsonb_extract_string(j, '\$.a1[10]') FROM ${testTable} ORDER BY id"
+    qt_select "SELECT id, j, jsonb_extract_string(j, '\$.a1[last]') FROM ${testTable} ORDER BY id"
+    qt_select "SELECT id, j, jsonb_extract_string(j, '\$.a1[last-0]') FROM ${testTable} ORDER BY id"
+    qt_select "SELECT id, j, jsonb_extract_string(j, '\$.a1[last-1]') FROM ${testTable} ORDER BY id"
+    qt_select "SELECT id, j, jsonb_extract_string(j, '\$.a1[last-2]') FROM ${testTable} ORDER BY id"
+    qt_select "SELECT id, j, jsonb_extract_string(j, '\$.a1[last-10]') FROM ${testTable} ORDER BY id"
+    qt_select "SELECT id, j, jsonb_extract_string(j, '\$.a1[-0]') FROM ${testTable} ORDER BY id"
+    qt_select "SELECT id, j, jsonb_extract_string(j, '\$.a1[-1]') FROM ${testTable} ORDER BY id"
+    qt_select "SELECT id, j, jsonb_extract_string(j, '\$.a1[-10]') FROM ${testTable} ORDER BY id"
 
     // jsonb_extract_int
-    qt_select "SELECT id, j, jsonb_extract_int(j, '\$') FROM ${testTable} ORDER BY id"
+    qt_jsonb_extract_int_select "SELECT id, j, jsonb_extract_int(j, '\$') FROM ${testTable} ORDER BY id"
 
     qt_select "SELECT id, j, jsonb_extract_int(j, '\$.k1') FROM ${testTable} ORDER BY id"
     qt_select "SELECT id, j, jsonb_extract_int(j, '\$.k2') FROM ${testTable} ORDER BY id"
@@ -221,9 +233,17 @@ suite("test_jsonb_load_and_function", "p0") {
     qt_select "SELECT id, j, jsonb_extract_int(j, '\$.a1[3]') FROM ${testTable} ORDER BY id"
     qt_select "SELECT id, j, jsonb_extract_int(j, '\$.a1[4]') FROM ${testTable} ORDER BY id"
     qt_select "SELECT id, j, jsonb_extract_int(j, '\$.a1[10]') FROM ${testTable} ORDER BY id"
+    qt_select "SELECT id, j, jsonb_extract_int(j, '\$.a1[last]') FROM ${testTable} ORDER BY id"
+    qt_select "SELECT id, j, jsonb_extract_int(j, '\$.a1[last-0]') FROM ${testTable} ORDER BY id"
+    qt_select "SELECT id, j, jsonb_extract_int(j, '\$.a1[last-1]') FROM ${testTable} ORDER BY id"
+    qt_select "SELECT id, j, jsonb_extract_int(j, '\$.a1[last-2]') FROM ${testTable} ORDER BY id"
+    qt_select "SELECT id, j, jsonb_extract_int(j, '\$.a1[last-10]') FROM ${testTable} ORDER BY id"
+    qt_select "SELECT id, j, jsonb_extract_int(j, '\$.a1[-0]') FROM ${testTable} ORDER BY id"
+    qt_select "SELECT id, j, jsonb_extract_int(j, '\$.a1[-1]') FROM ${testTable} ORDER BY id"
+    qt_select "SELECT id, j, jsonb_extract_int(j, '\$.a1[-10]') FROM ${testTable} ORDER BY id"
 
     // jsonb_extract_bigint
-    qt_select "SELECT id, j, jsonb_extract_bigint(j, '\$') FROM ${testTable} ORDER BY id"
+    qt_jsonb_extract_bigint_select "SELECT id, j, jsonb_extract_bigint(j, '\$') FROM ${testTable} ORDER BY id"
 
     qt_select "SELECT id, j, jsonb_extract_bigint(j, '\$.k1') FROM ${testTable} ORDER BY id"
     qt_select "SELECT id, j, jsonb_extract_bigint(j, '\$.k2') FROM ${testTable} ORDER BY id"
@@ -245,10 +265,18 @@ suite("test_jsonb_load_and_function", "p0") {
     qt_select "SELECT id, j, jsonb_extract_bigint(j, '\$.a1[3]') FROM ${testTable} ORDER BY id"
     qt_select "SELECT id, j, jsonb_extract_bigint(j, '\$.a1[4]') FROM ${testTable} ORDER BY id"
     qt_select "SELECT id, j, jsonb_extract_bigint(j, '\$.a1[10]') FROM ${testTable} ORDER BY id"
+    qt_select "SELECT id, j, jsonb_extract_bigint(j, '\$.a1[last]') FROM ${testTable} ORDER BY id"
+    qt_select "SELECT id, j, jsonb_extract_bigint(j, '\$.a1[last-0]') FROM ${testTable} ORDER BY id"
+    qt_select "SELECT id, j, jsonb_extract_bigint(j, '\$.a1[last-1]') FROM ${testTable} ORDER BY id"
+    qt_select "SELECT id, j, jsonb_extract_bigint(j, '\$.a1[last-2]') FROM ${testTable} ORDER BY id"
+    qt_select "SELECT id, j, jsonb_extract_bigint(j, '\$.a1[last-10]') FROM ${testTable} ORDER BY id"
+    qt_select "SELECT id, j, jsonb_extract_bigint(j, '\$.a1[-0]') FROM ${testTable} ORDER BY id"
+    qt_select "SELECT id, j, jsonb_extract_bigint(j, '\$.a1[-1]') FROM ${testTable} ORDER BY id"
+    qt_select "SELECT id, j, jsonb_extract_bigint(j, '\$.a1[-10]') FROM ${testTable} ORDER BY id"
 
 
     // jsonb_extract_double
-    qt_select "SELECT id, j, jsonb_extract_double(j, '\$') FROM ${testTable} ORDER BY id"
+    qt_jsonb_extract_double_select "SELECT id, j, jsonb_extract_double(j, '\$') FROM ${testTable} ORDER BY id"
 
     qt_select "SELECT id, j, jsonb_extract_double(j, '\$.k1') FROM ${testTable} ORDER BY id"
     qt_select "SELECT id, j, jsonb_extract_double(j, '\$.k2') FROM ${testTable} ORDER BY id"
@@ -270,9 +298,17 @@ suite("test_jsonb_load_and_function", "p0") {
     qt_select "SELECT id, j, jsonb_extract_double(j, '\$.a1[3]') FROM ${testTable} ORDER BY id"
     qt_select "SELECT id, j, jsonb_extract_double(j, '\$.a1[4]') FROM ${testTable} ORDER BY id"
     qt_select "SELECT id, j, jsonb_extract_double(j, '\$.a1[10]') FROM ${testTable} ORDER BY id"
+    qt_select "SELECT id, j, jsonb_extract_double(j, '\$.a1[last]') FROM ${testTable} ORDER BY id"
+    qt_select "SELECT id, j, jsonb_extract_double(j, '\$.a1[last-0]') FROM ${testTable} ORDER BY id"
+    qt_select "SELECT id, j, jsonb_extract_double(j, '\$.a1[last-1]') FROM ${testTable} ORDER BY id"
+    qt_select "SELECT id, j, jsonb_extract_double(j, '\$.a1[last-2]') FROM ${testTable} ORDER BY id"
+    qt_select "SELECT id, j, jsonb_extract_double(j, '\$.a1[last-10]') FROM ${testTable} ORDER BY id"
+    qt_select "SELECT id, j, jsonb_extract_double(j, '\$.a1[-0]') FROM ${testTable} ORDER BY id"
+    qt_select "SELECT id, j, jsonb_extract_double(j, '\$.a1[-1]') FROM ${testTable} ORDER BY id"
+    qt_select "SELECT id, j, jsonb_extract_double(j, '\$.a1[-10]') FROM ${testTable} ORDER BY id"
 
     // jsonb_extract_bool
-    qt_select "SELECT id, j, jsonb_extract_bool(j, '\$') FROM ${testTable} ORDER BY id"
+    qt_jsonb_extract_bool_select "SELECT id, j, jsonb_extract_bool(j, '\$') FROM ${testTable} ORDER BY id"
 
     qt_select "SELECT id, j, jsonb_extract_bool(j, '\$.k1') FROM ${testTable} ORDER BY id"
     qt_select "SELECT id, j, jsonb_extract_bool(j, '\$.k2') FROM ${testTable} ORDER BY id"
@@ -294,9 +330,17 @@ suite("test_jsonb_load_and_function", "p0") {
     qt_select "SELECT id, j, jsonb_extract_bool(j, '\$.a1[3]') FROM ${testTable} ORDER BY id"
     qt_select "SELECT id, j, jsonb_extract_bool(j, '\$.a1[4]') FROM ${testTable} ORDER BY id"
     qt_select "SELECT id, j, jsonb_extract_bool(j, '\$.a1[10]') FROM ${testTable} ORDER BY id"
+    qt_select "SELECT id, j, jsonb_extract_bool(j, '\$.a1[last]') FROM ${testTable} ORDER BY id"
+    qt_select "SELECT id, j, jsonb_extract_bool(j, '\$.a1[last-0]') FROM ${testTable} ORDER BY id"
+    qt_select "SELECT id, j, jsonb_extract_bool(j, '\$.a1[last-1]') FROM ${testTable} ORDER BY id"
+    qt_select "SELECT id, j, jsonb_extract_bool(j, '\$.a1[last-2]') FROM ${testTable} ORDER BY id"
+    qt_select "SELECT id, j, jsonb_extract_bool(j, '\$.a1[last-10]') FROM ${testTable} ORDER BY id"
+    qt_select "SELECT id, j, jsonb_extract_bool(j, '\$.a1[-0]') FROM ${testTable} ORDER BY id"
+    qt_select "SELECT id, j, jsonb_extract_bool(j, '\$.a1[-1]') FROM ${testTable} ORDER BY id"
+    qt_select "SELECT id, j, jsonb_extract_bool(j, '\$.a1[-10]') FROM ${testTable} ORDER BY id"
 
     // jsonb_extract_isnull
-    qt_select "SELECT id, j, jsonb_extract_isnull(j, '\$') FROM ${testTable} ORDER BY id"
+    qt_jsonb_extract_isnull_select "SELECT id, j, jsonb_extract_isnull(j, '\$') FROM ${testTable} ORDER BY id"
 
     qt_select "SELECT id, j, jsonb_extract_isnull(j, '\$.k1') FROM ${testTable} ORDER BY id"
     qt_select "SELECT id, j, jsonb_extract_isnull(j, '\$.k2') FROM ${testTable} ORDER BY id"
@@ -318,9 +362,17 @@ suite("test_jsonb_load_and_function", "p0") {
     qt_select "SELECT id, j, jsonb_extract_isnull(j, '\$.a1[3]') FROM ${testTable} ORDER BY id"
     qt_select "SELECT id, j, jsonb_extract_isnull(j, '\$.a1[4]') FROM ${testTable} ORDER BY id"
     qt_select "SELECT id, j, jsonb_extract_isnull(j, '\$.a1[10]') FROM ${testTable} ORDER BY id"
+    qt_select "SELECT id, j, jsonb_extract_isnull(j, '\$.a1[last]') FROM ${testTable} ORDER BY id"
+    qt_select "SELECT id, j, jsonb_extract_isnull(j, '\$.a1[last-0]') FROM ${testTable} ORDER BY id"
+    qt_select "SELECT id, j, jsonb_extract_isnull(j, '\$.a1[last-1]') FROM ${testTable} ORDER BY id"
+    qt_select "SELECT id, j, jsonb_extract_isnull(j, '\$.a1[last-2]') FROM ${testTable} ORDER BY id"
+    qt_select "SELECT id, j, jsonb_extract_isnull(j, '\$.a1[last-10]') FROM ${testTable} ORDER BY id"
+    qt_select "SELECT id, j, jsonb_extract_isnull(j, '\$.a1[-0]') FROM ${testTable} ORDER BY id"
+    qt_select "SELECT id, j, jsonb_extract_isnull(j, '\$.a1[-1]') FROM ${testTable} ORDER BY id"
+    qt_select "SELECT id, j, jsonb_extract_isnull(j, '\$.a1[-10]') FROM ${testTable} ORDER BY id"
 
     // jsonb_exists_path
-    qt_select "SELECT id, j, jsonb_exists_path(j, '\$') FROM ${testTable} ORDER BY id"
+    qt_jsonb_exists_path_select "SELECT id, j, jsonb_exists_path(j, '\$') FROM ${testTable} ORDER BY id"
 
     qt_select "SELECT id, j, jsonb_exists_path(j, '\$.k1') FROM ${testTable} ORDER BY id"
     qt_select "SELECT id, j, jsonb_exists_path(j, '\$.k2') FROM ${testTable} ORDER BY id"
@@ -342,9 +394,17 @@ suite("test_jsonb_load_and_function", "p0") {
     qt_select "SELECT id, j, jsonb_exists_path(j, '\$.a1[3]') FROM ${testTable} ORDER BY id"
     qt_select "SELECT id, j, jsonb_exists_path(j, '\$.a1[4]') FROM ${testTable} ORDER BY id"
     qt_select "SELECT id, j, jsonb_exists_path(j, '\$.a1[10]') FROM ${testTable} ORDER BY id"
+    qt_select "SELECT id, j, jsonb_exists_path(j, '\$.a1[last]') FROM ${testTable} ORDER BY id"
+    qt_select "SELECT id, j, jsonb_exists_path(j, '\$.a1[last-0]') FROM ${testTable} ORDER BY id"
+    qt_select "SELECT id, j, jsonb_exists_path(j, '\$.a1[last-1]') FROM ${testTable} ORDER BY id"
+    qt_select "SELECT id, j, jsonb_exists_path(j, '\$.a1[last-2]') FROM ${testTable} ORDER BY id"
+    qt_select "SELECT id, j, jsonb_exists_path(j, '\$.a1[last-10]') FROM ${testTable} ORDER BY id"
+    qt_select "SELECT id, j, jsonb_exists_path(j, '\$.a1[-0]') FROM ${testTable} ORDER BY id"
+    qt_select "SELECT id, j, jsonb_exists_path(j, '\$.a1[-1]') FROM ${testTable} ORDER BY id"
+    qt_select "SELECT id, j, jsonb_exists_path(j, '\$.a1[-10]') FROM ${testTable} ORDER BY id"
 
     // jsonb_type
-    qt_select "SELECT id, j, jsonb_type(j, '\$') FROM ${testTable} ORDER BY id"
+    qt_jsonb_type_select "SELECT id, j, jsonb_type(j, '\$') FROM ${testTable} ORDER BY id"
 
     qt_select "SELECT id, j, jsonb_type(j, '\$.k1') FROM ${testTable} ORDER BY id"
     qt_select "SELECT id, j, jsonb_type(j, '\$.k2') FROM ${testTable} ORDER BY id"
@@ -366,10 +426,18 @@ suite("test_jsonb_load_and_function", "p0") {
     qt_select "SELECT id, j, jsonb_type(j, '\$.a1[3]') FROM ${testTable} ORDER BY id"
     qt_select "SELECT id, j, jsonb_type(j, '\$.a1[4]') FROM ${testTable} ORDER BY id"
     qt_select "SELECT id, j, jsonb_type(j, '\$.a1[10]') FROM ${testTable} ORDER BY id"
+    qt_select "SELECT id, j, jsonb_type(j, '\$.a1[last]') FROM ${testTable} ORDER BY id"
+    qt_select "SELECT id, j, jsonb_type(j, '\$.a1[last-0]') FROM ${testTable} ORDER BY id"
+    qt_select "SELECT id, j, jsonb_type(j, '\$.a1[last-1]') FROM ${testTable} ORDER BY id"
+    qt_select "SELECT id, j, jsonb_type(j, '\$.a1[last-2]') FROM ${testTable} ORDER BY id"
+    qt_select "SELECT id, j, jsonb_type(j, '\$.a1[last-10]') FROM ${testTable} ORDER BY id"
+    qt_select "SELECT id, j, jsonb_type(j, '\$.a1[-0]') FROM ${testTable} ORDER BY id"
+    qt_select "SELECT id, j, jsonb_type(j, '\$.a1[-1]') FROM ${testTable} ORDER BY id"
+    qt_select "SELECT id, j, jsonb_type(j, '\$.a1[-10]') FROM ${testTable} ORDER BY id"
 
 
     // CAST from JSONB
-    qt_select "SELECT id, j, CAST(j AS BOOLEAN) FROM ${testTable} ORDER BY id"
+    qt_cast_from_select "SELECT id, j, CAST(j AS BOOLEAN) FROM ${testTable} ORDER BY id"
     qt_select "SELECT id, j, CAST(j AS SMALLINT) FROM ${testTable} ORDER BY id"
     qt_select "SELECT id, j, CAST(j AS INT) FROM ${testTable} ORDER BY id"
     qt_select "SELECT id, j, CAST(j AS BIGINT) FROM ${testTable} ORDER BY id"
@@ -377,7 +445,7 @@ suite("test_jsonb_load_and_function", "p0") {
     qt_select "SELECT id, j, CAST(j AS STRING) FROM ${testTable} ORDER BY id"
 
     // CAST to JSONB
-    qt_select "SELECT id, j, CAST(CAST(j AS BOOLEAN) AS JSONB) FROM ${testTable} ORDER BY id"
+    qt_cast_to_select "SELECT id, j, CAST(CAST(j AS BOOLEAN) AS JSONB) FROM ${testTable} ORDER BY id"
     qt_select "SELECT id, j, CAST(CAST(j AS SMALLINT) AS JSONB) FROM ${testTable} ORDER BY id"
     qt_select "SELECT id, j, CAST(CAST(j AS INT) AS JSONB) FROM ${testTable} ORDER BY id"
     qt_select "SELECT id, j, CAST(CAST(j AS BIGINT) AS JSONB) FROM ${testTable} ORDER BY id"
diff --git a/regression-test/suites/jsonb_p0/test_jsonb_load_unique_key_and_function.groovy b/regression-test/suites/jsonb_p0/test_jsonb_load_unique_key_and_function.groovy
index c298f5642b..6343b458ec 100644
--- a/regression-test/suites/jsonb_p0/test_jsonb_load_unique_key_and_function.groovy
+++ b/regression-test/suites/jsonb_p0/test_jsonb_load_unique_key_and_function.groovy
@@ -137,7 +137,7 @@ suite("test_jsonb_unique_load_and_function", "p0") {
     qt_select "SELECT * FROM ${testTable} ORDER BY id"
 
     // jsonb_extract
-    qt_select "SELECT id, j, jsonb_extract(j, '\$') FROM ${testTable} ORDER BY id"
+    qt_jsonb_extract_select "SELECT id, j, jsonb_extract(j, '\$') FROM ${testTable} ORDER BY id"
     qt_select "SELECT id, j, jsonb_extract(j, '\$.*') FROM ${testTable} ORDER BY id"
 
     qt_select "SELECT id, j, jsonb_extract(j, '\$.k1') FROM ${testTable} ORDER BY id"
@@ -163,12 +163,16 @@ suite("test_jsonb_unique_load_and_function", "p0") {
     qt_select "SELECT id, j, jsonb_extract(j, '\$.a1[4]') FROM ${testTable} ORDER BY id"
     qt_select "SELECT id, j, jsonb_extract(j, '\$.a1[10]') FROM ${testTable} ORDER BY id"
     qt_select "SELECT id, j, jsonb_extract(j, '\$.a1[last]') FROM ${testTable} ORDER BY id"
+    qt_select "SELECT id, j, jsonb_extract(j, '\$.a1[last-0]') FROM ${testTable} ORDER BY id"
     qt_select "SELECT id, j, jsonb_extract(j, '\$.a1[last-1]') FROM ${testTable} ORDER BY id"
     qt_select "SELECT id, j, jsonb_extract(j, '\$.a1[last-2]') FROM ${testTable} ORDER BY id"
     qt_select "SELECT id, j, jsonb_extract(j, '\$.a1[last-10]') FROM ${testTable} ORDER BY id"
+    qt_select "SELECT id, j, jsonb_extract(j, '\$.a1[-0]') FROM ${testTable} ORDER BY id"
+    qt_select "SELECT id, j, jsonb_extract(j, '\$.a1[-1]') FROM ${testTable} ORDER BY id"
+    qt_select "SELECT id, j, jsonb_extract(j, '\$.a1[-10]') FROM ${testTable} ORDER BY id"
 
     // jsonb_extract_string
-    qt_select "SELECT id, j, jsonb_extract_string(j, '\$') FROM ${testTable} ORDER BY id"
+    qt_jsonb_extract_string_select "SELECT id, j, jsonb_extract_string(j, '\$') FROM ${testTable} ORDER BY id"
 
     qt_select "SELECT id, j, jsonb_extract_string(j, '\$.k1') FROM ${testTable} ORDER BY id"
     qt_select "SELECT id, j, jsonb_extract_string(j, '\$.k2') FROM ${testTable} ORDER BY id"
@@ -190,9 +194,17 @@ suite("test_jsonb_unique_load_and_function", "p0") {
     qt_select "SELECT id, j, jsonb_extract_string(j, '\$.a1[3]') FROM ${testTable} ORDER BY id"
     qt_select "SELECT id, j, jsonb_extract_string(j, '\$.a1[4]') FROM ${testTable} ORDER BY id"
     qt_select "SELECT id, j, jsonb_extract_string(j, '\$.a1[10]') FROM ${testTable} ORDER BY id"
+    qt_select "SELECT id, j, jsonb_extract_string(j, '\$.a1[last]') FROM ${testTable} ORDER BY id"
+    qt_select "SELECT id, j, jsonb_extract_string(j, '\$.a1[last-0]') FROM ${testTable} ORDER BY id"
+    qt_select "SELECT id, j, jsonb_extract_string(j, '\$.a1[last-1]') FROM ${testTable} ORDER BY id"
+    qt_select "SELECT id, j, jsonb_extract_string(j, '\$.a1[last-2]') FROM ${testTable} ORDER BY id"
+    qt_select "SELECT id, j, jsonb_extract_string(j, '\$.a1[last-10]') FROM ${testTable} ORDER BY id"
+    qt_select "SELECT id, j, jsonb_extract_string(j, '\$.a1[-0]') FROM ${testTable} ORDER BY id"
+    qt_select "SELECT id, j, jsonb_extract_string(j, '\$.a1[-1]') FROM ${testTable} ORDER BY id"
+    qt_select "SELECT id, j, jsonb_extract_string(j, '\$.a1[-10]') FROM ${testTable} ORDER BY id"
 
     // jsonb_extract_int
-    qt_select "SELECT id, j, jsonb_extract_int(j, '\$') FROM ${testTable} ORDER BY id"
+    qt_jsonb_extract_int_select "SELECT id, j, jsonb_extract_int(j, '\$') FROM ${testTable} ORDER BY id"
 
     qt_select "SELECT id, j, jsonb_extract_int(j, '\$.k1') FROM ${testTable} ORDER BY id"
     qt_select "SELECT id, j, jsonb_extract_int(j, '\$.k2') FROM ${testTable} ORDER BY id"
@@ -214,9 +226,17 @@ suite("test_jsonb_unique_load_and_function", "p0") {
     qt_select "SELECT id, j, jsonb_extract_int(j, '\$.a1[3]') FROM ${testTable} ORDER BY id"
     qt_select "SELECT id, j, jsonb_extract_int(j, '\$.a1[4]') FROM ${testTable} ORDER BY id"
     qt_select "SELECT id, j, jsonb_extract_int(j, '\$.a1[10]') FROM ${testTable} ORDER BY id"
+    qt_select "SELECT id, j, jsonb_extract_int(j, '\$.a1[last]') FROM ${testTable} ORDER BY id"
+    qt_select "SELECT id, j, jsonb_extract_int(j, '\$.a1[last-0]') FROM ${testTable} ORDER BY id"
+    qt_select "SELECT id, j, jsonb_extract_int(j, '\$.a1[last-1]') FROM ${testTable} ORDER BY id"
+    qt_select "SELECT id, j, jsonb_extract_int(j, '\$.a1[last-2]') FROM ${testTable} ORDER BY id"
+    qt_select "SELECT id, j, jsonb_extract_int(j, '\$.a1[last-10]') FROM ${testTable} ORDER BY id"
+    qt_select "SELECT id, j, jsonb_extract_int(j, '\$.a1[-0]') FROM ${testTable} ORDER BY id"
+    qt_select "SELECT id, j, jsonb_extract_int(j, '\$.a1[-1]') FROM ${testTable} ORDER BY id"
+    qt_select "SELECT id, j, jsonb_extract_int(j, '\$.a1[-10]') FROM ${testTable} ORDER BY id"
 
     // jsonb_extract_bigint
-    qt_select "SELECT id, j, jsonb_extract_bigint(j, '\$') FROM ${testTable} ORDER BY id"
+    qt_jsonb_extract_bigint_select "SELECT id, j, jsonb_extract_bigint(j, '\$') FROM ${testTable} ORDER BY id"
 
     qt_select "SELECT id, j, jsonb_extract_bigint(j, '\$.k1') FROM ${testTable} ORDER BY id"
     qt_select "SELECT id, j, jsonb_extract_bigint(j, '\$.k2') FROM ${testTable} ORDER BY id"
@@ -238,10 +258,18 @@ suite("test_jsonb_unique_load_and_function", "p0") {
     qt_select "SELECT id, j, jsonb_extract_bigint(j, '\$.a1[3]') FROM ${testTable} ORDER BY id"
     qt_select "SELECT id, j, jsonb_extract_bigint(j, '\$.a1[4]') FROM ${testTable} ORDER BY id"
     qt_select "SELECT id, j, jsonb_extract_bigint(j, '\$.a1[10]') FROM ${testTable} ORDER BY id"
+    qt_select "SELECT id, j, jsonb_extract_bigint(j, '\$.a1[last]') FROM ${testTable} ORDER BY id"
+    qt_select "SELECT id, j, jsonb_extract_bigint(j, '\$.a1[last-0]') FROM ${testTable} ORDER BY id"
+    qt_select "SELECT id, j, jsonb_extract_bigint(j, '\$.a1[last-1]') FROM ${testTable} ORDER BY id"
+    qt_select "SELECT id, j, jsonb_extract_bigint(j, '\$.a1[last-2]') FROM ${testTable} ORDER BY id"
+    qt_select "SELECT id, j, jsonb_extract_bigint(j, '\$.a1[last-10]') FROM ${testTable} ORDER BY id"
+    qt_select "SELECT id, j, jsonb_extract_bigint(j, '\$.a1[-0]') FROM ${testTable} ORDER BY id"
+    qt_select "SELECT id, j, jsonb_extract_bigint(j, '\$.a1[-1]') FROM ${testTable} ORDER BY id"
+    qt_select "SELECT id, j, jsonb_extract_bigint(j, '\$.a1[-10]') FROM ${testTable} ORDER BY id"
 
 
     // jsonb_extract_double
-    qt_select "SELECT id, j, jsonb_extract_double(j, '\$') FROM ${testTable} ORDER BY id"
+    qt_jsonb_extract_double_select "SELECT id, j, jsonb_extract_double(j, '\$') FROM ${testTable} ORDER BY id"
 
     qt_select "SELECT id, j, jsonb_extract_double(j, '\$.k1') FROM ${testTable} ORDER BY id"
     qt_select "SELECT id, j, jsonb_extract_double(j, '\$.k2') FROM ${testTable} ORDER BY id"
@@ -263,9 +291,17 @@ suite("test_jsonb_unique_load_and_function", "p0") {
     qt_select "SELECT id, j, jsonb_extract_double(j, '\$.a1[3]') FROM ${testTable} ORDER BY id"
     qt_select "SELECT id, j, jsonb_extract_double(j, '\$.a1[4]') FROM ${testTable} ORDER BY id"
     qt_select "SELECT id, j, jsonb_extract_double(j, '\$.a1[10]') FROM ${testTable} ORDER BY id"
+    qt_select "SELECT id, j, jsonb_extract_double(j, '\$.a1[last]') FROM ${testTable} ORDER BY id"
+    qt_select "SELECT id, j, jsonb_extract_double(j, '\$.a1[last-0]') FROM ${testTable} ORDER BY id"
+    qt_select "SELECT id, j, jsonb_extract_double(j, '\$.a1[last-1]') FROM ${testTable} ORDER BY id"
+    qt_select "SELECT id, j, jsonb_extract_double(j, '\$.a1[last-2]') FROM ${testTable} ORDER BY id"
+    qt_select "SELECT id, j, jsonb_extract_double(j, '\$.a1[last-10]') FROM ${testTable} ORDER BY id"
+    qt_select "SELECT id, j, jsonb_extract_double(j, '\$.a1[-0]') FROM ${testTable} ORDER BY id"
+    qt_select "SELECT id, j, jsonb_extract_double(j, '\$.a1[-1]') FROM ${testTable} ORDER BY id"
+    qt_select "SELECT id, j, jsonb_extract_double(j, '\$.a1[-10]') FROM ${testTable} ORDER BY id"
 
     // jsonb_extract_bool
-    qt_select "SELECT id, j, jsonb_extract_bool(j, '\$') FROM ${testTable} ORDER BY id"
+    qt_jsonb_extract_bool_select "SELECT id, j, jsonb_extract_bool(j, '\$') FROM ${testTable} ORDER BY id"
 
     qt_select "SELECT id, j, jsonb_extract_bool(j, '\$.k1') FROM ${testTable} ORDER BY id"
     qt_select "SELECT id, j, jsonb_extract_bool(j, '\$.k2') FROM ${testTable} ORDER BY id"
@@ -287,9 +323,17 @@ suite("test_jsonb_unique_load_and_function", "p0") {
     qt_select "SELECT id, j, jsonb_extract_bool(j, '\$.a1[3]') FROM ${testTable} ORDER BY id"
     qt_select "SELECT id, j, jsonb_extract_bool(j, '\$.a1[4]') FROM ${testTable} ORDER BY id"
     qt_select "SELECT id, j, jsonb_extract_bool(j, '\$.a1[10]') FROM ${testTable} ORDER BY id"
+    qt_select "SELECT id, j, jsonb_extract_bool(j, '\$.a1[last]') FROM ${testTable} ORDER BY id"
+    qt_select "SELECT id, j, jsonb_extract_bool(j, '\$.a1[last-0]') FROM ${testTable} ORDER BY id"
+    qt_select "SELECT id, j, jsonb_extract_bool(j, '\$.a1[last-1]') FROM ${testTable} ORDER BY id"
+    qt_select "SELECT id, j, jsonb_extract_bool(j, '\$.a1[last-2]') FROM ${testTable} ORDER BY id"
+    qt_select "SELECT id, j, jsonb_extract_bool(j, '\$.a1[last-10]') FROM ${testTable} ORDER BY id"
+    qt_select "SELECT id, j, jsonb_extract_bool(j, '\$.a1[-0]') FROM ${testTable} ORDER BY id"
+    qt_select "SELECT id, j, jsonb_extract_bool(j, '\$.a1[-1]') FROM ${testTable} ORDER BY id"
+    qt_select "SELECT id, j, jsonb_extract_bool(j, '\$.a1[-10]') FROM ${testTable} ORDER BY id"
 
     // jsonb_extract_isnull
-    qt_select "SELECT id, j, jsonb_extract_isnull(j, '\$') FROM ${testTable} ORDER BY id"
+    qt_jsonb_extract_isnull_select "SELECT id, j, jsonb_extract_isnull(j, '\$') FROM ${testTable} ORDER BY id"
 
     qt_select "SELECT id, j, jsonb_extract_isnull(j, '\$.k1') FROM ${testTable} ORDER BY id"
     qt_select "SELECT id, j, jsonb_extract_isnull(j, '\$.k2') FROM ${testTable} ORDER BY id"
@@ -311,9 +355,17 @@ suite("test_jsonb_unique_load_and_function", "p0") {
     qt_select "SELECT id, j, jsonb_extract_isnull(j, '\$.a1[3]') FROM ${testTable} ORDER BY id"
     qt_select "SELECT id, j, jsonb_extract_isnull(j, '\$.a1[4]') FROM ${testTable} ORDER BY id"
     qt_select "SELECT id, j, jsonb_extract_isnull(j, '\$.a1[10]') FROM ${testTable} ORDER BY id"
+    qt_select "SELECT id, j, jsonb_extract_isnull(j, '\$.a1[last]') FROM ${testTable} ORDER BY id"
+    qt_select "SELECT id, j, jsonb_extract_isnull(j, '\$.a1[last-0]') FROM ${testTable} ORDER BY id"
+    qt_select "SELECT id, j, jsonb_extract_isnull(j, '\$.a1[last-1]') FROM ${testTable} ORDER BY id"
+    qt_select "SELECT id, j, jsonb_extract_isnull(j, '\$.a1[last-2]') FROM ${testTable} ORDER BY id"
+    qt_select "SELECT id, j, jsonb_extract_isnull(j, '\$.a1[last-10]') FROM ${testTable} ORDER BY id"
+    qt_select "SELECT id, j, jsonb_extract_isnull(j, '\$.a1[-0]') FROM ${testTable} ORDER BY id"
+    qt_select "SELECT id, j, jsonb_extract_isnull(j, '\$.a1[-1]') FROM ${testTable} ORDER BY id"
+    qt_select "SELECT id, j, jsonb_extract_isnull(j, '\$.a1[-10]') FROM ${testTable} ORDER BY id"
 
     // jsonb_exists_path
-    qt_select "SELECT id, j, jsonb_exists_path(j, '\$') FROM ${testTable} ORDER BY id"
+    qt_jsonb_exists_path_select "SELECT id, j, jsonb_exists_path(j, '\$') FROM ${testTable} ORDER BY id"
 
     qt_select "SELECT id, j, jsonb_exists_path(j, '\$.k1') FROM ${testTable} ORDER BY id"
     qt_select "SELECT id, j, jsonb_exists_path(j, '\$.k2') FROM ${testTable} ORDER BY id"
@@ -335,9 +387,17 @@ suite("test_jsonb_unique_load_and_function", "p0") {
     qt_select "SELECT id, j, jsonb_exists_path(j, '\$.a1[3]') FROM ${testTable} ORDER BY id"
     qt_select "SELECT id, j, jsonb_exists_path(j, '\$.a1[4]') FROM ${testTable} ORDER BY id"
     qt_select "SELECT id, j, jsonb_exists_path(j, '\$.a1[10]') FROM ${testTable} ORDER BY id"
+    qt_select "SELECT id, j, jsonb_exists_path(j, '\$.a1[last]') FROM ${testTable} ORDER BY id"
+    qt_select "SELECT id, j, jsonb_exists_path(j, '\$.a1[last-0]') FROM ${testTable} ORDER BY id"
+    qt_select "SELECT id, j, jsonb_exists_path(j, '\$.a1[last-1]') FROM ${testTable} ORDER BY id"
+    qt_select "SELECT id, j, jsonb_exists_path(j, '\$.a1[last-2]') FROM ${testTable} ORDER BY id"
+    qt_select "SELECT id, j, jsonb_exists_path(j, '\$.a1[last-10]') FROM ${testTable} ORDER BY id"
+    qt_select "SELECT id, j, jsonb_exists_path(j, '\$.a1[-0]') FROM ${testTable} ORDER BY id"
+    qt_select "SELECT id, j, jsonb_exists_path(j, '\$.a1[-1]') FROM ${testTable} ORDER BY id"
+    qt_select "SELECT id, j, jsonb_exists_path(j, '\$.a1[-10]') FROM ${testTable} ORDER BY id"
 
     // jsonb_type
-    qt_select "SELECT id, j, jsonb_type(j, '\$') FROM ${testTable} ORDER BY id"
+    qt_jsonb_type_select "SELECT id, j, jsonb_type(j, '\$') FROM ${testTable} ORDER BY id"
 
     qt_select "SELECT id, j, jsonb_type(j, '\$.k1') FROM ${testTable} ORDER BY id"
     qt_select "SELECT id, j, jsonb_type(j, '\$.k2') FROM ${testTable} ORDER BY id"
@@ -359,10 +419,18 @@ suite("test_jsonb_unique_load_and_function", "p0") {
     qt_select "SELECT id, j, jsonb_type(j, '\$.a1[3]') FROM ${testTable} ORDER BY id"
     qt_select "SELECT id, j, jsonb_type(j, '\$.a1[4]') FROM ${testTable} ORDER BY id"
     qt_select "SELECT id, j, jsonb_type(j, '\$.a1[10]') FROM ${testTable} ORDER BY id"
+    qt_select "SELECT id, j, jsonb_type(j, '\$.a1[last]') FROM ${testTable} ORDER BY id"
+    qt_select "SELECT id, j, jsonb_type(j, '\$.a1[last-0]') FROM ${testTable} ORDER BY id"
+    qt_select "SELECT id, j, jsonb_type(j, '\$.a1[last-1]') FROM ${testTable} ORDER BY id"
+    qt_select "SELECT id, j, jsonb_type(j, '\$.a1[last-2]') FROM ${testTable} ORDER BY id"
+    qt_select "SELECT id, j, jsonb_type(j, '\$.a1[last-10]') FROM ${testTable} ORDER BY id"
+    qt_select "SELECT id, j, jsonb_type(j, '\$.a1[-0]') FROM ${testTable} ORDER BY id"
+    qt_select "SELECT id, j, jsonb_type(j, '\$.a1[-1]') FROM ${testTable} ORDER BY id"
+    qt_select "SELECT id, j, jsonb_type(j, '\$.a1[-10]') FROM ${testTable} ORDER BY id"
 
 
     // CAST from JSONB
-    qt_select "SELECT id, j, CAST(j AS BOOLEAN) FROM ${testTable} ORDER BY id"
+    qt_cast_from_select "SELECT id, j, CAST(j AS BOOLEAN) FROM ${testTable} ORDER BY id"
     qt_select "SELECT id, j, CAST(j AS SMALLINT) FROM ${testTable} ORDER BY id"
     qt_select "SELECT id, j, CAST(j AS INT) FROM ${testTable} ORDER BY id"
     qt_select "SELECT id, j, CAST(j AS BIGINT) FROM ${testTable} ORDER BY id"
@@ -370,7 +438,7 @@ suite("test_jsonb_unique_load_and_function", "p0") {
     qt_select "SELECT id, j, CAST(j AS STRING) FROM ${testTable} ORDER BY id"
 
     // CAST to JSONB
-    qt_select "SELECT id, j, CAST(CAST(j AS BOOLEAN) AS JSONB) FROM ${testTable} ORDER BY id"
+    qt_cast_to_select "SELECT id, j, CAST(CAST(j AS BOOLEAN) AS JSONB) FROM ${testTable} ORDER BY id"
     qt_select "SELECT id, j, CAST(CAST(j AS SMALLINT) AS JSONB) FROM ${testTable} ORDER BY id"
     qt_select "SELECT id, j, CAST(CAST(j AS INT) AS JSONB) FROM ${testTable} ORDER BY id"
     qt_select "SELECT id, j, CAST(CAST(j AS BIGINT) AS JSONB) FROM ${testTable} ORDER BY id"


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@doris.apache.org
For additional commands, e-mail: commits-help@doris.apache.org