1 # 2001 September 15 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. The 12 # focus of this file is testing UNION, INTERSECT and EXCEPT operators 13 # in SELECT statements. 14 # 15 # $Id: select4.test,v 1.30 2009/04/16 00:24:24 drh Exp $ 16 17 set testdir [file dirname $argv0] 18 source $testdir/tester.tcl 19 20 # Most tests in this file depend on compound-select. But there are a couple 21 # right at the end that test DISTINCT, so we cannot omit the entire file. 22 # 23 ifcapable compound { 24 25 # Build some test data 26 # 27 execsql { 28 CREATE TABLE t1(n int, log int); 29 BEGIN; 30 } 31 for {set i 1} {$i<32} {incr i} { 32 for {set j 0} {(1<<$j)<$i} {incr j} {} 33 execsql "INSERT INTO t1 VALUES($i,$j)" 34 } 35 execsql { 36 COMMIT; 37 } 38 39 do_test select4-1.0 { 40 execsql {SELECT DISTINCT log FROM t1 ORDER BY log} 41 } {0 1 2 3 4 5} 42 43 # Union All operator 44 # 45 do_test select4-1.1a { 46 lsort [execsql {SELECT DISTINCT log FROM t1}] 47 } {0 1 2 3 4 5} 48 do_test select4-1.1b { 49 lsort [execsql {SELECT n FROM t1 WHERE log=3}] 50 } {5 6 7 8} 51 do_test select4-1.1c { 52 execsql { 53 SELECT DISTINCT log FROM t1 54 UNION ALL 55 SELECT n FROM t1 WHERE log=3 56 ORDER BY log; 57 } 58 } {0 1 2 3 4 5 5 6 7 8} 59 do_test select4-1.1d { 60 execsql { 61 CREATE TABLE t2 AS 62 SELECT DISTINCT log FROM t1 63 UNION ALL 64 SELECT n FROM t1 WHERE log=3 65 ORDER BY log; 66 SELECT * FROM t2; 67 } 68 } {0 1 2 3 4 5 5 6 7 8} 69 execsql {DROP TABLE t2} 70 do_test select4-1.1e { 71 execsql { 72 CREATE TABLE t2 AS 73 SELECT DISTINCT log FROM t1 74 UNION ALL 75 SELECT n FROM t1 WHERE log=3 76 ORDER BY log DESC; 77 SELECT * FROM t2; 78 } 79 } {8 7 6 5 5 4 3 2 1 0} 80 execsql {DROP TABLE t2} 81 do_test select4-1.1f { 82 execsql { 83 SELECT DISTINCT log FROM t1 84 UNION ALL 85 SELECT n FROM t1 WHERE log=2 86 } 87 } {0 1 2 3 4 5 3 4} 88 do_test select4-1.1g { 89 execsql { 90 CREATE TABLE t2 AS 91 SELECT DISTINCT log FROM t1 92 UNION ALL 93 SELECT n FROM t1 WHERE log=2; 94 SELECT * FROM t2; 95 } 96 } {0 1 2 3 4 5 3 4} 97 execsql {DROP TABLE t2} 98 ifcapable subquery { 99 do_test select4-1.2 { 100 execsql { 101 SELECT log FROM t1 WHERE n IN 102 (SELECT DISTINCT log FROM t1 UNION ALL 103 SELECT n FROM t1 WHERE log=3) 104 ORDER BY log; 105 } 106 } {0 1 2 2 3 3 3 3} 107 } 108 do_test select4-1.3 { 109 set v [catch {execsql { 110 SELECT DISTINCT log FROM t1 ORDER BY log 111 UNION ALL 112 SELECT n FROM t1 WHERE log=3 113 ORDER BY log; 114 }} msg] 115 lappend v $msg 116 } {1 {ORDER BY clause should come after UNION ALL not before}} 117 118 # Union operator 119 # 120 do_test select4-2.1 { 121 execsql { 122 SELECT DISTINCT log FROM t1 123 UNION 124 SELECT n FROM t1 WHERE log=3 125 ORDER BY log; 126 } 127 } {0 1 2 3 4 5 6 7 8} 128 ifcapable subquery { 129 do_test select4-2.2 { 130 execsql { 131 SELECT log FROM t1 WHERE n IN 132 (SELECT DISTINCT log FROM t1 UNION 133 SELECT n FROM t1 WHERE log=3) 134 ORDER BY log; 135 } 136 } {0 1 2 2 3 3 3 3} 137 } 138 do_test select4-2.3 { 139 set v [catch {execsql { 140 SELECT DISTINCT log FROM t1 ORDER BY log 141 UNION 142 SELECT n FROM t1 WHERE log=3 143 ORDER BY log; 144 }} msg] 145 lappend v $msg 146 } {1 {ORDER BY clause should come after UNION not before}} 147 148 # Except operator 149 # 150 do_test select4-3.1.1 { 151 execsql { 152 SELECT DISTINCT log FROM t1 153 EXCEPT 154 SELECT n FROM t1 WHERE log=3 155 ORDER BY log; 156 } 157 } {0 1 2 3 4} 158 do_test select4-3.1.2 { 159 execsql { 160 CREATE TABLE t2 AS 161 SELECT DISTINCT log FROM t1 162 EXCEPT 163 SELECT n FROM t1 WHERE log=3 164 ORDER BY log; 165 SELECT * FROM t2; 166 } 167 } {0 1 2 3 4} 168 execsql {DROP TABLE t2} 169 do_test select4-3.1.3 { 170 execsql { 171 CREATE TABLE t2 AS 172 SELECT DISTINCT log FROM t1 173 EXCEPT 174 SELECT n FROM t1 WHERE log=3 175 ORDER BY log DESC; 176 SELECT * FROM t2; 177 } 178 } {4 3 2 1 0} 179 execsql {DROP TABLE t2} 180 ifcapable subquery { 181 do_test select4-3.2 { 182 execsql { 183 SELECT log FROM t1 WHERE n IN 184 (SELECT DISTINCT log FROM t1 EXCEPT 185 SELECT n FROM t1 WHERE log=3) 186 ORDER BY log; 187 } 188 } {0 1 2 2} 189 } 190 do_test select4-3.3 { 191 set v [catch {execsql { 192 SELECT DISTINCT log FROM t1 ORDER BY log 193 EXCEPT 194 SELECT n FROM t1 WHERE log=3 195 ORDER BY log; 196 }} msg] 197 lappend v $msg 198 } {1 {ORDER BY clause should come after EXCEPT not before}} 199 200 # Intersect operator 201 # 202 do_test select4-4.1.1 { 203 execsql { 204 SELECT DISTINCT log FROM t1 205 INTERSECT 206 SELECT n FROM t1 WHERE log=3 207 ORDER BY log; 208 } 209 } {5} 210 211 do_test select4-4.1.2 { 212 execsql { 213 SELECT DISTINCT log FROM t1 214 UNION ALL 215 SELECT 6 216 INTERSECT 217 SELECT n FROM t1 WHERE log=3 218 ORDER BY t1.log; 219 } 220 } {5 6} 221 222 do_test select4-4.1.3 { 223 execsql { 224 CREATE TABLE t2 AS 225 SELECT DISTINCT log FROM t1 UNION ALL SELECT 6 226 INTERSECT 227 SELECT n FROM t1 WHERE log=3 228 ORDER BY log; 229 SELECT * FROM t2; 230 } 231 } {5 6} 232 execsql {DROP TABLE t2} 233 do_test select4-4.1.4 { 234 execsql { 235 CREATE TABLE t2 AS 236 SELECT DISTINCT log FROM t1 UNION ALL SELECT 6 237 INTERSECT 238 SELECT n FROM t1 WHERE log=3 239 ORDER BY log DESC; 240 SELECT * FROM t2; 241 } 242 } {6 5} 243 execsql {DROP TABLE t2} 244 ifcapable subquery { 245 do_test select4-4.2 { 246 execsql { 247 SELECT log FROM t1 WHERE n IN 248 (SELECT DISTINCT log FROM t1 INTERSECT 249 SELECT n FROM t1 WHERE log=3) 250 ORDER BY log; 251 } 252 } {3} 253 } 254 do_test select4-4.3 { 255 set v [catch {execsql { 256 SELECT DISTINCT log FROM t1 ORDER BY log 257 INTERSECT 258 SELECT n FROM t1 WHERE log=3 259 ORDER BY log; 260 }} msg] 261 lappend v $msg 262 } {1 {ORDER BY clause should come after INTERSECT not before}} 263 264 # Various error messages while processing UNION or INTERSECT 265 # 266 do_test select4-5.1 { 267 set v [catch {execsql { 268 SELECT DISTINCT log FROM t2 269 UNION ALL 270 SELECT n FROM t1 WHERE log=3 271 ORDER BY log; 272 }} msg] 273 lappend v $msg 274 } {1 {no such table: t2}} 275 do_test select4-5.2 { 276 set v [catch {execsql { 277 SELECT DISTINCT log AS "xyzzy" FROM t1 278 UNION ALL 279 SELECT n FROM t1 WHERE log=3 280 ORDER BY xyzzy; 281 }} msg] 282 lappend v $msg 283 } {0 {0 1 2 3 4 5 5 6 7 8}} 284 do_test select4-5.2b { 285 set v [catch {execsql { 286 SELECT DISTINCT log AS xyzzy FROM t1 287 UNION ALL 288 SELECT n FROM t1 WHERE log=3 289 ORDER BY "xyzzy"; 290 }} msg] 291 lappend v $msg 292 } {0 {0 1 2 3 4 5 5 6 7 8}} 293 do_test select4-5.2c { 294 set v [catch {execsql { 295 SELECT DISTINCT log FROM t1 296 UNION ALL 297 SELECT n FROM t1 WHERE log=3 298 ORDER BY "xyzzy"; 299 }} msg] 300 lappend v $msg 301 } {1 {1st ORDER BY term does not match any column in the result set}} 302 do_test select4-5.2d { 303 set v [catch {execsql { 304 SELECT DISTINCT log FROM t1 305 INTERSECT 306 SELECT n FROM t1 WHERE log=3 307 ORDER BY "xyzzy"; 308 }} msg] 309 lappend v $msg 310 } {1 {1st ORDER BY term does not match any column in the result set}} 311 do_test select4-5.2e { 312 set v [catch {execsql { 313 SELECT DISTINCT log FROM t1 314 UNION ALL 315 SELECT n FROM t1 WHERE log=3 316 ORDER BY n; 317 }} msg] 318 lappend v $msg 319 } {0 {0 1 2 3 4 5 5 6 7 8}} 320 do_test select4-5.2f { 321 catchsql { 322 SELECT DISTINCT log FROM t1 323 UNION ALL 324 SELECT n FROM t1 WHERE log=3 325 ORDER BY log; 326 } 327 } {0 {0 1 2 3 4 5 5 6 7 8}} 328 do_test select4-5.2g { 329 catchsql { 330 SELECT DISTINCT log FROM t1 331 UNION ALL 332 SELECT n FROM t1 WHERE log=3 333 ORDER BY 1; 334 } 335 } {0 {0 1 2 3 4 5 5 6 7 8}} 336 do_test select4-5.2h { 337 catchsql { 338 SELECT DISTINCT log FROM t1 339 UNION ALL 340 SELECT n FROM t1 WHERE log=3 341 ORDER BY 2; 342 } 343 } {1 {1st ORDER BY term out of range - should be between 1 and 1}} 344 do_test select4-5.2i { 345 catchsql { 346 SELECT DISTINCT 1, log FROM t1 347 UNION ALL 348 SELECT 2, n FROM t1 WHERE log=3 349 ORDER BY 2, 1; 350 } 351 } {0 {1 0 1 1 1 2 1 3 1 4 1 5 2 5 2 6 2 7 2 8}} 352 do_test select4-5.2j { 353 catchsql { 354 SELECT DISTINCT 1, log FROM t1 355 UNION ALL 356 SELECT 2, n FROM t1 WHERE log=3 357 ORDER BY 1, 2 DESC; 358 } 359 } {0 {1 5 1 4 1 3 1 2 1 1 1 0 2 8 2 7 2 6 2 5}} 360 do_test select4-5.2k { 361 catchsql { 362 SELECT DISTINCT 1, log FROM t1 363 UNION ALL 364 SELECT 2, n FROM t1 WHERE log=3 365 ORDER BY n, 1; 366 } 367 } {0 {1 0 1 1 1 2 1 3 1 4 1 5 2 5 2 6 2 7 2 8}} 368 do_test select4-5.3 { 369 set v [catch {execsql { 370 SELECT DISTINCT log, n FROM t1 371 UNION ALL 372 SELECT n FROM t1 WHERE log=3 373 ORDER BY log; 374 }} msg] 375 lappend v $msg 376 } {1 {SELECTs to the left and right of UNION ALL do not have the same number of result columns}} 377 do_test select4-5.3-3807-1 { 378 catchsql { 379 SELECT 1 UNION SELECT 2, 3 UNION SELECT 4, 5 ORDER BY 1; 380 } 381 } {1 {SELECTs to the left and right of UNION do not have the same number of result columns}} 382 do_test select4-5.4 { 383 set v [catch {execsql { 384 SELECT log FROM t1 WHERE n=2 385 UNION ALL 386 SELECT log FROM t1 WHERE n=3 387 UNION ALL 388 SELECT log FROM t1 WHERE n=4 389 UNION ALL 390 SELECT log FROM t1 WHERE n=5 391 ORDER BY log; 392 }} msg] 393 lappend v $msg 394 } {0 {1 2 2 3}} 395 396 do_test select4-6.1 { 397 execsql { 398 SELECT log, count(*) as cnt FROM t1 GROUP BY log 399 UNION 400 SELECT log, n FROM t1 WHERE n=7 401 ORDER BY cnt, log; 402 } 403 } {0 1 1 1 2 2 3 4 3 7 4 8 5 15} 404 do_test select4-6.2 { 405 execsql { 406 SELECT log, count(*) FROM t1 GROUP BY log 407 UNION 408 SELECT log, n FROM t1 WHERE n=7 409 ORDER BY count(*), log; 410 } 411 } {0 1 1 1 2 2 3 4 3 7 4 8 5 15} 412 413 # NULLs are indistinct for the UNION operator. 414 # Make sure the UNION operator recognizes this 415 # 416 do_test select4-6.3 { 417 execsql { 418 SELECT NULL UNION SELECT NULL UNION 419 SELECT 1 UNION SELECT 2 AS 'x' 420 ORDER BY x; 421 } 422 } {{} 1 2} 423 do_test select4-6.3.1 { 424 execsql { 425 SELECT NULL UNION ALL SELECT NULL UNION ALL 426 SELECT 1 UNION ALL SELECT 2 AS 'x' 427 ORDER BY x; 428 } 429 } {{} {} 1 2} 430 431 # Make sure the DISTINCT keyword treats NULLs as indistinct. 432 # 433 ifcapable subquery { 434 do_test select4-6.4 { 435 execsql { 436 SELECT * FROM ( 437 SELECT NULL, 1 UNION ALL SELECT NULL, 1 438 ); 439 } 440 } {{} 1 {} 1} 441 do_test select4-6.5 { 442 execsql { 443 SELECT DISTINCT * FROM ( 444 SELECT NULL, 1 UNION ALL SELECT NULL, 1 445 ); 446 } 447 } {{} 1} 448 do_test select4-6.6 { 449 execsql { 450 SELECT DISTINCT * FROM ( 451 SELECT 1,2 UNION ALL SELECT 1,2 452 ); 453 } 454 } {1 2} 455 } 456 457 # Test distinctness of NULL in other ways. 458 # 459 do_test select4-6.7 { 460 execsql { 461 SELECT NULL EXCEPT SELECT NULL 462 } 463 } {} 464 465 466 # Make sure column names are correct when a compound select appears as 467 # an expression in the WHERE clause. 468 # 469 do_test select4-7.1 { 470 execsql { 471 CREATE TABLE t2 AS SELECT log AS 'x', count(*) AS 'y' FROM t1 GROUP BY log; 472 SELECT * FROM t2 ORDER BY x; 473 } 474 } {0 1 1 1 2 2 3 4 4 8 5 15} 475 ifcapable subquery { 476 do_test select4-7.2 { 477 execsql2 { 478 SELECT * FROM t1 WHERE n IN (SELECT n FROM t1 INTERSECT SELECT x FROM t2) 479 ORDER BY n 480 } 481 } {n 1 log 0 n 2 log 1 n 3 log 2 n 4 log 2 n 5 log 3} 482 do_test select4-7.3 { 483 execsql2 { 484 SELECT * FROM t1 WHERE n IN (SELECT n FROM t1 EXCEPT SELECT x FROM t2) 485 ORDER BY n LIMIT 2 486 } 487 } {n 6 log 3 n 7 log 3} 488 do_test select4-7.4 { 489 execsql2 { 490 SELECT * FROM t1 WHERE n IN (SELECT n FROM t1 UNION SELECT x FROM t2) 491 ORDER BY n LIMIT 2 492 } 493 } {n 1 log 0 n 2 log 1} 494 } ;# ifcapable subquery 495 496 } ;# ifcapable compound 497 498 # Make sure DISTINCT works appropriately on TEXT and NUMERIC columns. 499 do_test select4-8.1 { 500 execsql { 501 BEGIN; 502 CREATE TABLE t3(a text, b float, c text); 503 INSERT INTO t3 VALUES(1, 1.1, '1.1'); 504 INSERT INTO t3 VALUES(2, 1.10, '1.10'); 505 INSERT INTO t3 VALUES(3, 1.10, '1.1'); 506 INSERT INTO t3 VALUES(4, 1.1, '1.10'); 507 INSERT INTO t3 VALUES(5, 1.2, '1.2'); 508 INSERT INTO t3 VALUES(6, 1.3, '1.3'); 509 COMMIT; 510 } 511 execsql { 512 SELECT DISTINCT b FROM t3 ORDER BY c; 513 } 514 } {1.1 1.2 1.3} 515 do_test select4-8.2 { 516 execsql { 517 SELECT DISTINCT c FROM t3 ORDER BY c; 518 } 519 } {1.1 1.10 1.2 1.3} 520 521 # Make sure the names of columns are taken from the right-most subquery 522 # right in a compound query. Ticket #1721 523 # 524 ifcapable compound { 525 526 do_test select4-9.1 { 527 execsql2 { 528 SELECT x, y FROM t2 UNION SELECT a, b FROM t3 ORDER BY x LIMIT 1 529 } 530 } {x 0 y 1} 531 do_test select4-9.2 { 532 execsql2 { 533 SELECT x, y FROM t2 UNION ALL SELECT a, b FROM t3 ORDER BY x LIMIT 1 534 } 535 } {x 0 y 1} 536 do_test select4-9.3 { 537 execsql2 { 538 SELECT x, y FROM t2 EXCEPT SELECT a, b FROM t3 ORDER BY x LIMIT 1 539 } 540 } {x 0 y 1} 541 do_test select4-9.4 { 542 execsql2 { 543 SELECT x, y FROM t2 INTERSECT SELECT 0 AS a, 1 AS b; 544 } 545 } {x 0 y 1} 546 do_test select4-9.5 { 547 execsql2 { 548 SELECT 0 AS x, 1 AS y 549 UNION 550 SELECT 2 AS p, 3 AS q 551 UNION 552 SELECT 4 AS a, 5 AS b 553 ORDER BY x LIMIT 1 554 } 555 } {x 0 y 1} 556 557 ifcapable subquery { 558 do_test select4-9.6 { 559 execsql2 { 560 SELECT * FROM ( 561 SELECT 0 AS x, 1 AS y 562 UNION 563 SELECT 2 AS p, 3 AS q 564 UNION 565 SELECT 4 AS a, 5 AS b 566 ) ORDER BY 1 LIMIT 1; 567 } 568 } {x 0 y 1} 569 do_test select4-9.7 { 570 execsql2 { 571 SELECT * FROM ( 572 SELECT 0 AS x, 1 AS y 573 UNION 574 SELECT 2 AS p, 3 AS q 575 UNION 576 SELECT 4 AS a, 5 AS b 577 ) ORDER BY x LIMIT 1; 578 } 579 } {x 0 y 1} 580 } ;# ifcapable subquery 581 582 do_test select4-9.8 { 583 execsql { 584 SELECT 0 AS x, 1 AS y 585 UNION 586 SELECT 2 AS y, -3 AS x 587 ORDER BY x LIMIT 1; 588 } 589 } {0 1} 590 591 do_test select4-9.9.1 { 592 execsql2 { 593 SELECT 1 AS a, 2 AS b UNION ALL SELECT 3 AS b, 4 AS a 594 } 595 } {a 1 b 2 a 3 b 4} 596 597 ifcapable subquery { 598 do_test select4-9.9.2 { 599 execsql2 { 600 SELECT * FROM (SELECT 1 AS a, 2 AS b UNION ALL SELECT 3 AS b, 4 AS a) 601 WHERE b=3 602 } 603 } {} 604 do_test select4-9.10 { 605 execsql2 { 606 SELECT * FROM (SELECT 1 AS a, 2 AS b UNION ALL SELECT 3 AS b, 4 AS a) 607 WHERE b=2 608 } 609 } {a 1 b 2} 610 do_test select4-9.11 { 611 execsql2 { 612 SELECT * FROM (SELECT 1 AS a, 2 AS b UNION ALL SELECT 3 AS e, 4 AS b) 613 WHERE b=2 614 } 615 } {a 1 b 2} 616 do_test select4-9.12 { 617 execsql2 { 618 SELECT * FROM (SELECT 1 AS a, 2 AS b UNION ALL SELECT 3 AS e, 4 AS b) 619 WHERE b>0 620 } 621 } {a 1 b 2 a 3 b 4} 622 } ;# ifcapable subquery 623 624 # Try combining DISTINCT, LIMIT, and OFFSET. Make sure they all work 625 # together. 626 # 627 do_test select4-10.1 { 628 execsql { 629 SELECT DISTINCT log FROM t1 ORDER BY log 630 } 631 } {0 1 2 3 4 5} 632 do_test select4-10.2 { 633 execsql { 634 SELECT DISTINCT log FROM t1 ORDER BY log LIMIT 4 635 } 636 } {0 1 2 3} 637 do_test select4-10.3 { 638 execsql { 639 SELECT DISTINCT log FROM t1 ORDER BY log LIMIT 0 640 } 641 } {} 642 do_test select4-10.4 { 643 execsql { 644 SELECT DISTINCT log FROM t1 ORDER BY log LIMIT -1 645 } 646 } {0 1 2 3 4 5} 647 do_test select4-10.5 { 648 execsql { 649 SELECT DISTINCT log FROM t1 ORDER BY log LIMIT -1 OFFSET 2 650 } 651 } {2 3 4 5} 652 do_test select4-10.6 { 653 execsql { 654 SELECT DISTINCT log FROM t1 ORDER BY log LIMIT 3 OFFSET 2 655 } 656 } {2 3 4} 657 do_test select4-10.7 { 658 execsql { 659 SELECT DISTINCT log FROM t1 ORDER BY +log LIMIT 3 OFFSET 20 660 } 661 } {} 662 do_test select4-10.8 { 663 execsql { 664 SELECT DISTINCT log FROM t1 ORDER BY log LIMIT 0 OFFSET 3 665 } 666 } {} 667 do_test select4-10.9 { 668 execsql { 669 SELECT DISTINCT max(n), log FROM t1 ORDER BY +log; -- LIMIT 2 OFFSET 1 670 } 671 } {31 5} 672 673 # Make sure compound SELECTs with wildly different numbers of columns 674 # do not cause assertion faults due to register allocation issues. 675 # 676 do_test select4-11.1 { 677 catchsql { 678 SELECT x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x FROM t2 679 UNION 680 SELECT x FROM t2 681 } 682 } {1 {SELECTs to the left and right of UNION do not have the same number of result columns}} 683 do_test select4-11.2 { 684 catchsql { 685 SELECT x FROM t2 686 UNION 687 SELECT x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x FROM t2 688 } 689 } {1 {SELECTs to the left and right of UNION do not have the same number of result columns}} 690 do_test select4-11.3 { 691 catchsql { 692 SELECT x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x FROM t2 693 UNION ALL 694 SELECT x FROM t2 695 } 696 } {1 {SELECTs to the left and right of UNION ALL do not have the same number of result columns}} 697 do_test select4-11.4 { 698 catchsql { 699 SELECT x FROM t2 700 UNION ALL 701 SELECT x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x FROM t2 702 } 703 } {1 {SELECTs to the left and right of UNION ALL do not have the same number of result columns}} 704 do_test select4-11.5 { 705 catchsql { 706 SELECT x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x FROM t2 707 EXCEPT 708 SELECT x FROM t2 709 } 710 } {1 {SELECTs to the left and right of EXCEPT do not have the same number of result columns}} 711 do_test select4-11.6 { 712 catchsql { 713 SELECT x FROM t2 714 EXCEPT 715 SELECT x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x FROM t2 716 } 717 } {1 {SELECTs to the left and right of EXCEPT do not have the same number of result columns}} 718 do_test select4-11.7 { 719 catchsql { 720 SELECT x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x FROM t2 721 INTERSECT 722 SELECT x FROM t2 723 } 724 } {1 {SELECTs to the left and right of INTERSECT do not have the same number of result columns}} 725 do_test select4-11.8 { 726 catchsql { 727 SELECT x FROM t2 728 INTERSECT 729 SELECT x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x FROM t2 730 } 731 } {1 {SELECTs to the left and right of INTERSECT do not have the same number of result columns}} 732 733 do_test select4-11.11 { 734 catchsql { 735 SELECT x FROM t2 736 UNION 737 SELECT x FROM t2 738 UNION ALL 739 SELECT x FROM t2 740 EXCEPT 741 SELECT x FROM t2 742 INTERSECT 743 SELECT x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x FROM t2 744 } 745 } {1 {SELECTs to the left and right of INTERSECT do not have the same number of result columns}} 746 do_test select4-11.12 { 747 catchsql { 748 SELECT x FROM t2 749 UNION 750 SELECT x FROM t2 751 UNION ALL 752 SELECT x FROM t2 753 EXCEPT 754 SELECT x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x FROM t2 755 EXCEPT 756 SELECT x FROM t2 757 } 758 } {1 {SELECTs to the left and right of EXCEPT do not have the same number of result columns}} 759 do_test select4-11.13 { 760 catchsql { 761 SELECT x FROM t2 762 UNION 763 SELECT x FROM t2 764 UNION ALL 765 SELECT x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x FROM t2 766 UNION ALL 767 SELECT x FROM t2 768 EXCEPT 769 SELECT x FROM t2 770 } 771 } {1 {SELECTs to the left and right of UNION ALL do not have the same number of result columns}} 772 do_test select4-11.14 { 773 catchsql { 774 SELECT x FROM t2 775 UNION 776 SELECT x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x FROM t2 777 UNION 778 SELECT x FROM t2 779 UNION ALL 780 SELECT x FROM t2 781 EXCEPT 782 SELECT x FROM t2 783 } 784 } {1 {SELECTs to the left and right of UNION do not have the same number of result columns}} 785 do_test select4-11.15 { 786 catchsql { 787 SELECT x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x FROM t2 788 UNION 789 SELECT x FROM t2 790 INTERSECT 791 SELECT x FROM t2 792 UNION ALL 793 SELECT x FROM t2 794 EXCEPT 795 SELECT x FROM t2 796 } 797 } {1 {SELECTs to the left and right of UNION do not have the same number of result columns}} 798 799 do_test select4-12.1 { 800 sqlite3 db2 :memory: 801 catchsql { 802 SELECT 1 UNION SELECT 2,3 UNION SELECT 4,5 ORDER BY 1; 803 } db2 804 } {1 {SELECTs to the left and right of UNION do not have the same number of result columns}} 805 806 } ;# ifcapable compound 807 808 finish_test 809