mirror of
https://github.com/sqlite/sqlite.git
synced 2025-07-29 08:01:23 +03:00
Rework the fix to the problem described by
[forum:/forumpost/b9647a113b465950|forum post b9647a113b] so that it provides a more complete fix that covers cases that were not resolved by the original fix, and so that it does not cause performance regressions. FossilOrigin-Name: 28db0d152d90fb5e62d03ea5caceabe8901be98522aef3dc2b54564fbc35355d
This commit is contained in:
@ -788,6 +788,9 @@ do_execsql_test 33.3 {
|
||||
# INTEGER PRIMARY KEY, and the columns that UNIQUE constraint are
|
||||
# used in a rowvalue-IN operator constraint.
|
||||
#
|
||||
# 2025-07-07 Discovered that the original fix was incomplete and
|
||||
# new tests added. See tag-20250707-01 in the code.
|
||||
#
|
||||
reset_db
|
||||
do_execsql_test 34.1 {
|
||||
CREATE TABLE items (
|
||||
@ -804,5 +807,39 @@ do_execsql_test 34.1 {
|
||||
WHERE (Id, Item) IN (SELECT Id, Item FROM items);
|
||||
SELECT Id, Item, test FROM items ORDER BY id;
|
||||
} {1 2 ok 2 2 ok 3 3 ok 4 5 ok}
|
||||
db null NULL
|
||||
do_execsql_test 34.2 {
|
||||
CREATE TABLE t1(a INTEGER PRIMARY KEY, b, c, d);
|
||||
CREATE INDEX idx ON t1(b,a);
|
||||
INSERT INTO t1(a,b) VALUES (1, 22);
|
||||
SELECT * FROM t1 INDEXED BY idx WHERE (b,a) IN (SELECT b,a FROM t1);
|
||||
} {1 22 NULL NULL}
|
||||
do_execsql_test 34.3 {
|
||||
DROP TABLE t1;
|
||||
CREATE TABLE t1(a, b, c, d);
|
||||
CREATE INDEX idx ON t1(b,a,a);
|
||||
INSERT INTO t1(a,b) VALUES (1, 22);
|
||||
SELECT * FROM t1 INDEXED BY idx WHERE (b,a) IN (SELECT b,a FROM t1);
|
||||
} {1 22 NULL NULL}
|
||||
do_execsql_test 34.4 {
|
||||
DROP TABLE t1;
|
||||
CREATE TABLE t1(id INTEGER PRIMARY KEY, a INT);
|
||||
CREATE INDEX t1a ON t1(a,id); -- index includes PRIMARY KEY
|
||||
CREATE TABLE t2(id INTEGER PRIMARY KEY);
|
||||
WITH RECURSIVE c(n) AS (VALUES(1) UNION ALL SELECT n+1 FROM c WHERE n<100)
|
||||
INSERT INTO t1(id,a) SELECT n, 777 FROM c;
|
||||
INSERT INTO t2 SELECT id FROM t1;
|
||||
SELECT *
|
||||
FROM t1 JOIN t2 USING(id)
|
||||
WHERE t1.a=777 AND t2.id>999
|
||||
ORDER BY t1.id;
|
||||
} {}
|
||||
do_execsql_test 34.5 {
|
||||
EXPLAIN QUERY PLAN
|
||||
SELECT *
|
||||
FROM t1 JOIN t2 USING(id)
|
||||
WHERE t1.a=777 AND t2.id>999
|
||||
ORDER BY t1.id;
|
||||
} {/SEARCH t1 USING COVERING INDEX t1a .a=. AND id>../}
|
||||
|
||||
finish_test
|
||||
|
Reference in New Issue
Block a user