aboutsummaryrefslogtreecommitdiff
path: root/test/like3.test
diff options
context:
space:
mode:
Diffstat (limited to 'test/like3.test')
-rw-r--r--test/like3.test88
1 files changed, 88 insertions, 0 deletions
diff --git a/test/like3.test b/test/like3.test
index a93e113d6..01d19a54f 100644
--- a/test/like3.test
+++ b/test/like3.test
@@ -275,4 +275,92 @@ 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
+
+# See forum thread https://sqlite.org/forum/info/d7b90d92ffbfc61f
+foreach enc {
+ UTF-8
+ UTF-16le
+ UTF-16be
+} {
+ ifcapable icu {
+ if {$enc=="UTF-8"} {
+ # The invalid UTF8 used in these tests is incompatible with ICU
+ # https://sqlite.org/forum/forumpost/2ca8a09a7e
+ continue
+ }
+ }
+ 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'"
+ set tn utf[string range $enc 4 end].$tn
+ do_execsql_test like3-8.$tn.1 {
+ CREATE TABLE t1(x);
+ }
+
+ do_execsql_test like3-8.$tn.2 {
+ PRAGMA encoding
+ } $enc
+
+ do_execsql_test like3-8.$tn.3 "
+ INSERT INTO t1 VALUES( $expr )
+ "
+
+ do_execsql_test like3-8.$tn.4 {
+ SELECT typeof(x) FROM t1
+ } {text}
+
+ set x [db one {SELECT x || '%' FROM t1}]
+
+ do_execsql_test like3-8.$tn.5 {
+ SELECT rowid FROM t1 WHERE x LIKE $x
+ } 1
+
+ do_execsql_test like3-8.$tn.6 {
+ CREATE INDEX i1 ON t1(x);
+ }
+
+ do_execsql_test like3-8.$tn.7 {
+ SELECT rowid FROM t1 WHERE x LIKE $x
+ } 1
+ }
+}
+
finish_test