mirror of
https://github.com/sqlite/sqlite.git
synced 2025-08-08 14:02:16 +03:00
Refactor the LIKE optimization decision logic so that it uses
sqlite3AtoF() on both boundary keys to determine if the optimization can be used when the LHS is something that might not have TEXT affinity. Ticket [ce8717f0885af975]. See also [c94369cae9b561b1], [b043a54c3de54b28], [fd76310a5e843e07], and [158290c0abafde67]. FossilOrigin-Name: b4a9e09e60213ccff925d09f0b6e549e2a3e3862856c710f108779e2867dec76
This commit is contained in:
@@ -198,6 +198,15 @@ do_execsql_test like3-5.400 {
|
||||
SELECT * FROM t0 WHERE t0.c0 LIKE './';
|
||||
} {./}
|
||||
|
||||
# 2019-06-14
|
||||
# Ticket https://www.sqlite.org/src/info/ce8717f0885af975
|
||||
do_execsql_test like3-5.410 {
|
||||
DROP TABLE IF EXISTS t0;
|
||||
CREATE TABLE t0(c0 INT UNIQUE COLLATE NOCASE);
|
||||
INSERT INTO t0(c0) VALUES ('.1%');
|
||||
SELECT * FROM t0 WHERE t0.c0 LIKE '.1%';
|
||||
} {.1%}
|
||||
|
||||
|
||||
# 2019-02-27
|
||||
# Verify that the LIKE optimization works with an ESCAPE clause when
|
||||
|
@@ -41,7 +41,7 @@ do_test tkt-78e04-1.3 {
|
||||
}
|
||||
} {}
|
||||
do_test tkt-78e04-1.4 {
|
||||
db eval {EXPLAIN QUERY PLAN SELECT "" FROM "" WHERE "" LIKE '1abc%';}
|
||||
db eval {EXPLAIN QUERY PLAN SELECT "" FROM "" WHERE "" LIKE '1e5%';}
|
||||
} {/*SCAN TABLE USING COVERING INDEX i1*/}
|
||||
do_test tkt-78e04-1.5 {
|
||||
execsql {
|
||||
|
@@ -1311,10 +1311,13 @@ foreach {tn sql res filter} {
|
||||
{xFilter {SELECT rowid, a, b FROM 't6' WHERE b >= ? AND b < ?} 8 9}
|
||||
|
||||
1.3 "SELECT a FROM e6 WHERE b LIKE '8J%'" {3 4}
|
||||
{xFilter {SELECT rowid, a, b FROM 't6' WHERE b like ?} 8J%}
|
||||
{xFilter {SELECT rowid, a, b FROM 't6' WHERE b >= ? AND b < ? AND b like ?} 8J 8k 8J%}
|
||||
|
||||
1.4 "SELECT a FROM e6 WHERE b LIKE '8j%'" {3 4}
|
||||
{xFilter {SELECT rowid, a, b FROM 't6' WHERE b like ?} 8j%}
|
||||
{xFilter {SELECT rowid, a, b FROM 't6' WHERE b >= ? AND b < ? AND b like ?} 8J 8k 8j%}
|
||||
|
||||
1.5 "SELECT a FROM e6 WHERE b LIKE '8%'" {3 4}
|
||||
{xFilter {SELECT rowid, a, b FROM 't6' WHERE b like ?} 8%}
|
||||
} {
|
||||
set echo_module {}
|
||||
do_execsql_test 18.$tn.1 $sql $res
|
||||
@@ -1323,11 +1326,14 @@ foreach {tn sql res filter} {
|
||||
|
||||
do_execsql_test 18.2.0 { PRAGMA case_sensitive_like = ON }
|
||||
foreach {tn sql res filter} {
|
||||
2.1 "SELECT a FROM e6 WHERE b LIKE '8J%'" {3 4}
|
||||
{xFilter {SELECT rowid, a, b FROM 't6' WHERE b like ?} 8J%}
|
||||
2.1 "SELECT a FROM e6 WHERE b LIKE '8%'" {3 4}
|
||||
{xFilter {SELECT rowid, a, b FROM 't6' WHERE b like ?} 8%}
|
||||
|
||||
2.2 "SELECT a FROM e6 WHERE b LIKE '8j%'" {}
|
||||
{xFilter {SELECT rowid, a, b FROM 't6' WHERE b like ?} 8j%}
|
||||
{xFilter {SELECT rowid, a, b FROM 't6' WHERE b >= ? AND b < ? AND b like ?} 8j 8k 8j%}
|
||||
|
||||
2.3 "SELECT a FROM e6 WHERE b LIKE '8J%'" {3 4}
|
||||
{xFilter {SELECT rowid, a, b FROM 't6' WHERE b >= ? AND b < ? AND b like ?} 8J 8K 8J%}
|
||||
} {
|
||||
set echo_module {}
|
||||
do_execsql_test 18.$tn.1 $sql $res
|
||||
|
@@ -32,13 +32,27 @@ do_execsql_test 1.0 {
|
||||
|
||||
foreach {tn sql expect} {
|
||||
1 "SELECT * FROM e6 WHERE b LIKE '8abc'" {
|
||||
xBestIndex {SELECT rowid, a, b FROM 't6' WHERE b like ?}
|
||||
xFilter {SELECT rowid, a, b FROM 't6' WHERE b like ?} 8abc
|
||||
xBestIndex
|
||||
{SELECT rowid, a, b FROM 't6' WHERE b >= ? AND b < ? AND b like ?}
|
||||
xFilter
|
||||
{SELECT rowid, a, b FROM 't6' WHERE b >= ? AND b < ? AND b like ?}
|
||||
8ABC 8abd 8abc
|
||||
}
|
||||
|
||||
2 "SELECT * FROM e6 WHERE b GLOB '8abc'" {
|
||||
xBestIndex
|
||||
{SELECT rowid, a, b FROM 't6' WHERE b >= ? AND b < ? AND b glob ?}
|
||||
xFilter
|
||||
{SELECT rowid, a, b FROM 't6' WHERE b >= ? AND b < ? AND b glob ?}
|
||||
8abc 8abd 8abc
|
||||
}
|
||||
3 "SELECT * FROM e6 WHERE b LIKE '8e/'" {
|
||||
xBestIndex {SELECT rowid, a, b FROM 't6' WHERE b like ?}
|
||||
xFilter {SELECT rowid, a, b FROM 't6' WHERE b like ?} 8e/
|
||||
}
|
||||
4 "SELECT * FROM e6 WHERE b GLOB '8e/'" {
|
||||
xBestIndex {SELECT rowid, a, b FROM 't6' WHERE b glob ?}
|
||||
xFilter {SELECT rowid, a, b FROM 't6' WHERE b glob ?} 8abc
|
||||
xFilter {SELECT rowid, a, b FROM 't6' WHERE b glob ?} 8e/
|
||||
}
|
||||
} {
|
||||
do_test 1.$tn {
|
||||
|
Reference in New Issue
Block a user