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 2c4e52e44ee [fix](es catalog) only es_query function can push down to 
ES (#29320)
2c4e52e44ee is described below

commit 2c4e52e44eee8327ba7a575824a8b6f28c143f1e
Author: qiye <jianliang5...@gmail.com>
AuthorDate: Sat Dec 30 09:33:26 2023 +0800

    [fix](es catalog) only es_query function can push down to ES (#29320)
    
    Issue Number: close #29318
    1. Only push down `es_query` function to ES
    2. Add null check where ES query result not have `_source` or `fields` 
fields.
---
 be/src/exec/es/es_scroll_parser.cpp                |  27 +++--
 .../elasticsearch/scripts/data/data2.json          |   3 +-
 .../elasticsearch/scripts/data/data2_es6.json      |   3 +-
 .../elasticsearch/scripts/data/data3.json          |   3 +-
 .../elasticsearch/scripts/data/data3_es6.json      |   3 +-
 .../elasticsearch/scripts/index/es6_test1.json     |   9 ++
 .../elasticsearch/scripts/index/es7_test1.json     |   9 ++
 .../external/elasticsearch/QueryBuilders.java      |  16 +--
 .../data/external_table_p0/es/test_es_query.out    | 118 +++++++++++++++------
 .../es/test_es_query_no_http_url.out               |   6 +-
 .../external_table_p0/es/test_es_query.groovy      |  22 +++-
 11 files changed, 157 insertions(+), 62 deletions(-)

diff --git a/be/src/exec/es/es_scroll_parser.cpp 
b/be/src/exec/es/es_scroll_parser.cpp
index 726e86ea74f..a1c3c9f0d5e 100644
--- a/be/src/exec/es/es_scroll_parser.cpp
+++ b/be/src/exec/es/es_scroll_parser.cpp
@@ -471,7 +471,13 @@ Status ScrollParser::fill_columns(const TupleDescriptor* 
tuple_desc,
     if (obj.HasMember("fields")) {
         pure_doc_value = true;
     }
-    const rapidjson::Value& line = obj.HasMember(FIELD_SOURCE) ? 
obj[FIELD_SOURCE] : obj["fields"];
+    // obj may be neither have `_source` nor `fields` field.
+    const rapidjson::Value* line = nullptr;
+    if (obj.HasMember(FIELD_SOURCE)) {
+        line = &obj[FIELD_SOURCE];
+    } else if (obj.HasMember("fields")) {
+        line = &obj["fields"];
+    }
 
     for (int i = 0; i < tuple_desc->slots().size(); ++i) {
         const SlotDescriptor* slot_desc = tuple_desc->slots()[i];
@@ -496,17 +502,18 @@ Status ScrollParser::fill_columns(const TupleDescriptor* 
tuple_desc,
         const char* col_name = pure_doc_value ? 
docvalue_context.at(slot_desc->col_name()).c_str()
                                               : slot_desc->col_name().c_str();
 
-        rapidjson::Value::ConstMemberIterator itr = line.FindMember(col_name);
-        if (itr == line.MemberEnd() && slot_desc->is_nullable()) {
-            auto nullable_column = 
reinterpret_cast<vectorized::ColumnNullable*>(col_ptr);
-            nullable_column->insert_data(nullptr, 0);
-            continue;
-        } else if (itr == line.MemberEnd() && !slot_desc->is_nullable()) {
-            std::string details = strings::Substitute(INVALID_NULL_VALUE, 
col_name);
-            return Status::RuntimeError(details);
+        if (line == nullptr || line->FindMember(col_name) == 
line->MemberEnd()) {
+            if (slot_desc->is_nullable()) {
+                auto* nullable_column = 
reinterpret_cast<vectorized::ColumnNullable*>(col_ptr);
+                nullable_column->insert_data(nullptr, 0);
+                continue;
+            } else {
+                std::string details = strings::Substitute(INVALID_NULL_VALUE, 
col_name);
+                return Status::RuntimeError(details);
+            }
         }
 
-        const rapidjson::Value& col = line[col_name];
+        const rapidjson::Value& col = (*line)[col_name];
 
         PrimitiveType type = slot_desc->type().type;
 
diff --git 
a/docker/thirdparties/docker-compose/elasticsearch/scripts/data/data2.json 
b/docker/thirdparties/docker-compose/elasticsearch/scripts/data/data2.json
index 5ca56093bd3..792200fcdec 100755
--- a/docker/thirdparties/docker-compose/elasticsearch/scripts/data/data2.json
+++ b/docker/thirdparties/docker-compose/elasticsearch/scripts/data/data2.json
@@ -27,5 +27,6 @@
   "c_person": [
     {"name": "Andy", "age": 18},
     {"name": "Tim", "age": 28}
-  ]
+  ],
+  "message": ""
 }
diff --git 
a/docker/thirdparties/docker-compose/elasticsearch/scripts/data/data2_es6.json 
b/docker/thirdparties/docker-compose/elasticsearch/scripts/data/data2_es6.json
index ba1f8a5f5c9..12d42f775fd 100755
--- 
a/docker/thirdparties/docker-compose/elasticsearch/scripts/data/data2_es6.json
+++ 
b/docker/thirdparties/docker-compose/elasticsearch/scripts/data/data2_es6.json
@@ -23,5 +23,6 @@
   "c_person": [
     {"name": "Andy", "age": 18},
     {"name": "Tim", "age": 28}
-  ]
+  ],
+  "message": ""
 }
diff --git 
a/docker/thirdparties/docker-compose/elasticsearch/scripts/data/data3.json 
b/docker/thirdparties/docker-compose/elasticsearch/scripts/data/data3.json
index 81f7dc749e3..c3878f30732 100755
--- a/docker/thirdparties/docker-compose/elasticsearch/scripts/data/data3.json
+++ b/docker/thirdparties/docker-compose/elasticsearch/scripts/data/data3.json
@@ -27,5 +27,6 @@
   "c_person": [
     {"name": "Andy", "age": 18},
     {"name": "Tim", "age": 28}
-  ]
+  ],
+  "message": "I'm not null or empty"
 }
diff --git 
a/docker/thirdparties/docker-compose/elasticsearch/scripts/data/data3_es6.json 
b/docker/thirdparties/docker-compose/elasticsearch/scripts/data/data3_es6.json
index cfc3d69dfc2..f360b15ecec 100755
--- 
a/docker/thirdparties/docker-compose/elasticsearch/scripts/data/data3_es6.json
+++ 
b/docker/thirdparties/docker-compose/elasticsearch/scripts/data/data3_es6.json
@@ -23,5 +23,6 @@
   "c_person": [
     {"name": "Andy", "age": 18},
     {"name": "Tim", "age": 28}
-  ]
+  ],
+  "message": "I'm not null or empty"
 }
diff --git 
a/docker/thirdparties/docker-compose/elasticsearch/scripts/index/es6_test1.json 
b/docker/thirdparties/docker-compose/elasticsearch/scripts/index/es6_test1.json
index a8612e668c3..97c5f537c5b 100755
--- 
a/docker/thirdparties/docker-compose/elasticsearch/scripts/index/es6_test1.json
+++ 
b/docker/thirdparties/docker-compose/elasticsearch/scripts/index/es6_test1.json
@@ -87,6 +87,15 @@
               "type": "integer"
             }
           }
+        },
+        "message": {
+          "type": "text",
+          "fields": {
+            "keyword": {
+              "type": "keyword",
+              "ignore_above": 256
+            }
+          }
         }
       }
     }
diff --git 
a/docker/thirdparties/docker-compose/elasticsearch/scripts/index/es7_test1.json 
b/docker/thirdparties/docker-compose/elasticsearch/scripts/index/es7_test1.json
index 69247490caa..604de9964ea 100755
--- 
a/docker/thirdparties/docker-compose/elasticsearch/scripts/index/es7_test1.json
+++ 
b/docker/thirdparties/docker-compose/elasticsearch/scripts/index/es7_test1.json
@@ -101,6 +101,15 @@
             "type": "integer"
           }
         }
+      },
+      "message": {
+        "type": "text",
+        "fields": {
+          "keyword": {
+            "type": "keyword",
+            "ignore_above": 256
+          }
+        }
       }
     }
   }
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/external/elasticsearch/QueryBuilders.java
 
b/fe/fe-core/src/main/java/org/apache/doris/external/elasticsearch/QueryBuilders.java
index 8dc8d4abea9..350fd3857ea 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/external/elasticsearch/QueryBuilders.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/external/elasticsearch/QueryBuilders.java
@@ -209,11 +209,8 @@ public final class QueryBuilders {
         //    }');
         // The first child k1 compatible with expr syntax
         FunctionCallExpr functionCallExpr = (FunctionCallExpr) expr;
-        if ("esquery".equals(functionCallExpr.getFnName().getFunction())) {
-            String stringValue = functionCallExpr.getChild(1).getStringValue();
-            return new QueryBuilders.EsQueryBuilder(stringValue);
-        }
-        return null;
+        String stringValue = functionCallExpr.getChild(1).getStringValue();
+        return new QueryBuilders.EsQueryBuilder(stringValue);
     }
 
     /**
@@ -276,7 +273,14 @@ public final class QueryBuilders {
             return parseInPredicate(expr, column, needDateCompat);
         }
         if (expr instanceof FunctionCallExpr) {
-            return parseFunctionCallExpr(expr);
+            FunctionCallExpr functionCallExpr = (FunctionCallExpr) expr;
+            // current only esquery functionCallExpr can be push down to ES
+            if (!"esquery".equals(functionCallExpr.getFnName().getFunction())) 
{
+                notPushDownList.add(expr);
+                return null;
+            } else {
+                return parseFunctionCallExpr(expr);
+            }
         }
         return null;
     }
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 98c74755181..cc8be6d8a36 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
@@ -1,9 +1,9 @@
 -- This file is automatically generated. You should know what you did if you 
want to edit this
 -- !sql01 --
-["2020-01-01", "2020-01-02"]   [-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]
+["2020-01-01", "2020-01-02"]   [-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
 
 -- !sql02 --
-["2020-01-01", "2020-01-02"]   [-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]
+["2020-01-01", "2020-01-02"]   [-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
 
 -- !sql03 --
 2022-08-08     2022-08-08T12:10:10     2022-08-08T12:10:10     
2022-08-08T04:10:10     2022-08-08T20:10:10
@@ -12,27 +12,42 @@
 2022-08-08     2022-08-11T12:10:10     2022-08-11T12:10:10     
2022-08-11T12:10:10     2022-08-11T11:10:10
 
 -- !sql04 --
-["2020-01-01", "2020-01-02"]   [-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
+\N
+I'm not null or empty
 
 -- !sql05 --
-["2020-01-01", "2020-01-02"]   [-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]
+
+I'm not null or empty
 
 -- !sql06 --
+\N
+\N
+
+I'm not null or empty
+
+-- !sql20 --
+["2020-01-01", "2020-01-02"]   [-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]
+
+-- !sql21 --
+["2020-01-01", "2020-01-02"]   [-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]
+
+-- !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
 
 -- !sql_6_02 --
-[1, 0, 1, 1]   [1, -2, -3, 4]  ["2020-01-01 00:00:00", "2020-01-02 00:00:00"]  
["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]    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 00:00:00", "2020-01-02 00:00:00"]  
["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]    \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 00:00:00", "2020-01-02 00:00:00"]  
["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]    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 00:00:00", "2020-01-02 00:00:00"]  
["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]    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 00:00:00", "2020-01-02 00:00:00"]  
["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]    string3 text3_4*5       5.0     2022-08-08T00:00        
3333    2022-08-08T20:10:10
+[1, 0, 1, 1]   [1, -2, -3, 4]  ["2020-01-01 00:00:00", "2020-01-02 00:00:00"]  
["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]    \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 00:00:00", "2020-01-02 00:00:00"]  
["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]            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 00:00:00", "2020-01-02 00:00:00"]  
["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]    I'm not null or empty   string3 text3_4*5       5.0     
2022-08-08T00:00        3333    2022-08-08T20:10:10
 
 -- !sql_6_04 --
-[1, 0, 1, 1]   [1, -2, -3, 4]  ["2020-01-01 00:00:00", "2020-01-02 00:00:00"]  
["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]    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 00:00:00", "2020-01-02 00:00:00"]  
["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]            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       1       1       
2020-01-01T00:00        2020-01-01 12:00:00     a       d       192.168.0.1     
{"name":"Andy","age":18}
@@ -45,7 +60,7 @@ true  1       128     32768   -1      0       1.0     1       
1       1       2020-01-01T00:00        2020-01-01 12:00:00     a       d       
192.168
 true   1       128     32768   -1      0       1.0     1       1       1       
2020-01-01T00:00        2020-01-01 12:00: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 00:00:00", "2020-01-02 00:00:00"]  
["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]    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 00:00:00", "2020-01-02 00:00:00"]  
["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]    \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 00:00:00", "2020-01-02 00:00:00"] 
 ["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}"]
@@ -58,13 +73,13 @@ true        1       128     32768   -1      0       1.0     
1       1       1       2020-01-01T00:00        2020-01-01 12:00:00     a       
d       192.168
 [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 00:00:00", "2020-01-02 00:00:00"] 
 ["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 00:00:00", "2020-01-02 00:00:00"]  
["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]    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 00:00:00", "2020-01-02 00:00:00"]  
["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]    \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 00:00:00", "2020-01-02 00:00:00"]  
["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]    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 00:00:00", "2020-01-02 00:00:00"]  
["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]            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 00:00:00", "2020-01-02 00:00:00"]  
["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]    string3 text3_4*5       5.0     2022-08-08T00:00        
3333    2022-08-08T20:10:10
+[1, 0, 1, 1]   [1, -2, -3, 4]  ["2020-01-01 00:00:00", "2020-01-02 00:00:00"]  
["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]    I'm not null or empty   string3 text3_4*5       5.0     
2022-08-08T00:00        3333    2022-08-08T20:10:10
 
 -- !sql_6_13 --
 2022-08-08T20:10:10
@@ -75,17 +90,28 @@ true        1       128     32768   -1      0       1.0     
1       1       1       2020-01-01T00:00        2020-01-01 12:00:00     a       
d       192.168
 -- !sql_6_15 --
 2022-08-08T20:10:10
 
+-- !sql_6_16 --
+\N
+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_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]    string1 2022-08-08T20:10:10     text#1  3.14    
2022-08-08T00:00        2022-08-08T12:10:10     1659931810000   
2022-08-08T12:10:10     2022-08-08T20:10:10     12345
+[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]    \N      string1 2022-08-08T20:10:10     text#1  3.14    
2022-08-08T00:00        2022-08-08T12:10:10     1659931810000   
2022-08-08T12:10:10     2022-08-08T20:10:10     12345
 
 -- !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]    string1 2022-08-08T20:10:10     text#1  3.14    
2022-08-08T00:00        2022-08-08T12:10:10     1659931810000   
2022-08-08T12:10:10     2022-08-08T20:10:10     12345
-[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]    string2 2022-08-08T12:10:10     text2   4.0     
2022-08-08T00:00        2022-08-09T12:10:10     1660018210000   
2022-08-09T12:10:10     2022-08-09T12:10:10     2222
-[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]    string3 2022-08-09T00:40:10     text3_4*5       5.0     
2022-08-08T00:00        2022-08-10T12:10:10     1660104610000   
2022-08-10T12:10:10     2022-08-10T20:10:10     3333
-[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]    string4 2022-08-08T20:10:10     text3_4*5       6.0     
2022-08-08T00:00        2022-08-11T12:10:10     1660191010000   
2022-08-11T12:10:10     2022-08-11T11:10:10     4444
+[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]    \N      string1 2022-08-08T20:10:10     text#1  3.14    
2022-08-08T00:00        2022-08-08T12:10:10     1659931810000   
2022-08-08T12:10:10     2022-08-08T20:10:10     12345
+[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]    \N      string4 2022-08-08T20:10:10     text3_4*5       
6.0     2022-08-08T00:00        2022-08-11T12:10:10     1660191010000   
2022-08-11T12:10:10     2022-08-11T11: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]            string2 2022-08-08T12:10:10     text2   4.0     
2022-08-08T00:00        2022-08-09T12:10:10     1660018210000   
2022-08-09T12:10:10     2022-08-09T12:10:10     2222
+[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]    I'm not null or empty   string3 2022-08-09T00:40:10     
text3_4*5       5.0     2022-08-08T00:00        2022-08-10T12:10:10     
1660104610000   2022-08-10T12: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]    string2 2022-08-08T12:10:10     text2   4.0     
2022-08-08T00:00        2022-08-09T12:10:10     1660018210000   
2022-08-09T12:10:10     2022-08-09T12:10:10     2222
+[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]            string2 2022-08-08T12:10:10     text2   4.0     
2022-08-08T00:00        2022-08-09T12:10:10     1660018210000   
2022-08-09T12:10:10     2022-08-09T12:10:10     2222
 
 -- !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}
@@ -100,7 +126,7 @@ 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}
 
 -- !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]    string1 2022-08-08T20:10:10     text#1  3.14    
2022-08-08T00:00        2022-08-08T12:10:10     1659931810000   
2022-08-08T12:10:10     2022-08-08T20:10:10     12345
+[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]    \N      string1 2022-08-08T20:10:10     text#1  3.14    
2022-08-08T00:00        2022-08-08T12:10:10     1659931810000   
2022-08-08T12:10:10     2022-08-08T20:10:10     12345
 
 -- !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}"]
@@ -118,16 +144,16 @@ 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.
 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]    string1 2022-08-08T20:10:10     text#1  3.14    
2022-08-08T00:00        2022-08-08T12:10:10     1659931810000   
2022-08-08T12:10:10     2022-08-08T20:10:10     12345
+[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]    \N      string1 2022-08-08T20:10:10     text#1  3.14    
2022-08-08T00:00        2022-08-08T12:10:10     1659931810000   
2022-08-08T12:10:10     2022-08-08T20:10:10     12345
 
 -- !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]    string2 2022-08-08T12:10:10     text2   4.0     
2022-08-08T00:00        2022-08-09T12:10:10     1660018210000   
2022-08-09T12:10:10     2022-08-09T12:10:10     2222
+[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]            string2 2022-08-08T12:10:10     text2   4.0     
2022-08-08T00:00        2022-08-09T12:10:10     1660018210000   
2022-08-09T12:10:10     2022-08-09T12:10:10     2222
 
 -- !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]    string3 2022-08-09T00:40:10     text3_4*5       5.0     
2022-08-08T00:00        2022-08-10T12:10:10     1660104610000   
2022-08-10T12:10:10     2022-08-10T20:10:10     3333
+[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]    I'm not null or empty   string3 2022-08-09T00:40:10     
text3_4*5       5.0     2022-08-08T00:00        2022-08-10T12:10:10     
1660104610000   2022-08-10T12:10: [...]
 
 -- !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]    string4 2022-08-08T20:10:10     text3_4*5       6.0     
2022-08-08T00:00        2022-08-11T12:10:10     1660191010000   
2022-08-11T12:10:10     2022-08-11T11:10:10     4444
+[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]    \N      string4 2022-08-08T20:10:10     text3_4*5       
6.0     2022-08-08T00:00        2022-08-11T12:10:10     1660191010000   
2022-08-11T12:10:10     2022-08-11T11:10 [...]
 
 -- !sql_7_15 --
 2022-08-08T20:10:10
@@ -141,17 +167,29 @@ value1    value2
 -- !sql_7_18 --
 2022-08-08T20:10:10
 
+-- !sql_7_19 --
+\N
+\N
+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_19 --
 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]    string1 2022-08-08T20:10:10     text#1  3.14    
2022-08-08T00:00        2022-08-08T12:10:10     1659931810000   
2022-08-08T12:10:10     2022-08-08T20:10:10     12345
+[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]    \N      string1 2022-08-08T20:10:10     text#1  3.14    
2022-08-08T00:00        2022-08-08T12:10:10     1659931810000   
2022-08-08T12:10:10     2022-08-08T20:10:10     12345
 
 -- !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]    string1 2022-08-08T20:10:10     text#1  3.14    
2022-08-08T00:00        2022-08-08T12:10:10     1659931810000   
2022-08-08T12:10:10     2022-08-08T20:10:10     12345
-[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]    string2 2022-08-08T12:10:10     text2   4.0     
2022-08-08T00:00        2022-08-09T12:10:10     1660018210000   
2022-08-09T12:10:10     2022-08-09T12:10:10     2222
-[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]    string3 2022-08-09T00:40:10     text3_4*5       5.0     
2022-08-08T00:00        2022-08-10T12:10:10     1660104610000   
2022-08-10T12:10:10     2022-08-10T20:10:10     3333
-[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]    string4 2022-08-08T20:10:10     text3_4*5       6.0     
2022-08-08T00:00        2022-08-11T12:10:10     1660191010000   
2022-08-11T12:10:10     2022-08-11T11:10:10     4444
+[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]    \N      string1 2022-08-08T20:10:10     text#1  3.14    
2022-08-08T00:00        2022-08-08T12:10:10     1659931810000   
2022-08-08T12:10:10     2022-08-08T20:10:10     12345
+[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]    \N      string4 2022-08-08T20:10:10     text3_4*5       
6.0     2022-08-08T00:00        2022-08-11T12:10:10     1660191010000   
2022-08-11T12:10:10     2022-08-11T11: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]            string2 2022-08-08T12:10:10     text2   4.0     
2022-08-08T00:00        2022-08-09T12:10:10     1660018210000   
2022-08-09T12:10:10     2022-08-09T12:10:10     2222
+[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]    I'm not null or empty   string3 2022-08-09T00:40:10     
text3_4*5       5.0     2022-08-08T00:00        2022-08-10T12:10:10     
1660104610000   2022-08-10T12: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}
@@ -166,7 +204,7 @@ 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}
 
 -- !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]    string1 2022-08-08T20:10:10     text#1  3.14    
2022-08-08T00:00        2022-08-08T12:10:10     1659931810000   
2022-08-08T12:10:10     2022-08-08T20:10:10     12345
+[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]    \N      string1 2022-08-08T20:10:10     text#1  3.14    
2022-08-08T00:00        2022-08-08T12:10:10     1659931810000   
2022-08-08T12:10:10     2022-08-08T20:10:10     12345
 
 -- !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}"]
@@ -184,16 +222,16 @@ 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.
 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]    string1 2022-08-08T20:10:10     text#1  3.14    
2022-08-08T00:00        2022-08-08T12:10:10     1659931810000   
2022-08-08T12:10:10     2022-08-08T20:10:10     12345
+[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]    \N      string1 2022-08-08T20:10:10     text#1  3.14    
2022-08-08T00:00        2022-08-08T12:10:10     1659931810000   
2022-08-08T12:10:10     2022-08-08T20:10:10     12345
 
 -- !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]    string2 2022-08-08T12:10:10     text2   4.0     
2022-08-08T00:00        2022-08-09T12:10:10     1660018210000   
2022-08-09T12:10:10     2022-08-09T12:10:10     2222
+[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]            string2 2022-08-08T12:10:10     text2   4.0     
2022-08-08T00:00        2022-08-09T12:10:10     1660018210000   
2022-08-09T12:10:10     2022-08-09T12:10:10     2222
 
 -- !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]    string3 2022-08-09T00:40:10     text3_4*5       5.0     
2022-08-08T00:00        2022-08-10T12:10:10     1660104610000   
2022-08-10T12:10:10     2022-08-10T20:10:10     3333
+[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]    I'm not null or empty   string3 2022-08-09T00:40:10     
text3_4*5       5.0     2022-08-08T00:00        2022-08-10T12:10:10     
1660104610000   2022-08-10T12:10: [...]
 
 -- !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]    string4 2022-08-08T20:10:10     text3_4*5       6.0     
2022-08-08T00:00        2022-08-11T12:10:10     1660191010000   
2022-08-11T12:10:10     2022-08-11T11:10:10     4444
+[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]    \N      string4 2022-08-08T20:10:10     text3_4*5       
6.0     2022-08-08T00:00        2022-08-11T12:10:10     1660191010000   
2022-08-11T12:10:10     2022-08-11T11:10 [...]
 
 -- !sql_8_13 --
 2022-08-08T20:10:10
@@ -207,3 +245,15 @@ value1     value2
 -- !sql_8_16 --
 2022-08-08T20:10:10
 
+-- !sql_8_17 --
+\N
+\N
+I'm not null or empty
+
+-- !sql_8_18 --
+
+I'm not null or empty
+
+-- !sql_8_19 --
+I'm not null or empty
+
diff --git 
a/regression-test/data/external_table_p0/es/test_es_query_no_http_url.out 
b/regression-test/data/external_table_p0/es/test_es_query_no_http_url.out
index 36981363db5..ceedce57b18 100644
--- a/regression-test/data/external_table_p0/es/test_es_query_no_http_url.out
+++ b/regression-test/data/external_table_p0/es/test_es_query_no_http_url.out
@@ -6,11 +6,11 @@
 ["2020-01-01", "2020-01-02"]   [-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]
 
 -- !sql61 --
-[1, 0, 1, 1]   [1, -2, -3, 4]  ["2020-01-01 00:00:00", "2020-01-02 00:00:00"]  
["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]    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 00:00:00", "2020-01-02 00:00:00"]  
["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]    \N      string1 text#1  3.14    2022-08-08T00:00        
12345   2022-08-08T20:10:10
 
 -- !sql71 --
-[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]    string1 2022-08-08T20:10:10     text#1  3.14    
2022-08-08T00:00        2022-08-08T12:10:10     1659931810000   
2022-08-08T12:10:10     2022-08-08T20:10:10     12345
+[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]    \N      string1 2022-08-08T20:10:10     text#1  3.14    
2022-08-08T00:00        2022-08-08T12:10:10     1659931810000   
2022-08-08T12:10:10     2022-08-08T20:10:10     12345
 
 -- !sql81 --
-[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]    string1 2022-08-08T20:10:10     text#1  3.14    
2022-08-08T00:00        2022-08-08T12:10:10     1659931810000   
2022-08-08T12:10:10     2022-08-08T20:10:10     12345
+[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]    \N      string1 2022-08-08T20:10:10     text#1  3.14    
2022-08-08T00:00        2022-08-08T12:10:10     1659931810000   
2022-08-08T12:10:10     2022-08-08T20:10:10     12345
 
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 c0cec5c82dd..6c8f71dfc93 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
@@ -101,7 +101,8 @@ suite("test_es_query", 
"p0,external,es,external_docker,external_docker_es") {
                 `test8` datetime NULL,
                 `c_byte` array<tinyint(4)> NULL,
                 `c_bool` array<boolean> NULL,
-                `c_integer` array<int(11)> NULL
+                `c_integer` array<int(11)> NULL,
+                `message` text NULL
             ) ENGINE=ELASTICSEARCH
             COMMENT 'ELASTICSEARCH'
             PROPERTIES (
@@ -115,7 +116,9 @@ suite("test_es_query", 
"p0,external,es,external_docker,external_docker_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)"""
        sql """
             CREATE TABLE `test_v2` (
                 `c_datetime` array<datev2> NULL,
@@ -152,9 +155,9 @@ suite("test_es_query", 
"p0,external,es,external_docker,external_docker_es") {
                 "http_ssl_enabled"="false"
             );
         """
-        order_qt_sql04 """select * from test_v2 where test2='text#1'"""
-        order_qt_sql05 """select * from test_v2 where esquery(test2, 
'{"match":{"test2":"text#1"}}')"""
-        order_qt_sql06 """select test4,test5,test6,test7,test8 from test_v2 
order by test8"""
+        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"""
 
         sql """switch test_es_query_es6"""
         // order_qt_sql_6_01 """show tables"""
@@ -172,6 +175,9 @@ suite("test_es_query", 
"p0,external,es,external_docker,external_docker_es") {
         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)"""
 
         List<List<String>> tables6N = sql """show tables"""
         boolean notContainHide = true
@@ -211,6 +217,9 @@ suite("test_es_query", 
"p0,external,es,external_docker,external_docker_es") {
         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)"""
 
         List<List<String>> tables7N = sql """show tables"""
         boolean notContainHide7 = true
@@ -250,5 +259,8 @@ suite("test_es_query", 
"p0,external,es,external_docker,external_docker_es") {
         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)"""
     }
 }


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

Reply via email to