aboutsummaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
authordan <Dan Kennedy>2025-01-31 14:52:36 +0000
committerdan <Dan Kennedy>2025-01-31 14:52:36 +0000
commitf6ca35d88cad6521ad06c6c9e1bfe0e3066d8cbb (patch)
tree3d9bb8c7ade44432f4beb24748cffbe93dbbb469 /test
parenta0337903030a123f09eae41a5146993ff81d83e4 (diff)
downloadsqlite-f6ca35d88cad6521ad06c6c9e1bfe0e3066d8cbb.tar.gz
sqlite-f6ca35d88cad6521ad06c6c9e1bfe0e3066d8cbb.zip
Fix a problem with LIKE and GLOB processing in utf-16be databases in cases where the utf-8 encoding of a character ends with the byte 0xBF.
FossilOrigin-Name: 4b4f33d791fe4318c4597bee7d2f9e486ed223e731982af470f5cc0dbdc600fc
Diffstat (limited to 'test')
-rw-r--r--test/like3.test80
1 files changed, 80 insertions, 0 deletions
diff --git a/test/like3.test b/test/like3.test
index a93e113d6..2987e0e0e 100644
--- a/test/like3.test
+++ b/test/like3.test
@@ -275,4 +275,84 @@ do_eqp_test like3-6.240 {
}
}
+#-------------------------------------------------------------------------
+
+ifcapable utf16 {
+ reset_db
+ do_execsql_test like3-7.0 {
+ PRAGMA encoding = 'UTF-16be';
+
+ CREATE TABLE Example(word TEXT NOT NULL);
+ CREATE INDEX Example_word on Example(word);
+
+ INSERT INTO Example VALUES(char(0x307F));
+ }
+
+ do_execsql_test like3-7.1 {
+ SELECT char(0x307F)=='み';
+ } {1}
+
+ do_execsql_test like3-7.1 {
+ SELECT * FROM Example WHERE word GLOB 'み*'
+ } {み}
+
+ do_execsql_test like3-7.2 {
+ SELECT * FROM Example WHERE word >= char(0x307F) AND word < char(0x3080);
+ } {み}
+}
+
+#-------------------------------------------------------------------------
+reset_db
+
+foreach enc {
+ UTF-8
+ UTF-16le
+ UTF-16be
+} {
+ foreach {tn expr} {
+ 1 "CAST (X'FF' AS TEXT)"
+ 2 "CAST (X'FFBF' AS TEXT)"
+ 3 "CAST (X'FFBFBF' AS TEXT)"
+ 4 "CAST (X'FFBFBFBF' AS TEXT)"
+
+ 5 "'abc' || CAST (X'FF' AS TEXT)"
+ 6 "'def' || CAST (X'FFBF' AS TEXT)"
+ 7 "'ghi' || CAST (X'FFBFBF' AS TEXT)"
+ 8 "'jkl' || CAST (X'FFBFBFBF' AS TEXT)"
+ } {
+ reset_db
+ execsql "PRAGMA encoding = '$enc'"
+ do_execsql_test like3-8.$tn.0 {
+ CREATE TABLE t1(x);
+ }
+
+ do_execsql_test like3-8.$tn.1 {
+ PRAGMA encoding
+ } $enc
+
+ do_execsql_test like3-8.$tn.1 "
+ INSERT INTO t1 VALUES( $expr )
+ "
+
+ do_execsql_test like3-8.$tn.2 {
+ SELECT typeof(x) FROM t1
+ } {text}
+
+ set x [db one {SELECT x || '%' FROM t1}]
+
+ do_execsql_test like3-8.$tn.3 {
+ SELECT rowid FROM t1 WHERE x LIKE $x
+ } 1
+
+ do_execsql_test like3-8.$tn.4 {
+ CREATE INDEX i1 ON t1(x);
+ }
+
+ do_execsql_test like3-8.$tn.5 {
+ SELECT rowid FROM t1 WHERE x LIKE $x
+ } 1
+ }
+}
+
finish_test
+