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

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


The following commit(s) were added to refs/heads/branch-3.0 by this push:
     new 7ade9d71f83 [fix](hive)fix hive catalog miss partition that have 
special characters. #42906 (#43318)
7ade9d71f83 is described below

commit 7ade9d71f8309ff49a16148eae09e8a16dd9ff25
Author: Mingyu Chen (Rayner) <morning...@163.com>
AuthorDate: Wed Nov 6 15:18:17 2024 +0800

    [fix](hive)fix hive catalog miss partition that have special characters. 
#42906 (#43318)
    
    cherry pick from #42906
    
    Co-authored-by: daidai <2017501...@qq.com>
---
 .../doris/datasource/TablePartitionValues.java     |  30 --
 .../doris/datasource/hive/HiveMetaStoreCache.java  |  13 +-
 .../org/apache/doris/datasource/hive/HiveUtil.java |  29 +-
 .../java/org/apache/doris/qe/ShowExecutor.java     |   5 +
 .../apache/doris/statistics/HMSAnalysisTask.java   |   9 +-
 .../hive/test_hive_special_char_partition.out      | 396 +++++++++++++++++++++
 .../hive/test_hive_special_char_partition.groovy   | 199 ++++++++++-
 7 files changed, 626 insertions(+), 55 deletions(-)

diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/datasource/TablePartitionValues.java
 
b/fe/fe-core/src/main/java/org/apache/doris/datasource/TablePartitionValues.java
index d5e8a39e605..c7f2ce6f712 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/datasource/TablePartitionValues.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/datasource/TablePartitionValues.java
@@ -34,11 +34,7 @@ import com.google.common.collect.Range;
 import com.google.common.collect.RangeMap;
 import lombok.Data;
 
-import java.io.UnsupportedEncodingException;
-import java.net.URLDecoder;
-import java.nio.charset.StandardCharsets;
 import java.util.ArrayList;
-import java.util.Arrays;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
@@ -80,11 +76,6 @@ public class TablePartitionValues {
         addPartitions(partitionNames, partitionValues, types);
     }
 
-    public TablePartitionValues(List<String> partitionNames, List<Type> types) 
{
-        this();
-        addPartitions(partitionNames, types);
-    }
-
     public void addPartitions(List<String> partitionNames, List<List<String>> 
partitionValues, List<Type> types) {
         Preconditions.checkState(partitionNames.size() == 
partitionValues.size());
         List<String> addPartitionNames = new ArrayList<>();
@@ -105,10 +96,6 @@ public class TablePartitionValues {
         addPartitionItems(addPartitionNames, addPartitionItems, types);
     }
 
-    public void addPartitions(List<String> partitionNames, List<Type> types) {
-        addPartitions(partitionNames,
-                
partitionNames.stream().map(this::getHivePartitionValues).collect(Collectors.toList()),
 types);
-    }
 
     private void addPartitionItems(List<String> partitionNames, 
List<PartitionItem> partitionItems, List<Type> types) {
         Preconditions.checkState(partitionNames.size() == 
partitionItems.size());
@@ -196,23 +183,6 @@ public class TablePartitionValues {
         }
     }
 
-    private List<String> getHivePartitionValues(String partitionName) {
-        // Partition name will be in format: nation=cn/city=beijing
-        // parse it to get values "cn" and "beijing"
-        return Arrays.stream(partitionName.split("/")).map(part -> {
-            String[] kv = part.split("=");
-            Preconditions.checkState(kv.length == 2, partitionName);
-            String partitionValue;
-            try {
-                // hive partition value maybe contains special characters like 
'=' and '/'
-                partitionValue = URLDecoder.decode(kv[1], 
StandardCharsets.UTF_8.name());
-            } catch (UnsupportedEncodingException e) {
-                // It should not be here
-                throw new RuntimeException(e);
-            }
-            return partitionValue;
-        }).collect(Collectors.toList());
-    }
 
     @Data
     public static class TablePartitionKey {
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/datasource/hive/HiveMetaStoreCache.java
 
b/fe/fe-core/src/main/java/org/apache/doris/datasource/hive/HiveMetaStoreCache.java
index fbfd7dd2798..ea42dfa2f52 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/datasource/hive/HiveMetaStoreCache.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/datasource/hive/HiveMetaStoreCache.java
@@ -244,7 +244,7 @@ public class HiveMetaStoreCache {
     }
 
     private HivePartitionValues loadPartitionValues(PartitionValueCacheKey 
key) {
-        // partition name format: nation=cn/city=beijing
+        // partition name format: nation=cn/city=beijing,`listPartitionNames` 
returned string is the encoded string.
         List<String> partitionNames = 
catalog.getClient().listPartitionNames(key.dbName, key.tblName);
         if (LOG.isDebugEnabled()) {
             LOG.debug("load #{} partitions for {} in catalog {}", 
partitionNames.size(), key, catalog.getName());
@@ -281,11 +281,10 @@ public class HiveMetaStoreCache {
     public ListPartitionItem toListPartitionItem(String partitionName, 
List<Type> types) {
         // Partition name will be in format: nation=cn/city=beijing
         // parse it to get values "cn" and "beijing"
-        String[] parts = partitionName.split("/");
-        Preconditions.checkState(parts.length == types.size(), partitionName + 
" vs. " + types);
+        List<String> partitionValues = 
HiveUtil.toPartitionValues(partitionName);
+        Preconditions.checkState(partitionValues.size() == types.size(), 
partitionName + " vs. " + types);
         List<PartitionValue> values = 
Lists.newArrayListWithExpectedSize(types.size());
-        for (String part : parts) {
-            String partitionValue = HiveUtil.getHivePartitionValue(part);
+        for (String partitionValue : partitionValues) {
             values.add(new PartitionValue(partitionValue, 
HIVE_DEFAULT_PARTITION.equals(partitionValue)));
         }
         try {
@@ -325,9 +324,9 @@ public class HiveMetaStoreCache {
             StringBuilder sb = new StringBuilder();
             Preconditions.checkState(key.getValues().size() == 
partitionColumns.size());
             for (int i = 0; i < partitionColumns.size(); i++) {
-                sb.append(partitionColumns.get(i).getName());
+                // Partition name and value  may contain special character, 
like / and so on. Need to encode.
+                
sb.append(FileUtils.escapePathName(partitionColumns.get(i).getName()));
                 sb.append("=");
-                // Partition value may contain special character, like / and 
so on. Need to encode.
                 sb.append(FileUtils.escapePathName(key.getValues().get(i)));
                 sb.append("/");
             }
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/datasource/hive/HiveUtil.java 
b/fe/fe-core/src/main/java/org/apache/doris/datasource/hive/HiveUtil.java
index 56acec782c1..ac7dcadbc26 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/datasource/hive/HiveUtil.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/datasource/hive/HiveUtil.java
@@ -49,9 +49,6 @@ import org.apache.hadoop.mapred.JobConf;
 import org.apache.hadoop.mapred.TextInputFormat;
 import org.apache.hadoop.util.ReflectionUtils;
 
-import java.io.UnsupportedEncodingException;
-import java.net.URLDecoder;
-import java.nio.charset.StandardCharsets;
 import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.HashSet;
@@ -123,16 +120,22 @@ public final class HiveUtil {
         return 
HMSExternalTable.SUPPORTED_HIVE_FILE_FORMATS.contains(inputFormat);
     }
 
-    public static String getHivePartitionValue(String part) {
-        String[] kv = part.split("=");
-        Preconditions.checkState(kv.length == 2, String.format("Malformed 
partition name %s", part));
-        try {
-            // hive partition value maybe contains special characters like '=' 
and '/'
-            return URLDecoder.decode(kv[1], StandardCharsets.UTF_8.name());
-        } catch (UnsupportedEncodingException e) {
-            // It should not be here
-            throw new RuntimeException(e);
+    // "c1=a/c2=b/c3=c" ---> List(["c1","a"], ["c2","b"], ["c3","c"])
+    // Similar to the `toPartitionValues` method, except that it adds the 
partition column name.
+    public static List<String[]> toPartitionColNameAndValues(String 
partitionName) {
+
+        String[] parts = partitionName.split("/");
+        List<String[]> result = new ArrayList<>(parts.length);
+        for (String part : parts) {
+            String[] kv = part.split("=");
+            Preconditions.checkState(kv.length == 2, String.format("Malformed 
partition name %s", part));
+
+            result.add(new String[] {
+                    FileUtils.unescapePathName(kv[0]),
+                    FileUtils.unescapePathName(kv[1])
+            });
         }
+        return result;
     }
 
     // "c1=a/c2=b/c3=c" ---> List("a","b","c")
@@ -151,6 +154,8 @@ public final class HiveUtil {
             if (start > partitionName.length()) {
                 break;
             }
+            //Ref: common/src/java/org/apache/hadoop/hive/common/FileUtils.java
+            //makePartName(List<String> partCols, List<String> vals,String 
defaultStr)
             
resultBuilder.add(FileUtils.unescapePathName(partitionName.substring(start, 
end)));
             start = end + 1;
         }
diff --git a/fe/fe-core/src/main/java/org/apache/doris/qe/ShowExecutor.java 
b/fe/fe-core/src/main/java/org/apache/doris/qe/ShowExecutor.java
index 6c584f7255a..9d814fd081a 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/qe/ShowExecutor.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/qe/ShowExecutor.java
@@ -1933,6 +1933,11 @@ public class ShowExecutor {
         Map<String, Expr> filterMap = showStmt.getFilterMap();
         List<OrderByPair> orderByPairs = showStmt.getOrderByPairs();
 
+        // catalog.getClient().listPartitionNames() returned string is the 
encoded string.
+        // example: insert into tmp partition(pt="1=3/3") values( xxx );
+        //          show partitions from tmp: pt=1%3D3%2F3
+        // Need to consider whether to call 
`HiveUtil.toPartitionColNameAndValues` method
+
         if (limit != null && limit.hasLimit() && limit.getOffset() == 0
                 && (orderByPairs == null || !orderByPairs.get(0).isDesc())) {
             // hmsClient returns unordered partition list, hence if offset > 0 
cannot pass limit
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/statistics/HMSAnalysisTask.java 
b/fe/fe-core/src/main/java/org/apache/doris/statistics/HMSAnalysisTask.java
index 7b807b4661c..06009b38177 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/statistics/HMSAnalysisTask.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/statistics/HMSAnalysisTask.java
@@ -104,10 +104,11 @@ public class HMSAnalysisTask extends ExternalAnalysisTask 
{
         for (String names : partitionNames) {
             // names is like "date=20230101" for one level partition
             // and like "date=20230101/hour=12" for two level partition
-            String[] parts = names.split("/");
-            for (String part : parts) {
-                if (part.startsWith(col.getName())) {
-                    String value = HiveUtil.getHivePartitionValue(part);
+            List<String[]> parts = HiveUtil.toPartitionColNameAndValues(names);
+            for (String[] part : parts) {
+                String colName = part[0];
+                String value = part[1];
+                if (colName != null && colName.equals(col.getName())) {
                     // HIVE_DEFAULT_PARTITION hive partition value when the 
partition name is not specified.
                     if (value == null || value.isEmpty() || 
value.equals(HiveMetaStoreCache.HIVE_DEFAULT_PARTITION)) {
                         numNulls += 1;
diff --git 
a/regression-test/data/external_table_p0/hive/test_hive_special_char_partition.out
 
b/regression-test/data/external_table_p0/hive/test_hive_special_char_partition.out
index f81719d2d0e..13c1d2c1555 100644
--- 
a/regression-test/data/external_table_p0/hive/test_hive_special_char_partition.out
+++ 
b/regression-test/data/external_table_p0/hive/test_hive_special_char_partition.out
@@ -49,6 +49,204 @@ name6       2023%01%01
 -- !13 --
 name#  2023#01#01
 
+-- !sql1 --
+0      1,1=1, 3=2+1, 1=3-2, 3/3=1, 2/2=1, 2/1=2, 2/1=2 +1 -1,2/1=2 *3 /3
+0      1,1=1, 3=2+1, 1=3-2, 3/3=1, 2/2=1, 2/1=2, 2/1=2 +1 -1,2/1=2 *3 /3
+1       %100, @@@@@@ ,  %100 , !!asd!!, A%%Z
+2      abc:xyz,  1123,1222,  :::::::
+100     %100, @@@@@@ ,  %100 , !!asd!!, A%%Z
+200    abc:xyz,  1123,1222,  :::::::
+
+-- !sql2 --
+pt= %25100, @@@@@@ ,  %25100 , !!asd!!, A%25%25Z
+pt=1,1%3D1, 3%3D2+1, 1%3D3-2, 3%2F3%3D1, 2%2F2%3D1, 2%2F1%3D2, 2%2F1%3D2 +1 
-1,2%2F1%3D2 %2A3 %2F3
+pt=abc%3Axyz,  1123,1222,  %3A%3A%3A%3A%3A%3A%3A
+
+-- !sql_where1 --
+0      1,1=1, 3=2+1, 1=3-2, 3/3=1, 2/2=1, 2/1=2, 2/1=2 +1 -1,2/1=2 *3 /3
+0      1,1=1, 3=2+1, 1=3-2, 3/3=1, 2/2=1, 2/1=2, 2/1=2 +1 -1,2/1=2 *3 /3
+
+-- !sql_where1 --
+1       %100, @@@@@@ ,  %100 , !!asd!!, A%%Z
+100     %100, @@@@@@ ,  %100 , !!asd!!, A%%Z
+
+-- !sql_where1 --
+2      abc:xyz,  1123,1222,  :::::::
+200    abc:xyz,  1123,1222,  :::::::
+
+-- !sql3 --
+0      1,1=1, 3=2+1, 1=3-2, 3/3=1, 2/2=1, 2/1=2, 2/1=2 +1 -1,2/1=2 *3 /3       
1,1=1, 3=2+1, 1=3-2, 3/3=1, 2/2=1, 2/1=2, 2/1=2 +1 -1,2/1=2 *3 /3
+1      1,1=1, 3=2+1, 1=3-2, 3/3=1, 2/2=1, 2/1=2, 2/1=2 +1 -1,2/1=2 *3 /3       
 %100, @@@@@@ ,  %100 , !!asd!!, A%%Z
+2      1,1=1, 3=2+1, 1=3-2, 3/3=1, 2/2=1, 2/1=2, 2/1=2 +1 -1,2/1=2 *3 /3       
abc:xyz,  1123,1222,  :::::::
+100     %100, @@@@@@ ,  %100 , !!asd!!, A%%Z   1,1=1, 3=2+1, 1=3-2, 3/3=1, 
2/2=1, 2/1=2, 2/1=2 +1 -1,2/1=2 *3 /3
+101     %100, @@@@@@ ,  %100 , !!asd!!, A%%Z    %100, @@@@@@ ,  %100 , 
!!asd!!, A%%Z
+102     %100, @@@@@@ ,  %100 , !!asd!!, A%%Z   abc:xyz,  1123,1222,  :::::::
+200    abc:xyz,  1123,1222,  :::::::   1,1=1, 3=2+1, 1=3-2, 3/3=1, 2/2=1, 
2/1=2, 2/1=2 +1 -1,2/1=2 *3 /3
+201    abc:xyz,  1123,1222,  :::::::    %100, @@@@@@ ,  %100 , !!asd!!, A%%Z
+202    abc:xyz,  1123,1222,  :::::::   abc:xyz,  1123,1222,  :::::::
+
+-- !sql4 --
+pt1= %25100, @@@@@@ ,  %25100 , !!asd!!, A%25%25Z/pt2%3Dx!!!! 
%2A%2A1+1%2F&%5E%253= %25100, @@@@@@ ,  %25100 , !!asd!!, A%25%25Z
+pt1= %25100, @@@@@@ ,  %25100 , !!asd!!, A%25%25Z/pt2%3Dx!!!! 
%2A%2A1+1%2F&%5E%253=1,1%3D1, 3%3D2+1, 1%3D3-2, 3%2F3%3D1, 2%2F2%3D1, 
2%2F1%3D2, 2%2F1%3D2 +1 -1,2%2F1%3D2 %2A3 %2F3
+pt1= %25100, @@@@@@ ,  %25100 , !!asd!!, A%25%25Z/pt2%3Dx!!!! 
%2A%2A1+1%2F&%5E%253=abc%3Axyz,  1123,1222,  %3A%3A%3A%3A%3A%3A%3A
+pt1=1,1%3D1, 3%3D2+1, 1%3D3-2, 3%2F3%3D1, 2%2F2%3D1, 2%2F1%3D2, 2%2F1%3D2 +1 
-1,2%2F1%3D2 %2A3 %2F3/pt2%3Dx!!!! %2A%2A1+1%2F&%5E%253= %25100, @@@@@@ ,  
%25100 , !!asd!!, A%25%25Z
+pt1=1,1%3D1, 3%3D2+1, 1%3D3-2, 3%2F3%3D1, 2%2F2%3D1, 2%2F1%3D2, 2%2F1%3D2 +1 
-1,2%2F1%3D2 %2A3 %2F3/pt2%3Dx!!!! %2A%2A1+1%2F&%5E%253=1,1%3D1, 3%3D2+1, 
1%3D3-2, 3%2F3%3D1, 2%2F2%3D1, 2%2F1%3D2, 2%2F1%3D2 +1 -1,2%2F1%3D2 %2A3 %2F3
+pt1=1,1%3D1, 3%3D2+1, 1%3D3-2, 3%2F3%3D1, 2%2F2%3D1, 2%2F1%3D2, 2%2F1%3D2 +1 
-1,2%2F1%3D2 %2A3 %2F3/pt2%3Dx!!!! %2A%2A1+1%2F&%5E%253=abc%3Axyz,  1123,1222,  
%3A%3A%3A%3A%3A%3A%3A
+pt1=abc%3Axyz,  1123,1222,  %3A%3A%3A%3A%3A%3A%3A/pt2%3Dx!!!! 
%2A%2A1+1%2F&%5E%253= %25100, @@@@@@ ,  %25100 , !!asd!!, A%25%25Z
+pt1=abc%3Axyz,  1123,1222,  %3A%3A%3A%3A%3A%3A%3A/pt2%3Dx!!!! 
%2A%2A1+1%2F&%5E%253=1,1%3D1, 3%3D2+1, 1%3D3-2, 3%2F3%3D1, 2%2F2%3D1, 
2%2F1%3D2, 2%2F1%3D2 +1 -1,2%2F1%3D2 %2A3 %2F3
+pt1=abc%3Axyz,  1123,1222,  %3A%3A%3A%3A%3A%3A%3A/pt2%3Dx!!!! 
%2A%2A1+1%2F&%5E%253=abc%3Axyz,  1123,1222,  %3A%3A%3A%3A%3A%3A%3A
+
+-- !sql_where2 --
+0      1,1=1, 3=2+1, 1=3-2, 3/3=1, 2/2=1, 2/1=2, 2/1=2 +1 -1,2/1=2 *3 /3       
1,1=1, 3=2+1, 1=3-2, 3/3=1, 2/2=1, 2/1=2, 2/1=2 +1 -1,2/1=2 *3 /3
+100     %100, @@@@@@ ,  %100 , !!asd!!, A%%Z   1,1=1, 3=2+1, 1=3-2, 3/3=1, 
2/2=1, 2/1=2, 2/1=2 +1 -1,2/1=2 *3 /3
+200    abc:xyz,  1123,1222,  :::::::   1,1=1, 3=2+1, 1=3-2, 3/3=1, 2/2=1, 
2/1=2, 2/1=2 +1 -1,2/1=2 *3 /3
+
+-- !sql_where2 --
+1      1,1=1, 3=2+1, 1=3-2, 3/3=1, 2/2=1, 2/1=2, 2/1=2 +1 -1,2/1=2 *3 /3       
 %100, @@@@@@ ,  %100 , !!asd!!, A%%Z
+101     %100, @@@@@@ ,  %100 , !!asd!!, A%%Z    %100, @@@@@@ ,  %100 , 
!!asd!!, A%%Z
+201    abc:xyz,  1123,1222,  :::::::    %100, @@@@@@ ,  %100 , !!asd!!, A%%Z
+
+-- !sql_where2 --
+2      1,1=1, 3=2+1, 1=3-2, 3/3=1, 2/2=1, 2/1=2, 2/1=2 +1 -1,2/1=2 *3 /3       
abc:xyz,  1123,1222,  :::::::
+102     %100, @@@@@@ ,  %100 , !!asd!!, A%%Z   abc:xyz,  1123,1222,  :::::::
+202    abc:xyz,  1123,1222,  :::::::   abc:xyz,  1123,1222,  :::::::
+
+-- !sql5 --
+0      1,1=1, 3=2+1, 1=3-2, 3/3=1, 2/2=1, 2/1=2, 2/1=2 +1 -1,2/1=2 *3 /3       
1       1       1,1=1, 3=2+1, 1=3-2, 3/3=1, 2/2=1, 2/1=2, 2/1=2 +1 -1,2/1=2 *3 
/3       1
+1      1,1=1, 3=2+1, 1=3-2, 3/3=1, 2/2=1, 2/1=2, 2/1=2 +1 -1,2/1=2 *3 /3       
1       1        %100, @@@@@@ ,  %100 , !!asd!!, A%%Z   1
+2      1,1=1, 3=2+1, 1=3-2, 3/3=1, 2/2=1, 2/1=2, 2/1=2 +1 -1,2/1=2 *3 /3       
1       1       abc:xyz,  1123,1222,  :::::::   1
+100     %100, @@@@@@ ,  %100 , !!asd!!, A%%Z   1       1       1,1=1, 3=2+1, 
1=3-2, 3/3=1, 2/2=1, 2/1=2, 2/1=2 +1 -1,2/1=2 *3 /3       1
+101     %100, @@@@@@ ,  %100 , !!asd!!, A%%Z   1       1        %100, @@@@@@ , 
 %100 , !!asd!!, A%%Z   1
+102     %100, @@@@@@ ,  %100 , !!asd!!, A%%Z   1       1       abc:xyz,  
1123,1222,  :::::::   1
+200    abc:xyz,  1123,1222,  :::::::   1       1       1,1=1, 3=2+1, 1=3-2, 
3/3=1, 2/2=1, 2/1=2, 2/1=2 +1 -1,2/1=2 *3 /3       1
+201    abc:xyz,  1123,1222,  :::::::   1       1        %100, @@@@@@ ,  %100 , 
!!asd!!, A%%Z   1
+202    abc:xyz,  1123,1222,  :::::::   1       1       abc:xyz,  1123,1222,  
:::::::   1
+
+-- !sql6 --
+pt1= %25100, @@@@@@ ,  %25100 , !!asd!!, A%25%25Z/pt2%3Dx!!!! 
%2A%2A1+1%2F&%5E%253=1/pt3=1/pt4= %25100, @@@@@@ ,  %25100 , !!asd!!, 
A%25%25Z/pt5=1
+pt1= %25100, @@@@@@ ,  %25100 , !!asd!!, A%25%25Z/pt2%3Dx!!!! 
%2A%2A1+1%2F&%5E%253=1/pt3=1/pt4=1,1%3D1, 3%3D2+1, 1%3D3-2, 3%2F3%3D1, 
2%2F2%3D1, 2%2F1%3D2, 2%2F1%3D2 +1 -1,2%2F1%3D2 %2A3 %2F3/pt5=1
+pt1= %25100, @@@@@@ ,  %25100 , !!asd!!, A%25%25Z/pt2%3Dx!!!! 
%2A%2A1+1%2F&%5E%253=1/pt3=1/pt4=abc%3Axyz,  1123,1222,  
%3A%3A%3A%3A%3A%3A%3A/pt5=1
+pt1=1,1%3D1, 3%3D2+1, 1%3D3-2, 3%2F3%3D1, 2%2F2%3D1, 2%2F1%3D2, 2%2F1%3D2 +1 
-1,2%2F1%3D2 %2A3 %2F3/pt2%3Dx!!!! %2A%2A1+1%2F&%5E%253=1/pt3=1/pt4= %25100, 
@@@@@@ ,  %25100 , !!asd!!, A%25%25Z/pt5=1
+pt1=1,1%3D1, 3%3D2+1, 1%3D3-2, 3%2F3%3D1, 2%2F2%3D1, 2%2F1%3D2, 2%2F1%3D2 +1 
-1,2%2F1%3D2 %2A3 %2F3/pt2%3Dx!!!! %2A%2A1+1%2F&%5E%253=1/pt3=1/pt4=1,1%3D1, 
3%3D2+1, 1%3D3-2, 3%2F3%3D1, 2%2F2%3D1, 2%2F1%3D2, 2%2F1%3D2 +1 -1,2%2F1%3D2 
%2A3 %2F3/pt5=1
+pt1=1,1%3D1, 3%3D2+1, 1%3D3-2, 3%2F3%3D1, 2%2F2%3D1, 2%2F1%3D2, 2%2F1%3D2 +1 
-1,2%2F1%3D2 %2A3 %2F3/pt2%3Dx!!!! %2A%2A1+1%2F&%5E%253=1/pt3=1/pt4=abc%3Axyz,  
1123,1222,  %3A%3A%3A%3A%3A%3A%3A/pt5=1
+pt1=abc%3Axyz,  1123,1222,  %3A%3A%3A%3A%3A%3A%3A/pt2%3Dx!!!! 
%2A%2A1+1%2F&%5E%253=1/pt3=1/pt4= %25100, @@@@@@ ,  %25100 , !!asd!!, 
A%25%25Z/pt5=1
+pt1=abc%3Axyz,  1123,1222,  %3A%3A%3A%3A%3A%3A%3A/pt2%3Dx!!!! 
%2A%2A1+1%2F&%5E%253=1/pt3=1/pt4=1,1%3D1, 3%3D2+1, 1%3D3-2, 3%2F3%3D1, 
2%2F2%3D1, 2%2F1%3D2, 2%2F1%3D2 +1 -1,2%2F1%3D2 %2A3 %2F3/pt5=1
+pt1=abc%3Axyz,  1123,1222,  %3A%3A%3A%3A%3A%3A%3A/pt2%3Dx!!!! 
%2A%2A1+1%2F&%5E%253=1/pt3=1/pt4=abc%3Axyz,  1123,1222,  
%3A%3A%3A%3A%3A%3A%3A/pt5=1
+
+-- !sql_where3 --
+0      1,1=1, 3=2+1, 1=3-2, 3/3=1, 2/2=1, 2/1=2, 2/1=2 +1 -1,2/1=2 *3 /3       
1       1       1,1=1, 3=2+1, 1=3-2, 3/3=1, 2/2=1, 2/1=2, 2/1=2 +1 -1,2/1=2 *3 
/3       1
+100     %100, @@@@@@ ,  %100 , !!asd!!, A%%Z   1       1       1,1=1, 3=2+1, 
1=3-2, 3/3=1, 2/2=1, 2/1=2, 2/1=2 +1 -1,2/1=2 *3 /3       1
+200    abc:xyz,  1123,1222,  :::::::   1       1       1,1=1, 3=2+1, 1=3-2, 
3/3=1, 2/2=1, 2/1=2, 2/1=2 +1 -1,2/1=2 *3 /3       1
+
+-- !sql_where3 --
+1      1,1=1, 3=2+1, 1=3-2, 3/3=1, 2/2=1, 2/1=2, 2/1=2 +1 -1,2/1=2 *3 /3       
1       1        %100, @@@@@@ ,  %100 , !!asd!!, A%%Z   1
+101     %100, @@@@@@ ,  %100 , !!asd!!, A%%Z   1       1        %100, @@@@@@ , 
 %100 , !!asd!!, A%%Z   1
+201    abc:xyz,  1123,1222,  :::::::   1       1        %100, @@@@@@ ,  %100 , 
!!asd!!, A%%Z   1
+
+-- !sql_where3 --
+2      1,1=1, 3=2+1, 1=3-2, 3/3=1, 2/2=1, 2/1=2, 2/1=2 +1 -1,2/1=2 *3 /3       
1       1       abc:xyz,  1123,1222,  :::::::   1
+102     %100, @@@@@@ ,  %100 , !!asd!!, A%%Z   1       1       abc:xyz,  
1123,1222,  :::::::   1
+202    abc:xyz,  1123,1222,  :::::::   1       1       abc:xyz,  1123,1222,  
:::::::   1
+
+-- !sql1 --
+0      1,1=1, 3=2+1, 1=3-2, 3/3=1, 2/2=1, 2/1=2, 2/1=2 +1 -1,2/1=2 *3 /3
+0      1,1=1, 3=2+1, 1=3-2, 3/3=1, 2/2=1, 2/1=2, 2/1=2 +1 -1,2/1=2 *3 /3
+1       %100, @@@@@@ ,  %100 , !!asd!!, A%%Z
+2      abc:xyz,  1123,1222,  :::::::
+100     %100, @@@@@@ ,  %100 , !!asd!!, A%%Z
+200    abc:xyz,  1123,1222,  :::::::
+
+-- !sql2 --
+pt= %25100, @@@@@@ ,  %25100 , !!asd!!, A%25%25Z
+pt=1,1%3D1, 3%3D2+1, 1%3D3-2, 3%2F3%3D1, 2%2F2%3D1, 2%2F1%3D2, 2%2F1%3D2 +1 
-1,2%2F1%3D2 %2A3 %2F3
+pt=abc%3Axyz,  1123,1222,  %3A%3A%3A%3A%3A%3A%3A
+
+-- !sql_where1 --
+0      1,1=1, 3=2+1, 1=3-2, 3/3=1, 2/2=1, 2/1=2, 2/1=2 +1 -1,2/1=2 *3 /3
+0      1,1=1, 3=2+1, 1=3-2, 3/3=1, 2/2=1, 2/1=2, 2/1=2 +1 -1,2/1=2 *3 /3
+
+-- !sql_where1 --
+1       %100, @@@@@@ ,  %100 , !!asd!!, A%%Z
+100     %100, @@@@@@ ,  %100 , !!asd!!, A%%Z
+
+-- !sql_where1 --
+2      abc:xyz,  1123,1222,  :::::::
+200    abc:xyz,  1123,1222,  :::::::
+
+-- !sql3 --
+0      1,1=1, 3=2+1, 1=3-2, 3/3=1, 2/2=1, 2/1=2, 2/1=2 +1 -1,2/1=2 *3 /3       
1,1=1, 3=2+1, 1=3-2, 3/3=1, 2/2=1, 2/1=2, 2/1=2 +1 -1,2/1=2 *3 /3
+1      1,1=1, 3=2+1, 1=3-2, 3/3=1, 2/2=1, 2/1=2, 2/1=2 +1 -1,2/1=2 *3 /3       
 %100, @@@@@@ ,  %100 , !!asd!!, A%%Z
+2      1,1=1, 3=2+1, 1=3-2, 3/3=1, 2/2=1, 2/1=2, 2/1=2 +1 -1,2/1=2 *3 /3       
abc:xyz,  1123,1222,  :::::::
+100     %100, @@@@@@ ,  %100 , !!asd!!, A%%Z   1,1=1, 3=2+1, 1=3-2, 3/3=1, 
2/2=1, 2/1=2, 2/1=2 +1 -1,2/1=2 *3 /3
+101     %100, @@@@@@ ,  %100 , !!asd!!, A%%Z    %100, @@@@@@ ,  %100 , 
!!asd!!, A%%Z
+102     %100, @@@@@@ ,  %100 , !!asd!!, A%%Z   abc:xyz,  1123,1222,  :::::::
+200    abc:xyz,  1123,1222,  :::::::   1,1=1, 3=2+1, 1=3-2, 3/3=1, 2/2=1, 
2/1=2, 2/1=2 +1 -1,2/1=2 *3 /3
+201    abc:xyz,  1123,1222,  :::::::    %100, @@@@@@ ,  %100 , !!asd!!, A%%Z
+202    abc:xyz,  1123,1222,  :::::::   abc:xyz,  1123,1222,  :::::::
+
+-- !sql4 --
+pt1= %25100, @@@@@@ ,  %25100 , !!asd!!, A%25%25Z/pt2%3Dx!!!! 
%2A%2A1+1%2F&%5E%253= %25100, @@@@@@ ,  %25100 , !!asd!!, A%25%25Z
+pt1= %25100, @@@@@@ ,  %25100 , !!asd!!, A%25%25Z/pt2%3Dx!!!! 
%2A%2A1+1%2F&%5E%253=1,1%3D1, 3%3D2+1, 1%3D3-2, 3%2F3%3D1, 2%2F2%3D1, 
2%2F1%3D2, 2%2F1%3D2 +1 -1,2%2F1%3D2 %2A3 %2F3
+pt1= %25100, @@@@@@ ,  %25100 , !!asd!!, A%25%25Z/pt2%3Dx!!!! 
%2A%2A1+1%2F&%5E%253=abc%3Axyz,  1123,1222,  %3A%3A%3A%3A%3A%3A%3A
+pt1=1,1%3D1, 3%3D2+1, 1%3D3-2, 3%2F3%3D1, 2%2F2%3D1, 2%2F1%3D2, 2%2F1%3D2 +1 
-1,2%2F1%3D2 %2A3 %2F3/pt2%3Dx!!!! %2A%2A1+1%2F&%5E%253= %25100, @@@@@@ ,  
%25100 , !!asd!!, A%25%25Z
+pt1=1,1%3D1, 3%3D2+1, 1%3D3-2, 3%2F3%3D1, 2%2F2%3D1, 2%2F1%3D2, 2%2F1%3D2 +1 
-1,2%2F1%3D2 %2A3 %2F3/pt2%3Dx!!!! %2A%2A1+1%2F&%5E%253=1,1%3D1, 3%3D2+1, 
1%3D3-2, 3%2F3%3D1, 2%2F2%3D1, 2%2F1%3D2, 2%2F1%3D2 +1 -1,2%2F1%3D2 %2A3 %2F3
+pt1=1,1%3D1, 3%3D2+1, 1%3D3-2, 3%2F3%3D1, 2%2F2%3D1, 2%2F1%3D2, 2%2F1%3D2 +1 
-1,2%2F1%3D2 %2A3 %2F3/pt2%3Dx!!!! %2A%2A1+1%2F&%5E%253=abc%3Axyz,  1123,1222,  
%3A%3A%3A%3A%3A%3A%3A
+pt1=abc%3Axyz,  1123,1222,  %3A%3A%3A%3A%3A%3A%3A/pt2%3Dx!!!! 
%2A%2A1+1%2F&%5E%253= %25100, @@@@@@ ,  %25100 , !!asd!!, A%25%25Z
+pt1=abc%3Axyz,  1123,1222,  %3A%3A%3A%3A%3A%3A%3A/pt2%3Dx!!!! 
%2A%2A1+1%2F&%5E%253=1,1%3D1, 3%3D2+1, 1%3D3-2, 3%2F3%3D1, 2%2F2%3D1, 
2%2F1%3D2, 2%2F1%3D2 +1 -1,2%2F1%3D2 %2A3 %2F3
+pt1=abc%3Axyz,  1123,1222,  %3A%3A%3A%3A%3A%3A%3A/pt2%3Dx!!!! 
%2A%2A1+1%2F&%5E%253=abc%3Axyz,  1123,1222,  %3A%3A%3A%3A%3A%3A%3A
+
+-- !sql_where2 --
+0      1,1=1, 3=2+1, 1=3-2, 3/3=1, 2/2=1, 2/1=2, 2/1=2 +1 -1,2/1=2 *3 /3       
1,1=1, 3=2+1, 1=3-2, 3/3=1, 2/2=1, 2/1=2, 2/1=2 +1 -1,2/1=2 *3 /3
+100     %100, @@@@@@ ,  %100 , !!asd!!, A%%Z   1,1=1, 3=2+1, 1=3-2, 3/3=1, 
2/2=1, 2/1=2, 2/1=2 +1 -1,2/1=2 *3 /3
+200    abc:xyz,  1123,1222,  :::::::   1,1=1, 3=2+1, 1=3-2, 3/3=1, 2/2=1, 
2/1=2, 2/1=2 +1 -1,2/1=2 *3 /3
+
+-- !sql_where2 --
+1      1,1=1, 3=2+1, 1=3-2, 3/3=1, 2/2=1, 2/1=2, 2/1=2 +1 -1,2/1=2 *3 /3       
 %100, @@@@@@ ,  %100 , !!asd!!, A%%Z
+101     %100, @@@@@@ ,  %100 , !!asd!!, A%%Z    %100, @@@@@@ ,  %100 , 
!!asd!!, A%%Z
+201    abc:xyz,  1123,1222,  :::::::    %100, @@@@@@ ,  %100 , !!asd!!, A%%Z
+
+-- !sql_where2 --
+2      1,1=1, 3=2+1, 1=3-2, 3/3=1, 2/2=1, 2/1=2, 2/1=2 +1 -1,2/1=2 *3 /3       
abc:xyz,  1123,1222,  :::::::
+102     %100, @@@@@@ ,  %100 , !!asd!!, A%%Z   abc:xyz,  1123,1222,  :::::::
+202    abc:xyz,  1123,1222,  :::::::   abc:xyz,  1123,1222,  :::::::
+
+-- !sql5 --
+0      1,1=1, 3=2+1, 1=3-2, 3/3=1, 2/2=1, 2/1=2, 2/1=2 +1 -1,2/1=2 *3 /3       
1       1       1,1=1, 3=2+1, 1=3-2, 3/3=1, 2/2=1, 2/1=2, 2/1=2 +1 -1,2/1=2 *3 
/3       1
+1      1,1=1, 3=2+1, 1=3-2, 3/3=1, 2/2=1, 2/1=2, 2/1=2 +1 -1,2/1=2 *3 /3       
1       1        %100, @@@@@@ ,  %100 , !!asd!!, A%%Z   1
+2      1,1=1, 3=2+1, 1=3-2, 3/3=1, 2/2=1, 2/1=2, 2/1=2 +1 -1,2/1=2 *3 /3       
1       1       abc:xyz,  1123,1222,  :::::::   1
+100     %100, @@@@@@ ,  %100 , !!asd!!, A%%Z   1       1       1,1=1, 3=2+1, 
1=3-2, 3/3=1, 2/2=1, 2/1=2, 2/1=2 +1 -1,2/1=2 *3 /3       1
+101     %100, @@@@@@ ,  %100 , !!asd!!, A%%Z   1       1        %100, @@@@@@ , 
 %100 , !!asd!!, A%%Z   1
+102     %100, @@@@@@ ,  %100 , !!asd!!, A%%Z   1       1       abc:xyz,  
1123,1222,  :::::::   1
+200    abc:xyz,  1123,1222,  :::::::   1       1       1,1=1, 3=2+1, 1=3-2, 
3/3=1, 2/2=1, 2/1=2, 2/1=2 +1 -1,2/1=2 *3 /3       1
+201    abc:xyz,  1123,1222,  :::::::   1       1        %100, @@@@@@ ,  %100 , 
!!asd!!, A%%Z   1
+202    abc:xyz,  1123,1222,  :::::::   1       1       abc:xyz,  1123,1222,  
:::::::   1
+
+-- !sql6 --
+pt1= %25100, @@@@@@ ,  %25100 , !!asd!!, A%25%25Z/pt2%3Dx!!!! 
%2A%2A1+1%2F&%5E%253=1/pt3=1/pt4= %25100, @@@@@@ ,  %25100 , !!asd!!, 
A%25%25Z/pt5=1
+pt1= %25100, @@@@@@ ,  %25100 , !!asd!!, A%25%25Z/pt2%3Dx!!!! 
%2A%2A1+1%2F&%5E%253=1/pt3=1/pt4=1,1%3D1, 3%3D2+1, 1%3D3-2, 3%2F3%3D1, 
2%2F2%3D1, 2%2F1%3D2, 2%2F1%3D2 +1 -1,2%2F1%3D2 %2A3 %2F3/pt5=1
+pt1= %25100, @@@@@@ ,  %25100 , !!asd!!, A%25%25Z/pt2%3Dx!!!! 
%2A%2A1+1%2F&%5E%253=1/pt3=1/pt4=abc%3Axyz,  1123,1222,  
%3A%3A%3A%3A%3A%3A%3A/pt5=1
+pt1=1,1%3D1, 3%3D2+1, 1%3D3-2, 3%2F3%3D1, 2%2F2%3D1, 2%2F1%3D2, 2%2F1%3D2 +1 
-1,2%2F1%3D2 %2A3 %2F3/pt2%3Dx!!!! %2A%2A1+1%2F&%5E%253=1/pt3=1/pt4= %25100, 
@@@@@@ ,  %25100 , !!asd!!, A%25%25Z/pt5=1
+pt1=1,1%3D1, 3%3D2+1, 1%3D3-2, 3%2F3%3D1, 2%2F2%3D1, 2%2F1%3D2, 2%2F1%3D2 +1 
-1,2%2F1%3D2 %2A3 %2F3/pt2%3Dx!!!! %2A%2A1+1%2F&%5E%253=1/pt3=1/pt4=1,1%3D1, 
3%3D2+1, 1%3D3-2, 3%2F3%3D1, 2%2F2%3D1, 2%2F1%3D2, 2%2F1%3D2 +1 -1,2%2F1%3D2 
%2A3 %2F3/pt5=1
+pt1=1,1%3D1, 3%3D2+1, 1%3D3-2, 3%2F3%3D1, 2%2F2%3D1, 2%2F1%3D2, 2%2F1%3D2 +1 
-1,2%2F1%3D2 %2A3 %2F3/pt2%3Dx!!!! %2A%2A1+1%2F&%5E%253=1/pt3=1/pt4=abc%3Axyz,  
1123,1222,  %3A%3A%3A%3A%3A%3A%3A/pt5=1
+pt1=abc%3Axyz,  1123,1222,  %3A%3A%3A%3A%3A%3A%3A/pt2%3Dx!!!! 
%2A%2A1+1%2F&%5E%253=1/pt3=1/pt4= %25100, @@@@@@ ,  %25100 , !!asd!!, 
A%25%25Z/pt5=1
+pt1=abc%3Axyz,  1123,1222,  %3A%3A%3A%3A%3A%3A%3A/pt2%3Dx!!!! 
%2A%2A1+1%2F&%5E%253=1/pt3=1/pt4=1,1%3D1, 3%3D2+1, 1%3D3-2, 3%2F3%3D1, 
2%2F2%3D1, 2%2F1%3D2, 2%2F1%3D2 +1 -1,2%2F1%3D2 %2A3 %2F3/pt5=1
+pt1=abc%3Axyz,  1123,1222,  %3A%3A%3A%3A%3A%3A%3A/pt2%3Dx!!!! 
%2A%2A1+1%2F&%5E%253=1/pt3=1/pt4=abc%3Axyz,  1123,1222,  
%3A%3A%3A%3A%3A%3A%3A/pt5=1
+
+-- !sql_where3 --
+0      1,1=1, 3=2+1, 1=3-2, 3/3=1, 2/2=1, 2/1=2, 2/1=2 +1 -1,2/1=2 *3 /3       
1       1       1,1=1, 3=2+1, 1=3-2, 3/3=1, 2/2=1, 2/1=2, 2/1=2 +1 -1,2/1=2 *3 
/3       1
+100     %100, @@@@@@ ,  %100 , !!asd!!, A%%Z   1       1       1,1=1, 3=2+1, 
1=3-2, 3/3=1, 2/2=1, 2/1=2, 2/1=2 +1 -1,2/1=2 *3 /3       1
+200    abc:xyz,  1123,1222,  :::::::   1       1       1,1=1, 3=2+1, 1=3-2, 
3/3=1, 2/2=1, 2/1=2, 2/1=2 +1 -1,2/1=2 *3 /3       1
+
+-- !sql_where3 --
+1      1,1=1, 3=2+1, 1=3-2, 3/3=1, 2/2=1, 2/1=2, 2/1=2 +1 -1,2/1=2 *3 /3       
1       1        %100, @@@@@@ ,  %100 , !!asd!!, A%%Z   1
+101     %100, @@@@@@ ,  %100 , !!asd!!, A%%Z   1       1        %100, @@@@@@ , 
 %100 , !!asd!!, A%%Z   1
+201    abc:xyz,  1123,1222,  :::::::   1       1        %100, @@@@@@ ,  %100 , 
!!asd!!, A%%Z   1
+
+-- !sql_where3 --
+2      1,1=1, 3=2+1, 1=3-2, 3/3=1, 2/2=1, 2/1=2, 2/1=2 +1 -1,2/1=2 *3 /3       
1       1       abc:xyz,  1123,1222,  :::::::   1
+102     %100, @@@@@@ ,  %100 , !!asd!!, A%%Z   1       1       abc:xyz,  
1123,1222,  :::::::   1
+202    abc:xyz,  1123,1222,  :::::::   1       1       abc:xyz,  1123,1222,  
:::::::   1
+
 -- !1 --
 name#  2023#01#01
 name1  2023/01/01
@@ -99,3 +297,201 @@ name6      2023%01%01
 -- !13 --
 name#  2023#01#01
 
+-- !sql1 --
+0      1,1=1, 3=2+1, 1=3-2, 3/3=1, 2/2=1, 2/1=2, 2/1=2 +1 -1,2/1=2 *3 /3
+0      1,1=1, 3=2+1, 1=3-2, 3/3=1, 2/2=1, 2/1=2, 2/1=2 +1 -1,2/1=2 *3 /3
+1       %100, @@@@@@ ,  %100 , !!asd!!, A%%Z
+2      abc:xyz,  1123,1222,  :::::::
+100     %100, @@@@@@ ,  %100 , !!asd!!, A%%Z
+200    abc:xyz,  1123,1222,  :::::::
+
+-- !sql2 --
+pt= %25100, @@@@@@ ,  %25100 , !!asd!!, A%25%25Z
+pt=1,1%3D1, 3%3D2+1, 1%3D3-2, 3%2F3%3D1, 2%2F2%3D1, 2%2F1%3D2, 2%2F1%3D2 +1 
-1,2%2F1%3D2 %2A3 %2F3
+pt=abc%3Axyz,  1123,1222,  %3A%3A%3A%3A%3A%3A%3A
+
+-- !sql_where1 --
+0      1,1=1, 3=2+1, 1=3-2, 3/3=1, 2/2=1, 2/1=2, 2/1=2 +1 -1,2/1=2 *3 /3
+0      1,1=1, 3=2+1, 1=3-2, 3/3=1, 2/2=1, 2/1=2, 2/1=2 +1 -1,2/1=2 *3 /3
+
+-- !sql_where1 --
+1       %100, @@@@@@ ,  %100 , !!asd!!, A%%Z
+100     %100, @@@@@@ ,  %100 , !!asd!!, A%%Z
+
+-- !sql_where1 --
+2      abc:xyz,  1123,1222,  :::::::
+200    abc:xyz,  1123,1222,  :::::::
+
+-- !sql3 --
+0      1,1=1, 3=2+1, 1=3-2, 3/3=1, 2/2=1, 2/1=2, 2/1=2 +1 -1,2/1=2 *3 /3       
1,1=1, 3=2+1, 1=3-2, 3/3=1, 2/2=1, 2/1=2, 2/1=2 +1 -1,2/1=2 *3 /3
+1      1,1=1, 3=2+1, 1=3-2, 3/3=1, 2/2=1, 2/1=2, 2/1=2 +1 -1,2/1=2 *3 /3       
 %100, @@@@@@ ,  %100 , !!asd!!, A%%Z
+2      1,1=1, 3=2+1, 1=3-2, 3/3=1, 2/2=1, 2/1=2, 2/1=2 +1 -1,2/1=2 *3 /3       
abc:xyz,  1123,1222,  :::::::
+100     %100, @@@@@@ ,  %100 , !!asd!!, A%%Z   1,1=1, 3=2+1, 1=3-2, 3/3=1, 
2/2=1, 2/1=2, 2/1=2 +1 -1,2/1=2 *3 /3
+101     %100, @@@@@@ ,  %100 , !!asd!!, A%%Z    %100, @@@@@@ ,  %100 , 
!!asd!!, A%%Z
+102     %100, @@@@@@ ,  %100 , !!asd!!, A%%Z   abc:xyz,  1123,1222,  :::::::
+200    abc:xyz,  1123,1222,  :::::::   1,1=1, 3=2+1, 1=3-2, 3/3=1, 2/2=1, 
2/1=2, 2/1=2 +1 -1,2/1=2 *3 /3
+201    abc:xyz,  1123,1222,  :::::::    %100, @@@@@@ ,  %100 , !!asd!!, A%%Z
+202    abc:xyz,  1123,1222,  :::::::   abc:xyz,  1123,1222,  :::::::
+
+-- !sql4 --
+pt1= %25100, @@@@@@ ,  %25100 , !!asd!!, A%25%25Z/pt2%3Dx!!!! 
%2A%2A1+1%2F&%5E%253= %25100, @@@@@@ ,  %25100 , !!asd!!, A%25%25Z
+pt1= %25100, @@@@@@ ,  %25100 , !!asd!!, A%25%25Z/pt2%3Dx!!!! 
%2A%2A1+1%2F&%5E%253=1,1%3D1, 3%3D2+1, 1%3D3-2, 3%2F3%3D1, 2%2F2%3D1, 
2%2F1%3D2, 2%2F1%3D2 +1 -1,2%2F1%3D2 %2A3 %2F3
+pt1= %25100, @@@@@@ ,  %25100 , !!asd!!, A%25%25Z/pt2%3Dx!!!! 
%2A%2A1+1%2F&%5E%253=abc%3Axyz,  1123,1222,  %3A%3A%3A%3A%3A%3A%3A
+pt1=1,1%3D1, 3%3D2+1, 1%3D3-2, 3%2F3%3D1, 2%2F2%3D1, 2%2F1%3D2, 2%2F1%3D2 +1 
-1,2%2F1%3D2 %2A3 %2F3/pt2%3Dx!!!! %2A%2A1+1%2F&%5E%253= %25100, @@@@@@ ,  
%25100 , !!asd!!, A%25%25Z
+pt1=1,1%3D1, 3%3D2+1, 1%3D3-2, 3%2F3%3D1, 2%2F2%3D1, 2%2F1%3D2, 2%2F1%3D2 +1 
-1,2%2F1%3D2 %2A3 %2F3/pt2%3Dx!!!! %2A%2A1+1%2F&%5E%253=1,1%3D1, 3%3D2+1, 
1%3D3-2, 3%2F3%3D1, 2%2F2%3D1, 2%2F1%3D2, 2%2F1%3D2 +1 -1,2%2F1%3D2 %2A3 %2F3
+pt1=1,1%3D1, 3%3D2+1, 1%3D3-2, 3%2F3%3D1, 2%2F2%3D1, 2%2F1%3D2, 2%2F1%3D2 +1 
-1,2%2F1%3D2 %2A3 %2F3/pt2%3Dx!!!! %2A%2A1+1%2F&%5E%253=abc%3Axyz,  1123,1222,  
%3A%3A%3A%3A%3A%3A%3A
+pt1=abc%3Axyz,  1123,1222,  %3A%3A%3A%3A%3A%3A%3A/pt2%3Dx!!!! 
%2A%2A1+1%2F&%5E%253= %25100, @@@@@@ ,  %25100 , !!asd!!, A%25%25Z
+pt1=abc%3Axyz,  1123,1222,  %3A%3A%3A%3A%3A%3A%3A/pt2%3Dx!!!! 
%2A%2A1+1%2F&%5E%253=1,1%3D1, 3%3D2+1, 1%3D3-2, 3%2F3%3D1, 2%2F2%3D1, 
2%2F1%3D2, 2%2F1%3D2 +1 -1,2%2F1%3D2 %2A3 %2F3
+pt1=abc%3Axyz,  1123,1222,  %3A%3A%3A%3A%3A%3A%3A/pt2%3Dx!!!! 
%2A%2A1+1%2F&%5E%253=abc%3Axyz,  1123,1222,  %3A%3A%3A%3A%3A%3A%3A
+
+-- !sql_where2 --
+0      1,1=1, 3=2+1, 1=3-2, 3/3=1, 2/2=1, 2/1=2, 2/1=2 +1 -1,2/1=2 *3 /3       
1,1=1, 3=2+1, 1=3-2, 3/3=1, 2/2=1, 2/1=2, 2/1=2 +1 -1,2/1=2 *3 /3
+100     %100, @@@@@@ ,  %100 , !!asd!!, A%%Z   1,1=1, 3=2+1, 1=3-2, 3/3=1, 
2/2=1, 2/1=2, 2/1=2 +1 -1,2/1=2 *3 /3
+200    abc:xyz,  1123,1222,  :::::::   1,1=1, 3=2+1, 1=3-2, 3/3=1, 2/2=1, 
2/1=2, 2/1=2 +1 -1,2/1=2 *3 /3
+
+-- !sql_where2 --
+1      1,1=1, 3=2+1, 1=3-2, 3/3=1, 2/2=1, 2/1=2, 2/1=2 +1 -1,2/1=2 *3 /3       
 %100, @@@@@@ ,  %100 , !!asd!!, A%%Z
+101     %100, @@@@@@ ,  %100 , !!asd!!, A%%Z    %100, @@@@@@ ,  %100 , 
!!asd!!, A%%Z
+201    abc:xyz,  1123,1222,  :::::::    %100, @@@@@@ ,  %100 , !!asd!!, A%%Z
+
+-- !sql_where2 --
+2      1,1=1, 3=2+1, 1=3-2, 3/3=1, 2/2=1, 2/1=2, 2/1=2 +1 -1,2/1=2 *3 /3       
abc:xyz,  1123,1222,  :::::::
+102     %100, @@@@@@ ,  %100 , !!asd!!, A%%Z   abc:xyz,  1123,1222,  :::::::
+202    abc:xyz,  1123,1222,  :::::::   abc:xyz,  1123,1222,  :::::::
+
+-- !sql5 --
+0      1,1=1, 3=2+1, 1=3-2, 3/3=1, 2/2=1, 2/1=2, 2/1=2 +1 -1,2/1=2 *3 /3       
1       1       1,1=1, 3=2+1, 1=3-2, 3/3=1, 2/2=1, 2/1=2, 2/1=2 +1 -1,2/1=2 *3 
/3       1
+1      1,1=1, 3=2+1, 1=3-2, 3/3=1, 2/2=1, 2/1=2, 2/1=2 +1 -1,2/1=2 *3 /3       
1       1        %100, @@@@@@ ,  %100 , !!asd!!, A%%Z   1
+2      1,1=1, 3=2+1, 1=3-2, 3/3=1, 2/2=1, 2/1=2, 2/1=2 +1 -1,2/1=2 *3 /3       
1       1       abc:xyz,  1123,1222,  :::::::   1
+100     %100, @@@@@@ ,  %100 , !!asd!!, A%%Z   1       1       1,1=1, 3=2+1, 
1=3-2, 3/3=1, 2/2=1, 2/1=2, 2/1=2 +1 -1,2/1=2 *3 /3       1
+101     %100, @@@@@@ ,  %100 , !!asd!!, A%%Z   1       1        %100, @@@@@@ , 
 %100 , !!asd!!, A%%Z   1
+102     %100, @@@@@@ ,  %100 , !!asd!!, A%%Z   1       1       abc:xyz,  
1123,1222,  :::::::   1
+200    abc:xyz,  1123,1222,  :::::::   1       1       1,1=1, 3=2+1, 1=3-2, 
3/3=1, 2/2=1, 2/1=2, 2/1=2 +1 -1,2/1=2 *3 /3       1
+201    abc:xyz,  1123,1222,  :::::::   1       1        %100, @@@@@@ ,  %100 , 
!!asd!!, A%%Z   1
+202    abc:xyz,  1123,1222,  :::::::   1       1       abc:xyz,  1123,1222,  
:::::::   1
+
+-- !sql6 --
+pt1= %25100, @@@@@@ ,  %25100 , !!asd!!, A%25%25Z/pt2%3Dx!!!! 
%2A%2A1+1%2F&%5E%253=1/pt3=1/pt4= %25100, @@@@@@ ,  %25100 , !!asd!!, 
A%25%25Z/pt5=1
+pt1= %25100, @@@@@@ ,  %25100 , !!asd!!, A%25%25Z/pt2%3Dx!!!! 
%2A%2A1+1%2F&%5E%253=1/pt3=1/pt4=1,1%3D1, 3%3D2+1, 1%3D3-2, 3%2F3%3D1, 
2%2F2%3D1, 2%2F1%3D2, 2%2F1%3D2 +1 -1,2%2F1%3D2 %2A3 %2F3/pt5=1
+pt1= %25100, @@@@@@ ,  %25100 , !!asd!!, A%25%25Z/pt2%3Dx!!!! 
%2A%2A1+1%2F&%5E%253=1/pt3=1/pt4=abc%3Axyz,  1123,1222,  
%3A%3A%3A%3A%3A%3A%3A/pt5=1
+pt1=1,1%3D1, 3%3D2+1, 1%3D3-2, 3%2F3%3D1, 2%2F2%3D1, 2%2F1%3D2, 2%2F1%3D2 +1 
-1,2%2F1%3D2 %2A3 %2F3/pt2%3Dx!!!! %2A%2A1+1%2F&%5E%253=1/pt3=1/pt4= %25100, 
@@@@@@ ,  %25100 , !!asd!!, A%25%25Z/pt5=1
+pt1=1,1%3D1, 3%3D2+1, 1%3D3-2, 3%2F3%3D1, 2%2F2%3D1, 2%2F1%3D2, 2%2F1%3D2 +1 
-1,2%2F1%3D2 %2A3 %2F3/pt2%3Dx!!!! %2A%2A1+1%2F&%5E%253=1/pt3=1/pt4=1,1%3D1, 
3%3D2+1, 1%3D3-2, 3%2F3%3D1, 2%2F2%3D1, 2%2F1%3D2, 2%2F1%3D2 +1 -1,2%2F1%3D2 
%2A3 %2F3/pt5=1
+pt1=1,1%3D1, 3%3D2+1, 1%3D3-2, 3%2F3%3D1, 2%2F2%3D1, 2%2F1%3D2, 2%2F1%3D2 +1 
-1,2%2F1%3D2 %2A3 %2F3/pt2%3Dx!!!! %2A%2A1+1%2F&%5E%253=1/pt3=1/pt4=abc%3Axyz,  
1123,1222,  %3A%3A%3A%3A%3A%3A%3A/pt5=1
+pt1=abc%3Axyz,  1123,1222,  %3A%3A%3A%3A%3A%3A%3A/pt2%3Dx!!!! 
%2A%2A1+1%2F&%5E%253=1/pt3=1/pt4= %25100, @@@@@@ ,  %25100 , !!asd!!, 
A%25%25Z/pt5=1
+pt1=abc%3Axyz,  1123,1222,  %3A%3A%3A%3A%3A%3A%3A/pt2%3Dx!!!! 
%2A%2A1+1%2F&%5E%253=1/pt3=1/pt4=1,1%3D1, 3%3D2+1, 1%3D3-2, 3%2F3%3D1, 
2%2F2%3D1, 2%2F1%3D2, 2%2F1%3D2 +1 -1,2%2F1%3D2 %2A3 %2F3/pt5=1
+pt1=abc%3Axyz,  1123,1222,  %3A%3A%3A%3A%3A%3A%3A/pt2%3Dx!!!! 
%2A%2A1+1%2F&%5E%253=1/pt3=1/pt4=abc%3Axyz,  1123,1222,  
%3A%3A%3A%3A%3A%3A%3A/pt5=1
+
+-- !sql_where3 --
+0      1,1=1, 3=2+1, 1=3-2, 3/3=1, 2/2=1, 2/1=2, 2/1=2 +1 -1,2/1=2 *3 /3       
1       1       1,1=1, 3=2+1, 1=3-2, 3/3=1, 2/2=1, 2/1=2, 2/1=2 +1 -1,2/1=2 *3 
/3       1
+100     %100, @@@@@@ ,  %100 , !!asd!!, A%%Z   1       1       1,1=1, 3=2+1, 
1=3-2, 3/3=1, 2/2=1, 2/1=2, 2/1=2 +1 -1,2/1=2 *3 /3       1
+200    abc:xyz,  1123,1222,  :::::::   1       1       1,1=1, 3=2+1, 1=3-2, 
3/3=1, 2/2=1, 2/1=2, 2/1=2 +1 -1,2/1=2 *3 /3       1
+
+-- !sql_where3 --
+1      1,1=1, 3=2+1, 1=3-2, 3/3=1, 2/2=1, 2/1=2, 2/1=2 +1 -1,2/1=2 *3 /3       
1       1        %100, @@@@@@ ,  %100 , !!asd!!, A%%Z   1
+101     %100, @@@@@@ ,  %100 , !!asd!!, A%%Z   1       1        %100, @@@@@@ , 
 %100 , !!asd!!, A%%Z   1
+201    abc:xyz,  1123,1222,  :::::::   1       1        %100, @@@@@@ ,  %100 , 
!!asd!!, A%%Z   1
+
+-- !sql_where3 --
+2      1,1=1, 3=2+1, 1=3-2, 3/3=1, 2/2=1, 2/1=2, 2/1=2 +1 -1,2/1=2 *3 /3       
1       1       abc:xyz,  1123,1222,  :::::::   1
+102     %100, @@@@@@ ,  %100 , !!asd!!, A%%Z   1       1       abc:xyz,  
1123,1222,  :::::::   1
+202    abc:xyz,  1123,1222,  :::::::   1       1       abc:xyz,  1123,1222,  
:::::::   1
+
+-- !sql1 --
+0      1,1=1, 3=2+1, 1=3-2, 3/3=1, 2/2=1, 2/1=2, 2/1=2 +1 -1,2/1=2 *3 /3
+0      1,1=1, 3=2+1, 1=3-2, 3/3=1, 2/2=1, 2/1=2, 2/1=2 +1 -1,2/1=2 *3 /3
+1       %100, @@@@@@ ,  %100 , !!asd!!, A%%Z
+2      abc:xyz,  1123,1222,  :::::::
+100     %100, @@@@@@ ,  %100 , !!asd!!, A%%Z
+200    abc:xyz,  1123,1222,  :::::::
+
+-- !sql2 --
+pt= %25100, @@@@@@ ,  %25100 , !!asd!!, A%25%25Z
+pt=1,1%3D1, 3%3D2+1, 1%3D3-2, 3%2F3%3D1, 2%2F2%3D1, 2%2F1%3D2, 2%2F1%3D2 +1 
-1,2%2F1%3D2 %2A3 %2F3
+pt=abc%3Axyz,  1123,1222,  %3A%3A%3A%3A%3A%3A%3A
+
+-- !sql_where1 --
+0      1,1=1, 3=2+1, 1=3-2, 3/3=1, 2/2=1, 2/1=2, 2/1=2 +1 -1,2/1=2 *3 /3
+0      1,1=1, 3=2+1, 1=3-2, 3/3=1, 2/2=1, 2/1=2, 2/1=2 +1 -1,2/1=2 *3 /3
+
+-- !sql_where1 --
+1       %100, @@@@@@ ,  %100 , !!asd!!, A%%Z
+100     %100, @@@@@@ ,  %100 , !!asd!!, A%%Z
+
+-- !sql_where1 --
+2      abc:xyz,  1123,1222,  :::::::
+200    abc:xyz,  1123,1222,  :::::::
+
+-- !sql3 --
+0      1,1=1, 3=2+1, 1=3-2, 3/3=1, 2/2=1, 2/1=2, 2/1=2 +1 -1,2/1=2 *3 /3       
1,1=1, 3=2+1, 1=3-2, 3/3=1, 2/2=1, 2/1=2, 2/1=2 +1 -1,2/1=2 *3 /3
+1      1,1=1, 3=2+1, 1=3-2, 3/3=1, 2/2=1, 2/1=2, 2/1=2 +1 -1,2/1=2 *3 /3       
 %100, @@@@@@ ,  %100 , !!asd!!, A%%Z
+2      1,1=1, 3=2+1, 1=3-2, 3/3=1, 2/2=1, 2/1=2, 2/1=2 +1 -1,2/1=2 *3 /3       
abc:xyz,  1123,1222,  :::::::
+100     %100, @@@@@@ ,  %100 , !!asd!!, A%%Z   1,1=1, 3=2+1, 1=3-2, 3/3=1, 
2/2=1, 2/1=2, 2/1=2 +1 -1,2/1=2 *3 /3
+101     %100, @@@@@@ ,  %100 , !!asd!!, A%%Z    %100, @@@@@@ ,  %100 , 
!!asd!!, A%%Z
+102     %100, @@@@@@ ,  %100 , !!asd!!, A%%Z   abc:xyz,  1123,1222,  :::::::
+200    abc:xyz,  1123,1222,  :::::::   1,1=1, 3=2+1, 1=3-2, 3/3=1, 2/2=1, 
2/1=2, 2/1=2 +1 -1,2/1=2 *3 /3
+201    abc:xyz,  1123,1222,  :::::::    %100, @@@@@@ ,  %100 , !!asd!!, A%%Z
+202    abc:xyz,  1123,1222,  :::::::   abc:xyz,  1123,1222,  :::::::
+
+-- !sql4 --
+pt1= %25100, @@@@@@ ,  %25100 , !!asd!!, A%25%25Z/pt2%3Dx!!!! 
%2A%2A1+1%2F&%5E%253= %25100, @@@@@@ ,  %25100 , !!asd!!, A%25%25Z
+pt1= %25100, @@@@@@ ,  %25100 , !!asd!!, A%25%25Z/pt2%3Dx!!!! 
%2A%2A1+1%2F&%5E%253=1,1%3D1, 3%3D2+1, 1%3D3-2, 3%2F3%3D1, 2%2F2%3D1, 
2%2F1%3D2, 2%2F1%3D2 +1 -1,2%2F1%3D2 %2A3 %2F3
+pt1= %25100, @@@@@@ ,  %25100 , !!asd!!, A%25%25Z/pt2%3Dx!!!! 
%2A%2A1+1%2F&%5E%253=abc%3Axyz,  1123,1222,  %3A%3A%3A%3A%3A%3A%3A
+pt1=1,1%3D1, 3%3D2+1, 1%3D3-2, 3%2F3%3D1, 2%2F2%3D1, 2%2F1%3D2, 2%2F1%3D2 +1 
-1,2%2F1%3D2 %2A3 %2F3/pt2%3Dx!!!! %2A%2A1+1%2F&%5E%253= %25100, @@@@@@ ,  
%25100 , !!asd!!, A%25%25Z
+pt1=1,1%3D1, 3%3D2+1, 1%3D3-2, 3%2F3%3D1, 2%2F2%3D1, 2%2F1%3D2, 2%2F1%3D2 +1 
-1,2%2F1%3D2 %2A3 %2F3/pt2%3Dx!!!! %2A%2A1+1%2F&%5E%253=1,1%3D1, 3%3D2+1, 
1%3D3-2, 3%2F3%3D1, 2%2F2%3D1, 2%2F1%3D2, 2%2F1%3D2 +1 -1,2%2F1%3D2 %2A3 %2F3
+pt1=1,1%3D1, 3%3D2+1, 1%3D3-2, 3%2F3%3D1, 2%2F2%3D1, 2%2F1%3D2, 2%2F1%3D2 +1 
-1,2%2F1%3D2 %2A3 %2F3/pt2%3Dx!!!! %2A%2A1+1%2F&%5E%253=abc%3Axyz,  1123,1222,  
%3A%3A%3A%3A%3A%3A%3A
+pt1=abc%3Axyz,  1123,1222,  %3A%3A%3A%3A%3A%3A%3A/pt2%3Dx!!!! 
%2A%2A1+1%2F&%5E%253= %25100, @@@@@@ ,  %25100 , !!asd!!, A%25%25Z
+pt1=abc%3Axyz,  1123,1222,  %3A%3A%3A%3A%3A%3A%3A/pt2%3Dx!!!! 
%2A%2A1+1%2F&%5E%253=1,1%3D1, 3%3D2+1, 1%3D3-2, 3%2F3%3D1, 2%2F2%3D1, 
2%2F1%3D2, 2%2F1%3D2 +1 -1,2%2F1%3D2 %2A3 %2F3
+pt1=abc%3Axyz,  1123,1222,  %3A%3A%3A%3A%3A%3A%3A/pt2%3Dx!!!! 
%2A%2A1+1%2F&%5E%253=abc%3Axyz,  1123,1222,  %3A%3A%3A%3A%3A%3A%3A
+
+-- !sql_where2 --
+0      1,1=1, 3=2+1, 1=3-2, 3/3=1, 2/2=1, 2/1=2, 2/1=2 +1 -1,2/1=2 *3 /3       
1,1=1, 3=2+1, 1=3-2, 3/3=1, 2/2=1, 2/1=2, 2/1=2 +1 -1,2/1=2 *3 /3
+100     %100, @@@@@@ ,  %100 , !!asd!!, A%%Z   1,1=1, 3=2+1, 1=3-2, 3/3=1, 
2/2=1, 2/1=2, 2/1=2 +1 -1,2/1=2 *3 /3
+200    abc:xyz,  1123,1222,  :::::::   1,1=1, 3=2+1, 1=3-2, 3/3=1, 2/2=1, 
2/1=2, 2/1=2 +1 -1,2/1=2 *3 /3
+
+-- !sql_where2 --
+1      1,1=1, 3=2+1, 1=3-2, 3/3=1, 2/2=1, 2/1=2, 2/1=2 +1 -1,2/1=2 *3 /3       
 %100, @@@@@@ ,  %100 , !!asd!!, A%%Z
+101     %100, @@@@@@ ,  %100 , !!asd!!, A%%Z    %100, @@@@@@ ,  %100 , 
!!asd!!, A%%Z
+201    abc:xyz,  1123,1222,  :::::::    %100, @@@@@@ ,  %100 , !!asd!!, A%%Z
+
+-- !sql_where2 --
+2      1,1=1, 3=2+1, 1=3-2, 3/3=1, 2/2=1, 2/1=2, 2/1=2 +1 -1,2/1=2 *3 /3       
abc:xyz,  1123,1222,  :::::::
+102     %100, @@@@@@ ,  %100 , !!asd!!, A%%Z   abc:xyz,  1123,1222,  :::::::
+202    abc:xyz,  1123,1222,  :::::::   abc:xyz,  1123,1222,  :::::::
+
+-- !sql5 --
+0      1,1=1, 3=2+1, 1=3-2, 3/3=1, 2/2=1, 2/1=2, 2/1=2 +1 -1,2/1=2 *3 /3       
1       1       1,1=1, 3=2+1, 1=3-2, 3/3=1, 2/2=1, 2/1=2, 2/1=2 +1 -1,2/1=2 *3 
/3       1
+1      1,1=1, 3=2+1, 1=3-2, 3/3=1, 2/2=1, 2/1=2, 2/1=2 +1 -1,2/1=2 *3 /3       
1       1        %100, @@@@@@ ,  %100 , !!asd!!, A%%Z   1
+2      1,1=1, 3=2+1, 1=3-2, 3/3=1, 2/2=1, 2/1=2, 2/1=2 +1 -1,2/1=2 *3 /3       
1       1       abc:xyz,  1123,1222,  :::::::   1
+100     %100, @@@@@@ ,  %100 , !!asd!!, A%%Z   1       1       1,1=1, 3=2+1, 
1=3-2, 3/3=1, 2/2=1, 2/1=2, 2/1=2 +1 -1,2/1=2 *3 /3       1
+101     %100, @@@@@@ ,  %100 , !!asd!!, A%%Z   1       1        %100, @@@@@@ , 
 %100 , !!asd!!, A%%Z   1
+102     %100, @@@@@@ ,  %100 , !!asd!!, A%%Z   1       1       abc:xyz,  
1123,1222,  :::::::   1
+200    abc:xyz,  1123,1222,  :::::::   1       1       1,1=1, 3=2+1, 1=3-2, 
3/3=1, 2/2=1, 2/1=2, 2/1=2 +1 -1,2/1=2 *3 /3       1
+201    abc:xyz,  1123,1222,  :::::::   1       1        %100, @@@@@@ ,  %100 , 
!!asd!!, A%%Z   1
+202    abc:xyz,  1123,1222,  :::::::   1       1       abc:xyz,  1123,1222,  
:::::::   1
+
+-- !sql6 --
+pt1= %25100, @@@@@@ ,  %25100 , !!asd!!, A%25%25Z/pt2%3Dx!!!! 
%2A%2A1+1%2F&%5E%253=1/pt3=1/pt4= %25100, @@@@@@ ,  %25100 , !!asd!!, 
A%25%25Z/pt5=1
+pt1= %25100, @@@@@@ ,  %25100 , !!asd!!, A%25%25Z/pt2%3Dx!!!! 
%2A%2A1+1%2F&%5E%253=1/pt3=1/pt4=1,1%3D1, 3%3D2+1, 1%3D3-2, 3%2F3%3D1, 
2%2F2%3D1, 2%2F1%3D2, 2%2F1%3D2 +1 -1,2%2F1%3D2 %2A3 %2F3/pt5=1
+pt1= %25100, @@@@@@ ,  %25100 , !!asd!!, A%25%25Z/pt2%3Dx!!!! 
%2A%2A1+1%2F&%5E%253=1/pt3=1/pt4=abc%3Axyz,  1123,1222,  
%3A%3A%3A%3A%3A%3A%3A/pt5=1
+pt1=1,1%3D1, 3%3D2+1, 1%3D3-2, 3%2F3%3D1, 2%2F2%3D1, 2%2F1%3D2, 2%2F1%3D2 +1 
-1,2%2F1%3D2 %2A3 %2F3/pt2%3Dx!!!! %2A%2A1+1%2F&%5E%253=1/pt3=1/pt4= %25100, 
@@@@@@ ,  %25100 , !!asd!!, A%25%25Z/pt5=1
+pt1=1,1%3D1, 3%3D2+1, 1%3D3-2, 3%2F3%3D1, 2%2F2%3D1, 2%2F1%3D2, 2%2F1%3D2 +1 
-1,2%2F1%3D2 %2A3 %2F3/pt2%3Dx!!!! %2A%2A1+1%2F&%5E%253=1/pt3=1/pt4=1,1%3D1, 
3%3D2+1, 1%3D3-2, 3%2F3%3D1, 2%2F2%3D1, 2%2F1%3D2, 2%2F1%3D2 +1 -1,2%2F1%3D2 
%2A3 %2F3/pt5=1
+pt1=1,1%3D1, 3%3D2+1, 1%3D3-2, 3%2F3%3D1, 2%2F2%3D1, 2%2F1%3D2, 2%2F1%3D2 +1 
-1,2%2F1%3D2 %2A3 %2F3/pt2%3Dx!!!! %2A%2A1+1%2F&%5E%253=1/pt3=1/pt4=abc%3Axyz,  
1123,1222,  %3A%3A%3A%3A%3A%3A%3A/pt5=1
+pt1=abc%3Axyz,  1123,1222,  %3A%3A%3A%3A%3A%3A%3A/pt2%3Dx!!!! 
%2A%2A1+1%2F&%5E%253=1/pt3=1/pt4= %25100, @@@@@@ ,  %25100 , !!asd!!, 
A%25%25Z/pt5=1
+pt1=abc%3Axyz,  1123,1222,  %3A%3A%3A%3A%3A%3A%3A/pt2%3Dx!!!! 
%2A%2A1+1%2F&%5E%253=1/pt3=1/pt4=1,1%3D1, 3%3D2+1, 1%3D3-2, 3%2F3%3D1, 
2%2F2%3D1, 2%2F1%3D2, 2%2F1%3D2 +1 -1,2%2F1%3D2 %2A3 %2F3/pt5=1
+pt1=abc%3Axyz,  1123,1222,  %3A%3A%3A%3A%3A%3A%3A/pt2%3Dx!!!! 
%2A%2A1+1%2F&%5E%253=1/pt3=1/pt4=abc%3Axyz,  1123,1222,  
%3A%3A%3A%3A%3A%3A%3A/pt5=1
+
+-- !sql_where3 --
+0      1,1=1, 3=2+1, 1=3-2, 3/3=1, 2/2=1, 2/1=2, 2/1=2 +1 -1,2/1=2 *3 /3       
1       1       1,1=1, 3=2+1, 1=3-2, 3/3=1, 2/2=1, 2/1=2, 2/1=2 +1 -1,2/1=2 *3 
/3       1
+100     %100, @@@@@@ ,  %100 , !!asd!!, A%%Z   1       1       1,1=1, 3=2+1, 
1=3-2, 3/3=1, 2/2=1, 2/1=2, 2/1=2 +1 -1,2/1=2 *3 /3       1
+200    abc:xyz,  1123,1222,  :::::::   1       1       1,1=1, 3=2+1, 1=3-2, 
3/3=1, 2/2=1, 2/1=2, 2/1=2 +1 -1,2/1=2 *3 /3       1
+
+-- !sql_where3 --
+1      1,1=1, 3=2+1, 1=3-2, 3/3=1, 2/2=1, 2/1=2, 2/1=2 +1 -1,2/1=2 *3 /3       
1       1        %100, @@@@@@ ,  %100 , !!asd!!, A%%Z   1
+101     %100, @@@@@@ ,  %100 , !!asd!!, A%%Z   1       1        %100, @@@@@@ , 
 %100 , !!asd!!, A%%Z   1
+201    abc:xyz,  1123,1222,  :::::::   1       1        %100, @@@@@@ ,  %100 , 
!!asd!!, A%%Z   1
+
+-- !sql_where3 --
+2      1,1=1, 3=2+1, 1=3-2, 3/3=1, 2/2=1, 2/1=2, 2/1=2 +1 -1,2/1=2 *3 /3       
1       1       abc:xyz,  1123,1222,  :::::::   1
+102     %100, @@@@@@ ,  %100 , !!asd!!, A%%Z   1       1       abc:xyz,  
1123,1222,  :::::::   1
+202    abc:xyz,  1123,1222,  :::::::   1       1       abc:xyz,  1123,1222,  
:::::::   1
+
diff --git 
a/regression-test/suites/external_table_p0/hive/test_hive_special_char_partition.groovy
 
b/regression-test/suites/external_table_p0/hive/test_hive_special_char_partition.groovy
index 8b78ab2e3ce..d22041459d5 100644
--- 
a/regression-test/suites/external_table_p0/hive/test_hive_special_char_partition.groovy
+++ 
b/regression-test/suites/external_table_p0/hive/test_hive_special_char_partition.groovy
@@ -23,14 +23,18 @@ suite("test_hive_special_char_partition", 
"p0,external,hive,external_docker,exte
     }
 
     for (String hivePrefix : ["hive2", "hive3"]) {
+
+        setHivePrefix(hivePrefix)
         String hms_port = context.config.otherConfigs.get(hivePrefix + 
"HmsPort")
+        String hdfs_port = context.config.otherConfigs.get(hivePrefix + 
"HdfsPort")
         String catalog_name = "${hivePrefix}_test_hive_special_char_partition"
         String externalEnvIp = context.config.otherConfigs.get("externalEnvIp")
 
         sql """drop catalog if exists ${catalog_name}"""
         sql """create catalog if not exists ${catalog_name} properties (
-            "type"="hms",
-            'hive.metastore.uris' = 'thrift://${externalEnvIp}:${hms_port}'
+            'type'='hms',
+            'hive.metastore.uris' = 'thrift://${externalEnvIp}:${hms_port}',
+            'fs.defaultFS' = 'hdfs://${externalEnvIp}:${hdfs_port}'
         );"""
         logger.info("catalog " + catalog_name + " created")
         sql """switch ${catalog_name};"""
@@ -49,6 +53,197 @@ suite("test_hive_special_char_partition", 
"p0,external,hive,external_docker,exte
         qt_11 "select * from special_character_1_partition where 
part='2023\\\\01\\\\01'"
         qt_12 "select * from special_character_1_partition where 
part='2023%01%01'"
         qt_13 "select * from special_character_1_partition where 
part='2023#01#01'"
+
+
+
+        // append some case.
+        String table_name_1 = "partition_special_characters_1"  
+        String table_name_2 = "partition_special_characters_2" 
+        String table_name_3 = "partition_special_characters_3" 
+    
+        hive_docker """ set hive.stats.column.autogather=false """
+        hive_docker """ use `default`"""
+        def special_characters = [
+                                    "1,1=1, 3=2+1, 1=3-2, 3/3=1, 2/2=1, 2/1=2, 
2/1=2 +1 -1,2/1=2 *3 /3",
+                                    " %100, @@@@@@ ,  %100 , !!asd!!, A%%Z",
+                                    "abc:xyz,  1123,1222,  :::::::"
+                ]
+
+
+        logger.info(""" docker insert 1""")            
+
+        hive_docker """ drop table if exists ${table_name_1} """ 
+        hive_docker """ create table ${table_name_1} (id int) partitioned by 
(pt string) """
+        special_characters.eachWithIndex { item, index ->
+            hive_docker """ insert into  ${table_name_1} 
partition(pt="${item}")      values ("${index}"); """
+            hive_docker """ insert into  ${table_name_1} 
partition(pt="${item}")      values ("${index*100}"); """
+            println("Index: ${index}, Item: ${item}")    
+        }
+
+        
+        sql """refresh catalog ${catalog_name} """
+        sql """switch ${catalog_name} """
+        sql """ use `default` """
+
+        qt_sql1 """ select * from ${table_name_1} order by id """
+        qt_sql2 """ show partitions from ${table_name_1} """
+
+        special_characters.eachWithIndex { item, index ->
+            qt_sql_where1 """ select * from  ${table_name_1} where pt = 
"${item}" order by id""" 
+        }
+
+
+
+        logger.info(""" docker insert 2""")            
+        hive_docker """ drop table if exists ${table_name_2} """ 
+        hive_docker """ create table ${table_name_2} (id int) partitioned by 
(pt1 string, `pt2=x!!!! **1+1/&^%3` string) """
+
+        special_characters.eachWithIndex { outerItem, outerIndex ->
+            special_characters.eachWithIndex { innerItem, innerIndex ->
+                
+                def insert_value = outerIndex * 100 + innerIndex;
+
+                hive_docker """ insert into  ${table_name_2} 
partition(pt1="${outerItem}",`pt2=x!!!! **1+1/&^%3`="${innerItem}")   values 
("${insert_value}"); """
+                println("  Outer Item: ${outerItem}, Inner Item: ${innerItem}, 
value = ${insert_value}")
+            }
+        }   
+
+        
+        sql """refresh catalog ${catalog_name} """
+        sql """switch ${catalog_name} """
+        sql """ use `default` """
+
+        qt_sql3 """ select * from ${table_name_2} order by id """
+        qt_sql4 """ show partitions from ${table_name_2} """
+
+        special_characters.eachWithIndex { item, index ->
+            qt_sql_where2 """ select * from  ${table_name_2} where `pt2=x!!!! 
**1+1/&^%3` = "${item}"  order by id""" 
+        }
+
+
+        logger.info(""" docker insert 3""")            
+        hive_docker """ drop table if exists ${table_name_3} """ 
+        hive_docker """ create table ${table_name_3} (id int) partitioned by 
(pt1 string, `pt2=x!!!! **1+1/&^%3` string,pt3 string,pt4 string,pt5 string) """
+
+
+        special_characters.eachWithIndex { outerItem, outerIndex ->
+            special_characters.eachWithIndex { innerItem, innerIndex ->
+                
+                def insert_value = outerIndex * 100 + innerIndex;
+                hive_docker """ insert into  ${table_name_3} 
partition(pt1="${outerItem}", `pt2=x!!!! **1+1/&^%3`="1", 
pt3="1",pt4="${innerItem}",pt5="1")   values ("${insert_value}"); """
+                println("  Outer Item: ${outerItem}, Inner Item: ${innerItem}, 
value = ${insert_value}")
+            }
+        }   
+
+                    
+        sql """refresh catalog ${catalog_name} """
+        sql """switch ${catalog_name} """
+        sql """ use `default` """
+
+        qt_sql5 """ select * from ${table_name_3} order by id """
+        qt_sql6 """ show partitions from ${table_name_3} """
+
+        special_characters.eachWithIndex { item, index ->
+            qt_sql_where3 """ select * from  ${table_name_3} where pt4 = 
"${item}"  order by id""" 
+        }
+
+
+
+
+
+
+        logger.info("""  ---------- doris insert  -------------""")
+
+        logger.info(""" doris insert 1""")            
+        hive_docker """ drop table if exists ${table_name_1} """ 
+        hive_docker """ create table ${table_name_1} (id int) partitioned by 
(pt string) """
+        sql """refresh catalog ${catalog_name} """
+        sql """switch ${catalog_name} """
+        sql """ use `default` """
+        special_characters.eachWithIndex { item, index ->
+            sql """ insert into  ${table_name_1} (pt,id)  values 
("${item}","${index}"); """
+            sql """ insert into  ${table_name_1} (pt,id)  values 
("${item}","${index*100}"); """
+
+            println("Index: ${index}, Item: ${item}")    
+        }
+
+        
+        sql """refresh catalog ${catalog_name} """
+        sql """switch ${catalog_name} """
+        sql """ use `default` """
+
+        qt_sql1 """ select * from ${table_name_1} order by id """
+        qt_sql2 """ show partitions from ${table_name_1} """
+
+        special_characters.eachWithIndex { item, index ->
+            qt_sql_where1 """ select * from  ${table_name_1} where pt = 
"${item}" order by id """ 
+        }
+
+
+
+        logger.info(""" doris insert 2""")            
+        hive_docker """ drop table if exists ${table_name_2} """ 
+        hive_docker """ create table ${table_name_2} (id int) partitioned by 
(pt1 string, `pt2=x!!!! **1+1/&^%3` string) """
+        sql """refresh catalog ${catalog_name} """
+        sql """switch ${catalog_name} """
+        sql """ use `default` """
+
+        special_characters.eachWithIndex { outerItem, outerIndex ->
+            special_characters.eachWithIndex { innerItem, innerIndex ->
+                
+                def insert_value = outerIndex * 100 + innerIndex;
+
+                sql """ insert into  ${table_name_2} (pt1,`pt2=x!!!! 
**1+1/&^%3`,id)   values ("${outerItem}","${innerItem}","${insert_value}"); """
+                println("  Outer Item: ${outerItem}, Inner Item: ${innerItem}, 
value = ${insert_value}")
+            }
+        }   
+
+        
+        sql """refresh catalog ${catalog_name} """
+        sql """switch ${catalog_name} """
+        sql """ use `default` """
+
+        qt_sql3 """ select * from ${table_name_2} order by id """
+        qt_sql4 """ show partitions from ${table_name_2} """
+
+        special_characters.eachWithIndex { item, index ->
+            qt_sql_where2 """ select * from  ${table_name_2} where `pt2=x!!!! 
**1+1/&^%3` = "${item}"  order by id""" 
+        }
+
+
+
+
+        logger.info(""" docker insert 3""")            
+        hive_docker """ drop table if exists ${table_name_3} """ 
+        hive_docker """ create table ${table_name_3} (id int) partitioned by 
(pt1 string, `pt2=x!!!! **1+1/&^%3` string,pt3 string,pt4 string,pt5 string) """
+        sql """refresh catalog ${catalog_name} """
+        sql """switch ${catalog_name} """
+        sql """ use `default` """
+
+        special_characters.eachWithIndex { outerItem, outerIndex ->
+            special_characters.eachWithIndex { innerItem, innerIndex ->
+                
+                def insert_value = outerIndex * 100 + innerIndex;
+                sql """ insert into  ${table_name_3} (pt1, `pt2=x!!!! 
**1+1/&^%3`, pt3,pt4,pt5,id)   values 
("${outerItem}","1","1","${innerItem}","1","${insert_value}"); """
+                println("  Outer Item: ${outerItem}, Inner Item: ${innerItem}, 
value = ${insert_value}")
+            }
+        }   
+
+                    
+        sql """refresh catalog ${catalog_name} """
+        sql """switch ${catalog_name} """
+        sql """ use `default` """
+
+        qt_sql5 """ select * from ${table_name_3} order by id """
+        qt_sql6 """ show partitions from ${table_name_3} """
+
+        special_characters.eachWithIndex { item, index ->
+            qt_sql_where3 """ select * from  ${table_name_3} where pt4 = 
"${item}"  order by id""" 
+        }
+
+
+
+
     }
 }
 


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

Reply via email to