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) <[email protected]>
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 <[email protected]>
---
.../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: [email protected]
For additional commands, e-mail: [email protected]