Index: third_party/sqlite/src/test/like.test |
diff --git a/third_party/sqlite/src/test/like.test b/third_party/sqlite/src/test/like.test |
index a2de6866b5cc09ace6c21ea0ab4b7f357b9a6066..229f3868809a8dac68af212ac3a6b5761793aab2 100644 |
--- a/third_party/sqlite/src/test/like.test |
+++ b/third_party/sqlite/src/test/like.test |
@@ -194,6 +194,31 @@ do_test like-3.4 { |
set sqlite_like_count |
} 0 |
+# The LIKE optimization still works when the RHS is a string with no |
+# wildcard. Ticket [e090183531fc2747] |
+# |
+do_test like-3.4.2 { |
+ queryplan { |
+ SELECT x FROM t1 WHERE x LIKE 'a' ORDER BY 1; |
+ } |
+} {a nosort {} i1} |
+do_test like-3.4.3 { |
+ queryplan { |
+ SELECT x FROM t1 WHERE x LIKE 'ab' ORDER BY 1; |
+ } |
+} {ab nosort {} i1} |
+do_test like-3.4.4 { |
+ queryplan { |
+ SELECT x FROM t1 WHERE x LIKE 'abcd' ORDER BY 1; |
+ } |
+} {abcd nosort {} i1} |
+do_test like-3.4.5 { |
+ queryplan { |
+ SELECT x FROM t1 WHERE x LIKE 'abcde' ORDER BY 1; |
+ } |
+} {nosort {} i1} |
+ |
+ |
# Partial optimization when the pattern does not end in '%' |
# |
do_test like-3.5 { |
@@ -309,6 +334,26 @@ do_test like-3.24 { |
set sqlite_like_count |
} 6 |
+# GLOB optimization when there is no wildcard. Ticket [e090183531fc2747] |
+# |
+do_test like-3.25 { |
+ queryplan { |
+ SELECT x FROM t1 WHERE x GLOB 'a' ORDER BY 1; |
+ } |
+} {a nosort {} i1} |
+do_test like-3.26 { |
+ queryplan { |
+ SELECT x FROM t1 WHERE x GLOB 'abcd' ORDER BY 1; |
+ } |
+} {abcd nosort {} i1} |
+do_test like-3.27 { |
+ queryplan { |
+ SELECT x FROM t1 WHERE x GLOB 'abcde' ORDER BY 1; |
+ } |
+} {nosort {} i1} |
+ |
+ |
+ |
# No optimization if the LHS of the LIKE is not a column name or |
# if the RHS is not a string. |
# |
@@ -733,5 +778,94 @@ do_test like-10.15 { |
} |
} {12 123 scan 5 like 6} |
+# LIKE and GLOB where the default collating sequence is not appropriate |
+# but an index with the appropriate collating sequence exists. |
+# |
+do_test like-11.0 { |
+ execsql { |
+ CREATE TABLE t11( |
+ a INTEGER PRIMARY KEY, |
+ b TEXT COLLATE nocase, |
+ c TEXT COLLATE binary |
+ ); |
+ INSERT INTO t11 VALUES(1, 'a','a'); |
+ INSERT INTO t11 VALUES(2, 'ab','ab'); |
+ INSERT INTO t11 VALUES(3, 'abc','abc'); |
+ INSERT INTO t11 VALUES(4, 'abcd','abcd'); |
+ INSERT INTO t11 VALUES(5, 'A','A'); |
+ INSERT INTO t11 VALUES(6, 'AB','AB'); |
+ INSERT INTO t11 VALUES(7, 'ABC','ABC'); |
+ INSERT INTO t11 VALUES(8, 'ABCD','ABCD'); |
+ INSERT INTO t11 VALUES(9, 'x','x'); |
+ INSERT INTO t11 VALUES(10, 'yz','yz'); |
+ INSERT INTO t11 VALUES(11, 'X','X'); |
+ INSERT INTO t11 VALUES(12, 'YZ','YZ'); |
+ SELECT count(*) FROM t11; |
+ } |
+} {12} |
+do_test like-11.1 { |
+ queryplan { |
+ PRAGMA case_sensitive_like=OFF; |
+ SELECT b FROM t11 WHERE b LIKE 'abc%' ORDER BY a; |
+ } |
+} {abc abcd ABC ABCD nosort t11 *} |
+do_test like-11.2 { |
+ queryplan { |
+ PRAGMA case_sensitive_like=ON; |
+ SELECT b FROM t11 WHERE b LIKE 'abc%' ORDER BY a; |
+ } |
+} {abc abcd nosort t11 *} |
+do_test like-11.3 { |
+ queryplan { |
+ PRAGMA case_sensitive_like=OFF; |
+ CREATE INDEX t11b ON t11(b); |
+ SELECT b FROM t11 WHERE b LIKE 'abc%' ORDER BY a; |
+ } |
+} {abc abcd ABC ABCD sort {} t11b} |
+do_test like-11.4 { |
+ queryplan { |
+ PRAGMA case_sensitive_like=ON; |
+ SELECT b FROM t11 WHERE b LIKE 'abc%' ORDER BY a; |
+ } |
+} {abc abcd nosort t11 *} |
+do_test like-11.5 { |
+ queryplan { |
+ PRAGMA case_sensitive_like=OFF; |
+ DROP INDEX t11b; |
+ CREATE INDEX t11bnc ON t11(b COLLATE nocase); |
+ SELECT b FROM t11 WHERE b LIKE 'abc%' ORDER BY a; |
+ } |
+} {abc abcd ABC ABCD sort {} t11bnc} |
+do_test like-11.6 { |
+ queryplan { |
+ CREATE INDEX t11bb ON t11(b COLLATE binary); |
+ SELECT b FROM t11 WHERE b LIKE 'abc%' ORDER BY a; |
+ } |
+} {abc abcd ABC ABCD sort {} t11bnc} |
+do_test like-11.7 { |
+ queryplan { |
+ PRAGMA case_sensitive_like=ON; |
+ SELECT b FROM t11 WHERE b LIKE 'abc%' ORDER BY a; |
+ } |
+} {abc abcd sort {} t11bb} |
+do_test like-11.8 { |
+ queryplan { |
+ PRAGMA case_sensitive_like=OFF; |
+ SELECT b FROM t11 WHERE b GLOB 'abc*' ORDER BY a; |
+ } |
+} {abc abcd sort {} t11bb} |
+do_test like-11.9 { |
+ queryplan { |
+ CREATE INDEX t11cnc ON t11(c COLLATE nocase); |
+ CREATE INDEX t11cb ON t11(c COLLATE binary); |
+ SELECT c FROM t11 WHERE c LIKE 'abc%' ORDER BY a; |
+ } |
+} {abc abcd ABC ABCD sort {} t11cnc} |
+do_test like-11.10 { |
+ queryplan { |
+ SELECT c FROM t11 WHERE c GLOB 'abc*' ORDER BY a; |
+ } |
+} {abc abcd sort {} t11cb} |
+ |
finish_test |