OLD | NEW |
| (Empty) |
1 # 2012 September 17 | |
2 # | |
3 # The author disclaims copyright to this source code. In place of | |
4 # a legal notice, here is a blessing: | |
5 # | |
6 # May you do good and not evil. | |
7 # May you find forgiveness for yourself and forgive others. | |
8 # May you share freely, never taking more than you give. | |
9 # | |
10 #*********************************************************************** | |
11 # | |
12 # Tests for the optimization which attempts to use a covering index | |
13 # for a full-table scan (under the theory that the index will be smaller | |
14 # and require less I/O and hence will run faster.) | |
15 # | |
16 | |
17 set testdir [file dirname $argv0] | |
18 source $testdir/tester.tcl | |
19 | |
20 set testprefix coveridxscan | |
21 | |
22 do_test 1.1 { | |
23 db eval { | |
24 CREATE TABLE t1(a,b,c); | |
25 INSERT INTO t1 VALUES(5,4,3), (4,8,2), (3,2,1); | |
26 CREATE INDEX t1ab ON t1(a,b); | |
27 CREATE INDEX t1b ON t1(b); | |
28 SELECT a FROM t1; | |
29 } | |
30 # covering index used for the scan, hence values are increasing | |
31 } {3 4 5} | |
32 | |
33 do_test 1.2 { | |
34 db eval { | |
35 SELECT a, c FROM t1; | |
36 } | |
37 # There is no covering index, hence the values are in rowid order | |
38 } {5 3 4 2 3 1} | |
39 | |
40 do_test 1.3 { | |
41 db eval { | |
42 SELECT b FROM t1; | |
43 } | |
44 # Choice of two indices: use the one with fewest columns | |
45 } {2 4 8} | |
46 | |
47 do_test 2.1 { | |
48 optimization_control db cover-idx-scan 0 | |
49 db eval {SELECT a FROM t1} | |
50 # With the optimization turned off, output in rowid order | |
51 } {5 4 3} | |
52 do_test 2.2 { | |
53 db eval {SELECT a, c FROM t1} | |
54 } {5 3 4 2 3 1} | |
55 do_test 2.3 { | |
56 db eval {SELECT b FROM t1} | |
57 } {4 8 2} | |
58 | |
59 db close | |
60 sqlite3_shutdown | |
61 sqlite3_config_cis 0 | |
62 sqlite3 db test.db | |
63 | |
64 do_test 3.1 { | |
65 db eval {SELECT a FROM t1} | |
66 # With the optimization configured off, output in rowid order | |
67 } {5 4 3} | |
68 do_test 3.2 { | |
69 db eval {SELECT a, c FROM t1} | |
70 } {5 3 4 2 3 1} | |
71 do_test 3.3 { | |
72 db eval {SELECT b FROM t1} | |
73 } {4 8 2} | |
74 | |
75 db close | |
76 sqlite3_shutdown | |
77 sqlite3_config_cis 1 | |
78 sqlite3 db test.db | |
79 | |
80 # The CIS optimization is enabled again. Covering indices are once again | |
81 # used for all table scans. | |
82 do_test 4.1 { | |
83 db eval {SELECT a FROM t1} | |
84 } {3 4 5} | |
85 do_test 4.2 { | |
86 db eval {SELECT a, c FROM t1} | |
87 } {5 3 4 2 3 1} | |
88 do_test 4.3 { | |
89 db eval {SELECT b FROM t1} | |
90 } {2 4 8} | |
91 | |
92 | |
93 finish_test | |
OLD | NEW |