mirror of
https://github.com/sqlite/sqlite.git
synced 2025-07-29 08:01:23 +03:00
Fix some issues with vector range constraints and the column cache. Also vector range constraints and rowid columns.
FossilOrigin-Name: 42607366bfc2dceb1013797a973b3b8df75dcb4d
This commit is contained in:
@ -118,6 +118,80 @@ foreach {tn expr res} {
|
||||
do_execsql_test 5.$tn "SELECT $expr" [list $res]
|
||||
}
|
||||
|
||||
do_execsql_test 6.0 {
|
||||
CREATE TABLE hh(a, b, c);
|
||||
INSERT INTO hh VALUES('abc', 1, 'i');
|
||||
INSERT INTO hh VALUES('ABC', 1, 'ii');
|
||||
INSERT INTO hh VALUES('def', 2, 'iii');
|
||||
INSERT INTO hh VALUES('DEF', 2, 'iv');
|
||||
INSERT INTO hh VALUES('GHI', 3, 'v');
|
||||
INSERT INTO hh VALUES('ghi', 3, 'vi');
|
||||
|
||||
CREATE INDEX hh_ab ON hh(a, b);
|
||||
}
|
||||
|
||||
do_execsql_test 6.1 {
|
||||
SELECT c FROM hh WHERE (a, b) = (SELECT 'abc', 1);
|
||||
} {i}
|
||||
do_execsql_test 6.2 {
|
||||
SELECT c FROM hh WHERE (a, b) = (SELECT 'abc' COLLATE nocase, 1);
|
||||
} {i}
|
||||
do_execsql_test 6.3 {
|
||||
SELECT c FROM hh WHERE a = (SELECT 'abc' COLLATE nocase) AND b = (SELECT 1);
|
||||
} {i}
|
||||
do_execsql_test 6.4 {
|
||||
SELECT c FROM hh WHERE +a = (SELECT 'abc' COLLATE nocase) AND b = (SELECT 1);
|
||||
} {i}
|
||||
do_execsql_test 6.5 {
|
||||
SELECT c FROM hh WHERE a = (SELECT 'abc') COLLATE nocase AND b = (SELECT 1);
|
||||
} {i ii}
|
||||
do_catchsql_test 6.6 {
|
||||
SELECT c FROM hh WHERE (a, b) = (SELECT 'abc', 1) COLLATE nocase;
|
||||
} {1 {invalid use of row value}}
|
||||
do_catchsql_test 6.7 {
|
||||
SELECT c FROM hh WHERE (a, b) = 1;
|
||||
} {1 {invalid use of row value}}
|
||||
do_execsql_test 6.8 {
|
||||
SELECT c FROM hh WHERE (a COLLATE nocase, b) = (SELECT 'def', 2);
|
||||
} {iii iv}
|
||||
do_execsql_test 6.9 {
|
||||
SELECT c FROM hh WHERE (a COLLATE nocase, b) IS NOT (SELECT 'def', 2);
|
||||
} {i ii v vi}
|
||||
do_execsql_test 6.10 {
|
||||
SELECT c FROM hh WHERE (b, a) = (SELECT 2, 'def');
|
||||
} {iii}
|
||||
|
||||
do_execsql_test 7.0 {
|
||||
CREATE TABLE xy(i INTEGER PRIMARY KEY, j, k);
|
||||
INSERT INTO xy VALUES(1, 1, 1);
|
||||
INSERT INTO xy VALUES(2, 2, 2);
|
||||
INSERT INTO xy VALUES(3, 3, 3);
|
||||
INSERT INTO xy VALUES(4, 4, 4);
|
||||
}
|
||||
|
||||
|
||||
foreach {tn sql res eqp} {
|
||||
1 "SELECT * FROM xy WHERE (i, j) IS (2, 2)" {2 2 2}
|
||||
"0 0 0 {SEARCH TABLE xy USING INTEGER PRIMARY KEY (rowid=?)}"
|
||||
|
||||
2 "SELECT * FROM xy WHERE (k, j) < (2, 3)" {1 1 1 2 2 2}
|
||||
"0 0 0 {SCAN TABLE xy}"
|
||||
|
||||
3 "SELECT * FROM xy WHERE (i, j) < (2, 3)" {1 1 1 2 2 2}
|
||||
"0 0 0 {SEARCH TABLE xy USING INTEGER PRIMARY KEY (rowid<?)}"
|
||||
|
||||
4 "SELECT * FROM xy WHERE (i, j) > (2, 1)" {2 2 2 3 3 3 4 4 4}
|
||||
"0 0 0 {SEARCH TABLE xy USING INTEGER PRIMARY KEY (rowid>?)}"
|
||||
|
||||
5 "SELECT * FROM xy WHERE (i, j) > ('2', 1)" {2 2 2 3 3 3 4 4 4}
|
||||
"0 0 0 {SEARCH TABLE xy USING INTEGER PRIMARY KEY (rowid>?)}"
|
||||
|
||||
} {
|
||||
do_eqp_test 7.$tn.1 $sql $eqp
|
||||
do_execsql_test 7.$tn.2 $sql $res
|
||||
}
|
||||
|
||||
|
||||
|
||||
finish_test
|
||||
|
||||
|
||||
|
Reference in New Issue
Block a user