Merge Chromium + Blink git repositories
[chromium-blink-merge.git] / third_party / sqlite / sqlite-src-3080704 / test / coveridxscan.test
blob7b3c0b0be9942aa898a9dd483797ded8c12948e6
1 # 2012 September 17
3 # The author disclaims copyright to this source code.  In place of
4 # a legal notice, here is a blessing:
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.
10 #***********************************************************************
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.)
17 set testdir [file dirname $argv0]
18 source $testdir/tester.tcl
20 set testprefix coveridxscan
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}
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}
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}
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}
59 db close
60 sqlite3_shutdown
61 sqlite3_config_cis 0
62 sqlite3 db test.db
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}
75 db close
76 sqlite3_shutdown
77 sqlite3_config_cis 1
78 sqlite3 db test.db
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}
93 finish_test