xref: /sqlite-3.40.0/test/select1.test (revision da653b89)
1b19a2bc6Sdrh# 2001 September 15
23aadb2e6Sdrh#
3b19a2bc6Sdrh# The author disclaims copyright to this source code.  In place of
4b19a2bc6Sdrh# a legal notice, here is a blessing:
53aadb2e6Sdrh#
6b19a2bc6Sdrh#    May you do good and not evil.
7b19a2bc6Sdrh#    May you find forgiveness for yourself and forgive others.
8b19a2bc6Sdrh#    May you share freely, never taking more than you give.
93aadb2e6Sdrh#
103aadb2e6Sdrh#***********************************************************************
113aadb2e6Sdrh# This file implements regression tests for SQLite library.  The
123aadb2e6Sdrh# focus of this file is testing the SELECT statement.
133aadb2e6Sdrh#
1433e619fcSdrh# $Id: select1.test,v 1.70 2009/05/28 01:00:56 drh Exp $
153aadb2e6Sdrh
163aadb2e6Sdrhset testdir [file dirname $argv0]
173aadb2e6Sdrhsource $testdir/tester.tcl
183aadb2e6Sdrh
193aadb2e6Sdrh# Try to select on a non-existant table.
203aadb2e6Sdrh#
212282792aSdrhdo_test select1-1.1 {
223aadb2e6Sdrh  set v [catch {execsql {SELECT * FROM test1}} msg]
233aadb2e6Sdrh  lappend v $msg
243aadb2e6Sdrh} {1 {no such table: test1}}
253aadb2e6Sdrh
2613a68c3fSdanielk1977
273aadb2e6Sdrhexecsql {CREATE TABLE test1(f1 int, f2 int)}
283aadb2e6Sdrh
292282792aSdrhdo_test select1-1.2 {
303aadb2e6Sdrh  set v [catch {execsql {SELECT * FROM test1, test2}} msg]
313aadb2e6Sdrh  lappend v $msg
323aadb2e6Sdrh} {1 {no such table: test2}}
332282792aSdrhdo_test select1-1.3 {
343aadb2e6Sdrh  set v [catch {execsql {SELECT * FROM test2, test1}} msg]
353aadb2e6Sdrh  lappend v $msg
363aadb2e6Sdrh} {1 {no such table: test2}}
373aadb2e6Sdrh
383aadb2e6Sdrhexecsql {INSERT INTO test1(f1,f2) VALUES(11,22)}
393aadb2e6Sdrh
403aadb2e6Sdrh
41967e8b73Sdrh# Make sure the columns are extracted correctly.
423aadb2e6Sdrh#
432282792aSdrhdo_test select1-1.4 {
443aadb2e6Sdrh  execsql {SELECT f1 FROM test1}
453aadb2e6Sdrh} {11}
462282792aSdrhdo_test select1-1.5 {
473aadb2e6Sdrh  execsql {SELECT f2 FROM test1}
483aadb2e6Sdrh} {22}
492282792aSdrhdo_test select1-1.6 {
503aadb2e6Sdrh  execsql {SELECT f2, f1 FROM test1}
513aadb2e6Sdrh} {22 11}
522282792aSdrhdo_test select1-1.7 {
533aadb2e6Sdrh  execsql {SELECT f1, f2 FROM test1}
543aadb2e6Sdrh} {11 22}
552282792aSdrhdo_test select1-1.8 {
563aadb2e6Sdrh  execsql {SELECT * FROM test1}
573aadb2e6Sdrh} {11 22}
587c917d19Sdrhdo_test select1-1.8.1 {
597c917d19Sdrh  execsql {SELECT *, * FROM test1}
607c917d19Sdrh} {11 22 11 22}
617c917d19Sdrhdo_test select1-1.8.2 {
627c917d19Sdrh  execsql {SELECT *, min(f1,f2), max(f1,f2) FROM test1}
637c917d19Sdrh} {11 22 11 22}
647c917d19Sdrhdo_test select1-1.8.3 {
657c917d19Sdrh  execsql {SELECT 'one', *, 'two', * FROM test1}
667c917d19Sdrh} {one 11 22 two 11 22}
673aadb2e6Sdrh
683aadb2e6Sdrhexecsql {CREATE TABLE test2(r1 real, r2 real)}
693aadb2e6Sdrhexecsql {INSERT INTO test2(r1,r2) VALUES(1.1,2.2)}
703aadb2e6Sdrh
712282792aSdrhdo_test select1-1.9 {
723aadb2e6Sdrh  execsql {SELECT * FROM test1, test2}
733aadb2e6Sdrh} {11 22 1.1 2.2}
747c917d19Sdrhdo_test select1-1.9.1 {
757c917d19Sdrh  execsql {SELECT *, 'hi' FROM test1, test2}
767c917d19Sdrh} {11 22 1.1 2.2 hi}
777c917d19Sdrhdo_test select1-1.9.2 {
787c917d19Sdrh  execsql {SELECT 'one', *, 'two', * FROM test1, test2}
797c917d19Sdrh} {one 11 22 1.1 2.2 two 11 22 1.1 2.2}
802282792aSdrhdo_test select1-1.10 {
813aadb2e6Sdrh  execsql {SELECT test1.f1, test2.r1 FROM test1, test2}
823aadb2e6Sdrh} {11 1.1}
832282792aSdrhdo_test select1-1.11 {
843aadb2e6Sdrh  execsql {SELECT test1.f1, test2.r1 FROM test2, test1}
853aadb2e6Sdrh} {11 1.1}
8617e24df6Sdrhdo_test select1-1.11.1 {
8717e24df6Sdrh  execsql {SELECT * FROM test2, test1}
8817e24df6Sdrh} {1.1 2.2 11 22}
8917e24df6Sdrhdo_test select1-1.11.2 {
9017e24df6Sdrh  execsql {SELECT * FROM test1 AS a, test1 AS b}
9117e24df6Sdrh} {11 22 11 22}
922282792aSdrhdo_test select1-1.12 {
933aadb2e6Sdrh  execsql {SELECT max(test1.f1,test2.r1), min(test1.f2,test2.r2)
943aadb2e6Sdrh           FROM test2, test1}
953aadb2e6Sdrh} {11 2.2}
962282792aSdrhdo_test select1-1.13 {
973aadb2e6Sdrh  execsql {SELECT min(test1.f1,test2.r1), max(test1.f2,test2.r2)
983aadb2e6Sdrh           FROM test1, test2}
993aadb2e6Sdrh} {1.1 22}
1003aadb2e6Sdrh
101832508b7Sdrhset long {This is a string that is too big to fit inside a NBFS buffer}
102832508b7Sdrhdo_test select1-2.0 {
103832508b7Sdrh  execsql "
104832508b7Sdrh    DROP TABLE test2;
105832508b7Sdrh    DELETE FROM test1;
106832508b7Sdrh    INSERT INTO test1 VALUES(11,22);
107832508b7Sdrh    INSERT INTO test1 VALUES(33,44);
108832508b7Sdrh    CREATE TABLE t3(a,b);
109832508b7Sdrh    INSERT INTO t3 VALUES('abc',NULL);
110832508b7Sdrh    INSERT INTO t3 VALUES(NULL,'xyz');
111832508b7Sdrh    INSERT INTO t3 SELECT * FROM test1;
112832508b7Sdrh    CREATE TABLE t4(a,b);
113832508b7Sdrh    INSERT INTO t4 VALUES(NULL,'$long');
114832508b7Sdrh    SELECT * FROM t3;
115832508b7Sdrh  "
116832508b7Sdrh} {abc {} {} xyz 11 22 33 44}
1173aadb2e6Sdrh
1183aadb2e6Sdrh# Error messges from sqliteExprCheck
1193aadb2e6Sdrh#
1202282792aSdrhdo_test select1-2.1 {
1213aadb2e6Sdrh  set v [catch {execsql {SELECT count(f1,f2) FROM test1}} msg]
1223aadb2e6Sdrh  lappend v $msg
12389425d5eSdrh} {1 {wrong number of arguments to function count()}}
1242282792aSdrhdo_test select1-2.2 {
1253aadb2e6Sdrh  set v [catch {execsql {SELECT count(f1) FROM test1}} msg]
1263aadb2e6Sdrh  lappend v $msg
1273aadb2e6Sdrh} {0 2}
1282282792aSdrhdo_test select1-2.3 {
1293aadb2e6Sdrh  set v [catch {execsql {SELECT Count() FROM test1}} msg]
1303aadb2e6Sdrh  lappend v $msg
1313aadb2e6Sdrh} {0 2}
1322282792aSdrhdo_test select1-2.4 {
1333aadb2e6Sdrh  set v [catch {execsql {SELECT COUNT(*) FROM test1}} msg]
1343aadb2e6Sdrh  lappend v $msg
1353aadb2e6Sdrh} {0 2}
1362282792aSdrhdo_test select1-2.5 {
1373aadb2e6Sdrh  set v [catch {execsql {SELECT COUNT(*)+1 FROM test1}} msg]
1383aadb2e6Sdrh  lappend v $msg
1392282792aSdrh} {0 3}
140832508b7Sdrhdo_test select1-2.5.1 {
141832508b7Sdrh  execsql {SELECT count(*),count(a),count(b) FROM t3}
142832508b7Sdrh} {4 3 3}
143832508b7Sdrhdo_test select1-2.5.2 {
144832508b7Sdrh  execsql {SELECT count(*),count(a),count(b) FROM t4}
145832508b7Sdrh} {1 0 1}
146832508b7Sdrhdo_test select1-2.5.3 {
147832508b7Sdrh  execsql {SELECT count(*),count(a),count(b) FROM t4 WHERE b=5}
148832508b7Sdrh} {0 0 0}
1492282792aSdrhdo_test select1-2.6 {
1503aadb2e6Sdrh  set v [catch {execsql {SELECT min(*) FROM test1}} msg]
1513aadb2e6Sdrh  lappend v $msg
152fbc99082Sdrh} {1 {wrong number of arguments to function min()}}
1532282792aSdrhdo_test select1-2.7 {
1543aadb2e6Sdrh  set v [catch {execsql {SELECT Min(f1) FROM test1}} msg]
1553aadb2e6Sdrh  lappend v $msg
1563aadb2e6Sdrh} {0 11}
1572282792aSdrhdo_test select1-2.8 {
1583aadb2e6Sdrh  set v [catch {execsql {SELECT MIN(f1,f2) FROM test1}} msg]
1593aadb2e6Sdrh  lappend v [lsort $msg]
1603aadb2e6Sdrh} {0 {11 33}}
161832508b7Sdrhdo_test select1-2.8.1 {
162832508b7Sdrh  execsql {SELECT coalesce(min(a),'xyzzy') FROM t3}
1639eb516c0Sdrh} {11}
164832508b7Sdrhdo_test select1-2.8.2 {
165832508b7Sdrh  execsql {SELECT min(coalesce(a,'xyzzy')) FROM t3}
166832508b7Sdrh} {11}
167832508b7Sdrhdo_test select1-2.8.3 {
168832508b7Sdrh  execsql {SELECT min(b), min(b) FROM t4}
169832508b7Sdrh} [list $long $long]
1702282792aSdrhdo_test select1-2.9 {
1713aadb2e6Sdrh  set v [catch {execsql {SELECT MAX(*) FROM test1}} msg]
1723aadb2e6Sdrh  lappend v $msg
173fbc99082Sdrh} {1 {wrong number of arguments to function MAX()}}
1742282792aSdrhdo_test select1-2.10 {
1753aadb2e6Sdrh  set v [catch {execsql {SELECT Max(f1) FROM test1}} msg]
1763aadb2e6Sdrh  lappend v $msg
1773aadb2e6Sdrh} {0 33}
1782282792aSdrhdo_test select1-2.11 {
1793aadb2e6Sdrh  set v [catch {execsql {SELECT max(f1,f2) FROM test1}} msg]
1803aadb2e6Sdrh  lappend v [lsort $msg]
1813aadb2e6Sdrh} {0 {22 44}}
1822282792aSdrhdo_test select1-2.12 {
1833aadb2e6Sdrh  set v [catch {execsql {SELECT MAX(f1,f2)+1 FROM test1}} msg]
1843aadb2e6Sdrh  lappend v [lsort $msg]
1853aadb2e6Sdrh} {0 {23 45}}
1862282792aSdrhdo_test select1-2.13 {
1873aadb2e6Sdrh  set v [catch {execsql {SELECT MAX(f1)+1 FROM test1}} msg]
1883aadb2e6Sdrh  lappend v $msg
1892282792aSdrh} {0 34}
190832508b7Sdrhdo_test select1-2.13.1 {
191832508b7Sdrh  execsql {SELECT coalesce(max(a),'xyzzy') FROM t3}
192739105c7Sdrh} {abc}
193bb113518Sdrhdo_test select1-2.13.2 {
194832508b7Sdrh  execsql {SELECT max(coalesce(a,'xyzzy')) FROM t3}
195832508b7Sdrh} {xyzzy}
1962282792aSdrhdo_test select1-2.14 {
1973aadb2e6Sdrh  set v [catch {execsql {SELECT SUM(*) FROM test1}} msg]
1983aadb2e6Sdrh  lappend v $msg
19989425d5eSdrh} {1 {wrong number of arguments to function SUM()}}
2002282792aSdrhdo_test select1-2.15 {
2013aadb2e6Sdrh  set v [catch {execsql {SELECT Sum(f1) FROM test1}} msg]
2023aadb2e6Sdrh  lappend v $msg
2033d1d95e6Sdrh} {0 44}
2042282792aSdrhdo_test select1-2.16 {
2053aadb2e6Sdrh  set v [catch {execsql {SELECT sum(f1,f2) FROM test1}} msg]
2063aadb2e6Sdrh  lappend v $msg
20789425d5eSdrh} {1 {wrong number of arguments to function sum()}}
2082282792aSdrhdo_test select1-2.17 {
2093aadb2e6Sdrh  set v [catch {execsql {SELECT SUM(f1)+1 FROM test1}} msg]
2103aadb2e6Sdrh  lappend v $msg
2113d1d95e6Sdrh} {0 45}
212832508b7Sdrhdo_test select1-2.17.1 {
213832508b7Sdrh  execsql {SELECT sum(a) FROM t3}
21429d72108Sdrh} {44.0}
2152282792aSdrhdo_test select1-2.18 {
2163aadb2e6Sdrh  set v [catch {execsql {SELECT XYZZY(f1) FROM test1}} msg]
2173aadb2e6Sdrh  lappend v $msg
2183aadb2e6Sdrh} {1 {no such function: XYZZY}}
2192282792aSdrhdo_test select1-2.19 {
2203aadb2e6Sdrh  set v [catch {execsql {SELECT SUM(min(f1,f2)) FROM test1}} msg]
2213aadb2e6Sdrh  lappend v $msg
2223d1d95e6Sdrh} {0 44}
2232282792aSdrhdo_test select1-2.20 {
2243aadb2e6Sdrh  set v [catch {execsql {SELECT SUM(min(f1)) FROM test1}} msg]
2253aadb2e6Sdrh  lappend v $msg
2268e0a2f90Sdrh} {1 {misuse of aggregate function min()}}
2273aadb2e6Sdrh
22836379e97Sdrh# Ticket #2526
22936379e97Sdrh#
23036379e97Sdrhdo_test select1-2.21 {
23136379e97Sdrh  catchsql {
23236379e97Sdrh     SELECT min(f1) AS m FROM test1 GROUP BY f1 HAVING max(m+5)<10
23336379e97Sdrh  }
23436379e97Sdrh} {1 {misuse of aliased aggregate m}}
23536379e97Sdrhdo_test select1-2.22 {
23636379e97Sdrh  catchsql {
23736379e97Sdrh     SELECT coalesce(min(f1)+5,11) AS m FROM test1
23836379e97Sdrh      GROUP BY f1
23936379e97Sdrh     HAVING max(m+5)<10
24036379e97Sdrh  }
24136379e97Sdrh} {1 {misuse of aliased aggregate m}}
24236379e97Sdrhdo_test select1-2.23 {
24336379e97Sdrh  execsql {
24436379e97Sdrh    CREATE TABLE tkt2526(a,b,c PRIMARY KEY);
24536379e97Sdrh    INSERT INTO tkt2526 VALUES('x','y',NULL);
24636379e97Sdrh    INSERT INTO tkt2526 VALUES('x','z',NULL);
24736379e97Sdrh  }
24836379e97Sdrh  catchsql {
24936379e97Sdrh    SELECT count(a) AS cn FROM tkt2526 GROUP BY a HAVING cn<max(cn)
25036379e97Sdrh  }
25136379e97Sdrh} {1 {misuse of aliased aggregate cn}}
25236379e97Sdrh
2533aadb2e6Sdrh# WHERE clause expressions
2543aadb2e6Sdrh#
2552282792aSdrhdo_test select1-3.1 {
2563aadb2e6Sdrh  set v [catch {execsql {SELECT f1 FROM test1 WHERE f1<11}} msg]
2573aadb2e6Sdrh  lappend v $msg
2583aadb2e6Sdrh} {0 {}}
2592282792aSdrhdo_test select1-3.2 {
2603aadb2e6Sdrh  set v [catch {execsql {SELECT f1 FROM test1 WHERE f1<=11}} msg]
2613aadb2e6Sdrh  lappend v $msg
2623aadb2e6Sdrh} {0 11}
2632282792aSdrhdo_test select1-3.3 {
2643aadb2e6Sdrh  set v [catch {execsql {SELECT f1 FROM test1 WHERE f1=11}} msg]
2653aadb2e6Sdrh  lappend v $msg
2663aadb2e6Sdrh} {0 11}
2672282792aSdrhdo_test select1-3.4 {
2683aadb2e6Sdrh  set v [catch {execsql {SELECT f1 FROM test1 WHERE f1>=11}} msg]
2693aadb2e6Sdrh  lappend v [lsort $msg]
2703aadb2e6Sdrh} {0 {11 33}}
2712282792aSdrhdo_test select1-3.5 {
2723aadb2e6Sdrh  set v [catch {execsql {SELECT f1 FROM test1 WHERE f1>11}} msg]
2733aadb2e6Sdrh  lappend v [lsort $msg]
2743aadb2e6Sdrh} {0 33}
2752282792aSdrhdo_test select1-3.6 {
2763aadb2e6Sdrh  set v [catch {execsql {SELECT f1 FROM test1 WHERE f1!=11}} msg]
2773aadb2e6Sdrh  lappend v [lsort $msg]
2783aadb2e6Sdrh} {0 33}
2792282792aSdrhdo_test select1-3.7 {
2803aadb2e6Sdrh  set v [catch {execsql {SELECT f1 FROM test1 WHERE min(f1,f2)!=11}} msg]
2813aadb2e6Sdrh  lappend v [lsort $msg]
2823aadb2e6Sdrh} {0 33}
2832282792aSdrhdo_test select1-3.8 {
2843aadb2e6Sdrh  set v [catch {execsql {SELECT f1 FROM test1 WHERE max(f1,f2)!=11}} msg]
2853aadb2e6Sdrh  lappend v [lsort $msg]
2863aadb2e6Sdrh} {0 {11 33}}
2872282792aSdrhdo_test select1-3.9 {
2883aadb2e6Sdrh  set v [catch {execsql {SELECT f1 FROM test1 WHERE count(f1,f2)!=11}} msg]
2893aadb2e6Sdrh  lappend v $msg
29089425d5eSdrh} {1 {wrong number of arguments to function count()}}
2913aadb2e6Sdrh
2923aadb2e6Sdrh# ORDER BY expressions
2933aadb2e6Sdrh#
2942282792aSdrhdo_test select1-4.1 {
2953aadb2e6Sdrh  set v [catch {execsql {SELECT f1 FROM test1 ORDER BY f1}} msg]
2963aadb2e6Sdrh  lappend v $msg
2973aadb2e6Sdrh} {0 {11 33}}
2982282792aSdrhdo_test select1-4.2 {
2993aadb2e6Sdrh  set v [catch {execsql {SELECT f1 FROM test1 ORDER BY -f1}} msg]
3003aadb2e6Sdrh  lappend v $msg
3013aadb2e6Sdrh} {0 {33 11}}
3022282792aSdrhdo_test select1-4.3 {
3033aadb2e6Sdrh  set v [catch {execsql {SELECT f1 FROM test1 ORDER BY min(f1,f2)}} msg]
3043aadb2e6Sdrh  lappend v $msg
3053aadb2e6Sdrh} {0 {11 33}}
3062282792aSdrhdo_test select1-4.4 {
3073aadb2e6Sdrh  set v [catch {execsql {SELECT f1 FROM test1 ORDER BY min(f1)}} msg]
3083aadb2e6Sdrh  lappend v $msg
309b7916a78Sdrh} {1 {misuse of aggregate: min()}}
3105b1c07e7Sdando_catchsql_test select1-4.5 {
3115b1c07e7Sdan  INSERT INTO test1(f1) SELECT f1 FROM test1 ORDER BY min(f1);
3125b1c07e7Sdan} {1 {misuse of aggregate: min()}}
31318e87cffSdrh
31418e87cffSdrh# The restriction not allowing constants in the ORDER BY clause
31518e87cffSdrh# has been removed.  See ticket #1768
31618e87cffSdrh#do_test select1-4.5 {
31718e87cffSdrh#  catchsql {
31818e87cffSdrh#    SELECT f1 FROM test1 ORDER BY 8.4;
31918e87cffSdrh#  }
32018e87cffSdrh#} {1 {ORDER BY terms must not be non-integer constants}}
32118e87cffSdrh#do_test select1-4.6 {
32218e87cffSdrh#  catchsql {
32318e87cffSdrh#    SELECT f1 FROM test1 ORDER BY '8.4';
32418e87cffSdrh#  }
32518e87cffSdrh#} {1 {ORDER BY terms must not be non-integer constants}}
32618e87cffSdrh#do_test select1-4.7.1 {
32718e87cffSdrh#  catchsql {
32818e87cffSdrh#    SELECT f1 FROM test1 ORDER BY 'xyz';
32918e87cffSdrh#  }
33018e87cffSdrh#} {1 {ORDER BY terms must not be non-integer constants}}
33118e87cffSdrh#do_test select1-4.7.2 {
33218e87cffSdrh#  catchsql {
33318e87cffSdrh#    SELECT f1 FROM test1 ORDER BY -8.4;
33418e87cffSdrh#  }
33518e87cffSdrh#} {1 {ORDER BY terms must not be non-integer constants}}
33618e87cffSdrh#do_test select1-4.7.3 {
33718e87cffSdrh#  catchsql {
33818e87cffSdrh#    SELECT f1 FROM test1 ORDER BY +8.4;
33918e87cffSdrh#  }
34018e87cffSdrh#} {1 {ORDER BY terms must not be non-integer constants}}
34118e87cffSdrh#do_test select1-4.7.4 {
34218e87cffSdrh#  catchsql {
34318e87cffSdrh#    SELECT f1 FROM test1 ORDER BY 4294967296; -- constant larger than 32 bits
34418e87cffSdrh#  }
34518e87cffSdrh#} {1 {ORDER BY terms must not be non-integer constants}}
34618e87cffSdrh
3479208643dSdrhdo_test select1-4.5 {
34818e87cffSdrh  execsql {
34918e87cffSdrh    SELECT f1 FROM test1 ORDER BY 8.4
3509208643dSdrh  }
35118e87cffSdrh} {11 33}
352e4de1febSdrhdo_test select1-4.6 {
35318e87cffSdrh  execsql {
35418e87cffSdrh    SELECT f1 FROM test1 ORDER BY '8.4'
355e4de1febSdrh  }
35618e87cffSdrh} {11 33}
35718e87cffSdrh
358e4de1febSdrhdo_test select1-4.8 {
359e4de1febSdrh  execsql {
360e4de1febSdrh    CREATE TABLE t5(a,b);
361e4de1febSdrh    INSERT INTO t5 VALUES(1,10);
362e4de1febSdrh    INSERT INTO t5 VALUES(2,9);
363e4de1febSdrh    SELECT * FROM t5 ORDER BY 1;
364e4de1febSdrh  }
365e4de1febSdrh} {1 10 2 9}
366018d1a49Sdrhdo_test select1-4.9.1 {
367e4de1febSdrh  execsql {
368e4de1febSdrh    SELECT * FROM t5 ORDER BY 2;
369e4de1febSdrh  }
370e4de1febSdrh} {2 9 1 10}
371018d1a49Sdrhdo_test select1-4.9.2 {
372018d1a49Sdrh  execsql {
373018d1a49Sdrh    SELECT * FROM t5 ORDER BY +2;
374018d1a49Sdrh  }
375018d1a49Sdrh} {2 9 1 10}
376018d1a49Sdrhdo_test select1-4.10.1 {
377e4de1febSdrh  catchsql {
378e4de1febSdrh    SELECT * FROM t5 ORDER BY 3;
379e4de1febSdrh  }
38001874bfcSdanielk1977} {1 {1st ORDER BY term out of range - should be between 1 and 2}}
381018d1a49Sdrhdo_test select1-4.10.2 {
382018d1a49Sdrh  catchsql {
383018d1a49Sdrh    SELECT * FROM t5 ORDER BY -1;
384018d1a49Sdrh  }
38501874bfcSdanielk1977} {1 {1st ORDER BY term out of range - should be between 1 and 2}}
386e4de1febSdrhdo_test select1-4.11 {
387e4de1febSdrh  execsql {
388e4de1febSdrh    INSERT INTO t5 VALUES(3,10);
389e4de1febSdrh    SELECT * FROM t5 ORDER BY 2, 1 DESC;
390e4de1febSdrh  }
391e4de1febSdrh} {2 9 3 10 1 10}
392e4de1febSdrhdo_test select1-4.12 {
393e4de1febSdrh  execsql {
394e4de1febSdrh    SELECT * FROM t5 ORDER BY 1 DESC, b;
395e4de1febSdrh  }
396e4de1febSdrh} {3 10 2 9 1 10}
397e4de1febSdrhdo_test select1-4.13 {
398e4de1febSdrh  execsql {
399e4de1febSdrh    SELECT * FROM t5 ORDER BY b DESC, 1;
400e4de1febSdrh  }
401e4de1febSdrh} {1 10 3 10 2 9}
402e4de1febSdrh
4033aadb2e6Sdrh
4043aadb2e6Sdrh# ORDER BY ignored on an aggregate query
4053aadb2e6Sdrh#
4062282792aSdrhdo_test select1-5.1 {
4073aadb2e6Sdrh  set v [catch {execsql {SELECT max(f1) FROM test1 ORDER BY f2}} msg]
4083aadb2e6Sdrh  lappend v $msg
4093aadb2e6Sdrh} {0 33}
4103aadb2e6Sdrh
41185e9e22bSdrhexecsql {CREATE TABLE test2(t1 text, t2 text)}
4123aadb2e6Sdrhexecsql {INSERT INTO test2 VALUES('abc','xyz')}
4133aadb2e6Sdrh
414967e8b73Sdrh# Check for column naming
4153aadb2e6Sdrh#
4162282792aSdrhdo_test select1-6.1 {
4173aadb2e6Sdrh  set v [catch {execsql2 {SELECT f1 FROM test1 ORDER BY f2}} msg]
4183aadb2e6Sdrh  lappend v $msg
4193aadb2e6Sdrh} {0 {f1 11 f1 33}}
420382c0247Sdrhdo_test select1-6.1.1 {
421afed0863Sdrh  db eval {PRAGMA full_column_names=on}
422382c0247Sdrh  set v [catch {execsql2 {SELECT f1 FROM test1 ORDER BY f2}} msg]
423382c0247Sdrh  lappend v $msg
4241bee3d7bSdrh} {0 {test1.f1 11 test1.f1 33}}
425382c0247Sdrhdo_test select1-6.1.2 {
4261bee3d7bSdrh  set v [catch {execsql2 {SELECT f1 as 'f1' FROM test1 ORDER BY f2}} msg]
4271bee3d7bSdrh  lappend v $msg
4281bee3d7bSdrh} {0 {f1 11 f1 33}}
4291bee3d7bSdrhdo_test select1-6.1.3 {
430382c0247Sdrh  set v [catch {execsql2 {SELECT * FROM test1 WHERE f1==11}} msg]
431382c0247Sdrh  lappend v $msg
43279d5f63fSdrh} {0 {f1 11 f2 22}}
4331bee3d7bSdrhdo_test select1-6.1.4 {
43498808babSdrh  set v [catch {execsql2 {SELECT DISTINCT * FROM test1 WHERE f1==11}} msg]
435afed0863Sdrh  db eval {PRAGMA full_column_names=off}
43698808babSdrh  lappend v $msg
43779d5f63fSdrh} {0 {f1 11 f2 22}}
43898808babSdrhdo_test select1-6.1.5 {
439382c0247Sdrh  set v [catch {execsql2 {SELECT * FROM test1 WHERE f1==11}} msg]
440382c0247Sdrh  lappend v $msg
441382c0247Sdrh} {0 {f1 11 f2 22}}
44298808babSdrhdo_test select1-6.1.6 {
44398808babSdrh  set v [catch {execsql2 {SELECT DISTINCT * FROM test1 WHERE f1==11}} msg]
44498808babSdrh  lappend v $msg
44598808babSdrh} {0 {f1 11 f2 22}}
4462282792aSdrhdo_test select1-6.2 {
4473aadb2e6Sdrh  set v [catch {execsql2 {SELECT f1 as xyzzy FROM test1 ORDER BY f2}} msg]
4483aadb2e6Sdrh  lappend v $msg
4493aadb2e6Sdrh} {0 {xyzzy 11 xyzzy 33}}
4502282792aSdrhdo_test select1-6.3 {
4513aadb2e6Sdrh  set v [catch {execsql2 {SELECT f1 as "xyzzy" FROM test1 ORDER BY f2}} msg]
4523aadb2e6Sdrh  lappend v $msg
4533aadb2e6Sdrh} {0 {xyzzy 11 xyzzy 33}}
454d400728aSdrhdo_test select1-6.3.1 {
455d400728aSdrh  set v [catch {execsql2 {SELECT f1 as 'xyzzy ' FROM test1 ORDER BY f2}} msg]
456d400728aSdrh  lappend v $msg
457d400728aSdrh} {0 {{xyzzy } 11 {xyzzy } 33}}
4582282792aSdrhdo_test select1-6.4 {
4593aadb2e6Sdrh  set v [catch {execsql2 {SELECT f1+F2 as xyzzy FROM test1 ORDER BY f2}} msg]
4603aadb2e6Sdrh  lappend v $msg
4613aadb2e6Sdrh} {0 {xyzzy 33 xyzzy 77}}
462c4a3c779Sdrhdo_test select1-6.4a {
463c4a3c779Sdrh  set v [catch {execsql2 {SELECT f1+F2 FROM test1 ORDER BY f2}} msg]
464c4a3c779Sdrh  lappend v $msg
465c4a3c779Sdrh} {0 {f1+F2 33 f1+F2 77}}
4662282792aSdrhdo_test select1-6.5 {
4673aadb2e6Sdrh  set v [catch {execsql2 {SELECT test1.f1+F2 FROM test1 ORDER BY f2}} msg]
4683aadb2e6Sdrh  lappend v $msg
469e1b6a5b8Sdrh} {0 {test1.f1+F2 33 test1.f1+F2 77}}
4701bee3d7bSdrhdo_test select1-6.5.1 {
4711bee3d7bSdrh  execsql2 {PRAGMA full_column_names=on}
4721bee3d7bSdrh  set v [catch {execsql2 {SELECT test1.f1+F2 FROM test1 ORDER BY f2}} msg]
4731bee3d7bSdrh  execsql2 {PRAGMA full_column_names=off}
4741bee3d7bSdrh  lappend v $msg
4751bee3d7bSdrh} {0 {test1.f1+F2 33 test1.f1+F2 77}}
4762282792aSdrhdo_test select1-6.6 {
4773aadb2e6Sdrh  set v [catch {execsql2 {SELECT test1.f1+F2, t1 FROM test1, test2
4783aadb2e6Sdrh         ORDER BY f2}} msg]
4793aadb2e6Sdrh  lappend v $msg
480e1b6a5b8Sdrh} {0 {test1.f1+F2 33 t1 abc test1.f1+F2 77 t1 abc}}
4812282792aSdrhdo_test select1-6.7 {
482da9d6c45Sdrh  set v [catch {execsql2 {SELECT A.f1, t1 FROM test1 as A, test2
483da9d6c45Sdrh         ORDER BY f2}} msg]
484da9d6c45Sdrh  lappend v $msg
48547a6db2bSdrh} {0 {f1 11 t1 abc f1 33 t1 abc}}
4862282792aSdrhdo_test select1-6.8 {
487da9d6c45Sdrh  set v [catch {execsql2 {SELECT A.f1, f1 FROM test1 as A, test1 as B
488da9d6c45Sdrh         ORDER BY f2}} msg]
489da9d6c45Sdrh  lappend v $msg
490967e8b73Sdrh} {1 {ambiguous column name: f1}}
491cc85b411Sdrhdo_test select1-6.8b {
492da9d6c45Sdrh  set v [catch {execsql2 {SELECT A.f1, B.f1 FROM test1 as A, test1 as B
493da9d6c45Sdrh         ORDER BY f2}} msg]
494da9d6c45Sdrh  lappend v $msg
495967e8b73Sdrh} {1 {ambiguous column name: f2}}
496cc85b411Sdrhdo_test select1-6.8c {
497cc85b411Sdrh  set v [catch {execsql2 {SELECT A.f1, f1 FROM test1 as A, test1 as A
498cc85b411Sdrh         ORDER BY f2}} msg]
499cc85b411Sdrh  lappend v $msg
500967e8b73Sdrh} {1 {ambiguous column name: A.f1}}
50147a6db2bSdrhdo_test select1-6.9.1 {
50247a6db2bSdrh  set v [catch {execsql {SELECT A.f1, B.f1 FROM test1 as A, test1 as B
50347a6db2bSdrh         ORDER BY A.f1, B.f1}} msg]
50447a6db2bSdrh  lappend v $msg
50547a6db2bSdrh} {0 {11 11 11 33 33 11 33 33}}
50647a6db2bSdrhdo_test select1-6.9.2 {
507da9d6c45Sdrh  set v [catch {execsql2 {SELECT A.f1, B.f1 FROM test1 as A, test1 as B
508da9d6c45Sdrh         ORDER BY A.f1, B.f1}} msg]
509da9d6c45Sdrh  lappend v $msg
51047a6db2bSdrh} {0 {f1 11 f1 11 f1 33 f1 33 f1 11 f1 11 f1 33 f1 33}}
51127c77438Sdanielk1977
512e49b146fSdrhdo_test select1-6.9.3 {
513e49b146fSdrh  db eval {
514e49b146fSdrh     PRAGMA short_column_names=OFF;
515e49b146fSdrh     PRAGMA full_column_names=OFF;
516e49b146fSdrh  }
517e49b146fSdrh  execsql2 {
518e49b146fSdrh     SELECT test1 . f1, test1 . f2 FROM test1 LIMIT 1
519e49b146fSdrh  }
520e49b146fSdrh} {{test1 . f1} 11 {test1 . f2} 22}
521e49b146fSdrhdo_test select1-6.9.4 {
522e49b146fSdrh  db eval {
523e49b146fSdrh     PRAGMA short_column_names=OFF;
524e49b146fSdrh     PRAGMA full_column_names=ON;
525e49b146fSdrh  }
526e49b146fSdrh  execsql2 {
527e49b146fSdrh     SELECT test1 . f1, test1 . f2 FROM test1 LIMIT 1
528e49b146fSdrh  }
529e49b146fSdrh} {test1.f1 11 test1.f2 22}
530e49b146fSdrhdo_test select1-6.9.5 {
531e49b146fSdrh  db eval {
532e49b146fSdrh     PRAGMA short_column_names=OFF;
533e49b146fSdrh     PRAGMA full_column_names=ON;
534e49b146fSdrh  }
535e49b146fSdrh  execsql2 {
536e49b146fSdrh     SELECT 123.45;
537e49b146fSdrh  }
538e49b146fSdrh} {123.45 123.45}
53993a960a0Sdrhdo_test select1-6.9.6 {
54093a960a0Sdrh  execsql2 {
54193a960a0Sdrh     SELECT * FROM test1 a, test1 b LIMIT 1
54293a960a0Sdrh  }
54393a960a0Sdrh} {a.f1 11 a.f2 22 b.f1 11 b.f2 22}
54493a960a0Sdrhdo_test select1-6.9.7 {
54593a960a0Sdrh  set x [execsql2 {
54693a960a0Sdrh     SELECT * FROM test1 a, (select 5, 6) LIMIT 1
54793a960a0Sdrh  }]
548*da653b89Sdrh  regsub -all {subquery-\d+} $x {subquery-0} x
54993a960a0Sdrh  set x
550*da653b89Sdrh} {a.f1 11 a.f2 22 (subquery-0).5 5 (subquery-0).6 6}
55193a960a0Sdrhdo_test select1-6.9.8 {
55293a960a0Sdrh  set x [execsql2 {
55393a960a0Sdrh     SELECT * FROM test1 a, (select 5 AS x, 6 AS y) AS b LIMIT 1
55493a960a0Sdrh  }]
555*da653b89Sdrh  regsub -all {subquery-\d+} $x {subquery-0} x
55693a960a0Sdrh  set x
55793a960a0Sdrh} {a.f1 11 a.f2 22 b.x 5 b.y 6}
55885e9e22bSdrhdo_test select1-6.9.9 {
55985e9e22bSdrh  execsql2 {
56085e9e22bSdrh     SELECT a.f1, b.f2 FROM test1 a, test1 b LIMIT 1
56185e9e22bSdrh  }
56285e9e22bSdrh} {test1.f1 11 test1.f2 22}
56385e9e22bSdrhdo_test select1-6.9.10 {
56485e9e22bSdrh  execsql2 {
56585e9e22bSdrh     SELECT f1, t1 FROM test1, test2 LIMIT 1
56685e9e22bSdrh  }
56785e9e22bSdrh} {test1.f1 11 test2.t1 abc}
56885e9e22bSdrhdo_test select1-6.9.11 {
56985e9e22bSdrh  db eval {
57085e9e22bSdrh     PRAGMA short_column_names=ON;
57185e9e22bSdrh     PRAGMA full_column_names=ON;
57285e9e22bSdrh  }
57385e9e22bSdrh  execsql2 {
57485e9e22bSdrh     SELECT a.f1, b.f2 FROM test1 a, test1 b LIMIT 1
57585e9e22bSdrh  }
57685e9e22bSdrh} {test1.f1 11 test1.f2 22}
57785e9e22bSdrhdo_test select1-6.9.12 {
57885e9e22bSdrh  execsql2 {
57985e9e22bSdrh     SELECT f1, t1 FROM test1, test2 LIMIT 1
58085e9e22bSdrh  }
58185e9e22bSdrh} {test1.f1 11 test2.t1 abc}
58285e9e22bSdrhdo_test select1-6.9.13 {
58385e9e22bSdrh  db eval {
58485e9e22bSdrh     PRAGMA short_column_names=ON;
58585e9e22bSdrh     PRAGMA full_column_names=OFF;
58685e9e22bSdrh  }
58785e9e22bSdrh  execsql2 {
58885e9e22bSdrh     SELECT a.f1, b.f1 FROM test1 a, test1 b LIMIT 1
58985e9e22bSdrh  }
59085e9e22bSdrh} {f1 11 f1 11}
59185e9e22bSdrhdo_test select1-6.9.14 {
59285e9e22bSdrh  execsql2 {
59385e9e22bSdrh     SELECT f1, t1 FROM test1, test2 LIMIT 1
59485e9e22bSdrh  }
59585e9e22bSdrh} {f1 11 t1 abc}
59685e9e22bSdrhdo_test select1-6.9.15 {
59785e9e22bSdrh  db eval {
59885e9e22bSdrh     PRAGMA short_column_names=OFF;
59985e9e22bSdrh     PRAGMA full_column_names=ON;
60085e9e22bSdrh  }
60185e9e22bSdrh  execsql2 {
60285e9e22bSdrh     SELECT a.f1, b.f1 FROM test1 a, test1 b LIMIT 1
60385e9e22bSdrh  }
60485e9e22bSdrh} {test1.f1 11 test1.f1 11}
60585e9e22bSdrhdo_test select1-6.9.16 {
60685e9e22bSdrh  execsql2 {
60785e9e22bSdrh     SELECT f1, t1 FROM test1, test2 LIMIT 1
60885e9e22bSdrh  }
60985e9e22bSdrh} {test1.f1 11 test2.t1 abc}
61085e9e22bSdrh
61193a960a0Sdrh
612e49b146fSdrhdb eval {
613e49b146fSdrh  PRAGMA short_column_names=ON;
614e49b146fSdrh  PRAGMA full_column_names=OFF;
615e49b146fSdrh}
616e49b146fSdrh
61727c77438Sdanielk1977ifcapable compound {
618c4a3c779Sdrhdo_test select1-6.10 {
619c4a3c779Sdrh  set v [catch {execsql2 {
620c4a3c779Sdrh    SELECT f1 FROM test1 UNION SELECT f2 FROM test1
621c4a3c779Sdrh    ORDER BY f2;
622c4a3c779Sdrh  }} msg]
623c4a3c779Sdrh  lappend v $msg
62492378253Sdrh} {0 {f1 11 f1 22 f1 33 f1 44}}
625c4a3c779Sdrhdo_test select1-6.11 {
626c4a3c779Sdrh  set v [catch {execsql2 {
627c4a3c779Sdrh    SELECT f1 FROM test1 UNION SELECT f2+100 FROM test1
6284c774314Sdrh    ORDER BY f2+101;
629c4a3c779Sdrh  }} msg]
630c4a3c779Sdrh  lappend v $msg
63101874bfcSdanielk1977} {1 {1st ORDER BY term does not match any column in the result set}}
63294ccde58Sdrh
63394ccde58Sdrh# Ticket #2296
634de3e41e3Sdanielk1977ifcapable subquery&&compound {
63594ccde58Sdrhdo_test select1-6.20 {
63694ccde58Sdrh   execsql {
63794ccde58Sdrh     CREATE TABLE t6(a TEXT, b TEXT);
63894ccde58Sdrh     INSERT INTO t6 VALUES('a','0');
63994ccde58Sdrh     INSERT INTO t6 VALUES('b','1');
64094ccde58Sdrh     INSERT INTO t6 VALUES('c','2');
64194ccde58Sdrh     INSERT INTO t6 VALUES('d','3');
64294ccde58Sdrh     SELECT a FROM t6 WHERE b IN
64394ccde58Sdrh        (SELECT b FROM t6 WHERE a<='b' UNION SELECT '3' AS x
64494ccde58Sdrh                 ORDER BY 1 LIMIT 1)
64594ccde58Sdrh   }
64694ccde58Sdrh} {a}
64794ccde58Sdrhdo_test select1-6.21 {
64894ccde58Sdrh   execsql {
64994ccde58Sdrh     SELECT a FROM t6 WHERE b IN
65094ccde58Sdrh        (SELECT b FROM t6 WHERE a<='b' UNION SELECT '3' AS x
65194ccde58Sdrh                 ORDER BY 1 DESC LIMIT 1)
65294ccde58Sdrh   }
65394ccde58Sdrh} {d}
65494ccde58Sdrhdo_test select1-6.22 {
65594ccde58Sdrh   execsql {
65694ccde58Sdrh     SELECT a FROM t6 WHERE b IN
65794ccde58Sdrh        (SELECT b FROM t6 WHERE a<='b' UNION SELECT '3' AS x
65894ccde58Sdrh                 ORDER BY b LIMIT 2)
65994ccde58Sdrh     ORDER BY a;
66094ccde58Sdrh   }
66194ccde58Sdrh} {a b}
66294ccde58Sdrhdo_test select1-6.23 {
66394ccde58Sdrh   execsql {
66494ccde58Sdrh     SELECT a FROM t6 WHERE b IN
66594ccde58Sdrh        (SELECT b FROM t6 WHERE a<='b' UNION SELECT '3' AS x
66694ccde58Sdrh                 ORDER BY x DESC LIMIT 2)
66794ccde58Sdrh     ORDER BY a;
66894ccde58Sdrh   }
66994ccde58Sdrh} {b d}
670284f4acaSdanielk1977}
67194ccde58Sdrh
67227c77438Sdanielk1977} ;#ifcapable compound
6733aadb2e6Sdrh
674d400728aSdrhdo_test select1-7.1 {
675d400728aSdrh  set v [catch {execsql {
676d400728aSdrh     SELECT f1 FROM test1 WHERE f2=;
677d400728aSdrh  }} msg]
678d400728aSdrh  lappend v $msg
679d400728aSdrh} {1 {near ";": syntax error}}
68027c77438Sdanielk1977ifcapable compound {
681d400728aSdrhdo_test select1-7.2 {
682d400728aSdrh  set v [catch {execsql {
683d400728aSdrh     SELECT f1 FROM test1 UNION SELECT WHERE;
684d400728aSdrh  }} msg]
685d400728aSdrh  lappend v $msg
686d400728aSdrh} {1 {near "WHERE": syntax error}}
68727c77438Sdanielk1977} ;# ifcapable compound
688d400728aSdrhdo_test select1-7.3 {
689d400728aSdrh  set v [catch {execsql {SELECT f1 FROM test1 as 'hi', test2 as}} msg]
690d400728aSdrh  lappend v $msg
6916116ee4eSdrh} {1 {incomplete input}}
692d400728aSdrhdo_test select1-7.4 {
693d400728aSdrh  set v [catch {execsql {
694d400728aSdrh     SELECT f1 FROM test1 ORDER BY;
695d400728aSdrh  }} msg]
696d400728aSdrh  lappend v $msg
697d400728aSdrh} {1 {near ";": syntax error}}
698d400728aSdrhdo_test select1-7.5 {
699d400728aSdrh  set v [catch {execsql {
700d400728aSdrh     SELECT f1 FROM test1 ORDER BY f1 desc, f2 where;
701d400728aSdrh  }} msg]
702d400728aSdrh  lappend v $msg
703d400728aSdrh} {1 {near "where": syntax error}}
704d400728aSdrhdo_test select1-7.6 {
705d400728aSdrh  set v [catch {execsql {
706d400728aSdrh     SELECT count(f1,f2 FROM test1;
707d400728aSdrh  }} msg]
708d400728aSdrh  lappend v $msg
709d400728aSdrh} {1 {near "FROM": syntax error}}
710d400728aSdrhdo_test select1-7.7 {
711d400728aSdrh  set v [catch {execsql {
712d400728aSdrh     SELECT count(f1,f2+) FROM test1;
713d400728aSdrh  }} msg]
714d400728aSdrh  lappend v $msg
715d400728aSdrh} {1 {near ")": syntax error}}
716d400728aSdrhdo_test select1-7.8 {
717d400728aSdrh  set v [catch {execsql {
718d400728aSdrh     SELECT f1 FROM test1 ORDER BY f2, f1+;
719d400728aSdrh  }} msg]
720d400728aSdrh  lappend v $msg
721d400728aSdrh} {1 {near ";": syntax error}}
72215926590Sdrhdo_test select1-7.9 {
72315926590Sdrh  catchsql {
72415926590Sdrh     SELECT f1 FROM test1 LIMIT 5+3 OFFSET 11 ORDER BY f2;
72515926590Sdrh  }
72615926590Sdrh} {1 {near "ORDER": syntax error}}
727d400728aSdrh
728d400728aSdrhdo_test select1-8.1 {
729d400728aSdrh  execsql {SELECT f1 FROM test1 WHERE 4.3+2.4 OR 1 ORDER BY f1}
730d400728aSdrh} {11 33}
731d400728aSdrhdo_test select1-8.2 {
732d400728aSdrh  execsql {
733d400728aSdrh    SELECT f1 FROM test1 WHERE ('x' || f1) BETWEEN 'x10' AND 'x20'
734d400728aSdrh    ORDER BY f1
735d400728aSdrh  }
736d400728aSdrh} {11}
737d400728aSdrhdo_test select1-8.3 {
738d400728aSdrh  execsql {
739d400728aSdrh    SELECT f1 FROM test1 WHERE 5-3==2
740d400728aSdrh    ORDER BY f1
741d400728aSdrh  }
742d400728aSdrh} {11 33}
7438d059845Sdanielk1977
7448d059845Sdanielk1977# TODO: This test is failing because f1 is now being loaded off the
7458d059845Sdanielk1977# disk as a vdbe integer, not a string. Hence the value of f1/(f1-11)
7468d059845Sdanielk1977# changes because of rounding. Disable the test for now.
7478d059845Sdanielk1977if 0 {
748d400728aSdrhdo_test select1-8.4 {
749d400728aSdrh  execsql {
750bb113518Sdrh    SELECT coalesce(f1/(f1-11),'x'),
751bb113518Sdrh           coalesce(min(f1/(f1-11),5),'y'),
752bb113518Sdrh           coalesce(max(f1/(f1-33),6),'z')
753d400728aSdrh    FROM test1 ORDER BY f1
754d400728aSdrh  }
755bb113518Sdrh} {x y 6 1.5 1.5 z}
7568d059845Sdanielk1977}
757d400728aSdrhdo_test select1-8.5 {
758d400728aSdrh  execsql {
759d400728aSdrh    SELECT min(1,2,3), -max(1,2,3)
760d400728aSdrh    FROM test1 ORDER BY f1
761d400728aSdrh  }
762d400728aSdrh} {1 -3 1 -3}
763d400728aSdrh
7646a535340Sdrh
7656a535340Sdrh# Check the behavior when the result set is empty
7666a535340Sdrh#
767cbb18d22Sdanielk1977# SQLite v3 always sets r(*).
768cbb18d22Sdanielk1977#
769cbb18d22Sdanielk1977# do_test select1-9.1 {
770cbb18d22Sdanielk1977#   catch {unset r}
771cbb18d22Sdanielk1977#   set r(*) {}
772cbb18d22Sdanielk1977#   db eval {SELECT * FROM test1 WHERE f1<0} r {}
773cbb18d22Sdanielk1977#   set r(*)
774cbb18d22Sdanielk1977# } {}
7756a535340Sdrhdo_test select1-9.2 {
7766a535340Sdrh  execsql {PRAGMA empty_result_callbacks=on}
777cbb18d22Sdanielk1977  catch {unset r}
7786a535340Sdrh  set r(*) {}
7796a535340Sdrh  db eval {SELECT * FROM test1 WHERE f1<0} r {}
7806a535340Sdrh  set r(*)
7816a535340Sdrh} {f1 f2}
7823e8c37e7Sdanielk1977ifcapable subquery {
7836a535340Sdrh  do_test select1-9.3 {
7846a535340Sdrh    set r(*) {}
7856a535340Sdrh    db eval {SELECT * FROM test1 WHERE f1<(select count(*) from test2)} r {}
7866a535340Sdrh    set r(*)
7876a535340Sdrh  } {f1 f2}
7883e8c37e7Sdanielk1977}
7896a535340Sdrhdo_test select1-9.4 {
7906a535340Sdrh  set r(*) {}
7916a535340Sdrh  db eval {SELECT * FROM test1 ORDER BY f1} r {}
7926a535340Sdrh  set r(*)
7936a535340Sdrh} {f1 f2}
7946a535340Sdrhdo_test select1-9.5 {
7956a535340Sdrh  set r(*) {}
7966a535340Sdrh  db eval {SELECT * FROM test1 WHERE f1<0 ORDER BY f1} r {}
7976a535340Sdrh  set r(*)
7986a535340Sdrh} {f1 f2}
7996a535340Sdrhunset r
8006a535340Sdrh
801a2e00042Sdrh# Check for ORDER BY clauses that refer to an AS name in the column list
802a2e00042Sdrh#
803a2e00042Sdrhdo_test select1-10.1 {
804a2e00042Sdrh  execsql {
805a2e00042Sdrh    SELECT f1 AS x FROM test1 ORDER BY x
806a2e00042Sdrh  }
807a2e00042Sdrh} {11 33}
808a2e00042Sdrhdo_test select1-10.2 {
809a2e00042Sdrh  execsql {
810a2e00042Sdrh    SELECT f1 AS x FROM test1 ORDER BY -x
811a2e00042Sdrh  }
812a2e00042Sdrh} {33 11}
813a2e00042Sdrhdo_test select1-10.3 {
814a2e00042Sdrh  execsql {
815a2e00042Sdrh    SELECT f1-23 AS x FROM test1 ORDER BY abs(x)
816a2e00042Sdrh  }
817a2e00042Sdrh} {10 -12}
818a2e00042Sdrhdo_test select1-10.4 {
819a2e00042Sdrh  execsql {
820a2e00042Sdrh    SELECT f1-23 AS x FROM test1 ORDER BY -abs(x)
821a2e00042Sdrh  }
822a2e00042Sdrh} {-12 10}
823a2e00042Sdrhdo_test select1-10.5 {
824a2e00042Sdrh  execsql {
825a2e00042Sdrh    SELECT f1-22 AS x, f2-22 as y FROM test1
826a2e00042Sdrh  }
827a2e00042Sdrh} {-11 0 11 22}
828a2e00042Sdrhdo_test select1-10.6 {
829a2e00042Sdrh  execsql {
830a2e00042Sdrh    SELECT f1-22 AS x, f2-22 as y FROM test1 WHERE x>0 AND y<50
831a2e00042Sdrh  }
832a2e00042Sdrh} {11 22}
83393a960a0Sdrhdo_test select1-10.7 {
83493a960a0Sdrh  execsql {
83593a960a0Sdrh    SELECT f1 COLLATE nocase AS x FROM test1 ORDER BY x
83693a960a0Sdrh  }
83793a960a0Sdrh} {11 33}
838a2e00042Sdrh
83954473229Sdrh# Check the ability to specify "TABLE.*" in the result set of a SELECT
84054473229Sdrh#
84154473229Sdrhdo_test select1-11.1 {
84254473229Sdrh  execsql {
84354473229Sdrh    DELETE FROM t3;
84454473229Sdrh    DELETE FROM t4;
84554473229Sdrh    INSERT INTO t3 VALUES(1,2);
84654473229Sdrh    INSERT INTO t4 VALUES(3,4);
84754473229Sdrh    SELECT * FROM t3, t4;
84854473229Sdrh  }
84954473229Sdrh} {1 2 3 4}
85047a6db2bSdrhdo_test select1-11.2.1 {
85147a6db2bSdrh  execsql {
85247a6db2bSdrh    SELECT * FROM t3, t4;
85347a6db2bSdrh  }
85447a6db2bSdrh} {1 2 3 4}
85547a6db2bSdrhdo_test select1-11.2.2 {
85654473229Sdrh  execsql2 {
85754473229Sdrh    SELECT * FROM t3, t4;
85854473229Sdrh  }
85947a6db2bSdrh} {a 3 b 4 a 3 b 4}
860cf55b7aeSdrhdo_test select1-11.4.1 {
86154473229Sdrh  execsql {
86254473229Sdrh    SELECT t3.*, t4.b FROM t3, t4;
86354473229Sdrh  }
86454473229Sdrh} {1 2 4}
865cf55b7aeSdrhdo_test select1-11.4.2 {
866cf55b7aeSdrh  execsql {
867cf55b7aeSdrh    SELECT "t3".*, t4.b FROM t3, t4;
868cf55b7aeSdrh  }
869cf55b7aeSdrh} {1 2 4}
87047a6db2bSdrhdo_test select1-11.5.1 {
87154473229Sdrh  execsql2 {
87254473229Sdrh    SELECT t3.*, t4.b FROM t3, t4;
87354473229Sdrh  }
87447a6db2bSdrh} {a 1 b 4 b 4}
87554473229Sdrhdo_test select1-11.6 {
87654473229Sdrh  execsql2 {
87754473229Sdrh    SELECT x.*, y.b FROM t3 AS x, t4 AS y;
87854473229Sdrh  }
87947a6db2bSdrh} {a 1 b 4 b 4}
88054473229Sdrhdo_test select1-11.7 {
88154473229Sdrh  execsql {
88254473229Sdrh    SELECT t3.b, t4.* FROM t3, t4;
88354473229Sdrh  }
88454473229Sdrh} {2 3 4}
88554473229Sdrhdo_test select1-11.8 {
88654473229Sdrh  execsql2 {
88754473229Sdrh    SELECT t3.b, t4.* FROM t3, t4;
88854473229Sdrh  }
88947a6db2bSdrh} {b 4 a 3 b 4}
89054473229Sdrhdo_test select1-11.9 {
89154473229Sdrh  execsql2 {
89254473229Sdrh    SELECT x.b, y.* FROM t3 AS x, t4 AS y;
89354473229Sdrh  }
89447a6db2bSdrh} {b 4 a 3 b 4}
89554473229Sdrhdo_test select1-11.10 {
89654473229Sdrh  catchsql {
89754473229Sdrh    SELECT t5.* FROM t3, t4;
89854473229Sdrh  }
89954473229Sdrh} {1 {no such table: t5}}
90054473229Sdrhdo_test select1-11.11 {
90154473229Sdrh  catchsql {
90254473229Sdrh    SELECT t3.* FROM t3 AS x, t4;
90354473229Sdrh  }
90454473229Sdrh} {1 {no such table: t3}}
9053e8c37e7Sdanielk1977ifcapable subquery {
90654473229Sdrh  do_test select1-11.12 {
90754473229Sdrh    execsql2 {
90854473229Sdrh      SELECT t3.* FROM t3, (SELECT max(a), max(b) FROM t4)
90954473229Sdrh    }
91047a6db2bSdrh  } {a 1 b 2}
91154473229Sdrh  do_test select1-11.13 {
91254473229Sdrh    execsql2 {
91354473229Sdrh      SELECT t3.* FROM (SELECT max(a), max(b) FROM t4), t3
91454473229Sdrh    }
91547a6db2bSdrh  } {a 1 b 2}
91654473229Sdrh  do_test select1-11.14 {
91754473229Sdrh    execsql2 {
918ad2d8307Sdrh      SELECT * FROM t3, (SELECT max(a), max(b) FROM t4) AS 'tx'
91954473229Sdrh    }
92047a6db2bSdrh  } {a 1 b 2 max(a) 3 max(b) 4}
92154473229Sdrh  do_test select1-11.15 {
92254473229Sdrh    execsql2 {
92354473229Sdrh      SELECT y.*, t3.* FROM t3, (SELECT max(a), max(b) FROM t4) AS y
92454473229Sdrh    }
92547a6db2bSdrh  } {max(a) 3 max(b) 4 a 1 b 2}
9263e8c37e7Sdanielk1977}
927c754fa54Sdrhdo_test select1-11.16 {
928c754fa54Sdrh  execsql2 {
929c754fa54Sdrh    SELECT y.* FROM t3 as y, t4 as z
930c754fa54Sdrh  }
93147a6db2bSdrh} {a 1 b 2}
932a2e00042Sdrh
933bf3a4fa4Sdrh# Tests of SELECT statements without a FROM clause.
934bf3a4fa4Sdrh#
935bf3a4fa4Sdrhdo_test select1-12.1 {
936bf3a4fa4Sdrh  execsql2 {
937bf3a4fa4Sdrh    SELECT 1+2+3
938bf3a4fa4Sdrh  }
939bf3a4fa4Sdrh} {1+2+3 6}
940bf3a4fa4Sdrhdo_test select1-12.2 {
941bf3a4fa4Sdrh  execsql2 {
942bf3a4fa4Sdrh    SELECT 1,'hello',2
943bf3a4fa4Sdrh  }
944bf3a4fa4Sdrh} {1 1 'hello' hello 2 2}
945bf3a4fa4Sdrhdo_test select1-12.3 {
946bf3a4fa4Sdrh  execsql2 {
947bf3a4fa4Sdrh    SELECT 1 AS 'a','hello' AS 'b',2 AS 'c'
948bf3a4fa4Sdrh  }
949bf3a4fa4Sdrh} {a 1 b hello c 2}
950bf3a4fa4Sdrhdo_test select1-12.4 {
951bf3a4fa4Sdrh  execsql {
952bf3a4fa4Sdrh    DELETE FROM t3;
953bf3a4fa4Sdrh    INSERT INTO t3 VALUES(1,2);
95427c77438Sdanielk1977  }
95527c77438Sdanielk1977} {}
95627c77438Sdanielk1977
95727c77438Sdanielk1977ifcapable compound {
95827c77438Sdanielk1977do_test select1-12.5 {
95927c77438Sdanielk1977  execsql {
960bf3a4fa4Sdrh    SELECT * FROM t3 UNION SELECT 3 AS 'a', 4 ORDER BY a;
961bf3a4fa4Sdrh  }
962bf3a4fa4Sdrh} {1 2 3 4}
96327c77438Sdanielk1977
96427c77438Sdanielk1977do_test select1-12.6 {
965bf3a4fa4Sdrh  execsql {
966bf3a4fa4Sdrh    SELECT 3, 4 UNION SELECT * FROM t3;
967bf3a4fa4Sdrh  }
968bf3a4fa4Sdrh} {1 2 3 4}
96927c77438Sdanielk1977} ;# ifcapable compound
97027c77438Sdanielk1977
9713e8c37e7Sdanielk1977ifcapable subquery {
97227c77438Sdanielk1977  do_test select1-12.7 {
973bf3a4fa4Sdrh    execsql {
974bf3a4fa4Sdrh      SELECT * FROM t3 WHERE a=(SELECT 1);
975bf3a4fa4Sdrh    }
976bf3a4fa4Sdrh  } {1 2}
97727c77438Sdanielk1977  do_test select1-12.8 {
978bf3a4fa4Sdrh    execsql {
979bf3a4fa4Sdrh      SELECT * FROM t3 WHERE a=(SELECT 2);
980bf3a4fa4Sdrh    }
981bf3a4fa4Sdrh  } {}
9823e8c37e7Sdanielk1977}
98327c77438Sdanielk1977
984e61b9f4fSdanielk1977ifcapable {compound && subquery} {
98527c77438Sdanielk1977  do_test select1-12.9 {
986d5feede1Sdrh    execsql2 {
987d5feede1Sdrh      SELECT x FROM (
98892378253Sdrh        SELECT a AS x, b AS y FROM t3 UNION SELECT a,b FROM t4 ORDER BY a,b
989d5feede1Sdrh      ) ORDER BY x;
990d5feede1Sdrh    }
991d5feede1Sdrh  } {x 1 x 3}
99227c77438Sdanielk1977  do_test select1-12.10 {
993d5feede1Sdrh    execsql2 {
994d5feede1Sdrh      SELECT z.x FROM (
99592378253Sdrh        SELECT a AS x,b AS y FROM t3 UNION SELECT a, b FROM t4 ORDER BY a,b
996d5feede1Sdrh      ) AS 'z' ORDER BY x;
997d5feede1Sdrh    }
99847a6db2bSdrh  } {x 1 x 3}
99927c77438Sdanielk1977} ;# ifcapable compound
1000d5feede1Sdrh
100113a68c3fSdanielk1977
1002327bd592Sdanielk1977# Check for a VDBE stack growth problem that existed at one point.
1003327bd592Sdanielk1977#
10041576cd92Sdanielk1977ifcapable subquery {
1005327bd592Sdanielk1977  do_test select1-13.1 {
1006327bd592Sdanielk1977    execsql {
1007327bd592Sdanielk1977      BEGIN;
1008327bd592Sdanielk1977      create TABLE abc(a, b, c, PRIMARY KEY(a, b));
1009327bd592Sdanielk1977      INSERT INTO abc VALUES(1, 1, 1);
1010327bd592Sdanielk1977    }
1011327bd592Sdanielk1977    for {set i 0} {$i<10} {incr i} {
1012327bd592Sdanielk1977      execsql {
1013327bd592Sdanielk1977        INSERT INTO abc SELECT a+(select max(a) FROM abc),
1014327bd592Sdanielk1977            b+(select max(a) FROM abc), c+(select max(a) FROM abc) FROM abc;
1015327bd592Sdanielk1977      }
1016327bd592Sdanielk1977    }
1017327bd592Sdanielk1977    execsql {COMMIT}
1018327bd592Sdanielk1977
1019327bd592Sdanielk1977    # This used to seg-fault when the problem existed.
1020327bd592Sdanielk1977    execsql {
1021327bd592Sdanielk1977      SELECT count(
1022327bd592Sdanielk1977        (SELECT a FROM abc WHERE a = NULL AND b >= upper.c)
1023327bd592Sdanielk1977      ) FROM abc AS upper;
1024327bd592Sdanielk1977    }
1025327bd592Sdanielk1977  } {0}
10261576cd92Sdanielk1977}
1027327bd592Sdanielk1977
1028a3f06598Sdanielk1977foreach tab [db eval {SELECT name FROM sqlite_master WHERE type = 'table'}] {
1029a3f06598Sdanielk1977  db eval "DROP TABLE $tab"
1030a3f06598Sdanielk1977}
1031f7b9d66fSdanielk1977db close
1032f7b9d66fSdanielk1977sqlite3 db test.db
1033a3f06598Sdanielk1977
1034f7b9d66fSdanielk1977do_test select1-14.1 {
1035f7b9d66fSdanielk1977  execsql {
1036f7b9d66fSdanielk1977    SELECT * FROM sqlite_master WHERE rowid>10;
1037f7b9d66fSdanielk1977    SELECT * FROM sqlite_master WHERE rowid=10;
1038f7b9d66fSdanielk1977    SELECT * FROM sqlite_master WHERE rowid<10;
1039f7b9d66fSdanielk1977    SELECT * FROM sqlite_master WHERE rowid<=10;
1040f7b9d66fSdanielk1977    SELECT * FROM sqlite_master WHERE rowid>=10;
1041f7b9d66fSdanielk1977    SELECT * FROM sqlite_master;
1042f7b9d66fSdanielk1977  }
1043f7b9d66fSdanielk1977} {}
1044f7b9d66fSdanielk1977do_test select1-14.2 {
1045f7b9d66fSdanielk1977  execsql {
1046f7b9d66fSdanielk1977    SELECT 10 IN (SELECT rowid FROM sqlite_master);
1047f7b9d66fSdanielk1977  }
1048f7b9d66fSdanielk1977} {0}
1049f7b9d66fSdanielk1977
105001e61eecSdrhif {[db one {PRAGMA locking_mode}]=="normal"} {
105101e61eecSdrh  # Check that ticket #3771 has been fixed.  This test does not
105201e61eecSdrh  # work with locking_mode=EXCLUSIVE so disable in that case.
1053e1fb65a0Sdanielk1977  #
1054e1fb65a0Sdanielk1977  do_test select1-15.1 {
1055e1fb65a0Sdanielk1977    execsql {
1056e1fb65a0Sdanielk1977      CREATE TABLE t1(a);
1057e1fb65a0Sdanielk1977      CREATE INDEX i1 ON t1(a);
1058e1fb65a0Sdanielk1977      INSERT INTO t1 VALUES(1);
1059e1fb65a0Sdanielk1977      INSERT INTO t1 VALUES(2);
1060e1fb65a0Sdanielk1977      INSERT INTO t1 VALUES(3);
1061e1fb65a0Sdanielk1977    }
1062e1fb65a0Sdanielk1977  } {}
1063e1fb65a0Sdanielk1977  do_test select1-15.2 {
1064e1fb65a0Sdanielk1977    sqlite3 db2 test.db
1065e1fb65a0Sdanielk1977    execsql { DROP INDEX i1 } db2
1066e1fb65a0Sdanielk1977    db2 close
1067e1fb65a0Sdanielk1977  } {}
1068e1fb65a0Sdanielk1977  do_test select1-15.3 {
1069e1fb65a0Sdanielk1977    execsql { SELECT 2 IN (SELECT a FROM t1) }
1070e1fb65a0Sdanielk1977  } {1}
107101e61eecSdrh}
107263296052Sdrh
107363296052Sdrh# Crash bug reported on the mailing list on 2012-02-23
107463296052Sdrh#
107563296052Sdrhdo_test select1-16.1 {
107663296052Sdrh  catchsql {SELECT 1 FROM (SELECT *)}
107763296052Sdrh} {1 {no tables specified}}
1078b8289a8bSdrh
1079b8289a8bSdrh# 2015-04-17:  assertion fix.
1080b8289a8bSdrhdo_catchsql_test select1-16.2 {
1081b8289a8bSdrh  SELECT 1 FROM sqlite_master LIMIT 1,#1;
1082b8289a8bSdrh} {1 {near "#1": syntax error}}
1083e1fb65a0Sdanielk1977
1084375afb8bSdrh# 2019-01-16 Chromium bug 922312
1085375afb8bSdrh# Sorting with a LIMIT clause using SRT_EphemTab and SRT_Table
1086375afb8bSdrh#
1087375afb8bSdrhdo_execsql_test select1-17.1 {
1088375afb8bSdrh  DROP TABLE IF EXISTS t1;
1089375afb8bSdrh  DROP TABLE IF EXISTS t2;
1090375afb8bSdrh  CREATE TABLE t1(x);   INSERT INTO t1 VALUES(1);
1091375afb8bSdrh  CREATE TABLE t2(y,z); INSERT INTO t2 VALUES(2,3);
1092375afb8bSdrh  CREATE INDEX t2y ON t2(y);
1093375afb8bSdrh  SELECT * FROM t1,(SELECT * FROM t2 WHERE y=2 ORDER BY y,z);
1094375afb8bSdrh} {1 2 3}
1095375afb8bSdrhdo_execsql_test select1-17.2 {
1096375afb8bSdrh  SELECT * FROM t1,(SELECT * FROM t2 WHERE y=2 ORDER BY y,z LIMIT 4);
1097375afb8bSdrh} {1 2 3}
1098375afb8bSdrhdo_execsql_test select1-17.3 {
1099375afb8bSdrh  SELECT * FROM t1,(SELECT * FROM t2 WHERE y=2
1100375afb8bSdrh         UNION ALL SELECT * FROM t2 WHERE y=3 ORDER BY y,z LIMIT 4);
1101375afb8bSdrh} {1 2 3}
1102375afb8bSdrh
110300c12a51Sdrh# 2019-07-24 Ticket https://sqlite.org/src/tktview/c52b09c7f38903b1311
110400c12a51Sdrh#
110500c12a51Sdrhdo_execsql_test select1-18.1 {
110600c12a51Sdrh  DROP TABLE IF EXISTS t1;
110700c12a51Sdrh  DROP TABLE IF EXISTS t2;
110800c12a51Sdrh  CREATE TABLE t1(c);
110900c12a51Sdrh  CREATE TABLE t2(x PRIMARY KEY, y);
111000c12a51Sdrh  INSERT INTO t1(c) VALUES(123);
111100c12a51Sdrh  INSERT INTO t2(x) VALUES(123);
111200c12a51Sdrh  SELECT x FROM t2, t1 WHERE x BETWEEN c AND null OR x AND
111300c12a51Sdrh  x IN ((SELECT x FROM (SELECT x FROM t2, t1
111400c12a51Sdrh  WHERE x BETWEEN (SELECT x FROM (SELECT x COLLATE rtrim
111500c12a51Sdrh  FROM t2, t1 WHERE x BETWEEN c AND null
111600c12a51Sdrh  OR x AND x IN (c)), t1 WHERE x BETWEEN c AND null
111700c12a51Sdrh  OR x AND x IN (c)) AND null
111800c12a51Sdrh  OR NOT EXISTS(SELECT -4.81 FROM t1, t2 WHERE x BETWEEN c AND null
111900c12a51Sdrh  OR x AND x IN ((SELECT x FROM (SELECT x FROM t2, t1
112000c12a51Sdrh  WHERE x BETWEEN (SELECT x FROM (SELECT x BETWEEN c AND null
112100c12a51Sdrh  OR x AND x IN (c)), t1 WHERE x BETWEEN c AND null
112200c12a51Sdrh  OR x AND x IN (c)) AND null
112300c12a51Sdrh  OR x AND x IN (c)), t1 WHERE x BETWEEN c AND null
112400c12a51Sdrh  OR x AND x IN (c)))) AND x IN (c)
112500c12a51Sdrh  ), t1 WHERE x BETWEEN c AND null
112600c12a51Sdrh  OR x AND x IN (c)));
112700c12a51Sdrh} {}
112800c12a51Sdrhdo_execsql_test select1-18.2 {
112900c12a51Sdrh  DROP TABLE IF EXISTS t1;
113000c12a51Sdrh  DROP TABLE IF EXISTS t2;
113100c12a51Sdrh  CREATE TABLE t1(c);
113200c12a51Sdrh  CREATE TABLE t2(x PRIMARY KEY, y);
113300c12a51Sdrh  INSERT INTO t1(c) VALUES(123);
113400c12a51Sdrh  INSERT INTO t2(x) VALUES(123);
113500c12a51Sdrh  SELECT x FROM t2, t1 WHERE x BETWEEN c AND (c+1) OR x AND
113600c12a51Sdrh  x IN ((SELECT x FROM (SELECT x FROM t2, t1
113700c12a51Sdrh  WHERE x BETWEEN (SELECT x FROM (SELECT x COLLATE rtrim
113800c12a51Sdrh  FROM t2, t1 WHERE x BETWEEN c AND (c+1)
113900c12a51Sdrh  OR x AND x IN (c)), t1 WHERE x BETWEEN c AND (c+1)
114000c12a51Sdrh  OR x AND x IN (c)) AND (c+1)
114100c12a51Sdrh  OR NOT EXISTS(SELECT -4.81 FROM t1, t2 WHERE x BETWEEN c AND (c+1)
114200c12a51Sdrh  OR x AND x IN ((SELECT x FROM (SELECT x FROM t2, t1
114300c12a51Sdrh  WHERE x BETWEEN (SELECT x FROM (SELECT x BETWEEN c AND (c+1)
114400c12a51Sdrh  OR x AND x IN (c)), t1 WHERE x BETWEEN c AND (c+1)
114500c12a51Sdrh  OR x AND x IN (c)) AND (c+1)
114600c12a51Sdrh  OR x AND x IN (c)), t1 WHERE x BETWEEN c AND (c+1)
114700c12a51Sdrh  OR x AND x IN (c)))) AND x IN (c)
114800c12a51Sdrh  ), t1 WHERE x BETWEEN c AND (c+1)
114900c12a51Sdrh  OR x AND x IN (c)));
115000c12a51Sdrh} {123}
115100c12a51Sdrhdo_execsql_test select1-18.3 {
115200c12a51Sdrh  SELECT 1 FROM t1 WHERE (
115300c12a51Sdrh    SELECT 2 FROM t2 WHERE (
115400c12a51Sdrh      SELECT 3 FROM (
115500c12a51Sdrh        SELECT x FROM t2 WHERE x=c OR x=(SELECT x FROM (VALUES(0)))
115600c12a51Sdrh      ) WHERE x>c OR x=c
115700c12a51Sdrh    )
115800c12a51Sdrh  );
115900c12a51Sdrh} {1}
116000c12a51Sdrhdo_execsql_test select1-18.4 {
116100c12a51Sdrh  SELECT 1 FROM t1, t2 WHERE (
116200c12a51Sdrh    SELECT 3 FROM (
116300c12a51Sdrh      SELECT x FROM t2 WHERE x=c OR x=(SELECT x FROM (VALUES(0)))
116400c12a51Sdrh    ) WHERE x>c OR x=c
116500c12a51Sdrh  );
116600c12a51Sdrh} {1}
116700c12a51Sdrh
116850efa586Sdrh# 2019-12-17 gramfuzz find
116950efa586Sdrh#
1170329eaaf0Sdrhdo_execsql_test select1-19.10 {
117150efa586Sdrh  DROP TABLE IF EXISTS t1;
117250efa586Sdrh  CREATE TABLE t1(x);
117350efa586Sdrh} {}
1174329eaaf0Sdrhdo_catchsql_test select1-19.20 {
117550efa586Sdrh  INSERT INTO t1
117650efa586Sdrh    SELECT 1,2,3,4,5,6,7
117750efa586Sdrh    UNION ALL SELECT 1,2,3,4,5,6,7
117850efa586Sdrh    ORDER BY 1;
117950efa586Sdrh} {1 {table t1 has 1 columns but 7 values were supplied}}
1180329eaaf0Sdrhdo_catchsql_test select1-19.21 {
118150efa586Sdrh  INSERT INTO t1
118250efa586Sdrh    SELECT 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15
118350efa586Sdrh    UNION ALL SELECT 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15
118450efa586Sdrh    ORDER BY 1;
118550efa586Sdrh} {1 {table t1 has 1 columns but 15 values were supplied}}
118650efa586Sdrh
1187fc705da1Sdrh# 2020-01-01 Found by Yongheng's fuzzer
1188fc705da1Sdrh#
1189fc705da1Sdrhreset_db
1190329eaaf0Sdrhdo_execsql_test select1-20.10 {
1191fc705da1Sdrh  CREATE TABLE t1 (
1192fc705da1Sdrh    a INTEGER PRIMARY KEY,
1193fc705da1Sdrh    b AS('Y') UNIQUE
1194fc705da1Sdrh  );
1195fc705da1Sdrh  INSERT INTO t1(a) VALUES (10);
1196fc705da1Sdrh  SELECT * FROM t1 JOIN t1 USING(a,b)
1197fc705da1Sdrh   WHERE ((SELECT t1.a FROM t1 AS x GROUP BY b) AND b=0)
1198fc705da1Sdrh      OR a = 10;
1199fc705da1Sdrh} {10 Y}
1200329eaaf0Sdrhdo_execsql_test select1-20.20 {
120190996885Sdrh  SELECT ifnull(a, max((SELECT 123))), count(a) FROM t1 ;
120290996885Sdrh} {10 1}
120350efa586Sdrh
12049bb612f2Sdrh# 2020-10-02 dbsqlfuzz find
12059bb612f2Sdrhreset_db
1206329eaaf0Sdrhdo_execsql_test select1-21.1 {
12079bb612f2Sdrh  CREATE TABLE t1(a IMTEGES PRIMARY KEY,R);
12089bb612f2Sdrh  CREATE TABLE t2(x UNIQUE);
12099bb612f2Sdrh  CREATE VIEW v1a(z,y) AS SELECT x IS NULL, x FROM t2;
12109bb612f2Sdrh  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;
12119bb612f2Sdrh} {}
12129bb612f2Sdrh
12133aadb2e6Sdrhfinish_test
1214