xref: /sqlite-3.40.0/test/whereH.test (revision 3fb183d2)
1*3fb183d2Sdrh# 2014-03-31
2*3fb183d2Sdrh#
3*3fb183d2Sdrh# The author disclaims copyright to this source code.  In place of
4*3fb183d2Sdrh# a legal notice, here is a blessing:
5*3fb183d2Sdrh#
6*3fb183d2Sdrh#    May you do good and not evil.
7*3fb183d2Sdrh#    May you find forgiveness for yourself and forgive others.
8*3fb183d2Sdrh#    May you share freely, never taking more than you give.
9*3fb183d2Sdrh#
10*3fb183d2Sdrh#***********************************************************************
11*3fb183d2Sdrh#
12*3fb183d2Sdrh# Test cases for query planning decisions where one candidate index
13*3fb183d2Sdrh# covers a proper superset of the WHERE clause terms of another
14*3fb183d2Sdrh# candidate index.
15*3fb183d2Sdrh#
16*3fb183d2Sdrh
17*3fb183d2Sdrhset testdir [file dirname $argv0]
18*3fb183d2Sdrhsource $testdir/tester.tcl
19*3fb183d2Sdrh
20*3fb183d2Sdrhdo_execsql_test whereH-1.1 {
21*3fb183d2Sdrh  CREATE TABLE t1(a,b,c,d);
22*3fb183d2Sdrh  CREATE INDEX t1abc ON t1(a,b,c);
23*3fb183d2Sdrh  CREATE INDEX t1bc ON t1(b,c);
24*3fb183d2Sdrh
25*3fb183d2Sdrh  EXPLAIN QUERY PLAN
26*3fb183d2Sdrh  SELECT d FROM t1 WHERE a=? AND b=? AND c>=? ORDER BY c;
27*3fb183d2Sdrh} {/INDEX t1abc /}
28*3fb183d2Sdrhdo_execsql_test whereH-1.2 {
29*3fb183d2Sdrh  EXPLAIN QUERY PLAN
30*3fb183d2Sdrh  SELECT d FROM t1 WHERE a=? AND b=? AND c>=? ORDER BY c;
31*3fb183d2Sdrh} {~/TEMP B-TREE FOR ORDER BY/}
32*3fb183d2Sdrh
33*3fb183d2Sdrhdo_execsql_test whereH-2.1 {
34*3fb183d2Sdrh  DROP TABLE t1;
35*3fb183d2Sdrh  CREATE TABLE t1(a,b,c,d);
36*3fb183d2Sdrh  CREATE INDEX t1bc ON t1(b,c);
37*3fb183d2Sdrh  CREATE INDEX t1abc ON t1(a,b,c);
38*3fb183d2Sdrh
39*3fb183d2Sdrh  EXPLAIN QUERY PLAN
40*3fb183d2Sdrh  SELECT d FROM t1 WHERE a=? AND b=? AND c>=? ORDER BY c;
41*3fb183d2Sdrh} {/INDEX t1abc /}
42*3fb183d2Sdrhdo_execsql_test whereH-2.2 {
43*3fb183d2Sdrh  EXPLAIN QUERY PLAN
44*3fb183d2Sdrh  SELECT d FROM t1 WHERE a=? AND b=? AND c>=? ORDER BY c;
45*3fb183d2Sdrh} {~/TEMP B-TREE FOR ORDER BY/}
46*3fb183d2Sdrh
47*3fb183d2Sdrhdo_execsql_test whereH-3.1 {
48*3fb183d2Sdrh  DROP TABLE t1;
49*3fb183d2Sdrh  CREATE TABLE t1(a,b,c,d,e);
50*3fb183d2Sdrh  CREATE INDEX t1cd ON t1(c,d);
51*3fb183d2Sdrh  CREATE INDEX t1bcd ON t1(b,c,d);
52*3fb183d2Sdrh  CREATE INDEX t1abcd ON t1(a,b,c,d);
53*3fb183d2Sdrh
54*3fb183d2Sdrh  EXPLAIN QUERY PLAN
55*3fb183d2Sdrh  SELECT d FROM t1 WHERE a=? AND b=? AND c=? AND d>=? ORDER BY d;
56*3fb183d2Sdrh} {/INDEX t1abcd /}
57*3fb183d2Sdrhdo_execsql_test whereH-3.2 {
58*3fb183d2Sdrh  EXPLAIN QUERY PLAN
59*3fb183d2Sdrh  SELECT d FROM t1 WHERE a=? AND b=? AND c=? AND d>=? ORDER BY d;
60*3fb183d2Sdrh} {~/TEMP B-TREE FOR ORDER BY/}
61*3fb183d2Sdrh
62*3fb183d2Sdrhdo_execsql_test whereH-4.1 {
63*3fb183d2Sdrh  DROP TABLE t1;
64*3fb183d2Sdrh  CREATE TABLE t1(a,b,c,d,e);
65*3fb183d2Sdrh  CREATE INDEX t1cd ON t1(c,d);
66*3fb183d2Sdrh  CREATE INDEX t1abcd ON t1(a,b,c,d);
67*3fb183d2Sdrh  CREATE INDEX t1bcd ON t1(b,c,d);
68*3fb183d2Sdrh
69*3fb183d2Sdrh  EXPLAIN QUERY PLAN
70*3fb183d2Sdrh  SELECT d FROM t1 WHERE a=? AND b=? AND c=? AND d>=? ORDER BY d;
71*3fb183d2Sdrh} {/INDEX t1abcd /}
72*3fb183d2Sdrhdo_execsql_test whereH-4.2 {
73*3fb183d2Sdrh  EXPLAIN QUERY PLAN
74*3fb183d2Sdrh  SELECT d FROM t1 WHERE a=? AND b=? AND c=? AND d>=? ORDER BY d;
75*3fb183d2Sdrh} {~/TEMP B-TREE FOR ORDER BY/}
76*3fb183d2Sdrh
77*3fb183d2Sdrhdo_execsql_test whereH-5.1 {
78*3fb183d2Sdrh  DROP TABLE t1;
79*3fb183d2Sdrh  CREATE TABLE t1(a,b,c,d,e);
80*3fb183d2Sdrh  CREATE INDEX t1bcd ON t1(b,c,d);
81*3fb183d2Sdrh  CREATE INDEX t1cd ON t1(c,d);
82*3fb183d2Sdrh  CREATE INDEX t1abcd ON t1(a,b,c,d);
83*3fb183d2Sdrh
84*3fb183d2Sdrh  EXPLAIN QUERY PLAN
85*3fb183d2Sdrh  SELECT d FROM t1 WHERE a=? AND b=? AND c=? AND d>=? ORDER BY d;
86*3fb183d2Sdrh} {/INDEX t1abcd /}
87*3fb183d2Sdrhdo_execsql_test whereH-5.2 {
88*3fb183d2Sdrh  EXPLAIN QUERY PLAN
89*3fb183d2Sdrh  SELECT d FROM t1 WHERE a=? AND b=? AND c=? AND d>=? ORDER BY d;
90*3fb183d2Sdrh} {~/TEMP B-TREE FOR ORDER BY/}
91*3fb183d2Sdrh
92*3fb183d2Sdrhdo_execsql_test whereH-6.1 {
93*3fb183d2Sdrh  DROP TABLE t1;
94*3fb183d2Sdrh  CREATE TABLE t1(a,b,c,d,e);
95*3fb183d2Sdrh  CREATE INDEX t1bcd ON t1(b,c,d);
96*3fb183d2Sdrh  CREATE INDEX t1abcd ON t1(a,b,c,d);
97*3fb183d2Sdrh  CREATE INDEX t1cd ON t1(c,d);
98*3fb183d2Sdrh
99*3fb183d2Sdrh  EXPLAIN QUERY PLAN
100*3fb183d2Sdrh  SELECT d FROM t1 WHERE a=? AND b=? AND c=? AND d>=? ORDER BY d;
101*3fb183d2Sdrh} {/INDEX t1abcd /}
102*3fb183d2Sdrhdo_execsql_test whereH-6.2 {
103*3fb183d2Sdrh  EXPLAIN QUERY PLAN
104*3fb183d2Sdrh  SELECT d FROM t1 WHERE a=? AND b=? AND c=? AND d>=? ORDER BY d;
105*3fb183d2Sdrh} {~/TEMP B-TREE FOR ORDER BY/}
106*3fb183d2Sdrh
107*3fb183d2Sdrhdo_execsql_test whereH-7.1 {
108*3fb183d2Sdrh  DROP TABLE t1;
109*3fb183d2Sdrh  CREATE TABLE t1(a,b,c,d,e);
110*3fb183d2Sdrh  CREATE INDEX t1abcd ON t1(a,b,c,d);
111*3fb183d2Sdrh  CREATE INDEX t1bcd ON t1(b,c,d);
112*3fb183d2Sdrh  CREATE INDEX t1cd ON t1(c,d);
113*3fb183d2Sdrh
114*3fb183d2Sdrh  EXPLAIN QUERY PLAN
115*3fb183d2Sdrh  SELECT d FROM t1 WHERE a=? AND b=? AND c=? AND d>=? ORDER BY d;
116*3fb183d2Sdrh} {/INDEX t1abcd /}
117*3fb183d2Sdrhdo_execsql_test whereH-7.2 {
118*3fb183d2Sdrh  EXPLAIN QUERY PLAN
119*3fb183d2Sdrh  SELECT d FROM t1 WHERE a=? AND b=? AND c=? AND d>=? ORDER BY d;
120*3fb183d2Sdrh} {~/TEMP B-TREE FOR ORDER BY/}
121*3fb183d2Sdrh
122*3fb183d2Sdrhdo_execsql_test whereH-8.1 {
123*3fb183d2Sdrh  DROP TABLE t1;
124*3fb183d2Sdrh  CREATE TABLE t1(a,b,c,d,e);
125*3fb183d2Sdrh  CREATE INDEX t1abcd ON t1(a,b,c,d);
126*3fb183d2Sdrh  CREATE INDEX t1cd ON t1(c,d);
127*3fb183d2Sdrh  CREATE INDEX t1bcd ON t1(b,c,d);
128*3fb183d2Sdrh
129*3fb183d2Sdrh  EXPLAIN QUERY PLAN
130*3fb183d2Sdrh  SELECT d FROM t1 WHERE a=? AND b=? AND c=? AND d>=? ORDER BY d;
131*3fb183d2Sdrh} {/INDEX t1abcd /}
132*3fb183d2Sdrhdo_execsql_test whereH-8.2 {
133*3fb183d2Sdrh  EXPLAIN QUERY PLAN
134*3fb183d2Sdrh  SELECT d FROM t1 WHERE a=? AND b=? AND c=? AND d>=? ORDER BY d;
135*3fb183d2Sdrh} {~/TEMP B-TREE FOR ORDER BY/}
136*3fb183d2Sdrh
137*3fb183d2Sdrh
138*3fb183d2Sdrh
139*3fb183d2Sdrhfinish_test
140