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

morningman 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 a28f451dbe3 [feature](ES Catalog)Support control scroll level by 
config (#37180)
a28f451dbe3 is described below

commit a28f451dbe3b314c9e726b05bf38952718cdb31a
Author: qiye <jianliang5...@gmail.com>
AuthorDate: Fri Jul 12 08:50:23 2024 +0800

    [feature](ES Catalog)Support control scroll level by config (#37180)
    
    ## Proposed changes
    
    1. Add session variable `enable_es_parallel_scroll`, default true. When
    it's false, Doris will send a scroll query to ES by one backend without
    shard preference and sort info. Which equals to call the search api
    directly of ES and it's very useful when you need a global sorting based
    on scores.
    2. Print ES response body when http request is not OK.
---
 be/src/exec/es/es_scan_reader.cpp                  |  86 +++-
 be/src/exec/es/es_scroll_query.cpp                 |  18 +-
 be/src/http/http_client.cpp                        |  14 +-
 be/src/http/http_client.h                          |   2 +-
 .../elasticsearch/scripts/es_init.sh               |  29 ++
 .../doris/datasource/es/source/EsScanNode.java     |  32 +-
 .../java/org/apache/doris/qe/SessionVariable.java  |  20 +
 .../data/external_table_p0/es/test_es_query.out    | 492 +++++++++++++++++++++
 .../external_table_p0/es/test_es_query.groovy      | 268 ++++++-----
 9 files changed, 801 insertions(+), 160 deletions(-)

diff --git a/be/src/exec/es/es_scan_reader.cpp 
b/be/src/exec/es/es_scan_reader.cpp
index 183719fc7c5..7aeed98cd36 100644
--- a/be/src/exec/es/es_scan_reader.cpp
+++ b/be/src/exec/es/es_scan_reader.cpp
@@ -74,19 +74,32 @@ ESScanReader::ESScanReader(const std::string& target,
     std::string filter_path =
             _doc_value_mode ? DOCVALUE_SCROLL_SEARCH_FILTER_PATH : 
SOURCE_SCROLL_SEARCH_FILTER_PATH;
 
+    // When shard_id is negative(-1), the request will be sent to ES without 
shard preference.
+    int32 shard_id = std::stoi(_shards);
     if (props.find(KEY_TERMINATE_AFTER) != props.end()) {
         _exactly_once = true;
         std::stringstream scratch;
         // just send a normal search  against the elasticsearch with 
additional terminate_after param to achieve terminate early effect when limit 
take effect
         if (_type.empty()) {
-            // `terminate_after` and `size` can not be used together in scroll 
request of ES 8.x
-            scratch << _target << REQUEST_SEPARATOR << _index << "/_search?"
-                    << REQUEST_PREFERENCE_PREFIX << _shards << "&" << 
filter_path;
+            if (shard_id < 0) {
+                scratch << _target << REQUEST_SEPARATOR << _index << 
"/_search?" << filter_path;
+            } else {
+                // `terminate_after` and `size` can not be used together in 
scroll request of ES 8.x
+                scratch << _target << REQUEST_SEPARATOR << _index << 
"/_search?"
+                        << REQUEST_PREFERENCE_PREFIX << _shards << "&" << 
filter_path;
+            }
         } else {
-            scratch << _target << REQUEST_SEPARATOR << _index << 
REQUEST_SEPARATOR << _type
-                    << "/_search?"
-                    << "terminate_after=" << props.at(KEY_TERMINATE_AFTER)
-                    << REQUEST_PREFERENCE_PREFIX << _shards << "&" << 
filter_path;
+            if (shard_id < 0) {
+                scratch << _target << REQUEST_SEPARATOR << _index << 
REQUEST_SEPARATOR << _type
+                        << "/_search?"
+                        << "terminate_after=" << props.at(KEY_TERMINATE_AFTER) 
<< "&"
+                        << filter_path;
+            } else {
+                scratch << _target << REQUEST_SEPARATOR << _index << 
REQUEST_SEPARATOR << _type
+                        << "/_search?"
+                        << "terminate_after=" << props.at(KEY_TERMINATE_AFTER)
+                        << REQUEST_PREFERENCE_PREFIX << _shards << "&" << 
filter_path;
+            }
         }
         _search_url = scratch.str();
     } else {
@@ -95,15 +108,27 @@ ESScanReader::ESScanReader(const std::string& target,
         // scroll request for scanning
         // add terminate_after for the first scroll to avoid decompress all 
postings list
         if (_type.empty()) {
-            // `terminate_after` and `size` can not be used together in scroll 
request of ES 8.x
-            scratch << _target << REQUEST_SEPARATOR << _index << "/_search?"
-                    << "scroll=" << _scroll_keep_alive << 
REQUEST_PREFERENCE_PREFIX << _shards
-                    << "&" << filter_path;
+            if (shard_id < 0) {
+                scratch << _target << REQUEST_SEPARATOR << _index << 
"/_search?"
+                        << "scroll=" << _scroll_keep_alive << "&" << 
filter_path;
+            } else {
+                // `terminate_after` and `size` can not be used together in 
scroll request of ES 8.x
+                scratch << _target << REQUEST_SEPARATOR << _index << 
"/_search?"
+                        << "scroll=" << _scroll_keep_alive << 
REQUEST_PREFERENCE_PREFIX << _shards
+                        << "&" << filter_path;
+            }
         } else {
-            scratch << _target << REQUEST_SEPARATOR << _index << 
REQUEST_SEPARATOR << _type
-                    << "/_search?"
-                    << "scroll=" << _scroll_keep_alive << 
REQUEST_PREFERENCE_PREFIX << _shards
-                    << "&" << filter_path << "&terminate_after=" << 
batch_size_str;
+            if (shard_id < 0) {
+                scratch << _target << REQUEST_SEPARATOR << _index << 
REQUEST_SEPARATOR << _type
+                        << "/_search?"
+                        << "scroll=" << _scroll_keep_alive << "&" << 
filter_path
+                        << "&terminate_after=" << batch_size_str;
+            } else {
+                scratch << _target << REQUEST_SEPARATOR << _index << 
REQUEST_SEPARATOR << _type
+                        << "/_search?"
+                        << "scroll=" << _scroll_keep_alive << 
REQUEST_PREFERENCE_PREFIX << _shards
+                        << "&" << filter_path << "&terminate_after=" << 
batch_size_str;
+            }
         }
         _init_scroll_url = scratch.str();
         _next_scroll_url = _target + REQUEST_SEARCH_SCROLL_PATH + "?" + 
filter_path;
@@ -115,11 +140,13 @@ ESScanReader::~ESScanReader() {}
 
 Status ESScanReader::open() {
     _is_first = true;
+    // we do not enable set_fail_on_error for ES http request to get more 
detail error messages
+    bool set_fail_on_error = false;
     if (_exactly_once) {
-        RETURN_IF_ERROR(_network_client.init(_search_url));
+        RETURN_IF_ERROR(_network_client.init(_search_url, set_fail_on_error));
         LOG(INFO) << "search request URL: " << _search_url;
     } else {
-        RETURN_IF_ERROR(_network_client.init(_init_scroll_url));
+        RETURN_IF_ERROR(_network_client.init(_init_scroll_url, 
set_fail_on_error));
         LOG(INFO) << "First scroll request URL: " << _init_scroll_url;
     }
     _network_client.set_basic_auth(_user_name, _passwd);
@@ -132,7 +159,8 @@ Status ESScanReader::open() {
     Status status = _network_client.execute_post_request(_query, 
&_cached_response);
     if (!status.ok() || _network_client.get_http_status() != 200) {
         std::stringstream ss;
-        ss << "Failed to connect to ES server, errmsg is: " << status;
+        ss << "Failed to connect to ES server, errmsg is: " << status
+           << ", response: " << _cached_response;
         LOG(WARNING) << ss.str();
         return Status::InternalError(ss.str());
     }
@@ -155,7 +183,9 @@ Status ESScanReader::get_next(bool* scan_eos, 
std::unique_ptr<ScrollParser>& scr
         if (_exactly_once) {
             return Status::OK();
         }
-        RETURN_IF_ERROR(_network_client.init(_next_scroll_url));
+        // we do not enable set_fail_on_error for ES http request to get more 
detail error messages
+        bool set_fail_on_error = false;
+        RETURN_IF_ERROR(_network_client.init(_next_scroll_url, 
set_fail_on_error));
         _network_client.set_basic_auth(_user_name, _passwd);
         _network_client.set_content_type("application/json");
         _network_client.set_timeout_ms(_http_timeout_ms);
@@ -168,13 +198,15 @@ Status ESScanReader::get_next(bool* scan_eos, 
std::unique_ptr<ScrollParser>& scr
         long status = _network_client.get_http_status();
         if (status == 404) {
             LOG(WARNING) << "request scroll search failure 404["
-                         << ", response: " << (response.empty() ? "empty 
response" : response);
+                         << ", response: " << (response.empty() ? "empty 
response" : response)
+                         << "]";
             return Status::InternalError("No search context found for {}", 
_scroll_id);
         }
         if (status != 200) {
             LOG(WARNING) << "request scroll search failure["
-                         << "http status" << status
-                         << ", response: " << (response.empty() ? "empty 
response" : response);
+                         << "http status: " << status
+                         << ", response: " << (response.empty() ? "empty 
response" : response)
+                         << "]";
             return Status::InternalError("request scroll search failure: {}",
                                          (response.empty() ? "empty response" 
: response));
         }
@@ -211,7 +243,9 @@ Status ESScanReader::close() {
     }
 
     std::string scratch_target = _target + REQUEST_SEARCH_SCROLL_PATH;
-    RETURN_IF_ERROR(_network_client.init(scratch_target));
+    // we do not enable set_fail_on_error for ES http request to get more 
detail error messages
+    bool set_fail_on_error = false;
+    RETURN_IF_ERROR(_network_client.init(scratch_target, set_fail_on_error));
     _network_client.set_basic_auth(_user_name, _passwd);
     _network_client.set_method(DELETE);
     _network_client.set_content_type("application/json");
@@ -222,9 +256,13 @@ Status ESScanReader::close() {
     std::string response;
     RETURN_IF_ERROR(_network_client.execute_delete_request(
             ESScrollQueryBuilder::build_clear_scroll_body(_scroll_id), 
&response));
-    if (_network_client.get_http_status() == 200) {
+    long status = _network_client.get_http_status();
+    if (status == 200) {
         return Status::OK();
     } else {
+        LOG(WARNING) << "es_scan_reader delete scroll context failure["
+                     << "http status: " << status
+                     << ", response: " << (response.empty() ? "empty response" 
: response) << "]";
         return Status::InternalError("es_scan_reader delete scroll context 
failure");
     }
 }
diff --git a/be/src/exec/es/es_scroll_query.cpp 
b/be/src/exec/es/es_scroll_query.cpp
index e8d214fd9bf..fc89341239f 100644
--- a/be/src/exec/es/es_scroll_query.cpp
+++ b/be/src/exec/es/es_scroll_query.cpp
@@ -125,11 +125,19 @@ std::string ESScrollQueryBuilder::build(const 
std::map<std::string, std::string>
     } else {
         size = atoi(properties.at(ESScanReader::KEY_BATCH_SIZE).c_str());
     }
-    rapidjson::Value sort_node(rapidjson::kArrayType);
-    // use the scroll-scan mode for scan index documents
-    rapidjson::Value field("_doc", allocator);
-    sort_node.PushBack(field, allocator);
-    es_query_dsl.AddMember("sort", sort_node, allocator);
+
+    std::string shard_id;
+    if (properties.find(ESScanReader::KEY_SHARD) != properties.end()) {
+        shard_id = properties.at(ESScanReader::KEY_SHARD);
+    }
+    // To maintain consistency with the query, when shard_id is negative, do 
not add sort node in scroll request body.
+    if (!shard_id.empty() && std::stoi(shard_id) >= 0) {
+        rapidjson::Value sort_node(rapidjson::kArrayType);
+        // use the scroll-scan mode for scan index documents
+        rapidjson::Value field("_doc", allocator);
+        sort_node.PushBack(field, allocator);
+        es_query_dsl.AddMember("sort", sort_node, allocator);
+    }
     // number of documents returned
     es_query_dsl.AddMember("size", size, allocator);
     rapidjson::StringBuffer buffer;
diff --git a/be/src/http/http_client.cpp b/be/src/http/http_client.cpp
index b8ef9834341..218802878bd 100644
--- a/be/src/http/http_client.cpp
+++ b/be/src/http/http_client.cpp
@@ -66,7 +66,7 @@ HttpClient::~HttpClient() {
     }
 }
 
-Status HttpClient::init(const std::string& url) {
+Status HttpClient::init(const std::string& url, bool set_fail_on_error) {
     if (_curl == nullptr) {
         _curl = curl_easy_init();
         if (_curl == nullptr) {
@@ -94,10 +94,14 @@ Status HttpClient::init(const std::string& url) {
         return Status::InternalError("fail to set CURLOPT_NOSIGNAL");
     }
     // set fail on error
-    code = curl_easy_setopt(_curl, CURLOPT_FAILONERROR, 1L);
-    if (code != CURLE_OK) {
-        LOG(WARNING) << "fail to set CURLOPT_FAILONERROR, msg=" << 
_to_errmsg(code);
-        return Status::InternalError("fail to set CURLOPT_FAILONERROR");
+    // When this option is set to `1L` (enabled), libcurl will return an error 
directly
+    // when encountering HTTP error codes (>= 400), without reading the body 
of the error response.
+    if (set_fail_on_error) {
+        code = curl_easy_setopt(_curl, CURLOPT_FAILONERROR, 1L);
+        if (code != CURLE_OK) {
+            LOG(WARNING) << "fail to set CURLOPT_FAILONERROR, msg=" << 
_to_errmsg(code);
+            return Status::InternalError("fail to set CURLOPT_FAILONERROR");
+        }
     }
     // set redirect
     code = curl_easy_setopt(_curl, CURLOPT_FOLLOWLOCATION, 1L);
diff --git a/be/src/http/http_client.h b/be/src/http/http_client.h
index e379895a73e..9659de13cfc 100644
--- a/be/src/http/http_client.h
+++ b/be/src/http/http_client.h
@@ -45,7 +45,7 @@ public:
 
     // this function must call before other function,
     // you can call this multiple times to reuse this object
-    Status init(const std::string& url);
+    Status init(const std::string& url, bool set_fail_on_error = true);
 
     void set_method(HttpMethod method);
 
diff --git 
a/docker/thirdparties/docker-compose/elasticsearch/scripts/es_init.sh 
b/docker/thirdparties/docker-compose/elasticsearch/scripts/es_init.sh
index 5c865e660ad..21f1dc55a33 100755
--- a/docker/thirdparties/docker-compose/elasticsearch/scripts/es_init.sh
+++ b/docker/thirdparties/docker-compose/elasticsearch/scripts/es_init.sh
@@ -22,6 +22,8 @@
 curl "http://${ES_5_HOST}:9200/test1"; -H "Content-Type:application/json" -X 
PUT -d "@/mnt/scripts/index/es6_test1.json"
 # create index test2_20220808
 curl "http://${ES_5_HOST}:9200/test2_20220808"; -H 
"Content-Type:application/json" -X PUT -d '@/mnt/scripts/index/es6_test2.json'
+# create index test2_20220809
+curl "http://${ES_5_HOST}:9200/test2_20220809"; -H 
"Content-Type:application/json" -X PUT -d '@/mnt/scripts/index/es6_test2.json'
 # put data for test1
 curl "http://${ES_5_HOST}:9200/test1/doc/1"; -H "Content-Type:application/json" 
-X POST -d '@/mnt/scripts/data/data1_es6.json'
 curl "http://${ES_5_HOST}:9200/test1/doc/2"; -H "Content-Type:application/json" 
-X POST -d '@/mnt/scripts/data/data2_es6.json'
@@ -31,9 +33,14 @@ curl "http://${ES_5_HOST}:9200/test1/doc/3"; -H 
"Content-Type:application/json" -
 curl "http://${ES_5_HOST}:9200/test2_20220808/doc/1"; -H 
"Content-Type:application/json" -X POST -d '@/mnt/scripts/data/data1_es6.json'
 curl "http://${ES_5_HOST}:9200/test2_20220808/doc/2"; -H 
"Content-Type:application/json" -X POST -d '@/mnt/scripts/data/data2_es6.json'
 curl "http://${ES_5_HOST}:9200/test2_20220808/doc/3"; -H 
"Content-Type:application/json" -X POST -d '@/mnt/scripts/data/data3_es5.json'
+# put data for test2_20220809
+curl "http://${ES_5_HOST}:9200/test2_20220809/doc/1"; -H 
"Content-Type:application/json" -X POST -d '@/mnt/scripts/data/data1_es6.json'
+curl "http://${ES_5_HOST}:9200/test2_20220809/doc/2"; -H 
"Content-Type:application/json" -X POST -d '@/mnt/scripts/data/data2_es6.json'
+curl "http://${ES_5_HOST}:9200/test2_20220809/doc/3"; -H 
"Content-Type:application/json" -X POST -d '@/mnt/scripts/data/data3_es5.json'
 # put _meta for array
 curl "http://${ES_5_HOST}:9200/test1/doc/_mapping"; -H 
"Content-Type:application/json" -X PUT -d "@/mnt/scripts/index/array_meta.json"
 curl "http://${ES_5_HOST}:9200/test2_20220808/doc/_mapping"; -H 
"Content-Type:application/json" -X PUT -d "@/mnt/scripts/index/array_meta.json"
+curl "http://${ES_5_HOST}:9200/test2_20220809/doc/_mapping"; -H 
"Content-Type:application/json" -X PUT -d "@/mnt/scripts/index/array_meta.json"
 # create index .hide
 curl "http://${ES_5_HOST}:9200/.hide"; -H "Content-Type:application/json" -X 
PUT -d "@/mnt/scripts/index/es6_hide.json"
 
@@ -43,6 +50,8 @@ curl "http://${ES_5_HOST}:9200/.hide"; -H 
"Content-Type:application/json" -X PUT
 curl "http://${ES_6_HOST}:9200/test1"; -H "Content-Type:application/json" -X 
PUT -d "@/mnt/scripts/index/es6_test1.json"
 # create index test2_20220808
 curl "http://${ES_6_HOST}:9200/test2_20220808"; -H 
"Content-Type:application/json" -X PUT -d '@/mnt/scripts/index/es6_test2.json'
+# create index test2_20220809
+curl "http://${ES_6_HOST}:9200/test2_20220809"; -H 
"Content-Type:application/json" -X PUT -d '@/mnt/scripts/index/es6_test2.json'
 # put data for test1
 curl "http://${ES_6_HOST}:9200/test1/doc/1"; -H "Content-Type:application/json" 
-X POST -d '@/mnt/scripts/data/data1_es6.json'
 curl "http://${ES_6_HOST}:9200/test1/doc/2"; -H "Content-Type:application/json" 
-X POST -d '@/mnt/scripts/data/data2_es6.json'
@@ -51,9 +60,14 @@ curl "http://${ES_6_HOST}:9200/test1/doc/3"; -H 
"Content-Type:application/json" -
 curl "http://${ES_6_HOST}:9200/test2_20220808/doc/1"; -H 
"Content-Type:application/json" -X POST -d '@/mnt/scripts/data/data1_es6.json'
 curl "http://${ES_6_HOST}:9200/test2_20220808/doc/2"; -H 
"Content-Type:application/json" -X POST -d '@/mnt/scripts/data/data2_es6.json'
 curl "http://${ES_6_HOST}:9200/test2_20220808/doc/3"; -H 
"Content-Type:application/json" -X POST -d '@/mnt/scripts/data/data3_es6.json'
+# put data for test2_20220809
+curl "http://${ES_6_HOST}:9200/test2_20220809/doc/1"; -H 
"Content-Type:application/json" -X POST -d '@/mnt/scripts/data/data1_es6.json'
+curl "http://${ES_6_HOST}:9200/test2_20220809/doc/2"; -H 
"Content-Type:application/json" -X POST -d '@/mnt/scripts/data/data2_es6.json'
+curl "http://${ES_6_HOST}:9200/test2_20220809/doc/3"; -H 
"Content-Type:application/json" -X POST -d '@/mnt/scripts/data/data3_es6.json'
 # put _meta for array
 curl "http://${ES_6_HOST}:9200/test1/doc/_mapping"; -H 
"Content-Type:application/json" -X PUT -d "@/mnt/scripts/index/array_meta.json"
 curl "http://${ES_6_HOST}:9200/test2_20220808/doc/_mapping"; -H 
"Content-Type:application/json" -X PUT -d "@/mnt/scripts/index/array_meta.json"
+curl "http://${ES_6_HOST}:9200/test2_20220809/doc/_mapping"; -H 
"Content-Type:application/json" -X PUT -d "@/mnt/scripts/index/array_meta.json"
 # create index .hide
 curl "http://${ES_6_HOST}:9200/.hide"; -H "Content-Type:application/json" -X 
PUT -d "@/mnt/scripts/index/es6_hide.json"
 
@@ -62,6 +76,8 @@ curl "http://${ES_6_HOST}:9200/.hide"; -H 
"Content-Type:application/json" -X PUT
 curl "http://${ES_7_HOST}:9200/test1"; -H "Content-Type:application/json" -X 
PUT -d "@/mnt/scripts/index/es7_test1.json"
 # create index test2_20220808
 curl "http://${ES_7_HOST}:9200/test2_20220808"; -H 
"Content-Type:application/json" -X PUT -d '@/mnt/scripts/index/es7_test2.json'
+# create index test2_20220808
+curl "http://${ES_7_HOST}:9200/test2_20220809"; -H 
"Content-Type:application/json" -X PUT -d '@/mnt/scripts/index/es7_test2.json'
 # create index test3_20231005
 curl "http://${ES_7_HOST}:9200/test3_20231005"; -H 
"Content-Type:application/json" -X PUT -d '@/mnt/scripts/index/es7_test3.json'
 # put data for tese1
@@ -74,12 +90,18 @@ curl "http://${ES_7_HOST}:9200/test2_20220808/_doc/1"; -H 
"Content-Type:applicati
 curl "http://${ES_7_HOST}:9200/test2_20220808/_doc/2"; -H 
"Content-Type:application/json" -X POST -d '@/mnt/scripts/data/data2.json'
 curl "http://${ES_7_HOST}:9200/test2_20220808/_doc/3"; -H 
"Content-Type:application/json" -X POST -d '@/mnt/scripts/data/data3.json'
 curl "http://${ES_7_HOST}:9200/test2_20220808/_doc/4"; -H 
"Content-Type:application/json" -X POST -d '@/mnt/scripts/data/data4.json'
+# put data for test2_20220809
+curl "http://${ES_7_HOST}:9200/test2_20220809/_doc/1"; -H 
"Content-Type:application/json" -X POST -d '@/mnt/scripts/data/data1.json'
+curl "http://${ES_7_HOST}:9200/test2_20220809/_doc/2"; -H 
"Content-Type:application/json" -X POST -d '@/mnt/scripts/data/data2.json'
+curl "http://${ES_7_HOST}:9200/test2_20220809/_doc/3"; -H 
"Content-Type:application/json" -X POST -d '@/mnt/scripts/data/data3.json'
+curl "http://${ES_7_HOST}:9200/test2_20220809/_doc/4"; -H 
"Content-Type:application/json" -X POST -d '@/mnt/scripts/data/data4.json'
 # put data for test3_20231005
 curl "http://${ES_7_HOST}:9200/test3_20231005/_doc/1"; -H 
"Content-Type:application/json" -X POST -d '@/mnt/scripts/data/data5.json'
 
 # put _meta for array
 curl "http://${ES_7_HOST}:9200/test1/_mapping"; -H 
"Content-Type:application/json" -X PUT -d "@/mnt/scripts/index/array_meta.json"
 curl "http://${ES_7_HOST}:9200/test2_20220808/_mapping"; -H 
"Content-Type:application/json" -X PUT -d "@/mnt/scripts/index/array_meta.json"
+curl "http://${ES_7_HOST}:9200/test2_20220809/_mapping"; -H 
"Content-Type:application/json" -X PUT -d "@/mnt/scripts/index/array_meta.json"
 
 # create index .hide
 curl "http://${ES_7_HOST}:9200/.hide"; -H "Content-Type:application/json" -X 
PUT -d "@/mnt/scripts/index/es7_hide.json"
@@ -89,6 +111,8 @@ curl "http://${ES_7_HOST}:9200/.hide"; -H 
"Content-Type:application/json" -X PUT
 curl "http://${ES_8_HOST}:9200/test1"; -H "Content-Type:application/json" -X 
PUT -d "@/mnt/scripts/index/es7_test1.json"
 # create index test2_20220808
 curl "http://${ES_8_HOST}:9200/test2_20220808"; -H 
"Content-Type:application/json" -X PUT -d '@/mnt/scripts/index/es7_test2.json'
+# create index test2_20220809
+curl "http://${ES_8_HOST}:9200/test2_20220809"; -H 
"Content-Type:application/json" -X PUT -d '@/mnt/scripts/index/es7_test2.json'
 # create index test3_20231005
 curl "http://${ES_8_HOST}:9200/test3_20231005"; -H 
"Content-Type:application/json" -X PUT -d '@/mnt/scripts/index/es7_test3.json'
 
@@ -102,6 +126,11 @@ curl "http://${ES_8_HOST}:9200/test2_20220808/_doc/1"; -H 
"Content-Type:applicati
 curl "http://${ES_8_HOST}:9200/test2_20220808/_doc/2"; -H 
"Content-Type:application/json" -X POST -d '@/mnt/scripts/data/data2.json'
 curl "http://${ES_8_HOST}:9200/test2_20220808/_doc/3"; -H 
"Content-Type:application/json" -X POST -d '@/mnt/scripts/data/data3.json'
 curl "http://${ES_8_HOST}:9200/test2_20220808/_doc/4"; -H 
"Content-Type:application/json" -X POST -d '@/mnt/scripts/data/data4.json'
+# put data for test2_20220809
+curl "http://${ES_8_HOST}:9200/test2_20220809/_doc/1"; -H 
"Content-Type:application/json" -X POST -d '@/mnt/scripts/data/data1.json'
+curl "http://${ES_8_HOST}:9200/test2_20220809/_doc/2"; -H 
"Content-Type:application/json" -X POST -d '@/mnt/scripts/data/data2.json'
+curl "http://${ES_8_HOST}:9200/test2_20220809/_doc/3"; -H 
"Content-Type:application/json" -X POST -d '@/mnt/scripts/data/data3.json'
+curl "http://${ES_8_HOST}:9200/test2_20220809/_doc/4"; -H 
"Content-Type:application/json" -X POST -d '@/mnt/scripts/data/data4.json'
 # put data for test3_20231005
 curl "http://${ES_8_HOST}:9200/test3_20231005/_doc/1"; -H 
"Content-Type:application/json" -X POST -d '@/mnt/scripts/data/data5.json'
 
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/datasource/es/source/EsScanNode.java
 
b/fe/fe-core/src/main/java/org/apache/doris/datasource/es/source/EsScanNode.java
index 663657b5d95..6f4314bd08b 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/datasource/es/source/EsScanNode.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/datasource/es/source/EsScanNode.java
@@ -42,6 +42,7 @@ import 
org.apache.doris.datasource.es.QueryBuilders.QueryBuilder;
 import org.apache.doris.planner.PartitionPruner;
 import org.apache.doris.planner.PlanNodeId;
 import org.apache.doris.planner.RangePartitionPrunerV2;
+import org.apache.doris.qe.ConnectContext;
 import org.apache.doris.statistics.StatisticalType;
 import org.apache.doris.statistics.query.StatsDelta;
 import org.apache.doris.system.Backend;
@@ -63,6 +64,7 @@ import org.apache.logging.log4j.Logger;
 
 import java.util.ArrayList;
 import java.util.Collection;
+import java.util.Collections;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
@@ -218,8 +220,15 @@ public class EsScanNode extends ExternalScanNode {
                     String.join(",", unPartitionedIndices), String.join(",", 
partitionedIndices));
         }
         List<TScanRangeLocations> result = Lists.newArrayList();
+        boolean enableESParallelScroll = isEnableESParallelScroll();
         for (EsShardPartitions indexState : selectedIndex) {
-            for (List<EsShardRouting> shardRouting : 
indexState.getShardRoutings().values()) {
+            // When disabling parallel scroll, only use the first shard 
routing.
+            // Because we only need plan a single scan range.
+            List<List<EsShardRouting>> shardRoutings = enableESParallelScroll
+                    ? new ArrayList<>(indexState.getShardRoutings().values()) :
+                    
Collections.singletonList(indexState.getShardRoutings().get(0));
+
+            for (List<EsShardRouting> shardRouting : shardRoutings) {
                 // get backends
                 List<TNetworkAddress> shardAllocations = new ArrayList<>();
                 List<String> preLocations = new ArrayList<>();
@@ -231,7 +240,10 @@ public class EsScanNode extends ExternalScanNode {
                 FederationBackendPolicy backendPolicy = new 
FederationBackendPolicy();
                 backendPolicy.init(preLocations);
                 TScanRangeLocations locations = new TScanRangeLocations();
-                for (int i = 0; i < backendPolicy.numBackends(); ++i) {
+                // When disabling parallel scroll, only use the first backend.
+                // Because we only need plan a single query to one backend.
+                int numBackends = enableESParallelScroll ? 
backendPolicy.numBackends() : 1;
+                for (int i = 0; i < numBackends; ++i) {
                     TScanRangeLocation location = new TScanRangeLocation();
                     Backend be = backendPolicy.getNextBe();
                     location.setBackendId(be.getId());
@@ -242,11 +254,18 @@ public class EsScanNode extends ExternalScanNode {
                 // Generate on es scan range
                 TEsScanRange esScanRange = new TEsScanRange();
                 esScanRange.setEsHosts(shardAllocations);
-                esScanRange.setIndex(shardRouting.get(0).getIndexName());
+                // When disabling parallel scroll, use the index state's index 
name to prevent the index aliases from
+                // being expanded.
+                // eg: index alias `log-20240501` may point to multiple 
indices,
+                // such as `log-20240501-1`/`log-20240501-2`.
+                // When we plan a single query, we should use the index alias 
instead of the real indices names.
+                esScanRange.setIndex(
+                        enableESParallelScroll ? 
shardRouting.get(0).getIndexName() : indexState.getIndexName());
                 if (table.getType() != null) {
                     esScanRange.setType(table.getMappingType());
                 }
-                esScanRange.setShardId(shardRouting.get(0).getShardId());
+                // When disabling parallel scroll, set shard id to -1 to 
disable shard preference in query option.
+                esScanRange.setShardId(enableESParallelScroll ? 
shardRouting.get(0).getShardId() : -1);
                 // Scan range
                 TScanRange scanRange = new TScanRange();
                 scanRange.setEsScanRange(esScanRange);
@@ -269,6 +288,11 @@ public class EsScanNode extends ExternalScanNode {
         return result;
     }
 
+    private boolean isEnableESParallelScroll() {
+        ConnectContext connectContext = ConnectContext.get();
+        return connectContext != null && 
connectContext.getSessionVariable().isEnableESParallelScroll();
+    }
+
     /**
      * if the index name is an alias or index pattern, then the es table is 
related
      * with one or more indices some indices could be pruned by using 
partition info
diff --git a/fe/fe-core/src/main/java/org/apache/doris/qe/SessionVariable.java 
b/fe/fe-core/src/main/java/org/apache/doris/qe/SessionVariable.java
index dfce3dfabae..7fbb595b814 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/qe/SessionVariable.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/qe/SessionVariable.java
@@ -610,6 +610,8 @@ public class SessionVariable implements Serializable, 
Writable {
 
     public static final String USE_MAX_LENGTH_OF_VARCHAR_IN_CTAS = 
"use_max_length_of_varchar_in_ctas";
 
+    public static final String ENABLE_ES_PARALLEL_SCROLL = 
"enable_es_parallel_scroll";
+
     public static final List<String> DEBUG_VARIABLES = ImmutableList.of(
             SKIP_DELETE_PREDICATE,
             SKIP_DELETE_BITMAP,
@@ -2021,6 +2023,24 @@ public class SessionVariable implements Serializable, 
Writable {
     })
     public boolean useMaxLengthOfVarcharInCtas = true;
 
+    /**
+     * When enabling shard scroll, FE will plan scan ranges by shards of ES 
indices.
+     * Otherwise, FE will plan a single query to ES.
+     */
+    @VariableMgr.VarAttr(name = ENABLE_ES_PARALLEL_SCROLL, description = {
+        "ES catalog 是否开启 shard 级别并发的 scroll 请求,默认开启。",
+        "Whether to enable shard-level parallel scroll requests for ES 
catalog, enabled by default."
+    })
+    public boolean enableESParallelScroll = true;
+
+    public void setEnableEsParallelScroll(boolean enableESParallelScroll) {
+        this.enableESParallelScroll = enableESParallelScroll;
+    }
+
+    public boolean isEnableESParallelScroll() {
+        return enableESParallelScroll;
+    }
+
     public boolean isEnableJoinSpill() {
         return enableJoinSpill;
     }
diff --git a/regression-test/data/external_table_p0/es/test_es_query.out 
b/regression-test/data/external_table_p0/es/test_es_query.out
index b84387fb542..a2289bec1b4 100644
--- a/regression-test/data/external_table_p0/es/test_es_query.out
+++ b/regression-test/data/external_table_p0/es/test_es_query.out
@@ -60,6 +60,482 @@ I'm not null or empty
 [{"name":"Andy","age":18},{"name":"Tim","age":28}]     
[{"last":"Smith","first":"John"},{"last":"White","first":"Alice"}]      "Andy"  
"White"
 [{"name":"Andy","age":18},{"name":"Tim","age":28}]     
[{"last":"Smith","first":"John"},{"last":"White","first":"Alice"}]      "Andy"  
"White"
 
+-- !sql01 --
+["2020-01-01 12:00:00", "2020-01-02 13:01:01"] [-1, 0, 1, 2]   [0, 1, 2, 3]    
["d", "e", "f"] [128, 129, -129, -130]  ["192.168.0.1", "127.0.0.1"]    string1 
[1, 2, 3, 4]    2022-08-08      2022-08-08T12:10:10     text#1  ["2020-01-01", 
"2020-01-02"]    3.14    [1, 2, 3, 4]    [1, 1.1, 1.2, 1.3]      [1, 2, 3, 4]   
 ["a", "b", "c"] [{"name":"Andy","age":18},{"name":"Tim","age":28}]      
2022-08-08T12:10:10     2022-08-08T12:10:10     2022-08-08T20:10:10     [1, -2, 
-3, 4]  [1, 0, 1, 1]    [32768, 32769, -32769, -32770]  \N      
[{"last":"Smith","first [...]
+
+-- !sql02 --
+["2020-01-01 12:00:00", "2020-01-02 13:01:01"] [-1, 0, 1, 2]   [0, 1, 2, 3]    
["d", "e", "f"] [128, 129, -129, -130]  ["192.168.0.1", "127.0.0.1"]    string1 
[1, 2, 3, 4]    2022-08-08      2022-08-08T12:10:10     text#1  ["2020-01-01", 
"2020-01-02"]    3.14    [1, 2, 3, 4]    [1, 1.1, 1.2, 1.3]      [1, 2, 3, 4]   
 ["a", "b", "c"] [{"name":"Andy","age":18},{"name":"Tim","age":28}]      
2022-08-08T12:10:10     2022-08-08T12:10:10     2022-08-08T20:10:10     [1, -2, 
-3, 4]  [1, 0, 1, 1]    [32768, 32769, -32769, -32770]  \N      
[{"last":"Smith","first [...]
+
+-- !sql03 --
+2022-08-08     2022-08-08T12:10:10     2022-08-08T12:10:10     
2022-08-08T04:10:10     2022-08-08T20:10:10
+2022-08-08     2022-08-09T12:10:10     2022-08-09T12:10:10     
2022-08-09T12:10:10     2022-08-09T12:10:10
+2022-08-08     2022-08-10T12:10:10     2022-08-10T12:10:10     
2022-08-10T04:10:10     2022-08-10T20:10:10
+2022-08-08     2022-08-11T12:10:10     2022-08-11T12:10:10     
2022-08-11T12:10:10     2022-08-11T11:10:10
+
+-- !sql04 --
+I'm not null or empty
+
+-- !sql05 --
+
+I'm not null or empty
+
+-- !sql06 --
+\N
+\N
+
+I'm not null or empty
+
+-- !sql07 --
+["2020-01-01 12:00:00", "2020-01-02 13:01:01"] [-1, 0, 1, 2]   [0, 1, 2, 3]    
["d", "e", "f"] [128, 129, -129, -130]  ["192.168.0.1", "127.0.0.1"]    string1 
[1, 2, 3, 4]    2022-08-08      2022-08-08T12:10:10     text#1  ["2020-01-01", 
"2020-01-02"]    3.14    [1, 2, 3, 4]    [1, 1.1, 1.2, 1.3]      [1, 2, 3, 4]   
 ["a", "b", "c"] [{"name":"Andy","age":18},{"name":"Tim","age":28}]      
2022-08-08T12:10:10     2022-08-08T12:10:10     2022-08-08T20:10:10     [1, -2, 
-3, 4]  [1, 0, 1, 1]    [32768, 32769, -32769, -32770]  \N      
[{"last":"Smith","first [...]
+["2020-01-01 12:00:00", "2020-01-02 13:01:01"] [-1, 0, 1, 2]   [0, 1, 2, 3]    
["d", "e", "f"] [128, 129, -129, -130]  ["192.168.0.1", "127.0.0.1"]    string2 
[1, 2, 3, 4]    2022-08-08      2022-08-09T12:10:10     text2   ["2020-01-01", 
"2020-01-02"]    4.0     [1, 2, 3, 4]    [1, 1.1, 1.2, 1.3]      [1, 2, 3, 4]   
 ["a", "b", "c"] [{"name":"Andy","age":18},{"name":"Tim","age":28}]      
2022-08-09T12:10:10     2022-08-09T12:10:10     2022-08-09T12:10:10     [1, -2, 
-3, 4]  [1, 0, 1, 1]    [32768, 32769, -32769, -32770]          
[{"last":"Smith","first":"J [...]
+["2020-01-01 12:00:00", "2020-01-02 13:01:01"] [-1, 0, 1, 2]   [0, 1, 2, 3]    
["d", "e", "f"] [128, 129, -129, -130]  ["192.168.0.1", "127.0.0.1"]    string3 
[1, 2, 3, 4]    2022-08-08      2022-08-10T12:10:10     text3_4*5       
["2020-01-01", "2020-01-02"]    5.0     [1, 2, 3, 4]    [1, 1.1, 1.2, 1.3]      
[1, 2, 3, 4]    ["a", "b", "c"] 
[{"name":"Andy","age":18},{"name":"Tim","age":28}]      2022-08-10T12:10:10     
2022-08-10T12:10:10     2022-08-10T20:10:10     [1, -2, -3, 4]  [1, 0, 1, 1]    
[32768, 32769, -32769, -32770]  I'm not null or empty   [{ [...]
+["2020-01-01 12:00:00", "2020-01-02 13:01:01"] [-1, 0, 1, 2]   [0, 1, 2, 3]    
["d", "e", "f"] [128, 129, -129, -130]  ["192.168.0.1", "127.0.0.1"]    string4 
[1, 2, 3, 4]    2022-08-08      2022-08-11T12:10:10     text3_4*5       
["2020-01-01", "2020-01-02"]    6.0     [1, 2, 3, 4]    [1, 1.1, 1.2, 1.3]      
[1, 2, 3, 4]    ["a", "b", "c"] 
[{"name":"Andy","age":18},{"name":"Tim","age":28}]      2022-08-11T12:10:10     
2022-08-11T12:10:10     2022-08-11T11:10:10     [1, -2, -3, 4]  [1, 0, 1, 1]    
[32768, 32769, -32769, -32770]  \N      [{"last":"Smith","fir [...]
+
+-- !sql08 --
+[{"name":"Andy","age":18},{"name":"Tim","age":28}]     
[{"last":"Smith","first":"John"},{"last":"White","first":"Alice"}]      "Andy"  
"White"
+[{"name":"Andy","age":18},{"name":"Tim","age":28}]     
[{"last":"Smith","first":"John"},{"last":"White","first":"Alice"}]      "Andy"  
"White"
+[{"name":"Andy","age":18},{"name":"Tim","age":28}]     
[{"last":"Smith","first":"John"},{"last":"White","first":"Alice"}]      "Andy"  
"White"
+[{"name":"Andy","age":18},{"name":"Tim","age":28}]     
[{"last":"Smith","first":"John"},{"last":"White","first":"Alice"}]      "Andy"  
"White"
+
+-- !sql20 --
+["2020-01-01 12:00:00", "2020-01-02 13:01:01"] [-1, 0, 1, 2]   [0, 1, 2, 3]    
["d", "e", "f"] [128, 129, -129, -130]  ["192.168.0.1", "127.0.0.1"]    string1 
[1, 2, 3, 4]    2022-08-08      2022-08-08T12:10:10     text#1  ["2020-01-01", 
"2020-01-02"]    3.14    [1, 2, 3, 4]    [1, 1.1, 1.2, 1.3]      [1, 2, 3, 4]   
 ["a", "b", "c"] [{"name":"Andy","age":18},{"name":"Tim","age":28}]      
2022-08-08T12:10:10     2022-08-08T12:10:10     2022-08-08T20:10:10     [1, -2, 
-3, 4]  [1, 0, 1, 1]    [32768, 32769, -32769, -32770]  
[{"last":"Smith","first":" [...]
+
+-- !sql21 --
+["2020-01-01 12:00:00", "2020-01-02 13:01:01"] [-1, 0, 1, 2]   [0, 1, 2, 3]    
["d", "e", "f"] [128, 129, -129, -130]  ["192.168.0.1", "127.0.0.1"]    string1 
[1, 2, 3, 4]    2022-08-08      2022-08-08T12:10:10     text#1  ["2020-01-01", 
"2020-01-02"]    3.14    [1, 2, 3, 4]    [1, 1.1, 1.2, 1.3]      [1, 2, 3, 4]   
 ["a", "b", "c"] [{"name":"Andy","age":18},{"name":"Tim","age":28}]      
2022-08-08T12:10:10     2022-08-08T12:10:10     2022-08-08T20:10:10     [1, -2, 
-3, 4]  [1, 0, 1, 1]    [32768, 32769, -32769, -32770]  
[{"last":"Smith","first":" [...]
+
+-- !sql22 --
+2022-08-08     2022-08-08T12:10:10     2022-08-08T12:10:10     
2022-08-08T04:10:10     2022-08-08T20:10:10
+2022-08-08     2022-08-09T12:10:10     2022-08-09T12:10:10     
2022-08-09T12:10:10     2022-08-09T12:10:10
+2022-08-08     2022-08-10T12:10:10     2022-08-10T12:10:10     
2022-08-10T04:10:10     2022-08-10T20:10:10
+2022-08-08     2022-08-11T12:10:10     2022-08-11T12:10:10     
2022-08-11T12:10:10     2022-08-11T11:10:10
+
+-- !sql23 --
+["2020-01-01 12:00:00", "2020-01-02 13:01:01"] [-1, 0, 1, 2]   [0, 1, 2, 3]    
["d", "e", "f"] [128, 129, -129, -130]  ["192.168.0.1", "127.0.0.1"]    string1 
[1, 2, 3, 4]    2022-08-08      2022-08-08T12:10:10     text#1  ["2020-01-01", 
"2020-01-02"]    3.14    [1, 2, 3, 4]    [1, 1.1, 1.2, 1.3]      [1, 2, 3, 4]   
 ["a", "b", "c"] [{"name":"Andy","age":18},{"name":"Tim","age":28}]      
2022-08-08T12:10:10     2022-08-08T12:10:10     2022-08-08T20:10:10     [1, -2, 
-3, 4]  [1, 0, 1, 1]    [32768, 32769, -32769, -32770]  
[{"last":"Smith","first":" [...]
+["2020-01-01 12:00:00", "2020-01-02 13:01:01"] [-1, 0, 1, 2]   [0, 1, 2, 3]    
["d", "e", "f"] [128, 129, -129, -130]  ["192.168.0.1", "127.0.0.1"]    string2 
[1, 2, 3, 4]    2022-08-08      2022-08-09T12:10:10     text2   ["2020-01-01", 
"2020-01-02"]    4.0     [1, 2, 3, 4]    [1, 1.1, 1.2, 1.3]      [1, 2, 3, 4]   
 ["a", "b", "c"] [{"name":"Andy","age":18},{"name":"Tim","age":28}]      
2022-08-09T12:10:10     2022-08-09T12:10:10     2022-08-09T12:10:10     [1, -2, 
-3, 4]  [1, 0, 1, 1]    [32768, 32769, -32769, -32770]  
[{"last":"Smith","first":"Jo [...]
+["2020-01-01 12:00:00", "2020-01-02 13:01:01"] [-1, 0, 1, 2]   [0, 1, 2, 3]    
["d", "e", "f"] [128, 129, -129, -130]  ["192.168.0.1", "127.0.0.1"]    string3 
[1, 2, 3, 4]    2022-08-08      2022-08-10T12:10:10     text3_4*5       
["2020-01-01", "2020-01-02"]    5.0     [1, 2, 3, 4]    [1, 1.1, 1.2, 1.3]      
[1, 2, 3, 4]    ["a", "b", "c"] 
[{"name":"Andy","age":18},{"name":"Tim","age":28}]      2022-08-10T12:10:10     
2022-08-10T12:10:10     2022-08-10T20:10:10     [1, -2, -3, 4]  [1, 0, 1, 1]    
[32768, 32769, -32769, -32770]  [{"last":"Smith","first" [...]
+["2020-01-01 12:00:00", "2020-01-02 13:01:01"] [-1, 0, 1, 2]   [0, 1, 2, 3]    
["d", "e", "f"] [128, 129, -129, -130]  ["192.168.0.1", "127.0.0.1"]    string4 
[1, 2, 3, 4]    2022-08-08      2022-08-11T12:10:10     text3_4*5       
["2020-01-01", "2020-01-02"]    6.0     [1, 2, 3, 4]    [1, 1.1, 1.2, 1.3]      
[1, 2, 3, 4]    ["a", "b", "c"] 
[{"name":"Andy","age":18},{"name":"Tim","age":28}]      2022-08-11T12:10:10     
2022-08-11T12:10:10     2022-08-11T11:10:10     [1, -2, -3, 4]  [1, 0, 1, 1]    
[32768, 32769, -32769, -32770]  [{"last":"Smith","first" [...]
+
+-- !sql24 --
+[{"name":"Andy","age":18},{"name":"Tim","age":28}]     
[{"last":"Smith","first":"John"},{"last":"White","first":"Alice"}]      "Andy"  
"White"
+[{"name":"Andy","age":18},{"name":"Tim","age":28}]     
[{"last":"Smith","first":"John"},{"last":"White","first":"Alice"}]      "Andy"  
"White"
+[{"name":"Andy","age":18},{"name":"Tim","age":28}]     
[{"last":"Smith","first":"John"},{"last":"White","first":"Alice"}]      "Andy"  
"White"
+[{"name":"Andy","age":18},{"name":"Tim","age":28}]     
[{"last":"Smith","first":"John"},{"last":"White","first":"Alice"}]      "Andy"  
"White"
+
+-- !sql_5_02 --
+[1, 0, 1, 1]   [1, -2, -3, 4]  ["2020-01-01", "2020-01-02"]    ["2020-01-01 
12:00:00", "2020-01-02 13:01:01"]  [1, 2, 3, 4]    [1, 1.1, 1.2, 1.3]      [1, 
2, 3, 4]    [32768, 32769, -32769, -32770]  ["192.168.0.1", "127.0.0.1"]    
["a", "b", "c"] [-1, 0, 1, 2]   
[{"name":"Andy","age":18},{"name":"Tim","age":28}]      [1, 2, 3, 4]    [128, 
129, -129, -130]  ["d", "e", "f"] [0, 1, 2, 3]    
[{"last":"Smith","first":"John"},{"last":"White","first":"Alice"}]      \N      
string1 text#1  3.14    2022-08-08T00:00        12345   2022-08-08T20:10:10
+
+-- !sql_5_03 --
+[1, 0, 1, 1]   [1, -2, -3, 4]  ["2020-01-01", "2020-01-02"]    ["2020-01-01 
12:00:00", "2020-01-02 13:01:01"]  [1, 2, 3, 4]    [1, 1.1, 1.2, 1.3]      [1, 
2, 3, 4]    [32768, 32769, -32769, -32770]  ["192.168.0.1", "127.0.0.1"]    
["a", "b", "c"] [-1, 0, 1, 2]   
[{"name":"Andy","age":18},{"name":"Tim","age":28}]      [1, 2, 3, 4]    [128, 
129, -129, -130]  ["d", "e", "f"] [0, 1, 2, 3]    
[{"last":"Smith","first":"John"},{"last":"White","first":"Alice"}]      \N      
string1 text#1  3.14    2022-08-08T00:00        12345   2022-08-08T20:10:10
+[1, 0, 1, 1]   [1, -2, -3, 4]  ["2020-01-01", "2020-01-02"]    ["2020-01-01 
12:00:00", "2020-01-02 13:01:01"]  [1, 2, 3, 4]    [1, 1.1, 1.2, 1.3]      [1, 
2, 3, 4]    [32768, 32769, -32769, -32770]  ["192.168.0.1", "127.0.0.1"]    
["a", "b", "c"] [-1, 0, 1, 2]   
[{"name":"Andy","age":18},{"name":"Tim","age":28}]      [1, 2, 3, 4]    [128, 
129, -129, -130]  ["d", "e", "f"] [0, 1, 2, 3]    
[{"last":"Smith","first":"John"},{"last":"White","first":"Alice"}]              
string2 text2   4.0     2022-08-08T00:00        2222    2022-08-08T12:10:10
+[1, 0, 1, 1]   [1, -2, -3, 4]  ["2020-01-01", "2020-01-02"]    ["2020-01-01 
12:00:00", "2020-01-02 13:01:01"]  [1, 2, 3, 4]    [1, 1.1, 1.2, 1.3]      [1, 
2, 3, 4]    [32768, 32769, -32769, -32770]  ["192.168.0.1", "127.0.0.1"]    
["a", "b", "c"] [-1, 0, 1, 2]   
[{"name":"Andy","age":18},{"name":"Tim","age":28}]      [1, 2, 3, 4]    [128, 
129, -129, -130]  ["d", "e", "f"] [0, 1, 2, 3]    
[{"last":"Smith","first":"John"},{"last":"White","first":"Alice"}]      I'm not 
null or empty   string3 text3_4*5       5.0     2022-08-08T00:00        3333    
2022 [...]
+
+-- !sql_5_04 --
+[1, 0, 1, 1]   [1, -2, -3, 4]  ["2020-01-01", "2020-01-02"]    ["2020-01-01 
12:00:00", "2020-01-02 13:01:01"]  [1, 2, 3, 4]    [1, 1.1, 1.2, 1.3]      [1, 
2, 3, 4]    [32768, 32769, -32769, -32770]  ["192.168.0.1", "127.0.0.1"]    
["a", "b", "c"] [-1, 0, 1, 2]   
[{"name":"Andy","age":18},{"name":"Tim","age":28}]      [1, 2, 3, 4]    [128, 
129, -129, -130]  ["d", "e", "f"] [0, 1, 2, 3]    
[{"last":"Smith","first":"John"},{"last":"White","first":"Alice"}]              
string2 text2   4.0     2022-08-08T00:00        2222    2022-08-08T12:10:10
+
+-- !sql_5_05 --
+true   1       128     32768   -1      0       1.0     1.0     1.0     1.0     
2020-01-01      2020-01-01T12:00        a       d       192.168.0.1     
{"name":"Andy","age":18}
+true   1       128     32768   -1      0       1.0     1.0     1.0     1.0     
2020-01-01      2020-01-01T12:00        a       d       192.168.0.1     
{"name":"Andy","age":18}
+true   1       128     32768   -1      0       1.0     1.0     1.0     1.0     
2020-01-01      2020-01-01T12:00        a       d       192.168.0.1     
{"name":"Andy","age":18}
+
+-- !sql_5_06 --
+true   1       128     32768   -1      0       1.0     1.0     1.0     1.0     
2020-01-01      2020-01-01T12:00        a       d       192.168.0.1     
{"name":"Andy","age":18}
+true   1       128     32768   -1      0       1.0     1.0     1.0     1.0     
2020-01-01      2020-01-01T12:00        a       d       192.168.0.1     
{"name":"Andy","age":18}
+true   1       128     32768   -1      0       1.0     1.0     1.0     1.0     
2020-01-01      2020-01-01T12:00        a       d       192.168.0.1     
{"name":"Andy","age":18}
+
+-- !sql_5_07 --
+[1, 0, 1, 1]   [1, -2, -3, 4]  ["2020-01-01", "2020-01-02"]    ["2020-01-01 
12:00:00", "2020-01-02 13:01:01"]  [1, 2, 3, 4]    [1, 1.1, 1.2, 1.3]      [1, 
2, 3, 4]    [32768, 32769, -32769, -32770]  ["192.168.0.1", "127.0.0.1"]    
["a", "b", "c"] [-1, 0, 1, 2]   
[{"name":"Andy","age":18},{"name":"Tim","age":28}]      [1, 2, 3, 4]    [128, 
129, -129, -130]  ["d", "e", "f"] [0, 1, 2, 3]    
[{"last":"Smith","first":"John"},{"last":"White","first":"Alice"}]      \N      
string1 text#1  3.14    2022-08-08T00:00        12345   2022-08-08T20:10:10
+
+-- !sql_5_08 --
+[1, 0, 1, 1]   [1, -2, -3, 4]  [128, 129, -129, -130]  [32768, 32769, -32769, 
-32770]  [-1, 0, 1, 2]   [0, 1, 2, 3]    [1, 1.1, 1.2, 1.3]      [1, 2, 3, 4]   
 [1, 2, 3, 4]    [1, 2, 3, 4]    ["2020-01-01", "2020-01-02"]    ["2020-01-01 
12:00:00", "2020-01-02 13:01:01"]  ["a", "b", "c"] ["d", "e", "f"] 
["192.168.0.1", "127.0.0.1"]    
[{"name":"Andy","age":18},{"name":"Tim","age":28}]
+[1, 0, 1, 1]   [1, -2, -3, 4]  [128, 129, -129, -130]  [32768, 32769, -32769, 
-32770]  [-1, 0, 1, 2]   [0, 1, 2, 3]    [1, 1.1, 1.2, 1.3]      [1, 2, 3, 4]   
 [1, 2, 3, 4]    [1, 2, 3, 4]    ["2020-01-01", "2020-01-02"]    ["2020-01-01 
12:00:00", "2020-01-02 13:01:01"]  ["a", "b", "c"] ["d", "e", "f"] 
["192.168.0.1", "127.0.0.1"]    
[{"name":"Andy","age":18},{"name":"Tim","age":28}]
+[1, 0, 1, 1]   [1, -2, -3, 4]  [128, 129, -129, -130]  [32768, 32769, -32769, 
-32770]  [-1, 0, 1, 2]   [0, 1, 2, 3]    [1, 1.1, 1.2, 1.3]      [1, 2, 3, 4]   
 [1, 2, 3, 4]    [1, 2, 3, 4]    ["2020-01-01", "2020-01-02"]    ["2020-01-01 
12:00:00", "2020-01-02 13:01:01"]  ["a", "b", "c"] ["d", "e", "f"] 
["192.168.0.1", "127.0.0.1"]    
[{"name":"Andy","age":18},{"name":"Tim","age":28}]
+
+-- !sql_5_09 --
+[1, 0, 1, 1]   [1, -2, -3, 4]  [128, 129, -129, -130]  [32768, 32769, -32769, 
-32770]  [-1, 0, 1, 2]   [0, 1, 2, 3]    [1, 1.1, 1.2, 1.3]      [1, 2, 3, 4]   
 [1, 2, 3, 4]    [1, 2, 3, 4]    ["2020-01-01", "2020-01-02"]    ["2020-01-01 
12:00:00", "2020-01-02 13:01:01"]  ["a", "b", "c"] ["d", "e", "f"] 
["192.168.0.1", "127.0.0.1"]    
[{"name":"Andy","age":18},{"name":"Tim","age":28}]
+[1, 0, 1, 1]   [1, -2, -3, 4]  [128, 129, -129, -130]  [32768, 32769, -32769, 
-32770]  [-1, 0, 1, 2]   [0, 1, 2, 3]    [1, 1.1, 1.2, 1.3]      [1, 2, 3, 4]   
 [1, 2, 3, 4]    [1, 2, 3, 4]    ["2020-01-01", "2020-01-02"]    ["2020-01-01 
12:00:00", "2020-01-02 13:01:01"]  ["a", "b", "c"] ["d", "e", "f"] 
["192.168.0.1", "127.0.0.1"]    
[{"name":"Andy","age":18},{"name":"Tim","age":28}]
+[1, 0, 1, 1]   [1, -2, -3, 4]  [128, 129, -129, -130]  [32768, 32769, -32769, 
-32770]  [-1, 0, 1, 2]   [0, 1, 2, 3]    [1, 1.1, 1.2, 1.3]      [1, 2, 3, 4]   
 [1, 2, 3, 4]    [1, 2, 3, 4]    ["2020-01-01", "2020-01-02"]    ["2020-01-01 
12:00:00", "2020-01-02 13:01:01"]  ["a", "b", "c"] ["d", "e", "f"] 
["192.168.0.1", "127.0.0.1"]    
[{"name":"Andy","age":18},{"name":"Tim","age":28}]
+
+-- !sql_5_10 --
+[1, 0, 1, 1]   [1, -2, -3, 4]  ["2020-01-01", "2020-01-02"]    ["2020-01-01 
12:00:00", "2020-01-02 13:01:01"]  [1, 2, 3, 4]    [1, 1.1, 1.2, 1.3]      [1, 
2, 3, 4]    [32768, 32769, -32769, -32770]  ["192.168.0.1", "127.0.0.1"]    
["a", "b", "c"] [-1, 0, 1, 2]   
[{"name":"Andy","age":18},{"name":"Tim","age":28}]      [1, 2, 3, 4]    [128, 
129, -129, -130]  ["d", "e", "f"] [0, 1, 2, 3]    
[{"last":"Smith","first":"John"},{"last":"White","first":"Alice"}]      \N      
string1 text#1  3.14    2022-08-08T00:00        12345   2022-08-08T20:10:10
+
+-- !sql_5_11 --
+[1, 0, 1, 1]   [1, -2, -3, 4]  ["2020-01-01", "2020-01-02"]    ["2020-01-01 
12:00:00", "2020-01-02 13:01:01"]  [1, 2, 3, 4]    [1, 1.1, 1.2, 1.3]      [1, 
2, 3, 4]    [32768, 32769, -32769, -32770]  ["192.168.0.1", "127.0.0.1"]    
["a", "b", "c"] [-1, 0, 1, 2]   
[{"name":"Andy","age":18},{"name":"Tim","age":28}]      [1, 2, 3, 4]    [128, 
129, -129, -130]  ["d", "e", "f"] [0, 1, 2, 3]    
[{"last":"Smith","first":"John"},{"last":"White","first":"Alice"}]              
string2 text2   4.0     2022-08-08T00:00        2222    2022-08-08T12:10:10
+
+-- !sql_5_12 --
+[1, 0, 1, 1]   [1, -2, -3, 4]  ["2020-01-01", "2020-01-02"]    ["2020-01-01 
12:00:00", "2020-01-02 13:01:01"]  [1, 2, 3, 4]    [1, 1.1, 1.2, 1.3]      [1, 
2, 3, 4]    [32768, 32769, -32769, -32770]  ["192.168.0.1", "127.0.0.1"]    
["a", "b", "c"] [-1, 0, 1, 2]   
[{"name":"Andy","age":18},{"name":"Tim","age":28}]      [1, 2, 3, 4]    [128, 
129, -129, -130]  ["d", "e", "f"] [0, 1, 2, 3]    
[{"last":"Smith","first":"John"},{"last":"White","first":"Alice"}]      I'm not 
null or empty   string3 text3_4*5       5.0     2022-08-08T00:00        3333    
2022 [...]
+
+-- !sql_5_13 --
+2022-08-08T20:10:10
+
+-- !sql_5_14 --
+2022-08-08T12:10:10
+
+-- !sql_5_15 --
+2022-08-08T20:10:10
+
+-- !sql_5_16 --
+I'm not null or empty
+
+-- !sql_5_17 --
+
+I'm not null or empty
+
+-- !sql_5_18 --
+I'm not null or empty
+
+-- !sql_5_19 --
+[1, 0, 1, 1]   [1, -2, -3, 4]  ["2020-01-01", "2020-01-02"]    ["2020-01-01 
12:00:00", "2020-01-02 13:01:01"]  [1, 2, 3, 4]    [1, 1.1, 1.2, 1.3]      [1, 
2, 3, 4]    [32768, 32769, -32769, -32770]  ["192.168.0.1", "127.0.0.1"]    
["a", "b", "c"] [-1, 0, 1, 2]   
[{"name":"Andy","age":18},{"name":"Tim","age":28}]      [1, 2, 3, 4]    [128, 
129, -129, -130]  ["d", "e", "f"] [0, 1, 2, 3]    
[{"last":"Smith","first":"John"},{"last":"White","first":"Alice"}]      \N      
string1 text#1  3.14    2022-08-08T00:00        12345   2022-08-08T20:10:10
+[1, 0, 1, 1]   [1, -2, -3, 4]  ["2020-01-01", "2020-01-02"]    ["2020-01-01 
12:00:00", "2020-01-02 13:01:01"]  [1, 2, 3, 4]    [1, 1.1, 1.2, 1.3]      [1, 
2, 3, 4]    [32768, 32769, -32769, -32770]  ["192.168.0.1", "127.0.0.1"]    
["a", "b", "c"] [-1, 0, 1, 2]   
[{"name":"Andy","age":18},{"name":"Tim","age":28}]      [1, 2, 3, 4]    [128, 
129, -129, -130]  ["d", "e", "f"] [0, 1, 2, 3]    
[{"last":"Smith","first":"John"},{"last":"White","first":"Alice"}]              
string2 text2   4.0     2022-08-08T00:00        2222    2022-08-08T12:10:10
+[1, 0, 1, 1]   [1, -2, -3, 4]  ["2020-01-01", "2020-01-02"]    ["2020-01-01 
12:00:00", "2020-01-02 13:01:01"]  [1, 2, 3, 4]    [1, 1.1, 1.2, 1.3]      [1, 
2, 3, 4]    [32768, 32769, -32769, -32770]  ["192.168.0.1", "127.0.0.1"]    
["a", "b", "c"] [-1, 0, 1, 2]   
[{"name":"Andy","age":18},{"name":"Tim","age":28}]      [1, 2, 3, 4]    [128, 
129, -129, -130]  ["d", "e", "f"] [0, 1, 2, 3]    
[{"last":"Smith","first":"John"},{"last":"White","first":"Alice"}]      I'm not 
null or empty   string3 text3_4*5       5.0     2022-08-08T00:00        3333    
2022 [...]
+
+-- !sql_5_20 --
+[{"name":"Andy","age":18},{"name":"Tim","age":28}]     
[{"last":"Smith","first":"John"},{"last":"White","first":"Alice"}]      "Andy"  
"White"
+[{"name":"Andy","age":18},{"name":"Tim","age":28}]     
[{"last":"Smith","first":"John"},{"last":"White","first":"Alice"}]      "Andy"  
"White"
+[{"name":"Andy","age":18},{"name":"Tim","age":28}]     
[{"last":"Smith","first":"John"},{"last":"White","first":"Alice"}]      "Andy"  
"White"
+
+-- !sql_6_02 --
+[1, 0, 1, 1]   [1, -2, -3, 4]  ["2020-01-01", "2020-01-02"]    ["2020-01-01 
12:00:00", "2020-01-02 13:01:01"]  [1, 2, 3, 4]    [1, 1.1, 1.2, 1.3]      [1, 
2, 3, 4]    [32768, 32769, -32769, -32770]  ["192.168.0.1", "127.0.0.1"]    
["a", "b", "c"] [-1, 0, 1, 2]   
[{"name":"Andy","age":18},{"name":"Tim","age":28}]      [1, 2, 3, 4]    [128, 
129, -129, -130]  ["d", "e", "f"] [0, 1, 2, 3]    
[{"last":"Smith","first":"John"},{"last":"White","first":"Alice"}]      \N      
string1 text#1  3.14    2022-08-08T00:00        12345   2022-08-08T20:10:10
+
+-- !sql_6_03 --
+[1, 0, 1, 1]   [1, -2, -3, 4]  ["2020-01-01", "2020-01-02"]    ["2020-01-01 
12:00:00", "2020-01-02 13:01:01"]  [1, 2, 3, 4]    [1, 1.1, 1.2, 1.3]      [1, 
2, 3, 4]    [32768, 32769, -32769, -32770]  ["192.168.0.1", "127.0.0.1"]    
["a", "b", "c"] [-1, 0, 1, 2]   
[{"name":"Andy","age":18},{"name":"Tim","age":28}]      [1, 2, 3, 4]    [128, 
129, -129, -130]  ["d", "e", "f"] [0, 1, 2, 3]    
[{"last":"Smith","first":"John"},{"last":"White","first":"Alice"}]      \N      
string1 text#1  3.14    2022-08-08T00:00        12345   2022-08-08T20:10:10
+[1, 0, 1, 1]   [1, -2, -3, 4]  ["2020-01-01", "2020-01-02"]    ["2020-01-01 
12:00:00", "2020-01-02 13:01:01"]  [1, 2, 3, 4]    [1, 1.1, 1.2, 1.3]      [1, 
2, 3, 4]    [32768, 32769, -32769, -32770]  ["192.168.0.1", "127.0.0.1"]    
["a", "b", "c"] [-1, 0, 1, 2]   
[{"name":"Andy","age":18},{"name":"Tim","age":28}]      [1, 2, 3, 4]    [128, 
129, -129, -130]  ["d", "e", "f"] [0, 1, 2, 3]    
[{"last":"Smith","first":"John"},{"last":"White","first":"Alice"}]              
string2 text2   4.0     2022-08-08T00:00        2222    2022-08-08T12:10:10
+[1, 0, 1, 1]   [1, -2, -3, 4]  ["2020-01-01", "2020-01-02"]    ["2020-01-01 
12:00:00", "2020-01-02 13:01:01"]  [1, 2, 3, 4]    [1, 1.1, 1.2, 1.3]      [1, 
2, 3, 4]    [32768, 32769, -32769, -32770]  ["192.168.0.1", "127.0.0.1"]    
["a", "b", "c"] [-1, 0, 1, 2]   
[{"name":"Andy","age":18},{"name":"Tim","age":28}]      [1, 2, 3, 4]    [128, 
129, -129, -130]  ["d", "e", "f"] [0, 1, 2, 3]    
[{"last":"Smith","first":"John"},{"last":"White","first":"Alice"}]      I'm not 
null or empty   string3 text3_4*5       5.0     2022-08-08T00:00        3333    
2022 [...]
+
+-- !sql_6_04 --
+[1, 0, 1, 1]   [1, -2, -3, 4]  ["2020-01-01", "2020-01-02"]    ["2020-01-01 
12:00:00", "2020-01-02 13:01:01"]  [1, 2, 3, 4]    [1, 1.1, 1.2, 1.3]      [1, 
2, 3, 4]    [32768, 32769, -32769, -32770]  ["192.168.0.1", "127.0.0.1"]    
["a", "b", "c"] [-1, 0, 1, 2]   
[{"name":"Andy","age":18},{"name":"Tim","age":28}]      [1, 2, 3, 4]    [128, 
129, -129, -130]  ["d", "e", "f"] [0, 1, 2, 3]    
[{"last":"Smith","first":"John"},{"last":"White","first":"Alice"}]              
string2 text2   4.0     2022-08-08T00:00        2222    2022-08-08T12:10:10
+
+-- !sql_6_05 --
+true   1       128     32768   -1      0       1.0     1.0     1.0     1.0     
2020-01-01      2020-01-01T12:00        a       d       192.168.0.1     
{"name":"Andy","age":18}
+true   1       128     32768   -1      0       1.0     1.0     1.0     1.0     
2020-01-01      2020-01-01T12:00        a       d       192.168.0.1     
{"name":"Andy","age":18}
+true   1       128     32768   -1      0       1.0     1.0     1.0     1.0     
2020-01-01      2020-01-01T12:00        a       d       192.168.0.1     
{"name":"Andy","age":18}
+
+-- !sql_6_06 --
+true   1       128     32768   -1      0       1.0     1.0     1.0     1.0     
2020-01-01      2020-01-01T12:00        a       d       192.168.0.1     
{"name":"Andy","age":18}
+true   1       128     32768   -1      0       1.0     1.0     1.0     1.0     
2020-01-01      2020-01-01T12:00        a       d       192.168.0.1     
{"name":"Andy","age":18}
+true   1       128     32768   -1      0       1.0     1.0     1.0     1.0     
2020-01-01      2020-01-01T12:00        a       d       192.168.0.1     
{"name":"Andy","age":18}
+
+-- !sql_6_07 --
+[1, 0, 1, 1]   [1, -2, -3, 4]  ["2020-01-01", "2020-01-02"]    ["2020-01-01 
12:00:00", "2020-01-02 13:01:01"]  [1, 2, 3, 4]    [1, 1.1, 1.2, 1.3]      [1, 
2, 3, 4]    [32768, 32769, -32769, -32770]  ["192.168.0.1", "127.0.0.1"]    
["a", "b", "c"] [-1, 0, 1, 2]   
[{"name":"Andy","age":18},{"name":"Tim","age":28}]      [1, 2, 3, 4]    [128, 
129, -129, -130]  ["d", "e", "f"] [0, 1, 2, 3]    
[{"last":"Smith","first":"John"},{"last":"White","first":"Alice"}]      \N      
string1 text#1  3.14    2022-08-08T00:00        12345   2022-08-08T20:10:10
+
+-- !sql_6_08 --
+[1, 0, 1, 1]   [1, -2, -3, 4]  [128, 129, -129, -130]  [32768, 32769, -32769, 
-32770]  [-1, 0, 1, 2]   [0, 1, 2, 3]    [1, 1.1, 1.2, 1.3]      [1, 2, 3, 4]   
 [1, 2, 3, 4]    [1, 2, 3, 4]    ["2020-01-01", "2020-01-02"]    ["2020-01-01 
12:00:00", "2020-01-02 13:01:01"]  ["a", "b", "c"] ["d", "e", "f"] 
["192.168.0.1", "127.0.0.1"]    
[{"name":"Andy","age":18},{"name":"Tim","age":28}]
+[1, 0, 1, 1]   [1, -2, -3, 4]  [128, 129, -129, -130]  [32768, 32769, -32769, 
-32770]  [-1, 0, 1, 2]   [0, 1, 2, 3]    [1, 1.1, 1.2, 1.3]      [1, 2, 3, 4]   
 [1, 2, 3, 4]    [1, 2, 3, 4]    ["2020-01-01", "2020-01-02"]    ["2020-01-01 
12:00:00", "2020-01-02 13:01:01"]  ["a", "b", "c"] ["d", "e", "f"] 
["192.168.0.1", "127.0.0.1"]    
[{"name":"Andy","age":18},{"name":"Tim","age":28}]
+[1, 0, 1, 1]   [1, -2, -3, 4]  [128, 129, -129, -130]  [32768, 32769, -32769, 
-32770]  [-1, 0, 1, 2]   [0, 1, 2, 3]    [1, 1.1, 1.2, 1.3]      [1, 2, 3, 4]   
 [1, 2, 3, 4]    [1, 2, 3, 4]    ["2020-01-01", "2020-01-02"]    ["2020-01-01 
12:00:00", "2020-01-02 13:01:01"]  ["a", "b", "c"] ["d", "e", "f"] 
["192.168.0.1", "127.0.0.1"]    
[{"name":"Andy","age":18},{"name":"Tim","age":28}]
+
+-- !sql_6_09 --
+[1, 0, 1, 1]   [1, -2, -3, 4]  [128, 129, -129, -130]  [32768, 32769, -32769, 
-32770]  [-1, 0, 1, 2]   [0, 1, 2, 3]    [1, 1.1, 1.2, 1.3]      [1, 2, 3, 4]   
 [1, 2, 3, 4]    [1, 2, 3, 4]    ["2020-01-01", "2020-01-02"]    ["2020-01-01 
12:00:00", "2020-01-02 13:01:01"]  ["a", "b", "c"] ["d", "e", "f"] 
["192.168.0.1", "127.0.0.1"]    
[{"name":"Andy","age":18},{"name":"Tim","age":28}]
+[1, 0, 1, 1]   [1, -2, -3, 4]  [128, 129, -129, -130]  [32768, 32769, -32769, 
-32770]  [-1, 0, 1, 2]   [0, 1, 2, 3]    [1, 1.1, 1.2, 1.3]      [1, 2, 3, 4]   
 [1, 2, 3, 4]    [1, 2, 3, 4]    ["2020-01-01", "2020-01-02"]    ["2020-01-01 
12:00:00", "2020-01-02 13:01:01"]  ["a", "b", "c"] ["d", "e", "f"] 
["192.168.0.1", "127.0.0.1"]    
[{"name":"Andy","age":18},{"name":"Tim","age":28}]
+[1, 0, 1, 1]   [1, -2, -3, 4]  [128, 129, -129, -130]  [32768, 32769, -32769, 
-32770]  [-1, 0, 1, 2]   [0, 1, 2, 3]    [1, 1.1, 1.2, 1.3]      [1, 2, 3, 4]   
 [1, 2, 3, 4]    [1, 2, 3, 4]    ["2020-01-01", "2020-01-02"]    ["2020-01-01 
12:00:00", "2020-01-02 13:01:01"]  ["a", "b", "c"] ["d", "e", "f"] 
["192.168.0.1", "127.0.0.1"]    
[{"name":"Andy","age":18},{"name":"Tim","age":28}]
+
+-- !sql_6_10 --
+[1, 0, 1, 1]   [1, -2, -3, 4]  ["2020-01-01", "2020-01-02"]    ["2020-01-01 
12:00:00", "2020-01-02 13:01:01"]  [1, 2, 3, 4]    [1, 1.1, 1.2, 1.3]      [1, 
2, 3, 4]    [32768, 32769, -32769, -32770]  ["192.168.0.1", "127.0.0.1"]    
["a", "b", "c"] [-1, 0, 1, 2]   
[{"name":"Andy","age":18},{"name":"Tim","age":28}]      [1, 2, 3, 4]    [128, 
129, -129, -130]  ["d", "e", "f"] [0, 1, 2, 3]    
[{"last":"Smith","first":"John"},{"last":"White","first":"Alice"}]      \N      
string1 text#1  3.14    2022-08-08T00:00        12345   2022-08-08T20:10:10
+
+-- !sql_6_11 --
+[1, 0, 1, 1]   [1, -2, -3, 4]  ["2020-01-01", "2020-01-02"]    ["2020-01-01 
12:00:00", "2020-01-02 13:01:01"]  [1, 2, 3, 4]    [1, 1.1, 1.2, 1.3]      [1, 
2, 3, 4]    [32768, 32769, -32769, -32770]  ["192.168.0.1", "127.0.0.1"]    
["a", "b", "c"] [-1, 0, 1, 2]   
[{"name":"Andy","age":18},{"name":"Tim","age":28}]      [1, 2, 3, 4]    [128, 
129, -129, -130]  ["d", "e", "f"] [0, 1, 2, 3]    
[{"last":"Smith","first":"John"},{"last":"White","first":"Alice"}]              
string2 text2   4.0     2022-08-08T00:00        2222    2022-08-08T12:10:10
+
+-- !sql_6_12 --
+[1, 0, 1, 1]   [1, -2, -3, 4]  ["2020-01-01", "2020-01-02"]    ["2020-01-01 
12:00:00", "2020-01-02 13:01:01"]  [1, 2, 3, 4]    [1, 1.1, 1.2, 1.3]      [1, 
2, 3, 4]    [32768, 32769, -32769, -32770]  ["192.168.0.1", "127.0.0.1"]    
["a", "b", "c"] [-1, 0, 1, 2]   
[{"name":"Andy","age":18},{"name":"Tim","age":28}]      [1, 2, 3, 4]    [128, 
129, -129, -130]  ["d", "e", "f"] [0, 1, 2, 3]    
[{"last":"Smith","first":"John"},{"last":"White","first":"Alice"}]      I'm not 
null or empty   string3 text3_4*5       5.0     2022-08-08T00:00        3333    
2022 [...]
+
+-- !sql_6_13 --
+2022-08-08T20:10:10
+
+-- !sql_6_14 --
+2022-08-08T12:10:10
+
+-- !sql_6_15 --
+2022-08-08T20:10:10
+
+-- !sql_6_16 --
+I'm not null or empty
+
+-- !sql_6_17 --
+
+I'm not null or empty
+
+-- !sql_6_18 --
+I'm not null or empty
+
+-- !sql_6_19 --
+[1, 0, 1, 1]   [1, -2, -3, 4]  ["2020-01-01", "2020-01-02"]    ["2020-01-01 
12:00:00", "2020-01-02 13:01:01"]  [1, 2, 3, 4]    [1, 1.1, 1.2, 1.3]      [1, 
2, 3, 4]    [32768, 32769, -32769, -32770]  ["192.168.0.1", "127.0.0.1"]    
["a", "b", "c"] [-1, 0, 1, 2]   
[{"name":"Andy","age":18},{"name":"Tim","age":28}]      [1, 2, 3, 4]    [128, 
129, -129, -130]  ["d", "e", "f"] [0, 1, 2, 3]    
[{"last":"Smith","first":"John"},{"last":"White","first":"Alice"}]      \N      
string1 text#1  3.14    2022-08-08T00:00        12345   2022-08-08T20:10:10
+[1, 0, 1, 1]   [1, -2, -3, 4]  ["2020-01-01", "2020-01-02"]    ["2020-01-01 
12:00:00", "2020-01-02 13:01:01"]  [1, 2, 3, 4]    [1, 1.1, 1.2, 1.3]      [1, 
2, 3, 4]    [32768, 32769, -32769, -32770]  ["192.168.0.1", "127.0.0.1"]    
["a", "b", "c"] [-1, 0, 1, 2]   
[{"name":"Andy","age":18},{"name":"Tim","age":28}]      [1, 2, 3, 4]    [128, 
129, -129, -130]  ["d", "e", "f"] [0, 1, 2, 3]    
[{"last":"Smith","first":"John"},{"last":"White","first":"Alice"}]              
string2 text2   4.0     2022-08-08T00:00        2222    2022-08-08T12:10:10
+[1, 0, 1, 1]   [1, -2, -3, 4]  ["2020-01-01", "2020-01-02"]    ["2020-01-01 
12:00:00", "2020-01-02 13:01:01"]  [1, 2, 3, 4]    [1, 1.1, 1.2, 1.3]      [1, 
2, 3, 4]    [32768, 32769, -32769, -32770]  ["192.168.0.1", "127.0.0.1"]    
["a", "b", "c"] [-1, 0, 1, 2]   
[{"name":"Andy","age":18},{"name":"Tim","age":28}]      [1, 2, 3, 4]    [128, 
129, -129, -130]  ["d", "e", "f"] [0, 1, 2, 3]    
[{"last":"Smith","first":"John"},{"last":"White","first":"Alice"}]      I'm not 
null or empty   string3 text3_4*5       5.0     2022-08-08T00:00        3333    
2022 [...]
+
+-- !sql_6_20 --
+[{"name":"Andy","age":18},{"name":"Tim","age":28}]     
[{"last":"Smith","first":"John"},{"last":"White","first":"Alice"}]      "Andy"  
"White"
+[{"name":"Andy","age":18},{"name":"Tim","age":28}]     
[{"last":"Smith","first":"John"},{"last":"White","first":"Alice"}]      "Andy"  
"White"
+[{"name":"Andy","age":18},{"name":"Tim","age":28}]     
[{"last":"Smith","first":"John"},{"last":"White","first":"Alice"}]      "Andy"  
"White"
+
+-- !sql_7_02 --
+[1, 0, 1, 1]   [1, -2, -3, 4]  ["2020-01-01", "2020-01-02"]    ["2020-01-01 
12:00:00", "2020-01-02 13:01:01"]  [1, 2, 3, 4]    [1, 1.1, 1.2, 1.3]      [1, 
2, 3, 4]    [32768, 32769, -32769, -32770]  ["192.168.0.1", "127.0.0.1"]    
["a", "b", "c"] [-1, 0, 1, 2]   
[{"name":"Andy","age":18},{"name":"Tim","age":28}]      [1, 2, 3, 4]    [128, 
129, -129, -130]  ["d", "e", "f"] [0, 1, 2, 3]    
[{"last":"Smith","first":"John"},{"last":"White","first":"Alice"}]      debug   
\N      This string can be quite lengthy        string1 2022-08-08T20:10:10     
 [...]
+
+-- !sql_7_03 --
+[1, 0, 1, 1]   [1, -2, -3, 4]  ["2020-01-01", "2020-01-02"]    ["2020-01-01 
12:00:00", "2020-01-02 13:01:01"]  [1, 2, 3, 4]    [1, 1.1, 1.2, 1.3]      [1, 
2, 3, 4]    [32768, 32769, -32769, -32770]  ["192.168.0.1", "127.0.0.1"]    
["a", "b", "c"] [-1, 0, 1, 2]   
[{"name":"Andy","age":18},{"name":"Tim","age":28}]      [1, 2, 3, 4]    [128, 
129, -129, -130]  ["d", "e", "f"] [0, 1, 2, 3]    
[{"last":"Smith","first":"John"},{"last":"White","first":"Alice"}]      \N      
\N      \N      string4 2022-08-08T20:10:10     text3_4*5       6.0     
2022-08-08T00:00        20 [...]
+[1, 0, 1, 1]   [1, -2, -3, 4]  ["2020-01-01", "2020-01-02"]    ["2020-01-01 
12:00:00", "2020-01-02 13:01:01"]  [1, 2, 3, 4]    [1, 1.1, 1.2, 1.3]      [1, 
2, 3, 4]    [32768, 32769, -32769, -32770]  ["192.168.0.1", "127.0.0.1"]    
["a", "b", "c"] [-1, 0, 1, 2]   
[{"name":"Andy","age":18},{"name":"Tim","age":28}]      [1, 2, 3, 4]    [128, 
129, -129, -130]  ["d", "e", "f"] [0, 1, 2, 3]    
[{"last":"Smith","first":"John"},{"last":"White","first":"Alice"}]      \N      
        \N      string2 2022-08-08T12:10:10     text2   4.0     
2022-08-08T00:00        2022-08- [...]
+[1, 0, 1, 1]   [1, -2, -3, 4]  ["2020-01-01", "2020-01-02"]    ["2020-01-01 
12:00:00", "2020-01-02 13:01:01"]  [1, 2, 3, 4]    [1, 1.1, 1.2, 1.3]      [1, 
2, 3, 4]    [32768, 32769, -32769, -32770]  ["192.168.0.1", "127.0.0.1"]    
["a", "b", "c"] [-1, 0, 1, 2]   
[{"name":"Andy","age":18},{"name":"Tim","age":28}]      [1, 2, 3, 4]    [128, 
129, -129, -130]  ["d", "e", "f"] [0, 1, 2, 3]    
[{"last":"Smith","first":"John"},{"last":"White","first":"Alice"}]      \N      
I'm not null or empty   \N      string3 2022-08-09T00:40:10     text3_4*5       
5.0      [...]
+[1, 0, 1, 1]   [1, -2, -3, 4]  ["2020-01-01", "2020-01-02"]    ["2020-01-01 
12:00:00", "2020-01-02 13:01:01"]  [1, 2, 3, 4]    [1, 1.1, 1.2, 1.3]      [1, 
2, 3, 4]    [32768, 32769, -32769, -32770]  ["192.168.0.1", "127.0.0.1"]    
["a", "b", "c"] [-1, 0, 1, 2]   
[{"name":"Andy","age":18},{"name":"Tim","age":28}]      [1, 2, 3, 4]    [128, 
129, -129, -130]  ["d", "e", "f"] [0, 1, 2, 3]    
[{"last":"Smith","first":"John"},{"last":"White","first":"Alice"}]      debug   
\N      This string can be quite lengthy        string1 2022-08-08T20:10:10     
 [...]
+
+-- !sql_7_04 --
+[1, 0, 1, 1]   [1, -2, -3, 4]  ["2020-01-01", "2020-01-02"]    ["2020-01-01 
12:00:00", "2020-01-02 13:01:01"]  [1, 2, 3, 4]    [1, 1.1, 1.2, 1.3]      [1, 
2, 3, 4]    [32768, 32769, -32769, -32770]  ["192.168.0.1", "127.0.0.1"]    
["a", "b", "c"] [-1, 0, 1, 2]   
[{"name":"Andy","age":18},{"name":"Tim","age":28}]      [1, 2, 3, 4]    [128, 
129, -129, -130]  ["d", "e", "f"] [0, 1, 2, 3]    
[{"last":"Smith","first":"John"},{"last":"White","first":"Alice"}]      \N      
        \N      string2 2022-08-08T12:10:10     text2   4.0     
2022-08-08T00:00        2022-08- [...]
+
+-- !sql_7_05 --
+true   1       128     32768   -1      0       1.0     1.0     1.0     1.0     
2020-01-01      2020-01-01T12:00        a       d       192.168.0.1     
{"name":"Andy","age":18}
+true   1       128     32768   -1      0       1.0     1.0     1.0     1.0     
2020-01-01      2020-01-01T12:00        a       d       192.168.0.1     
{"name":"Andy","age":18}
+true   1       128     32768   -1      0       1.0     1.0     1.0     1.0     
2020-01-01      2020-01-01T12:00        a       d       192.168.0.1     
{"name":"Andy","age":18}
+true   1       128     32768   -1      0       1.0     1.0     1.0     1.0     
2020-01-01      2020-01-01T12:00        a       d       192.168.0.1     
{"name":"Andy","age":18}
+
+-- !sql_7_06 --
+true   1       128     32768   -1      0       1.0     1.0     1.0     1.0     
2020-01-01      2020-01-01T12:00        a       d       192.168.0.1     
{"name":"Andy","age":18}
+true   1       128     32768   -1      0       1.0     1.0     1.0     1.0     
2020-01-01      2020-01-01T12:00        a       d       192.168.0.1     
{"name":"Andy","age":18}
+true   1       128     32768   -1      0       1.0     1.0     1.0     1.0     
2020-01-01      2020-01-01T12:00        a       d       192.168.0.1     
{"name":"Andy","age":18}
+true   1       128     32768   -1      0       1.0     1.0     1.0     1.0     
2020-01-01      2020-01-01T12:00        a       d       192.168.0.1     
{"name":"Andy","age":18}
+true   1       128     32768   -1      0       1.0     1.0     1.0     1.0     
2020-01-01      2020-01-01T12:00        a       d       192.168.0.1     
{"name":"Andy","age":18}
+true   1       128     32768   -1      0       1.0     1.0     1.0     1.0     
2020-01-01      2020-01-01T12:00        a       d       192.168.0.1     
{"name":"Andy","age":18}
+true   1       128     32768   -1      0       1.0     1.0     1.0     1.0     
2020-01-01      2020-01-01T12:00        a       d       192.168.0.1     
{"name":"Andy","age":18}
+true   1       128     32768   -1      0       1.0     1.0     1.0     1.0     
2020-01-01      2020-01-01T12:00        a       d       192.168.0.1     
{"name":"Andy","age":18}
+
+-- !sql_7_07 --
+[1, 0, 1, 1]   [1, -2, -3, 4]  ["2020-01-01", "2020-01-02"]    ["2020-01-01 
12:00:00", "2020-01-02 13:01:01"]  [1, 2, 3, 4]    [1, 1.1, 1.2, 1.3]      [1, 
2, 3, 4]    [32768, 32769, -32769, -32770]  ["192.168.0.1", "127.0.0.1"]    
["a", "b", "c"] [-1, 0, 1, 2]   
[{"name":"Andy","age":18},{"name":"Tim","age":28}]      [1, 2, 3, 4]    [128, 
129, -129, -130]  ["d", "e", "f"] [0, 1, 2, 3]    
[{"last":"Smith","first":"John"},{"last":"White","first":"Alice"}]      debug   
\N      This string can be quite lengthy        string1 2022-08-08T20:10:10     
 [...]
+
+-- !sql_7_08 --
+[1, 0, 1, 1]   [1, -2, -3, 4]  [128, 129, -129, -130]  [32768, 32769, -32769, 
-32770]  [-1, 0, 1, 2]   [0, 1, 2, 3]    [1, 1.1, 1.2, 1.3]      [1, 2, 3, 4]   
 [1, 2, 3, 4]    [1, 2, 3, 4]    ["2020-01-01", "2020-01-02"]    ["2020-01-01 
12:00:00", "2020-01-02 13:01:01"]  ["a", "b", "c"] ["d", "e", "f"] 
["192.168.0.1", "127.0.0.1"]    
[{"name":"Andy","age":18},{"name":"Tim","age":28}]
+[1, 0, 1, 1]   [1, -2, -3, 4]  [128, 129, -129, -130]  [32768, 32769, -32769, 
-32770]  [-1, 0, 1, 2]   [0, 1, 2, 3]    [1, 1.1, 1.2, 1.3]      [1, 2, 3, 4]   
 [1, 2, 3, 4]    [1, 2, 3, 4]    ["2020-01-01", "2020-01-02"]    ["2020-01-01 
12:00:00", "2020-01-02 13:01:01"]  ["a", "b", "c"] ["d", "e", "f"] 
["192.168.0.1", "127.0.0.1"]    
[{"name":"Andy","age":18},{"name":"Tim","age":28}]
+[1, 0, 1, 1]   [1, -2, -3, 4]  [128, 129, -129, -130]  [32768, 32769, -32769, 
-32770]  [-1, 0, 1, 2]   [0, 1, 2, 3]    [1, 1.1, 1.2, 1.3]      [1, 2, 3, 4]   
 [1, 2, 3, 4]    [1, 2, 3, 4]    ["2020-01-01", "2020-01-02"]    ["2020-01-01 
12:00:00", "2020-01-02 13:01:01"]  ["a", "b", "c"] ["d", "e", "f"] 
["192.168.0.1", "127.0.0.1"]    
[{"name":"Andy","age":18},{"name":"Tim","age":28}]
+[1, 0, 1, 1]   [1, -2, -3, 4]  [128, 129, -129, -130]  [32768, 32769, -32769, 
-32770]  [-1, 0, 1, 2]   [0, 1, 2, 3]    [1, 1.1, 1.2, 1.3]      [1, 2, 3, 4]   
 [1, 2, 3, 4]    [1, 2, 3, 4]    ["2020-01-01", "2020-01-02"]    ["2020-01-01 
12:00:00", "2020-01-02 13:01:01"]  ["a", "b", "c"] ["d", "e", "f"] 
["192.168.0.1", "127.0.0.1"]    
[{"name":"Andy","age":18},{"name":"Tim","age":28}]
+
+-- !sql_7_09 --
+[1, 0, 1, 1]   [1, -2, -3, 4]  [128, 129, -129, -130]  [32768, 32769, -32769, 
-32770]  [-1, 0, 1, 2]   [0, 1, 2, 3]    [1, 1.1, 1.2, 1.3]      [1, 2, 3, 4]   
 [1, 2, 3, 4]    [1, 2, 3, 4]    ["2020-01-01", "2020-01-02"]    ["2020-01-01 
12:00:00", "2020-01-02 13:01:01"]  ["a", "b", "c"] ["d", "e", "f"] 
["192.168.0.1", "127.0.0.1"]    
[{"name":"Andy","age":18},{"name":"Tim","age":28}]
+[1, 0, 1, 1]   [1, -2, -3, 4]  [128, 129, -129, -130]  [32768, 32769, -32769, 
-32770]  [-1, 0, 1, 2]   [0, 1, 2, 3]    [1, 1.1, 1.2, 1.3]      [1, 2, 3, 4]   
 [1, 2, 3, 4]    [1, 2, 3, 4]    ["2020-01-01", "2020-01-02"]    ["2020-01-01 
12:00:00", "2020-01-02 13:01:01"]  ["a", "b", "c"] ["d", "e", "f"] 
["192.168.0.1", "127.0.0.1"]    
[{"name":"Andy","age":18},{"name":"Tim","age":28}]
+[1, 0, 1, 1]   [1, -2, -3, 4]  [128, 129, -129, -130]  [32768, 32769, -32769, 
-32770]  [-1, 0, 1, 2]   [0, 1, 2, 3]    [1, 1.1, 1.2, 1.3]      [1, 2, 3, 4]   
 [1, 2, 3, 4]    [1, 2, 3, 4]    ["2020-01-01", "2020-01-02"]    ["2020-01-01 
12:00:00", "2020-01-02 13:01:01"]  ["a", "b", "c"] ["d", "e", "f"] 
["192.168.0.1", "127.0.0.1"]    
[{"name":"Andy","age":18},{"name":"Tim","age":28}]
+[1, 0, 1, 1]   [1, -2, -3, 4]  [128, 129, -129, -130]  [32768, 32769, -32769, 
-32770]  [-1, 0, 1, 2]   [0, 1, 2, 3]    [1, 1.1, 1.2, 1.3]      [1, 2, 3, 4]   
 [1, 2, 3, 4]    [1, 2, 3, 4]    ["2020-01-01", "2020-01-02"]    ["2020-01-01 
12:00:00", "2020-01-02 13:01:01"]  ["a", "b", "c"] ["d", "e", "f"] 
["192.168.0.1", "127.0.0.1"]    
[{"name":"Andy","age":18},{"name":"Tim","age":28}]
+[1, 0, 1, 1]   [1, -2, -3, 4]  [128, 129, -129, -130]  [32768, 32769, -32769, 
-32770]  [-1, 0, 1, 2]   [0, 1, 2, 3]    [1, 1.1, 1.2, 1.3]      [1, 2, 3, 4]   
 [1, 2, 3, 4]    [1, 2, 3, 4]    ["2020-01-01", "2020-01-02"]    ["2020-01-01 
12:00:00", "2020-01-02 13:01:01"]  ["a", "b", "c"] ["d", "e", "f"] 
["192.168.0.1", "127.0.0.1"]    
[{"name":"Andy","age":18},{"name":"Tim","age":28}]
+[1, 0, 1, 1]   [1, -2, -3, 4]  [128, 129, -129, -130]  [32768, 32769, -32769, 
-32770]  [-1, 0, 1, 2]   [0, 1, 2, 3]    [1, 1.1, 1.2, 1.3]      [1, 2, 3, 4]   
 [1, 2, 3, 4]    [1, 2, 3, 4]    ["2020-01-01", "2020-01-02"]    ["2020-01-01 
12:00:00", "2020-01-02 13:01:01"]  ["a", "b", "c"] ["d", "e", "f"] 
["192.168.0.1", "127.0.0.1"]    
[{"name":"Andy","age":18},{"name":"Tim","age":28}]
+[1, 0, 1, 1]   [1, -2, -3, 4]  [128, 129, -129, -130]  [32768, 32769, -32769, 
-32770]  [-1, 0, 1, 2]   [0, 1, 2, 3]    [1, 1.1, 1.2, 1.3]      [1, 2, 3, 4]   
 [1, 2, 3, 4]    [1, 2, 3, 4]    ["2020-01-01", "2020-01-02"]    ["2020-01-01 
12:00:00", "2020-01-02 13:01:01"]  ["a", "b", "c"] ["d", "e", "f"] 
["192.168.0.1", "127.0.0.1"]    
[{"name":"Andy","age":18},{"name":"Tim","age":28}]
+[1, 0, 1, 1]   [1, -2, -3, 4]  [128, 129, -129, -130]  [32768, 32769, -32769, 
-32770]  [-1, 0, 1, 2]   [0, 1, 2, 3]    [1, 1.1, 1.2, 1.3]      [1, 2, 3, 4]   
 [1, 2, 3, 4]    [1, 2, 3, 4]    ["2020-01-01", "2020-01-02"]    ["2020-01-01 
12:00:00", "2020-01-02 13:01:01"]  ["a", "b", "c"] ["d", "e", "f"] 
["192.168.0.1", "127.0.0.1"]    
[{"name":"Andy","age":18},{"name":"Tim","age":28}]
+
+-- !sql_7_10 --
+value1 value2
+
+-- !sql_7_11 --
+[1, 0, 1, 1]   [1, -2, -3, 4]  ["2020-01-01", "2020-01-02"]    ["2020-01-01 
12:00:00", "2020-01-02 13:01:01"]  [1, 2, 3, 4]    [1, 1.1, 1.2, 1.3]      [1, 
2, 3, 4]    [32768, 32769, -32769, -32770]  ["192.168.0.1", "127.0.0.1"]    
["a", "b", "c"] [-1, 0, 1, 2]   
[{"name":"Andy","age":18},{"name":"Tim","age":28}]      [1, 2, 3, 4]    [128, 
129, -129, -130]  ["d", "e", "f"] [0, 1, 2, 3]    
[{"last":"Smith","first":"John"},{"last":"White","first":"Alice"}]      debug   
\N      This string can be quite lengthy        string1 2022-08-08T20:10:10     
 [...]
+
+-- !sql_7_12 --
+[1, 0, 1, 1]   [1, -2, -3, 4]  ["2020-01-01", "2020-01-02"]    ["2020-01-01 
12:00:00", "2020-01-02 13:01:01"]  [1, 2, 3, 4]    [1, 1.1, 1.2, 1.3]      [1, 
2, 3, 4]    [32768, 32769, -32769, -32770]  ["192.168.0.1", "127.0.0.1"]    
["a", "b", "c"] [-1, 0, 1, 2]   
[{"name":"Andy","age":18},{"name":"Tim","age":28}]      [1, 2, 3, 4]    [128, 
129, -129, -130]  ["d", "e", "f"] [0, 1, 2, 3]    
[{"last":"Smith","first":"John"},{"last":"White","first":"Alice"}]      \N      
        \N      string2 2022-08-08T12:10:10     text2   4.0     
2022-08-08T00:00        2022-08- [...]
+
+-- !sql_7_13 --
+[1, 0, 1, 1]   [1, -2, -3, 4]  ["2020-01-01", "2020-01-02"]    ["2020-01-01 
12:00:00", "2020-01-02 13:01:01"]  [1, 2, 3, 4]    [1, 1.1, 1.2, 1.3]      [1, 
2, 3, 4]    [32768, 32769, -32769, -32770]  ["192.168.0.1", "127.0.0.1"]    
["a", "b", "c"] [-1, 0, 1, 2]   
[{"name":"Andy","age":18},{"name":"Tim","age":28}]      [1, 2, 3, 4]    [128, 
129, -129, -130]  ["d", "e", "f"] [0, 1, 2, 3]    
[{"last":"Smith","first":"John"},{"last":"White","first":"Alice"}]      \N      
I'm not null or empty   \N      string3 2022-08-09T00:40:10     text3_4*5       
5.0      [...]
+
+-- !sql_7_14 --
+[1, 0, 1, 1]   [1, -2, -3, 4]  ["2020-01-01", "2020-01-02"]    ["2020-01-01 
12:00:00", "2020-01-02 13:01:01"]  [1, 2, 3, 4]    [1, 1.1, 1.2, 1.3]      [1, 
2, 3, 4]    [32768, 32769, -32769, -32770]  ["192.168.0.1", "127.0.0.1"]    
["a", "b", "c"] [-1, 0, 1, 2]   
[{"name":"Andy","age":18},{"name":"Tim","age":28}]      [1, 2, 3, 4]    [128, 
129, -129, -130]  ["d", "e", "f"] [0, 1, 2, 3]    
[{"last":"Smith","first":"John"},{"last":"White","first":"Alice"}]      \N      
\N      \N      string4 2022-08-08T20:10:10     text3_4*5       6.0     
2022-08-08T00:00        20 [...]
+
+-- !sql_7_15 --
+2022-08-08T20:10:10
+
+-- !sql_7_16 --
+2022-08-08T12:10:10
+
+-- !sql_7_17 --
+2022-08-09T00:40:10
+
+-- !sql_7_18 --
+2022-08-08T20:10:10
+
+-- !sql_7_19 --
+I'm not null or empty
+
+-- !sql_7_20 --
+
+I'm not null or empty
+
+-- !sql_7_21 --
+I'm not null or empty
+
+-- !sql_7_22 --
+[1, 0, 1, 1]   [1, -2, -3, 4]  ["2020-01-01", "2020-01-02"]    ["2020-01-01 
12:00:00", "2020-01-02 13:01:01"]  [1, 2, 3, 4]    [1, 1.1, 1.2, 1.3]      [1, 
2, 3, 4]    [32768, 32769, -32769, -32770]  ["192.168.0.1", "127.0.0.1"]    
["a", "b", "c"] [-1, 0, 1, 2]   
[{"name":"Andy","age":18},{"name":"Tim","age":28}]      [1, 2, 3, 4]    [128, 
129, -129, -130]  ["d", "e", "f"] [0, 1, 2, 3]    
[{"last":"Smith","first":"John"},{"last":"White","first":"Alice"}]      debug   
\N      This string can be quite lengthy        string1 2022-08-08T20:10:10     
 [...]
+
+-- !sql_7_23 --
+[1, 0, 1, 1]   [1, -2, -3, 4]  ["2020-01-01", "2020-01-02"]    ["2020-01-01 
12:00:00", "2020-01-02 13:01:01"]  [1, 2, 3, 4]    [1, 1.1, 1.2, 1.3]      [1, 
2, 3, 4]    [32768, 32769, -32769, -32770]  ["192.168.0.1", "127.0.0.1"]    
["a", "b", "c"] [-1, 0, 1, 2]   
[{"name":"Andy","age":18},{"name":"Tim","age":28}]      [1, 2, 3, 4]    [128, 
129, -129, -130]  ["d", "e", "f"] [0, 1, 2, 3]    
[{"last":"Smith","first":"John"},{"last":"White","first":"Alice"}]      \N      
\N      \N      string4 2022-08-08T20:10:10     text3_4*5       6.0     
2022-08-08T00:00        20 [...]
+[1, 0, 1, 1]   [1, -2, -3, 4]  ["2020-01-01", "2020-01-02"]    ["2020-01-01 
12:00:00", "2020-01-02 13:01:01"]  [1, 2, 3, 4]    [1, 1.1, 1.2, 1.3]      [1, 
2, 3, 4]    [32768, 32769, -32769, -32770]  ["192.168.0.1", "127.0.0.1"]    
["a", "b", "c"] [-1, 0, 1, 2]   
[{"name":"Andy","age":18},{"name":"Tim","age":28}]      [1, 2, 3, 4]    [128, 
129, -129, -130]  ["d", "e", "f"] [0, 1, 2, 3]    
[{"last":"Smith","first":"John"},{"last":"White","first":"Alice"}]      \N      
        \N      string2 2022-08-08T12:10:10     text2   4.0     
2022-08-08T00:00        2022-08- [...]
+[1, 0, 1, 1]   [1, -2, -3, 4]  ["2020-01-01", "2020-01-02"]    ["2020-01-01 
12:00:00", "2020-01-02 13:01:01"]  [1, 2, 3, 4]    [1, 1.1, 1.2, 1.3]      [1, 
2, 3, 4]    [32768, 32769, -32769, -32770]  ["192.168.0.1", "127.0.0.1"]    
["a", "b", "c"] [-1, 0, 1, 2]   
[{"name":"Andy","age":18},{"name":"Tim","age":28}]      [1, 2, 3, 4]    [128, 
129, -129, -130]  ["d", "e", "f"] [0, 1, 2, 3]    
[{"last":"Smith","first":"John"},{"last":"White","first":"Alice"}]      \N      
I'm not null or empty   \N      string3 2022-08-09T00:40:10     text3_4*5       
5.0      [...]
+[1, 0, 1, 1]   [1, -2, -3, 4]  ["2020-01-01", "2020-01-02"]    ["2020-01-01 
12:00:00", "2020-01-02 13:01:01"]  [1, 2, 3, 4]    [1, 1.1, 1.2, 1.3]      [1, 
2, 3, 4]    [32768, 32769, -32769, -32770]  ["192.168.0.1", "127.0.0.1"]    
["a", "b", "c"] [-1, 0, 1, 2]   
[{"name":"Andy","age":18},{"name":"Tim","age":28}]      [1, 2, 3, 4]    [128, 
129, -129, -130]  ["d", "e", "f"] [0, 1, 2, 3]    
[{"last":"Smith","first":"John"},{"last":"White","first":"Alice"}]      debug   
\N      This string can be quite lengthy        string1 2022-08-08T20:10:10     
 [...]
+
+-- !sql_7_24 --
+[1, 0, 1, 1]   [1, -2, -3, 4]  ["2020-01-01", "2020-01-02"]    ["2020-01-01 
12:00:00", "2020-01-02 13:01:01"]  [1, 2, 3, 4]    [1, 1.1, 1.2, 1.3]      [1, 
2, 3, 4]    [32768, 32769, -32769, -32770]  ["192.168.0.1", "127.0.0.1"]    
["a", "b", "c"] [-1, 0, 1, 2]   
[{"name":"Andy","age":18},{"name":"Tim","age":28}]      [1, 2, 3, 4]    [128, 
129, -129, -130]  ["d", "e", "f"] [0, 1, 2, 3]    
[{"last":"Smith","first":"John"},{"last":"White","first":"Alice"}]      \N      
\N      \N      string4 2022-08-08T20:10:10     text3_4*5       6.0     
2022-08-08T00:00        20 [...]
+[1, 0, 1, 1]   [1, -2, -3, 4]  ["2020-01-01", "2020-01-02"]    ["2020-01-01 
12:00:00", "2020-01-02 13:01:01"]  [1, 2, 3, 4]    [1, 1.1, 1.2, 1.3]      [1, 
2, 3, 4]    [32768, 32769, -32769, -32770]  ["192.168.0.1", "127.0.0.1"]    
["a", "b", "c"] [-1, 0, 1, 2]   
[{"name":"Andy","age":18},{"name":"Tim","age":28}]      [1, 2, 3, 4]    [128, 
129, -129, -130]  ["d", "e", "f"] [0, 1, 2, 3]    
[{"last":"Smith","first":"John"},{"last":"White","first":"Alice"}]      \N      
        \N      string2 2022-08-08T12:10:10     text2   4.0     
2022-08-08T00:00        2022-08- [...]
+[1, 0, 1, 1]   [1, -2, -3, 4]  ["2020-01-01", "2020-01-02"]    ["2020-01-01 
12:00:00", "2020-01-02 13:01:01"]  [1, 2, 3, 4]    [1, 1.1, 1.2, 1.3]      [1, 
2, 3, 4]    [32768, 32769, -32769, -32770]  ["192.168.0.1", "127.0.0.1"]    
["a", "b", "c"] [-1, 0, 1, 2]   
[{"name":"Andy","age":18},{"name":"Tim","age":28}]      [1, 2, 3, 4]    [128, 
129, -129, -130]  ["d", "e", "f"] [0, 1, 2, 3]    
[{"last":"Smith","first":"John"},{"last":"White","first":"Alice"}]      \N      
I'm not null or empty   \N      string3 2022-08-09T00:40:10     text3_4*5       
5.0      [...]
+[1, 0, 1, 1]   [1, -2, -3, 4]  ["2020-01-01", "2020-01-02"]    ["2020-01-01 
12:00:00", "2020-01-02 13:01:01"]  [1, 2, 3, 4]    [1, 1.1, 1.2, 1.3]      [1, 
2, 3, 4]    [32768, 32769, -32769, -32770]  ["192.168.0.1", "127.0.0.1"]    
["a", "b", "c"] [-1, 0, 1, 2]   
[{"name":"Andy","age":18},{"name":"Tim","age":28}]      [1, 2, 3, 4]    [128, 
129, -129, -130]  ["d", "e", "f"] [0, 1, 2, 3]    
[{"last":"Smith","first":"John"},{"last":"White","first":"Alice"}]      debug   
\N      This string can be quite lengthy        string1 2022-08-08T20:10:10     
 [...]
+
+-- !sql_7_25 --
+[{"name":"Andy","age":18},{"name":"Tim","age":28}]     
[{"last":"Smith","first":"John"},{"last":"White","first":"Alice"}]      "Andy"  
"White"
+[{"name":"Andy","age":18},{"name":"Tim","age":28}]     
[{"last":"Smith","first":"John"},{"last":"White","first":"Alice"}]      "Andy"  
"White"
+[{"name":"Andy","age":18},{"name":"Tim","age":28}]     
[{"last":"Smith","first":"John"},{"last":"White","first":"Alice"}]      "Andy"  
"White"
+[{"name":"Andy","age":18},{"name":"Tim","age":28}]     
[{"last":"Smith","first":"John"},{"last":"White","first":"Alice"}]      "Andy"  
"White"
+
+-- !sql_7_26 --
+value1 value2
+
+-- !sql_8_01 --
+[1, 0, 1, 1]   [1, -2, -3, 4]  ["2020-01-01", "2020-01-02"]    ["2020-01-01 
12:00:00", "2020-01-02 13:01:01"]  [1, 2, 3, 4]    [1, 1.1, 1.2, 1.3]      [1, 
2, 3, 4]    [32768, 32769, -32769, -32770]  ["192.168.0.1", "127.0.0.1"]    
["a", "b", "c"] [-1, 0, 1, 2]   
[{"name":"Andy","age":18},{"name":"Tim","age":28}]      [1, 2, 3, 4]    [128, 
129, -129, -130]  ["d", "e", "f"] [0, 1, 2, 3]    
[{"last":"Smith","first":"John"},{"last":"White","first":"Alice"}]      debug   
\N      This string can be quite lengthy        string1 2022-08-08T20:10:10     
 [...]
+
+-- !sql_8_02 --
+[1, 0, 1, 1]   [1, -2, -3, 4]  ["2020-01-01", "2020-01-02"]    ["2020-01-01 
12:00:00", "2020-01-02 13:01:01"]  [1, 2, 3, 4]    [1, 1.1, 1.2, 1.3]      [1, 
2, 3, 4]    [32768, 32769, -32769, -32770]  ["192.168.0.1", "127.0.0.1"]    
["a", "b", "c"] [-1, 0, 1, 2]   
[{"name":"Andy","age":18},{"name":"Tim","age":28}]      [1, 2, 3, 4]    [128, 
129, -129, -130]  ["d", "e", "f"] [0, 1, 2, 3]    
[{"last":"Smith","first":"John"},{"last":"White","first":"Alice"}]      \N      
\N      \N      string4 2022-08-08T20:10:10     text3_4*5       6.0     
2022-08-08T00:00        20 [...]
+[1, 0, 1, 1]   [1, -2, -3, 4]  ["2020-01-01", "2020-01-02"]    ["2020-01-01 
12:00:00", "2020-01-02 13:01:01"]  [1, 2, 3, 4]    [1, 1.1, 1.2, 1.3]      [1, 
2, 3, 4]    [32768, 32769, -32769, -32770]  ["192.168.0.1", "127.0.0.1"]    
["a", "b", "c"] [-1, 0, 1, 2]   
[{"name":"Andy","age":18},{"name":"Tim","age":28}]      [1, 2, 3, 4]    [128, 
129, -129, -130]  ["d", "e", "f"] [0, 1, 2, 3]    
[{"last":"Smith","first":"John"},{"last":"White","first":"Alice"}]      \N      
        \N      string2 2022-08-08T12:10:10     text2   4.0     
2022-08-08T00:00        2022-08- [...]
+[1, 0, 1, 1]   [1, -2, -3, 4]  ["2020-01-01", "2020-01-02"]    ["2020-01-01 
12:00:00", "2020-01-02 13:01:01"]  [1, 2, 3, 4]    [1, 1.1, 1.2, 1.3]      [1, 
2, 3, 4]    [32768, 32769, -32769, -32770]  ["192.168.0.1", "127.0.0.1"]    
["a", "b", "c"] [-1, 0, 1, 2]   
[{"name":"Andy","age":18},{"name":"Tim","age":28}]      [1, 2, 3, 4]    [128, 
129, -129, -130]  ["d", "e", "f"] [0, 1, 2, 3]    
[{"last":"Smith","first":"John"},{"last":"White","first":"Alice"}]      \N      
I'm not null or empty   \N      string3 2022-08-09T00:40:10     text3_4*5       
5.0      [...]
+[1, 0, 1, 1]   [1, -2, -3, 4]  ["2020-01-01", "2020-01-02"]    ["2020-01-01 
12:00:00", "2020-01-02 13:01:01"]  [1, 2, 3, 4]    [1, 1.1, 1.2, 1.3]      [1, 
2, 3, 4]    [32768, 32769, -32769, -32770]  ["192.168.0.1", "127.0.0.1"]    
["a", "b", "c"] [-1, 0, 1, 2]   
[{"name":"Andy","age":18},{"name":"Tim","age":28}]      [1, 2, 3, 4]    [128, 
129, -129, -130]  ["d", "e", "f"] [0, 1, 2, 3]    
[{"last":"Smith","first":"John"},{"last":"White","first":"Alice"}]      debug   
\N      This string can be quite lengthy        string1 2022-08-08T20:10:10     
 [...]
+
+-- !sql_8_03 --
+true   1       128     32768   -1      0       1.0     1.0     1.0     1.0     
2020-01-01      2020-01-01T12:00        a       d       192.168.0.1     
{"name":"Andy","age":18}
+true   1       128     32768   -1      0       1.0     1.0     1.0     1.0     
2020-01-01      2020-01-01T12:00        a       d       192.168.0.1     
{"name":"Andy","age":18}
+true   1       128     32768   -1      0       1.0     1.0     1.0     1.0     
2020-01-01      2020-01-01T12:00        a       d       192.168.0.1     
{"name":"Andy","age":18}
+true   1       128     32768   -1      0       1.0     1.0     1.0     1.0     
2020-01-01      2020-01-01T12:00        a       d       192.168.0.1     
{"name":"Andy","age":18}
+
+-- !sql_8_04 --
+true   1       128     32768   -1      0       1.0     1.0     1.0     1.0     
2020-01-01      2020-01-01T12:00        a       d       192.168.0.1     
{"name":"Andy","age":18}
+true   1       128     32768   -1      0       1.0     1.0     1.0     1.0     
2020-01-01      2020-01-01T12:00        a       d       192.168.0.1     
{"name":"Andy","age":18}
+true   1       128     32768   -1      0       1.0     1.0     1.0     1.0     
2020-01-01      2020-01-01T12:00        a       d       192.168.0.1     
{"name":"Andy","age":18}
+true   1       128     32768   -1      0       1.0     1.0     1.0     1.0     
2020-01-01      2020-01-01T12:00        a       d       192.168.0.1     
{"name":"Andy","age":18}
+true   1       128     32768   -1      0       1.0     1.0     1.0     1.0     
2020-01-01      2020-01-01T12:00        a       d       192.168.0.1     
{"name":"Andy","age":18}
+true   1       128     32768   -1      0       1.0     1.0     1.0     1.0     
2020-01-01      2020-01-01T12:00        a       d       192.168.0.1     
{"name":"Andy","age":18}
+true   1       128     32768   -1      0       1.0     1.0     1.0     1.0     
2020-01-01      2020-01-01T12:00        a       d       192.168.0.1     
{"name":"Andy","age":18}
+true   1       128     32768   -1      0       1.0     1.0     1.0     1.0     
2020-01-01      2020-01-01T12:00        a       d       192.168.0.1     
{"name":"Andy","age":18}
+
+-- !sql_8_05 --
+[1, 0, 1, 1]   [1, -2, -3, 4]  ["2020-01-01", "2020-01-02"]    ["2020-01-01 
12:00:00", "2020-01-02 13:01:01"]  [1, 2, 3, 4]    [1, 1.1, 1.2, 1.3]      [1, 
2, 3, 4]    [32768, 32769, -32769, -32770]  ["192.168.0.1", "127.0.0.1"]    
["a", "b", "c"] [-1, 0, 1, 2]   
[{"name":"Andy","age":18},{"name":"Tim","age":28}]      [1, 2, 3, 4]    [128, 
129, -129, -130]  ["d", "e", "f"] [0, 1, 2, 3]    
[{"last":"Smith","first":"John"},{"last":"White","first":"Alice"}]      debug   
\N      This string can be quite lengthy        string1 2022-08-08T20:10:10     
 [...]
+
+-- !sql_8_06 --
+[1, 0, 1, 1]   [1, -2, -3, 4]  [128, 129, -129, -130]  [32768, 32769, -32769, 
-32770]  [-1, 0, 1, 2]   [0, 1, 2, 3]    [1, 1.1, 1.2, 1.3]      [1, 2, 3, 4]   
 [1, 2, 3, 4]    [1, 2, 3, 4]    ["2020-01-01", "2020-01-02"]    ["2020-01-01 
12:00:00", "2020-01-02 13:01:01"]  ["a", "b", "c"] ["d", "e", "f"] 
["192.168.0.1", "127.0.0.1"]    
[{"name":"Andy","age":18},{"name":"Tim","age":28}]
+[1, 0, 1, 1]   [1, -2, -3, 4]  [128, 129, -129, -130]  [32768, 32769, -32769, 
-32770]  [-1, 0, 1, 2]   [0, 1, 2, 3]    [1, 1.1, 1.2, 1.3]      [1, 2, 3, 4]   
 [1, 2, 3, 4]    [1, 2, 3, 4]    ["2020-01-01", "2020-01-02"]    ["2020-01-01 
12:00:00", "2020-01-02 13:01:01"]  ["a", "b", "c"] ["d", "e", "f"] 
["192.168.0.1", "127.0.0.1"]    
[{"name":"Andy","age":18},{"name":"Tim","age":28}]
+[1, 0, 1, 1]   [1, -2, -3, 4]  [128, 129, -129, -130]  [32768, 32769, -32769, 
-32770]  [-1, 0, 1, 2]   [0, 1, 2, 3]    [1, 1.1, 1.2, 1.3]      [1, 2, 3, 4]   
 [1, 2, 3, 4]    [1, 2, 3, 4]    ["2020-01-01", "2020-01-02"]    ["2020-01-01 
12:00:00", "2020-01-02 13:01:01"]  ["a", "b", "c"] ["d", "e", "f"] 
["192.168.0.1", "127.0.0.1"]    
[{"name":"Andy","age":18},{"name":"Tim","age":28}]
+[1, 0, 1, 1]   [1, -2, -3, 4]  [128, 129, -129, -130]  [32768, 32769, -32769, 
-32770]  [-1, 0, 1, 2]   [0, 1, 2, 3]    [1, 1.1, 1.2, 1.3]      [1, 2, 3, 4]   
 [1, 2, 3, 4]    [1, 2, 3, 4]    ["2020-01-01", "2020-01-02"]    ["2020-01-01 
12:00:00", "2020-01-02 13:01:01"]  ["a", "b", "c"] ["d", "e", "f"] 
["192.168.0.1", "127.0.0.1"]    
[{"name":"Andy","age":18},{"name":"Tim","age":28}]
+
+-- !sql_8_07 --
+[1, 0, 1, 1]   [1, -2, -3, 4]  [128, 129, -129, -130]  [32768, 32769, -32769, 
-32770]  [-1, 0, 1, 2]   [0, 1, 2, 3]    [1, 1.1, 1.2, 1.3]      [1, 2, 3, 4]   
 [1, 2, 3, 4]    [1, 2, 3, 4]    ["2020-01-01", "2020-01-02"]    ["2020-01-01 
12:00:00", "2020-01-02 13:01:01"]  ["a", "b", "c"] ["d", "e", "f"] 
["192.168.0.1", "127.0.0.1"]    
[{"name":"Andy","age":18},{"name":"Tim","age":28}]
+[1, 0, 1, 1]   [1, -2, -3, 4]  [128, 129, -129, -130]  [32768, 32769, -32769, 
-32770]  [-1, 0, 1, 2]   [0, 1, 2, 3]    [1, 1.1, 1.2, 1.3]      [1, 2, 3, 4]   
 [1, 2, 3, 4]    [1, 2, 3, 4]    ["2020-01-01", "2020-01-02"]    ["2020-01-01 
12:00:00", "2020-01-02 13:01:01"]  ["a", "b", "c"] ["d", "e", "f"] 
["192.168.0.1", "127.0.0.1"]    
[{"name":"Andy","age":18},{"name":"Tim","age":28}]
+[1, 0, 1, 1]   [1, -2, -3, 4]  [128, 129, -129, -130]  [32768, 32769, -32769, 
-32770]  [-1, 0, 1, 2]   [0, 1, 2, 3]    [1, 1.1, 1.2, 1.3]      [1, 2, 3, 4]   
 [1, 2, 3, 4]    [1, 2, 3, 4]    ["2020-01-01", "2020-01-02"]    ["2020-01-01 
12:00:00", "2020-01-02 13:01:01"]  ["a", "b", "c"] ["d", "e", "f"] 
["192.168.0.1", "127.0.0.1"]    
[{"name":"Andy","age":18},{"name":"Tim","age":28}]
+[1, 0, 1, 1]   [1, -2, -3, 4]  [128, 129, -129, -130]  [32768, 32769, -32769, 
-32770]  [-1, 0, 1, 2]   [0, 1, 2, 3]    [1, 1.1, 1.2, 1.3]      [1, 2, 3, 4]   
 [1, 2, 3, 4]    [1, 2, 3, 4]    ["2020-01-01", "2020-01-02"]    ["2020-01-01 
12:00:00", "2020-01-02 13:01:01"]  ["a", "b", "c"] ["d", "e", "f"] 
["192.168.0.1", "127.0.0.1"]    
[{"name":"Andy","age":18},{"name":"Tim","age":28}]
+[1, 0, 1, 1]   [1, -2, -3, 4]  [128, 129, -129, -130]  [32768, 32769, -32769, 
-32770]  [-1, 0, 1, 2]   [0, 1, 2, 3]    [1, 1.1, 1.2, 1.3]      [1, 2, 3, 4]   
 [1, 2, 3, 4]    [1, 2, 3, 4]    ["2020-01-01", "2020-01-02"]    ["2020-01-01 
12:00:00", "2020-01-02 13:01:01"]  ["a", "b", "c"] ["d", "e", "f"] 
["192.168.0.1", "127.0.0.1"]    
[{"name":"Andy","age":18},{"name":"Tim","age":28}]
+[1, 0, 1, 1]   [1, -2, -3, 4]  [128, 129, -129, -130]  [32768, 32769, -32769, 
-32770]  [-1, 0, 1, 2]   [0, 1, 2, 3]    [1, 1.1, 1.2, 1.3]      [1, 2, 3, 4]   
 [1, 2, 3, 4]    [1, 2, 3, 4]    ["2020-01-01", "2020-01-02"]    ["2020-01-01 
12:00:00", "2020-01-02 13:01:01"]  ["a", "b", "c"] ["d", "e", "f"] 
["192.168.0.1", "127.0.0.1"]    
[{"name":"Andy","age":18},{"name":"Tim","age":28}]
+[1, 0, 1, 1]   [1, -2, -3, 4]  [128, 129, -129, -130]  [32768, 32769, -32769, 
-32770]  [-1, 0, 1, 2]   [0, 1, 2, 3]    [1, 1.1, 1.2, 1.3]      [1, 2, 3, 4]   
 [1, 2, 3, 4]    [1, 2, 3, 4]    ["2020-01-01", "2020-01-02"]    ["2020-01-01 
12:00:00", "2020-01-02 13:01:01"]  ["a", "b", "c"] ["d", "e", "f"] 
["192.168.0.1", "127.0.0.1"]    
[{"name":"Andy","age":18},{"name":"Tim","age":28}]
+[1, 0, 1, 1]   [1, -2, -3, 4]  [128, 129, -129, -130]  [32768, 32769, -32769, 
-32770]  [-1, 0, 1, 2]   [0, 1, 2, 3]    [1, 1.1, 1.2, 1.3]      [1, 2, 3, 4]   
 [1, 2, 3, 4]    [1, 2, 3, 4]    ["2020-01-01", "2020-01-02"]    ["2020-01-01 
12:00:00", "2020-01-02 13:01:01"]  ["a", "b", "c"] ["d", "e", "f"] 
["192.168.0.1", "127.0.0.1"]    
[{"name":"Andy","age":18},{"name":"Tim","age":28}]
+
+-- !sql_8_08 --
+value1 value2
+
+-- !sql_8_09 --
+[1, 0, 1, 1]   [1, -2, -3, 4]  ["2020-01-01", "2020-01-02"]    ["2020-01-01 
12:00:00", "2020-01-02 13:01:01"]  [1, 2, 3, 4]    [1, 1.1, 1.2, 1.3]      [1, 
2, 3, 4]    [32768, 32769, -32769, -32770]  ["192.168.0.1", "127.0.0.1"]    
["a", "b", "c"] [-1, 0, 1, 2]   
[{"name":"Andy","age":18},{"name":"Tim","age":28}]      [1, 2, 3, 4]    [128, 
129, -129, -130]  ["d", "e", "f"] [0, 1, 2, 3]    
[{"last":"Smith","first":"John"},{"last":"White","first":"Alice"}]      debug   
\N      This string can be quite lengthy        string1 2022-08-08T20:10:10     
 [...]
+
+-- !sql_8_10 --
+[1, 0, 1, 1]   [1, -2, -3, 4]  ["2020-01-01", "2020-01-02"]    ["2020-01-01 
12:00:00", "2020-01-02 13:01:01"]  [1, 2, 3, 4]    [1, 1.1, 1.2, 1.3]      [1, 
2, 3, 4]    [32768, 32769, -32769, -32770]  ["192.168.0.1", "127.0.0.1"]    
["a", "b", "c"] [-1, 0, 1, 2]   
[{"name":"Andy","age":18},{"name":"Tim","age":28}]      [1, 2, 3, 4]    [128, 
129, -129, -130]  ["d", "e", "f"] [0, 1, 2, 3]    
[{"last":"Smith","first":"John"},{"last":"White","first":"Alice"}]      \N      
        \N      string2 2022-08-08T12:10:10     text2   4.0     
2022-08-08T00:00        2022-08- [...]
+
+-- !sql_8_11 --
+[1, 0, 1, 1]   [1, -2, -3, 4]  ["2020-01-01", "2020-01-02"]    ["2020-01-01 
12:00:00", "2020-01-02 13:01:01"]  [1, 2, 3, 4]    [1, 1.1, 1.2, 1.3]      [1, 
2, 3, 4]    [32768, 32769, -32769, -32770]  ["192.168.0.1", "127.0.0.1"]    
["a", "b", "c"] [-1, 0, 1, 2]   
[{"name":"Andy","age":18},{"name":"Tim","age":28}]      [1, 2, 3, 4]    [128, 
129, -129, -130]  ["d", "e", "f"] [0, 1, 2, 3]    
[{"last":"Smith","first":"John"},{"last":"White","first":"Alice"}]      \N      
I'm not null or empty   \N      string3 2022-08-09T00:40:10     text3_4*5       
5.0      [...]
+
+-- !sql_8_12 --
+[1, 0, 1, 1]   [1, -2, -3, 4]  ["2020-01-01", "2020-01-02"]    ["2020-01-01 
12:00:00", "2020-01-02 13:01:01"]  [1, 2, 3, 4]    [1, 1.1, 1.2, 1.3]      [1, 
2, 3, 4]    [32768, 32769, -32769, -32770]  ["192.168.0.1", "127.0.0.1"]    
["a", "b", "c"] [-1, 0, 1, 2]   
[{"name":"Andy","age":18},{"name":"Tim","age":28}]      [1, 2, 3, 4]    [128, 
129, -129, -130]  ["d", "e", "f"] [0, 1, 2, 3]    
[{"last":"Smith","first":"John"},{"last":"White","first":"Alice"}]      \N      
\N      \N      string4 2022-08-08T20:10:10     text3_4*5       6.0     
2022-08-08T00:00        20 [...]
+
+-- !sql_8_13 --
+2022-08-08T20:10:10
+
+-- !sql_8_14 --
+2022-08-08T12:10:10
+
+-- !sql_8_15 --
+2022-08-09T00:40:10
+
+-- !sql_8_16 --
+2022-08-08T20:10:10
+
+-- !sql_8_17 --
+I'm not null or empty
+
+-- !sql_8_18 --
+
+I'm not null or empty
+
+-- !sql_8_19 --
+I'm not null or empty
+
+-- !sql_8_20 --
+[1, 0, 1, 1]   [1, -2, -3, 4]  ["2020-01-01", "2020-01-02"]    ["2020-01-01 
12:00:00", "2020-01-02 13:01:01"]  [1, 2, 3, 4]    [1, 1.1, 1.2, 1.3]      [1, 
2, 3, 4]    [32768, 32769, -32769, -32770]  ["192.168.0.1", "127.0.0.1"]    
["a", "b", "c"] [-1, 0, 1, 2]   
[{"name":"Andy","age":18},{"name":"Tim","age":28}]      [1, 2, 3, 4]    [128, 
129, -129, -130]  ["d", "e", "f"] [0, 1, 2, 3]    
[{"last":"Smith","first":"John"},{"last":"White","first":"Alice"}]      debug   
\N      This string can be quite lengthy        string1 2022-08-08T20:10:10     
 [...]
+
+-- !sql_8_21 --
+[1, 0, 1, 1]   [1, -2, -3, 4]  ["2020-01-01", "2020-01-02"]    ["2020-01-01 
12:00:00", "2020-01-02 13:01:01"]  [1, 2, 3, 4]    [1, 1.1, 1.2, 1.3]      [1, 
2, 3, 4]    [32768, 32769, -32769, -32770]  ["192.168.0.1", "127.0.0.1"]    
["a", "b", "c"] [-1, 0, 1, 2]   
[{"name":"Andy","age":18},{"name":"Tim","age":28}]      [1, 2, 3, 4]    [128, 
129, -129, -130]  ["d", "e", "f"] [0, 1, 2, 3]    
[{"last":"Smith","first":"John"},{"last":"White","first":"Alice"}]      \N      
\N      \N      string4 2022-08-08T20:10:10     text3_4*5       6.0     
2022-08-08T00:00        20 [...]
+[1, 0, 1, 1]   [1, -2, -3, 4]  ["2020-01-01", "2020-01-02"]    ["2020-01-01 
12:00:00", "2020-01-02 13:01:01"]  [1, 2, 3, 4]    [1, 1.1, 1.2, 1.3]      [1, 
2, 3, 4]    [32768, 32769, -32769, -32770]  ["192.168.0.1", "127.0.0.1"]    
["a", "b", "c"] [-1, 0, 1, 2]   
[{"name":"Andy","age":18},{"name":"Tim","age":28}]      [1, 2, 3, 4]    [128, 
129, -129, -130]  ["d", "e", "f"] [0, 1, 2, 3]    
[{"last":"Smith","first":"John"},{"last":"White","first":"Alice"}]      \N      
        \N      string2 2022-08-08T12:10:10     text2   4.0     
2022-08-08T00:00        2022-08- [...]
+[1, 0, 1, 1]   [1, -2, -3, 4]  ["2020-01-01", "2020-01-02"]    ["2020-01-01 
12:00:00", "2020-01-02 13:01:01"]  [1, 2, 3, 4]    [1, 1.1, 1.2, 1.3]      [1, 
2, 3, 4]    [32768, 32769, -32769, -32770]  ["192.168.0.1", "127.0.0.1"]    
["a", "b", "c"] [-1, 0, 1, 2]   
[{"name":"Andy","age":18},{"name":"Tim","age":28}]      [1, 2, 3, 4]    [128, 
129, -129, -130]  ["d", "e", "f"] [0, 1, 2, 3]    
[{"last":"Smith","first":"John"},{"last":"White","first":"Alice"}]      \N      
I'm not null or empty   \N      string3 2022-08-09T00:40:10     text3_4*5       
5.0      [...]
+[1, 0, 1, 1]   [1, -2, -3, 4]  ["2020-01-01", "2020-01-02"]    ["2020-01-01 
12:00:00", "2020-01-02 13:01:01"]  [1, 2, 3, 4]    [1, 1.1, 1.2, 1.3]      [1, 
2, 3, 4]    [32768, 32769, -32769, -32770]  ["192.168.0.1", "127.0.0.1"]    
["a", "b", "c"] [-1, 0, 1, 2]   
[{"name":"Andy","age":18},{"name":"Tim","age":28}]      [1, 2, 3, 4]    [128, 
129, -129, -130]  ["d", "e", "f"] [0, 1, 2, 3]    
[{"last":"Smith","first":"John"},{"last":"White","first":"Alice"}]      debug   
\N      This string can be quite lengthy        string1 2022-08-08T20:10:10     
 [...]
+
+-- !sql_8_22 --
+[1, 0, 1, 1]   [1, -2, -3, 4]  ["2020-01-01", "2020-01-02"]    ["2020-01-01 
12:00:00", "2020-01-02 13:01:01"]  [1, 2, 3, 4]    [1, 1.1, 1.2, 1.3]      [1, 
2, 3, 4]    [32768, 32769, -32769, -32770]  ["192.168.0.1", "127.0.0.1"]    
["a", "b", "c"] [-1, 0, 1, 2]   
[{"name":"Andy","age":18},{"name":"Tim","age":28}]      [1, 2, 3, 4]    [128, 
129, -129, -130]  ["d", "e", "f"] [0, 1, 2, 3]    
[{"last":"Smith","first":"John"},{"last":"White","first":"Alice"}]      \N      
\N      \N      string4 2022-08-08T20:10:10     text3_4*5       6.0     
2022-08-08T00:00        20 [...]
+[1, 0, 1, 1]   [1, -2, -3, 4]  ["2020-01-01", "2020-01-02"]    ["2020-01-01 
12:00:00", "2020-01-02 13:01:01"]  [1, 2, 3, 4]    [1, 1.1, 1.2, 1.3]      [1, 
2, 3, 4]    [32768, 32769, -32769, -32770]  ["192.168.0.1", "127.0.0.1"]    
["a", "b", "c"] [-1, 0, 1, 2]   
[{"name":"Andy","age":18},{"name":"Tim","age":28}]      [1, 2, 3, 4]    [128, 
129, -129, -130]  ["d", "e", "f"] [0, 1, 2, 3]    
[{"last":"Smith","first":"John"},{"last":"White","first":"Alice"}]      \N      
        \N      string2 2022-08-08T12:10:10     text2   4.0     
2022-08-08T00:00        2022-08- [...]
+[1, 0, 1, 1]   [1, -2, -3, 4]  ["2020-01-01", "2020-01-02"]    ["2020-01-01 
12:00:00", "2020-01-02 13:01:01"]  [1, 2, 3, 4]    [1, 1.1, 1.2, 1.3]      [1, 
2, 3, 4]    [32768, 32769, -32769, -32770]  ["192.168.0.1", "127.0.0.1"]    
["a", "b", "c"] [-1, 0, 1, 2]   
[{"name":"Andy","age":18},{"name":"Tim","age":28}]      [1, 2, 3, 4]    [128, 
129, -129, -130]  ["d", "e", "f"] [0, 1, 2, 3]    
[{"last":"Smith","first":"John"},{"last":"White","first":"Alice"}]      \N      
I'm not null or empty   \N      string3 2022-08-09T00:40:10     text3_4*5       
5.0      [...]
+[1, 0, 1, 1]   [1, -2, -3, 4]  ["2020-01-01", "2020-01-02"]    ["2020-01-01 
12:00:00", "2020-01-02 13:01:01"]  [1, 2, 3, 4]    [1, 1.1, 1.2, 1.3]      [1, 
2, 3, 4]    [32768, 32769, -32769, -32770]  ["192.168.0.1", "127.0.0.1"]    
["a", "b", "c"] [-1, 0, 1, 2]   
[{"name":"Andy","age":18},{"name":"Tim","age":28}]      [1, 2, 3, 4]    [128, 
129, -129, -130]  ["d", "e", "f"] [0, 1, 2, 3]    
[{"last":"Smith","first":"John"},{"last":"White","first":"Alice"}]      debug   
\N      This string can be quite lengthy        string1 2022-08-08T20:10:10     
 [...]
+
+-- !sql_8_23 --
+[{"name":"Andy","age":18},{"name":"Tim","age":28}]     
[{"last":"Smith","first":"John"},{"last":"White","first":"Alice"}]      "Andy"  
"White"
+[{"name":"Andy","age":18},{"name":"Tim","age":28}]     
[{"last":"Smith","first":"John"},{"last":"White","first":"Alice"}]      "Andy"  
"White"
+[{"name":"Andy","age":18},{"name":"Tim","age":28}]     
[{"last":"Smith","first":"John"},{"last":"White","first":"Alice"}]      "Andy"  
"White"
+[{"name":"Andy","age":18},{"name":"Tim","age":28}]     
[{"last":"Smith","first":"John"},{"last":"White","first":"Alice"}]      "Andy"  
"White"
+
+-- !sql01 --
+["2020-01-01 12:00:00", "2020-01-02 13:01:01"] [-1, 0, 1, 2]   [0, 1, 2, 3]    
["d", "e", "f"] [128, 129, -129, -130]  ["192.168.0.1", "127.0.0.1"]    string1 
[1, 2, 3, 4]    2022-08-08      2022-08-08T12:10:10     text#1  ["2020-01-01", 
"2020-01-02"]    3.14    [1, 2, 3, 4]    [1, 1.1, 1.2, 1.3]      [1, 2, 3, 4]   
 ["a", "b", "c"] [{"name":"Andy","age":18},{"name":"Tim","age":28}]      
2022-08-08T12:10:10     2022-08-08T12:10:10     2022-08-08T20:10:10     [1, -2, 
-3, 4]  [1, 0, 1, 1]    [32768, 32769, -32769, -32770]  \N      
[{"last":"Smith","first [...]
+
+-- !sql02 --
+["2020-01-01 12:00:00", "2020-01-02 13:01:01"] [-1, 0, 1, 2]   [0, 1, 2, 3]    
["d", "e", "f"] [128, 129, -129, -130]  ["192.168.0.1", "127.0.0.1"]    string1 
[1, 2, 3, 4]    2022-08-08      2022-08-08T12:10:10     text#1  ["2020-01-01", 
"2020-01-02"]    3.14    [1, 2, 3, 4]    [1, 1.1, 1.2, 1.3]      [1, 2, 3, 4]   
 ["a", "b", "c"] [{"name":"Andy","age":18},{"name":"Tim","age":28}]      
2022-08-08T12:10:10     2022-08-08T12:10:10     2022-08-08T20:10:10     [1, -2, 
-3, 4]  [1, 0, 1, 1]    [32768, 32769, -32769, -32770]  \N      
[{"last":"Smith","first [...]
+
+-- !sql03 --
+2022-08-08     2022-08-08T12:10:10     2022-08-08T12:10:10     
2022-08-08T04:10:10     2022-08-08T20:10:10
+2022-08-08     2022-08-09T12:10:10     2022-08-09T12:10:10     
2022-08-09T12:10:10     2022-08-09T12:10:10
+2022-08-08     2022-08-10T12:10:10     2022-08-10T12:10:10     
2022-08-10T04:10:10     2022-08-10T20:10:10
+2022-08-08     2022-08-11T12:10:10     2022-08-11T12:10:10     
2022-08-11T12:10:10     2022-08-11T11:10:10
+
+-- !sql04 --
+I'm not null or empty
+
+-- !sql05 --
+
+I'm not null or empty
+
+-- !sql06 --
+\N
+\N
+
+I'm not null or empty
+
+-- !sql07 --
+["2020-01-01 12:00:00", "2020-01-02 13:01:01"] [-1, 0, 1, 2]   [0, 1, 2, 3]    
["d", "e", "f"] [128, 129, -129, -130]  ["192.168.0.1", "127.0.0.1"]    string1 
[1, 2, 3, 4]    2022-08-08      2022-08-08T12:10:10     text#1  ["2020-01-01", 
"2020-01-02"]    3.14    [1, 2, 3, 4]    [1, 1.1, 1.2, 1.3]      [1, 2, 3, 4]   
 ["a", "b", "c"] [{"name":"Andy","age":18},{"name":"Tim","age":28}]      
2022-08-08T12:10:10     2022-08-08T12:10:10     2022-08-08T20:10:10     [1, -2, 
-3, 4]  [1, 0, 1, 1]    [32768, 32769, -32769, -32770]  \N      
[{"last":"Smith","first [...]
+["2020-01-01 12:00:00", "2020-01-02 13:01:01"] [-1, 0, 1, 2]   [0, 1, 2, 3]    
["d", "e", "f"] [128, 129, -129, -130]  ["192.168.0.1", "127.0.0.1"]    string2 
[1, 2, 3, 4]    2022-08-08      2022-08-09T12:10:10     text2   ["2020-01-01", 
"2020-01-02"]    4.0     [1, 2, 3, 4]    [1, 1.1, 1.2, 1.3]      [1, 2, 3, 4]   
 ["a", "b", "c"] [{"name":"Andy","age":18},{"name":"Tim","age":28}]      
2022-08-09T12:10:10     2022-08-09T12:10:10     2022-08-09T12:10:10     [1, -2, 
-3, 4]  [1, 0, 1, 1]    [32768, 32769, -32769, -32770]          
[{"last":"Smith","first":"J [...]
+["2020-01-01 12:00:00", "2020-01-02 13:01:01"] [-1, 0, 1, 2]   [0, 1, 2, 3]    
["d", "e", "f"] [128, 129, -129, -130]  ["192.168.0.1", "127.0.0.1"]    string3 
[1, 2, 3, 4]    2022-08-08      2022-08-10T12:10:10     text3_4*5       
["2020-01-01", "2020-01-02"]    5.0     [1, 2, 3, 4]    [1, 1.1, 1.2, 1.3]      
[1, 2, 3, 4]    ["a", "b", "c"] 
[{"name":"Andy","age":18},{"name":"Tim","age":28}]      2022-08-10T12:10:10     
2022-08-10T12:10:10     2022-08-10T20:10:10     [1, -2, -3, 4]  [1, 0, 1, 1]    
[32768, 32769, -32769, -32770]  I'm not null or empty   [{ [...]
+["2020-01-01 12:00:00", "2020-01-02 13:01:01"] [-1, 0, 1, 2]   [0, 1, 2, 3]    
["d", "e", "f"] [128, 129, -129, -130]  ["192.168.0.1", "127.0.0.1"]    string4 
[1, 2, 3, 4]    2022-08-08      2022-08-11T12:10:10     text3_4*5       
["2020-01-01", "2020-01-02"]    6.0     [1, 2, 3, 4]    [1, 1.1, 1.2, 1.3]      
[1, 2, 3, 4]    ["a", "b", "c"] 
[{"name":"Andy","age":18},{"name":"Tim","age":28}]      2022-08-11T12:10:10     
2022-08-11T12:10:10     2022-08-11T11:10:10     [1, -2, -3, 4]  [1, 0, 1, 1]    
[32768, 32769, -32769, -32770]  \N      [{"last":"Smith","fir [...]
+
+-- !sql08 --
+[{"name":"Andy","age":18},{"name":"Tim","age":28}]     
[{"last":"Smith","first":"John"},{"last":"White","first":"Alice"}]      "Andy"  
"White"
+[{"name":"Andy","age":18},{"name":"Tim","age":28}]     
[{"last":"Smith","first":"John"},{"last":"White","first":"Alice"}]      "Andy"  
"White"
+[{"name":"Andy","age":18},{"name":"Tim","age":28}]     
[{"last":"Smith","first":"John"},{"last":"White","first":"Alice"}]      "Andy"  
"White"
+[{"name":"Andy","age":18},{"name":"Tim","age":28}]     
[{"last":"Smith","first":"John"},{"last":"White","first":"Alice"}]      "Andy"  
"White"
+
+-- !sql20 --
+["2020-01-01 12:00:00", "2020-01-02 13:01:01"] [-1, 0, 1, 2]   [0, 1, 2, 3]    
["d", "e", "f"] [128, 129, -129, -130]  ["192.168.0.1", "127.0.0.1"]    string1 
[1, 2, 3, 4]    2022-08-08      2022-08-08T12:10:10     text#1  ["2020-01-01", 
"2020-01-02"]    3.14    [1, 2, 3, 4]    [1, 1.1, 1.2, 1.3]      [1, 2, 3, 4]   
 ["a", "b", "c"] [{"name":"Andy","age":18},{"name":"Tim","age":28}]      
2022-08-08T12:10:10     2022-08-08T12:10:10     2022-08-08T20:10:10     [1, -2, 
-3, 4]  [1, 0, 1, 1]    [32768, 32769, -32769, -32770]  
[{"last":"Smith","first":" [...]
+
+-- !sql21 --
+["2020-01-01 12:00:00", "2020-01-02 13:01:01"] [-1, 0, 1, 2]   [0, 1, 2, 3]    
["d", "e", "f"] [128, 129, -129, -130]  ["192.168.0.1", "127.0.0.1"]    string1 
[1, 2, 3, 4]    2022-08-08      2022-08-08T12:10:10     text#1  ["2020-01-01", 
"2020-01-02"]    3.14    [1, 2, 3, 4]    [1, 1.1, 1.2, 1.3]      [1, 2, 3, 4]   
 ["a", "b", "c"] [{"name":"Andy","age":18},{"name":"Tim","age":28}]      
2022-08-08T12:10:10     2022-08-08T12:10:10     2022-08-08T20:10:10     [1, -2, 
-3, 4]  [1, 0, 1, 1]    [32768, 32769, -32769, -32770]  
[{"last":"Smith","first":" [...]
+
+-- !sql22 --
+2022-08-08     2022-08-08T12:10:10     2022-08-08T12:10:10     
2022-08-08T04:10:10     2022-08-08T20:10:10
+2022-08-08     2022-08-09T12:10:10     2022-08-09T12:10:10     
2022-08-09T12:10:10     2022-08-09T12:10:10
+2022-08-08     2022-08-10T12:10:10     2022-08-10T12:10:10     
2022-08-10T04:10:10     2022-08-10T20:10:10
+2022-08-08     2022-08-11T12:10:10     2022-08-11T12:10:10     
2022-08-11T12:10:10     2022-08-11T11:10:10
+
+-- !sql23 --
+["2020-01-01 12:00:00", "2020-01-02 13:01:01"] [-1, 0, 1, 2]   [0, 1, 2, 3]    
["d", "e", "f"] [128, 129, -129, -130]  ["192.168.0.1", "127.0.0.1"]    string1 
[1, 2, 3, 4]    2022-08-08      2022-08-08T12:10:10     text#1  ["2020-01-01", 
"2020-01-02"]    3.14    [1, 2, 3, 4]    [1, 1.1, 1.2, 1.3]      [1, 2, 3, 4]   
 ["a", "b", "c"] [{"name":"Andy","age":18},{"name":"Tim","age":28}]      
2022-08-08T12:10:10     2022-08-08T12:10:10     2022-08-08T20:10:10     [1, -2, 
-3, 4]  [1, 0, 1, 1]    [32768, 32769, -32769, -32770]  
[{"last":"Smith","first":" [...]
+["2020-01-01 12:00:00", "2020-01-02 13:01:01"] [-1, 0, 1, 2]   [0, 1, 2, 3]    
["d", "e", "f"] [128, 129, -129, -130]  ["192.168.0.1", "127.0.0.1"]    string2 
[1, 2, 3, 4]    2022-08-08      2022-08-09T12:10:10     text2   ["2020-01-01", 
"2020-01-02"]    4.0     [1, 2, 3, 4]    [1, 1.1, 1.2, 1.3]      [1, 2, 3, 4]   
 ["a", "b", "c"] [{"name":"Andy","age":18},{"name":"Tim","age":28}]      
2022-08-09T12:10:10     2022-08-09T12:10:10     2022-08-09T12:10:10     [1, -2, 
-3, 4]  [1, 0, 1, 1]    [32768, 32769, -32769, -32770]  
[{"last":"Smith","first":"Jo [...]
+["2020-01-01 12:00:00", "2020-01-02 13:01:01"] [-1, 0, 1, 2]   [0, 1, 2, 3]    
["d", "e", "f"] [128, 129, -129, -130]  ["192.168.0.1", "127.0.0.1"]    string3 
[1, 2, 3, 4]    2022-08-08      2022-08-10T12:10:10     text3_4*5       
["2020-01-01", "2020-01-02"]    5.0     [1, 2, 3, 4]    [1, 1.1, 1.2, 1.3]      
[1, 2, 3, 4]    ["a", "b", "c"] 
[{"name":"Andy","age":18},{"name":"Tim","age":28}]      2022-08-10T12:10:10     
2022-08-10T12:10:10     2022-08-10T20:10:10     [1, -2, -3, 4]  [1, 0, 1, 1]    
[32768, 32769, -32769, -32770]  [{"last":"Smith","first" [...]
+["2020-01-01 12:00:00", "2020-01-02 13:01:01"] [-1, 0, 1, 2]   [0, 1, 2, 3]    
["d", "e", "f"] [128, 129, -129, -130]  ["192.168.0.1", "127.0.0.1"]    string4 
[1, 2, 3, 4]    2022-08-08      2022-08-11T12:10:10     text3_4*5       
["2020-01-01", "2020-01-02"]    6.0     [1, 2, 3, 4]    [1, 1.1, 1.2, 1.3]      
[1, 2, 3, 4]    ["a", "b", "c"] 
[{"name":"Andy","age":18},{"name":"Tim","age":28}]      2022-08-11T12:10:10     
2022-08-11T12:10:10     2022-08-11T11:10:10     [1, -2, -3, 4]  [1, 0, 1, 1]    
[32768, 32769, -32769, -32770]  [{"last":"Smith","first" [...]
+
+-- !sql24 --
+[{"name":"Andy","age":18},{"name":"Tim","age":28}]     
[{"last":"Smith","first":"John"},{"last":"White","first":"Alice"}]      "Andy"  
"White"
+[{"name":"Andy","age":18},{"name":"Tim","age":28}]     
[{"last":"Smith","first":"John"},{"last":"White","first":"Alice"}]      "Andy"  
"White"
+[{"name":"Andy","age":18},{"name":"Tim","age":28}]     
[{"last":"Smith","first":"John"},{"last":"White","first":"Alice"}]      "Andy"  
"White"
+[{"name":"Andy","age":18},{"name":"Tim","age":28}]     
[{"last":"Smith","first":"John"},{"last":"White","first":"Alice"}]      "Andy"  
"White"
+
 -- !sql_5_02 --
 [1, 0, 1, 1]   [1, -2, -3, 4]  ["2020-01-01", "2020-01-02"]    ["2020-01-01 
12:00:00", "2020-01-02 13:01:01"]  [1, 2, 3, 4]    [1, 1.1, 1.2, 1.3]      [1, 
2, 3, 4]    [32768, 32769, -32769, -32770]  ["192.168.0.1", "127.0.0.1"]    
["a", "b", "c"] [-1, 0, 1, 2]   
[{"name":"Andy","age":18},{"name":"Tim","age":28}]      [1, 2, 3, 4]    [128, 
129, -129, -130]  ["d", "e", "f"] [0, 1, 2, 3]    
[{"last":"Smith","first":"John"},{"last":"White","first":"Alice"}]      \N      
string1 text#1  3.14    2022-08-08T00:00        12345   2022-08-08T20:10:10
 
@@ -227,6 +703,10 @@ true       1       128     32768   -1      0       1.0     
1.0     1.0     1.0     2020-01-01      2020-01-01T12:00        a       d       
192.168.0.
 true   1       128     32768   -1      0       1.0     1.0     1.0     1.0     
2020-01-01      2020-01-01T12:00        a       d       192.168.0.1     
{"name":"Andy","age":18}
 true   1       128     32768   -1      0       1.0     1.0     1.0     1.0     
2020-01-01      2020-01-01T12:00        a       d       192.168.0.1     
{"name":"Andy","age":18}
 true   1       128     32768   -1      0       1.0     1.0     1.0     1.0     
2020-01-01      2020-01-01T12:00        a       d       192.168.0.1     
{"name":"Andy","age":18}
+true   1       128     32768   -1      0       1.0     1.0     1.0     1.0     
2020-01-01      2020-01-01T12:00        a       d       192.168.0.1     
{"name":"Andy","age":18}
+true   1       128     32768   -1      0       1.0     1.0     1.0     1.0     
2020-01-01      2020-01-01T12:00        a       d       192.168.0.1     
{"name":"Andy","age":18}
+true   1       128     32768   -1      0       1.0     1.0     1.0     1.0     
2020-01-01      2020-01-01T12:00        a       d       192.168.0.1     
{"name":"Andy","age":18}
+true   1       128     32768   -1      0       1.0     1.0     1.0     1.0     
2020-01-01      2020-01-01T12:00        a       d       192.168.0.1     
{"name":"Andy","age":18}
 
 -- !sql_7_07 --
 [1, 0, 1, 1]   [1, -2, -3, 4]  ["2020-01-01", "2020-01-02"]    ["2020-01-01 
12:00:00", "2020-01-02 13:01:01"]  [1, 2, 3, 4]    [1, 1.1, 1.2, 1.3]      [1, 
2, 3, 4]    [32768, 32769, -32769, -32770]  ["192.168.0.1", "127.0.0.1"]    
["a", "b", "c"] [-1, 0, 1, 2]   
[{"name":"Andy","age":18},{"name":"Tim","age":28}]      [1, 2, 3, 4]    [128, 
129, -129, -130]  ["d", "e", "f"] [0, 1, 2, 3]    
[{"last":"Smith","first":"John"},{"last":"White","first":"Alice"}]      debug   
\N      This string can be quite lengthy        string1 2022-08-08T20:10:10     
 [...]
@@ -242,6 +722,10 @@ true       1       128     32768   -1      0       1.0     
1.0     1.0     1.0     2020-01-01      2020-01-01T12:00        a       d       
192.168.0.
 [1, 0, 1, 1]   [1, -2, -3, 4]  [128, 129, -129, -130]  [32768, 32769, -32769, 
-32770]  [-1, 0, 1, 2]   [0, 1, 2, 3]    [1, 1.1, 1.2, 1.3]      [1, 2, 3, 4]   
 [1, 2, 3, 4]    [1, 2, 3, 4]    ["2020-01-01", "2020-01-02"]    ["2020-01-01 
12:00:00", "2020-01-02 13:01:01"]  ["a", "b", "c"] ["d", "e", "f"] 
["192.168.0.1", "127.0.0.1"]    
[{"name":"Andy","age":18},{"name":"Tim","age":28}]
 [1, 0, 1, 1]   [1, -2, -3, 4]  [128, 129, -129, -130]  [32768, 32769, -32769, 
-32770]  [-1, 0, 1, 2]   [0, 1, 2, 3]    [1, 1.1, 1.2, 1.3]      [1, 2, 3, 4]   
 [1, 2, 3, 4]    [1, 2, 3, 4]    ["2020-01-01", "2020-01-02"]    ["2020-01-01 
12:00:00", "2020-01-02 13:01:01"]  ["a", "b", "c"] ["d", "e", "f"] 
["192.168.0.1", "127.0.0.1"]    
[{"name":"Andy","age":18},{"name":"Tim","age":28}]
 [1, 0, 1, 1]   [1, -2, -3, 4]  [128, 129, -129, -130]  [32768, 32769, -32769, 
-32770]  [-1, 0, 1, 2]   [0, 1, 2, 3]    [1, 1.1, 1.2, 1.3]      [1, 2, 3, 4]   
 [1, 2, 3, 4]    [1, 2, 3, 4]    ["2020-01-01", "2020-01-02"]    ["2020-01-01 
12:00:00", "2020-01-02 13:01:01"]  ["a", "b", "c"] ["d", "e", "f"] 
["192.168.0.1", "127.0.0.1"]    
[{"name":"Andy","age":18},{"name":"Tim","age":28}]
+[1, 0, 1, 1]   [1, -2, -3, 4]  [128, 129, -129, -130]  [32768, 32769, -32769, 
-32770]  [-1, 0, 1, 2]   [0, 1, 2, 3]    [1, 1.1, 1.2, 1.3]      [1, 2, 3, 4]   
 [1, 2, 3, 4]    [1, 2, 3, 4]    ["2020-01-01", "2020-01-02"]    ["2020-01-01 
12:00:00", "2020-01-02 13:01:01"]  ["a", "b", "c"] ["d", "e", "f"] 
["192.168.0.1", "127.0.0.1"]    
[{"name":"Andy","age":18},{"name":"Tim","age":28}]
+[1, 0, 1, 1]   [1, -2, -3, 4]  [128, 129, -129, -130]  [32768, 32769, -32769, 
-32770]  [-1, 0, 1, 2]   [0, 1, 2, 3]    [1, 1.1, 1.2, 1.3]      [1, 2, 3, 4]   
 [1, 2, 3, 4]    [1, 2, 3, 4]    ["2020-01-01", "2020-01-02"]    ["2020-01-01 
12:00:00", "2020-01-02 13:01:01"]  ["a", "b", "c"] ["d", "e", "f"] 
["192.168.0.1", "127.0.0.1"]    
[{"name":"Andy","age":18},{"name":"Tim","age":28}]
+[1, 0, 1, 1]   [1, -2, -3, 4]  [128, 129, -129, -130]  [32768, 32769, -32769, 
-32770]  [-1, 0, 1, 2]   [0, 1, 2, 3]    [1, 1.1, 1.2, 1.3]      [1, 2, 3, 4]   
 [1, 2, 3, 4]    [1, 2, 3, 4]    ["2020-01-01", "2020-01-02"]    ["2020-01-01 
12:00:00", "2020-01-02 13:01:01"]  ["a", "b", "c"] ["d", "e", "f"] 
["192.168.0.1", "127.0.0.1"]    
[{"name":"Andy","age":18},{"name":"Tim","age":28}]
+[1, 0, 1, 1]   [1, -2, -3, 4]  [128, 129, -129, -130]  [32768, 32769, -32769, 
-32770]  [-1, 0, 1, 2]   [0, 1, 2, 3]    [1, 1.1, 1.2, 1.3]      [1, 2, 3, 4]   
 [1, 2, 3, 4]    [1, 2, 3, 4]    ["2020-01-01", "2020-01-02"]    ["2020-01-01 
12:00:00", "2020-01-02 13:01:01"]  ["a", "b", "c"] ["d", "e", "f"] 
["192.168.0.1", "127.0.0.1"]    
[{"name":"Andy","age":18},{"name":"Tim","age":28}]
 
 -- !sql_7_10 --
 value1 value2
@@ -324,6 +808,10 @@ true       1       128     32768   -1      0       1.0     
1.0     1.0     1.0     2020-01-01      2020-01-01T12:00        a       d       
192.168.0.
 true   1       128     32768   -1      0       1.0     1.0     1.0     1.0     
2020-01-01      2020-01-01T12:00        a       d       192.168.0.1     
{"name":"Andy","age":18}
 true   1       128     32768   -1      0       1.0     1.0     1.0     1.0     
2020-01-01      2020-01-01T12:00        a       d       192.168.0.1     
{"name":"Andy","age":18}
 true   1       128     32768   -1      0       1.0     1.0     1.0     1.0     
2020-01-01      2020-01-01T12:00        a       d       192.168.0.1     
{"name":"Andy","age":18}
+true   1       128     32768   -1      0       1.0     1.0     1.0     1.0     
2020-01-01      2020-01-01T12:00        a       d       192.168.0.1     
{"name":"Andy","age":18}
+true   1       128     32768   -1      0       1.0     1.0     1.0     1.0     
2020-01-01      2020-01-01T12:00        a       d       192.168.0.1     
{"name":"Andy","age":18}
+true   1       128     32768   -1      0       1.0     1.0     1.0     1.0     
2020-01-01      2020-01-01T12:00        a       d       192.168.0.1     
{"name":"Andy","age":18}
+true   1       128     32768   -1      0       1.0     1.0     1.0     1.0     
2020-01-01      2020-01-01T12:00        a       d       192.168.0.1     
{"name":"Andy","age":18}
 
 -- !sql_8_05 --
 [1, 0, 1, 1]   [1, -2, -3, 4]  ["2020-01-01", "2020-01-02"]    ["2020-01-01 
12:00:00", "2020-01-02 13:01:01"]  [1, 2, 3, 4]    [1, 1.1, 1.2, 1.3]      [1, 
2, 3, 4]    [32768, 32769, -32769, -32770]  ["192.168.0.1", "127.0.0.1"]    
["a", "b", "c"] [-1, 0, 1, 2]   
[{"name":"Andy","age":18},{"name":"Tim","age":28}]      [1, 2, 3, 4]    [128, 
129, -129, -130]  ["d", "e", "f"] [0, 1, 2, 3]    
[{"last":"Smith","first":"John"},{"last":"White","first":"Alice"}]      debug   
\N      This string can be quite lengthy        string1 2022-08-08T20:10:10     
 [...]
@@ -339,6 +827,10 @@ true       1       128     32768   -1      0       1.0     
1.0     1.0     1.0     2020-01-01      2020-01-01T12:00        a       d       
192.168.0.
 [1, 0, 1, 1]   [1, -2, -3, 4]  [128, 129, -129, -130]  [32768, 32769, -32769, 
-32770]  [-1, 0, 1, 2]   [0, 1, 2, 3]    [1, 1.1, 1.2, 1.3]      [1, 2, 3, 4]   
 [1, 2, 3, 4]    [1, 2, 3, 4]    ["2020-01-01", "2020-01-02"]    ["2020-01-01 
12:00:00", "2020-01-02 13:01:01"]  ["a", "b", "c"] ["d", "e", "f"] 
["192.168.0.1", "127.0.0.1"]    
[{"name":"Andy","age":18},{"name":"Tim","age":28}]
 [1, 0, 1, 1]   [1, -2, -3, 4]  [128, 129, -129, -130]  [32768, 32769, -32769, 
-32770]  [-1, 0, 1, 2]   [0, 1, 2, 3]    [1, 1.1, 1.2, 1.3]      [1, 2, 3, 4]   
 [1, 2, 3, 4]    [1, 2, 3, 4]    ["2020-01-01", "2020-01-02"]    ["2020-01-01 
12:00:00", "2020-01-02 13:01:01"]  ["a", "b", "c"] ["d", "e", "f"] 
["192.168.0.1", "127.0.0.1"]    
[{"name":"Andy","age":18},{"name":"Tim","age":28}]
 [1, 0, 1, 1]   [1, -2, -3, 4]  [128, 129, -129, -130]  [32768, 32769, -32769, 
-32770]  [-1, 0, 1, 2]   [0, 1, 2, 3]    [1, 1.1, 1.2, 1.3]      [1, 2, 3, 4]   
 [1, 2, 3, 4]    [1, 2, 3, 4]    ["2020-01-01", "2020-01-02"]    ["2020-01-01 
12:00:00", "2020-01-02 13:01:01"]  ["a", "b", "c"] ["d", "e", "f"] 
["192.168.0.1", "127.0.0.1"]    
[{"name":"Andy","age":18},{"name":"Tim","age":28}]
+[1, 0, 1, 1]   [1, -2, -3, 4]  [128, 129, -129, -130]  [32768, 32769, -32769, 
-32770]  [-1, 0, 1, 2]   [0, 1, 2, 3]    [1, 1.1, 1.2, 1.3]      [1, 2, 3, 4]   
 [1, 2, 3, 4]    [1, 2, 3, 4]    ["2020-01-01", "2020-01-02"]    ["2020-01-01 
12:00:00", "2020-01-02 13:01:01"]  ["a", "b", "c"] ["d", "e", "f"] 
["192.168.0.1", "127.0.0.1"]    
[{"name":"Andy","age":18},{"name":"Tim","age":28}]
+[1, 0, 1, 1]   [1, -2, -3, 4]  [128, 129, -129, -130]  [32768, 32769, -32769, 
-32770]  [-1, 0, 1, 2]   [0, 1, 2, 3]    [1, 1.1, 1.2, 1.3]      [1, 2, 3, 4]   
 [1, 2, 3, 4]    [1, 2, 3, 4]    ["2020-01-01", "2020-01-02"]    ["2020-01-01 
12:00:00", "2020-01-02 13:01:01"]  ["a", "b", "c"] ["d", "e", "f"] 
["192.168.0.1", "127.0.0.1"]    
[{"name":"Andy","age":18},{"name":"Tim","age":28}]
+[1, 0, 1, 1]   [1, -2, -3, 4]  [128, 129, -129, -130]  [32768, 32769, -32769, 
-32770]  [-1, 0, 1, 2]   [0, 1, 2, 3]    [1, 1.1, 1.2, 1.3]      [1, 2, 3, 4]   
 [1, 2, 3, 4]    [1, 2, 3, 4]    ["2020-01-01", "2020-01-02"]    ["2020-01-01 
12:00:00", "2020-01-02 13:01:01"]  ["a", "b", "c"] ["d", "e", "f"] 
["192.168.0.1", "127.0.0.1"]    
[{"name":"Andy","age":18},{"name":"Tim","age":28}]
+[1, 0, 1, 1]   [1, -2, -3, 4]  [128, 129, -129, -130]  [32768, 32769, -32769, 
-32770]  [-1, 0, 1, 2]   [0, 1, 2, 3]    [1, 1.1, 1.2, 1.3]      [1, 2, 3, 4]   
 [1, 2, 3, 4]    [1, 2, 3, 4]    ["2020-01-01", "2020-01-02"]    ["2020-01-01 
12:00:00", "2020-01-02 13:01:01"]  ["a", "b", "c"] ["d", "e", "f"] 
["192.168.0.1", "127.0.0.1"]    
[{"name":"Andy","age":18},{"name":"Tim","age":28}]
 
 -- !sql_8_08 --
 value1 value2
diff --git a/regression-test/suites/external_table_p0/es/test_es_query.groovy 
b/regression-test/suites/external_table_p0/es/test_es_query.groovy
index 43e17b2b53b..0f9839aea21 100644
--- a/regression-test/suites/external_table_p0/es/test_es_query.groovy
+++ b/regression-test/suites/external_table_p0/es/test_es_query.groovy
@@ -176,139 +176,165 @@ suite("test_es_query", 
"p0,external,es,external_docker,external_docker_es") {
         order_qt_sql23 """select * from test_v2 where esquery(c_long, 
'{"term":{"c_long":"-1"}}');"""
         order_qt_sql24 """select c_person, c_user, json_extract(c_person, 
'\$.[0].name'), json_extract(c_user, '\$.[1].last') from test_v2;"""
 
-        sql """switch test_es_query_es5"""
-        order_qt_sql_5_02 """select * from test1 where test2='text#1'"""
-        order_qt_sql_5_03 """select * from test2_20220808 where test4 >= 
'2022-08-08 00:00:00' and test4 < '2022-08-08 23:59:59'"""
-        order_qt_sql_5_04 """select * from test2_20220808 where 
substring(test2, 2) = 'ext2'"""
-        order_qt_sql_5_05 """select c_bool[1], c_byte[1], c_short[1], 
c_integer[1], c_long[1], c_unsigned_long[1], c_float[1], c_half_float[1], 
c_double[1], c_scaled_float[1], c_date[1], c_datetime[1], c_keyword[1], 
c_text[1], c_ip[1], json_extract(c_person, '\$.[0]') from test1"""
-        order_qt_sql_5_06 """select c_bool[1], c_byte[1], c_short[1], 
c_integer[1], c_long[1], c_unsigned_long[1], c_float[1], c_half_float[1], 
c_double[1], c_scaled_float[1], c_date[1], c_datetime[1], c_keyword[1], 
c_text[1], c_ip[1], json_extract(c_person, '\$.[0]') from test2_20220808"""
-        order_qt_sql_5_07 """select * from test1 where esquery(test2, 
'{"match":{"test2":"text#1"}}')"""
-        order_qt_sql_5_08 """select c_bool, c_byte, c_short, c_integer, 
c_long, c_unsigned_long, c_float, c_half_float, c_double, c_scaled_float, 
c_date, c_datetime, c_keyword, c_text, c_ip, c_person from test1"""
-        order_qt_sql_5_09 """select c_bool, c_byte, c_short, c_integer, 
c_long, c_unsigned_long, c_float, c_half_float, c_double, c_scaled_float, 
c_date, c_datetime, c_keyword, c_text, c_ip, c_person from test2_20220808"""
-        order_qt_sql_5_10 """select * from test1 where test1='string1'"""
-        order_qt_sql_5_11 """select * from test1 where test1='string2'"""
-        order_qt_sql_5_12 """select * from test1 where test1='string3'"""
-        order_qt_sql_5_13 """select test6 from test1 where test1='string1'"""
-        order_qt_sql_5_14 """select test6 from test1 where test1='string2'"""
-        order_qt_sql_5_15 """select test6 from test1 where test1='string3'"""
-        order_qt_sql_5_16 """select message from test1 where message != ''"""
-        order_qt_sql_5_17 """select message from test1 where message is not 
null"""
-        order_qt_sql_5_18 """select message from test1 where 
not_null_or_empty(message)"""
-        order_qt_sql_5_19 """select * from test1 where 
esquery(c_unsigned_long, '{"match":{"c_unsigned_long":0}}')"""
-        order_qt_sql_5_20 """select c_person, c_user, json_extract(c_person, 
'\$.[0].name'), json_extract(c_user, '\$.[1].last') from test1;"""
+        def query_catalogs = { -> 
+            sql """switch internal"""
+            sql """use regression_test_external_table_p0_es"""
+            order_qt_sql01 """select * from test_v1 where test2='text#1'"""
+            order_qt_sql02 """select * from test_v1 where esquery(test2, 
'{"match":{"test2":"text#1"}}')"""
+            order_qt_sql03 """select test4,test5,test6,test7,test8 from 
test_v1 order by test8"""
+            order_qt_sql04 """select message from test_v1 where message != 
''"""
+            order_qt_sql05 """select message from test_v1 where message is not 
null"""
+            order_qt_sql06 """select message from test_v1 where 
not_null_or_empty(message)"""
+            order_qt_sql07 """select * from test_v1 where esquery(c_datetime, 
'{"term":{"c_datetime":"2020-01-01 12:00:00"}}');"""
+            order_qt_sql08 """select c_person, c_user, json_extract(c_person, 
'\$.[0].name'), json_extract(c_user, '\$.[1].last') from test_v1;"""
+            
+            order_qt_sql20 """select * from test_v2 where test2='text#1'"""
+            order_qt_sql21 """select * from test_v2 where esquery(test2, 
'{"match":{"test2":"text#1"}}')"""
+            order_qt_sql22 """select test4,test5,test6,test7,test8 from 
test_v2 order by test8"""
+            order_qt_sql23 """select * from test_v2 where esquery(c_long, 
'{"term":{"c_long":"-1"}}');"""
+            order_qt_sql24 """select c_person, c_user, json_extract(c_person, 
'\$.[0].name'), json_extract(c_user, '\$.[1].last') from test_v2;"""
 
-        sql """switch test_es_query_es6"""
-        // order_qt_sql_6_01 """show tables"""
-        order_qt_sql_6_02 """select * from test1 where test2='text#1'"""
-        order_qt_sql_6_03 """select * from test2_20220808 where test4 >= 
'2022-08-08 00:00:00' and test4 < '2022-08-08 23:59:59'"""
-        order_qt_sql_6_04 """select * from test2_20220808 where 
substring(test2, 2) = 'ext2'"""
-        order_qt_sql_6_05 """select c_bool[1], c_byte[1], c_short[1], 
c_integer[1], c_long[1], c_unsigned_long[1], c_float[1], c_half_float[1], 
c_double[1], c_scaled_float[1], c_date[1], c_datetime[1], c_keyword[1], 
c_text[1], c_ip[1], json_extract(c_person, '\$.[0]') from test1"""
-        order_qt_sql_6_06 """select c_bool[1], c_byte[1], c_short[1], 
c_integer[1], c_long[1], c_unsigned_long[1], c_float[1], c_half_float[1], 
c_double[1], c_scaled_float[1], c_date[1], c_datetime[1], c_keyword[1], 
c_text[1], c_ip[1], json_extract(c_person, '\$.[0]') from test2_20220808"""
-        order_qt_sql_6_07 """select * from test1 where esquery(test2, 
'{"match":{"test2":"text#1"}}')"""
-        order_qt_sql_6_08 """select c_bool, c_byte, c_short, c_integer, 
c_long, c_unsigned_long, c_float, c_half_float, c_double, c_scaled_float, 
c_date, c_datetime, c_keyword, c_text, c_ip, c_person from test1"""
-        order_qt_sql_6_09 """select c_bool, c_byte, c_short, c_integer, 
c_long, c_unsigned_long, c_float, c_half_float, c_double, c_scaled_float, 
c_date, c_datetime, c_keyword, c_text, c_ip, c_person from test2_20220808"""
-        order_qt_sql_6_10 """select * from test1 where test1='string1'"""
-        order_qt_sql_6_11 """select * from test1 where test1='string2'"""
-        order_qt_sql_6_12 """select * from test1 where test1='string3'"""
-        order_qt_sql_6_13 """select test6 from test1 where test1='string1'"""
-        order_qt_sql_6_14 """select test6 from test1 where test1='string2'"""
-        order_qt_sql_6_15 """select test6 from test1 where test1='string3'"""
-        order_qt_sql_6_16 """select message from test1 where message != ''"""
-        order_qt_sql_6_17 """select message from test1 where message is not 
null"""
-        order_qt_sql_6_18 """select message from test1 where 
not_null_or_empty(message)"""
-        order_qt_sql_6_19 """select * from test1 where esquery(c_person, 
'{"match":{"c_person.name":"Andy"}}')"""
-        order_qt_sql_6_20 """select c_person, c_user, json_extract(c_person, 
'\$.[0].name'), json_extract(c_user, '\$.[1].last') from test1;"""
+            sql """switch test_es_query_es5"""
+            order_qt_sql_5_02 """select * from test1 where test2='text#1'"""
+            order_qt_sql_5_03 """select * from test2_20220808 where test4 >= 
'2022-08-08 00:00:00' and test4 < '2022-08-08 23:59:59'"""
+            order_qt_sql_5_04 """select * from test2_20220808 where 
substring(test2, 2) = 'ext2'"""
+            order_qt_sql_5_05 """select c_bool[1], c_byte[1], c_short[1], 
c_integer[1], c_long[1], c_unsigned_long[1], c_float[1], c_half_float[1], 
c_double[1], c_scaled_float[1], c_date[1], c_datetime[1], c_keyword[1], 
c_text[1], c_ip[1], json_extract(c_person, '\$.[0]') from test1"""
+            order_qt_sql_5_06 """select c_bool[1], c_byte[1], c_short[1], 
c_integer[1], c_long[1], c_unsigned_long[1], c_float[1], c_half_float[1], 
c_double[1], c_scaled_float[1], c_date[1], c_datetime[1], c_keyword[1], 
c_text[1], c_ip[1], json_extract(c_person, '\$.[0]') from test2_20220808"""
+            order_qt_sql_5_07 """select * from test1 where esquery(test2, 
'{"match":{"test2":"text#1"}}')"""
+            order_qt_sql_5_08 """select c_bool, c_byte, c_short, c_integer, 
c_long, c_unsigned_long, c_float, c_half_float, c_double, c_scaled_float, 
c_date, c_datetime, c_keyword, c_text, c_ip, c_person from test1"""
+            order_qt_sql_5_09 """select c_bool, c_byte, c_short, c_integer, 
c_long, c_unsigned_long, c_float, c_half_float, c_double, c_scaled_float, 
c_date, c_datetime, c_keyword, c_text, c_ip, c_person from test2_20220808"""
+            order_qt_sql_5_10 """select * from test1 where test1='string1'"""
+            order_qt_sql_5_11 """select * from test1 where test1='string2'"""
+            order_qt_sql_5_12 """select * from test1 where test1='string3'"""
+            order_qt_sql_5_13 """select test6 from test1 where 
test1='string1'"""
+            order_qt_sql_5_14 """select test6 from test1 where 
test1='string2'"""
+            order_qt_sql_5_15 """select test6 from test1 where 
test1='string3'"""
+            order_qt_sql_5_16 """select message from test1 where message != 
''"""
+            order_qt_sql_5_17 """select message from test1 where message is 
not null"""
+            order_qt_sql_5_18 """select message from test1 where 
not_null_or_empty(message)"""
+            order_qt_sql_5_19 """select * from test1 where 
esquery(c_unsigned_long, '{"match":{"c_unsigned_long":0}}')"""
+            order_qt_sql_5_20 """select c_person, c_user, 
json_extract(c_person, '\$.[0].name'), json_extract(c_user, '\$.[1].last') from 
test1;"""
 
-        List<List<String>> tables6N = sql """show tables"""
-        boolean notContainHide = true
-        tables6N.forEach {
-            if (it[0] == ".hide"){
-                notContainHide = false
+            sql """switch test_es_query_es6"""
+            // order_qt_sql_6_01 """show tables"""
+            order_qt_sql_6_02 """select * from test1 where test2='text#1'"""
+            order_qt_sql_6_03 """select * from test2_20220808 where test4 >= 
'2022-08-08 00:00:00' and test4 < '2022-08-08 23:59:59'"""
+            order_qt_sql_6_04 """select * from test2_20220808 where 
substring(test2, 2) = 'ext2'"""
+            order_qt_sql_6_05 """select c_bool[1], c_byte[1], c_short[1], 
c_integer[1], c_long[1], c_unsigned_long[1], c_float[1], c_half_float[1], 
c_double[1], c_scaled_float[1], c_date[1], c_datetime[1], c_keyword[1], 
c_text[1], c_ip[1], json_extract(c_person, '\$.[0]') from test1"""
+            order_qt_sql_6_06 """select c_bool[1], c_byte[1], c_short[1], 
c_integer[1], c_long[1], c_unsigned_long[1], c_float[1], c_half_float[1], 
c_double[1], c_scaled_float[1], c_date[1], c_datetime[1], c_keyword[1], 
c_text[1], c_ip[1], json_extract(c_person, '\$.[0]') from test2_20220808"""
+            order_qt_sql_6_07 """select * from test1 where esquery(test2, 
'{"match":{"test2":"text#1"}}')"""
+            order_qt_sql_6_08 """select c_bool, c_byte, c_short, c_integer, 
c_long, c_unsigned_long, c_float, c_half_float, c_double, c_scaled_float, 
c_date, c_datetime, c_keyword, c_text, c_ip, c_person from test1"""
+            order_qt_sql_6_09 """select c_bool, c_byte, c_short, c_integer, 
c_long, c_unsigned_long, c_float, c_half_float, c_double, c_scaled_float, 
c_date, c_datetime, c_keyword, c_text, c_ip, c_person from test2_20220808"""
+            order_qt_sql_6_10 """select * from test1 where test1='string1'"""
+            order_qt_sql_6_11 """select * from test1 where test1='string2'"""
+            order_qt_sql_6_12 """select * from test1 where test1='string3'"""
+            order_qt_sql_6_13 """select test6 from test1 where 
test1='string1'"""
+            order_qt_sql_6_14 """select test6 from test1 where 
test1='string2'"""
+            order_qt_sql_6_15 """select test6 from test1 where 
test1='string3'"""
+            order_qt_sql_6_16 """select message from test1 where message != 
''"""
+            order_qt_sql_6_17 """select message from test1 where message is 
not null"""
+            order_qt_sql_6_18 """select message from test1 where 
not_null_or_empty(message)"""
+            order_qt_sql_6_19 """select * from test1 where esquery(c_person, 
'{"match":{"c_person.name":"Andy"}}')"""
+            order_qt_sql_6_20 """select c_person, c_user, 
json_extract(c_person, '\$.[0].name'), json_extract(c_user, '\$.[1].last') from 
test1;"""
+
+            List<List<String>> tables6N = sql """show tables"""
+            boolean notContainHide = true
+            tables6N.forEach {
+                if (it[0] == ".hide"){
+                    notContainHide = false
+                }
             }
-        }
-        assertTrue(notContainHide)
+            assertTrue(notContainHide)
 
-        sql """switch es6_hide"""
-        List<List<String>> tables6Y = sql """show tables"""
-        boolean containHide = false
-        tables6Y.forEach {
-            if (it[0] == ".hide"){
-                containHide = true
+            sql """switch es6_hide"""
+            List<List<String>> tables6Y = sql """show tables"""
+            boolean containHide = false
+            tables6Y.forEach {
+                if (it[0] == ".hide"){
+                    containHide = true
+                }
             }
-        }
-        assertTrue(containHide)
+            assertTrue(containHide)
 
-        sql """switch test_es_query_es7"""
-        // order_qt_sql_7_01 """show tables"""
-        order_qt_sql_7_02 """select * from test1 where test2='text#1'"""
-        order_qt_sql_7_03 """select * from test2_20220808 where test4 >= 
'2022-08-08 00:00:00' and test4 < '2022-08-08 23:59:59'"""
-        order_qt_sql_7_04 """select * from test2_20220808 where 
substring(test2, 2) = 'ext2'"""
-        order_qt_sql_7_05 """select c_bool[1], c_byte[1], c_short[1], 
c_integer[1], c_long[1], c_unsigned_long[1], c_float[1], c_half_float[1], 
c_double[1], c_scaled_float[1], c_date[1], c_datetime[1], c_keyword[1], 
c_text[1], c_ip[1], json_extract(c_person, '\$.[0]') from test1"""
-        order_qt_sql_7_06 """select c_bool[1], c_byte[1], c_short[1], 
c_integer[1], c_long[1], c_unsigned_long[1], c_float[1], c_half_float[1], 
c_double[1], c_scaled_float[1], c_date[1], c_datetime[1], c_keyword[1], 
c_text[1], c_ip[1], json_extract(c_person, '\$.[0]') from test2"""
-        order_qt_sql_7_07 """select * from test1 where esquery(test2, 
'{"match":{"test2":"text#1"}}')"""
-        order_qt_sql_7_08 """select c_bool, c_byte, c_short, c_integer, 
c_long, c_unsigned_long, c_float, c_half_float, c_double, c_scaled_float, 
c_date, c_datetime, c_keyword, c_text, c_ip, c_person from test1"""
-        order_qt_sql_7_09 """select c_bool, c_byte, c_short, c_integer, 
c_long, c_unsigned_long, c_float, c_half_float, c_double, c_scaled_float, 
c_date, c_datetime, c_keyword, c_text, c_ip, c_person from test2"""
-        order_qt_sql_7_10 """select * from test3_20231005"""
-        order_qt_sql_7_11 """select * from test1 where test1='string1'"""
-        order_qt_sql_7_12 """select * from test1 where test1='string2'"""
-        order_qt_sql_7_13 """select * from test1 where test1='string3'"""
-        order_qt_sql_7_14 """select * from test1 where test1='string4'"""
-        order_qt_sql_7_15 """select test10 from test1 where test1='string1'"""
-        order_qt_sql_7_16 """select test10 from test1 where test1='string2'"""
-        order_qt_sql_7_17 """select test10 from test1 where test1='string3'"""
-        order_qt_sql_7_18 """select test10 from test1 where test1='string4'"""
-        order_qt_sql_7_19 """select message from test1 where message != ''"""
-        order_qt_sql_7_20 """select message from test1 where message is not 
null"""
-        order_qt_sql_7_21 """select message from test1 where 
not_null_or_empty(message)"""
-        order_qt_sql_7_22 """select * from test1 where esquery(my_wildcard, '{ 
"wildcard": { "my_wildcard": { "value":"*quite*lengthy" } } }');"""
-        order_qt_sql_7_23 """select * from test1 where level = 'debug'"""
-        order_qt_sql_7_24 """select * from test1 where esquery(c_float, 
'{"match":{"c_float":1.1}}')"""
-        order_qt_sql_7_25 """select c_person, c_user, json_extract(c_person, 
'\$.[0].name'), json_extract(c_user, '\$.[1].last') from test1;"""
+            sql """switch test_es_query_es7"""
+            // order_qt_sql_7_01 """show tables"""
+            order_qt_sql_7_02 """select * from test1 where test2='text#1'"""
+            order_qt_sql_7_03 """select * from test2_20220808 where test4 >= 
'2022-08-08 00:00:00' and test4 < '2022-08-08 23:59:59'"""
+            order_qt_sql_7_04 """select * from test2_20220808 where 
substring(test2, 2) = 'ext2'"""
+            order_qt_sql_7_05 """select c_bool[1], c_byte[1], c_short[1], 
c_integer[1], c_long[1], c_unsigned_long[1], c_float[1], c_half_float[1], 
c_double[1], c_scaled_float[1], c_date[1], c_datetime[1], c_keyword[1], 
c_text[1], c_ip[1], json_extract(c_person, '\$.[0]') from test1"""
+            order_qt_sql_7_06 """select c_bool[1], c_byte[1], c_short[1], 
c_integer[1], c_long[1], c_unsigned_long[1], c_float[1], c_half_float[1], 
c_double[1], c_scaled_float[1], c_date[1], c_datetime[1], c_keyword[1], 
c_text[1], c_ip[1], json_extract(c_person, '\$.[0]') from test2"""
+            order_qt_sql_7_07 """select * from test1 where esquery(test2, 
'{"match":{"test2":"text#1"}}')"""
+            order_qt_sql_7_08 """select c_bool, c_byte, c_short, c_integer, 
c_long, c_unsigned_long, c_float, c_half_float, c_double, c_scaled_float, 
c_date, c_datetime, c_keyword, c_text, c_ip, c_person from test1"""
+            order_qt_sql_7_09 """select c_bool, c_byte, c_short, c_integer, 
c_long, c_unsigned_long, c_float, c_half_float, c_double, c_scaled_float, 
c_date, c_datetime, c_keyword, c_text, c_ip, c_person from test2"""
+            order_qt_sql_7_10 """select * from test3_20231005"""
+            order_qt_sql_7_11 """select * from test1 where test1='string1'"""
+            order_qt_sql_7_12 """select * from test1 where test1='string2'"""
+            order_qt_sql_7_13 """select * from test1 where test1='string3'"""
+            order_qt_sql_7_14 """select * from test1 where test1='string4'"""
+            order_qt_sql_7_15 """select test10 from test1 where 
test1='string1'"""
+            order_qt_sql_7_16 """select test10 from test1 where 
test1='string2'"""
+            order_qt_sql_7_17 """select test10 from test1 where 
test1='string3'"""
+            order_qt_sql_7_18 """select test10 from test1 where 
test1='string4'"""
+            order_qt_sql_7_19 """select message from test1 where message != 
''"""
+            order_qt_sql_7_20 """select message from test1 where message is 
not null"""
+            order_qt_sql_7_21 """select message from test1 where 
not_null_or_empty(message)"""
+            order_qt_sql_7_22 """select * from test1 where 
esquery(my_wildcard, '{ "wildcard": { "my_wildcard": { "value":"*quite*lengthy" 
} } }');"""
+            order_qt_sql_7_23 """select * from test1 where level = 'debug'"""
+            order_qt_sql_7_24 """select * from test1 where esquery(c_float, 
'{"match":{"c_float":1.1}}')"""
+            order_qt_sql_7_25 """select c_person, c_user, 
json_extract(c_person, '\$.[0].name'), json_extract(c_user, '\$.[1].last') from 
test1;"""
 
-        List<List<String>> tables7N = sql """show tables"""
-        boolean notContainHide7 = true
-        tables7N.forEach {
-            if (it[0] == ".hide"){
-                notContainHide7 = false
+            List<List<String>> tables7N = sql """show tables"""
+            boolean notContainHide7 = true
+            tables7N.forEach {
+                if (it[0] == ".hide"){
+                    notContainHide7 = false
+                }
             }
-        }
-        assertTrue(notContainHide7)
+            assertTrue(notContainHide7)
 
-        sql """switch es7_hide"""
-        List<List<String>> tables7Y = sql """show tables"""
-        boolean containeHide7 = false
-        tables7Y.forEach {
-            if (it[0] == (".hide")){
-                containeHide7 = true
+            sql """switch es7_hide"""
+            List<List<String>> tables7Y = sql """show tables"""
+            boolean containeHide7 = false
+            tables7Y.forEach {
+                if (it[0] == (".hide")){
+                    containeHide7 = true
+                }
             }
+            assertTrue(containeHide7)
+
+            order_qt_sql_7_26 """select * from test3_20231005"""
+
+            sql """switch test_es_query_es8"""
+            order_qt_sql_8_01 """select * from test1 where test2='text#1'"""
+            order_qt_sql_8_02 """select * from test2_20220808 where test4 >= 
'2022-08-08 00:00:00' and test4 < '2022-08-08 23:59:59'"""
+            order_qt_sql_8_03 """select c_bool[1], c_byte[1], c_short[1], 
c_integer[1], c_long[1], c_unsigned_long[1], c_float[1], c_half_float[1], 
c_double[1], c_scaled_float[1], c_date[1], c_datetime[1], c_keyword[1], 
c_text[1], c_ip[1], json_extract(c_person, '\$.[0]') from test1"""
+            order_qt_sql_8_04 """select c_bool[1], c_byte[1], c_short[1], 
c_integer[1], c_long[1], c_unsigned_long[1], c_float[1], c_half_float[1], 
c_double[1], c_scaled_float[1], c_date[1], c_datetime[1], c_keyword[1], 
c_text[1], c_ip[1], json_extract(c_person, '\$.[0]') from test2"""
+            order_qt_sql_8_05 """select * from test1 where esquery(test2, 
'{"match":{"test2":"text#1"}}')"""
+            order_qt_sql_8_06 """select c_bool, c_byte, c_short, c_integer, 
c_long, c_unsigned_long, c_float, c_half_float, c_double, c_scaled_float, 
c_date, c_datetime, c_keyword, c_text, c_ip, c_person from test1"""
+            order_qt_sql_8_07 """select c_bool, c_byte, c_short, c_integer, 
c_long, c_unsigned_long, c_float, c_half_float, c_double, c_scaled_float, 
c_date, c_datetime, c_keyword, c_text, c_ip, c_person from test2"""
+            order_qt_sql_8_08 """select * from test3_20231005"""
+            order_qt_sql_8_09 """select * from test1 where test1='string1'"""
+            order_qt_sql_8_10 """select * from test1 where test1='string2'"""
+            order_qt_sql_8_11 """select * from test1 where test1='string3'"""
+            order_qt_sql_8_12 """select * from test1 where test1='string4'"""
+            order_qt_sql_8_13 """select test10 from test1 where 
test1='string1'"""
+            order_qt_sql_8_14 """select test10 from test1 where 
test1='string2'"""
+            order_qt_sql_8_15 """select test10 from test1 where 
test1='string3'"""
+            order_qt_sql_8_16 """select test10 from test1 where 
test1='string4'"""
+            order_qt_sql_8_17 """select message from test1 where message != 
''"""
+            order_qt_sql_8_18 """select message from test1 where message is 
not null"""
+            order_qt_sql_8_19 """select message from test1 where 
not_null_or_empty(message)"""
+            order_qt_sql_8_20 """select * from test1 where 
esquery(my_wildcard, '{ "wildcard": { "my_wildcard": { "value":"*quite*lengthy" 
} } }');"""
+            order_qt_sql_8_21 """select * from test1 where level = 'debug'"""
+            order_qt_sql_8_22 """select * from test1 where esquery(c_ip, 
'{"match":{"c_ip":"192.168.0.1"}}')"""
+            order_qt_sql_8_23 """select c_person, c_user, 
json_extract(c_person, '\$.[0].name'), json_extract(c_user, '\$.[1].last') from 
test1;"""
+        
         }
-        assertTrue(containeHide7)
 
-        order_qt_sql_7_26 """select * from test3_20231005"""
+        sql """set enable_es_parallel_scroll=true"""
+        query_catalogs()
 
-        sql """switch test_es_query_es8"""
-        order_qt_sql_8_01 """select * from test1 where test2='text#1'"""
-        order_qt_sql_8_02 """select * from test2_20220808 where test4 >= 
'2022-08-08 00:00:00' and test4 < '2022-08-08 23:59:59'"""
-        order_qt_sql_8_03 """select c_bool[1], c_byte[1], c_short[1], 
c_integer[1], c_long[1], c_unsigned_long[1], c_float[1], c_half_float[1], 
c_double[1], c_scaled_float[1], c_date[1], c_datetime[1], c_keyword[1], 
c_text[1], c_ip[1], json_extract(c_person, '\$.[0]') from test1"""
-        order_qt_sql_8_04 """select c_bool[1], c_byte[1], c_short[1], 
c_integer[1], c_long[1], c_unsigned_long[1], c_float[1], c_half_float[1], 
c_double[1], c_scaled_float[1], c_date[1], c_datetime[1], c_keyword[1], 
c_text[1], c_ip[1], json_extract(c_person, '\$.[0]') from test2"""
-        order_qt_sql_8_05 """select * from test1 where esquery(test2, 
'{"match":{"test2":"text#1"}}')"""
-        order_qt_sql_8_06 """select c_bool, c_byte, c_short, c_integer, 
c_long, c_unsigned_long, c_float, c_half_float, c_double, c_scaled_float, 
c_date, c_datetime, c_keyword, c_text, c_ip, c_person from test1"""
-        order_qt_sql_8_07 """select c_bool, c_byte, c_short, c_integer, 
c_long, c_unsigned_long, c_float, c_half_float, c_double, c_scaled_float, 
c_date, c_datetime, c_keyword, c_text, c_ip, c_person from test2"""
-        order_qt_sql_8_08 """select * from test3_20231005"""
-        order_qt_sql_8_09 """select * from test1 where test1='string1'"""
-        order_qt_sql_8_10 """select * from test1 where test1='string2'"""
-        order_qt_sql_8_11 """select * from test1 where test1='string3'"""
-        order_qt_sql_8_12 """select * from test1 where test1='string4'"""
-        order_qt_sql_8_13 """select test10 from test1 where test1='string1'"""
-        order_qt_sql_8_14 """select test10 from test1 where test1='string2'"""
-        order_qt_sql_8_15 """select test10 from test1 where test1='string3'"""
-        order_qt_sql_8_16 """select test10 from test1 where test1='string4'"""
-        order_qt_sql_8_17 """select message from test1 where message != ''"""
-        order_qt_sql_8_18 """select message from test1 where message is not 
null"""
-        order_qt_sql_8_19 """select message from test1 where 
not_null_or_empty(message)"""
-        order_qt_sql_8_20 """select * from test1 where esquery(my_wildcard, '{ 
"wildcard": { "my_wildcard": { "value":"*quite*lengthy" } } }');"""
-        order_qt_sql_8_21 """select * from test1 where level = 'debug'"""
-        order_qt_sql_8_22 """select * from test1 where esquery(c_ip, 
'{"match":{"c_ip":"192.168.0.1"}}')"""
-        order_qt_sql_8_23 """select c_person, c_user, json_extract(c_person, 
'\$.[0].name'), json_extract(c_user, '\$.[1].last') from test1;"""
+        sql """set enable_es_parallel_scroll=false"""
+        query_catalogs()
     }
 }


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

Reply via email to