Home | History | Annotate | Download | only in test
      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.6 2008/08/21 14:24:29 drh Exp $
     21 
     22 set testdir [file dirname $argv0]
     23 source $testdir/tester.tcl
     24 
     25 ifcapable !compound {
     26   finish_test
     27   return
     28 }
     29 
     30 do_test selectA-1.0 {
     31   execsql {
     32     CREATE TABLE t1(a,b,c COLLATE NOCASE);
     33     INSERT INTO t1 VALUES(1,'a','a');
     34     INSERT INTO t1 VALUES(9.9, 'b', 'B');
     35     INSERT INTO t1 VALUES(NULL, 'C', 'c');
     36     INSERT INTO t1 VALUES('hello', 'd', 'D');
     37     INSERT INTO t1 VALUES(x'616263', 'e', 'e');
     38     SELECT * FROM t1;
     39   }
     40 } {1 a a 9.9 b B {} C c hello d D abc e e}
     41 do_test selectA-1.1 {
     42   execsql {
     43     CREATE TABLE t2(x,y,z COLLATE NOCASE);
     44     INSERT INTO t2 VALUES(NULL,'U','u');
     45     INSERT INTO t2 VALUES('mad', 'Z', 'z');
     46     INSERT INTO t2 VALUES(x'68617265', 'm', 'M');
     47     INSERT INTO t2 VALUES(5.2e6, 'X', 'x');
     48     INSERT INTO t2 VALUES(-23, 'Y', 'y');
     49     SELECT * FROM t2;
     50   }
     51 } {{} U u mad Z z hare m M 5200000.0 X x -23 Y y}
     52 do_test selectA-1.2 {
     53   execsql {
     54     CREATE TABLE t3(a,b,c COLLATE NOCASE);
     55     INSERT INTO t3 SELECT * FROM t1;
     56     INSERT INTO t3 SELECT * FROM t2;
     57     INSERT INTO t3 SELECT * FROM t1;
     58     INSERT INTO t3 SELECT * FROM t2;
     59     INSERT INTO t3 SELECT * FROM t1;
     60     INSERT INTO t3 SELECT * FROM t2;
     61     SELECT count(*) FROM t3;
     62   }
     63 } {30}
     64 
     65 do_test selectA-2.1 {
     66   execsql {
     67     SELECT a,b,c FROM t1 UNION ALL SELECT x,y,z FROM t2
     68     ORDER BY a,b,c
     69   }
     70 } {{} 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}
     71 do_test selectA-2.1.1 {   # Ticket #3314
     72   execsql {
     73     SELECT t1.a, t1.b, t1.c FROM t1 UNION ALL SELECT x,y,z FROM t2
     74     ORDER BY a,b,c
     75   }
     76 } {{} 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}
     77 do_test selectA-2.1.2 {   # Ticket #3314
     78   execsql {
     79     SELECT a,b,c FROM t1 UNION ALL SELECT x,y,z FROM t2
     80     ORDER BY t1.a, t1.b, t1.c
     81   }
     82 } {{} 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}
     83 do_test selectA-2.2 {
     84   execsql {
     85     SELECT a,b,c FROM t1 UNION ALL SELECT x,y,z FROM t2
     86     ORDER BY a DESC,b,c
     87   }
     88 } {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}
     89 do_test selectA-2.3 {
     90   execsql {
     91     SELECT a,b,c FROM t1 UNION ALL SELECT x,y,z FROM t2
     92     ORDER BY a,c,b
     93   }
     94 } {{} 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}
     95 do_test selectA-2.4 {
     96   execsql {
     97     SELECT a,b,c FROM t1 UNION ALL SELECT x,y,z FROM t2
     98     ORDER BY b,a,c
     99   }
    100 } {{} 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}
    101 do_test selectA-2.5 {
    102   execsql {
    103     SELECT a,b,c FROM t1 UNION ALL SELECT x,y,z FROM t2
    104     ORDER BY b COLLATE NOCASE,a,c
    105   }
    106 } {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}
    107 do_test selectA-2.6 {
    108   execsql {
    109     SELECT a,b,c FROM t1 UNION ALL SELECT x,y,z FROM t2
    110     ORDER BY b COLLATE NOCASE DESC,a,c
    111   }
    112 } {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}
    113 do_test selectA-2.7 {
    114   execsql {
    115     SELECT a,b,c FROM t1 UNION ALL SELECT x,y,z FROM t2
    116     ORDER BY c,b,a
    117   }
    118 } {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}
    119 do_test selectA-2.8 {
    120   execsql {
    121     SELECT a,b,c FROM t1 UNION ALL SELECT x,y,z FROM t2
    122     ORDER BY c,a,b
    123   }
    124 } {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}
    125 do_test selectA-2.9 {
    126   execsql {
    127     SELECT a,b,c FROM t1 UNION ALL SELECT x,y,z FROM t2
    128     ORDER BY c DESC,a,b
    129   }
    130 } {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}
    131 do_test selectA-2.10 {
    132   execsql {
    133     SELECT a,b,c FROM t1 UNION ALL SELECT x,y,z FROM t2
    134     ORDER BY c COLLATE BINARY DESC,a,b
    135   }
    136 } {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}
    137 do_test selectA-2.11 {
    138   execsql {
    139     SELECT x,y,z FROM t2 UNION ALL SELECT a,b,c FROM t1
    140     ORDER BY a,b,c
    141   }
    142 } {{} 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}
    143 do_test selectA-2.12 {
    144   execsql {
    145     SELECT x,y,z FROM t2 UNION ALL SELECT a,b,c FROM t1
    146     ORDER BY a DESC,b,c
    147   }
    148 } {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}
    149 do_test selectA-2.13 {
    150   execsql {
    151     SELECT x,y,z FROM t2 UNION ALL SELECT a,b,c FROM t1
    152     ORDER BY a,c,b
    153   }
    154 } {{} 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}
    155 do_test selectA-2.14 {
    156   execsql {
    157     SELECT x,y,z FROM t2 UNION ALL SELECT a,b,c FROM t1
    158     ORDER BY b,a,c
    159   }
    160 } {{} 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}
    161 do_test selectA-2.15 {
    162   execsql {
    163     SELECT x,y,z FROM t2 UNION ALL SELECT a,b,c FROM t1
    164     ORDER BY b COLLATE NOCASE,a,c
    165   }
    166 } {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}
    167 do_test selectA-2.16 {
    168   execsql {
    169     SELECT x,y,z FROM t2 UNION ALL SELECT a,b,c FROM t1
    170     ORDER BY b COLLATE NOCASE DESC,a,c
    171   }
    172 } {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}
    173 do_test selectA-2.17 {
    174   execsql {
    175     SELECT x,y,z FROM t2 UNION ALL SELECT a,b,c FROM t1
    176     ORDER BY c,b,a
    177   }
    178 } {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}
    179 do_test selectA-2.18 {
    180   execsql {
    181     SELECT x,y,z FROM t2 UNION ALL SELECT a,b,c FROM t1
    182     ORDER BY c,a,b
    183   }
    184 } {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}
    185 do_test selectA-2.19 {
    186   execsql {
    187     SELECT x,y,z FROM t2 UNION ALL SELECT a,b,c FROM t1
    188     ORDER BY c DESC,a,b
    189   }
    190 } {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}
    191 do_test selectA-2.20 {
    192   execsql {
    193     SELECT x,y,z FROM t2 UNION ALL SELECT a,b,c FROM t1
    194     ORDER BY c COLLATE BINARY DESC,a,b
    195   }
    196 } {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}
    197 do_test selectA-2.21 {
    198   execsql {
    199     SELECT a,b,c FROM t1 UNION SELECT x,y,z FROM t2
    200     ORDER BY a,b,c
    201   }
    202 } {{} 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}
    203 do_test selectA-2.22 {
    204   execsql {
    205     SELECT a,b,c FROM t1 UNION SELECT x,y,z FROM t2
    206     ORDER BY a DESC,b,c
    207   }
    208 } {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}
    209 do_test selectA-2.23 {
    210   execsql {
    211     SELECT a,b,c FROM t1 UNION SELECT x,y,z FROM t2
    212     ORDER BY a,c,b
    213   }
    214 } {{} 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}
    215 do_test selectA-2.24 {
    216   execsql {
    217     SELECT a,b,c FROM t1 UNION SELECT x,y,z FROM t2
    218     ORDER BY b,a,c
    219   }
    220 } {{} 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}
    221 do_test selectA-2.25 {
    222   execsql {
    223     SELECT a,b,c FROM t1 UNION SELECT x,y,z FROM t2
    224     ORDER BY b COLLATE NOCASE,a,c
    225   }
    226 } {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}
    227 do_test selectA-2.26 {
    228   execsql {
    229     SELECT a,b,c FROM t1 UNION SELECT x,y,z FROM t2
    230     ORDER BY b COLLATE NOCASE DESC,a,c
    231   }
    232 } {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}
    233 do_test selectA-2.27 {
    234   execsql {
    235     SELECT a,b,c FROM t1 UNION SELECT x,y,z FROM t2
    236     ORDER BY c,b,a
    237   }
    238 } {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}
    239 do_test selectA-2.28 {
    240   execsql {
    241     SELECT a,b,c FROM t1 UNION SELECT x,y,z FROM t2
    242     ORDER BY c,a,b
    243   }
    244 } {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}
    245 do_test selectA-2.29 {
    246   execsql {
    247     SELECT a,b,c FROM t1 UNION SELECT x,y,z FROM t2
    248     ORDER BY c DESC,a,b
    249   }
    250 } {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}
    251 do_test selectA-2.30 {
    252   execsql {
    253     SELECT a,b,c FROM t1 UNION SELECT x,y,z FROM t2
    254     ORDER BY c COLLATE BINARY DESC,a,b
    255   }
    256 } {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}
    257 do_test selectA-2.31 {
    258   execsql {
    259     SELECT x,y,z FROM t2 UNION SELECT a,b,c FROM t1
    260     ORDER BY a,b,c
    261   }
    262 } {{} 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}
    263 do_test selectA-2.32 {
    264   execsql {
    265     SELECT x,y,z FROM t2 UNION SELECT a,b,c FROM t1
    266     ORDER BY a DESC,b,c
    267   }
    268 } {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}
    269 do_test selectA-2.33 {
    270   execsql {
    271     SELECT x,y,z FROM t2 UNION SELECT a,b,c FROM t1
    272     ORDER BY a,c,b
    273   }
    274 } {{} 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}
    275 do_test selectA-2.34 {
    276   execsql {
    277     SELECT x,y,z FROM t2 UNION SELECT a,b,c FROM t1
    278     ORDER BY b,a,c
    279   }
    280 } {{} 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}
    281 do_test selectA-2.35 {
    282   execsql {
    283     SELECT x,y,z FROM t2 UNION SELECT a,b,c FROM t1
    284     ORDER BY b COLLATE NOCASE,a,c
    285   }
    286 } {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}
    287 do_test selectA-2.36 {
    288   execsql {
    289     SELECT x,y,z FROM t2 UNION SELECT a,b,c FROM t1
    290     ORDER BY b COLLATE NOCASE DESC,a,c
    291   }
    292 } {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}
    293 do_test selectA-2.37 {
    294   execsql {
    295     SELECT x,y,z FROM t2 UNION SELECT a,b,c FROM t1
    296     ORDER BY c,b,a
    297   }
    298 } {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}
    299 do_test selectA-2.38 {
    300   execsql {
    301     SELECT x,y,z FROM t2 UNION SELECT a,b,c FROM t1
    302     ORDER BY c,a,b
    303   }
    304 } {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}
    305 do_test selectA-2.39 {
    306   execsql {
    307     SELECT x,y,z FROM t2 UNION SELECT a,b,c FROM t1
    308     ORDER BY c DESC,a,b
    309   }
    310 } {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}
    311 do_test selectA-2.40 {
    312   execsql {
    313     SELECT x,y,z FROM t2 UNION SELECT a,b,c FROM t1
    314     ORDER BY c COLLATE BINARY DESC,a,b
    315   }
    316 } {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}
    317 do_test selectA-2.41 {
    318   execsql {
    319     SELECT a,b,c FROM t1 EXCEPT SELECT a,b,c FROM t1 WHERE b>='d'
    320     ORDER BY a,b,c
    321   }
    322 } {{} C c 1 a a 9.9 b B}
    323 do_test selectA-2.42 {
    324   execsql {
    325     SELECT a,b,c FROM t1 INTERSECT SELECT a,b,c FROM t1 WHERE b>='d'
    326     ORDER BY a,b,c
    327   }
    328 } {hello d D abc e e}
    329 do_test selectA-2.43 {
    330   execsql {
    331     SELECT a,b,c FROM t1 WHERE b>='d' INTERSECT SELECT a,b,c FROM t1
    332     ORDER BY a,b,c
    333   }
    334 } {hello d D abc e e}
    335 do_test selectA-2.44 {
    336   execsql {
    337     SELECT a,b,c FROM t1 EXCEPT SELECT a,b,c FROM t1 WHERE b<'d'
    338     ORDER BY a,b,c
    339   }
    340 } {hello d D abc e e}
    341 do_test selectA-2.45 {
    342   execsql {
    343     SELECT a,b,c FROM t1 INTERSECT SELECT a,b,c FROM t1 WHERE b<'d'
    344     ORDER BY a,b,c
    345   }
    346 } {{} C c 1 a a 9.9 b B}
    347 do_test selectA-2.46 {
    348   execsql {
    349     SELECT a,b,c FROM t1 WHERE b<'d' INTERSECT SELECT a,b,c FROM t1
    350     ORDER BY a,b,c
    351   }
    352 } {{} C c 1 a a 9.9 b B}
    353 do_test selectA-2.47 {
    354   execsql {
    355     SELECT a,b,c FROM t1 EXCEPT SELECT a,b,c FROM t1 WHERE b>='d'
    356     ORDER BY a DESC
    357   }
    358 } {9.9 b B 1 a a {} C c}
    359 do_test selectA-2.48 {
    360   execsql {
    361     SELECT a,b,c FROM t1 INTERSECT SELECT a,b,c FROM t1 WHERE b>='d'
    362     ORDER BY a DESC
    363   }
    364 } {abc e e hello d D}
    365 do_test selectA-2.49 {
    366   execsql {
    367     SELECT a,b,c FROM t1 WHERE b>='d' INTERSECT SELECT a,b,c FROM t1
    368     ORDER BY a DESC
    369   }
    370 } {abc e e hello d D}
    371 do_test selectA-2.50 {
    372   execsql {
    373     SELECT a,b,c FROM t1 EXCEPT SELECT a,b,c FROM t1 WHERE b<'d'
    374     ORDER BY a DESC
    375   }
    376 } {abc e e hello d D}
    377 do_test selectA-2.51 {
    378   execsql {
    379     SELECT a,b,c FROM t1 INTERSECT SELECT a,b,c FROM t1 WHERE b<'d'
    380     ORDER BY a DESC
    381   }
    382 } {9.9 b B 1 a a {} C c}
    383 do_test selectA-2.52 {
    384   execsql {
    385     SELECT a,b,c FROM t1 WHERE b<'d' INTERSECT SELECT a,b,c FROM t1
    386     ORDER BY a DESC
    387   }
    388 } {9.9 b B 1 a a {} C c}
    389 do_test selectA-2.53 {
    390   execsql {
    391     SELECT a,b,c FROM t1 EXCEPT SELECT a,b,c FROM t1 WHERE b>='d'
    392     ORDER BY b, a DESC
    393   }
    394 } {{} C c 1 a a 9.9 b B}
    395 do_test selectA-2.54 {
    396   execsql {
    397     SELECT a,b,c FROM t1 INTERSECT SELECT a,b,c FROM t1 WHERE b>='d'
    398     ORDER BY b
    399   }
    400 } {hello d D abc e e}
    401 do_test selectA-2.55 {
    402   execsql {
    403     SELECT a,b,c FROM t1 WHERE b>='d' INTERSECT SELECT a,b,c FROM t1
    404     ORDER BY b DESC, c
    405   }
    406 } {abc e e hello d D}
    407 do_test selectA-2.56 {
    408   execsql {
    409     SELECT a,b,c FROM t1 EXCEPT SELECT a,b,c FROM t1 WHERE b<'d'
    410     ORDER BY b, c DESC, a
    411   }
    412 } {hello d D abc e e}
    413 do_test selectA-2.57 {
    414   execsql {
    415     SELECT a,b,c FROM t1 INTERSECT SELECT a,b,c FROM t1 WHERE b<'d'
    416     ORDER BY b COLLATE NOCASE
    417   }
    418 } {1 a a 9.9 b B {} C c}
    419 do_test selectA-2.58 {
    420   execsql {
    421     SELECT a,b,c FROM t1 WHERE b<'d' INTERSECT SELECT a,b,c FROM t1
    422     ORDER BY b
    423   }
    424 } {{} C c 1 a a 9.9 b B}
    425 do_test selectA-2.59 {
    426   execsql {
    427     SELECT a,b,c FROM t1 EXCEPT SELECT a,b,c FROM t1 WHERE b>='d'
    428     ORDER BY c, a DESC
    429   }
    430 } {1 a a 9.9 b B {} C c}
    431 do_test selectA-2.60 {
    432   execsql {
    433     SELECT a,b,c FROM t1 INTERSECT SELECT a,b,c FROM t1 WHERE b>='d'
    434     ORDER BY c
    435   }
    436 } {hello d D abc e e}
    437 do_test selectA-2.61 {
    438   execsql {
    439     SELECT a,b,c FROM t1 WHERE b>='d' INTERSECT SELECT a,b,c FROM t1
    440     ORDER BY c COLLATE BINARY, b DESC, c, a, b, c, a, b, c
    441   }
    442 } {hello d D abc e e}
    443 do_test selectA-2.62 {
    444   execsql {
    445     SELECT a,b,c FROM t1 EXCEPT SELECT a,b,c FROM t1 WHERE b<'d'
    446     ORDER BY c DESC, a
    447   }
    448 } {abc e e hello d D}
    449 do_test selectA-2.63 {
    450   execsql {
    451     SELECT a,b,c FROM t1 INTERSECT SELECT a,b,c FROM t1 WHERE b<'d'
    452     ORDER BY c COLLATE NOCASE
    453   }
    454 } {1 a a 9.9 b B {} C c}
    455 do_test selectA-2.64 {
    456   execsql {
    457     SELECT a,b,c FROM t1 WHERE b<'d' INTERSECT SELECT a,b,c FROM t1
    458     ORDER BY c
    459   }
    460 } {1 a a 9.9 b B {} C c}
    461 do_test selectA-2.65 {
    462   execsql {
    463     SELECT a,b,c FROM t3 INTERSECT SELECT a,b,c FROM t1 WHERE b<'d'
    464     ORDER BY c COLLATE NOCASE
    465   }
    466 } {1 a a 9.9 b B {} C c}
    467 do_test selectA-2.66 {
    468   execsql {
    469     SELECT a,b,c FROM t1 WHERE b<'d' INTERSECT SELECT a,b,c FROM t3
    470     ORDER BY c
    471   }
    472 } {1 a a 9.9 b B {} C c}
    473 do_test selectA-2.67 {
    474   execsql {
    475     SELECT a,b,c FROM t1 EXCEPT SELECT a,b,c FROM t3 WHERE b<'d'
    476     ORDER BY c DESC, a
    477   }
    478 } {abc e e hello d D}
    479 do_test selectA-2.68 {
    480   execsql {
    481     SELECT a,b,c FROM t1 EXCEPT SELECT a,b,c FROM t1 WHERE b<'d'
    482     INTERSECT SELECT a,b,c FROM t3
    483     EXCEPT SELECT b,c,a FROM t3
    484     ORDER BY c DESC, a
    485   }
    486 } {abc e e hello d D}
    487 do_test selectA-2.69 {
    488   execsql {
    489     SELECT a,b,c FROM t1 INTERSECT SELECT a,b,c FROM t1 WHERE b<'d'
    490     INTERSECT SELECT a,b,c FROM t3
    491     EXCEPT SELECT b,c,a FROM t3
    492     ORDER BY c COLLATE NOCASE
    493   }
    494 } {1 a a 9.9 b B {} C c}
    495 do_test selectA-2.70 {
    496   execsql {
    497     SELECT a,b,c FROM t1 WHERE b<'d' INTERSECT SELECT a,b,c FROM t1
    498     INTERSECT SELECT a,b,c FROM t3
    499     EXCEPT SELECT b,c,a FROM t3
    500     ORDER BY c
    501   }
    502 } {1 a a 9.9 b B {} C c}
    503 do_test selectA-2.71 {
    504   execsql {
    505     SELECT a,b,c FROM t1 WHERE b<'d'
    506     INTERSECT SELECT a,b,c FROM t1
    507     INTERSECT SELECT a,b,c FROM t3
    508     EXCEPT SELECT b,c,a FROM t3
    509     INTERSECT SELECT a,b,c FROM t1
    510     EXCEPT SELECT x,y,z FROM t2
    511     INTERSECT SELECT a,b,c FROM t3
    512     EXCEPT SELECT y,x,z FROM t2
    513     INTERSECT SELECT a,b,c FROM t1
    514     EXCEPT SELECT c,b,a FROM t3
    515     ORDER BY c
    516   }
    517 } {1 a a 9.9 b B {} C c}
    518 do_test selectA-2.72 {
    519   execsql {
    520     SELECT a,b,c FROM t3 UNION SELECT x,y,z FROM t2
    521     ORDER BY a,b,c
    522   }
    523 } {{} 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}
    524 do_test selectA-2.73 {
    525   execsql {
    526     SELECT a,b,c FROM t3 UNION SELECT x,y,z FROM t2
    527     ORDER BY a DESC,b,c
    528   }
    529 } {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}
    530 do_test selectA-2.74 {
    531   execsql {
    532     SELECT a,b,c FROM t3 UNION SELECT x,y,z FROM t2
    533     ORDER BY a,c,b
    534   }
    535 } {{} 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}
    536 do_test selectA-2.75 {
    537   execsql {
    538     SELECT a,b,c FROM t3 UNION SELECT x,y,z FROM t2
    539     ORDER BY b,a,c
    540   }
    541 } {{} 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}
    542 do_test selectA-2.76 {
    543   execsql {
    544     SELECT a,b,c FROM t3 UNION SELECT x,y,z FROM t2
    545     ORDER BY b COLLATE NOCASE,a,c
    546   }
    547 } {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}
    548 do_test selectA-2.77 {
    549   execsql {
    550     SELECT a,b,c FROM t3 UNION SELECT x,y,z FROM t2
    551     ORDER BY b COLLATE NOCASE DESC,a,c
    552   }
    553 } {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}
    554 do_test selectA-2.78 {
    555   execsql {
    556     SELECT a,b,c FROM t3 UNION SELECT x,y,z FROM t2
    557     ORDER BY c,b,a
    558   }
    559 } {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}
    560 do_test selectA-2.79 {
    561   execsql {
    562     SELECT a,b,c FROM t3 UNION SELECT x,y,z FROM t2
    563     ORDER BY c,a,b
    564   }
    565 } {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}
    566 do_test selectA-2.80 {
    567   execsql {
    568     SELECT a,b,c FROM t3 UNION SELECT x,y,z FROM t2
    569     ORDER BY c DESC,a,b
    570   }
    571 } {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}
    572 do_test selectA-2.81 {
    573   execsql {
    574     SELECT a,b,c FROM t3 UNION SELECT x,y,z FROM t2
    575     ORDER BY c COLLATE BINARY DESC,a,b
    576   }
    577 } {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}
    578 do_test selectA-2.82 {
    579   execsql {
    580     SELECT x,y,z FROM t2 UNION SELECT a,b,c FROM t3
    581     ORDER BY a,b,c
    582   }
    583 } {{} 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}
    584 do_test selectA-2.83 {
    585   execsql {
    586     SELECT x,y,z FROM t2 UNION SELECT a,b,c FROM t3
    587     ORDER BY a DESC,b,c
    588   }
    589 } {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}
    590 do_test selectA-2.84 {
    591   execsql {
    592     SELECT x,y,z FROM t2 UNION SELECT a,b,c FROM t3
    593     ORDER BY a,c,b
    594   }
    595 } {{} 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}
    596 do_test selectA-2.85 {
    597   execsql {
    598     SELECT x,y,z FROM t2 UNION SELECT a,b,c FROM t3
    599     ORDER BY b,a,c
    600   }
    601 } {{} 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}
    602 do_test selectA-2.86 {
    603   execsql {
    604     SELECT x,y,z FROM t2 UNION SELECT a,b,c FROM t3
    605     ORDER BY b COLLATE NOCASE,a,c
    606   }
    607 } {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}
    608 do_test selectA-2.87 {
    609   execsql {
    610     SELECT x,y,z FROM t2 UNION SELECT a,b,c FROM t3
    611     ORDER BY y COLLATE NOCASE DESC,x,z
    612   }
    613 } {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}
    614 do_test selectA-2.88 {
    615   execsql {
    616     SELECT x,y,z FROM t2 UNION SELECT a,b,c FROM t3
    617     ORDER BY c,b,a
    618   }
    619 } {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}
    620 do_test selectA-2.89 {
    621   execsql {
    622     SELECT x,y,z FROM t2 UNION SELECT a,b,c FROM t3
    623     ORDER BY c,a,b
    624   }
    625 } {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}
    626 do_test selectA-2.90 {
    627   execsql {
    628     SELECT x,y,z FROM t2 UNION SELECT a,b,c FROM t3
    629     ORDER BY c DESC,a,b
    630   }
    631 } {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}
    632 do_test selectA-2.91 {
    633   execsql {
    634     SELECT x,y,z FROM t2 UNION SELECT a,b,c FROM t3
    635     ORDER BY c COLLATE BINARY DESC,a,b
    636   }
    637 } {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}
    638 do_test selectA-2.92 {
    639   execsql {
    640     SELECT x,y,z FROM t2
    641     INTERSECT SELECT a,b,c FROM t3
    642     EXCEPT SELECT c,b,a FROM t1
    643     UNION SELECT a,b,c FROM t3
    644     INTERSECT SELECT a,b,c FROM t3
    645     EXCEPT SELECT c,b,a FROM t1
    646     UNION SELECT a,b,c FROM t3
    647     ORDER BY y COLLATE NOCASE DESC,x,z
    648   }
    649 } {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}
    650 do_test selectA-2.93 {
    651   execsql {
    652     SELECT upper((SELECT c FROM t1 UNION SELECT z FROM t2 ORDER BY 1));
    653   }
    654 } {A}
    655 do_test selectA-2.94 {
    656   execsql {
    657     SELECT lower((SELECT c FROM t1 UNION ALL SELECT z FROM t2 ORDER BY 1));
    658   }
    659 } {a}
    660 do_test selectA-2.95 {
    661   execsql {
    662     SELECT lower((SELECT c FROM t1 INTERSECT SELECT z FROM t2 ORDER BY 1));
    663   }
    664 } {{}}
    665 do_test selectA-2.96 {
    666   execsql {
    667     SELECT lower((SELECT z FROM t2 EXCEPT SELECT c FROM t1 ORDER BY 1));
    668   }
    669 } {m}
    670 
    671 
    672 do_test selectA-3.0 {
    673   execsql {
    674     CREATE UNIQUE INDEX t1a ON t1(a);
    675     CREATE UNIQUE INDEX t1b ON t1(b);
    676     CREATE UNIQUE INDEX t1c ON t1(c);
    677     CREATE UNIQUE INDEX t2x ON t2(x);
    678     CREATE UNIQUE INDEX t2y ON t2(y);
    679     CREATE UNIQUE INDEX t2z ON t2(z);
    680     SELECT name FROM sqlite_master WHERE type='index'
    681   }
    682 } {t1a t1b t1c t2x t2y t2z}
    683 do_test selectA-3.1 {
    684   execsql {
    685     SELECT a,b,c FROM t1 UNION ALL SELECT x,y,z FROM t2
    686     ORDER BY a,b,c
    687   }
    688 } {{} 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}
    689 do_test selectA-3.1.1 {  # Ticket #3314
    690   execsql {
    691     SELECT t1.a,b,t1.c FROM t1 UNION ALL SELECT x,y,z FROM t2
    692     ORDER BY a,t1.b,t1.c
    693   }
    694 } {{} 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}
    695 do_test selectA-3.2 {
    696   execsql {
    697     SELECT a,b,c FROM t1 UNION ALL SELECT x,y,z FROM t2
    698     ORDER BY a DESC,b,c
    699   }
    700 } {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}
    701 do_test selectA-3.3 {
    702   execsql {
    703     SELECT a,b,c FROM t1 UNION ALL SELECT x,y,z FROM t2
    704     ORDER BY a,c,b
    705   }
    706 } {{} 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}
    707 do_test selectA-3.4 {
    708   execsql {
    709     SELECT a,b,c FROM t1 UNION ALL SELECT x,y,z FROM t2
    710     ORDER BY b,a,c
    711   }
    712 } {{} 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}
    713 do_test selectA-3.5 {
    714   execsql {
    715     SELECT a,b,c FROM t1 UNION ALL SELECT x,y,z FROM t2
    716     ORDER BY b COLLATE NOCASE,a,c
    717   }
    718 } {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}
    719 do_test selectA-3.6 {
    720   execsql {
    721     SELECT a,b,c FROM t1 UNION ALL SELECT x,y,z FROM t2
    722     ORDER BY b COLLATE NOCASE DESC,a,c
    723   }
    724 } {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}
    725 do_test selectA-3.7 {
    726   execsql {
    727     SELECT a,b,c FROM t1 UNION ALL SELECT x,y,z FROM t2
    728     ORDER BY c,b,a
    729   }
    730 } {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}
    731 do_test selectA-3.8 {
    732   execsql {
    733     SELECT a,b,c FROM t1 UNION ALL SELECT x,y,z FROM t2
    734     ORDER BY c,a,b
    735   }
    736 } {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}
    737 do_test selectA-3.9 {
    738   execsql {
    739     SELECT a,b,c FROM t1 UNION ALL SELECT x,y,z FROM t2
    740     ORDER BY c DESC,a,b
    741   }
    742 } {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}
    743 do_test selectA-3.10 {
    744   execsql {
    745     SELECT a,b,c FROM t1 UNION ALL SELECT x,y,z FROM t2
    746     ORDER BY c COLLATE BINARY DESC,a,b
    747   }
    748 } {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}
    749 do_test selectA-3.11 {
    750   execsql {
    751     SELECT x,y,z FROM t2 UNION ALL SELECT a,b,c FROM t1
    752     ORDER BY a,b,c
    753   }
    754 } {{} 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}
    755 do_test selectA-3.12 {
    756   execsql {
    757     SELECT x,y,z FROM t2 UNION ALL SELECT a,b,c FROM t1
    758     ORDER BY a DESC,b,c
    759   }
    760 } {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}
    761 do_test selectA-3.13 {
    762   execsql {
    763     SELECT x,y,z FROM t2 UNION ALL SELECT a,b,c FROM t1
    764     ORDER BY a,c,b
    765   }
    766 } {{} 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}
    767 do_test selectA-3.14 {
    768   execsql {
    769     SELECT x,y,z FROM t2 UNION ALL SELECT a,b,c FROM t1
    770     ORDER BY b,a,c
    771   }
    772 } {{} 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}
    773 do_test selectA-3.15 {
    774   execsql {
    775     SELECT x,y,z FROM t2 UNION ALL SELECT a,b,c FROM t1
    776     ORDER BY b COLLATE NOCASE,a,c
    777   }
    778 } {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}
    779 do_test selectA-3.16 {
    780   execsql {
    781     SELECT x,y,z FROM t2 UNION ALL SELECT a,b,c FROM t1
    782     ORDER BY b COLLATE NOCASE DESC,a,c
    783   }
    784 } {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}
    785 do_test selectA-3.17 {
    786   execsql {
    787     SELECT x,y,z FROM t2 UNION ALL SELECT a,b,c FROM t1
    788     ORDER BY c,b,a
    789   }
    790 } {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}
    791 do_test selectA-3.18 {
    792   execsql {
    793     SELECT x,y,z FROM t2 UNION ALL SELECT a,b,c FROM t1
    794     ORDER BY c,a,b
    795   }
    796 } {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}
    797 do_test selectA-3.19 {
    798   execsql {
    799     SELECT x,y,z FROM t2 UNION ALL SELECT a,b,c FROM t1
    800     ORDER BY c DESC,a,b
    801   }
    802 } {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}
    803 do_test selectA-3.20 {
    804   execsql {
    805     SELECT x,y,z FROM t2 UNION ALL SELECT a,b,c FROM t1
    806     ORDER BY c COLLATE BINARY DESC,a,b
    807   }
    808 } {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}
    809 do_test selectA-3.21 {
    810   execsql {
    811     SELECT a,b,c FROM t1 UNION SELECT x,y,z FROM t2
    812     ORDER BY a,b,c
    813   }
    814 } {{} 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}
    815 do_test selectA-3.22 {
    816   execsql {
    817     SELECT a,b,c FROM t1 UNION SELECT x,y,z FROM t2
    818     ORDER BY a DESC,b,c
    819   }
    820 } {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}
    821 do_test selectA-3.23 {
    822   execsql {
    823     SELECT a,b,c FROM t1 UNION SELECT x,y,z FROM t2
    824     ORDER BY a,c,b
    825   }
    826 } {{} 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}
    827 do_test selectA-3.24 {
    828   execsql {
    829     SELECT a,b,c FROM t1 UNION SELECT x,y,z FROM t2
    830     ORDER BY b,a,c
    831   }
    832 } {{} 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}
    833 do_test selectA-3.25 {
    834   execsql {
    835     SELECT a,b,c FROM t1 UNION SELECT x,y,z FROM t2
    836     ORDER BY b COLLATE NOCASE,a,c
    837   }
    838 } {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}
    839 do_test selectA-3.26 {
    840   execsql {
    841     SELECT a,b,c FROM t1 UNION SELECT x,y,z FROM t2
    842     ORDER BY b COLLATE NOCASE DESC,a,c
    843   }
    844 } {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}
    845 do_test selectA-3.27 {
    846   execsql {
    847     SELECT a,b,c FROM t1 UNION SELECT x,y,z FROM t2
    848     ORDER BY c,b,a
    849   }
    850 } {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}
    851 do_test selectA-3.28 {
    852   execsql {
    853     SELECT a,b,c FROM t1 UNION SELECT x,y,z FROM t2
    854     ORDER BY c,a,b
    855   }
    856 } {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}
    857 do_test selectA-3.29 {
    858   execsql {
    859     SELECT a,b,c FROM t1 UNION SELECT x,y,z FROM t2
    860     ORDER BY c DESC,a,b
    861   }
    862 } {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}
    863 do_test selectA-3.30 {
    864   execsql {
    865     SELECT a,b,c FROM t1 UNION SELECT x,y,z FROM t2
    866     ORDER BY c COLLATE BINARY DESC,a,b
    867   }
    868 } {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}
    869 do_test selectA-3.31 {
    870   execsql {
    871     SELECT x,y,z FROM t2 UNION SELECT a,b,c FROM t1
    872     ORDER BY a,b,c
    873   }
    874 } {{} 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}
    875 do_test selectA-3.32 {
    876   execsql {
    877     SELECT x,y,z FROM t2 UNION SELECT a,b,c FROM t1
    878     ORDER BY a DESC,b,c
    879   }
    880 } {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}
    881 do_test selectA-3.33 {
    882   execsql {
    883     SELECT x,y,z FROM t2 UNION SELECT a,b,c FROM t1
    884     ORDER BY a,c,b
    885   }
    886 } {{} 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}
    887 do_test selectA-3.34 {
    888   execsql {
    889     SELECT x,y,z FROM t2 UNION SELECT a,b,c FROM t1
    890     ORDER BY b,a,c
    891   }
    892 } {{} 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}
    893 do_test selectA-3.35 {
    894   execsql {
    895     SELECT x,y,z FROM t2 UNION SELECT a,b,c FROM t1
    896     ORDER BY b COLLATE NOCASE,a,c
    897   }
    898 } {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}
    899 do_test selectA-3.36 {
    900   execsql {
    901     SELECT x,y,z FROM t2 UNION SELECT a,b,c FROM t1
    902     ORDER BY b COLLATE NOCASE DESC,a,c
    903   }
    904 } {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}
    905 do_test selectA-3.37 {
    906   execsql {
    907     SELECT x,y,z FROM t2 UNION SELECT a,b,c FROM t1
    908     ORDER BY c,b,a
    909   }
    910 } {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}
    911 do_test selectA-3.38 {
    912   execsql {
    913     SELECT x,y,z FROM t2 UNION SELECT a,b,c FROM t1
    914     ORDER BY c,a,b
    915   }
    916 } {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}
    917 do_test selectA-3.39 {
    918   execsql {
    919     SELECT x,y,z FROM t2 UNION SELECT a,b,c FROM t1
    920     ORDER BY c DESC,a,b
    921   }
    922 } {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}
    923 do_test selectA-3.40 {
    924   execsql {
    925     SELECT x,y,z FROM t2 UNION SELECT a,b,c FROM t1
    926     ORDER BY c COLLATE BINARY DESC,a,b
    927   }
    928 } {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}
    929 do_test selectA-3.41 {
    930   execsql {
    931     SELECT a,b,c FROM t1 EXCEPT SELECT a,b,c FROM t1 WHERE b>='d'
    932     ORDER BY a,b,c
    933   }
    934 } {{} C c 1 a a 9.9 b B}
    935 do_test selectA-3.42 {
    936   execsql {
    937     SELECT a,b,c FROM t1 INTERSECT SELECT a,b,c FROM t1 WHERE b>='d'
    938     ORDER BY a,b,c
    939   }
    940 } {hello d D abc e e}
    941 do_test selectA-3.43 {
    942   execsql {
    943     SELECT a,b,c FROM t1 WHERE b>='d' INTERSECT SELECT a,b,c FROM t1
    944     ORDER BY a,b,c
    945   }
    946 } {hello d D abc e e}
    947 do_test selectA-3.44 {
    948   execsql {
    949     SELECT a,b,c FROM t1 EXCEPT SELECT a,b,c FROM t1 WHERE b<'d'
    950     ORDER BY a,b,c
    951   }
    952 } {hello d D abc e e}
    953 do_test selectA-3.45 {
    954   execsql {
    955     SELECT a,b,c FROM t1 INTERSECT SELECT a,b,c FROM t1 WHERE b<'d'
    956     ORDER BY a,b,c
    957   }
    958 } {{} C c 1 a a 9.9 b B}
    959 do_test selectA-3.46 {
    960   execsql {
    961     SELECT a,b,c FROM t1 WHERE b<'d' INTERSECT SELECT a,b,c FROM t1
    962     ORDER BY a,b,c
    963   }
    964 } {{} C c 1 a a 9.9 b B}
    965 do_test selectA-3.47 {
    966   execsql {
    967     SELECT a,b,c FROM t1 EXCEPT SELECT a,b,c FROM t1 WHERE b>='d'
    968     ORDER BY a DESC
    969   }
    970 } {9.9 b B 1 a a {} C c}
    971 do_test selectA-3.48 {
    972   execsql {
    973     SELECT a,b,c FROM t1 INTERSECT SELECT a,b,c FROM t1 WHERE b>='d'
    974     ORDER BY a DESC
    975   }
    976 } {abc e e hello d D}
    977 do_test selectA-3.49 {
    978   execsql {
    979     SELECT a,b,c FROM t1 WHERE b>='d' INTERSECT SELECT a,b,c FROM t1
    980     ORDER BY a DESC
    981   }
    982 } {abc e e hello d D}
    983 do_test selectA-3.50 {
    984   execsql {
    985     SELECT a,b,c FROM t1 EXCEPT SELECT a,b,c FROM t1 WHERE b<'d'
    986     ORDER BY a DESC
    987   }
    988 } {abc e e hello d D}
    989 do_test selectA-3.51 {
    990   execsql {
    991     SELECT a,b,c FROM t1 INTERSECT SELECT a,b,c FROM t1 WHERE b<'d'
    992     ORDER BY a DESC
    993   }
    994 } {9.9 b B 1 a a {} C c}
    995 do_test selectA-3.52 {
    996   execsql {
    997     SELECT a,b,c FROM t1 WHERE b<'d' INTERSECT SELECT a,b,c FROM t1
    998     ORDER BY a DESC
    999   }
   1000 } {9.9 b B 1 a a {} C c}
   1001 do_test selectA-3.53 {
   1002   execsql {
   1003     SELECT a,b,c FROM t1 EXCEPT SELECT a,b,c FROM t1 WHERE b>='d'
   1004     ORDER BY b, a DESC
   1005   }
   1006 } {{} C c 1 a a 9.9 b B}
   1007 do_test selectA-3.54 {
   1008   execsql {
   1009     SELECT a,b,c FROM t1 INTERSECT SELECT a,b,c FROM t1 WHERE b>='d'
   1010     ORDER BY b
   1011   }
   1012 } {hello d D abc e e}
   1013 do_test selectA-3.55 {
   1014   execsql {
   1015     SELECT a,b,c FROM t1 WHERE b>='d' INTERSECT SELECT a,b,c FROM t1
   1016     ORDER BY b DESC, c
   1017   }
   1018 } {abc e e hello d D}
   1019 do_test selectA-3.56 {
   1020   execsql {
   1021     SELECT a,b,c FROM t1 EXCEPT SELECT a,b,c FROM t1 WHERE b<'d'
   1022     ORDER BY b, c DESC, a
   1023   }
   1024 } {hello d D abc e e}
   1025 do_test selectA-3.57 {
   1026   execsql {
   1027     SELECT a,b,c FROM t1 INTERSECT SELECT a,b,c FROM t1 WHERE b<'d'
   1028     ORDER BY b COLLATE NOCASE
   1029   }
   1030 } {1 a a 9.9 b B {} C c}
   1031 do_test selectA-3.58 {
   1032   execsql {
   1033     SELECT a,b,c FROM t1 WHERE b<'d' INTERSECT SELECT a,b,c FROM t1
   1034     ORDER BY b
   1035   }
   1036 } {{} C c 1 a a 9.9 b B}
   1037 do_test selectA-3.59 {
   1038   execsql {
   1039     SELECT a,b,c FROM t1 EXCEPT SELECT a,b,c FROM t1 WHERE b>='d'
   1040     ORDER BY c, a DESC
   1041   }
   1042 } {1 a a 9.9 b B {} C c}
   1043 do_test selectA-3.60 {
   1044   execsql {
   1045     SELECT a,b,c FROM t1 INTERSECT SELECT a,b,c FROM t1 WHERE b>='d'
   1046     ORDER BY c
   1047   }
   1048 } {hello d D abc e e}
   1049 do_test selectA-3.61 {
   1050   execsql {
   1051     SELECT a,b,c FROM t1 WHERE b>='d' INTERSECT SELECT a,b,c FROM t1
   1052     ORDER BY c COLLATE BINARY, b DESC, c, a, b, c, a, b, c
   1053   }
   1054 } {hello d D abc e e}
   1055 do_test selectA-3.62 {
   1056   execsql {
   1057     SELECT a,b,c FROM t1 EXCEPT SELECT a,b,c FROM t1 WHERE b<'d'
   1058     ORDER BY c DESC, a
   1059   }
   1060 } {abc e e hello d D}
   1061 do_test selectA-3.63 {
   1062   execsql {
   1063     SELECT a,b,c FROM t1 INTERSECT SELECT a,b,c FROM t1 WHERE b<'d'
   1064     ORDER BY c COLLATE NOCASE
   1065   }
   1066 } {1 a a 9.9 b B {} C c}
   1067 do_test selectA-3.64 {
   1068   execsql {
   1069     SELECT a,b,c FROM t1 WHERE b<'d' INTERSECT SELECT a,b,c FROM t1
   1070     ORDER BY c
   1071   }
   1072 } {1 a a 9.9 b B {} C c}
   1073 do_test selectA-3.65 {
   1074   execsql {
   1075     SELECT a,b,c FROM t3 INTERSECT SELECT a,b,c FROM t1 WHERE b<'d'
   1076     ORDER BY c COLLATE NOCASE
   1077   }
   1078 } {1 a a 9.9 b B {} C c}
   1079 do_test selectA-3.66 {
   1080   execsql {
   1081     SELECT a,b,c FROM t1 WHERE b<'d' INTERSECT SELECT a,b,c FROM t3
   1082     ORDER BY c
   1083   }
   1084 } {1 a a 9.9 b B {} C c}
   1085 do_test selectA-3.67 {
   1086   execsql {
   1087     SELECT a,b,c FROM t1 EXCEPT SELECT a,b,c FROM t3 WHERE b<'d'
   1088     ORDER BY c DESC, a
   1089   }
   1090 } {abc e e hello d D}
   1091 do_test selectA-3.68 {
   1092   execsql {
   1093     SELECT a,b,c FROM t1 EXCEPT SELECT a,b,c FROM t1 WHERE b<'d'
   1094     INTERSECT SELECT a,b,c FROM t3
   1095     EXCEPT SELECT b,c,a FROM t3
   1096     ORDER BY c DESC, a
   1097   }
   1098 } {abc e e hello d D}
   1099 do_test selectA-3.69 {
   1100   execsql {
   1101     SELECT a,b,c FROM t1 INTERSECT SELECT a,b,c FROM t1 WHERE b<'d'
   1102     INTERSECT SELECT a,b,c FROM t3
   1103     EXCEPT SELECT b,c,a FROM t3
   1104     ORDER BY c COLLATE NOCASE
   1105   }
   1106 } {1 a a 9.9 b B {} C c}
   1107 do_test selectA-3.70 {
   1108   execsql {
   1109     SELECT a,b,c FROM t1 WHERE b<'d' INTERSECT SELECT a,b,c FROM t1
   1110     INTERSECT SELECT a,b,c FROM t3
   1111     EXCEPT SELECT b,c,a FROM t3
   1112     ORDER BY c
   1113   }
   1114 } {1 a a 9.9 b B {} C c}
   1115 do_test selectA-3.71 {
   1116   execsql {
   1117     SELECT a,b,c FROM t1 WHERE b<'d'
   1118     INTERSECT SELECT a,b,c FROM t1
   1119     INTERSECT SELECT a,b,c FROM t3
   1120     EXCEPT SELECT b,c,a FROM t3
   1121     INTERSECT SELECT a,b,c FROM t1
   1122     EXCEPT SELECT x,y,z FROM t2
   1123     INTERSECT SELECT a,b,c FROM t3
   1124     EXCEPT SELECT y,x,z FROM t2
   1125     INTERSECT SELECT a,b,c FROM t1
   1126     EXCEPT SELECT c,b,a FROM t3
   1127     ORDER BY c
   1128   }
   1129 } {1 a a 9.9 b B {} C c}
   1130 do_test selectA-3.72 {
   1131   execsql {
   1132     SELECT a,b,c FROM t3 UNION SELECT x,y,z FROM t2
   1133     ORDER BY a,b,c
   1134   }
   1135 } {{} 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}
   1136 do_test selectA-3.73 {
   1137   execsql {
   1138     SELECT a,b,c FROM t3 UNION SELECT x,y,z FROM t2
   1139     ORDER BY a DESC,b,c
   1140   }
   1141 } {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}
   1142 do_test selectA-3.74 {
   1143   execsql {
   1144     SELECT a,b,c FROM t3 UNION SELECT x,y,z FROM t2
   1145     ORDER BY a,c,b
   1146   }
   1147 } {{} 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}
   1148 do_test selectA-3.75 {
   1149   execsql {
   1150     SELECT a,b,c FROM t3 UNION SELECT x,y,z FROM t2
   1151     ORDER BY b,a,c
   1152   }
   1153 } {{} 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}
   1154 do_test selectA-3.76 {
   1155   execsql {
   1156     SELECT a,b,c FROM t3 UNION SELECT x,y,z FROM t2
   1157     ORDER BY b COLLATE NOCASE,a,c
   1158   }
   1159 } {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}
   1160 do_test selectA-3.77 {
   1161   execsql {
   1162     SELECT a,b,c FROM t3 UNION SELECT x,y,z FROM t2
   1163     ORDER BY b COLLATE NOCASE DESC,a,c
   1164   }
   1165 } {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}
   1166 do_test selectA-3.78 {
   1167   execsql {
   1168     SELECT a,b,c FROM t3 UNION SELECT x,y,z FROM t2
   1169     ORDER BY c,b,a
   1170   }
   1171 } {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}
   1172 do_test selectA-3.79 {
   1173   execsql {
   1174     SELECT a,b,c FROM t3 UNION SELECT x,y,z FROM t2
   1175     ORDER BY c,a,b
   1176   }
   1177 } {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}
   1178 do_test selectA-3.80 {
   1179   execsql {
   1180     SELECT a,b,c FROM t3 UNION SELECT x,y,z FROM t2
   1181     ORDER BY c DESC,a,b
   1182   }
   1183 } {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}
   1184 do_test selectA-3.81 {
   1185   execsql {
   1186     SELECT a,b,c FROM t3 UNION SELECT x,y,z FROM t2
   1187     ORDER BY c COLLATE BINARY DESC,a,b
   1188   }
   1189 } {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}
   1190 do_test selectA-3.82 {
   1191   execsql {
   1192     SELECT x,y,z FROM t2 UNION SELECT a,b,c FROM t3
   1193     ORDER BY a,b,c
   1194   }
   1195 } {{} 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}
   1196 do_test selectA-3.83 {
   1197   execsql {
   1198     SELECT x,y,z FROM t2 UNION SELECT a,b,c FROM t3
   1199     ORDER BY a DESC,b,c
   1200   }
   1201 } {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}
   1202 do_test selectA-3.84 {
   1203   execsql {
   1204     SELECT x,y,z FROM t2 UNION SELECT a,b,c FROM t3
   1205     ORDER BY a,c,b
   1206   }
   1207 } {{} 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}
   1208 do_test selectA-3.85 {
   1209   execsql {
   1210     SELECT x,y,z FROM t2 UNION SELECT a,b,c FROM t3
   1211     ORDER BY b,a,c
   1212   }
   1213 } {{} 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}
   1214 do_test selectA-3.86 {
   1215   execsql {
   1216     SELECT x,y,z FROM t2 UNION SELECT a,b,c FROM t3
   1217     ORDER BY b COLLATE NOCASE,a,c
   1218   }
   1219 } {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}
   1220 do_test selectA-3.87 {
   1221   execsql {
   1222     SELECT x,y,z FROM t2 UNION SELECT a,b,c FROM t3
   1223     ORDER BY y COLLATE NOCASE DESC,x,z
   1224   }
   1225 } {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}
   1226 do_test selectA-3.88 {
   1227   execsql {
   1228     SELECT x,y,z FROM t2 UNION SELECT a,b,c FROM t3
   1229     ORDER BY c,b,a
   1230   }
   1231 } {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}
   1232 do_test selectA-3.89 {
   1233   execsql {
   1234     SELECT x,y,z FROM t2 UNION SELECT a,b,c FROM t3
   1235     ORDER BY c,a,b
   1236   }
   1237 } {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}
   1238 do_test selectA-3.90 {
   1239   execsql {
   1240     SELECT x,y,z FROM t2 UNION SELECT a,b,c FROM t3
   1241     ORDER BY c DESC,a,b
   1242   }
   1243 } {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}
   1244 do_test selectA-3.91 {
   1245   execsql {
   1246     SELECT x,y,z FROM t2 UNION SELECT a,b,c FROM t3
   1247     ORDER BY c COLLATE BINARY DESC,a,b
   1248   }
   1249 } {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}
   1250 do_test selectA-3.92 {
   1251   execsql {
   1252     SELECT x,y,z FROM t2
   1253     INTERSECT SELECT a,b,c FROM t3
   1254     EXCEPT SELECT c,b,a FROM t1
   1255     UNION SELECT a,b,c FROM t3
   1256     INTERSECT SELECT a,b,c FROM t3
   1257     EXCEPT SELECT c,b,a FROM t1
   1258     UNION SELECT a,b,c FROM t3
   1259     ORDER BY y COLLATE NOCASE DESC,x,z
   1260   }
   1261 } {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}
   1262 do_test selectA-3.93 {
   1263   execsql {
   1264     SELECT upper((SELECT c FROM t1 UNION SELECT z FROM t2 ORDER BY 1));
   1265   }
   1266 } {A}
   1267 do_test selectA-3.94 {
   1268   execsql {
   1269     SELECT lower((SELECT c FROM t1 UNION ALL SELECT z FROM t2 ORDER BY 1));
   1270   }
   1271 } {a}
   1272 do_test selectA-3.95 {
   1273   execsql {
   1274     SELECT lower((SELECT c FROM t1 INTERSECT SELECT z FROM t2 ORDER BY 1));
   1275   }
   1276 } {{}}
   1277 do_test selectA-3.96 {
   1278   execsql {
   1279     SELECT lower((SELECT z FROM t2 EXCEPT SELECT c FROM t1 ORDER BY 1));
   1280   }
   1281 } {m}
   1282 do_test selectA-3.97 {
   1283   execsql {
   1284     SELECT upper((SELECT x FROM (
   1285       SELECT x,y,z FROM t2
   1286       INTERSECT SELECT a,b,c FROM t3
   1287       EXCEPT SELECT c,b,a FROM t1
   1288       UNION SELECT a,b,c FROM t3
   1289       INTERSECT SELECT a,b,c FROM t3
   1290       EXCEPT SELECT c,b,a FROM t1
   1291       UNION SELECT a,b,c FROM t3
   1292       ORDER BY y COLLATE NOCASE DESC,x,z)))
   1293   }
   1294 } {MAD}
   1295 
   1296 finish_test
   1297