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