| 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
 | 
| 
 |