Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Overview
Comment: | Fix another pattern for which the LIKE optimization does not work for a non-TEXT affinity. Case found by Manuel Rigger. |
---|---|
Downloads: | Tarball | ZIP archive | SQL archive |
Timelines: | family | ancestors | descendants | both | trunk |
Files: | files | file ages | folders |
SHA3-256: |
740201107ae802c12b678e388ea524db |
User & Date: | drh 2019-05-08 19:55:24 |
Context
2019-05-08
| ||
21:14 | Add another test case to cover a previously uncovered branch in the RBU module. (check-in: 30392985 user: dan tags: trunk) | |
19:55 | Fix another pattern for which the LIKE optimization does not work for a non-TEXT affinity. Case found by Manuel Rigger. (check-in: 74020110 user: drh tags: trunk) | |
19:32 | Simplification to the logic underlying PRAGMA case_sensitive_like. (check-in: ef0015fd user: drh tags: trunk) | |
Changes
Changes to src/whereexpr.c.
︙ | ︙ | |||
274 275 276 277 278 279 280 | ** The RHS pattern must not be '/%' because the termination condition ** will then become "x<'0'" and if the affinity is numeric, will then ** be converted into "x<0", which is incorrect. */ if( sqlite3Isdigit(zNew[0]) || zNew[0]=='-' || zNew[0]=='+' | | | 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 | ** The RHS pattern must not be '/%' because the termination condition ** will then become "x<'0'" and if the affinity is numeric, will then ** be converted into "x<0", which is incorrect. */ if( sqlite3Isdigit(zNew[0]) || zNew[0]=='-' || zNew[0]=='+' || (iTo>0 && zNew[iTo-1]=='0'-1) ){ if( pLeft->op!=TK_COLUMN || sqlite3ExprAffinity(pLeft)!=SQLITE_AFF_TEXT || IsVirtual(pLeft->y.pTab) /* Value might be numeric */ ){ sqlite3ExprDelete(db, pPrefix); sqlite3ValueFree(pVal); |
︙ | ︙ |
Changes to test/like3.test.
︙ | ︙ | |||
175 176 177 178 179 180 181 | SELECT x FROM t5b WHERE x GLOB '/a*'; } { QUERY PLAN `--SEARCH TABLE t5b USING COVERING INDEX sqlite_autoindex_t5b_1 (x>? AND x<?) } # 2019-05-01 | | > > > > > > > > > > > | 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 | SELECT x FROM t5b WHERE x GLOB '/a*'; } { QUERY PLAN `--SEARCH TABLE t5b USING COVERING INDEX sqlite_autoindex_t5b_1 (x>? AND x<?) } # 2019-05-01 # another case of the above reported on the mailing list by Manuel Rigger. # do_execsql_test like3-5.300 { CREATE TABLE t5c (c0 REAL); CREATE INDEX t5c_0 ON t5c(c0 COLLATE NOCASE); INSERT INTO t5c(rowid, c0) VALUES (99,'+/'); SELECT * FROM t5c WHERE (c0 LIKE '+/'); } {+/} # 2019-05-08 # Yet another case for the above from Manuel Rigger. # do_execsql_test like3-5.400 { DROP TABLE IF EXISTS t0; CREATE TABLE t0(c0 INT UNIQUE COLLATE NOCASE); INSERT INTO t0(c0) VALUES ('./'); SELECT * FROM t0 WHERE t0.c0 LIKE './'; } {./} # 2019-02-27 # Verify that the LIKE optimization works with an ESCAPE clause when # using PRAGMA case_sensitive_like=ON. # ifcapable !icu { do_execsql_test like3-6.100 { |
︙ | ︙ |