Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(6)

Side by Side Diff: third_party/sqlite/src/test/autoindex3.test

Issue 1610963002: Import SQLite 3.10.2. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 # 2014-06-17 1 # 2014-06-17
2 # 2 #
3 # The author disclaims copyright to this source code. In place of 3 # The author disclaims copyright to this source code. In place of
4 # a legal notice, here is a blessing: 4 # a legal notice, here is a blessing:
5 # 5 #
6 # May you do good and not evil. 6 # May you do good and not evil.
7 # May you find forgiveness for yourself and forgive others. 7 # May you find forgiveness for yourself and forgive others.
8 # May you share freely, never taking more than you give. 8 # May you share freely, never taking more than you give.
9 # 9 #
10 #************************************************************************* 10 #*************************************************************************
11 # 11 #
12 # This file implements regression tests for SQLite library. The 12 # This file implements regression tests for SQLite library. The
13 # focus of this script is testing automatic index creation logic, 13 # focus of this script is testing automatic index creation logic,
14 # and specifically that an automatic index will not be created that 14 # and specifically that an automatic index will not be created that
15 # shadows a declared index. 15 # shadows a declared index.
16 # 16 #
17 17
18 set testdir [file dirname $argv0] 18 set testdir [file dirname $argv0]
19 source $testdir/tester.tcl 19 source $testdir/tester.tcl
20 set testprefix autoindex3
20 21
21 # The t1b and t2d indexes are not very selective. It used to be that 22 # The t1b and t2d indexes are not very selective. It used to be that
22 # the autoindex mechanism would create automatic indexes on t1(b) or 23 # the autoindex mechanism would create automatic indexes on t1(b) or
23 # t2(d), make assumptions that they were reasonably selective, and use 24 # t2(d), make assumptions that they were reasonably selective, and use
24 # them instead of t1b or t2d. But that would be cheating, because the 25 # them instead of t1b or t2d. But that would be cheating, because the
25 # automatic index cannot be any more selective than the real index. 26 # automatic index cannot be any more selective than the real index.
26 # 27 #
27 # This test verifies that the cheat is no longer allowed. 28 # This test verifies that the cheat is no longer allowed.
28 # 29 #
29 do_execsql_test autoindex3-100 { 30 do_execsql_test autoindex3-100 {
(...skipping 17 matching lines...) Expand all
47 do_execsql_test autoindex3-120 { 48 do_execsql_test autoindex3-120 {
48 EXPLAIN QUERY PLAN SELECT * FROM t1, t2 WHERE d<b AND x=y; 49 EXPLAIN QUERY PLAN SELECT * FROM t1, t2 WHERE d<b AND x=y;
49 } {/AUTO/} 50 } {/AUTO/}
50 do_execsql_test autoindex3-130 { 51 do_execsql_test autoindex3-130 {
51 EXPLAIN QUERY PLAN SELECT * FROM t1, t2 WHERE d IS NULL AND x=y; 52 EXPLAIN QUERY PLAN SELECT * FROM t1, t2 WHERE d IS NULL AND x=y;
52 } {/AUTO/} 53 } {/AUTO/}
53 do_execsql_test autoindex3-140 { 54 do_execsql_test autoindex3-140 {
54 EXPLAIN QUERY PLAN SELECT * FROM t1, t2 WHERE d IN (5,b) AND x=y; 55 EXPLAIN QUERY PLAN SELECT * FROM t1, t2 WHERE d IN (5,b) AND x=y;
55 } {/AUTO/} 56 } {/AUTO/}
56 57
58 reset_db
59 do_execsql_test 210 {
60 CREATE TABLE v(b, d, e);
61 CREATE TABLE u(a, b, c);
62 ANALYZE sqlite_master;
63 INSERT INTO "sqlite_stat1" VALUES('u','uab','40000 400 1');
64 INSERT INTO "sqlite_stat1" VALUES('v','vbde','40000 400 1 1');
65 INSERT INTO "sqlite_stat1" VALUES('v','ve','40000 21');
66
67 CREATE INDEX uab on u(a, b);
68 CREATE INDEX ve on v(e);
69 CREATE INDEX vbde on v(b,d,e);
70
71 DROP TABLE IF EXISTS sqlite_stat4;
72 ANALYZE sqlite_master;
73 }
74
75 # At one point, SQLite was using the inferior plan:
76 #
77 # 0|0|1|SEARCH TABLE v USING INDEX ve (e>?)
78 # 0|1|0|SEARCH TABLE u USING COVERING INDEX uab (ANY(a) AND b=?)
79 #
80 # on the basis that the real index "uab" must be better than the automatic
81 # index. This is not right - a skip-scan is not necessarily better than an
82 # automatic index scan.
83 #
84 do_eqp_test 220 {
85 select count(*) from u, v where u.b = v.b and v.e > 34;
86 } {
87 0 0 1 {SEARCH TABLE v USING INDEX ve (e>?)}
88 0 1 0 {SEARCH TABLE u USING AUTOMATIC COVERING INDEX (b=?)}
89 }
90
57 91
58 finish_test 92 finish_test
OLDNEW
« no previous file with comments | « third_party/sqlite/src/test/autoindex2.test ('k') | third_party/sqlite/src/test/autoindex4.test » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698