1
0
mirror of https://github.com/sqlite/sqlite.git synced 2025-07-29 08:01:23 +03:00

Fix stat4-based cost estimates for vector range constraints.

FossilOrigin-Name: 18af74abc8ceae47ab9fbee3e3e5bb37db8fcba5
This commit is contained in:
dan
2016-08-03 16:14:33 +00:00
parent 78f9bb6c71
commit d66e5794d1
7 changed files with 139 additions and 55 deletions

View File

@ -143,6 +143,70 @@ foreach {nm idx} {
}
}
ifcapable stat4 {
do_execsql_test 3.0 {
CREATE TABLE c1(a, b, c, d);
INSERT INTO c1(a, b) VALUES(1, 'a');
INSERT INTO c1(a, b) VALUES(1, 'b');
INSERT INTO c1(a, b) VALUES(1, 'c');
INSERT INTO c1(a, b) VALUES(1, 'd');
INSERT INTO c1(a, b) VALUES(1, 'e');
INSERT INTO c1(a, b) VALUES(1, 'f');
INSERT INTO c1(a, b) VALUES(1, 'g');
INSERT INTO c1(a, b) VALUES(1, 'h');
INSERT INTO c1(a, b) VALUES(1, 'i');
INSERT INTO c1(a, b) VALUES(1, 'j');
INSERT INTO c1(a, b) VALUES(1, 'k');
INSERT INTO c1(a, b) VALUES(1, 'l');
INSERT INTO c1(a, b) VALUES(1, 'm');
INSERT INTO c1(a, b) VALUES(1, 'n');
INSERT INTO c1(a, b) VALUES(1, 'o');
INSERT INTO c1(a, b) VALUES(1, 'p');
INSERT INTO c1(a, b) VALUES(2, 'a');
INSERT INTO c1(a, b) VALUES(2, 'b');
INSERT INTO c1(a, b) VALUES(2, 'c');
INSERT INTO c1(a, b) VALUES(2, 'd');
INSERT INTO c1(a, b) VALUES(2, 'e');
INSERT INTO c1(a, b) VALUES(2, 'f');
INSERT INTO c1(a, b) VALUES(2, 'g');
INSERT INTO c1(a, b) VALUES(2, 'h');
INSERT INTO c1(c, d) SELECT a, b FROM c1;
CREATE INDEX c1ab ON c1(a, b);
CREATE INDEX c1cd ON c1(c, d);
ANALYZE;
}
do_eqp_test 3.1.1 { SELECT * FROM c1 WHERE a=1 AND c=2 } {
0 0 0 {SEARCH TABLE c1 USING INDEX c1cd (c=?)}
}
do_eqp_test 3.1.2 { SELECT * FROM c1 WHERE a=1 AND b>'d' AND c=2 } {
0 0 0 {SEARCH TABLE c1 USING INDEX c1cd (c=?)}
}
do_eqp_test 3.1.3 { SELECT * FROM c1 WHERE a=1 AND b>'l' AND c=2 } {
0 0 0 {SEARCH TABLE c1 USING INDEX c1ab (a=? AND b>?)}
}
do_eqp_test 3.2.1 { SELECT * FROM c1 WHERE a=1 AND c>1 } {
0 0 0 {SEARCH TABLE c1 USING INDEX c1cd (c>?)}
}
do_eqp_test 3.2.2 { SELECT * FROM c1 WHERE a=1 AND c>0 } {
0 0 0 {SEARCH TABLE c1 USING INDEX c1ab (a=?)}
}
do_eqp_test 3.2.3 { SELECT * FROM c1 WHERE a=1 AND c>=1 } {
0 0 0 {SEARCH TABLE c1 USING INDEX c1ab (a=?)}
}
do_eqp_test 3.2.4 { SELECT * FROM c1 WHERE a=1 AND (c, d)>(1, 'c') } {
0 0 0 {SEARCH TABLE c1 USING INDEX c1ab (a=?)}
}
do_eqp_test 3.2.5 { SELECT * FROM c1 WHERE a=1 AND (c, d)>(1, 'o') } {
0 0 0 {SEARCH TABLE c1 USING INDEX c1cd (c>?)}
}
do_eqp_test 3.2.6 { SELECT * FROM c1 WHERE a=1 AND (c, +b)>(1, 'c') } {
0 0 0 {SEARCH TABLE c1 USING INDEX c1ab (a=?)}
}
}
finish_test