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

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

Issue 949043002: Add //third_party/sqlite to dirs_to_snapshot, remove net_sql.patch (Closed) Base URL: git@github.com:domokit/mojo.git@master
Patch Set: Created 5 years, 9 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
« no previous file with comments | « third_party/sqlite/src/test/where2.test ('k') | third_party/sqlite/src/test/where4.test » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 # 2006 January 31 1 # 2006 January 31
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 #***********************************************************************
(...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after
96 } 96 }
97 } [explain_no_trace { 97 } [explain_no_trace {
98 SELECT parent1.parent1key, child1.value, child2.value 98 SELECT parent1.parent1key, child1.value, child2.value
99 FROM parent1 99 FROM parent1
100 LEFT OUTER JOIN child1 ON parent1.child1key = child1.child1key 100 LEFT OUTER JOIN child1 ON parent1.child1key = child1.child1key
101 INNER JOIN child2 ON child2.child2key = parent1.child2key; 101 INNER JOIN child2 ON child2.child2key = parent1.child2key;
102 }] 102 }]
103 } 103 }
104 104
105 # This procedure executes the SQL. Then it appends 105 # This procedure executes the SQL. Then it appends
106 # the ::sqlite_query_plan variable. 106 # the names of the table and index used
107 # 107 #
108 proc queryplan {sql} { 108 proc queryplan {sql} {
109 set ::sqlite_sort_count 0 109 set ::sqlite_sort_count 0
110 set data [execsql $sql] 110 set data [execsql $sql]
111 return [concat $data $::sqlite_query_plan] 111 set eqp [execsql "EXPLAIN QUERY PLAN $sql"]
112 # puts eqp=$eqp
113 foreach {a b c x} $eqp {
114 if {[regexp { TABLE (\w+ AS )?(\w+) USING.* INDEX (\w+)\y} \
115 $x all as tab idx]} {
116 lappend data $tab $idx
117 } elseif {[regexp { TABLE (\w+ AS )?(\w+)\y} $x all as tab]} {
118 lappend data $tab *
119 }
120 }
121 return $data
112 } 122 }
113 123
114 124
115 # If you have a from clause of the form: A B C left join D 125 # If you have a from clause of the form: A B C left join D
116 # then make sure the query optimizer is able to reorder the 126 # then make sure the query optimizer is able to reorder the
117 # A B C part anyway it wants. 127 # A B C part anyway it wants.
118 # 128 #
119 # Following the fix to ticket #1652, there was a time when 129 # Following the fix to ticket #1652, there was a time when
120 # the C table would not reorder. So the following reorderings 130 # the C table would not reorder. So the following reorderings
121 # were possible: 131 # were possible:
(...skipping 15 matching lines...) Expand all
137 execsql { 147 execsql {
138 CREATE TABLE tA(apk integer primary key, ax); 148 CREATE TABLE tA(apk integer primary key, ax);
139 CREATE TABLE tB(bpk integer primary key, bx); 149 CREATE TABLE tB(bpk integer primary key, bx);
140 CREATE TABLE tC(cpk integer primary key, cx); 150 CREATE TABLE tC(cpk integer primary key, cx);
141 CREATE TABLE tD(dpk integer primary key, dx); 151 CREATE TABLE tD(dpk integer primary key, dx);
142 } 152 }
143 queryplan { 153 queryplan {
144 SELECT * FROM tA, tB, tC LEFT JOIN tD ON dpk=cx 154 SELECT * FROM tA, tB, tC LEFT JOIN tD ON dpk=cx
145 WHERE cpk=bx AND bpk=ax 155 WHERE cpk=bx AND bpk=ax
146 } 156 }
147 } {tA {} tB * tC * tD *} 157 } {tA * tB * tC * tD *}
148 do_test where3-2.1.1 { 158 do_test where3-2.1.1 {
149 queryplan { 159 queryplan {
150 SELECT * FROM tA, tB, tC LEFT JOIN tD ON cx=dpk 160 SELECT * FROM tA, tB, tC LEFT JOIN tD ON cx=dpk
151 WHERE cpk=bx AND bpk=ax 161 WHERE cpk=bx AND bpk=ax
152 } 162 }
153 } {tA {} tB * tC * tD *} 163 } {tA * tB * tC * tD *}
154 do_test where3-2.1.2 { 164 do_test where3-2.1.2 {
155 queryplan { 165 queryplan {
156 SELECT * FROM tA, tB, tC LEFT JOIN tD ON cx=dpk 166 SELECT * FROM tA, tB, tC LEFT JOIN tD ON cx=dpk
157 WHERE bx=cpk AND bpk=ax 167 WHERE bx=cpk AND bpk=ax
158 } 168 }
159 } {tA {} tB * tC * tD *} 169 } {tA * tB * tC * tD *}
160 do_test where3-2.1.3 { 170 do_test where3-2.1.3 {
161 queryplan { 171 queryplan {
162 SELECT * FROM tA, tB, tC LEFT JOIN tD ON cx=dpk 172 SELECT * FROM tA, tB, tC LEFT JOIN tD ON cx=dpk
163 WHERE bx=cpk AND ax=bpk 173 WHERE bx=cpk AND ax=bpk
164 } 174 }
165 } {tA {} tB * tC * tD *} 175 } {tA * tB * tC * tD *}
166 do_test where3-2.1.4 { 176 do_test where3-2.1.4 {
167 queryplan { 177 queryplan {
168 SELECT * FROM tA, tB, tC LEFT JOIN tD ON dpk=cx 178 SELECT * FROM tA, tB, tC LEFT JOIN tD ON dpk=cx
169 WHERE bx=cpk AND ax=bpk 179 WHERE bx=cpk AND ax=bpk
170 } 180 }
171 } {tA {} tB * tC * tD *} 181 } {tA * tB * tC * tD *}
172 do_test where3-2.1.5 { 182 do_test where3-2.1.5 {
173 queryplan { 183 queryplan {
174 SELECT * FROM tA, tB, tC LEFT JOIN tD ON dpk=cx 184 SELECT * FROM tA, tB, tC LEFT JOIN tD ON dpk=cx
175 WHERE cpk=bx AND ax=bpk 185 WHERE cpk=bx AND ax=bpk
176 } 186 }
177 } {tA {} tB * tC * tD *} 187 } {tA * tB * tC * tD *}
178 do_test where3-2.2 { 188 do_test where3-2.2 {
179 queryplan { 189 queryplan {
180 SELECT * FROM tA, tB, tC LEFT JOIN tD ON dpk=cx 190 SELECT * FROM tA, tB, tC LEFT JOIN tD ON dpk=cx
181 WHERE cpk=bx AND apk=bx 191 WHERE cpk=bx AND apk=bx
182 } 192 }
183 } {tB {} tA * tC * tD *} 193 } {tB * tA * tC * tD *}
184 do_test where3-2.3 { 194 do_test where3-2.3 {
185 queryplan { 195 queryplan {
186 SELECT * FROM tA, tB, tC LEFT JOIN tD ON dpk=cx 196 SELECT * FROM tA, tB, tC LEFT JOIN tD ON dpk=cx
187 WHERE cpk=bx AND apk=bx 197 WHERE cpk=bx AND apk=bx
188 } 198 }
189 } {tB {} tA * tC * tD *} 199 } {tB * tA * tC * tD *}
190 do_test where3-2.4 { 200 do_test where3-2.4 {
191 queryplan { 201 queryplan {
192 SELECT * FROM tA, tB, tC LEFT JOIN tD ON dpk=cx 202 SELECT * FROM tA, tB, tC LEFT JOIN tD ON dpk=cx
193 WHERE apk=cx AND bpk=ax 203 WHERE apk=cx AND bpk=ax
194 } 204 }
195 } {tC {} tA * tB * tD *} 205 } {tC * tA * tB * tD *}
196 do_test where3-2.5 { 206 do_test where3-2.5 {
197 queryplan { 207 queryplan {
198 SELECT * FROM tA, tB, tC LEFT JOIN tD ON dpk=cx 208 SELECT * FROM tA, tB, tC LEFT JOIN tD ON dpk=cx
199 WHERE cpk=ax AND bpk=cx 209 WHERE cpk=ax AND bpk=cx
200 } 210 }
201 } {tA {} tC * tB * tD *} 211 } {tA * tC * tB * tD *}
202 do_test where3-2.6 { 212 do_test where3-2.6 {
203 queryplan { 213 queryplan {
204 SELECT * FROM tA, tB, tC LEFT JOIN tD ON dpk=cx 214 SELECT * FROM tA, tB, tC LEFT JOIN tD ON dpk=cx
205 WHERE bpk=cx AND apk=bx 215 WHERE bpk=cx AND apk=bx
206 } 216 }
207 } {tC {} tB * tA * tD *} 217 } {tC * tB * tA * tD *}
208 do_test where3-2.7 { 218 do_test where3-2.7 {
209 queryplan { 219 queryplan {
210 SELECT * FROM tA, tB, tC LEFT JOIN tD ON dpk=cx 220 SELECT * FROM tA, tB, tC LEFT JOIN tD ON dpk=cx
211 WHERE cpk=bx AND apk=cx 221 WHERE cpk=bx AND apk=cx
212 } 222 }
213 } {tB {} tC * tA * tD *} 223 } {tB * tC * tA * tD *}
214 224
215 # Ticket [13f033c865f878953] 225 # Ticket [13f033c865f878953]
216 # If the outer loop must be a full table scan, do not let ANALYZE trick 226 # If the outer loop must be a full table scan, do not let ANALYZE trick
217 # the planner into use a table for the outer loop that might be indexable 227 # the planner into use a table for the outer loop that might be indexable
218 # if held until an inner loop. 228 # if held until an inner loop.
219 # 229 #
220 do_execsql_test where3-3.0 { 230 do_execsql_test where3-3.0 {
221 CREATE TABLE t301(a INTEGER PRIMARY KEY,b,c); 231 CREATE TABLE t301(a INTEGER PRIMARY KEY,b,c);
222 CREATE INDEX t301c ON t301(c); 232 CREATE INDEX t301c ON t301(c);
223 INSERT INTO t301 VALUES(1,2,3); 233 INSERT INTO t301 VALUES(1,2,3);
234 INSERT INTO t301 VALUES(2,2,3);
224 CREATE TABLE t302(x, y); 235 CREATE TABLE t302(x, y);
225 INSERT INTO t302 VALUES(4,5); 236 INSERT INTO t302 VALUES(4,5);
226 ANALYZE; 237 ANALYZE;
227 explain query plan SELECT * FROM t302, t301 WHERE t302.x=5 AND t301.a=t302.y; 238 explain query plan SELECT * FROM t302, t301 WHERE t302.x=5 AND t301.a=t302.y;
228 } { 239 } {
229 0 0 0 {SCAN TABLE t302 (~1 rows)} 240 0 0 0 {SCAN TABLE t302}
230 0 1 1 {SEARCH TABLE t301 USING INTEGER PRIMARY KEY (rowid=?) (~1 rows)} 241 0 1 1 {SEARCH TABLE t301 USING INTEGER PRIMARY KEY (rowid=?)}
231 } 242 }
232 do_execsql_test where3-3.1 { 243 do_execsql_test where3-3.1 {
233 explain query plan 244 explain query plan
234 SELECT * FROM t301, t302 WHERE t302.x=5 AND t301.a=t302.y; 245 SELECT * FROM t301, t302 WHERE t302.x=5 AND t301.a=t302.y;
235 } { 246 } {
236 0 0 1 {SCAN TABLE t302 (~1 rows)} 247 0 0 1 {SCAN TABLE t302}
237 0 1 0 {SEARCH TABLE t301 USING INTEGER PRIMARY KEY (rowid=?) (~1 rows)} 248 0 1 0 {SEARCH TABLE t301 USING INTEGER PRIMARY KEY (rowid=?)}
238 } 249 }
250 do_execsql_test where3-3.2 {
251 SELECT * FROM t301 WHERE c=3 AND a IS NULL;
252 } {}
253 do_execsql_test where3-3.3 {
254 SELECT * FROM t301 WHERE c=3 AND a IS NOT NULL;
255 } {1 2 3 2 2 3}
239 256
257 if 0 { # Query planner no longer does this
240 # Verify that when there are multiple tables in a join which must be 258 # Verify that when there are multiple tables in a join which must be
241 # full table scans that the query planner attempts put the table with 259 # full table scans that the query planner attempts put the table with
242 # the fewest number of output rows as the outer loop. 260 # the fewest number of output rows as the outer loop.
243 # 261 #
244 do_execsql_test where3-4.0 { 262 do_execsql_test where3-4.0 {
245 CREATE TABLE t400(a INTEGER PRIMARY KEY, b, c); 263 CREATE TABLE t400(a INTEGER PRIMARY KEY, b, c);
246 CREATE TABLE t401(p INTEGER PRIMARY KEY, q, r); 264 CREATE TABLE t401(p INTEGER PRIMARY KEY, q, r);
247 CREATE TABLE t402(x INTEGER PRIMARY KEY, y, z); 265 CREATE TABLE t402(x INTEGER PRIMARY KEY, y, z);
248 EXPLAIN QUERY PLAN 266 EXPLAIN QUERY PLAN
249 SELECT * FROM t400, t401, t402 WHERE t402.z GLOB 'abc*'; 267 SELECT * FROM t400, t401, t402 WHERE t402.z GLOB 'abc*';
250 } { 268 } {
251 0 0 2 {SCAN TABLE t402 (~500000 rows)} 269 0 0 2 {SCAN TABLE t402}
252 0 1 0 {SCAN TABLE t400 (~1000000 rows)} 270 0 1 0 {SCAN TABLE t400}
253 0 2 1 {SCAN TABLE t401 (~1000000 rows)} 271 0 2 1 {SCAN TABLE t401}
254 } 272 }
255 do_execsql_test where3-4.1 { 273 do_execsql_test where3-4.1 {
256 EXPLAIN QUERY PLAN 274 EXPLAIN QUERY PLAN
257 SELECT * FROM t400, t401, t402 WHERE t401.r GLOB 'abc*'; 275 SELECT * FROM t400, t401, t402 WHERE t401.r GLOB 'abc*';
258 } { 276 } {
259 0 0 1 {SCAN TABLE t401 (~500000 rows)} 277 0 0 1 {SCAN TABLE t401}
260 0 1 0 {SCAN TABLE t400 (~1000000 rows)} 278 0 1 0 {SCAN TABLE t400}
261 0 2 2 {SCAN TABLE t402 (~1000000 rows)} 279 0 2 2 {SCAN TABLE t402}
262 } 280 }
263 do_execsql_test where3-4.2 { 281 do_execsql_test where3-4.2 {
264 EXPLAIN QUERY PLAN 282 EXPLAIN QUERY PLAN
265 SELECT * FROM t400, t401, t402 WHERE t400.c GLOB 'abc*'; 283 SELECT * FROM t400, t401, t402 WHERE t400.c GLOB 'abc*';
266 } { 284 } {
267 0 0 0 {SCAN TABLE t400 (~500000 rows)} 285 0 0 0 {SCAN TABLE t400}
268 0 1 1 {SCAN TABLE t401 (~1000000 rows)} 286 0 1 1 {SCAN TABLE t401}
269 0 2 2 {SCAN TABLE t402 (~1000000 rows)} 287 0 2 2 {SCAN TABLE t402}
270 } 288 }
289 } ;# endif
271 290
272 # Verify that a performance regression encountered by firefox 291 # Verify that a performance regression encountered by firefox
273 # has been fixed. 292 # has been fixed.
274 # 293 #
275 do_execsql_test where3-5.0 { 294 do_execsql_test where3-5.0 {
276 CREATE TABLE aaa (id INTEGER PRIMARY KEY, type INTEGER, 295 CREATE TABLE aaa (id INTEGER PRIMARY KEY, type INTEGER,
277 fk INTEGER DEFAULT NULL, parent INTEGER, 296 fk INTEGER DEFAULT NULL, parent INTEGER,
278 position INTEGER, title LONGVARCHAR, 297 position INTEGER, title LONGVARCHAR,
279 keyword_id INTEGER, folder_type TEXT, 298 keyword_id INTEGER, folder_type TEXT,
280 dateAdded INTEGER, lastModified INTEGER); 299 dateAdded INTEGER, lastModified INTEGER);
(...skipping 10 matching lines...) Expand all
291 CREATE INDEX bbb_333 ON bbb (fk, lastModified); 310 CREATE INDEX bbb_333 ON bbb (fk, lastModified);
292 311
293 EXPLAIN QUERY PLAN 312 EXPLAIN QUERY PLAN
294 SELECT bbb.title AS tag_title 313 SELECT bbb.title AS tag_title
295 FROM aaa JOIN bbb ON bbb.id = aaa.parent 314 FROM aaa JOIN bbb ON bbb.id = aaa.parent
296 WHERE aaa.fk = 'constant' 315 WHERE aaa.fk = 'constant'
297 AND LENGTH(bbb.title) > 0 316 AND LENGTH(bbb.title) > 0
298 AND bbb.parent = 4 317 AND bbb.parent = 4
299 ORDER BY bbb.title COLLATE NOCASE ASC; 318 ORDER BY bbb.title COLLATE NOCASE ASC;
300 } { 319 } {
301 0 0 0 {SEARCH TABLE aaa USING INDEX aaa_333 (fk=?) (~10 rows)} 320 0 0 0 {SEARCH TABLE aaa USING INDEX aaa_333 (fk=?)}
302 0 1 1 {SEARCH TABLE bbb USING INTEGER PRIMARY KEY (rowid=?) (~1 rows)} 321 0 1 1 {SEARCH TABLE bbb USING INTEGER PRIMARY KEY (rowid=?)}
303 0 0 0 {USE TEMP B-TREE FOR ORDER BY} 322 0 0 0 {USE TEMP B-TREE FOR ORDER BY}
304 } 323 }
305 do_execsql_test where3-5.1 { 324 do_execsql_test where3-5.1 {
306 EXPLAIN QUERY PLAN 325 EXPLAIN QUERY PLAN
307 SELECT bbb.title AS tag_title 326 SELECT bbb.title AS tag_title
308 FROM aaa JOIN aaa AS bbb ON bbb.id = aaa.parent 327 FROM aaa JOIN aaa AS bbb ON bbb.id = aaa.parent
309 WHERE aaa.fk = 'constant' 328 WHERE aaa.fk = 'constant'
310 AND LENGTH(bbb.title) > 0 329 AND LENGTH(bbb.title) > 0
311 AND bbb.parent = 4 330 AND bbb.parent = 4
312 ORDER BY bbb.title COLLATE NOCASE ASC; 331 ORDER BY bbb.title COLLATE NOCASE ASC;
313 } { 332 } {
314 0 0 0 {SEARCH TABLE aaa USING INDEX aaa_333 (fk=?) (~10 rows)} 333 0 0 0 {SEARCH TABLE aaa USING INDEX aaa_333 (fk=?)}
315 0 1 1 {SEARCH TABLE aaa AS bbb USING INTEGER PRIMARY KEY (rowid=?) (~1 rows)} 334 0 1 1 {SEARCH TABLE aaa AS bbb USING INTEGER PRIMARY KEY (rowid=?)}
316 0 0 0 {USE TEMP B-TREE FOR ORDER BY} 335 0 0 0 {USE TEMP B-TREE FOR ORDER BY}
317 } 336 }
318 do_execsql_test where3-5.2 { 337 do_execsql_test where3-5.2 {
319 EXPLAIN QUERY PLAN 338 EXPLAIN QUERY PLAN
320 SELECT bbb.title AS tag_title 339 SELECT bbb.title AS tag_title
321 FROM bbb JOIN aaa ON bbb.id = aaa.parent 340 FROM bbb JOIN aaa ON bbb.id = aaa.parent
322 WHERE aaa.fk = 'constant' 341 WHERE aaa.fk = 'constant'
323 AND LENGTH(bbb.title) > 0 342 AND LENGTH(bbb.title) > 0
324 AND bbb.parent = 4 343 AND bbb.parent = 4
325 ORDER BY bbb.title COLLATE NOCASE ASC; 344 ORDER BY bbb.title COLLATE NOCASE ASC;
326 } { 345 } {
327 0 0 1 {SEARCH TABLE aaa USING INDEX aaa_333 (fk=?) (~10 rows)} 346 0 0 1 {SEARCH TABLE aaa USING INDEX aaa_333 (fk=?)}
328 0 1 0 {SEARCH TABLE bbb USING INTEGER PRIMARY KEY (rowid=?) (~1 rows)} 347 0 1 0 {SEARCH TABLE bbb USING INTEGER PRIMARY KEY (rowid=?)}
329 0 0 0 {USE TEMP B-TREE FOR ORDER BY} 348 0 0 0 {USE TEMP B-TREE FOR ORDER BY}
330 } 349 }
331 do_execsql_test where3-5.3 { 350 do_execsql_test where3-5.3 {
332 EXPLAIN QUERY PLAN 351 EXPLAIN QUERY PLAN
333 SELECT bbb.title AS tag_title 352 SELECT bbb.title AS tag_title
334 FROM aaa AS bbb JOIN aaa ON bbb.id = aaa.parent 353 FROM aaa AS bbb JOIN aaa ON bbb.id = aaa.parent
335 WHERE aaa.fk = 'constant' 354 WHERE aaa.fk = 'constant'
336 AND LENGTH(bbb.title) > 0 355 AND LENGTH(bbb.title) > 0
337 AND bbb.parent = 4 356 AND bbb.parent = 4
338 ORDER BY bbb.title COLLATE NOCASE ASC; 357 ORDER BY bbb.title COLLATE NOCASE ASC;
339 } { 358 } {
340 0 0 1 {SEARCH TABLE aaa USING INDEX aaa_333 (fk=?) (~10 rows)} 359 0 0 1 {SEARCH TABLE aaa USING INDEX aaa_333 (fk=?)}
341 0 1 0 {SEARCH TABLE aaa AS bbb USING INTEGER PRIMARY KEY (rowid=?) (~1 rows)} 360 0 1 0 {SEARCH TABLE aaa AS bbb USING INTEGER PRIMARY KEY (rowid=?)}
342 0 0 0 {USE TEMP B-TREE FOR ORDER BY} 361 0 0 0 {USE TEMP B-TREE FOR ORDER BY}
343 } 362 }
344 363
364 # Name resolution with NATURAL JOIN and USING
365 #
366 do_test where3-6.setup {
367 db eval {
368 CREATE TABLE t6w(a, w);
369 INSERT INTO t6w VALUES(1, 'w-one');
370 INSERT INTO t6w VALUES(2, 'w-two');
371 INSERT INTO t6w VALUES(9, 'w-nine');
372 CREATE TABLE t6x(a, x);
373 INSERT INTO t6x VALUES(1, 'x-one');
374 INSERT INTO t6x VALUES(3, 'x-three');
375 INSERT INTO t6x VALUES(9, 'x-nine');
376 CREATE TABLE t6y(a, y);
377 INSERT INTO t6y VALUES(1, 'y-one');
378 INSERT INTO t6y VALUES(4, 'y-four');
379 INSERT INTO t6y VALUES(9, 'y-nine');
380 CREATE TABLE t6z(a, z);
381 INSERT INTO t6z VALUES(1, 'z-one');
382 INSERT INTO t6z VALUES(5, 'z-five');
383 INSERT INTO t6z VALUES(9, 'z-nine');
384 }
385 } {}
386 set cnt 0
387 foreach predicate {
388 {}
389 {ORDER BY a}
390 {ORDER BY t6w.a}
391 {WHERE a>0}
392 {WHERE t6y.a>0}
393 {WHERE a>0 ORDER BY a}
394 } {
395 incr cnt
396 do_test where3-6.$cnt.1 {
397 set sql "SELECT * FROM t6w NATURAL JOIN t6x NATURAL JOIN t6y"
398 append sql " NATURAL JOIN t6z "
399 append sql $::predicate
400 db eval $sql
401 } {1 w-one x-one y-one z-one 9 w-nine x-nine y-nine z-nine}
402 do_test where3-6.$cnt.2 {
403 set sql "SELECT * FROM t6w JOIN t6x USING(a) JOIN t6y USING(a)"
404 append sql " JOIN t6z USING(a) "
405 append sql $::predicate
406 db eval $sql
407 } {1 w-one x-one y-one z-one 9 w-nine x-nine y-nine z-nine}
408 do_test where3-6.$cnt.3 {
409 set sql "SELECT * FROM t6w NATURAL JOIN t6x JOIN t6y USING(a)"
410 append sql " JOIN t6z USING(a) "
411 append sql $::predicate
412 db eval $sql
413 } {1 w-one x-one y-one z-one 9 w-nine x-nine y-nine z-nine}
414 do_test where3-6.$cnt.4 {
415 set sql "SELECT * FROM t6w JOIN t6x USING(a) NATURAL JOIN t6y"
416 append sql " JOIN t6z USING(a) "
417 append sql $::predicate
418 db eval $sql
419 } {1 w-one x-one y-one z-one 9 w-nine x-nine y-nine z-nine}
420 do_test where3-6.$cnt.5 {
421 set sql "SELECT * FROM t6w JOIN t6x USING(a) JOIN t6y USING(a)"
422 append sql " NATURAL JOIN t6z "
423 append sql $::predicate
424 db eval $sql
425 } {1 w-one x-one y-one z-one 9 w-nine x-nine y-nine z-nine}
426 do_test where3-6.$cnt.6 {
427 set sql "SELECT * FROM t6w JOIN t6x USING(a) NATURAL JOIN t6y"
428 append sql " NATURAL JOIN t6z "
429 append sql $::predicate
430 db eval $sql
431 } {1 w-one x-one y-one z-one 9 w-nine x-nine y-nine z-nine}
432 do_test where3-6.$cnt.7 {
433 set sql "SELECT * FROM t6w NATURAL JOIN t6x JOIN t6y USING(a)"
434 append sql " NATURAL JOIN t6z "
435 append sql $::predicate
436 db eval $sql
437 } {1 w-one x-one y-one z-one 9 w-nine x-nine y-nine z-nine}
438 do_test where3-6.$cnt.8 {
439 set sql "SELECT * FROM t6w NATURAL JOIN t6x NATURAL JOIN t6y"
440 append sql " JOIN t6z USING(a) "
441 append sql $::predicate
442 db eval $sql
443 } {1 w-one x-one y-one z-one 9 w-nine x-nine y-nine z-nine}
444 }
445
446 do_execsql_test where3-7-setup {
447 CREATE TABLE t71(x1 INTEGER PRIMARY KEY, y1);
448 CREATE TABLE t72(x2 INTEGER PRIMARY KEY, y2);
449 CREATE TABLE t73(x3, y3);
450 CREATE TABLE t74(x4, y4);
451 INSERT INTO t71 VALUES(123,234);
452 INSERT INTO t72 VALUES(234,345);
453 INSERT INTO t73 VALUES(123,234);
454 INSERT INTO t74 VALUES(234,345);
455 INSERT INTO t74 VALUES(234,678);
456 } {}
457 foreach disabled_opt {none omit-noop-join all} {
458 optimization_control db all 1
459 optimization_control db $disabled_opt 0
460 do_execsql_test where3-7.$disabled_opt.1 {
461 SELECT x1 FROM t71 LEFT JOIN t72 ON x2=y1;
462 } {123}
463 do_execsql_test where3-7.$disabled_opt.2 {
464 SELECT x1 FROM t71 LEFT JOIN t72 ON x2=y1 WHERE y2 IS NULL;
465 } {}
466 do_execsql_test where3-7.$disabled_opt.3 {
467 SELECT x1 FROM t71 LEFT JOIN t72 ON x2=y1 WHERE y2 IS NOT NULL;
468 } {123}
469 do_execsql_test where3-7.$disabled_opt.4 {
470 SELECT x1 FROM t71 LEFT JOIN t72 ON x2=y1 AND y2 IS NULL;
471 } {123}
472 do_execsql_test where3-7.$disabled_opt.5 {
473 SELECT x1 FROM t71 LEFT JOIN t72 ON x2=y1 AND y2 IS NOT NULL;
474 } {123}
475 do_execsql_test where3-7.$disabled_opt.6 {
476 SELECT x3 FROM t73 LEFT JOIN t72 ON x2=y3;
477 } {123}
478 do_execsql_test where3-7.$disabled_opt.7 {
479 SELECT DISTINCT x3 FROM t73 LEFT JOIN t72 ON x2=y3;
480 } {123}
481 do_execsql_test where3-7.$disabled_opt.8 {
482 SELECT x3 FROM t73 LEFT JOIN t74 ON x4=y3;
483 } {123 123}
484 do_execsql_test where3-7.$disabled_opt.9 {
485 SELECT DISTINCT x3 FROM t73 LEFT JOIN t74 ON x4=y3;
486 } {123}
487 }
488
489
345 finish_test 490 finish_test
OLDNEW
« no previous file with comments | « third_party/sqlite/src/test/where2.test ('k') | third_party/sqlite/src/test/where4.test » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698