3 # The author disclaims copyright to this source code. In place of
4 # a legal notice, here is a blessing:
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.
10 #***********************************************************************
11 # This file implements regression tests for SQLite library. The
12 # focus of this file is testing the SELECT statement.
14 # $Id: select1.test,v 1.70 2009/05/28 01:00:56 drh Exp $
16 set testdir [file dirname $argv0]
17 source $testdir/tester.tcl
19 # Try to select on a non-existant table.
22 set v [catch {execsql {SELECT * FROM test1}} msg]
24 } {1 {no such table: test1}}
27 execsql {CREATE TABLE test1(f1 int, f2 int)}
30 set v [catch {execsql {SELECT * FROM test1, test2}} msg]
32 } {1 {no such table: test2}}
34 set v [catch {execsql {SELECT * FROM test2, test1}} msg]
36 } {1 {no such table: test2}}
38 execsql {INSERT INTO test1(f1,f2) VALUES(11,22)}
41 # Make sure the columns are extracted correctly.
44 execsql {SELECT f1 FROM test1}
47 execsql {SELECT f2 FROM test1}
50 execsql {SELECT f2, f1 FROM test1}
53 execsql {SELECT f1, f2 FROM test1}
56 execsql {SELECT * FROM test1}
58 do_test select1-1.8.1 {
59 execsql {SELECT *, * FROM test1}
61 do_test select1-1.8.2 {
62 execsql {SELECT *, min(f1,f2), max(f1,f2) FROM test1}
64 do_test select1-1.8.3 {
65 execsql {SELECT 'one', *, 'two', * FROM test1}
66 } {one 11 22 two 11 22}
68 execsql {CREATE TABLE test2(r1 real, r2 real)}
69 execsql {INSERT INTO test2(r1,r2) VALUES(1.1,2.2)}
72 execsql {SELECT * FROM test1, test2}
74 do_test select1-1.9.1 {
75 execsql {SELECT *, 'hi' FROM test1, test2}
77 do_test select1-1.9.2 {
78 execsql {SELECT 'one', *, 'two', * FROM test1, test2}
79 } {one 11 22 1.1 2.2 two 11 22 1.1 2.2}
80 do_test select1-1.10 {
81 execsql {SELECT test1.f1, test2.r1 FROM test1, test2}
83 do_test select1-1.11 {
84 execsql {SELECT test1.f1, test2.r1 FROM test2, test1}
86 do_test select1-1.11.1 {
87 execsql {SELECT * FROM test2, test1}
89 do_test select1-1.11.2 {
90 execsql {SELECT * FROM test1 AS a, test1 AS b}
92 do_test select1-1.12 {
93 execsql {SELECT max(test1.f1,test2.r1), min(test1.f2,test2.r2)
96 do_test select1-1.13 {
97 execsql {SELECT min(test1.f1,test2.r1), max(test1.f2,test2.r2)
101 set long {This is a string that is too big to fit inside a NBFS buffer}
102 do_test select1-2.0 {
106 INSERT INTO test1 VALUES(11,22);
107 INSERT INTO test1 VALUES(33,44);
108 CREATE TABLE t3(a,b);
109 INSERT INTO t3 VALUES('abc',NULL);
110 INSERT INTO t3 VALUES(NULL,'xyz');
111 INSERT INTO t3 SELECT * FROM test1;
112 CREATE TABLE t4(a,b);
113 INSERT INTO t4 VALUES(NULL,'$long');
116 } {abc {} {} xyz 11 22 33 44}
118 # Error messges from sqliteExprCheck
120 do_test select1-2.1 {
121 set v [catch {execsql {SELECT count(f1,f2) FROM test1}} msg]
123 } {1 {wrong number of arguments to function count()}}
124 do_test select1-2.2 {
125 set v [catch {execsql {SELECT count(f1) FROM test1}} msg]
128 do_test select1-2.3 {
129 set v [catch {execsql {SELECT Count() FROM test1}} msg]
132 do_test select1-2.4 {
133 set v [catch {execsql {SELECT COUNT(*) FROM test1}} msg]
136 do_test select1-2.5 {
137 set v [catch {execsql {SELECT COUNT(*)+1 FROM test1}} msg]
140 do_test select1-2.5.1 {
141 execsql {SELECT count(*),count(a),count(b) FROM t3}
143 do_test select1-2.5.2 {
144 execsql {SELECT count(*),count(a),count(b) FROM t4}
146 do_test select1-2.5.3 {
147 execsql {SELECT count(*),count(a),count(b) FROM t4 WHERE b=5}
149 do_test select1-2.6 {
150 set v [catch {execsql {SELECT min(*) FROM test1}} msg]
152 } {1 {wrong number of arguments to function min()}}
153 do_test select1-2.7 {
154 set v [catch {execsql {SELECT Min(f1) FROM test1}} msg]
157 do_test select1-2.8 {
158 set v [catch {execsql {SELECT MIN(f1,f2) FROM test1}} msg]
159 lappend v [lsort $msg]
161 do_test select1-2.8.1 {
162 execsql {SELECT coalesce(min(a),'xyzzy') FROM t3}
164 do_test select1-2.8.2 {
165 execsql {SELECT min(coalesce(a,'xyzzy')) FROM t3}
167 do_test select1-2.8.3 {
168 execsql {SELECT min(b), min(b) FROM t4}
170 do_test select1-2.9 {
171 set v [catch {execsql {SELECT MAX(*) FROM test1}} msg]
173 } {1 {wrong number of arguments to function MAX()}}
174 do_test select1-2.10 {
175 set v [catch {execsql {SELECT Max(f1) FROM test1}} msg]
178 do_test select1-2.11 {
179 set v [catch {execsql {SELECT max(f1,f2) FROM test1}} msg]
180 lappend v [lsort $msg]
182 do_test select1-2.12 {
183 set v [catch {execsql {SELECT MAX(f1,f2)+1 FROM test1}} msg]
184 lappend v [lsort $msg]
186 do_test select1-2.13 {
187 set v [catch {execsql {SELECT MAX(f1)+1 FROM test1}} msg]
190 do_test select1-2.13.1 {
191 execsql {SELECT coalesce(max(a),'xyzzy') FROM t3}
193 do_test select1-2.13.2 {
194 execsql {SELECT max(coalesce(a,'xyzzy')) FROM t3}
196 do_test select1-2.14 {
197 set v [catch {execsql {SELECT SUM(*) FROM test1}} msg]
199 } {1 {wrong number of arguments to function SUM()}}
200 do_test select1-2.15 {
201 set v [catch {execsql {SELECT Sum(f1) FROM test1}} msg]
204 do_test select1-2.16 {
205 set v [catch {execsql {SELECT sum(f1,f2) FROM test1}} msg]
207 } {1 {wrong number of arguments to function sum()}}
208 do_test select1-2.17 {
209 set v [catch {execsql {SELECT SUM(f1)+1 FROM test1}} msg]
212 do_test select1-2.17.1 {
213 execsql {SELECT sum(a) FROM t3}
215 do_test select1-2.18 {
216 set v [catch {execsql {SELECT XYZZY(f1) FROM test1}} msg]
218 } {1 {no such function: XYZZY}}
219 do_test select1-2.19 {
220 set v [catch {execsql {SELECT SUM(min(f1,f2)) FROM test1}} msg]
223 do_test select1-2.20 {
224 set v [catch {execsql {SELECT SUM(min(f1)) FROM test1}} msg]
226 } {1 {misuse of aggregate function min()}}
230 do_test select1-2.21 {
232 SELECT min(f1) AS m FROM test1 GROUP BY f1 HAVING max(m+5)<10
234 } {1 {misuse of aliased aggregate m}}
235 do_test select1-2.22 {
237 SELECT coalesce(min(f1)+5,11) AS m FROM test1
241 } {1 {misuse of aliased aggregate m}}
242 do_test select1-2.23 {
244 CREATE TABLE tkt2526(a,b,c PRIMARY KEY);
245 INSERT INTO tkt2526 VALUES('x','y',NULL);
246 INSERT INTO tkt2526 VALUES('x','z',NULL);
249 SELECT count(a) AS cn FROM tkt2526 GROUP BY a HAVING cn<max(cn)
251 } {1 {misuse of aliased aggregate cn}}
253 # WHERE clause expressions
255 do_test select1-3.1 {
256 set v [catch {execsql {SELECT f1 FROM test1 WHERE f1<11}} msg]
259 do_test select1-3.2 {
260 set v [catch {execsql {SELECT f1 FROM test1 WHERE f1<=11}} msg]
263 do_test select1-3.3 {
264 set v [catch {execsql {SELECT f1 FROM test1 WHERE f1=11}} msg]
267 do_test select1-3.4 {
268 set v [catch {execsql {SELECT f1 FROM test1 WHERE f1>=11}} msg]
269 lappend v [lsort $msg]
271 do_test select1-3.5 {
272 set v [catch {execsql {SELECT f1 FROM test1 WHERE f1>11}} msg]
273 lappend v [lsort $msg]
275 do_test select1-3.6 {
276 set v [catch {execsql {SELECT f1 FROM test1 WHERE f1!=11}} msg]
277 lappend v [lsort $msg]
279 do_test select1-3.7 {
280 set v [catch {execsql {SELECT f1 FROM test1 WHERE min(f1,f2)!=11}} msg]
281 lappend v [lsort $msg]
283 do_test select1-3.8 {
284 set v [catch {execsql {SELECT f1 FROM test1 WHERE max(f1,f2)!=11}} msg]
285 lappend v [lsort $msg]
287 do_test select1-3.9 {
288 set v [catch {execsql {SELECT f1 FROM test1 WHERE count(f1,f2)!=11}} msg]
290 } {1 {wrong number of arguments to function count()}}
292 # ORDER BY expressions
294 do_test select1-4.1 {
295 set v [catch {execsql {SELECT f1 FROM test1 ORDER BY f1}} msg]
298 do_test select1-4.2 {
299 set v [catch {execsql {SELECT f1 FROM test1 ORDER BY -f1}} msg]
302 do_test select1-4.3 {
303 set v [catch {execsql {SELECT f1 FROM test1 ORDER BY min(f1,f2)}} msg]
306 do_test select1-4.4 {
307 set v [catch {execsql {SELECT f1 FROM test1 ORDER BY min(f1)}} msg]
309 } {1 {misuse of aggregate: min()}}
310 do_catchsql_test select1-4.5 {
311 INSERT INTO test1(f1) SELECT f1 FROM test1 ORDER BY min(f1);
312 } {1 {misuse of aggregate: min()}}
314 # The restriction not allowing constants in the ORDER BY clause
315 # has been removed. See ticket #1768
316 #do_test select1-4.5 {
318 # SELECT f1 FROM test1 ORDER BY 8.4;
320 #} {1 {ORDER BY terms must not be non-integer constants}}
321 #do_test select1-4.6 {
323 # SELECT f1 FROM test1 ORDER BY '8.4';
325 #} {1 {ORDER BY terms must not be non-integer constants}}
326 #do_test select1-4.7.1 {
328 # SELECT f1 FROM test1 ORDER BY 'xyz';
330 #} {1 {ORDER BY terms must not be non-integer constants}}
331 #do_test select1-4.7.2 {
333 # SELECT f1 FROM test1 ORDER BY -8.4;
335 #} {1 {ORDER BY terms must not be non-integer constants}}
336 #do_test select1-4.7.3 {
338 # SELECT f1 FROM test1 ORDER BY +8.4;
340 #} {1 {ORDER BY terms must not be non-integer constants}}
341 #do_test select1-4.7.4 {
343 # SELECT f1 FROM test1 ORDER BY 4294967296; -- constant larger than 32 bits
345 #} {1 {ORDER BY terms must not be non-integer constants}}
347 do_test select1-4.5 {
349 SELECT f1 FROM test1 ORDER BY 8.4
352 do_test select1-4.6 {
354 SELECT f1 FROM test1 ORDER BY '8.4'
358 do_test select1-4.8 {
360 CREATE TABLE t5(a,b);
361 INSERT INTO t5 VALUES(1,10);
362 INSERT INTO t5 VALUES(2,9);
363 SELECT * FROM t5 ORDER BY 1;
366 do_test select1-4.9.1 {
368 SELECT * FROM t5 ORDER BY 2;
371 do_test select1-4.9.2 {
373 SELECT * FROM t5 ORDER BY +2;
376 do_test select1-4.10.1 {
378 SELECT * FROM t5 ORDER BY 3;
380 } {1 {1st ORDER BY term out of range - should be between 1 and 2}}
381 do_test select1-4.10.2 {
383 SELECT * FROM t5 ORDER BY -1;
385 } {1 {1st ORDER BY term out of range - should be between 1 and 2}}
386 do_test select1-4.11 {
388 INSERT INTO t5 VALUES(3,10);
389 SELECT * FROM t5 ORDER BY 2, 1 DESC;
392 do_test select1-4.12 {
394 SELECT * FROM t5 ORDER BY 1 DESC, b;
397 do_test select1-4.13 {
399 SELECT * FROM t5 ORDER BY b DESC, 1;
404 # ORDER BY ignored on an aggregate query
406 do_test select1-5.1 {
407 set v [catch {execsql {SELECT max(f1) FROM test1 ORDER BY f2}} msg]
411 execsql {CREATE TABLE test2(t1 text, t2 text)}
412 execsql {INSERT INTO test2 VALUES('abc','xyz')}
414 # Check for column naming
416 do_test select1-6.1 {
417 set v [catch {execsql2 {SELECT f1 FROM test1 ORDER BY f2}} msg]
420 do_test select1-6.1.1 {
421 db eval {PRAGMA full_column_names=on}
422 set v [catch {execsql2 {SELECT f1 FROM test1 ORDER BY f2}} msg]
424 } {0 {test1.f1 11 test1.f1 33}}
425 do_test select1-6.1.2 {
426 set v [catch {execsql2 {SELECT f1 as 'f1' FROM test1 ORDER BY f2}} msg]
429 do_test select1-6.1.3 {
430 set v [catch {execsql2 {SELECT * FROM test1 WHERE f1==11}} msg]
433 do_test select1-6.1.4 {
434 set v [catch {execsql2 {SELECT DISTINCT * FROM test1 WHERE f1==11}} msg]
435 db eval {PRAGMA full_column_names=off}
438 do_test select1-6.1.5 {
439 set v [catch {execsql2 {SELECT * FROM test1 WHERE f1==11}} msg]
442 do_test select1-6.1.6 {
443 set v [catch {execsql2 {SELECT DISTINCT * FROM test1 WHERE f1==11}} msg]
446 do_test select1-6.2 {
447 set v [catch {execsql2 {SELECT f1 as xyzzy FROM test1 ORDER BY f2}} msg]
449 } {0 {xyzzy 11 xyzzy 33}}
450 do_test select1-6.3 {
451 set v [catch {execsql2 {SELECT f1 as "xyzzy" FROM test1 ORDER BY f2}} msg]
453 } {0 {xyzzy 11 xyzzy 33}}
454 do_test select1-6.3.1 {
455 set v [catch {execsql2 {SELECT f1 as 'xyzzy ' FROM test1 ORDER BY f2}} msg]
457 } {0 {{xyzzy } 11 {xyzzy } 33}}
458 do_test select1-6.4 {
459 set v [catch {execsql2 {SELECT f1+F2 as xyzzy FROM test1 ORDER BY f2}} msg]
461 } {0 {xyzzy 33 xyzzy 77}}
462 do_test select1-6.4a {
463 set v [catch {execsql2 {SELECT f1+F2 FROM test1 ORDER BY f2}} msg]
465 } {0 {f1+F2 33 f1+F2 77}}
466 do_test select1-6.5 {
467 set v [catch {execsql2 {SELECT test1.f1+F2 FROM test1 ORDER BY f2}} msg]
469 } {0 {test1.f1+F2 33 test1.f1+F2 77}}
470 do_test select1-6.5.1 {
471 execsql2 {PRAGMA full_column_names=on}
472 set v [catch {execsql2 {SELECT test1.f1+F2 FROM test1 ORDER BY f2}} msg]
473 execsql2 {PRAGMA full_column_names=off}
475 } {0 {test1.f1+F2 33 test1.f1+F2 77}}
476 do_test select1-6.6 {
477 set v [catch {execsql2 {SELECT test1.f1+F2, t1 FROM test1, test2
480 } {0 {test1.f1+F2 33 t1 abc test1.f1+F2 77 t1 abc}}
481 do_test select1-6.7 {
482 set v [catch {execsql2 {SELECT A.f1, t1 FROM test1 as A, test2
485 } {0 {f1 11 t1 abc f1 33 t1 abc}}
486 do_test select1-6.8 {
487 set v [catch {execsql2 {SELECT A.f1, f1 FROM test1 as A, test1 as B
490 } {1 {ambiguous column name: f1}}
491 do_test select1-6.8b {
492 set v [catch {execsql2 {SELECT A.f1, B.f1 FROM test1 as A, test1 as B
495 } {1 {ambiguous column name: f2}}
496 do_test select1-6.8c {
497 set v [catch {execsql2 {SELECT A.f1, f1 FROM test1 as A, test1 as A
500 } {1 {ambiguous column name: A.f1}}
501 do_test select1-6.9.1 {
502 set v [catch {execsql {SELECT A.f1, B.f1 FROM test1 as A, test1 as B
503 ORDER BY A.f1, B.f1}} msg]
505 } {0 {11 11 11 33 33 11 33 33}}
506 do_test select1-6.9.2 {
507 set v [catch {execsql2 {SELECT A.f1, B.f1 FROM test1 as A, test1 as B
508 ORDER BY A.f1, B.f1}} msg]
510 } {0 {f1 11 f1 11 f1 33 f1 33 f1 11 f1 11 f1 33 f1 33}}
512 do_test select1-6.9.3 {
514 PRAGMA short_column_names=OFF;
515 PRAGMA full_column_names=OFF;
518 SELECT test1 . f1, test1 . f2 FROM test1 LIMIT 1
520 } {{test1 . f1} 11 {test1 . f2} 22}
521 do_test select1-6.9.4 {
523 PRAGMA short_column_names=OFF;
524 PRAGMA full_column_names=ON;
527 SELECT test1 . f1, test1 . f2 FROM test1 LIMIT 1
529 } {test1.f1 11 test1.f2 22}
530 do_test select1-6.9.5 {
532 PRAGMA short_column_names=OFF;
533 PRAGMA full_column_names=ON;
539 do_test select1-6.9.6 {
541 SELECT * FROM test1 a, test1 b LIMIT 1
543 } {a.f1 11 a.f2 22 b.f1 11 b.f2 22}
544 do_test select1-6.9.7 {
546 SELECT * FROM test1 a, (select 5, 6) LIMIT 1
548 regsub -all {subquery_[0-9a-fA-F_]+} $x {subquery} x
550 } {a.f1 11 a.f2 22 subquery.5 5 subquery.6 6}
551 do_test select1-6.9.8 {
553 SELECT * FROM test1 a, (select 5 AS x, 6 AS y) AS b LIMIT 1
555 regsub -all {subquery_[0-9a-fA-F]+_} $x {subquery} x
557 } {a.f1 11 a.f2 22 b.x 5 b.y 6}
558 do_test select1-6.9.9 {
560 SELECT a.f1, b.f2 FROM test1 a, test1 b LIMIT 1
562 } {test1.f1 11 test1.f2 22}
563 do_test select1-6.9.10 {
565 SELECT f1, t1 FROM test1, test2 LIMIT 1
567 } {test1.f1 11 test2.t1 abc}
568 do_test select1-6.9.11 {
570 PRAGMA short_column_names=ON;
571 PRAGMA full_column_names=ON;
574 SELECT a.f1, b.f2 FROM test1 a, test1 b LIMIT 1
576 } {test1.f1 11 test1.f2 22}
577 do_test select1-6.9.12 {
579 SELECT f1, t1 FROM test1, test2 LIMIT 1
581 } {test1.f1 11 test2.t1 abc}
582 do_test select1-6.9.13 {
584 PRAGMA short_column_names=ON;
585 PRAGMA full_column_names=OFF;
588 SELECT a.f1, b.f1 FROM test1 a, test1 b LIMIT 1
591 do_test select1-6.9.14 {
593 SELECT f1, t1 FROM test1, test2 LIMIT 1
596 do_test select1-6.9.15 {
598 PRAGMA short_column_names=OFF;
599 PRAGMA full_column_names=ON;
602 SELECT a.f1, b.f1 FROM test1 a, test1 b LIMIT 1
604 } {test1.f1 11 test1.f1 11}
605 do_test select1-6.9.16 {
607 SELECT f1, t1 FROM test1, test2 LIMIT 1
609 } {test1.f1 11 test2.t1 abc}
613 PRAGMA short_column_names=ON;
614 PRAGMA full_column_names=OFF;
618 do_test select1-6.10 {
619 set v [catch {execsql2 {
620 SELECT f1 FROM test1 UNION SELECT f2 FROM test1
624 } {0 {f1 11 f1 22 f1 33 f1 44}}
625 do_test select1-6.11 {
626 set v [catch {execsql2 {
627 SELECT f1 FROM test1 UNION SELECT f2+100 FROM test1
631 } {1 {1st ORDER BY term does not match any column in the result set}}
634 ifcapable subquery&&compound {
635 do_test select1-6.20 {
637 CREATE TABLE t6(a TEXT, b TEXT);
638 INSERT INTO t6 VALUES('a','0');
639 INSERT INTO t6 VALUES('b','1');
640 INSERT INTO t6 VALUES('c','2');
641 INSERT INTO t6 VALUES('d','3');
642 SELECT a FROM t6 WHERE b IN
643 (SELECT b FROM t6 WHERE a<='b' UNION SELECT '3' AS x
647 do_test select1-6.21 {
649 SELECT a FROM t6 WHERE b IN
650 (SELECT b FROM t6 WHERE a<='b' UNION SELECT '3' AS x
651 ORDER BY 1 DESC LIMIT 1)
654 do_test select1-6.22 {
656 SELECT a FROM t6 WHERE b IN
657 (SELECT b FROM t6 WHERE a<='b' UNION SELECT '3' AS x
662 do_test select1-6.23 {
664 SELECT a FROM t6 WHERE b IN
665 (SELECT b FROM t6 WHERE a<='b' UNION SELECT '3' AS x
666 ORDER BY x DESC LIMIT 2)
672 } ;#ifcapable compound
674 do_test select1-7.1 {
675 set v [catch {execsql {
676 SELECT f1 FROM test1 WHERE f2=;
679 } {1 {near ";": syntax error}}
681 do_test select1-7.2 {
682 set v [catch {execsql {
683 SELECT f1 FROM test1 UNION SELECT WHERE;
686 } {1 {near "WHERE": syntax error}}
687 } ;# ifcapable compound
688 do_test select1-7.3 {
689 set v [catch {execsql {SELECT f1 FROM test1 as 'hi', test2 as}} msg]
691 } {1 {incomplete input}}
692 do_test select1-7.4 {
693 set v [catch {execsql {
694 SELECT f1 FROM test1 ORDER BY;
697 } {1 {near ";": syntax error}}
698 do_test select1-7.5 {
699 set v [catch {execsql {
700 SELECT f1 FROM test1 ORDER BY f1 desc, f2 where;
703 } {1 {near "where": syntax error}}
704 do_test select1-7.6 {
705 set v [catch {execsql {
706 SELECT count(f1,f2 FROM test1;
709 } {1 {near "FROM": syntax error}}
710 do_test select1-7.7 {
711 set v [catch {execsql {
712 SELECT count(f1,f2+) FROM test1;
715 } {1 {near ")": syntax error}}
716 do_test select1-7.8 {
717 set v [catch {execsql {
718 SELECT f1 FROM test1 ORDER BY f2, f1+;
721 } {1 {near ";": syntax error}}
722 do_test select1-7.9 {
724 SELECT f1 FROM test1 LIMIT 5+3 OFFSET 11 ORDER BY f2;
726 } {1 {near "ORDER": syntax error}}
728 do_test select1-8.1 {
729 execsql {SELECT f1 FROM test1 WHERE 4.3+2.4 OR 1 ORDER BY f1}
731 do_test select1-8.2 {
733 SELECT f1 FROM test1 WHERE ('x' || f1) BETWEEN 'x10' AND 'x20'
737 do_test select1-8.3 {
739 SELECT f1 FROM test1 WHERE 5-3==2
744 # TODO: This test is failing because f1 is now being loaded off the
745 # disk as a vdbe integer, not a string. Hence the value of f1/(f1-11)
746 # changes because of rounding. Disable the test for now.
748 do_test select1-8.4 {
750 SELECT coalesce(f1/(f1-11),'x'),
751 coalesce(min(f1/(f1-11),5),'y'),
752 coalesce(max(f1/(f1-33),6),'z')
753 FROM test1 ORDER BY f1
757 do_test select1-8.5 {
759 SELECT min(1,2,3), -max(1,2,3)
760 FROM test1 ORDER BY f1
765 # Check the behavior when the result set is empty
767 # SQLite v3 always sets r(*).
769 # do_test select1-9.1 {
772 # db eval {SELECT * FROM test1 WHERE f1<0} r {}
775 do_test select1-9.2 {
776 execsql {PRAGMA empty_result_callbacks=on}
779 db eval {SELECT * FROM test1 WHERE f1<0} r {}
783 do_test select1-9.3 {
785 db eval {SELECT * FROM test1 WHERE f1<(select count(*) from test2)} r {}
789 do_test select1-9.4 {
791 db eval {SELECT * FROM test1 ORDER BY f1} r {}
794 do_test select1-9.5 {
796 db eval {SELECT * FROM test1 WHERE f1<0 ORDER BY f1} r {}
801 # Check for ORDER BY clauses that refer to an AS name in the column list
803 do_test select1-10.1 {
805 SELECT f1 AS x FROM test1 ORDER BY x
808 do_test select1-10.2 {
810 SELECT f1 AS x FROM test1 ORDER BY -x
813 do_test select1-10.3 {
815 SELECT f1-23 AS x FROM test1 ORDER BY abs(x)
818 do_test select1-10.4 {
820 SELECT f1-23 AS x FROM test1 ORDER BY -abs(x)
823 do_test select1-10.5 {
825 SELECT f1-22 AS x, f2-22 as y FROM test1
828 do_test select1-10.6 {
830 SELECT f1-22 AS x, f2-22 as y FROM test1 WHERE x>0 AND y<50
833 do_test select1-10.7 {
835 SELECT f1 COLLATE nocase AS x FROM test1 ORDER BY x
839 # Check the ability to specify "TABLE.*" in the result set of a SELECT
841 do_test select1-11.1 {
845 INSERT INTO t3 VALUES(1,2);
846 INSERT INTO t4 VALUES(3,4);
847 SELECT * FROM t3, t4;
850 do_test select1-11.2.1 {
852 SELECT * FROM t3, t4;
855 do_test select1-11.2.2 {
857 SELECT * FROM t3, t4;
860 do_test select1-11.4.1 {
862 SELECT t3.*, t4.b FROM t3, t4;
865 do_test select1-11.4.2 {
867 SELECT "t3".*, t4.b FROM t3, t4;
870 do_test select1-11.5.1 {
872 SELECT t3.*, t4.b FROM t3, t4;
875 do_test select1-11.6 {
877 SELECT x.*, y.b FROM t3 AS x, t4 AS y;
880 do_test select1-11.7 {
882 SELECT t3.b, t4.* FROM t3, t4;
885 do_test select1-11.8 {
887 SELECT t3.b, t4.* FROM t3, t4;
890 do_test select1-11.9 {
892 SELECT x.b, y.* FROM t3 AS x, t4 AS y;
895 do_test select1-11.10 {
897 SELECT t5.* FROM t3, t4;
899 } {1 {no such table: t5}}
900 do_test select1-11.11 {
902 SELECT t3.* FROM t3 AS x, t4;
904 } {1 {no such table: t3}}
906 do_test select1-11.12 {
908 SELECT t3.* FROM t3, (SELECT max(a), max(b) FROM t4)
911 do_test select1-11.13 {
913 SELECT t3.* FROM (SELECT max(a), max(b) FROM t4), t3
916 do_test select1-11.14 {
918 SELECT * FROM t3, (SELECT max(a), max(b) FROM t4) AS 'tx'
920 } {a 1 b 2 max(a) 3 max(b) 4}
921 do_test select1-11.15 {
923 SELECT y.*, t3.* FROM t3, (SELECT max(a), max(b) FROM t4) AS y
925 } {max(a) 3 max(b) 4 a 1 b 2}
927 do_test select1-11.16 {
929 SELECT y.* FROM t3 as y, t4 as z
933 # Tests of SELECT statements without a FROM clause.
935 do_test select1-12.1 {
940 do_test select1-12.2 {
944 } {1 1 'hello' hello 2 2}
945 do_test select1-12.3 {
947 SELECT 1 AS 'a','hello' AS 'b',2 AS 'c'
950 do_test select1-12.4 {
953 INSERT INTO t3 VALUES(1,2);
958 do_test select1-12.5 {
960 SELECT * FROM t3 UNION SELECT 3 AS 'a', 4 ORDER BY a;
964 do_test select1-12.6 {
966 SELECT 3, 4 UNION SELECT * FROM t3;
969 } ;# ifcapable compound
972 do_test select1-12.7 {
974 SELECT * FROM t3 WHERE a=(SELECT 1);
977 do_test select1-12.8 {
979 SELECT * FROM t3 WHERE a=(SELECT 2);
984 ifcapable {compound && subquery} {
985 do_test select1-12.9 {
988 SELECT a AS x, b AS y FROM t3 UNION SELECT a,b FROM t4 ORDER BY a,b
992 do_test select1-12.10 {
995 SELECT a AS x,b AS y FROM t3 UNION SELECT a, b FROM t4 ORDER BY a,b
999 } ;# ifcapable compound
1002 # Check for a VDBE stack growth problem that existed at one point.
1004 ifcapable subquery {
1005 do_test select1-13.1 {
1008 create TABLE abc(a, b, c, PRIMARY KEY(a, b));
1009 INSERT INTO abc VALUES(1, 1, 1);
1011 for {set i 0} {$i<10} {incr i} {
1013 INSERT INTO abc SELECT a+(select max(a) FROM abc),
1014 b+(select max(a) FROM abc), c+(select max(a) FROM abc) FROM abc;
1019 # This used to seg-fault when the problem existed.
1022 (SELECT a FROM abc WHERE a = NULL AND b >= upper.c)
1023 ) FROM abc AS upper;
1028 foreach tab [db eval {SELECT name FROM sqlite_master WHERE type = 'table'}] {
1029 db eval "DROP TABLE $tab"
1034 do_test select1-14.1 {
1036 SELECT * FROM sqlite_master WHERE rowid>10;
1037 SELECT * FROM sqlite_master WHERE rowid=10;
1038 SELECT * FROM sqlite_master WHERE rowid<10;
1039 SELECT * FROM sqlite_master WHERE rowid<=10;
1040 SELECT * FROM sqlite_master WHERE rowid>=10;
1041 SELECT * FROM sqlite_master;
1044 do_test select1-14.2 {
1046 SELECT 10 IN (SELECT rowid FROM sqlite_master);
1050 if {[db one {PRAGMA locking_mode}]=="normal"} {
1051 # Check that ticket #3771 has been fixed. This test does not
1052 # work with locking_mode=EXCLUSIVE so disable in that case.
1054 do_test select1-15.1 {
1057 CREATE INDEX i1 ON t1(a);
1058 INSERT INTO t1 VALUES(1);
1059 INSERT INTO t1 VALUES(2);
1060 INSERT INTO t1 VALUES(3);
1063 do_test select1-15.2 {
1065 execsql { DROP INDEX i1 } db2
1068 do_test select1-15.3 {
1069 execsql { SELECT 2 IN (SELECT a FROM t1) }
1073 # Crash bug reported on the mailing list on 2012-02-23
1075 do_test select1-16.1 {
1076 catchsql {SELECT 1 FROM (SELECT *)}
1077 } {1 {no tables specified}}
1079 # 2015-04-17: assertion fix.
1080 do_catchsql_test select1-16.2 {
1081 SELECT 1 FROM sqlite_master LIMIT 1,#1;
1082 } {1 {near "#1": syntax error}}
1084 # 2019-01-16 Chromium bug 922312
1085 # Sorting with a LIMIT clause using SRT_EphemTab and SRT_Table
1087 do_execsql_test select1-17.1 {
1088 DROP TABLE IF EXISTS t1;
1089 DROP TABLE IF EXISTS t2;
1090 CREATE TABLE t1(x); INSERT INTO t1 VALUES(1);
1091 CREATE TABLE t2(y,z); INSERT INTO t2 VALUES(2,3);
1092 CREATE INDEX t2y ON t2(y);
1093 SELECT * FROM t1,(SELECT * FROM t2 WHERE y=2 ORDER BY y,z);
1095 do_execsql_test select1-17.2 {
1096 SELECT * FROM t1,(SELECT * FROM t2 WHERE y=2 ORDER BY y,z LIMIT 4);
1098 do_execsql_test select1-17.3 {
1099 SELECT * FROM t1,(SELECT * FROM t2 WHERE y=2
1100 UNION ALL SELECT * FROM t2 WHERE y=3 ORDER BY y,z LIMIT 4);
1103 # 2019-07-24 Ticket https://sqlite.org/src/tktview/c52b09c7f38903b1311
1105 do_execsql_test select1-18.1 {
1106 DROP TABLE IF EXISTS t1;
1107 DROP TABLE IF EXISTS t2;
1109 CREATE TABLE t2(x PRIMARY KEY, y);
1110 INSERT INTO t1(c) VALUES(123);
1111 INSERT INTO t2(x) VALUES(123);
1112 SELECT x FROM t2, t1 WHERE x BETWEEN c AND null OR x AND
1113 x IN ((SELECT x FROM (SELECT x FROM t2, t1
1114 WHERE x BETWEEN (SELECT x FROM (SELECT x COLLATE rtrim
1115 FROM t2, t1 WHERE x BETWEEN c AND null
1116 OR x AND x IN (c)), t1 WHERE x BETWEEN c AND null
1117 OR x AND x IN (c)) AND null
1118 OR NOT EXISTS(SELECT -4.81 FROM t1, t2 WHERE x BETWEEN c AND null
1119 OR x AND x IN ((SELECT x FROM (SELECT x FROM t2, t1
1120 WHERE x BETWEEN (SELECT x FROM (SELECT x BETWEEN c AND null
1121 OR x AND x IN (c)), t1 WHERE x BETWEEN c AND null
1122 OR x AND x IN (c)) AND null
1123 OR x AND x IN (c)), t1 WHERE x BETWEEN c AND null
1124 OR x AND x IN (c)))) AND x IN (c)
1125 ), t1 WHERE x BETWEEN c AND null
1126 OR x AND x IN (c)));
1128 do_execsql_test select1-18.2 {
1129 DROP TABLE IF EXISTS t1;
1130 DROP TABLE IF EXISTS t2;
1132 CREATE TABLE t2(x PRIMARY KEY, y);
1133 INSERT INTO t1(c) VALUES(123);
1134 INSERT INTO t2(x) VALUES(123);
1135 SELECT x FROM t2, t1 WHERE x BETWEEN c AND (c+1) OR x AND
1136 x IN ((SELECT x FROM (SELECT x FROM t2, t1
1137 WHERE x BETWEEN (SELECT x FROM (SELECT x COLLATE rtrim
1138 FROM t2, t1 WHERE x BETWEEN c AND (c+1)
1139 OR x AND x IN (c)), t1 WHERE x BETWEEN c AND (c+1)
1140 OR x AND x IN (c)) AND (c+1)
1141 OR NOT EXISTS(SELECT -4.81 FROM t1, t2 WHERE x BETWEEN c AND (c+1)
1142 OR x AND x IN ((SELECT x FROM (SELECT x FROM t2, t1
1143 WHERE x BETWEEN (SELECT x FROM (SELECT x BETWEEN c AND (c+1)
1144 OR x AND x IN (c)), t1 WHERE x BETWEEN c AND (c+1)
1145 OR x AND x IN (c)) AND (c+1)
1146 OR x AND x IN (c)), t1 WHERE x BETWEEN c AND (c+1)
1147 OR x AND x IN (c)))) AND x IN (c)
1148 ), t1 WHERE x BETWEEN c AND (c+1)
1149 OR x AND x IN (c)));
1151 do_execsql_test select1-18.3 {
1152 SELECT 1 FROM t1 WHERE (
1153 SELECT 2 FROM t2 WHERE (
1155 SELECT x FROM t2 WHERE x=c OR x=(SELECT x FROM (VALUES(0)))
1160 do_execsql_test select1-18.4 {
1161 SELECT 1 FROM t1, t2 WHERE (
1163 SELECT x FROM t2 WHERE x=c OR x=(SELECT x FROM (VALUES(0)))
1168 # 2019-12-17 gramfuzz find
1170 do_execsql_test select1-19.10 {
1171 DROP TABLE IF EXISTS t1;
1174 do_catchsql_test select1-19.20 {
1176 SELECT 1,2,3,4,5,6,7
1177 UNION ALL SELECT 1,2,3,4,5,6,7
1179 } {1 {table t1 has 1 columns but 7 values were supplied}}
1180 do_catchsql_test select1-19.21 {
1182 SELECT 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15
1183 UNION ALL SELECT 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15
1185 } {1 {table t1 has 1 columns but 15 values were supplied}}
1187 # 2020-01-01 Found by Yongheng's fuzzer
1190 do_execsql_test select1-20.10 {
1192 a INTEGER PRIMARY KEY,
1195 INSERT INTO t1(a) VALUES (10);
1196 SELECT * FROM t1 JOIN t1 USING(a,b)
1197 WHERE ((SELECT t1.a FROM t1 AS x GROUP BY b) AND b=0)
1200 do_execsql_test select1-20.20 {
1201 SELECT ifnull(a, max((SELECT 123))), count(a) FROM t1 ;
1204 # 2020-10-02 dbsqlfuzz find
1206 do_execsql_test select1-21.1 {
1207 CREATE TABLE t1(a IMTEGES PRIMARY KEY,R);
1208 CREATE TABLE t2(x UNIQUE);
1209 CREATE VIEW v1a(z,y) AS SELECT x IS NULL, x FROM t2;
1210 SELECT a,(+a)b,(+a)b,(+a)b,NOT EXISTS(SELECT null FROM t2),CASE z WHEN 487 THEN 992 WHEN 391 THEN 203 WHEN 10 THEN '?k<D Q' END,'' FROM t1 LEFT JOIN v1a ON z=b;