xref: /sqlite-3.40.0/test/selectA.test (revision ff354e91)
1# 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#
20# $Id: selectA.test,v 1.2 2008/06/25 02:47:57 drh Exp $
21
22set testdir [file dirname $argv0]
23source $testdir/tester.tcl
24
25do_test selectA-1.0 {
26  execsql {
27    CREATE TABLE t1(a,b,c COLLATE NOCASE);
28    INSERT INTO t1 VALUES(1,'a','a');
29    INSERT INTO t1 VALUES(9.9, 'b', 'B');
30    INSERT INTO t1 VALUES(NULL, 'C', 'c');
31    INSERT INTO t1 VALUES('hello', 'd', 'D');
32    INSERT INTO t1 VALUES(x'616263', 'e', 'e');
33    SELECT * FROM t1;
34  }
35} {1 a a 9.9 b B {} C c hello d D abc e e}
36do_test selectA-1.1 {
37  execsql {
38    CREATE TABLE t2(x,y,z COLLATE NOCASE);
39    INSERT INTO t2 VALUES(NULL,'U','u');
40    INSERT INTO t2 VALUES('mad', 'Z', 'z');
41    INSERT INTO t2 VALUES(x'68617265', 'm', 'M');
42    INSERT INTO t2 VALUES(5.2e6, 'X', 'x');
43    INSERT INTO t2 VALUES(-23, 'Y', 'y');
44    SELECT * FROM t2;
45  }
46} {{} U u mad Z z hare m M 5200000.0 X x -23 Y y}
47
48do_test selectA-2.1 {
49  execsql {
50    SELECT a,b,c FROM t1 UNION ALL SELECT x,y,z FROM t2
51    ORDER BY a,b,c
52  }
53} {{} 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}
54do_test selectA-2.2 {
55  execsql {
56    SELECT a,b,c FROM t1 UNION ALL SELECT x,y,z FROM t2
57    ORDER BY a DESC,b,c
58  }
59} {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}
60do_test selectA-2.3 {
61  execsql {
62    SELECT a,b,c FROM t1 UNION ALL SELECT x,y,z FROM t2
63    ORDER BY a,c,b
64  }
65} {{} 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}
66do_test selectA-2.4 {
67  execsql {
68    SELECT a,b,c FROM t1 UNION ALL SELECT x,y,z FROM t2
69    ORDER BY b,a,c
70  }
71} {{} 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}
72do_test selectA-2.5 {
73  execsql {
74    SELECT a,b,c FROM t1 UNION ALL SELECT x,y,z FROM t2
75    ORDER BY b COLLATE NOCASE,a,c
76  }
77} {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}
78do_test selectA-2.6 {
79  execsql {
80    SELECT a,b,c FROM t1 UNION ALL SELECT x,y,z FROM t2
81    ORDER BY b COLLATE NOCASE DESC,a,c
82  }
83} {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}
84do_test selectA-2.7 {
85  execsql {
86    SELECT a,b,c FROM t1 UNION ALL SELECT x,y,z FROM t2
87    ORDER BY c,b,a
88  }
89} {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}
90do_test selectA-2.8 {
91  execsql {
92    SELECT a,b,c FROM t1 UNION ALL SELECT x,y,z FROM t2
93    ORDER BY c,a,b
94  }
95} {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}
96do_test selectA-2.9 {
97  execsql {
98    SELECT a,b,c FROM t1 UNION ALL SELECT x,y,z FROM t2
99    ORDER BY c DESC,a,b
100  }
101} {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}
102do_test selectA-2.10 {
103  execsql {
104    SELECT a,b,c FROM t1 UNION ALL SELECT x,y,z FROM t2
105    ORDER BY c COLLATE BINARY DESC,a,b
106  }
107} {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}
108do_test selectA-2.11 {
109  execsql {
110    SELECT x,y,z FROM t2 UNION ALL SELECT a,b,c FROM t1
111    ORDER BY a,b,c
112  }
113} {{} 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}
114do_test selectA-2.12 {
115  execsql {
116    SELECT x,y,z FROM t2 UNION ALL SELECT a,b,c FROM t1
117    ORDER BY a DESC,b,c
118  }
119} {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}
120do_test selectA-2.13 {
121  execsql {
122    SELECT x,y,z FROM t2 UNION ALL SELECT a,b,c FROM t1
123    ORDER BY a,c,b
124  }
125} {{} 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}
126do_test selectA-2.14 {
127  execsql {
128    SELECT x,y,z FROM t2 UNION ALL SELECT a,b,c FROM t1
129    ORDER BY b,a,c
130  }
131} {{} 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}
132do_test selectA-2.15 {
133  execsql {
134    SELECT x,y,z FROM t2 UNION ALL SELECT a,b,c FROM t1
135    ORDER BY b COLLATE NOCASE,a,c
136  }
137} {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}
138do_test selectA-2.16 {
139  execsql {
140    SELECT x,y,z FROM t2 UNION ALL SELECT a,b,c FROM t1
141    ORDER BY b COLLATE NOCASE DESC,a,c
142  }
143} {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}
144do_test selectA-2.17 {
145  execsql {
146    SELECT x,y,z FROM t2 UNION ALL SELECT a,b,c FROM t1
147    ORDER BY c,b,a
148  }
149} {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}
150do_test selectA-2.18 {
151  execsql {
152    SELECT x,y,z FROM t2 UNION ALL SELECT a,b,c FROM t1
153    ORDER BY c,a,b
154  }
155} {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}
156do_test selectA-2.19 {
157  execsql {
158    SELECT x,y,z FROM t2 UNION ALL SELECT a,b,c FROM t1
159    ORDER BY c DESC,a,b
160  }
161} {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}
162do_test selectA-2.20 {
163  execsql {
164    SELECT x,y,z FROM t2 UNION ALL SELECT a,b,c FROM t1
165    ORDER BY c COLLATE BINARY DESC,a,b
166  }
167} {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}
168do_test selectA-2.21 {
169  execsql {
170    SELECT a,b,c FROM t1 UNION SELECT x,y,z FROM t2
171    ORDER BY a,b,c
172  }
173} {{} 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}
174do_test selectA-2.22 {
175  execsql {
176    SELECT a,b,c FROM t1 UNION SELECT x,y,z FROM t2
177    ORDER BY a DESC,b,c
178  }
179} {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}
180do_test selectA-2.23 {
181  execsql {
182    SELECT a,b,c FROM t1 UNION SELECT x,y,z FROM t2
183    ORDER BY a,c,b
184  }
185} {{} 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}
186do_test selectA-2.24 {
187  execsql {
188    SELECT a,b,c FROM t1 UNION SELECT x,y,z FROM t2
189    ORDER BY b,a,c
190  }
191} {{} 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}
192do_test selectA-2.25 {
193  execsql {
194    SELECT a,b,c FROM t1 UNION SELECT x,y,z FROM t2
195    ORDER BY b COLLATE NOCASE,a,c
196  }
197} {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}
198do_test selectA-2.26 {
199  execsql {
200    SELECT a,b,c FROM t1 UNION SELECT x,y,z FROM t2
201    ORDER BY b COLLATE NOCASE DESC,a,c
202  }
203} {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}
204do_test selectA-2.27 {
205  execsql {
206    SELECT a,b,c FROM t1 UNION SELECT x,y,z FROM t2
207    ORDER BY c,b,a
208  }
209} {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}
210do_test selectA-2.28 {
211  execsql {
212    SELECT a,b,c FROM t1 UNION SELECT x,y,z FROM t2
213    ORDER BY c,a,b
214  }
215} {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}
216do_test selectA-2.29 {
217  execsql {
218    SELECT a,b,c FROM t1 UNION SELECT x,y,z FROM t2
219    ORDER BY c DESC,a,b
220  }
221} {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}
222do_test selectA-2.30 {
223  execsql {
224    SELECT a,b,c FROM t1 UNION SELECT x,y,z FROM t2
225    ORDER BY c COLLATE BINARY DESC,a,b
226  }
227} {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}
228do_test selectA-2.31 {
229  execsql {
230    SELECT x,y,z FROM t2 UNION SELECT a,b,c FROM t1
231    ORDER BY a,b,c
232  }
233} {{} 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}
234do_test selectA-2.32 {
235  execsql {
236    SELECT x,y,z FROM t2 UNION SELECT a,b,c FROM t1
237    ORDER BY a DESC,b,c
238  }
239} {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}
240do_test selectA-2.33 {
241  execsql {
242    SELECT x,y,z FROM t2 UNION SELECT a,b,c FROM t1
243    ORDER BY a,c,b
244  }
245} {{} 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}
246do_test selectA-2.34 {
247  execsql {
248    SELECT x,y,z FROM t2 UNION SELECT a,b,c FROM t1
249    ORDER BY b,a,c
250  }
251} {{} 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}
252do_test selectA-2.35 {
253  execsql {
254    SELECT x,y,z FROM t2 UNION SELECT a,b,c FROM t1
255    ORDER BY b COLLATE NOCASE,a,c
256  }
257} {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}
258do_test selectA-2.36 {
259  execsql {
260    SELECT x,y,z FROM t2 UNION SELECT a,b,c FROM t1
261    ORDER BY b COLLATE NOCASE DESC,a,c
262  }
263} {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}
264do_test selectA-2.37 {
265  execsql {
266    SELECT x,y,z FROM t2 UNION SELECT a,b,c FROM t1
267    ORDER BY c,b,a
268  }
269} {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}
270do_test selectA-2.38 {
271  execsql {
272    SELECT x,y,z FROM t2 UNION SELECT a,b,c FROM t1
273    ORDER BY c,a,b
274  }
275} {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}
276do_test selectA-2.39 {
277  execsql {
278    SELECT x,y,z FROM t2 UNION SELECT a,b,c FROM t1
279    ORDER BY c DESC,a,b
280  }
281} {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}
282do_test selectA-2.40 {
283  execsql {
284    SELECT x,y,z FROM t2 UNION SELECT a,b,c FROM t1
285    ORDER BY c COLLATE BINARY DESC,a,b
286  }
287} {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}
288do_test selectA-2.41 {
289  execsql {
290    SELECT a,b,c FROM t1 EXCEPT SELECT a,b,c FROM t1 WHERE b>='d'
291    ORDER BY a,b,c
292  }
293} {{} C c 1 a a 9.9 b B}
294do_test selectA-2.42 {
295  execsql {
296    SELECT a,b,c FROM t1 INTERSECT SELECT a,b,c FROM t1 WHERE b>='d'
297    ORDER BY a,b,c
298  }
299} {hello d D abc e e}
300do_test selectA-2.43 {
301  execsql {
302    SELECT a,b,c FROM t1 WHERE b>='d' INTERSECT SELECT a,b,c FROM t1
303    ORDER BY a,b,c
304  }
305} {hello d D abc e e}
306do_test selectA-2.44 {
307  execsql {
308    SELECT a,b,c FROM t1 EXCEPT SELECT a,b,c FROM t1 WHERE b<'d'
309    ORDER BY a,b,c
310  }
311} {hello d D abc e e}
312do_test selectA-2.45 {
313  execsql {
314    SELECT a,b,c FROM t1 INTERSECT SELECT a,b,c FROM t1 WHERE b<'d'
315    ORDER BY a,b,c
316  }
317} {{} C c 1 a a 9.9 b B}
318do_test selectA-2.46 {
319  execsql {
320    SELECT a,b,c FROM t1 WHERE b<'d' INTERSECT SELECT a,b,c FROM t1
321    ORDER BY a,b,c
322  }
323} {{} C c 1 a a 9.9 b B}
324do_test selectA-2.47 {
325  execsql {
326    SELECT a,b,c FROM t1 EXCEPT SELECT a,b,c FROM t1 WHERE b>='d'
327    ORDER BY a DESC
328  }
329} {9.9 b B 1 a a {} C c}
330do_test selectA-2.48 {
331  execsql {
332    SELECT a,b,c FROM t1 INTERSECT SELECT a,b,c FROM t1 WHERE b>='d'
333    ORDER BY a DESC
334  }
335} {abc e e hello d D}
336do_test selectA-2.49 {
337  execsql {
338    SELECT a,b,c FROM t1 WHERE b>='d' INTERSECT SELECT a,b,c FROM t1
339    ORDER BY a DESC
340  }
341} {abc e e hello d D}
342do_test selectA-2.50 {
343  execsql {
344    SELECT a,b,c FROM t1 EXCEPT SELECT a,b,c FROM t1 WHERE b<'d'
345    ORDER BY a DESC
346  }
347} {abc e e hello d D}
348do_test selectA-2.51 {
349  execsql {
350    SELECT a,b,c FROM t1 INTERSECT SELECT a,b,c FROM t1 WHERE b<'d'
351    ORDER BY a DESC
352  }
353} {9.9 b B 1 a a {} C c}
354do_test selectA-2.52 {
355  execsql {
356    SELECT a,b,c FROM t1 WHERE b<'d' INTERSECT SELECT a,b,c FROM t1
357    ORDER BY a DESC
358  }
359} {9.9 b B 1 a a {} C c}
360do_test selectA-2.53 {
361  execsql {
362    SELECT a,b,c FROM t1 EXCEPT SELECT a,b,c FROM t1 WHERE b>='d'
363    ORDER BY b, a DESC
364  }
365} {{} C c 1 a a 9.9 b B}
366do_test selectA-2.54 {
367  execsql {
368    SELECT a,b,c FROM t1 INTERSECT SELECT a,b,c FROM t1 WHERE b>='d'
369    ORDER BY b
370  }
371} {hello d D abc e e}
372do_test selectA-2.55 {
373  execsql {
374    SELECT a,b,c FROM t1 WHERE b>='d' INTERSECT SELECT a,b,c FROM t1
375    ORDER BY b DESC, c
376  }
377} {abc e e hello d D}
378do_test selectA-2.56 {
379  execsql {
380    SELECT a,b,c FROM t1 EXCEPT SELECT a,b,c FROM t1 WHERE b<'d'
381    ORDER BY b, c DESC, a
382  }
383} {hello d D abc e e}
384do_test selectA-2.57 {
385  execsql {
386    SELECT a,b,c FROM t1 INTERSECT SELECT a,b,c FROM t1 WHERE b<'d'
387    ORDER BY b COLLATE NOCASE
388  }
389} {1 a a 9.9 b B {} C c}
390do_test selectA-2.58 {
391  execsql {
392    SELECT a,b,c FROM t1 WHERE b<'d' INTERSECT SELECT a,b,c FROM t1
393    ORDER BY b
394  }
395} {{} C c 1 a a 9.9 b B}
396do_test selectA-2.59 {
397  execsql {
398    SELECT a,b,c FROM t1 EXCEPT SELECT a,b,c FROM t1 WHERE b>='d'
399    ORDER BY c, a DESC
400  }
401} {1 a a 9.9 b B {} C c}
402do_test selectA-2.60 {
403  execsql {
404    SELECT a,b,c FROM t1 INTERSECT SELECT a,b,c FROM t1 WHERE b>='d'
405    ORDER BY c
406  }
407} {hello d D abc e e}
408do_test selectA-2.61 {
409  execsql {
410    SELECT a,b,c FROM t1 WHERE b>='d' INTERSECT SELECT a,b,c FROM t1
411    ORDER BY c COLLATE BINARY, b DESC, c, a, b, c, a, b, c
412  }
413} {hello d D abc e e}
414do_test selectA-2.62 {
415  execsql {
416    SELECT a,b,c FROM t1 EXCEPT SELECT a,b,c FROM t1 WHERE b<'d'
417    ORDER BY c DESC, a
418  }
419} {abc e e hello d D}
420do_test selectA-2.63 {
421  execsql {
422    SELECT a,b,c FROM t1 INTERSECT SELECT a,b,c FROM t1 WHERE b<'d'
423    ORDER BY c COLLATE NOCASE
424  }
425} {1 a a 9.9 b B {} C c}
426do_test selectA-2.64 {
427  execsql {
428    SELECT a,b,c FROM t1 WHERE b<'d' INTERSECT SELECT a,b,c FROM t1
429    ORDER BY c
430  }
431} {1 a a 9.9 b B {} C c}
432
433do_test selectA-3.0 {
434  execsql {
435    CREATE UNIQUE INDEX t1a ON t1(a);
436    CREATE UNIQUE INDEX t1b ON t1(b);
437    CREATE UNIQUE INDEX t1c ON t1(c);
438    CREATE UNIQUE INDEX t2x ON t2(x);
439    CREATE UNIQUE INDEX t2y ON t2(y);
440    CREATE UNIQUE INDEX t2z ON t2(z);
441    SELECT name FROM sqlite_master WHERE type='index'
442  }
443} {t1a t1b t1c t2x t2y t2z}
444do_test selectA-3.1 {
445  execsql {
446    SELECT a,b,c FROM t1 UNION ALL SELECT x,y,z FROM t2
447    ORDER BY a,b,c
448  }
449} {{} 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}
450do_test selectA-3.2 {
451  execsql {
452    SELECT a,b,c FROM t1 UNION ALL SELECT x,y,z FROM t2
453    ORDER BY a DESC,b,c
454  }
455} {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}
456do_test selectA-3.3 {
457  execsql {
458    SELECT a,b,c FROM t1 UNION ALL SELECT x,y,z FROM t2
459    ORDER BY a,c,b
460  }
461} {{} 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}
462do_test selectA-3.4 {
463  execsql {
464    SELECT a,b,c FROM t1 UNION ALL SELECT x,y,z FROM t2
465    ORDER BY b,a,c
466  }
467} {{} 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}
468do_test selectA-3.5 {
469  execsql {
470    SELECT a,b,c FROM t1 UNION ALL SELECT x,y,z FROM t2
471    ORDER BY b COLLATE NOCASE,a,c
472  }
473} {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}
474do_test selectA-3.6 {
475  execsql {
476    SELECT a,b,c FROM t1 UNION ALL SELECT x,y,z FROM t2
477    ORDER BY b COLLATE NOCASE DESC,a,c
478  }
479} {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}
480do_test selectA-3.7 {
481  execsql {
482    SELECT a,b,c FROM t1 UNION ALL SELECT x,y,z FROM t2
483    ORDER BY c,b,a
484  }
485} {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}
486do_test selectA-3.8 {
487  execsql {
488    SELECT a,b,c FROM t1 UNION ALL SELECT x,y,z FROM t2
489    ORDER BY c,a,b
490  }
491} {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}
492do_test selectA-3.9 {
493  execsql {
494    SELECT a,b,c FROM t1 UNION ALL SELECT x,y,z FROM t2
495    ORDER BY c DESC,a,b
496  }
497} {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}
498do_test selectA-3.10 {
499  execsql {
500    SELECT a,b,c FROM t1 UNION ALL SELECT x,y,z FROM t2
501    ORDER BY c COLLATE BINARY DESC,a,b
502  }
503} {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}
504do_test selectA-3.11 {
505  execsql {
506    SELECT x,y,z FROM t2 UNION ALL SELECT a,b,c FROM t1
507    ORDER BY a,b,c
508  }
509} {{} 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}
510do_test selectA-3.12 {
511  execsql {
512    SELECT x,y,z FROM t2 UNION ALL SELECT a,b,c FROM t1
513    ORDER BY a DESC,b,c
514  }
515} {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}
516do_test selectA-3.13 {
517  execsql {
518    SELECT x,y,z FROM t2 UNION ALL SELECT a,b,c FROM t1
519    ORDER BY a,c,b
520  }
521} {{} 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}
522do_test selectA-3.14 {
523  execsql {
524    SELECT x,y,z FROM t2 UNION ALL SELECT a,b,c FROM t1
525    ORDER BY b,a,c
526  }
527} {{} 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}
528do_test selectA-3.15 {
529  execsql {
530    SELECT x,y,z FROM t2 UNION ALL SELECT a,b,c FROM t1
531    ORDER BY b COLLATE NOCASE,a,c
532  }
533} {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}
534do_test selectA-3.16 {
535  execsql {
536    SELECT x,y,z FROM t2 UNION ALL SELECT a,b,c FROM t1
537    ORDER BY b COLLATE NOCASE DESC,a,c
538  }
539} {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}
540do_test selectA-3.17 {
541  execsql {
542    SELECT x,y,z FROM t2 UNION ALL SELECT a,b,c FROM t1
543    ORDER BY c,b,a
544  }
545} {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}
546do_test selectA-3.18 {
547  execsql {
548    SELECT x,y,z FROM t2 UNION ALL SELECT a,b,c FROM t1
549    ORDER BY c,a,b
550  }
551} {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}
552do_test selectA-3.19 {
553  execsql {
554    SELECT x,y,z FROM t2 UNION ALL SELECT a,b,c FROM t1
555    ORDER BY c DESC,a,b
556  }
557} {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}
558do_test selectA-3.20 {
559  execsql {
560    SELECT x,y,z FROM t2 UNION ALL SELECT a,b,c FROM t1
561    ORDER BY c COLLATE BINARY DESC,a,b
562  }
563} {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}
564do_test selectA-3.21 {
565  execsql {
566    SELECT a,b,c FROM t1 UNION SELECT x,y,z FROM t2
567    ORDER BY a,b,c
568  }
569} {{} 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}
570do_test selectA-3.22 {
571  execsql {
572    SELECT a,b,c FROM t1 UNION SELECT x,y,z FROM t2
573    ORDER BY a DESC,b,c
574  }
575} {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}
576do_test selectA-3.23 {
577  execsql {
578    SELECT a,b,c FROM t1 UNION SELECT x,y,z FROM t2
579    ORDER BY a,c,b
580  }
581} {{} 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}
582do_test selectA-3.24 {
583  execsql {
584    SELECT a,b,c FROM t1 UNION SELECT x,y,z FROM t2
585    ORDER BY b,a,c
586  }
587} {{} 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}
588do_test selectA-3.25 {
589  execsql {
590    SELECT a,b,c FROM t1 UNION SELECT x,y,z FROM t2
591    ORDER BY b COLLATE NOCASE,a,c
592  }
593} {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}
594do_test selectA-3.26 {
595  execsql {
596    SELECT a,b,c FROM t1 UNION SELECT x,y,z FROM t2
597    ORDER BY b COLLATE NOCASE DESC,a,c
598  }
599} {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}
600do_test selectA-3.27 {
601  execsql {
602    SELECT a,b,c FROM t1 UNION SELECT x,y,z FROM t2
603    ORDER BY c,b,a
604  }
605} {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}
606do_test selectA-3.28 {
607  execsql {
608    SELECT a,b,c FROM t1 UNION SELECT x,y,z FROM t2
609    ORDER BY c,a,b
610  }
611} {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}
612do_test selectA-3.29 {
613  execsql {
614    SELECT a,b,c FROM t1 UNION SELECT x,y,z FROM t2
615    ORDER BY c DESC,a,b
616  }
617} {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}
618do_test selectA-3.30 {
619  execsql {
620    SELECT a,b,c FROM t1 UNION SELECT x,y,z FROM t2
621    ORDER BY c COLLATE BINARY DESC,a,b
622  }
623} {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}
624do_test selectA-3.31 {
625  execsql {
626    SELECT x,y,z FROM t2 UNION SELECT a,b,c FROM t1
627    ORDER BY a,b,c
628  }
629} {{} 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}
630do_test selectA-3.32 {
631  execsql {
632    SELECT x,y,z FROM t2 UNION SELECT a,b,c FROM t1
633    ORDER BY a DESC,b,c
634  }
635} {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}
636do_test selectA-3.33 {
637  execsql {
638    SELECT x,y,z FROM t2 UNION SELECT a,b,c FROM t1
639    ORDER BY a,c,b
640  }
641} {{} 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}
642do_test selectA-3.34 {
643  execsql {
644    SELECT x,y,z FROM t2 UNION SELECT a,b,c FROM t1
645    ORDER BY b,a,c
646  }
647} {{} 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}
648do_test selectA-3.35 {
649  execsql {
650    SELECT x,y,z FROM t2 UNION SELECT a,b,c FROM t1
651    ORDER BY b COLLATE NOCASE,a,c
652  }
653} {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}
654do_test selectA-3.36 {
655  execsql {
656    SELECT x,y,z FROM t2 UNION SELECT a,b,c FROM t1
657    ORDER BY b COLLATE NOCASE DESC,a,c
658  }
659} {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}
660do_test selectA-3.37 {
661  execsql {
662    SELECT x,y,z FROM t2 UNION SELECT a,b,c FROM t1
663    ORDER BY c,b,a
664  }
665} {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}
666do_test selectA-3.38 {
667  execsql {
668    SELECT x,y,z FROM t2 UNION SELECT a,b,c FROM t1
669    ORDER BY c,a,b
670  }
671} {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}
672do_test selectA-3.39 {
673  execsql {
674    SELECT x,y,z FROM t2 UNION SELECT a,b,c FROM t1
675    ORDER BY c DESC,a,b
676  }
677} {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}
678do_test selectA-3.40 {
679  execsql {
680    SELECT x,y,z FROM t2 UNION SELECT a,b,c FROM t1
681    ORDER BY c COLLATE BINARY DESC,a,b
682  }
683} {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}
684do_test selectA-3.41 {
685  execsql {
686    SELECT a,b,c FROM t1 EXCEPT SELECT a,b,c FROM t1 WHERE b>='d'
687    ORDER BY a,b,c
688  }
689} {{} C c 1 a a 9.9 b B}
690do_test selectA-3.42 {
691  execsql {
692    SELECT a,b,c FROM t1 INTERSECT SELECT a,b,c FROM t1 WHERE b>='d'
693    ORDER BY a,b,c
694  }
695} {hello d D abc e e}
696do_test selectA-3.43 {
697  execsql {
698    SELECT a,b,c FROM t1 WHERE b>='d' INTERSECT SELECT a,b,c FROM t1
699    ORDER BY a,b,c
700  }
701} {hello d D abc e e}
702do_test selectA-3.44 {
703  execsql {
704    SELECT a,b,c FROM t1 EXCEPT SELECT a,b,c FROM t1 WHERE b<'d'
705    ORDER BY a,b,c
706  }
707} {hello d D abc e e}
708do_test selectA-3.45 {
709  execsql {
710    SELECT a,b,c FROM t1 INTERSECT SELECT a,b,c FROM t1 WHERE b<'d'
711    ORDER BY a,b,c
712  }
713} {{} C c 1 a a 9.9 b B}
714do_test selectA-3.46 {
715  execsql {
716    SELECT a,b,c FROM t1 WHERE b<'d' INTERSECT SELECT a,b,c FROM t1
717    ORDER BY a,b,c
718  }
719} {{} C c 1 a a 9.9 b B}
720do_test selectA-3.47 {
721  execsql {
722    SELECT a,b,c FROM t1 EXCEPT SELECT a,b,c FROM t1 WHERE b>='d'
723    ORDER BY a DESC
724  }
725} {9.9 b B 1 a a {} C c}
726do_test selectA-3.48 {
727  execsql {
728    SELECT a,b,c FROM t1 INTERSECT SELECT a,b,c FROM t1 WHERE b>='d'
729    ORDER BY a DESC
730  }
731} {abc e e hello d D}
732do_test selectA-3.49 {
733  execsql {
734    SELECT a,b,c FROM t1 WHERE b>='d' INTERSECT SELECT a,b,c FROM t1
735    ORDER BY a DESC
736  }
737} {abc e e hello d D}
738do_test selectA-3.50 {
739  execsql {
740    SELECT a,b,c FROM t1 EXCEPT SELECT a,b,c FROM t1 WHERE b<'d'
741    ORDER BY a DESC
742  }
743} {abc e e hello d D}
744do_test selectA-3.51 {
745  execsql {
746    SELECT a,b,c FROM t1 INTERSECT SELECT a,b,c FROM t1 WHERE b<'d'
747    ORDER BY a DESC
748  }
749} {9.9 b B 1 a a {} C c}
750do_test selectA-3.52 {
751  execsql {
752    SELECT a,b,c FROM t1 WHERE b<'d' INTERSECT SELECT a,b,c FROM t1
753    ORDER BY a DESC
754  }
755} {9.9 b B 1 a a {} C c}
756do_test selectA-3.53 {
757  execsql {
758    SELECT a,b,c FROM t1 EXCEPT SELECT a,b,c FROM t1 WHERE b>='d'
759    ORDER BY b, a DESC
760  }
761} {{} C c 1 a a 9.9 b B}
762do_test selectA-3.54 {
763  execsql {
764    SELECT a,b,c FROM t1 INTERSECT SELECT a,b,c FROM t1 WHERE b>='d'
765    ORDER BY b
766  }
767} {hello d D abc e e}
768do_test selectA-3.55 {
769  execsql {
770    SELECT a,b,c FROM t1 WHERE b>='d' INTERSECT SELECT a,b,c FROM t1
771    ORDER BY b DESC, c
772  }
773} {abc e e hello d D}
774do_test selectA-3.56 {
775  execsql {
776    SELECT a,b,c FROM t1 EXCEPT SELECT a,b,c FROM t1 WHERE b<'d'
777    ORDER BY b, c DESC, a
778  }
779} {hello d D abc e e}
780do_test selectA-3.57 {
781  execsql {
782    SELECT a,b,c FROM t1 INTERSECT SELECT a,b,c FROM t1 WHERE b<'d'
783    ORDER BY b COLLATE NOCASE
784  }
785} {1 a a 9.9 b B {} C c}
786do_test selectA-3.58 {
787  execsql {
788    SELECT a,b,c FROM t1 WHERE b<'d' INTERSECT SELECT a,b,c FROM t1
789    ORDER BY b
790  }
791} {{} C c 1 a a 9.9 b B}
792do_test selectA-3.59 {
793  execsql {
794    SELECT a,b,c FROM t1 EXCEPT SELECT a,b,c FROM t1 WHERE b>='d'
795    ORDER BY c, a DESC
796  }
797} {1 a a 9.9 b B {} C c}
798do_test selectA-3.60 {
799  execsql {
800    SELECT a,b,c FROM t1 INTERSECT SELECT a,b,c FROM t1 WHERE b>='d'
801    ORDER BY c
802  }
803} {hello d D abc e e}
804do_test selectA-3.61 {
805  execsql {
806    SELECT a,b,c FROM t1 WHERE b>='d' INTERSECT SELECT a,b,c FROM t1
807    ORDER BY c COLLATE BINARY, b DESC, c, a, b, c, a, b, c
808  }
809} {hello d D abc e e}
810do_test selectA-3.62 {
811  execsql {
812    SELECT a,b,c FROM t1 EXCEPT SELECT a,b,c FROM t1 WHERE b<'d'
813    ORDER BY c DESC, a
814  }
815} {abc e e hello d D}
816do_test selectA-3.63 {
817  execsql {
818    SELECT a,b,c FROM t1 INTERSECT SELECT a,b,c FROM t1 WHERE b<'d'
819    ORDER BY c COLLATE NOCASE
820  }
821} {1 a a 9.9 b B {} C c}
822do_test selectA-3.64 {
823  execsql {
824    SELECT a,b,c FROM t1 WHERE b<'d' INTERSECT SELECT a,b,c FROM t1
825    ORDER BY c
826  }
827} {1 a a 9.9 b B {} C c}
828
829
830finish_test
831