Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(6)

Side by Side Diff: third_party/sqlite/sqlite-src-3100200/test/select4.test

Issue 2846743003: [sql] Remove SQLite 3.10.2 reference directory. (Closed)
Patch Set: Created 3 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
(Empty)
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
109 # EVIDENCE-OF: R-02644-22131 In a compound SELECT statement, only the
110 # last or right-most simple SELECT may have an ORDER BY clause.
111 #
112 do_test select4-1.3 {
113 set v [catch {execsql {
114 SELECT DISTINCT log FROM t1 ORDER BY log
115 UNION ALL
116 SELECT n FROM t1 WHERE log=3
117 ORDER BY log;
118 }} msg]
119 lappend v $msg
120 } {1 {ORDER BY clause should come after UNION ALL not before}}
121 do_catchsql_test select4-1.4 {
122 SELECT (VALUES(0) INTERSECT SELECT(0) UNION SELECT(0) ORDER BY 1 UNION
123 SELECT 0 UNION SELECT 0 ORDER BY 1);
124 } {1 {ORDER BY clause should come after UNION not before}}
125
126 # Union operator
127 #
128 do_test select4-2.1 {
129 execsql {
130 SELECT DISTINCT log FROM t1
131 UNION
132 SELECT n FROM t1 WHERE log=3
133 ORDER BY log;
134 }
135 } {0 1 2 3 4 5 6 7 8}
136 ifcapable subquery {
137 do_test select4-2.2 {
138 execsql {
139 SELECT log FROM t1 WHERE n IN
140 (SELECT DISTINCT log FROM t1 UNION
141 SELECT n FROM t1 WHERE log=3)
142 ORDER BY log;
143 }
144 } {0 1 2 2 3 3 3 3}
145 }
146 do_test select4-2.3 {
147 set v [catch {execsql {
148 SELECT DISTINCT log FROM t1 ORDER BY log
149 UNION
150 SELECT n FROM t1 WHERE log=3
151 ORDER BY log;
152 }} msg]
153 lappend v $msg
154 } {1 {ORDER BY clause should come after UNION not before}}
155 do_test select4-2.4 {
156 set v [catch {execsql {
157 SELECT 0 ORDER BY (SELECT 0) UNION SELECT 0;
158 }} msg]
159 lappend v $msg
160 } {1 {ORDER BY clause should come after UNION not before}}
161 do_execsql_test select4-2.5 {
162 SELECT 123 AS x ORDER BY (SELECT x ORDER BY 1);
163 } {123}
164
165 # Except operator
166 #
167 do_test select4-3.1.1 {
168 execsql {
169 SELECT DISTINCT log FROM t1
170 EXCEPT
171 SELECT n FROM t1 WHERE log=3
172 ORDER BY log;
173 }
174 } {0 1 2 3 4}
175 do_test select4-3.1.2 {
176 execsql {
177 CREATE TABLE t2 AS
178 SELECT DISTINCT log FROM t1
179 EXCEPT
180 SELECT n FROM t1 WHERE log=3
181 ORDER BY log;
182 SELECT * FROM t2;
183 }
184 } {0 1 2 3 4}
185 execsql {DROP TABLE t2}
186 do_test select4-3.1.3 {
187 execsql {
188 CREATE TABLE t2 AS
189 SELECT DISTINCT log FROM t1
190 EXCEPT
191 SELECT n FROM t1 WHERE log=3
192 ORDER BY log DESC;
193 SELECT * FROM t2;
194 }
195 } {4 3 2 1 0}
196 execsql {DROP TABLE t2}
197 ifcapable subquery {
198 do_test select4-3.2 {
199 execsql {
200 SELECT log FROM t1 WHERE n IN
201 (SELECT DISTINCT log FROM t1 EXCEPT
202 SELECT n FROM t1 WHERE log=3)
203 ORDER BY log;
204 }
205 } {0 1 2 2}
206 }
207 do_test select4-3.3 {
208 set v [catch {execsql {
209 SELECT DISTINCT log FROM t1 ORDER BY log
210 EXCEPT
211 SELECT n FROM t1 WHERE log=3
212 ORDER BY log;
213 }} msg]
214 lappend v $msg
215 } {1 {ORDER BY clause should come after EXCEPT not before}}
216
217 # Intersect operator
218 #
219 do_test select4-4.1.1 {
220 execsql {
221 SELECT DISTINCT log FROM t1
222 INTERSECT
223 SELECT n FROM t1 WHERE log=3
224 ORDER BY log;
225 }
226 } {5}
227
228 do_test select4-4.1.2 {
229 execsql {
230 SELECT DISTINCT log FROM t1
231 UNION ALL
232 SELECT 6
233 INTERSECT
234 SELECT n FROM t1 WHERE log=3
235 ORDER BY t1.log;
236 }
237 } {5 6}
238
239 do_test select4-4.1.3 {
240 execsql {
241 CREATE TABLE t2 AS
242 SELECT DISTINCT log FROM t1 UNION ALL SELECT 6
243 INTERSECT
244 SELECT n FROM t1 WHERE log=3
245 ORDER BY log;
246 SELECT * FROM t2;
247 }
248 } {5 6}
249 execsql {DROP TABLE t2}
250 do_test select4-4.1.4 {
251 execsql {
252 CREATE TABLE t2 AS
253 SELECT DISTINCT log FROM t1 UNION ALL SELECT 6
254 INTERSECT
255 SELECT n FROM t1 WHERE log=3
256 ORDER BY log DESC;
257 SELECT * FROM t2;
258 }
259 } {6 5}
260 execsql {DROP TABLE t2}
261 ifcapable subquery {
262 do_test select4-4.2 {
263 execsql {
264 SELECT log FROM t1 WHERE n IN
265 (SELECT DISTINCT log FROM t1 INTERSECT
266 SELECT n FROM t1 WHERE log=3)
267 ORDER BY log;
268 }
269 } {3}
270 }
271 do_test select4-4.3 {
272 set v [catch {execsql {
273 SELECT DISTINCT log FROM t1 ORDER BY log
274 INTERSECT
275 SELECT n FROM t1 WHERE log=3
276 ORDER BY log;
277 }} msg]
278 lappend v $msg
279 } {1 {ORDER BY clause should come after INTERSECT not before}}
280 do_catchsql_test select4-4.4 {
281 SELECT 3 IN (
282 SELECT 0 ORDER BY 1
283 INTERSECT
284 SELECT 1
285 INTERSECT
286 SELECT 2
287 ORDER BY 1
288 );
289 } {1 {ORDER BY clause should come after INTERSECT not before}}
290
291 # Various error messages while processing UNION or INTERSECT
292 #
293 do_test select4-5.1 {
294 set v [catch {execsql {
295 SELECT DISTINCT log FROM t2
296 UNION ALL
297 SELECT n FROM t1 WHERE log=3
298 ORDER BY log;
299 }} msg]
300 lappend v $msg
301 } {1 {no such table: t2}}
302 do_test select4-5.2 {
303 set v [catch {execsql {
304 SELECT DISTINCT log AS "xyzzy" FROM t1
305 UNION ALL
306 SELECT n FROM t1 WHERE log=3
307 ORDER BY xyzzy;
308 }} msg]
309 lappend v $msg
310 } {0 {0 1 2 3 4 5 5 6 7 8}}
311 do_test select4-5.2b {
312 set v [catch {execsql {
313 SELECT DISTINCT log AS xyzzy FROM t1
314 UNION ALL
315 SELECT n FROM t1 WHERE log=3
316 ORDER BY "xyzzy";
317 }} msg]
318 lappend v $msg
319 } {0 {0 1 2 3 4 5 5 6 7 8}}
320 do_test select4-5.2c {
321 set v [catch {execsql {
322 SELECT DISTINCT log FROM t1
323 UNION ALL
324 SELECT n FROM t1 WHERE log=3
325 ORDER BY "xyzzy";
326 }} msg]
327 lappend v $msg
328 } {1 {1st ORDER BY term does not match any column in the result set}}
329 do_test select4-5.2d {
330 set v [catch {execsql {
331 SELECT DISTINCT log FROM t1
332 INTERSECT
333 SELECT n FROM t1 WHERE log=3
334 ORDER BY "xyzzy";
335 }} msg]
336 lappend v $msg
337 } {1 {1st ORDER BY term does not match any column in the result set}}
338 do_test select4-5.2e {
339 set v [catch {execsql {
340 SELECT DISTINCT log FROM t1
341 UNION ALL
342 SELECT n FROM t1 WHERE log=3
343 ORDER BY n;
344 }} msg]
345 lappend v $msg
346 } {0 {0 1 2 3 4 5 5 6 7 8}}
347 do_test select4-5.2f {
348 catchsql {
349 SELECT DISTINCT log FROM t1
350 UNION ALL
351 SELECT n FROM t1 WHERE log=3
352 ORDER BY log;
353 }
354 } {0 {0 1 2 3 4 5 5 6 7 8}}
355 do_test select4-5.2g {
356 catchsql {
357 SELECT DISTINCT log FROM t1
358 UNION ALL
359 SELECT n FROM t1 WHERE log=3
360 ORDER BY 1;
361 }
362 } {0 {0 1 2 3 4 5 5 6 7 8}}
363 do_test select4-5.2h {
364 catchsql {
365 SELECT DISTINCT log FROM t1
366 UNION ALL
367 SELECT n FROM t1 WHERE log=3
368 ORDER BY 2;
369 }
370 } {1 {1st ORDER BY term out of range - should be between 1 and 1}}
371 do_test select4-5.2i {
372 catchsql {
373 SELECT DISTINCT 1, log FROM t1
374 UNION ALL
375 SELECT 2, n FROM t1 WHERE log=3
376 ORDER BY 2, 1;
377 }
378 } {0 {1 0 1 1 1 2 1 3 1 4 1 5 2 5 2 6 2 7 2 8}}
379 do_test select4-5.2j {
380 catchsql {
381 SELECT DISTINCT 1, log FROM t1
382 UNION ALL
383 SELECT 2, n FROM t1 WHERE log=3
384 ORDER BY 1, 2 DESC;
385 }
386 } {0 {1 5 1 4 1 3 1 2 1 1 1 0 2 8 2 7 2 6 2 5}}
387 do_test select4-5.2k {
388 catchsql {
389 SELECT DISTINCT 1, log FROM t1
390 UNION ALL
391 SELECT 2, n FROM t1 WHERE log=3
392 ORDER BY n, 1;
393 }
394 } {0 {1 0 1 1 1 2 1 3 1 4 1 5 2 5 2 6 2 7 2 8}}
395 do_test select4-5.3 {
396 set v [catch {execsql {
397 SELECT DISTINCT log, n FROM t1
398 UNION ALL
399 SELECT n FROM t1 WHERE log=3
400 ORDER BY log;
401 }} msg]
402 lappend v $msg
403 } {1 {SELECTs to the left and right of UNION ALL do not have the same number of result columns}}
404 do_test select4-5.3-3807-1 {
405 catchsql {
406 SELECT 1 UNION SELECT 2, 3 UNION SELECT 4, 5 ORDER BY 1;
407 }
408 } {1 {SELECTs to the left and right of UNION do not have the same number of resu lt columns}}
409 do_test select4-5.4 {
410 set v [catch {execsql {
411 SELECT log FROM t1 WHERE n=2
412 UNION ALL
413 SELECT log FROM t1 WHERE n=3
414 UNION ALL
415 SELECT log FROM t1 WHERE n=4
416 UNION ALL
417 SELECT log FROM t1 WHERE n=5
418 ORDER BY log;
419 }} msg]
420 lappend v $msg
421 } {0 {1 2 2 3}}
422
423 do_test select4-6.1 {
424 execsql {
425 SELECT log, count(*) as cnt FROM t1 GROUP BY log
426 UNION
427 SELECT log, n FROM t1 WHERE n=7
428 ORDER BY cnt, log;
429 }
430 } {0 1 1 1 2 2 3 4 3 7 4 8 5 15}
431 do_test select4-6.2 {
432 execsql {
433 SELECT log, count(*) FROM t1 GROUP BY log
434 UNION
435 SELECT log, n FROM t1 WHERE n=7
436 ORDER BY count(*), log;
437 }
438 } {0 1 1 1 2 2 3 4 3 7 4 8 5 15}
439
440 # NULLs are indistinct for the UNION operator.
441 # Make sure the UNION operator recognizes this
442 #
443 do_test select4-6.3 {
444 execsql {
445 SELECT NULL UNION SELECT NULL UNION
446 SELECT 1 UNION SELECT 2 AS 'x'
447 ORDER BY x;
448 }
449 } {{} 1 2}
450 do_test select4-6.3.1 {
451 execsql {
452 SELECT NULL UNION ALL SELECT NULL UNION ALL
453 SELECT 1 UNION ALL SELECT 2 AS 'x'
454 ORDER BY x;
455 }
456 } {{} {} 1 2}
457
458 # Make sure the DISTINCT keyword treats NULLs as indistinct.
459 #
460 ifcapable subquery {
461 do_test select4-6.4 {
462 execsql {
463 SELECT * FROM (
464 SELECT NULL, 1 UNION ALL SELECT NULL, 1
465 );
466 }
467 } {{} 1 {} 1}
468 do_test select4-6.5 {
469 execsql {
470 SELECT DISTINCT * FROM (
471 SELECT NULL, 1 UNION ALL SELECT NULL, 1
472 );
473 }
474 } {{} 1}
475 do_test select4-6.6 {
476 execsql {
477 SELECT DISTINCT * FROM (
478 SELECT 1,2 UNION ALL SELECT 1,2
479 );
480 }
481 } {1 2}
482 }
483
484 # Test distinctness of NULL in other ways.
485 #
486 do_test select4-6.7 {
487 execsql {
488 SELECT NULL EXCEPT SELECT NULL
489 }
490 } {}
491
492
493 # Make sure column names are correct when a compound select appears as
494 # an expression in the WHERE clause.
495 #
496 do_test select4-7.1 {
497 execsql {
498 CREATE TABLE t2 AS SELECT log AS 'x', count(*) AS 'y' FROM t1 GROUP BY log;
499 SELECT * FROM t2 ORDER BY x;
500 }
501 } {0 1 1 1 2 2 3 4 4 8 5 15}
502 ifcapable subquery {
503 do_test select4-7.2 {
504 execsql2 {
505 SELECT * FROM t1 WHERE n IN (SELECT n FROM t1 INTERSECT SELECT x FROM t2)
506 ORDER BY n
507 }
508 } {n 1 log 0 n 2 log 1 n 3 log 2 n 4 log 2 n 5 log 3}
509 do_test select4-7.3 {
510 execsql2 {
511 SELECT * FROM t1 WHERE n IN (SELECT n FROM t1 EXCEPT SELECT x FROM t2)
512 ORDER BY n LIMIT 2
513 }
514 } {n 6 log 3 n 7 log 3}
515 do_test select4-7.4 {
516 execsql2 {
517 SELECT * FROM t1 WHERE n IN (SELECT n FROM t1 UNION SELECT x FROM t2)
518 ORDER BY n LIMIT 2
519 }
520 } {n 1 log 0 n 2 log 1}
521 } ;# ifcapable subquery
522
523 } ;# ifcapable compound
524
525 # Make sure DISTINCT works appropriately on TEXT and NUMERIC columns.
526 do_test select4-8.1 {
527 execsql {
528 BEGIN;
529 CREATE TABLE t3(a text, b float, c text);
530 INSERT INTO t3 VALUES(1, 1.1, '1.1');
531 INSERT INTO t3 VALUES(2, 1.10, '1.10');
532 INSERT INTO t3 VALUES(3, 1.10, '1.1');
533 INSERT INTO t3 VALUES(4, 1.1, '1.10');
534 INSERT INTO t3 VALUES(5, 1.2, '1.2');
535 INSERT INTO t3 VALUES(6, 1.3, '1.3');
536 COMMIT;
537 }
538 execsql {
539 SELECT DISTINCT b FROM t3 ORDER BY c;
540 }
541 } {1.1 1.2 1.3}
542 do_test select4-8.2 {
543 execsql {
544 SELECT DISTINCT c FROM t3 ORDER BY c;
545 }
546 } {1.1 1.10 1.2 1.3}
547
548 # Make sure the names of columns are taken from the right-most subquery
549 # right in a compound query. Ticket #1721
550 #
551 ifcapable compound {
552
553 do_test select4-9.1 {
554 execsql2 {
555 SELECT x, y FROM t2 UNION SELECT a, b FROM t3 ORDER BY x LIMIT 1
556 }
557 } {x 0 y 1}
558 do_test select4-9.2 {
559 execsql2 {
560 SELECT x, y FROM t2 UNION ALL SELECT a, b FROM t3 ORDER BY x LIMIT 1
561 }
562 } {x 0 y 1}
563 do_test select4-9.3 {
564 execsql2 {
565 SELECT x, y FROM t2 EXCEPT SELECT a, b FROM t3 ORDER BY x LIMIT 1
566 }
567 } {x 0 y 1}
568 do_test select4-9.4 {
569 execsql2 {
570 SELECT x, y FROM t2 INTERSECT SELECT 0 AS a, 1 AS b;
571 }
572 } {x 0 y 1}
573 do_test select4-9.5 {
574 execsql2 {
575 SELECT 0 AS x, 1 AS y
576 UNION
577 SELECT 2 AS p, 3 AS q
578 UNION
579 SELECT 4 AS a, 5 AS b
580 ORDER BY x LIMIT 1
581 }
582 } {x 0 y 1}
583
584 ifcapable subquery {
585 do_test select4-9.6 {
586 execsql2 {
587 SELECT * FROM (
588 SELECT 0 AS x, 1 AS y
589 UNION
590 SELECT 2 AS p, 3 AS q
591 UNION
592 SELECT 4 AS a, 5 AS b
593 ) ORDER BY 1 LIMIT 1;
594 }
595 } {x 0 y 1}
596 do_test select4-9.7 {
597 execsql2 {
598 SELECT * FROM (
599 SELECT 0 AS x, 1 AS y
600 UNION
601 SELECT 2 AS p, 3 AS q
602 UNION
603 SELECT 4 AS a, 5 AS b
604 ) ORDER BY x LIMIT 1;
605 }
606 } {x 0 y 1}
607 } ;# ifcapable subquery
608
609 do_test select4-9.8 {
610 execsql {
611 SELECT 0 AS x, 1 AS y
612 UNION
613 SELECT 2 AS y, -3 AS x
614 ORDER BY x LIMIT 1;
615 }
616 } {0 1}
617
618 do_test select4-9.9.1 {
619 execsql2 {
620 SELECT 1 AS a, 2 AS b UNION ALL SELECT 3 AS b, 4 AS a
621 }
622 } {a 1 b 2 a 3 b 4}
623
624 ifcapable subquery {
625 do_test select4-9.9.2 {
626 execsql2 {
627 SELECT * FROM (SELECT 1 AS a, 2 AS b UNION ALL SELECT 3 AS b, 4 AS a)
628 WHERE b=3
629 }
630 } {}
631 do_test select4-9.10 {
632 execsql2 {
633 SELECT * FROM (SELECT 1 AS a, 2 AS b UNION ALL SELECT 3 AS b, 4 AS a)
634 WHERE b=2
635 }
636 } {a 1 b 2}
637 do_test select4-9.11 {
638 execsql2 {
639 SELECT * FROM (SELECT 1 AS a, 2 AS b UNION ALL SELECT 3 AS e, 4 AS b)
640 WHERE b=2
641 }
642 } {a 1 b 2}
643 do_test select4-9.12 {
644 execsql2 {
645 SELECT * FROM (SELECT 1 AS a, 2 AS b UNION ALL SELECT 3 AS e, 4 AS b)
646 WHERE b>0
647 }
648 } {a 1 b 2 a 3 b 4}
649 } ;# ifcapable subquery
650
651 # Try combining DISTINCT, LIMIT, and OFFSET. Make sure they all work
652 # together.
653 #
654 do_test select4-10.1 {
655 execsql {
656 SELECT DISTINCT log FROM t1 ORDER BY log
657 }
658 } {0 1 2 3 4 5}
659 do_test select4-10.2 {
660 execsql {
661 SELECT DISTINCT log FROM t1 ORDER BY log LIMIT 4
662 }
663 } {0 1 2 3}
664 do_test select4-10.3 {
665 execsql {
666 SELECT DISTINCT log FROM t1 ORDER BY log LIMIT 0
667 }
668 } {}
669 do_test select4-10.4 {
670 execsql {
671 SELECT DISTINCT log FROM t1 ORDER BY log LIMIT -1
672 }
673 } {0 1 2 3 4 5}
674 do_test select4-10.5 {
675 execsql {
676 SELECT DISTINCT log FROM t1 ORDER BY log LIMIT -1 OFFSET 2
677 }
678 } {2 3 4 5}
679 do_test select4-10.6 {
680 execsql {
681 SELECT DISTINCT log FROM t1 ORDER BY log LIMIT 3 OFFSET 2
682 }
683 } {2 3 4}
684 do_test select4-10.7 {
685 execsql {
686 SELECT DISTINCT log FROM t1 ORDER BY +log LIMIT 3 OFFSET 20
687 }
688 } {}
689 do_test select4-10.8 {
690 execsql {
691 SELECT DISTINCT log FROM t1 ORDER BY log LIMIT 0 OFFSET 3
692 }
693 } {}
694 do_test select4-10.9 {
695 execsql {
696 SELECT DISTINCT max(n), log FROM t1 ORDER BY +log; -- LIMIT 2 OFFSET 1
697 }
698 } {31 5}
699
700 # Make sure compound SELECTs with wildly different numbers of columns
701 # do not cause assertion faults due to register allocation issues.
702 #
703 do_test select4-11.1 {
704 catchsql {
705 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
706 UNION
707 SELECT x FROM t2
708 }
709 } {1 {SELECTs to the left and right of UNION do not have the same number of resu lt columns}}
710 do_test select4-11.2 {
711 catchsql {
712 SELECT x FROM t2
713 UNION
714 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
715 }
716 } {1 {SELECTs to the left and right of UNION do not have the same number of resu lt columns}}
717 do_test select4-11.3 {
718 catchsql {
719 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
720 UNION ALL
721 SELECT x FROM t2
722 }
723 } {1 {SELECTs to the left and right of UNION ALL do not have the same number of result columns}}
724 do_test select4-11.4 {
725 catchsql {
726 SELECT x FROM t2
727 UNION ALL
728 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
729 }
730 } {1 {SELECTs to the left and right of UNION ALL do not have the same number of result columns}}
731 do_test select4-11.5 {
732 catchsql {
733 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
734 EXCEPT
735 SELECT x FROM t2
736 }
737 } {1 {SELECTs to the left and right of EXCEPT do not have the same number of res ult columns}}
738 do_test select4-11.6 {
739 catchsql {
740 SELECT x FROM t2
741 EXCEPT
742 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
743 }
744 } {1 {SELECTs to the left and right of EXCEPT do not have the same number of res ult columns}}
745 do_test select4-11.7 {
746 catchsql {
747 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
748 INTERSECT
749 SELECT x FROM t2
750 }
751 } {1 {SELECTs to the left and right of INTERSECT do not have the same number of result columns}}
752 do_test select4-11.8 {
753 catchsql {
754 SELECT x FROM t2
755 INTERSECT
756 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
757 }
758 } {1 {SELECTs to the left and right of INTERSECT do not have the same number of result columns}}
759
760 do_test select4-11.11 {
761 catchsql {
762 SELECT x FROM t2
763 UNION
764 SELECT x FROM t2
765 UNION ALL
766 SELECT x FROM t2
767 EXCEPT
768 SELECT x FROM t2
769 INTERSECT
770 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
771 }
772 } {1 {SELECTs to the left and right of INTERSECT do not have the same number of result columns}}
773 do_test select4-11.12 {
774 catchsql {
775 SELECT x FROM t2
776 UNION
777 SELECT x FROM t2
778 UNION ALL
779 SELECT x FROM t2
780 EXCEPT
781 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
782 EXCEPT
783 SELECT x FROM t2
784 }
785 } {1 {SELECTs to the left and right of EXCEPT do not have the same number of res ult columns}}
786 do_test select4-11.13 {
787 catchsql {
788 SELECT x FROM t2
789 UNION
790 SELECT x FROM t2
791 UNION ALL
792 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
793 UNION ALL
794 SELECT x FROM t2
795 EXCEPT
796 SELECT x FROM t2
797 }
798 } {1 {SELECTs to the left and right of UNION ALL do not have the same number of result columns}}
799 do_test select4-11.14 {
800 catchsql {
801 SELECT x FROM t2
802 UNION
803 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
804 UNION
805 SELECT x FROM t2
806 UNION ALL
807 SELECT x FROM t2
808 EXCEPT
809 SELECT x FROM t2
810 }
811 } {1 {SELECTs to the left and right of UNION do not have the same number of resu lt columns}}
812 do_test select4-11.15 {
813 catchsql {
814 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
815 UNION
816 SELECT x FROM t2
817 INTERSECT
818 SELECT x FROM t2
819 UNION ALL
820 SELECT x FROM t2
821 EXCEPT
822 SELECT x FROM t2
823 }
824 } {1 {SELECTs to the left and right of UNION do not have the same number of resu lt columns}}
825 do_test select4-11.16 {
826 catchsql {
827 INSERT INTO t2(rowid) VALUES(2) UNION SELECT 3,4 UNION SELECT 5,6 ORDER BY 1 ;
828 }
829 } {1 {SELECTs to the left and right of UNION do not have the same number of resu lt columns}}
830
831 do_test select4-12.1 {
832 sqlite3 db2 :memory:
833 catchsql {
834 SELECT 1 UNION SELECT 2,3 UNION SELECT 4,5 ORDER BY 1;
835 } db2
836 } {1 {SELECTs to the left and right of UNION do not have the same number of resu lt columns}}
837
838 } ;# ifcapable compound
839
840
841 # Ticket [3557ad65a076c] - Incorrect DISTINCT processing with an
842 # indexed query using IN.
843 #
844 do_test select4-13.1 {
845 sqlite3 db test.db
846 db eval {
847 CREATE TABLE t13(a,b);
848 INSERT INTO t13 VALUES(1,1);
849 INSERT INTO t13 VALUES(2,1);
850 INSERT INTO t13 VALUES(3,1);
851 INSERT INTO t13 VALUES(2,2);
852 INSERT INTO t13 VALUES(3,2);
853 INSERT INTO t13 VALUES(4,2);
854 CREATE INDEX t13ab ON t13(a,b);
855 SELECT DISTINCT b from t13 WHERE a IN (1,2,3);
856 }
857 } {1 2}
858
859 # 2014-02-18: Make sure compound SELECTs work with VALUES clauses
860 #
861 do_execsql_test select4-14.1 {
862 CREATE TABLE t14(a,b,c);
863 INSERT INTO t14 VALUES(1,2,3),(4,5,6);
864 SELECT * FROM t14 INTERSECT VALUES(3,2,1),(2,3,1),(1,2,3),(2,1,3);
865 } {1 2 3}
866 do_execsql_test select4-14.2 {
867 SELECT * FROM t14 INTERSECT VALUES(1,2,3);
868 } {1 2 3}
869 do_execsql_test select4-14.3 {
870 SELECT * FROM t14
871 UNION VALUES(3,2,1),(2,3,1),(1,2,3),(7,8,9),(4,5,6)
872 UNION SELECT * FROM t14 ORDER BY 1, 2, 3
873 } {1 2 3 2 3 1 3 2 1 4 5 6 7 8 9}
874 do_execsql_test select4-14.4 {
875 SELECT * FROM t14
876 UNION VALUES(3,2,1)
877 UNION SELECT * FROM t14 ORDER BY 1, 2, 3
878 } {1 2 3 3 2 1 4 5 6}
879 do_execsql_test select4-14.5 {
880 SELECT * FROM t14 EXCEPT VALUES(3,2,1),(2,3,1),(1,2,3),(2,1,3);
881 } {4 5 6}
882 do_execsql_test select4-14.6 {
883 SELECT * FROM t14 EXCEPT VALUES(1,2,3)
884 } {4 5 6}
885 do_execsql_test select4-14.7 {
886 SELECT * FROM t14 EXCEPT VALUES(1,2,3) EXCEPT VALUES(4,5,6)
887 } {}
888 do_execsql_test select4-14.8 {
889 SELECT * FROM t14 EXCEPT VALUES('a','b','c') EXCEPT VALUES(4,5,6)
890 } {1 2 3}
891 do_execsql_test select4-14.9 {
892 SELECT * FROM t14 UNION ALL VALUES(3,2,1),(2,3,1),(1,2,3),(2,1,3);
893 } {1 2 3 4 5 6 3 2 1 2 3 1 1 2 3 2 1 3}
894 do_execsql_test select4-14.10 {
895 SELECT (VALUES(1),(2),(3),(4))
896 } {1}
897 do_execsql_test select4-14.11 {
898 SELECT (SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4)
899 } {1}
900 do_execsql_test select4-14.12 {
901 VALUES(1) UNION VALUES(2);
902 } {1 2}
903 do_execsql_test select4-14.13 {
904 VALUES(1),(2),(3) EXCEPT VALUES(2);
905 } {1 3}
906 do_execsql_test select4-14.14 {
907 VALUES(1),(2),(3) EXCEPT VALUES(1),(3);
908 } {2}
909 do_execsql_test select4-14.15 {
910 SELECT * FROM (SELECT 123), (SELECT 456) ON likely(0 OR 1) OR 0;
911 } {123 456}
912 do_execsql_test select4-14.16 {
913 VALUES(1),(2),(3),(4) UNION ALL SELECT 5 LIMIT 99;
914 } {1 2 3 4 5}
915 do_execsql_test select4-14.17 {
916 VALUES(1),(2),(3),(4) UNION ALL SELECT 5 LIMIT 3;
917 } {1 2 3}
918
919 finish_test
OLDNEW
« no previous file with comments | « third_party/sqlite/sqlite-src-3100200/test/select3.test ('k') | third_party/sqlite/sqlite-src-3100200/test/select5.test » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698