blob: 78d04be15d4ad047347ae57919eac23bf4613088 [file] [log] [blame]
drhfae37af2008-06-25 02:22:32 +00001# 2008 June 24
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# This file implements regression tests for SQLite library.
12#
13# The focus of this file is testing the compound-SELECT merge
14# optimization. Or, in other words, making sure that all
15# possible combinations of UNION, UNION ALL, EXCEPT, and
16# INTERSECT work together with an ORDER BY clause (with or w/o
17# explicit sort order and explicit collating secquites) and
18# with and without optional LIMIT and OFFSET clauses.
19#
drh74073b62008-08-21 14:24:29 +000020# $Id: selectA.test,v 1.6 2008/08/21 14:24:29 drh Exp $
drhfae37af2008-06-25 02:22:32 +000021
22set testdir [file dirname $argv0]
23source $testdir/tester.tcl
dan38524132014-05-01 20:26:48 +000024set testprefix selectA
drhfae37af2008-06-25 02:22:32 +000025
danielk1977de3e41e2008-08-04 03:51:24 +000026ifcapable !compound {
27 finish_test
28 return
29}
30
drhfae37af2008-06-25 02:22:32 +000031do_test selectA-1.0 {
32 execsql {
33 CREATE TABLE t1(a,b,c COLLATE NOCASE);
34 INSERT INTO t1 VALUES(1,'a','a');
35 INSERT INTO t1 VALUES(9.9, 'b', 'B');
36 INSERT INTO t1 VALUES(NULL, 'C', 'c');
37 INSERT INTO t1 VALUES('hello', 'd', 'D');
38 INSERT INTO t1 VALUES(x'616263', 'e', 'e');
39 SELECT * FROM t1;
40 }
41} {1 a a 9.9 b B {} C c hello d D abc e e}
42do_test selectA-1.1 {
43 execsql {
44 CREATE TABLE t2(x,y,z COLLATE NOCASE);
45 INSERT INTO t2 VALUES(NULL,'U','u');
46 INSERT INTO t2 VALUES('mad', 'Z', 'z');
47 INSERT INTO t2 VALUES(x'68617265', 'm', 'M');
48 INSERT INTO t2 VALUES(5.2e6, 'X', 'x');
49 INSERT INTO t2 VALUES(-23, 'Y', 'y');
50 SELECT * FROM t2;
51 }
52} {{} U u mad Z z hare m M 5200000.0 X x -23 Y y}
drh3f994d02008-06-25 14:31:53 +000053do_test selectA-1.2 {
54 execsql {
55 CREATE TABLE t3(a,b,c COLLATE NOCASE);
56 INSERT INTO t3 SELECT * FROM t1;
57 INSERT INTO t3 SELECT * FROM t2;
58 INSERT INTO t3 SELECT * FROM t1;
59 INSERT INTO t3 SELECT * FROM t2;
60 INSERT INTO t3 SELECT * FROM t1;
61 INSERT INTO t3 SELECT * FROM t2;
62 SELECT count(*) FROM t3;
63 }
64} {30}
drhfae37af2008-06-25 02:22:32 +000065
66do_test selectA-2.1 {
67 execsql {
68 SELECT a,b,c FROM t1 UNION ALL SELECT x,y,z FROM t2
69 ORDER BY a,b,c
70 }
71} {{} C c {} U u -23 Y y 1 a a 9.9 b B 5200000.0 X x hello d D mad Z z abc e e hare m M}
drh74073b62008-08-21 14:24:29 +000072do_test selectA-2.1.1 { # Ticket #3314
73 execsql {
74 SELECT t1.a, t1.b, t1.c FROM t1 UNION ALL SELECT x,y,z FROM t2
75 ORDER BY a,b,c
76 }
77} {{} C c {} U u -23 Y y 1 a a 9.9 b B 5200000.0 X x hello d D mad Z z abc e e hare m M}
78do_test selectA-2.1.2 { # Ticket #3314
79 execsql {
80 SELECT a,b,c FROM t1 UNION ALL SELECT x,y,z FROM t2
81 ORDER BY t1.a, t1.b, t1.c
82 }
83} {{} C c {} U u -23 Y y 1 a a 9.9 b B 5200000.0 X x hello d D mad Z z abc e e hare m M}
drhfae37af2008-06-25 02:22:32 +000084do_test selectA-2.2 {
85 execsql {
86 SELECT a,b,c FROM t1 UNION ALL SELECT x,y,z FROM t2
87 ORDER BY a DESC,b,c
88 }
89} {hare m M abc e e mad Z z hello d D 5200000.0 X x 9.9 b B 1 a a -23 Y y {} C c {} U u}
90do_test selectA-2.3 {
91 execsql {
92 SELECT a,b,c FROM t1 UNION ALL SELECT x,y,z FROM t2
93 ORDER BY a,c,b
94 }
95} {{} C c {} U u -23 Y y 1 a a 9.9 b B 5200000.0 X x hello d D mad Z z abc e e hare m M}
96do_test selectA-2.4 {
97 execsql {
98 SELECT a,b,c FROM t1 UNION ALL SELECT x,y,z FROM t2
99 ORDER BY b,a,c
100 }
101} {{} C c {} U u 5200000.0 X x -23 Y y mad Z z 1 a a 9.9 b B hello d D abc e e hare m M}
102do_test selectA-2.5 {
103 execsql {
104 SELECT a,b,c FROM t1 UNION ALL SELECT x,y,z FROM t2
105 ORDER BY b COLLATE NOCASE,a,c
106 }
107} {1 a a 9.9 b B {} C c hello d D abc e e hare m M {} U u 5200000.0 X x -23 Y y mad Z z}
108do_test selectA-2.6 {
109 execsql {
110 SELECT a,b,c FROM t1 UNION ALL SELECT x,y,z FROM t2
111 ORDER BY b COLLATE NOCASE DESC,a,c
112 }
113} {mad Z z -23 Y y 5200000.0 X x {} U u hare m M abc e e hello d D {} C c 9.9 b B 1 a a}
114do_test selectA-2.7 {
115 execsql {
116 SELECT a,b,c FROM t1 UNION ALL SELECT x,y,z FROM t2
117 ORDER BY c,b,a
118 }
119} {1 a a 9.9 b B {} C c hello d D abc e e hare m M {} U u 5200000.0 X x -23 Y y mad Z z}
120do_test selectA-2.8 {
121 execsql {
122 SELECT a,b,c FROM t1 UNION ALL SELECT x,y,z FROM t2
123 ORDER BY c,a,b
124 }
125} {1 a a 9.9 b B {} C c hello d D abc e e hare m M {} U u 5200000.0 X x -23 Y y mad Z z}
126do_test selectA-2.9 {
127 execsql {
128 SELECT a,b,c FROM t1 UNION ALL SELECT x,y,z FROM t2
129 ORDER BY c DESC,a,b
130 }
131} {mad Z z -23 Y y 5200000.0 X x {} U u hare m M abc e e hello d D {} C c 9.9 b B 1 a a}
132do_test selectA-2.10 {
133 execsql {
134 SELECT a,b,c FROM t1 UNION ALL SELECT x,y,z FROM t2
135 ORDER BY c COLLATE BINARY DESC,a,b
136 }
137} {mad Z z -23 Y y 5200000.0 X x {} U u abc e e {} C c 1 a a hare m M hello d D 9.9 b B}
138do_test selectA-2.11 {
139 execsql {
140 SELECT x,y,z FROM t2 UNION ALL SELECT a,b,c FROM t1
141 ORDER BY a,b,c
142 }
143} {{} C c {} U u -23 Y y 1 a a 9.9 b B 5200000.0 X x hello d D mad Z z abc e e hare m M}
144do_test selectA-2.12 {
145 execsql {
146 SELECT x,y,z FROM t2 UNION ALL SELECT a,b,c FROM t1
147 ORDER BY a DESC,b,c
148 }
149} {hare m M abc e e mad Z z hello d D 5200000.0 X x 9.9 b B 1 a a -23 Y y {} C c {} U u}
150do_test selectA-2.13 {
151 execsql {
152 SELECT x,y,z FROM t2 UNION ALL SELECT a,b,c FROM t1
153 ORDER BY a,c,b
154 }
155} {{} C c {} U u -23 Y y 1 a a 9.9 b B 5200000.0 X x hello d D mad Z z abc e e hare m M}
156do_test selectA-2.14 {
157 execsql {
158 SELECT x,y,z FROM t2 UNION ALL SELECT a,b,c FROM t1
159 ORDER BY b,a,c
160 }
161} {{} C c {} U u 5200000.0 X x -23 Y y mad Z z 1 a a 9.9 b B hello d D abc e e hare m M}
162do_test selectA-2.15 {
163 execsql {
164 SELECT x,y,z FROM t2 UNION ALL SELECT a,b,c FROM t1
165 ORDER BY b COLLATE NOCASE,a,c
166 }
167} {1 a a 9.9 b B {} C c hello d D abc e e hare m M {} U u 5200000.0 X x -23 Y y mad Z z}
168do_test selectA-2.16 {
169 execsql {
170 SELECT x,y,z FROM t2 UNION ALL SELECT a,b,c FROM t1
171 ORDER BY b COLLATE NOCASE DESC,a,c
172 }
173} {mad Z z -23 Y y 5200000.0 X x {} U u hare m M abc e e hello d D {} C c 9.9 b B 1 a a}
174do_test selectA-2.17 {
175 execsql {
176 SELECT x,y,z FROM t2 UNION ALL SELECT a,b,c FROM t1
177 ORDER BY c,b,a
178 }
179} {1 a a 9.9 b B {} C c hello d D abc e e hare m M {} U u 5200000.0 X x -23 Y y mad Z z}
180do_test selectA-2.18 {
181 execsql {
182 SELECT x,y,z FROM t2 UNION ALL SELECT a,b,c FROM t1
183 ORDER BY c,a,b
184 }
185} {1 a a 9.9 b B {} C c hello d D abc e e hare m M {} U u 5200000.0 X x -23 Y y mad Z z}
186do_test selectA-2.19 {
187 execsql {
188 SELECT x,y,z FROM t2 UNION ALL SELECT a,b,c FROM t1
189 ORDER BY c DESC,a,b
190 }
191} {mad Z z -23 Y y 5200000.0 X x {} U u hare m M abc e e hello d D {} C c 9.9 b B 1 a a}
192do_test selectA-2.20 {
193 execsql {
194 SELECT x,y,z FROM t2 UNION ALL SELECT a,b,c FROM t1
195 ORDER BY c COLLATE BINARY DESC,a,b
196 }
197} {mad Z z -23 Y y 5200000.0 X x {} U u abc e e {} C c 1 a a hare m M hello d D 9.9 b B}
198do_test selectA-2.21 {
199 execsql {
200 SELECT a,b,c FROM t1 UNION SELECT x,y,z FROM t2
201 ORDER BY a,b,c
202 }
203} {{} C c {} U u -23 Y y 1 a a 9.9 b B 5200000.0 X x hello d D mad Z z abc e e hare m M}
204do_test selectA-2.22 {
205 execsql {
206 SELECT a,b,c FROM t1 UNION SELECT x,y,z FROM t2
207 ORDER BY a DESC,b,c
208 }
209} {hare m M abc e e mad Z z hello d D 5200000.0 X x 9.9 b B 1 a a -23 Y y {} C c {} U u}
210do_test selectA-2.23 {
211 execsql {
212 SELECT a,b,c FROM t1 UNION SELECT x,y,z FROM t2
213 ORDER BY a,c,b
214 }
215} {{} C c {} U u -23 Y y 1 a a 9.9 b B 5200000.0 X x hello d D mad Z z abc e e hare m M}
216do_test selectA-2.24 {
217 execsql {
218 SELECT a,b,c FROM t1 UNION SELECT x,y,z FROM t2
219 ORDER BY b,a,c
220 }
221} {{} C c {} U u 5200000.0 X x -23 Y y mad Z z 1 a a 9.9 b B hello d D abc e e hare m M}
222do_test selectA-2.25 {
223 execsql {
224 SELECT a,b,c FROM t1 UNION SELECT x,y,z FROM t2
225 ORDER BY b COLLATE NOCASE,a,c
226 }
227} {1 a a 9.9 b B {} C c hello d D abc e e hare m M {} U u 5200000.0 X x -23 Y y mad Z z}
228do_test selectA-2.26 {
229 execsql {
230 SELECT a,b,c FROM t1 UNION SELECT x,y,z FROM t2
231 ORDER BY b COLLATE NOCASE DESC,a,c
232 }
233} {mad Z z -23 Y y 5200000.0 X x {} U u hare m M abc e e hello d D {} C c 9.9 b B 1 a a}
234do_test selectA-2.27 {
235 execsql {
236 SELECT a,b,c FROM t1 UNION SELECT x,y,z FROM t2
237 ORDER BY c,b,a
238 }
239} {1 a a 9.9 b B {} C c hello d D abc e e hare m M {} U u 5200000.0 X x -23 Y y mad Z z}
240do_test selectA-2.28 {
241 execsql {
242 SELECT a,b,c FROM t1 UNION SELECT x,y,z FROM t2
243 ORDER BY c,a,b
244 }
245} {1 a a 9.9 b B {} C c hello d D abc e e hare m M {} U u 5200000.0 X x -23 Y y mad Z z}
246do_test selectA-2.29 {
247 execsql {
248 SELECT a,b,c FROM t1 UNION SELECT x,y,z FROM t2
249 ORDER BY c DESC,a,b
250 }
251} {mad Z z -23 Y y 5200000.0 X x {} U u hare m M abc e e hello d D {} C c 9.9 b B 1 a a}
252do_test selectA-2.30 {
253 execsql {
254 SELECT a,b,c FROM t1 UNION SELECT x,y,z FROM t2
255 ORDER BY c COLLATE BINARY DESC,a,b
256 }
257} {mad Z z -23 Y y 5200000.0 X x {} U u abc e e {} C c 1 a a hare m M hello d D 9.9 b B}
258do_test selectA-2.31 {
259 execsql {
260 SELECT x,y,z FROM t2 UNION SELECT a,b,c FROM t1
261 ORDER BY a,b,c
262 }
263} {{} C c {} U u -23 Y y 1 a a 9.9 b B 5200000.0 X x hello d D mad Z z abc e e hare m M}
264do_test selectA-2.32 {
265 execsql {
266 SELECT x,y,z FROM t2 UNION SELECT a,b,c FROM t1
267 ORDER BY a DESC,b,c
268 }
269} {hare m M abc e e mad Z z hello d D 5200000.0 X x 9.9 b B 1 a a -23 Y y {} C c {} U u}
270do_test selectA-2.33 {
271 execsql {
272 SELECT x,y,z FROM t2 UNION SELECT a,b,c FROM t1
273 ORDER BY a,c,b
274 }
275} {{} C c {} U u -23 Y y 1 a a 9.9 b B 5200000.0 X x hello d D mad Z z abc e e hare m M}
276do_test selectA-2.34 {
277 execsql {
278 SELECT x,y,z FROM t2 UNION SELECT a,b,c FROM t1
279 ORDER BY b,a,c
280 }
281} {{} C c {} U u 5200000.0 X x -23 Y y mad Z z 1 a a 9.9 b B hello d D abc e e hare m M}
282do_test selectA-2.35 {
283 execsql {
284 SELECT x,y,z FROM t2 UNION SELECT a,b,c FROM t1
drhc01b7302013-05-07 17:49:08 +0000285 ORDER BY y COLLATE NOCASE,x,z
drhfae37af2008-06-25 02:22:32 +0000286 }
287} {1 a a 9.9 b B {} C c hello d D abc e e hare m M {} U u 5200000.0 X x -23 Y y mad Z z}
288do_test selectA-2.36 {
289 execsql {
290 SELECT x,y,z FROM t2 UNION SELECT a,b,c FROM t1
drhc01b7302013-05-07 17:49:08 +0000291 ORDER BY y COLLATE NOCASE DESC,x,z
drhfae37af2008-06-25 02:22:32 +0000292 }
293} {mad Z z -23 Y y 5200000.0 X x {} U u hare m M abc e e hello d D {} C c 9.9 b B 1 a a}
294do_test selectA-2.37 {
295 execsql {
296 SELECT x,y,z FROM t2 UNION SELECT a,b,c FROM t1
297 ORDER BY c,b,a
298 }
299} {1 a a 9.9 b B {} C c hello d D abc e e hare m M {} U u 5200000.0 X x -23 Y y mad Z z}
300do_test selectA-2.38 {
301 execsql {
302 SELECT x,y,z FROM t2 UNION SELECT a,b,c FROM t1
303 ORDER BY c,a,b
304 }
305} {1 a a 9.9 b B {} C c hello d D abc e e hare m M {} U u 5200000.0 X x -23 Y y mad Z z}
306do_test selectA-2.39 {
307 execsql {
308 SELECT x,y,z FROM t2 UNION SELECT a,b,c FROM t1
309 ORDER BY c DESC,a,b
310 }
311} {mad Z z -23 Y y 5200000.0 X x {} U u hare m M abc e e hello d D {} C c 9.9 b B 1 a a}
312do_test selectA-2.40 {
313 execsql {
314 SELECT x,y,z FROM t2 UNION SELECT a,b,c FROM t1
drhc01b7302013-05-07 17:49:08 +0000315 ORDER BY z COLLATE BINARY DESC,x,y
drhfae37af2008-06-25 02:22:32 +0000316 }
317} {mad Z z -23 Y y 5200000.0 X x {} U u abc e e {} C c 1 a a hare m M hello d D 9.9 b B}
318do_test selectA-2.41 {
319 execsql {
320 SELECT a,b,c FROM t1 EXCEPT SELECT a,b,c FROM t1 WHERE b>='d'
321 ORDER BY a,b,c
322 }
323} {{} C c 1 a a 9.9 b B}
324do_test selectA-2.42 {
325 execsql {
326 SELECT a,b,c FROM t1 INTERSECT SELECT a,b,c FROM t1 WHERE b>='d'
327 ORDER BY a,b,c
328 }
329} {hello d D abc e e}
330do_test selectA-2.43 {
331 execsql {
332 SELECT a,b,c FROM t1 WHERE b>='d' INTERSECT SELECT a,b,c FROM t1
333 ORDER BY a,b,c
334 }
335} {hello d D abc e e}
336do_test selectA-2.44 {
337 execsql {
338 SELECT a,b,c FROM t1 EXCEPT SELECT a,b,c FROM t1 WHERE b<'d'
339 ORDER BY a,b,c
340 }
341} {hello d D abc e e}
342do_test selectA-2.45 {
343 execsql {
344 SELECT a,b,c FROM t1 INTERSECT SELECT a,b,c FROM t1 WHERE b<'d'
345 ORDER BY a,b,c
346 }
347} {{} C c 1 a a 9.9 b B}
348do_test selectA-2.46 {
349 execsql {
350 SELECT a,b,c FROM t1 WHERE b<'d' INTERSECT SELECT a,b,c FROM t1
351 ORDER BY a,b,c
352 }
353} {{} C c 1 a a 9.9 b B}
354do_test selectA-2.47 {
355 execsql {
356 SELECT a,b,c FROM t1 EXCEPT SELECT a,b,c FROM t1 WHERE b>='d'
357 ORDER BY a DESC
358 }
359} {9.9 b B 1 a a {} C c}
360do_test selectA-2.48 {
361 execsql {
362 SELECT a,b,c FROM t1 INTERSECT SELECT a,b,c FROM t1 WHERE b>='d'
363 ORDER BY a DESC
364 }
365} {abc e e hello d D}
366do_test selectA-2.49 {
367 execsql {
368 SELECT a,b,c FROM t1 WHERE b>='d' INTERSECT SELECT a,b,c FROM t1
369 ORDER BY a DESC
370 }
371} {abc e e hello d D}
372do_test selectA-2.50 {
373 execsql {
374 SELECT a,b,c FROM t1 EXCEPT SELECT a,b,c FROM t1 WHERE b<'d'
375 ORDER BY a DESC
376 }
377} {abc e e hello d D}
378do_test selectA-2.51 {
379 execsql {
380 SELECT a,b,c FROM t1 INTERSECT SELECT a,b,c FROM t1 WHERE b<'d'
381 ORDER BY a DESC
382 }
383} {9.9 b B 1 a a {} C c}
384do_test selectA-2.52 {
385 execsql {
386 SELECT a,b,c FROM t1 WHERE b<'d' INTERSECT SELECT a,b,c FROM t1
387 ORDER BY a DESC
388 }
389} {9.9 b B 1 a a {} C c}
390do_test selectA-2.53 {
391 execsql {
392 SELECT a,b,c FROM t1 EXCEPT SELECT a,b,c FROM t1 WHERE b>='d'
393 ORDER BY b, a DESC
394 }
395} {{} C c 1 a a 9.9 b B}
396do_test selectA-2.54 {
397 execsql {
398 SELECT a,b,c FROM t1 INTERSECT SELECT a,b,c FROM t1 WHERE b>='d'
399 ORDER BY b
400 }
401} {hello d D abc e e}
402do_test selectA-2.55 {
403 execsql {
404 SELECT a,b,c FROM t1 WHERE b>='d' INTERSECT SELECT a,b,c FROM t1
405 ORDER BY b DESC, c
406 }
407} {abc e e hello d D}
408do_test selectA-2.56 {
409 execsql {
410 SELECT a,b,c FROM t1 EXCEPT SELECT a,b,c FROM t1 WHERE b<'d'
411 ORDER BY b, c DESC, a
412 }
413} {hello d D abc e e}
414do_test selectA-2.57 {
415 execsql {
416 SELECT a,b,c FROM t1 INTERSECT SELECT a,b,c FROM t1 WHERE b<'d'
417 ORDER BY b COLLATE NOCASE
418 }
419} {1 a a 9.9 b B {} C c}
420do_test selectA-2.58 {
421 execsql {
422 SELECT a,b,c FROM t1 WHERE b<'d' INTERSECT SELECT a,b,c FROM t1
423 ORDER BY b
424 }
425} {{} C c 1 a a 9.9 b B}
426do_test selectA-2.59 {
427 execsql {
428 SELECT a,b,c FROM t1 EXCEPT SELECT a,b,c FROM t1 WHERE b>='d'
429 ORDER BY c, a DESC
430 }
431} {1 a a 9.9 b B {} C c}
432do_test selectA-2.60 {
433 execsql {
434 SELECT a,b,c FROM t1 INTERSECT SELECT a,b,c FROM t1 WHERE b>='d'
435 ORDER BY c
436 }
437} {hello d D abc e e}
438do_test selectA-2.61 {
439 execsql {
440 SELECT a,b,c FROM t1 WHERE b>='d' INTERSECT SELECT a,b,c FROM t1
441 ORDER BY c COLLATE BINARY, b DESC, c, a, b, c, a, b, c
442 }
443} {hello d D abc e e}
444do_test selectA-2.62 {
445 execsql {
446 SELECT a,b,c FROM t1 EXCEPT SELECT a,b,c FROM t1 WHERE b<'d'
447 ORDER BY c DESC, a
448 }
449} {abc e e hello d D}
450do_test selectA-2.63 {
451 execsql {
452 SELECT a,b,c FROM t1 INTERSECT SELECT a,b,c FROM t1 WHERE b<'d'
453 ORDER BY c COLLATE NOCASE
454 }
455} {1 a a 9.9 b B {} C c}
456do_test selectA-2.64 {
457 execsql {
458 SELECT a,b,c FROM t1 WHERE b<'d' INTERSECT SELECT a,b,c FROM t1
459 ORDER BY c
460 }
461} {1 a a 9.9 b B {} C c}
drh3f994d02008-06-25 14:31:53 +0000462do_test selectA-2.65 {
463 execsql {
464 SELECT a,b,c FROM t3 INTERSECT SELECT a,b,c FROM t1 WHERE b<'d'
465 ORDER BY c COLLATE NOCASE
466 }
467} {1 a a 9.9 b B {} C c}
468do_test selectA-2.66 {
469 execsql {
470 SELECT a,b,c FROM t1 WHERE b<'d' INTERSECT SELECT a,b,c FROM t3
471 ORDER BY c
472 }
473} {1 a a 9.9 b B {} C c}
474do_test selectA-2.67 {
475 execsql {
476 SELECT a,b,c FROM t1 EXCEPT SELECT a,b,c FROM t3 WHERE b<'d'
477 ORDER BY c DESC, a
478 }
479} {abc e e hello d D}
480do_test selectA-2.68 {
481 execsql {
482 SELECT a,b,c FROM t1 EXCEPT SELECT a,b,c FROM t1 WHERE b<'d'
483 INTERSECT SELECT a,b,c FROM t3
484 EXCEPT SELECT b,c,a FROM t3
485 ORDER BY c DESC, a
486 }
487} {abc e e hello d D}
488do_test selectA-2.69 {
489 execsql {
490 SELECT a,b,c FROM t1 INTERSECT SELECT a,b,c FROM t1 WHERE b<'d'
491 INTERSECT SELECT a,b,c FROM t3
492 EXCEPT SELECT b,c,a FROM t3
493 ORDER BY c COLLATE NOCASE
494 }
495} {1 a a 9.9 b B {} C c}
496do_test selectA-2.70 {
497 execsql {
498 SELECT a,b,c FROM t1 WHERE b<'d' INTERSECT SELECT a,b,c FROM t1
499 INTERSECT SELECT a,b,c FROM t3
500 EXCEPT SELECT b,c,a FROM t3
501 ORDER BY c
502 }
503} {1 a a 9.9 b B {} C c}
504do_test selectA-2.71 {
505 execsql {
506 SELECT a,b,c FROM t1 WHERE b<'d'
507 INTERSECT SELECT a,b,c FROM t1
508 INTERSECT SELECT a,b,c FROM t3
509 EXCEPT SELECT b,c,a FROM t3
510 INTERSECT SELECT a,b,c FROM t1
511 EXCEPT SELECT x,y,z FROM t2
512 INTERSECT SELECT a,b,c FROM t3
513 EXCEPT SELECT y,x,z FROM t2
514 INTERSECT SELECT a,b,c FROM t1
515 EXCEPT SELECT c,b,a FROM t3
516 ORDER BY c
517 }
518} {1 a a 9.9 b B {} C c}
519do_test selectA-2.72 {
520 execsql {
521 SELECT a,b,c FROM t3 UNION SELECT x,y,z FROM t2
522 ORDER BY a,b,c
523 }
524} {{} C c {} U u -23 Y y 1 a a 9.9 b B 5200000.0 X x hello d D mad Z z abc e e hare m M}
525do_test selectA-2.73 {
526 execsql {
527 SELECT a,b,c FROM t3 UNION SELECT x,y,z FROM t2
528 ORDER BY a DESC,b,c
529 }
530} {hare m M abc e e mad Z z hello d D 5200000.0 X x 9.9 b B 1 a a -23 Y y {} C c {} U u}
531do_test selectA-2.74 {
532 execsql {
533 SELECT a,b,c FROM t3 UNION SELECT x,y,z FROM t2
534 ORDER BY a,c,b
535 }
536} {{} C c {} U u -23 Y y 1 a a 9.9 b B 5200000.0 X x hello d D mad Z z abc e e hare m M}
537do_test selectA-2.75 {
538 execsql {
539 SELECT a,b,c FROM t3 UNION SELECT x,y,z FROM t2
540 ORDER BY b,a,c
541 }
542} {{} C c {} U u 5200000.0 X x -23 Y y mad Z z 1 a a 9.9 b B hello d D abc e e hare m M}
543do_test selectA-2.76 {
544 execsql {
545 SELECT a,b,c FROM t3 UNION SELECT x,y,z FROM t2
546 ORDER BY b COLLATE NOCASE,a,c
547 }
548} {1 a a 9.9 b B {} C c hello d D abc e e hare m M {} U u 5200000.0 X x -23 Y y mad Z z}
549do_test selectA-2.77 {
550 execsql {
551 SELECT a,b,c FROM t3 UNION SELECT x,y,z FROM t2
552 ORDER BY b COLLATE NOCASE DESC,a,c
553 }
554} {mad Z z -23 Y y 5200000.0 X x {} U u hare m M abc e e hello d D {} C c 9.9 b B 1 a a}
555do_test selectA-2.78 {
556 execsql {
557 SELECT a,b,c FROM t3 UNION SELECT x,y,z FROM t2
558 ORDER BY c,b,a
559 }
560} {1 a a 9.9 b B {} C c hello d D abc e e hare m M {} U u 5200000.0 X x -23 Y y mad Z z}
561do_test selectA-2.79 {
562 execsql {
563 SELECT a,b,c FROM t3 UNION SELECT x,y,z FROM t2
564 ORDER BY c,a,b
565 }
566} {1 a a 9.9 b B {} C c hello d D abc e e hare m M {} U u 5200000.0 X x -23 Y y mad Z z}
567do_test selectA-2.80 {
568 execsql {
569 SELECT a,b,c FROM t3 UNION SELECT x,y,z FROM t2
570 ORDER BY c DESC,a,b
571 }
572} {mad Z z -23 Y y 5200000.0 X x {} U u hare m M abc e e hello d D {} C c 9.9 b B 1 a a}
573do_test selectA-2.81 {
574 execsql {
575 SELECT a,b,c FROM t3 UNION SELECT x,y,z FROM t2
576 ORDER BY c COLLATE BINARY DESC,a,b
577 }
578} {mad Z z -23 Y y 5200000.0 X x {} U u abc e e {} C c 1 a a hare m M hello d D 9.9 b B}
579do_test selectA-2.82 {
580 execsql {
581 SELECT x,y,z FROM t2 UNION SELECT a,b,c FROM t3
582 ORDER BY a,b,c
583 }
584} {{} C c {} U u -23 Y y 1 a a 9.9 b B 5200000.0 X x hello d D mad Z z abc e e hare m M}
585do_test selectA-2.83 {
586 execsql {
587 SELECT x,y,z FROM t2 UNION SELECT a,b,c FROM t3
588 ORDER BY a DESC,b,c
589 }
590} {hare m M abc e e mad Z z hello d D 5200000.0 X x 9.9 b B 1 a a -23 Y y {} C c {} U u}
591do_test selectA-2.84 {
592 execsql {
593 SELECT x,y,z FROM t2 UNION SELECT a,b,c FROM t3
594 ORDER BY a,c,b
595 }
596} {{} C c {} U u -23 Y y 1 a a 9.9 b B 5200000.0 X x hello d D mad Z z abc e e hare m M}
597do_test selectA-2.85 {
598 execsql {
599 SELECT x,y,z FROM t2 UNION SELECT a,b,c FROM t3
600 ORDER BY b,a,c
601 }
602} {{} C c {} U u 5200000.0 X x -23 Y y mad Z z 1 a a 9.9 b B hello d D abc e e hare m M}
603do_test selectA-2.86 {
604 execsql {
605 SELECT x,y,z FROM t2 UNION SELECT a,b,c FROM t3
drhc01b7302013-05-07 17:49:08 +0000606 ORDER BY y COLLATE NOCASE,x,z
drh3f994d02008-06-25 14:31:53 +0000607 }
608} {1 a a 9.9 b B {} C c hello d D abc e e hare m M {} U u 5200000.0 X x -23 Y y mad Z z}
609do_test selectA-2.87 {
610 execsql {
611 SELECT x,y,z FROM t2 UNION SELECT a,b,c FROM t3
612 ORDER BY y COLLATE NOCASE DESC,x,z
613 }
614} {mad Z z -23 Y y 5200000.0 X x {} U u hare m M abc e e hello d D {} C c 9.9 b B 1 a a}
615do_test selectA-2.88 {
616 execsql {
617 SELECT x,y,z FROM t2 UNION SELECT a,b,c FROM t3
618 ORDER BY c,b,a
619 }
620} {1 a a 9.9 b B {} C c hello d D abc e e hare m M {} U u 5200000.0 X x -23 Y y mad Z z}
621do_test selectA-2.89 {
622 execsql {
623 SELECT x,y,z FROM t2 UNION SELECT a,b,c FROM t3
624 ORDER BY c,a,b
625 }
626} {1 a a 9.9 b B {} C c hello d D abc e e hare m M {} U u 5200000.0 X x -23 Y y mad Z z}
627do_test selectA-2.90 {
628 execsql {
629 SELECT x,y,z FROM t2 UNION SELECT a,b,c FROM t3
630 ORDER BY c DESC,a,b
631 }
632} {mad Z z -23 Y y 5200000.0 X x {} U u hare m M abc e e hello d D {} C c 9.9 b B 1 a a}
633do_test selectA-2.91 {
634 execsql {
635 SELECT x,y,z FROM t2 UNION SELECT a,b,c FROM t3
drhc01b7302013-05-07 17:49:08 +0000636 ORDER BY z COLLATE BINARY DESC,x,y
drh3f994d02008-06-25 14:31:53 +0000637 }
638} {mad Z z -23 Y y 5200000.0 X x {} U u abc e e {} C c 1 a a hare m M hello d D 9.9 b B}
639do_test selectA-2.92 {
640 execsql {
641 SELECT x,y,z FROM t2
642 INTERSECT SELECT a,b,c FROM t3
643 EXCEPT SELECT c,b,a FROM t1
644 UNION SELECT a,b,c FROM t3
645 INTERSECT SELECT a,b,c FROM t3
646 EXCEPT SELECT c,b,a FROM t1
647 UNION SELECT a,b,c FROM t3
648 ORDER BY y COLLATE NOCASE DESC,x,z
649 }
650} {mad Z z -23 Y y 5200000.0 X x {} U u hare m M abc e e hello d D {} C c 9.9 b B 1 a a}
drh85e9e222008-07-15 00:27:34 +0000651do_test selectA-2.93 {
652 execsql {
653 SELECT upper((SELECT c FROM t1 UNION SELECT z FROM t2 ORDER BY 1));
654 }
655} {A}
656do_test selectA-2.94 {
657 execsql {
658 SELECT lower((SELECT c FROM t1 UNION ALL SELECT z FROM t2 ORDER BY 1));
659 }
660} {a}
661do_test selectA-2.95 {
662 execsql {
663 SELECT lower((SELECT c FROM t1 INTERSECT SELECT z FROM t2 ORDER BY 1));
664 }
665} {{}}
666do_test selectA-2.96 {
667 execsql {
668 SELECT lower((SELECT z FROM t2 EXCEPT SELECT c FROM t1 ORDER BY 1));
669 }
670} {m}
drh3f994d02008-06-25 14:31:53 +0000671
drhfae37af2008-06-25 02:22:32 +0000672
673do_test selectA-3.0 {
674 execsql {
675 CREATE UNIQUE INDEX t1a ON t1(a);
676 CREATE UNIQUE INDEX t1b ON t1(b);
677 CREATE UNIQUE INDEX t1c ON t1(c);
678 CREATE UNIQUE INDEX t2x ON t2(x);
679 CREATE UNIQUE INDEX t2y ON t2(y);
680 CREATE UNIQUE INDEX t2z ON t2(z);
681 SELECT name FROM sqlite_master WHERE type='index'
682 }
683} {t1a t1b t1c t2x t2y t2z}
684do_test selectA-3.1 {
685 execsql {
686 SELECT a,b,c FROM t1 UNION ALL SELECT x,y,z FROM t2
687 ORDER BY a,b,c
688 }
689} {{} C c {} U u -23 Y y 1 a a 9.9 b B 5200000.0 X x hello d D mad Z z abc e e hare m M}
drh74073b62008-08-21 14:24:29 +0000690do_test selectA-3.1.1 { # Ticket #3314
691 execsql {
692 SELECT t1.a,b,t1.c FROM t1 UNION ALL SELECT x,y,z FROM t2
693 ORDER BY a,t1.b,t1.c
694 }
695} {{} C c {} U u -23 Y y 1 a a 9.9 b B 5200000.0 X x hello d D mad Z z abc e e hare m M}
drhfae37af2008-06-25 02:22:32 +0000696do_test selectA-3.2 {
697 execsql {
698 SELECT a,b,c FROM t1 UNION ALL SELECT x,y,z FROM t2
699 ORDER BY a DESC,b,c
700 }
701} {hare m M abc e e mad Z z hello d D 5200000.0 X x 9.9 b B 1 a a -23 Y y {} C c {} U u}
702do_test selectA-3.3 {
703 execsql {
704 SELECT a,b,c FROM t1 UNION ALL SELECT x,y,z FROM t2
705 ORDER BY a,c,b
706 }
707} {{} C c {} U u -23 Y y 1 a a 9.9 b B 5200000.0 X x hello d D mad Z z abc e e hare m M}
708do_test selectA-3.4 {
709 execsql {
710 SELECT a,b,c FROM t1 UNION ALL SELECT x,y,z FROM t2
711 ORDER BY b,a,c
712 }
713} {{} C c {} U u 5200000.0 X x -23 Y y mad Z z 1 a a 9.9 b B hello d D abc e e hare m M}
714do_test selectA-3.5 {
715 execsql {
716 SELECT a,b,c FROM t1 UNION ALL SELECT x,y,z FROM t2
717 ORDER BY b COLLATE NOCASE,a,c
718 }
719} {1 a a 9.9 b B {} C c hello d D abc e e hare m M {} U u 5200000.0 X x -23 Y y mad Z z}
720do_test selectA-3.6 {
721 execsql {
722 SELECT a,b,c FROM t1 UNION ALL SELECT x,y,z FROM t2
723 ORDER BY b COLLATE NOCASE DESC,a,c
724 }
725} {mad Z z -23 Y y 5200000.0 X x {} U u hare m M abc e e hello d D {} C c 9.9 b B 1 a a}
726do_test selectA-3.7 {
727 execsql {
728 SELECT a,b,c FROM t1 UNION ALL SELECT x,y,z FROM t2
729 ORDER BY c,b,a
730 }
731} {1 a a 9.9 b B {} C c hello d D abc e e hare m M {} U u 5200000.0 X x -23 Y y mad Z z}
732do_test selectA-3.8 {
733 execsql {
734 SELECT a,b,c FROM t1 UNION ALL SELECT x,y,z FROM t2
735 ORDER BY c,a,b
736 }
737} {1 a a 9.9 b B {} C c hello d D abc e e hare m M {} U u 5200000.0 X x -23 Y y mad Z z}
738do_test selectA-3.9 {
739 execsql {
740 SELECT a,b,c FROM t1 UNION ALL SELECT x,y,z FROM t2
741 ORDER BY c DESC,a,b
742 }
743} {mad Z z -23 Y y 5200000.0 X x {} U u hare m M abc e e hello d D {} C c 9.9 b B 1 a a}
744do_test selectA-3.10 {
745 execsql {
746 SELECT a,b,c FROM t1 UNION ALL SELECT x,y,z FROM t2
747 ORDER BY c COLLATE BINARY DESC,a,b
748 }
749} {mad Z z -23 Y y 5200000.0 X x {} U u abc e e {} C c 1 a a hare m M hello d D 9.9 b B}
750do_test selectA-3.11 {
751 execsql {
752 SELECT x,y,z FROM t2 UNION ALL SELECT a,b,c FROM t1
753 ORDER BY a,b,c
754 }
755} {{} C c {} U u -23 Y y 1 a a 9.9 b B 5200000.0 X x hello d D mad Z z abc e e hare m M}
756do_test selectA-3.12 {
757 execsql {
758 SELECT x,y,z FROM t2 UNION ALL SELECT a,b,c FROM t1
759 ORDER BY a DESC,b,c
760 }
761} {hare m M abc e e mad Z z hello d D 5200000.0 X x 9.9 b B 1 a a -23 Y y {} C c {} U u}
762do_test selectA-3.13 {
763 execsql {
764 SELECT x,y,z FROM t2 UNION ALL SELECT a,b,c FROM t1
765 ORDER BY a,c,b
766 }
767} {{} C c {} U u -23 Y y 1 a a 9.9 b B 5200000.0 X x hello d D mad Z z abc e e hare m M}
768do_test selectA-3.14 {
769 execsql {
770 SELECT x,y,z FROM t2 UNION ALL SELECT a,b,c FROM t1
771 ORDER BY b,a,c
772 }
773} {{} C c {} U u 5200000.0 X x -23 Y y mad Z z 1 a a 9.9 b B hello d D abc e e hare m M}
774do_test selectA-3.15 {
775 execsql {
776 SELECT x,y,z FROM t2 UNION ALL SELECT a,b,c FROM t1
777 ORDER BY b COLLATE NOCASE,a,c
778 }
779} {1 a a 9.9 b B {} C c hello d D abc e e hare m M {} U u 5200000.0 X x -23 Y y mad Z z}
780do_test selectA-3.16 {
781 execsql {
782 SELECT x,y,z FROM t2 UNION ALL SELECT a,b,c FROM t1
783 ORDER BY b COLLATE NOCASE DESC,a,c
784 }
785} {mad Z z -23 Y y 5200000.0 X x {} U u hare m M abc e e hello d D {} C c 9.9 b B 1 a a}
786do_test selectA-3.17 {
787 execsql {
788 SELECT x,y,z FROM t2 UNION ALL SELECT a,b,c FROM t1
789 ORDER BY c,b,a
790 }
791} {1 a a 9.9 b B {} C c hello d D abc e e hare m M {} U u 5200000.0 X x -23 Y y mad Z z}
792do_test selectA-3.18 {
793 execsql {
794 SELECT x,y,z FROM t2 UNION ALL SELECT a,b,c FROM t1
795 ORDER BY c,a,b
796 }
797} {1 a a 9.9 b B {} C c hello d D abc e e hare m M {} U u 5200000.0 X x -23 Y y mad Z z}
798do_test selectA-3.19 {
799 execsql {
800 SELECT x,y,z FROM t2 UNION ALL SELECT a,b,c FROM t1
801 ORDER BY c DESC,a,b
802 }
803} {mad Z z -23 Y y 5200000.0 X x {} U u hare m M abc e e hello d D {} C c 9.9 b B 1 a a}
804do_test selectA-3.20 {
805 execsql {
806 SELECT x,y,z FROM t2 UNION ALL SELECT a,b,c FROM t1
807 ORDER BY c COLLATE BINARY DESC,a,b
808 }
809} {mad Z z -23 Y y 5200000.0 X x {} U u abc e e {} C c 1 a a hare m M hello d D 9.9 b B}
810do_test selectA-3.21 {
811 execsql {
812 SELECT a,b,c FROM t1 UNION SELECT x,y,z FROM t2
813 ORDER BY a,b,c
814 }
815} {{} C c {} U u -23 Y y 1 a a 9.9 b B 5200000.0 X x hello d D mad Z z abc e e hare m M}
816do_test selectA-3.22 {
817 execsql {
818 SELECT a,b,c FROM t1 UNION SELECT x,y,z FROM t2
819 ORDER BY a DESC,b,c
820 }
821} {hare m M abc e e mad Z z hello d D 5200000.0 X x 9.9 b B 1 a a -23 Y y {} C c {} U u}
822do_test selectA-3.23 {
823 execsql {
824 SELECT a,b,c FROM t1 UNION SELECT x,y,z FROM t2
825 ORDER BY a,c,b
826 }
827} {{} C c {} U u -23 Y y 1 a a 9.9 b B 5200000.0 X x hello d D mad Z z abc e e hare m M}
828do_test selectA-3.24 {
829 execsql {
830 SELECT a,b,c FROM t1 UNION SELECT x,y,z FROM t2
831 ORDER BY b,a,c
832 }
833} {{} C c {} U u 5200000.0 X x -23 Y y mad Z z 1 a a 9.9 b B hello d D abc e e hare m M}
834do_test selectA-3.25 {
835 execsql {
836 SELECT a,b,c FROM t1 UNION SELECT x,y,z FROM t2
837 ORDER BY b COLLATE NOCASE,a,c
838 }
839} {1 a a 9.9 b B {} C c hello d D abc e e hare m M {} U u 5200000.0 X x -23 Y y mad Z z}
840do_test selectA-3.26 {
841 execsql {
842 SELECT a,b,c FROM t1 UNION SELECT x,y,z FROM t2
843 ORDER BY b COLLATE NOCASE DESC,a,c
844 }
845} {mad Z z -23 Y y 5200000.0 X x {} U u hare m M abc e e hello d D {} C c 9.9 b B 1 a a}
846do_test selectA-3.27 {
847 execsql {
848 SELECT a,b,c FROM t1 UNION SELECT x,y,z FROM t2
849 ORDER BY c,b,a
850 }
851} {1 a a 9.9 b B {} C c hello d D abc e e hare m M {} U u 5200000.0 X x -23 Y y mad Z z}
852do_test selectA-3.28 {
853 execsql {
854 SELECT a,b,c FROM t1 UNION SELECT x,y,z FROM t2
855 ORDER BY c,a,b
856 }
857} {1 a a 9.9 b B {} C c hello d D abc e e hare m M {} U u 5200000.0 X x -23 Y y mad Z z}
858do_test selectA-3.29 {
859 execsql {
860 SELECT a,b,c FROM t1 UNION SELECT x,y,z FROM t2
861 ORDER BY c DESC,a,b
862 }
863} {mad Z z -23 Y y 5200000.0 X x {} U u hare m M abc e e hello d D {} C c 9.9 b B 1 a a}
864do_test selectA-3.30 {
865 execsql {
866 SELECT a,b,c FROM t1 UNION SELECT x,y,z FROM t2
867 ORDER BY c COLLATE BINARY DESC,a,b
868 }
869} {mad Z z -23 Y y 5200000.0 X x {} U u abc e e {} C c 1 a a hare m M hello d D 9.9 b B}
870do_test selectA-3.31 {
871 execsql {
872 SELECT x,y,z FROM t2 UNION SELECT a,b,c FROM t1
873 ORDER BY a,b,c
874 }
875} {{} C c {} U u -23 Y y 1 a a 9.9 b B 5200000.0 X x hello d D mad Z z abc e e hare m M}
876do_test selectA-3.32 {
877 execsql {
878 SELECT x,y,z FROM t2 UNION SELECT a,b,c FROM t1
879 ORDER BY a DESC,b,c
880 }
881} {hare m M abc e e mad Z z hello d D 5200000.0 X x 9.9 b B 1 a a -23 Y y {} C c {} U u}
882do_test selectA-3.33 {
883 execsql {
884 SELECT x,y,z FROM t2 UNION SELECT a,b,c FROM t1
885 ORDER BY a,c,b
886 }
887} {{} C c {} U u -23 Y y 1 a a 9.9 b B 5200000.0 X x hello d D mad Z z abc e e hare m M}
888do_test selectA-3.34 {
889 execsql {
890 SELECT x,y,z FROM t2 UNION SELECT a,b,c FROM t1
891 ORDER BY b,a,c
892 }
893} {{} C c {} U u 5200000.0 X x -23 Y y mad Z z 1 a a 9.9 b B hello d D abc e e hare m M}
894do_test selectA-3.35 {
895 execsql {
896 SELECT x,y,z FROM t2 UNION SELECT a,b,c FROM t1
drhc01b7302013-05-07 17:49:08 +0000897 ORDER BY y COLLATE NOCASE,x,z
drhfae37af2008-06-25 02:22:32 +0000898 }
899} {1 a a 9.9 b B {} C c hello d D abc e e hare m M {} U u 5200000.0 X x -23 Y y mad Z z}
900do_test selectA-3.36 {
901 execsql {
902 SELECT x,y,z FROM t2 UNION SELECT a,b,c FROM t1
drhc01b7302013-05-07 17:49:08 +0000903 ORDER BY y COLLATE NOCASE DESC,x,z
drhfae37af2008-06-25 02:22:32 +0000904 }
905} {mad Z z -23 Y y 5200000.0 X x {} U u hare m M abc e e hello d D {} C c 9.9 b B 1 a a}
906do_test selectA-3.37 {
907 execsql {
908 SELECT x,y,z FROM t2 UNION SELECT a,b,c FROM t1
909 ORDER BY c,b,a
910 }
911} {1 a a 9.9 b B {} C c hello d D abc e e hare m M {} U u 5200000.0 X x -23 Y y mad Z z}
912do_test selectA-3.38 {
913 execsql {
914 SELECT x,y,z FROM t2 UNION SELECT a,b,c FROM t1
915 ORDER BY c,a,b
916 }
917} {1 a a 9.9 b B {} C c hello d D abc e e hare m M {} U u 5200000.0 X x -23 Y y mad Z z}
918do_test selectA-3.39 {
919 execsql {
920 SELECT x,y,z FROM t2 UNION SELECT a,b,c FROM t1
921 ORDER BY c DESC,a,b
922 }
923} {mad Z z -23 Y y 5200000.0 X x {} U u hare m M abc e e hello d D {} C c 9.9 b B 1 a a}
924do_test selectA-3.40 {
925 execsql {
926 SELECT x,y,z FROM t2 UNION SELECT a,b,c FROM t1
drhc01b7302013-05-07 17:49:08 +0000927 ORDER BY z COLLATE BINARY DESC,x,y
drhfae37af2008-06-25 02:22:32 +0000928 }
929} {mad Z z -23 Y y 5200000.0 X x {} U u abc e e {} C c 1 a a hare m M hello d D 9.9 b B}
930do_test selectA-3.41 {
931 execsql {
932 SELECT a,b,c FROM t1 EXCEPT SELECT a,b,c FROM t1 WHERE b>='d'
933 ORDER BY a,b,c
934 }
935} {{} C c 1 a a 9.9 b B}
936do_test selectA-3.42 {
937 execsql {
938 SELECT a,b,c FROM t1 INTERSECT SELECT a,b,c FROM t1 WHERE b>='d'
939 ORDER BY a,b,c
940 }
941} {hello d D abc e e}
942do_test selectA-3.43 {
943 execsql {
944 SELECT a,b,c FROM t1 WHERE b>='d' INTERSECT SELECT a,b,c FROM t1
945 ORDER BY a,b,c
946 }
947} {hello d D abc e e}
948do_test selectA-3.44 {
949 execsql {
950 SELECT a,b,c FROM t1 EXCEPT SELECT a,b,c FROM t1 WHERE b<'d'
951 ORDER BY a,b,c
952 }
953} {hello d D abc e e}
954do_test selectA-3.45 {
955 execsql {
956 SELECT a,b,c FROM t1 INTERSECT SELECT a,b,c FROM t1 WHERE b<'d'
957 ORDER BY a,b,c
958 }
959} {{} C c 1 a a 9.9 b B}
960do_test selectA-3.46 {
961 execsql {
962 SELECT a,b,c FROM t1 WHERE b<'d' INTERSECT SELECT a,b,c FROM t1
963 ORDER BY a,b,c
964 }
965} {{} C c 1 a a 9.9 b B}
966do_test selectA-3.47 {
967 execsql {
968 SELECT a,b,c FROM t1 EXCEPT SELECT a,b,c FROM t1 WHERE b>='d'
969 ORDER BY a DESC
970 }
971} {9.9 b B 1 a a {} C c}
972do_test selectA-3.48 {
973 execsql {
974 SELECT a,b,c FROM t1 INTERSECT SELECT a,b,c FROM t1 WHERE b>='d'
975 ORDER BY a DESC
976 }
977} {abc e e hello d D}
978do_test selectA-3.49 {
979 execsql {
980 SELECT a,b,c FROM t1 WHERE b>='d' INTERSECT SELECT a,b,c FROM t1
981 ORDER BY a DESC
982 }
983} {abc e e hello d D}
984do_test selectA-3.50 {
985 execsql {
986 SELECT a,b,c FROM t1 EXCEPT SELECT a,b,c FROM t1 WHERE b<'d'
987 ORDER BY a DESC
988 }
989} {abc e e hello d D}
990do_test selectA-3.51 {
991 execsql {
992 SELECT a,b,c FROM t1 INTERSECT SELECT a,b,c FROM t1 WHERE b<'d'
993 ORDER BY a DESC
994 }
995} {9.9 b B 1 a a {} C c}
996do_test selectA-3.52 {
997 execsql {
998 SELECT a,b,c FROM t1 WHERE b<'d' INTERSECT SELECT a,b,c FROM t1
999 ORDER BY a DESC
1000 }
1001} {9.9 b B 1 a a {} C c}
1002do_test selectA-3.53 {
1003 execsql {
1004 SELECT a,b,c FROM t1 EXCEPT SELECT a,b,c FROM t1 WHERE b>='d'
1005 ORDER BY b, a DESC
1006 }
1007} {{} C c 1 a a 9.9 b B}
1008do_test selectA-3.54 {
1009 execsql {
1010 SELECT a,b,c FROM t1 INTERSECT SELECT a,b,c FROM t1 WHERE b>='d'
1011 ORDER BY b
1012 }
1013} {hello d D abc e e}
1014do_test selectA-3.55 {
1015 execsql {
1016 SELECT a,b,c FROM t1 WHERE b>='d' INTERSECT SELECT a,b,c FROM t1
1017 ORDER BY b DESC, c
1018 }
1019} {abc e e hello d D}
1020do_test selectA-3.56 {
1021 execsql {
1022 SELECT a,b,c FROM t1 EXCEPT SELECT a,b,c FROM t1 WHERE b<'d'
1023 ORDER BY b, c DESC, a
1024 }
1025} {hello d D abc e e}
1026do_test selectA-3.57 {
1027 execsql {
1028 SELECT a,b,c FROM t1 INTERSECT SELECT a,b,c FROM t1 WHERE b<'d'
1029 ORDER BY b COLLATE NOCASE
1030 }
1031} {1 a a 9.9 b B {} C c}
1032do_test selectA-3.58 {
1033 execsql {
1034 SELECT a,b,c FROM t1 WHERE b<'d' INTERSECT SELECT a,b,c FROM t1
1035 ORDER BY b
1036 }
1037} {{} C c 1 a a 9.9 b B}
1038do_test selectA-3.59 {
1039 execsql {
1040 SELECT a,b,c FROM t1 EXCEPT SELECT a,b,c FROM t1 WHERE b>='d'
1041 ORDER BY c, a DESC
1042 }
1043} {1 a a 9.9 b B {} C c}
1044do_test selectA-3.60 {
1045 execsql {
1046 SELECT a,b,c FROM t1 INTERSECT SELECT a,b,c FROM t1 WHERE b>='d'
1047 ORDER BY c
1048 }
1049} {hello d D abc e e}
1050do_test selectA-3.61 {
1051 execsql {
1052 SELECT a,b,c FROM t1 WHERE b>='d' INTERSECT SELECT a,b,c FROM t1
1053 ORDER BY c COLLATE BINARY, b DESC, c, a, b, c, a, b, c
1054 }
1055} {hello d D abc e e}
1056do_test selectA-3.62 {
1057 execsql {
1058 SELECT a,b,c FROM t1 EXCEPT SELECT a,b,c FROM t1 WHERE b<'d'
1059 ORDER BY c DESC, a
1060 }
1061} {abc e e hello d D}
1062do_test selectA-3.63 {
1063 execsql {
1064 SELECT a,b,c FROM t1 INTERSECT SELECT a,b,c FROM t1 WHERE b<'d'
1065 ORDER BY c COLLATE NOCASE
1066 }
1067} {1 a a 9.9 b B {} C c}
1068do_test selectA-3.64 {
1069 execsql {
1070 SELECT a,b,c FROM t1 WHERE b<'d' INTERSECT SELECT a,b,c FROM t1
1071 ORDER BY c
1072 }
1073} {1 a a 9.9 b B {} C c}
drh3f994d02008-06-25 14:31:53 +00001074do_test selectA-3.65 {
1075 execsql {
1076 SELECT a,b,c FROM t3 INTERSECT SELECT a,b,c FROM t1 WHERE b<'d'
1077 ORDER BY c COLLATE NOCASE
1078 }
1079} {1 a a 9.9 b B {} C c}
1080do_test selectA-3.66 {
1081 execsql {
1082 SELECT a,b,c FROM t1 WHERE b<'d' INTERSECT SELECT a,b,c FROM t3
1083 ORDER BY c
1084 }
1085} {1 a a 9.9 b B {} C c}
1086do_test selectA-3.67 {
1087 execsql {
1088 SELECT a,b,c FROM t1 EXCEPT SELECT a,b,c FROM t3 WHERE b<'d'
1089 ORDER BY c DESC, a
1090 }
1091} {abc e e hello d D}
1092do_test selectA-3.68 {
1093 execsql {
1094 SELECT a,b,c FROM t1 EXCEPT SELECT a,b,c FROM t1 WHERE b<'d'
1095 INTERSECT SELECT a,b,c FROM t3
1096 EXCEPT SELECT b,c,a FROM t3
1097 ORDER BY c DESC, a
1098 }
1099} {abc e e hello d D}
1100do_test selectA-3.69 {
1101 execsql {
1102 SELECT a,b,c FROM t1 INTERSECT SELECT a,b,c FROM t1 WHERE b<'d'
1103 INTERSECT SELECT a,b,c FROM t3
1104 EXCEPT SELECT b,c,a FROM t3
1105 ORDER BY c COLLATE NOCASE
1106 }
1107} {1 a a 9.9 b B {} C c}
1108do_test selectA-3.70 {
1109 execsql {
1110 SELECT a,b,c FROM t1 WHERE b<'d' INTERSECT SELECT a,b,c FROM t1
1111 INTERSECT SELECT a,b,c FROM t3
1112 EXCEPT SELECT b,c,a FROM t3
1113 ORDER BY c
1114 }
1115} {1 a a 9.9 b B {} C c}
1116do_test selectA-3.71 {
1117 execsql {
1118 SELECT a,b,c FROM t1 WHERE b<'d'
1119 INTERSECT SELECT a,b,c FROM t1
1120 INTERSECT SELECT a,b,c FROM t3
1121 EXCEPT SELECT b,c,a FROM t3
1122 INTERSECT SELECT a,b,c FROM t1
1123 EXCEPT SELECT x,y,z FROM t2
1124 INTERSECT SELECT a,b,c FROM t3
1125 EXCEPT SELECT y,x,z FROM t2
1126 INTERSECT SELECT a,b,c FROM t1
1127 EXCEPT SELECT c,b,a FROM t3
1128 ORDER BY c
1129 }
1130} {1 a a 9.9 b B {} C c}
1131do_test selectA-3.72 {
1132 execsql {
1133 SELECT a,b,c FROM t3 UNION SELECT x,y,z FROM t2
1134 ORDER BY a,b,c
1135 }
1136} {{} C c {} U u -23 Y y 1 a a 9.9 b B 5200000.0 X x hello d D mad Z z abc e e hare m M}
1137do_test selectA-3.73 {
1138 execsql {
1139 SELECT a,b,c FROM t3 UNION SELECT x,y,z FROM t2
1140 ORDER BY a DESC,b,c
1141 }
1142} {hare m M abc e e mad Z z hello d D 5200000.0 X x 9.9 b B 1 a a -23 Y y {} C c {} U u}
1143do_test selectA-3.74 {
1144 execsql {
1145 SELECT a,b,c FROM t3 UNION SELECT x,y,z FROM t2
1146 ORDER BY a,c,b
1147 }
1148} {{} C c {} U u -23 Y y 1 a a 9.9 b B 5200000.0 X x hello d D mad Z z abc e e hare m M}
1149do_test selectA-3.75 {
1150 execsql {
1151 SELECT a,b,c FROM t3 UNION SELECT x,y,z FROM t2
1152 ORDER BY b,a,c
1153 }
1154} {{} C c {} U u 5200000.0 X x -23 Y y mad Z z 1 a a 9.9 b B hello d D abc e e hare m M}
1155do_test selectA-3.76 {
1156 execsql {
1157 SELECT a,b,c FROM t3 UNION SELECT x,y,z FROM t2
1158 ORDER BY b COLLATE NOCASE,a,c
1159 }
1160} {1 a a 9.9 b B {} C c hello d D abc e e hare m M {} U u 5200000.0 X x -23 Y y mad Z z}
1161do_test selectA-3.77 {
1162 execsql {
1163 SELECT a,b,c FROM t3 UNION SELECT x,y,z FROM t2
1164 ORDER BY b COLLATE NOCASE DESC,a,c
1165 }
1166} {mad Z z -23 Y y 5200000.0 X x {} U u hare m M abc e e hello d D {} C c 9.9 b B 1 a a}
1167do_test selectA-3.78 {
1168 execsql {
1169 SELECT a,b,c FROM t3 UNION SELECT x,y,z FROM t2
1170 ORDER BY c,b,a
1171 }
1172} {1 a a 9.9 b B {} C c hello d D abc e e hare m M {} U u 5200000.0 X x -23 Y y mad Z z}
1173do_test selectA-3.79 {
1174 execsql {
1175 SELECT a,b,c FROM t3 UNION SELECT x,y,z FROM t2
1176 ORDER BY c,a,b
1177 }
1178} {1 a a 9.9 b B {} C c hello d D abc e e hare m M {} U u 5200000.0 X x -23 Y y mad Z z}
1179do_test selectA-3.80 {
1180 execsql {
1181 SELECT a,b,c FROM t3 UNION SELECT x,y,z FROM t2
1182 ORDER BY c DESC,a,b
1183 }
1184} {mad Z z -23 Y y 5200000.0 X x {} U u hare m M abc e e hello d D {} C c 9.9 b B 1 a a}
1185do_test selectA-3.81 {
1186 execsql {
1187 SELECT a,b,c FROM t3 UNION SELECT x,y,z FROM t2
1188 ORDER BY c COLLATE BINARY DESC,a,b
1189 }
1190} {mad Z z -23 Y y 5200000.0 X x {} U u abc e e {} C c 1 a a hare m M hello d D 9.9 b B}
1191do_test selectA-3.82 {
1192 execsql {
1193 SELECT x,y,z FROM t2 UNION SELECT a,b,c FROM t3
1194 ORDER BY a,b,c
1195 }
1196} {{} C c {} U u -23 Y y 1 a a 9.9 b B 5200000.0 X x hello d D mad Z z abc e e hare m M}
1197do_test selectA-3.83 {
1198 execsql {
1199 SELECT x,y,z FROM t2 UNION SELECT a,b,c FROM t3
1200 ORDER BY a DESC,b,c
1201 }
1202} {hare m M abc e e mad Z z hello d D 5200000.0 X x 9.9 b B 1 a a -23 Y y {} C c {} U u}
1203do_test selectA-3.84 {
1204 execsql {
1205 SELECT x,y,z FROM t2 UNION SELECT a,b,c FROM t3
1206 ORDER BY a,c,b
1207 }
1208} {{} C c {} U u -23 Y y 1 a a 9.9 b B 5200000.0 X x hello d D mad Z z abc e e hare m M}
1209do_test selectA-3.85 {
1210 execsql {
1211 SELECT x,y,z FROM t2 UNION SELECT a,b,c FROM t3
1212 ORDER BY b,a,c
1213 }
1214} {{} C c {} U u 5200000.0 X x -23 Y y mad Z z 1 a a 9.9 b B hello d D abc e e hare m M}
1215do_test selectA-3.86 {
1216 execsql {
1217 SELECT x,y,z FROM t2 UNION SELECT a,b,c FROM t3
drhc01b7302013-05-07 17:49:08 +00001218 ORDER BY y COLLATE NOCASE,x,z
drh3f994d02008-06-25 14:31:53 +00001219 }
1220} {1 a a 9.9 b B {} C c hello d D abc e e hare m M {} U u 5200000.0 X x -23 Y y mad Z z}
1221do_test selectA-3.87 {
1222 execsql {
1223 SELECT x,y,z FROM t2 UNION SELECT a,b,c FROM t3
1224 ORDER BY y COLLATE NOCASE DESC,x,z
1225 }
1226} {mad Z z -23 Y y 5200000.0 X x {} U u hare m M abc e e hello d D {} C c 9.9 b B 1 a a}
1227do_test selectA-3.88 {
1228 execsql {
1229 SELECT x,y,z FROM t2 UNION SELECT a,b,c FROM t3
1230 ORDER BY c,b,a
1231 }
1232} {1 a a 9.9 b B {} C c hello d D abc e e hare m M {} U u 5200000.0 X x -23 Y y mad Z z}
1233do_test selectA-3.89 {
1234 execsql {
1235 SELECT x,y,z FROM t2 UNION SELECT a,b,c FROM t3
1236 ORDER BY c,a,b
1237 }
1238} {1 a a 9.9 b B {} C c hello d D abc e e hare m M {} U u 5200000.0 X x -23 Y y mad Z z}
1239do_test selectA-3.90 {
1240 execsql {
1241 SELECT x,y,z FROM t2 UNION SELECT a,b,c FROM t3
1242 ORDER BY c DESC,a,b
1243 }
1244} {mad Z z -23 Y y 5200000.0 X x {} U u hare m M abc e e hello d D {} C c 9.9 b B 1 a a}
1245do_test selectA-3.91 {
1246 execsql {
1247 SELECT x,y,z FROM t2 UNION SELECT a,b,c FROM t3
drhc01b7302013-05-07 17:49:08 +00001248 ORDER BY z COLLATE BINARY DESC,x,y
drh3f994d02008-06-25 14:31:53 +00001249 }
1250} {mad Z z -23 Y y 5200000.0 X x {} U u abc e e {} C c 1 a a hare m M hello d D 9.9 b B}
1251do_test selectA-3.92 {
1252 execsql {
1253 SELECT x,y,z FROM t2
1254 INTERSECT SELECT a,b,c FROM t3
1255 EXCEPT SELECT c,b,a FROM t1
1256 UNION SELECT a,b,c FROM t3
1257 INTERSECT SELECT a,b,c FROM t3
1258 EXCEPT SELECT c,b,a FROM t1
1259 UNION SELECT a,b,c FROM t3
1260 ORDER BY y COLLATE NOCASE DESC,x,z
1261 }
1262} {mad Z z -23 Y y 5200000.0 X x {} U u hare m M abc e e hello d D {} C c 9.9 b B 1 a a}
drh85e9e222008-07-15 00:27:34 +00001263do_test selectA-3.93 {
1264 execsql {
1265 SELECT upper((SELECT c FROM t1 UNION SELECT z FROM t2 ORDER BY 1));
1266 }
1267} {A}
1268do_test selectA-3.94 {
1269 execsql {
1270 SELECT lower((SELECT c FROM t1 UNION ALL SELECT z FROM t2 ORDER BY 1));
1271 }
1272} {a}
1273do_test selectA-3.95 {
1274 execsql {
1275 SELECT lower((SELECT c FROM t1 INTERSECT SELECT z FROM t2 ORDER BY 1));
1276 }
1277} {{}}
1278do_test selectA-3.96 {
1279 execsql {
1280 SELECT lower((SELECT z FROM t2 EXCEPT SELECT c FROM t1 ORDER BY 1));
1281 }
1282} {m}
1283do_test selectA-3.97 {
1284 execsql {
1285 SELECT upper((SELECT x FROM (
1286 SELECT x,y,z FROM t2
1287 INTERSECT SELECT a,b,c FROM t3
1288 EXCEPT SELECT c,b,a FROM t1
1289 UNION SELECT a,b,c FROM t3
1290 INTERSECT SELECT a,b,c FROM t3
1291 EXCEPT SELECT c,b,a FROM t1
1292 UNION SELECT a,b,c FROM t3
1293 ORDER BY y COLLATE NOCASE DESC,x,z)))
1294 }
1295} {MAD}
drha6e3a8c2014-02-10 21:07:51 +00001296do_execsql_test selectA-3.98 {
1297 WITH RECURSIVE
1298 xyz(n) AS (
1299 SELECT upper((SELECT x FROM (
1300 SELECT x,y,z FROM t2
1301 INTERSECT SELECT a,b,c FROM t3
1302 EXCEPT SELECT c,b,a FROM t1
1303 UNION SELECT a,b,c FROM t3
1304 INTERSECT SELECT a,b,c FROM t3
1305 EXCEPT SELECT c,b,a FROM t1
1306 UNION SELECT a,b,c FROM t3
1307 ORDER BY y COLLATE NOCASE DESC,x,z)))
1308 UNION ALL
1309 SELECT n || '+' FROM xyz WHERE length(n)<5
1310 )
1311 SELECT n FROM xyz ORDER BY +n;
1312} {MAD MAD+ MAD++}
drhfae37af2008-06-25 02:22:32 +00001313
dan38524132014-05-01 20:26:48 +00001314#-------------------------------------------------------------------------
1315# At one point the following code exposed a temp register reuse problem.
1316#
1317proc f {args} { return 1 }
1318db func f f
1319
1320do_execsql_test 4.1.1 {
1321 CREATE TABLE t4(a, b);
1322 CREATE TABLE t5(c, d);
1323
1324 INSERT INTO t5 VALUES(1, 'x');
1325 INSERT INTO t5 VALUES(2, 'x');
1326 INSERT INTO t4 VALUES(3, 'x');
1327 INSERT INTO t4 VALUES(4, 'x');
1328
1329 CREATE INDEX i1 ON t4(a);
1330 CREATE INDEX i2 ON t5(c);
1331}
1332
1333do_eqp_test 4.1.2 {
1334 SELECT c, d FROM t5
1335 UNION ALL
1336 SELECT a, b FROM t4 WHERE f()==f()
1337 ORDER BY 1,2
1338} {
1339 1 0 0 {SCAN TABLE t5 USING INDEX i2}
1340 1 0 0 {USE TEMP B-TREE FOR RIGHT PART OF ORDER BY}
1341 2 0 0 {SCAN TABLE t4 USING INDEX i1}
1342 2 0 0 {USE TEMP B-TREE FOR RIGHT PART OF ORDER BY}
1343 0 0 0 {COMPOUND SUBQUERIES 1 AND 2 (UNION ALL)}
1344}
1345
1346do_execsql_test 4.1.3 {
1347 SELECT c, d FROM t5
1348 UNION ALL
1349 SELECT a, b FROM t4 WHERE f()==f()
1350 ORDER BY 1,2
1351} {
1352 1 x 2 x 3 x 4 x
1353}
1354
1355do_execsql_test 4.2.1 {
1356 CREATE TABLE t6(a, b);
1357 CREATE TABLE t7(c, d);
1358
1359 INSERT INTO t7 VALUES(2, 9);
1360 INSERT INTO t6 VALUES(3, 0);
1361 INSERT INTO t6 VALUES(4, 1);
1362 INSERT INTO t7 VALUES(5, 6);
1363 INSERT INTO t6 VALUES(6, 0);
1364 INSERT INTO t7 VALUES(7, 6);
1365
1366 CREATE INDEX i6 ON t6(a);
1367 CREATE INDEX i7 ON t7(c);
1368}
1369
1370do_execsql_test 4.2.2 {
1371 SELECT c, f(d,c,d,c,d) FROM t7
1372 UNION ALL
1373 SELECT a, b FROM t6
1374 ORDER BY 1,2
1375} {/2 . 3 . 4 . 5 . 6 . 7 ./}
1376
1377
danb33c50f2015-04-04 16:43:16 +00001378proc strip_rnd {explain} {
1379 regexp -all {sqlite_sq_[0123456789ABCDEF]*} $explain sqlite_sq
1380}
1381
1382proc do_same_test {tn q1 args} {
1383 set r2 [strip_rnd [db eval "EXPLAIN $q1"]]
1384 set i 1
1385 foreach q $args {
1386 set tst [subst -nocommands {strip_rnd [db eval "EXPLAIN $q"]}]
1387 uplevel do_test $tn.$i [list $tst] [list $r2]
1388 incr i
1389 }
1390}
1391
1392do_execsql_test 5.0 {
1393 CREATE TABLE t8(a, b);
1394 CREATE TABLE t9(c, d);
1395} {}
1396
1397do_same_test 5.1 {
1398 SELECT a, b FROM t8 INTERSECT SELECT c, d FROM t9 ORDER BY a;
1399} {
1400 SELECT a, b FROM t8 INTERSECT SELECT c, d FROM t9 ORDER BY t8.a;
1401} {
1402 SELECT a, b FROM t8 INTERSECT SELECT c, d FROM t9 ORDER BY 1;
1403} {
1404 SELECT a, b FROM t8 INTERSECT SELECT c, d FROM t9 ORDER BY c;
1405} {
1406 SELECT a, b FROM t8 INTERSECT SELECT c, d FROM t9 ORDER BY t9.c;
1407}
1408
1409do_same_test 5.2 {
1410 SELECT a, b FROM t8 UNION SELECT c, d FROM t9 ORDER BY a COLLATE NOCASE
1411} {
1412 SELECT a, b FROM t8 UNION SELECT c, d FROM t9 ORDER BY t8.a COLLATE NOCASE
1413} {
1414 SELECT a, b FROM t8 UNION SELECT c, d FROM t9 ORDER BY 1 COLLATE NOCASE
1415} {
1416 SELECT a, b FROM t8 UNION SELECT c, d FROM t9 ORDER BY c COLLATE NOCASE
1417} {
1418 SELECT a, b FROM t8 UNION SELECT c, d FROM t9 ORDER BY t9.c COLLATE NOCASE
1419}
1420
1421do_same_test 5.3 {
1422 SELECT a, b FROM t8 EXCEPT SELECT c, d FROM t9 ORDER BY b, c COLLATE NOCASE
1423} {
1424 SELECT a, b FROM t8 EXCEPT SELECT c, d FROM t9 ORDER BY 2, 1 COLLATE NOCASE
1425} {
1426 SELECT a, b FROM t8 EXCEPT SELECT c, d FROM t9 ORDER BY d, a COLLATE NOCASE
1427} {
1428 SELECT a, b FROM t8 EXCEPT SELECT * FROM t9 ORDER BY t9.d, c COLLATE NOCASE
1429} {
1430 SELECT * FROM t8 EXCEPT SELECT c, d FROM t9 ORDER BY d, t8.a COLLATE NOCASE
1431}
1432
1433do_catchsql_test 5.4 {
1434 SELECT * FROM t8 UNION SELECT * FROM t9 ORDER BY a+b COLLATE NOCASE
1435} {1 {1st ORDER BY term does not match any column in the result set}}
1436
drh4b37cd42016-06-25 11:43:47 +00001437do_execsql_test 6.1 {
1438 DROP TABLE IF EXISTS t1;
1439 DROP TABLE IF EXISTS t2;
1440 CREATE TABLE t1(a INTEGER);
1441 CREATE TABLE t2(b TEXT);
1442 INSERT INTO t2(b) VALUES('12345');
1443 SELECT * FROM (SELECT a FROM t1 UNION SELECT b FROM t2) WHERE a=a;
1444} {12345}
1445
danb33c50f2015-04-04 16:43:16 +00001446
drhfae37af2008-06-25 02:22:32 +00001447finish_test