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

Side by Side Diff: third_party/sqlite/sqlite-src-3080704/test/in5.test

Issue 883353008: [sql] Import reference version of SQLite 3.8.7.4. (Closed) Base URL: http://chromium.googlesource.com/chromium/src.git@master
Patch Set: Hold back encoding change which is messing up patch. Created 5 years, 10 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
(Empty)
1 # 2012 September 18
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
13 set testdir [file dirname $argv0]
14 source $testdir/tester.tcl
15 set testprefix in5
16
17 do_test in5-1.1 {
18 execsql {
19 CREATE TABLE t1x(x INTEGER PRIMARY KEY);
20 INSERT INTO t1x VALUES(1),(3),(5),(7),(9);
21 CREATE TABLE t1y(y INTEGER UNIQUE);
22 INSERT INTO t1y VALUES(2),(4),(6),(8);
23 CREATE TABLE t1z(z TEXT UNIQUE);
24 INSERT INTO t1z VALUES('a'),('c'),('e'),('g');
25 CREATE TABLE t2(a INTEGER, b INTEGER, c TEXT, d TEXT);
26 INSERT INTO t2 VALUES(1,2,'a','12a'),(1,2,'b','12b'),
27 (2,3,'g','23g'),(3,5,'c','35c'),
28 (4,6,'h','46h'),(5,6,'e','56e');
29 CREATE TABLE t3x AS SELECT x FROM t1x;
30 CREATE TABLE t3y AS SELECT y FROM t1y;
31 CREATE TABLE t3z AS SELECT z FROM t1z;
32 SELECT d FROM t2 WHERE a IN t1x AND b IN t1y AND c IN t1z ORDER BY c;
33 }
34 } {12a 56e}
35 do_test in5-1.2 {
36 execsql {
37 SELECT d FROM t2 WHERE a IN t1y AND b IN t1x AND c IN t1z ORDER BY d;
38 }
39 } {23g}
40 do_test in5-1.3 {
41 execsql {
42 SELECT d FROM t2 WHERE a IN t3x AND b IN t3y AND c IN t3z ORDER BY d;
43 }
44 } {12a 56e}
45
46
47 do_test in5-2.1 {
48 execsql {
49 CREATE INDEX t2abc ON t2(a,b,c);
50 SELECT d FROM t2 WHERE a IN t1x AND b IN t1y AND c IN t1z ORDER BY d;
51 }
52 } {12a 56e}
53 do_test in5-2.2 {
54 execsql {
55 SELECT d FROM t2 WHERE a IN t1y AND b IN t1x AND c IN t1z ORDER BY d;
56 }
57 } {23g}
58 do_test in5-2.3 {
59 regexp {OpenEphemeral} [db eval {
60 EXPLAIN SELECT d FROM t2 WHERE a IN t1x AND b IN t1y AND c IN t1z
61 }]
62 } {0}
63 do_test in5-2.4 {
64 execsql {
65 SELECT d FROM t2 WHERE a IN t3x AND b IN t3y AND c IN t3z ORDER BY d;
66 }
67 } {12a 56e}
68 do_test in5-2.5.1 {
69 regexp {OpenEphemeral} [db eval {
70 EXPLAIN SELECT d FROM t2 WHERE a IN t3x AND b IN t1y AND c IN t1z
71 }]
72 } {1}
73 do_test in5-2.5.2 {
74 regexp {OpenEphemeral} [db eval {
75 EXPLAIN SELECT d FROM t2 WHERE a IN t1x AND b IN t3y AND c IN t1z
76 }]
77 } {1}
78 do_test in5-2.5.3 {
79 regexp {OpenEphemeral} [db eval {
80 EXPLAIN SELECT d FROM t2 WHERE a IN t1x AND b IN t1y AND c IN t3z
81 }]
82 } {1}
83
84 do_test in5-3.1 {
85 execsql {
86 DROP INDEX t2abc;
87 CREATE INDEX t2ab ON t2(a,b);
88 SELECT d FROM t2 WHERE a IN t1x AND b IN t1y AND c IN t1z ORDER BY d;
89 }
90 } {12a 56e}
91 do_test in5-3.2 {
92 execsql {
93 SELECT d FROM t2 WHERE a IN t1y AND b IN t1x AND c IN t1z ORDER BY d;
94 }
95 } {23g}
96 do_test in5-3.3 {
97 regexp {OpenEphemeral} [db eval {
98 EXPLAIN SELECT d FROM t2 WHERE a IN t1x AND b IN t1y AND c IN t1z
99 }]
100 } {0}
101
102 do_test in5-4.1 {
103 execsql {
104 DROP INDEX t2ab;
105 CREATE INDEX t2abcd ON t2(a,b,c,d);
106 SELECT d FROM t2 WHERE a IN t1x AND b IN t1y AND c IN t1z ORDER BY d;
107 }
108 } {12a 56e}
109 do_test in5-4.2 {
110 execsql {
111 SELECT d FROM t2 WHERE a IN t1y AND b IN t1x AND c IN t1z ORDER BY d;
112 }
113 } {23g}
114 do_test in5-4.3 {
115 regexp {OpenEphemeral} [db eval {
116 EXPLAIN SELECT d FROM t2 WHERE a IN t1x AND b IN t1y AND c IN t1z
117 }]
118 } {0}
119
120
121 do_test in5-5.1 {
122 execsql {
123 DROP INDEX t2abcd;
124 CREATE INDEX t2cbad ON t2(c,b,a,d);
125 SELECT d FROM t2 WHERE a IN t1x AND b IN t1y AND c IN t1z ORDER BY d;
126 }
127 } {12a 56e}
128 do_test in5-5.2 {
129 execsql {
130 SELECT d FROM t2 WHERE a IN t1y AND b IN t1x AND c IN t1z ORDER BY d;
131 }
132 } {23g}
133 do_test in5-5.3 {
134 regexp {OpenEphemeral} [db eval {
135 EXPLAIN SELECT d FROM t2 WHERE a IN t1x AND b IN t1y AND c IN t1z
136 }]
137 } {0}
138
139 #-------------------------------------------------------------------------
140 # At one point SQLite was removing the DISTINCT keyword from expressions
141 # similar to:
142 #
143 # <expr1> IN (SELECT DISTINCT <expr2> FROM...)
144 #
145 # However, there are a few obscure cases where this is incorrect. For
146 # example, if the SELECT features a LIMIT clause, or if the collation
147 # sequence or affinity used by the DISTINCT does not match the one used
148 # by the IN(...) expression.
149 #
150 do_execsql_test 6.1.1 {
151 CREATE TABLE t1(a COLLATE nocase);
152 INSERT INTO t1 VALUES('one');
153 INSERT INTO t1 VALUES('ONE');
154 }
155 do_execsql_test 6.1.2 {
156 SELECT count(*) FROM t1 WHERE a COLLATE BINARY IN (SELECT DISTINCT a FROM t1)
157 } {1}
158
159 do_execsql_test 6.2.1 {
160 CREATE TABLE t3(a, b);
161 INSERT INTO t3 VALUES(1, 1);
162 INSERT INTO t3 VALUES(1, 2);
163 INSERT INTO t3 VALUES(1, 3);
164 INSERT INTO t3 VALUES(2, 4);
165 INSERT INTO t3 VALUES(2, 5);
166 INSERT INTO t3 VALUES(2, 6);
167 INSERT INTO t3 VALUES(3, 7);
168 INSERT INTO t3 VALUES(3, 8);
169 INSERT INTO t3 VALUES(3, 9);
170 }
171 do_execsql_test 6.2.2 {
172 SELECT count(*) FROM t3 WHERE b IN (SELECT DISTINCT a FROM t3 LIMIT 5);
173 } {3}
174 do_execsql_test 6.2.3 {
175 SELECT count(*) FROM t3 WHERE b IN (SELECT a FROM t3 LIMIT 5);
176 } {2}
177
178 do_execsql_test 6.3.1 {
179 CREATE TABLE x1(a);
180 CREATE TABLE x2(b);
181 INSERT INTO x1 VALUES(1), (1), (2);
182 INSERT INTO x2 VALUES(1), (2);
183 SELECT count(*) FROM x2 WHERE b IN (SELECT DISTINCT a FROM x1 LIMIT 2);
184 } {2}
185
186 finish_test
OLDNEW
« no previous file with comments | « third_party/sqlite/sqlite-src-3080704/test/in4.test ('k') | third_party/sqlite/sqlite-src-3080704/test/incrblob.test » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698