xref: /illumos-gate/usr/src/lib/libsqlite/test/select1.test (revision 1da57d551424de5a9d469760be7c4b4d4f10a755)
1*1da57d55SToomas Soome#
2c5c4113dSnw141292# 2001 September 15
3c5c4113dSnw141292#
4c5c4113dSnw141292# The author disclaims copyright to this source code.  In place of
5c5c4113dSnw141292# a legal notice, here is a blessing:
6c5c4113dSnw141292#
7c5c4113dSnw141292#    May you do good and not evil.
8c5c4113dSnw141292#    May you find forgiveness for yourself and forgive others.
9c5c4113dSnw141292#    May you share freely, never taking more than you give.
10c5c4113dSnw141292#
11c5c4113dSnw141292#***********************************************************************
12c5c4113dSnw141292# This file implements regression tests for SQLite library.  The
13c5c4113dSnw141292# focus of this file is testing the SELECT statement.
14c5c4113dSnw141292#
15c5c4113dSnw141292# $Id: select1.test,v 1.30.2.3 2004/07/20 01:45:49 drh Exp $
16c5c4113dSnw141292
17c5c4113dSnw141292set testdir [file dirname $argv0]
18c5c4113dSnw141292source $testdir/tester.tcl
19c5c4113dSnw141292
20c5c4113dSnw141292# Try to select on a non-existant table.
21c5c4113dSnw141292#
22c5c4113dSnw141292do_test select1-1.1 {
23c5c4113dSnw141292  set v [catch {execsql {SELECT * FROM test1}} msg]
24c5c4113dSnw141292  lappend v $msg
25c5c4113dSnw141292} {1 {no such table: test1}}
26c5c4113dSnw141292
27c5c4113dSnw141292execsql {CREATE TABLE test1(f1 int, f2 int)}
28c5c4113dSnw141292
29c5c4113dSnw141292do_test select1-1.2 {
30c5c4113dSnw141292  set v [catch {execsql {SELECT * FROM test1, test2}} msg]
31c5c4113dSnw141292  lappend v $msg
32c5c4113dSnw141292} {1 {no such table: test2}}
33c5c4113dSnw141292do_test select1-1.3 {
34c5c4113dSnw141292  set v [catch {execsql {SELECT * FROM test2, test1}} msg]
35c5c4113dSnw141292  lappend v $msg
36c5c4113dSnw141292} {1 {no such table: test2}}
37c5c4113dSnw141292
38c5c4113dSnw141292execsql {INSERT INTO test1(f1,f2) VALUES(11,22)}
39c5c4113dSnw141292
40c5c4113dSnw141292
41c5c4113dSnw141292# Make sure the columns are extracted correctly.
42c5c4113dSnw141292#
43c5c4113dSnw141292do_test select1-1.4 {
44c5c4113dSnw141292  execsql {SELECT f1 FROM test1}
45c5c4113dSnw141292} {11}
46c5c4113dSnw141292do_test select1-1.5 {
47c5c4113dSnw141292  execsql {SELECT f2 FROM test1}
48c5c4113dSnw141292} {22}
49c5c4113dSnw141292do_test select1-1.6 {
50c5c4113dSnw141292  execsql {SELECT f2, f1 FROM test1}
51c5c4113dSnw141292} {22 11}
52c5c4113dSnw141292do_test select1-1.7 {
53c5c4113dSnw141292  execsql {SELECT f1, f2 FROM test1}
54c5c4113dSnw141292} {11 22}
55c5c4113dSnw141292do_test select1-1.8 {
56c5c4113dSnw141292  execsql {SELECT * FROM test1}
57c5c4113dSnw141292} {11 22}
58c5c4113dSnw141292do_test select1-1.8.1 {
59c5c4113dSnw141292  execsql {SELECT *, * FROM test1}
60c5c4113dSnw141292} {11 22 11 22}
61c5c4113dSnw141292do_test select1-1.8.2 {
62c5c4113dSnw141292  execsql {SELECT *, min(f1,f2), max(f1,f2) FROM test1}
63c5c4113dSnw141292} {11 22 11 22}
64c5c4113dSnw141292do_test select1-1.8.3 {
65c5c4113dSnw141292  execsql {SELECT 'one', *, 'two', * FROM test1}
66c5c4113dSnw141292} {one 11 22 two 11 22}
67c5c4113dSnw141292
68c5c4113dSnw141292execsql {CREATE TABLE test2(r1 real, r2 real)}
69c5c4113dSnw141292execsql {INSERT INTO test2(r1,r2) VALUES(1.1,2.2)}
70c5c4113dSnw141292
71c5c4113dSnw141292do_test select1-1.9 {
72c5c4113dSnw141292  execsql {SELECT * FROM test1, test2}
73c5c4113dSnw141292} {11 22 1.1 2.2}
74c5c4113dSnw141292do_test select1-1.9.1 {
75c5c4113dSnw141292  execsql {SELECT *, 'hi' FROM test1, test2}
76c5c4113dSnw141292} {11 22 1.1 2.2 hi}
77c5c4113dSnw141292do_test select1-1.9.2 {
78c5c4113dSnw141292  execsql {SELECT 'one', *, 'two', * FROM test1, test2}
79c5c4113dSnw141292} {one 11 22 1.1 2.2 two 11 22 1.1 2.2}
80c5c4113dSnw141292do_test select1-1.10 {
81c5c4113dSnw141292  execsql {SELECT test1.f1, test2.r1 FROM test1, test2}
82c5c4113dSnw141292} {11 1.1}
83c5c4113dSnw141292do_test select1-1.11 {
84c5c4113dSnw141292  execsql {SELECT test1.f1, test2.r1 FROM test2, test1}
85c5c4113dSnw141292} {11 1.1}
86c5c4113dSnw141292do_test select1-1.11.1 {
87c5c4113dSnw141292  execsql {SELECT * FROM test2, test1}
88c5c4113dSnw141292} {1.1 2.2 11 22}
89c5c4113dSnw141292do_test select1-1.11.2 {
90c5c4113dSnw141292  execsql {SELECT * FROM test1 AS a, test1 AS b}
91c5c4113dSnw141292} {11 22 11 22}
92c5c4113dSnw141292do_test select1-1.12 {
93c5c4113dSnw141292  execsql {SELECT max(test1.f1,test2.r1), min(test1.f2,test2.r2)
94c5c4113dSnw141292           FROM test2, test1}
95c5c4113dSnw141292} {11 2.2}
96c5c4113dSnw141292do_test select1-1.13 {
97c5c4113dSnw141292  execsql {SELECT min(test1.f1,test2.r1), max(test1.f2,test2.r2)
98c5c4113dSnw141292           FROM test1, test2}
99c5c4113dSnw141292} {1.1 22}
100c5c4113dSnw141292
101c5c4113dSnw141292set long {This is a string that is too big to fit inside a NBFS buffer}
102c5c4113dSnw141292do_test select1-2.0 {
103c5c4113dSnw141292  execsql "
104c5c4113dSnw141292    DROP TABLE test2;
105c5c4113dSnw141292    DELETE FROM test1;
106c5c4113dSnw141292    INSERT INTO test1 VALUES(11,22);
107c5c4113dSnw141292    INSERT INTO test1 VALUES(33,44);
108c5c4113dSnw141292    CREATE TABLE t3(a,b);
109c5c4113dSnw141292    INSERT INTO t3 VALUES('abc',NULL);
110c5c4113dSnw141292    INSERT INTO t3 VALUES(NULL,'xyz');
111c5c4113dSnw141292    INSERT INTO t3 SELECT * FROM test1;
112c5c4113dSnw141292    CREATE TABLE t4(a,b);
113c5c4113dSnw141292    INSERT INTO t4 VALUES(NULL,'$long');
114c5c4113dSnw141292    SELECT * FROM t3;
115c5c4113dSnw141292  "
116c5c4113dSnw141292} {abc {} {} xyz 11 22 33 44}
117c5c4113dSnw141292
118c5c4113dSnw141292# Error messges from sqliteExprCheck
119c5c4113dSnw141292#
120c5c4113dSnw141292do_test select1-2.1 {
121c5c4113dSnw141292  set v [catch {execsql {SELECT count(f1,f2) FROM test1}} msg]
122c5c4113dSnw141292  lappend v $msg
123c5c4113dSnw141292} {1 {wrong number of arguments to function count()}}
124c5c4113dSnw141292do_test select1-2.2 {
125c5c4113dSnw141292  set v [catch {execsql {SELECT count(f1) FROM test1}} msg]
126c5c4113dSnw141292  lappend v $msg
127c5c4113dSnw141292} {0 2}
128c5c4113dSnw141292do_test select1-2.3 {
129c5c4113dSnw141292  set v [catch {execsql {SELECT Count() FROM test1}} msg]
130c5c4113dSnw141292  lappend v $msg
131c5c4113dSnw141292} {0 2}
132c5c4113dSnw141292do_test select1-2.4 {
133c5c4113dSnw141292  set v [catch {execsql {SELECT COUNT(*) FROM test1}} msg]
134c5c4113dSnw141292  lappend v $msg
135c5c4113dSnw141292} {0 2}
136c5c4113dSnw141292do_test select1-2.5 {
137c5c4113dSnw141292  set v [catch {execsql {SELECT COUNT(*)+1 FROM test1}} msg]
138c5c4113dSnw141292  lappend v $msg
139c5c4113dSnw141292} {0 3}
140c5c4113dSnw141292do_test select1-2.5.1 {
141c5c4113dSnw141292  execsql {SELECT count(*),count(a),count(b) FROM t3}
142c5c4113dSnw141292} {4 3 3}
143c5c4113dSnw141292do_test select1-2.5.2 {
144c5c4113dSnw141292  execsql {SELECT count(*),count(a),count(b) FROM t4}
145c5c4113dSnw141292} {1 0 1}
146c5c4113dSnw141292do_test select1-2.5.3 {
147c5c4113dSnw141292  execsql {SELECT count(*),count(a),count(b) FROM t4 WHERE b=5}
148c5c4113dSnw141292} {0 0 0}
149c5c4113dSnw141292do_test select1-2.6 {
150c5c4113dSnw141292  set v [catch {execsql {SELECT min(*) FROM test1}} msg]
151c5c4113dSnw141292  lappend v $msg
152c5c4113dSnw141292} {1 {wrong number of arguments to function min()}}
153c5c4113dSnw141292do_test select1-2.7 {
154c5c4113dSnw141292  set v [catch {execsql {SELECT Min(f1) FROM test1}} msg]
155c5c4113dSnw141292  lappend v $msg
156c5c4113dSnw141292} {0 11}
157c5c4113dSnw141292do_test select1-2.8 {
158c5c4113dSnw141292  set v [catch {execsql {SELECT MIN(f1,f2) FROM test1}} msg]
159c5c4113dSnw141292  lappend v [lsort $msg]
160c5c4113dSnw141292} {0 {11 33}}
161c5c4113dSnw141292do_test select1-2.8.1 {
162c5c4113dSnw141292  execsql {SELECT coalesce(min(a),'xyzzy') FROM t3}
163c5c4113dSnw141292} {11}
164c5c4113dSnw141292do_test select1-2.8.2 {
165c5c4113dSnw141292  execsql {SELECT min(coalesce(a,'xyzzy')) FROM t3}
166c5c4113dSnw141292} {11}
167c5c4113dSnw141292do_test select1-2.8.3 {
168c5c4113dSnw141292  execsql {SELECT min(b), min(b) FROM t4}
169c5c4113dSnw141292} [list $long $long]
170c5c4113dSnw141292do_test select1-2.9 {
171c5c4113dSnw141292  set v [catch {execsql {SELECT MAX(*) FROM test1}} msg]
172c5c4113dSnw141292  lappend v $msg
173c5c4113dSnw141292} {1 {wrong number of arguments to function MAX()}}
174c5c4113dSnw141292do_test select1-2.10 {
175c5c4113dSnw141292  set v [catch {execsql {SELECT Max(f1) FROM test1}} msg]
176c5c4113dSnw141292  lappend v $msg
177c5c4113dSnw141292} {0 33}
178c5c4113dSnw141292do_test select1-2.11 {
179c5c4113dSnw141292  set v [catch {execsql {SELECT max(f1,f2) FROM test1}} msg]
180c5c4113dSnw141292  lappend v [lsort $msg]
181c5c4113dSnw141292} {0 {22 44}}
182c5c4113dSnw141292do_test select1-2.12 {
183c5c4113dSnw141292  set v [catch {execsql {SELECT MAX(f1,f2)+1 FROM test1}} msg]
184c5c4113dSnw141292  lappend v [lsort $msg]
185c5c4113dSnw141292} {0 {23 45}}
186c5c4113dSnw141292do_test select1-2.13 {
187c5c4113dSnw141292  set v [catch {execsql {SELECT MAX(f1)+1 FROM test1}} msg]
188c5c4113dSnw141292  lappend v $msg
189c5c4113dSnw141292} {0 34}
190c5c4113dSnw141292do_test select1-2.13.1 {
191c5c4113dSnw141292  execsql {SELECT coalesce(max(a),'xyzzy') FROM t3}
192c5c4113dSnw141292} {abc}
193c5c4113dSnw141292do_test select1-2.13.2 {
194c5c4113dSnw141292  execsql {SELECT max(coalesce(a,'xyzzy')) FROM t3}
195c5c4113dSnw141292} {xyzzy}
196c5c4113dSnw141292do_test select1-2.14 {
197c5c4113dSnw141292  set v [catch {execsql {SELECT SUM(*) FROM test1}} msg]
198c5c4113dSnw141292  lappend v $msg
199c5c4113dSnw141292} {1 {wrong number of arguments to function SUM()}}
200c5c4113dSnw141292do_test select1-2.15 {
201c5c4113dSnw141292  set v [catch {execsql {SELECT Sum(f1) FROM test1}} msg]
202c5c4113dSnw141292  lappend v $msg
203c5c4113dSnw141292} {0 44}
204c5c4113dSnw141292do_test select1-2.16 {
205c5c4113dSnw141292  set v [catch {execsql {SELECT sum(f1,f2) FROM test1}} msg]
206c5c4113dSnw141292  lappend v $msg
207c5c4113dSnw141292} {1 {wrong number of arguments to function sum()}}
208c5c4113dSnw141292do_test select1-2.17 {
209c5c4113dSnw141292  set v [catch {execsql {SELECT SUM(f1)+1 FROM test1}} msg]
210c5c4113dSnw141292  lappend v $msg
211c5c4113dSnw141292} {0 45}
212c5c4113dSnw141292do_test select1-2.17.1 {
213c5c4113dSnw141292  execsql {SELECT sum(a) FROM t3}
214c5c4113dSnw141292} {44}
215c5c4113dSnw141292do_test select1-2.18 {
216c5c4113dSnw141292  set v [catch {execsql {SELECT XYZZY(f1) FROM test1}} msg]
217c5c4113dSnw141292  lappend v $msg
218c5c4113dSnw141292} {1 {no such function: XYZZY}}
219c5c4113dSnw141292do_test select1-2.19 {
220c5c4113dSnw141292  set v [catch {execsql {SELECT SUM(min(f1,f2)) FROM test1}} msg]
221c5c4113dSnw141292  lappend v $msg
222c5c4113dSnw141292} {0 44}
223c5c4113dSnw141292do_test select1-2.20 {
224c5c4113dSnw141292  set v [catch {execsql {SELECT SUM(min(f1)) FROM test1}} msg]
225c5c4113dSnw141292  lappend v $msg
226c5c4113dSnw141292} {1 {misuse of aggregate function min()}}
227c5c4113dSnw141292
228c5c4113dSnw141292# WHERE clause expressions
229c5c4113dSnw141292#
230c5c4113dSnw141292do_test select1-3.1 {
231c5c4113dSnw141292  set v [catch {execsql {SELECT f1 FROM test1 WHERE f1<11}} msg]
232c5c4113dSnw141292  lappend v $msg
233c5c4113dSnw141292} {0 {}}
234c5c4113dSnw141292do_test select1-3.2 {
235c5c4113dSnw141292  set v [catch {execsql {SELECT f1 FROM test1 WHERE f1<=11}} msg]
236c5c4113dSnw141292  lappend v $msg
237c5c4113dSnw141292} {0 11}
238c5c4113dSnw141292do_test select1-3.3 {
239c5c4113dSnw141292  set v [catch {execsql {SELECT f1 FROM test1 WHERE f1=11}} msg]
240c5c4113dSnw141292  lappend v $msg
241c5c4113dSnw141292} {0 11}
242c5c4113dSnw141292do_test select1-3.4 {
243c5c4113dSnw141292  set v [catch {execsql {SELECT f1 FROM test1 WHERE f1>=11}} msg]
244c5c4113dSnw141292  lappend v [lsort $msg]
245c5c4113dSnw141292} {0 {11 33}}
246c5c4113dSnw141292do_test select1-3.5 {
247c5c4113dSnw141292  set v [catch {execsql {SELECT f1 FROM test1 WHERE f1>11}} msg]
248c5c4113dSnw141292  lappend v [lsort $msg]
249c5c4113dSnw141292} {0 33}
250c5c4113dSnw141292do_test select1-3.6 {
251c5c4113dSnw141292  set v [catch {execsql {SELECT f1 FROM test1 WHERE f1!=11}} msg]
252c5c4113dSnw141292  lappend v [lsort $msg]
253c5c4113dSnw141292} {0 33}
254c5c4113dSnw141292do_test select1-3.7 {
255c5c4113dSnw141292  set v [catch {execsql {SELECT f1 FROM test1 WHERE min(f1,f2)!=11}} msg]
256c5c4113dSnw141292  lappend v [lsort $msg]
257c5c4113dSnw141292} {0 33}
258c5c4113dSnw141292do_test select1-3.8 {
259c5c4113dSnw141292  set v [catch {execsql {SELECT f1 FROM test1 WHERE max(f1,f2)!=11}} msg]
260c5c4113dSnw141292  lappend v [lsort $msg]
261c5c4113dSnw141292} {0 {11 33}}
262c5c4113dSnw141292do_test select1-3.9 {
263c5c4113dSnw141292  set v [catch {execsql {SELECT f1 FROM test1 WHERE count(f1,f2)!=11}} msg]
264c5c4113dSnw141292  lappend v $msg
265c5c4113dSnw141292} {1 {wrong number of arguments to function count()}}
266c5c4113dSnw141292
267c5c4113dSnw141292# ORDER BY expressions
268c5c4113dSnw141292#
269c5c4113dSnw141292do_test select1-4.1 {
270c5c4113dSnw141292  set v [catch {execsql {SELECT f1 FROM test1 ORDER BY f1}} msg]
271c5c4113dSnw141292  lappend v $msg
272c5c4113dSnw141292} {0 {11 33}}
273c5c4113dSnw141292do_test select1-4.2 {
274c5c4113dSnw141292  set v [catch {execsql {SELECT f1 FROM test1 ORDER BY -f1}} msg]
275c5c4113dSnw141292  lappend v $msg
276c5c4113dSnw141292} {0 {33 11}}
277c5c4113dSnw141292do_test select1-4.3 {
278c5c4113dSnw141292  set v [catch {execsql {SELECT f1 FROM test1 ORDER BY min(f1,f2)}} msg]
279c5c4113dSnw141292  lappend v $msg
280c5c4113dSnw141292} {0 {11 33}}
281c5c4113dSnw141292do_test select1-4.4 {
282c5c4113dSnw141292  set v [catch {execsql {SELECT f1 FROM test1 ORDER BY min(f1)}} msg]
283c5c4113dSnw141292  lappend v $msg
284c5c4113dSnw141292} {1 {misuse of aggregate function min()}}
285c5c4113dSnw141292do_test select1-4.5 {
286c5c4113dSnw141292  catchsql {
287c5c4113dSnw141292    SELECT f1 FROM test1 ORDER BY 8.4;
288c5c4113dSnw141292  }
289c5c4113dSnw141292} {1 {ORDER BY terms must not be non-integer constants}}
290c5c4113dSnw141292do_test select1-4.6 {
291c5c4113dSnw141292  catchsql {
292c5c4113dSnw141292    SELECT f1 FROM test1 ORDER BY '8.4';
293c5c4113dSnw141292  }
294c5c4113dSnw141292} {1 {ORDER BY terms must not be non-integer constants}}
295c5c4113dSnw141292do_test select1-4.7 {
296c5c4113dSnw141292  catchsql {
297c5c4113dSnw141292    SELECT f1 FROM test1 ORDER BY 'xyz';
298c5c4113dSnw141292  }
299c5c4113dSnw141292} {1 {ORDER BY terms must not be non-integer constants}}
300c5c4113dSnw141292do_test select1-4.8 {
301c5c4113dSnw141292  execsql {
302c5c4113dSnw141292    CREATE TABLE t5(a,b);
303c5c4113dSnw141292    INSERT INTO t5 VALUES(1,10);
304c5c4113dSnw141292    INSERT INTO t5 VALUES(2,9);
305c5c4113dSnw141292    SELECT * FROM t5 ORDER BY 1;
306c5c4113dSnw141292  }
307c5c4113dSnw141292} {1 10 2 9}
308c5c4113dSnw141292do_test select1-4.9 {
309c5c4113dSnw141292  execsql {
310c5c4113dSnw141292    SELECT * FROM t5 ORDER BY 2;
311c5c4113dSnw141292  }
312c5c4113dSnw141292} {2 9 1 10}
313c5c4113dSnw141292do_test select1-4.10 {
314c5c4113dSnw141292  catchsql {
315c5c4113dSnw141292    SELECT * FROM t5 ORDER BY 3;
316c5c4113dSnw141292  }
317c5c4113dSnw141292} {1 {ORDER BY column number 3 out of range - should be between 1 and 2}}
318c5c4113dSnw141292do_test select1-4.11 {
319c5c4113dSnw141292  execsql {
320c5c4113dSnw141292    INSERT INTO t5 VALUES(3,10);
321c5c4113dSnw141292    SELECT * FROM t5 ORDER BY 2, 1 DESC;
322c5c4113dSnw141292  }
323c5c4113dSnw141292} {2 9 3 10 1 10}
324c5c4113dSnw141292do_test select1-4.12 {
325c5c4113dSnw141292  execsql {
326c5c4113dSnw141292    SELECT * FROM t5 ORDER BY 1 DESC, b;
327c5c4113dSnw141292  }
328c5c4113dSnw141292} {3 10 2 9 1 10}
329c5c4113dSnw141292do_test select1-4.13 {
330c5c4113dSnw141292  execsql {
331c5c4113dSnw141292    SELECT * FROM t5 ORDER BY b DESC, 1;
332c5c4113dSnw141292  }
333c5c4113dSnw141292} {1 10 3 10 2 9}
334c5c4113dSnw141292
335c5c4113dSnw141292
336c5c4113dSnw141292# ORDER BY ignored on an aggregate query
337c5c4113dSnw141292#
338c5c4113dSnw141292do_test select1-5.1 {
339c5c4113dSnw141292  set v [catch {execsql {SELECT max(f1) FROM test1 ORDER BY f2}} msg]
340c5c4113dSnw141292  lappend v $msg
341c5c4113dSnw141292} {0 33}
342c5c4113dSnw141292
343c5c4113dSnw141292execsql {CREATE TABLE test2(t1 test, t2 text)}
344c5c4113dSnw141292execsql {INSERT INTO test2 VALUES('abc','xyz')}
345c5c4113dSnw141292
346c5c4113dSnw141292# Check for column naming
347c5c4113dSnw141292#
348c5c4113dSnw141292do_test select1-6.1 {
349c5c4113dSnw141292  set v [catch {execsql2 {SELECT f1 FROM test1 ORDER BY f2}} msg]
350c5c4113dSnw141292  lappend v $msg
351c5c4113dSnw141292} {0 {f1 11 f1 33}}
352c5c4113dSnw141292do_test select1-6.1.1 {
353c5c4113dSnw141292  execsql {PRAGMA full_column_names=on}
354c5c4113dSnw141292  set v [catch {execsql2 {SELECT f1 FROM test1 ORDER BY f2}} msg]
355c5c4113dSnw141292  lappend v $msg
356c5c4113dSnw141292} {0 {test1.f1 11 test1.f1 33}}
357c5c4113dSnw141292do_test select1-6.1.2 {
358c5c4113dSnw141292  set v [catch {execsql2 {SELECT f1 as 'f1' FROM test1 ORDER BY f2}} msg]
359c5c4113dSnw141292  lappend v $msg
360c5c4113dSnw141292} {0 {f1 11 f1 33}}
361c5c4113dSnw141292do_test select1-6.1.3 {
362c5c4113dSnw141292  set v [catch {execsql2 {SELECT * FROM test1 WHERE f1==11}} msg]
363c5c4113dSnw141292  lappend v $msg
364c5c4113dSnw141292} {0 {test1.f1 11 test1.f2 22}}
365c5c4113dSnw141292do_test select1-6.1.4 {
366c5c4113dSnw141292  set v [catch {execsql2 {SELECT DISTINCT * FROM test1 WHERE f1==11}} msg]
367c5c4113dSnw141292  execsql {PRAGMA full_column_names=off}
368c5c4113dSnw141292  lappend v $msg
369c5c4113dSnw141292} {0 {test1.f1 11 test1.f2 22}}
370c5c4113dSnw141292do_test select1-6.1.5 {
371c5c4113dSnw141292  set v [catch {execsql2 {SELECT * FROM test1 WHERE f1==11}} msg]
372c5c4113dSnw141292  lappend v $msg
373c5c4113dSnw141292} {0 {f1 11 f2 22}}
374c5c4113dSnw141292do_test select1-6.1.6 {
375c5c4113dSnw141292  set v [catch {execsql2 {SELECT DISTINCT * FROM test1 WHERE f1==11}} msg]
376c5c4113dSnw141292  lappend v $msg
377c5c4113dSnw141292} {0 {f1 11 f2 22}}
378c5c4113dSnw141292do_test select1-6.2 {
379c5c4113dSnw141292  set v [catch {execsql2 {SELECT f1 as xyzzy FROM test1 ORDER BY f2}} msg]
380c5c4113dSnw141292  lappend v $msg
381c5c4113dSnw141292} {0 {xyzzy 11 xyzzy 33}}
382c5c4113dSnw141292do_test select1-6.3 {
383c5c4113dSnw141292  set v [catch {execsql2 {SELECT f1 as "xyzzy" FROM test1 ORDER BY f2}} msg]
384c5c4113dSnw141292  lappend v $msg
385c5c4113dSnw141292} {0 {xyzzy 11 xyzzy 33}}
386c5c4113dSnw141292do_test select1-6.3.1 {
387c5c4113dSnw141292  set v [catch {execsql2 {SELECT f1 as 'xyzzy ' FROM test1 ORDER BY f2}} msg]
388c5c4113dSnw141292  lappend v $msg
389c5c4113dSnw141292} {0 {{xyzzy } 11 {xyzzy } 33}}
390c5c4113dSnw141292do_test select1-6.4 {
391c5c4113dSnw141292  set v [catch {execsql2 {SELECT f1+F2 as xyzzy FROM test1 ORDER BY f2}} msg]
392c5c4113dSnw141292  lappend v $msg
393c5c4113dSnw141292} {0 {xyzzy 33 xyzzy 77}}
394c5c4113dSnw141292do_test select1-6.4a {
395c5c4113dSnw141292  set v [catch {execsql2 {SELECT f1+F2 FROM test1 ORDER BY f2}} msg]
396c5c4113dSnw141292  lappend v $msg
397c5c4113dSnw141292} {0 {f1+F2 33 f1+F2 77}}
398c5c4113dSnw141292do_test select1-6.5 {
399c5c4113dSnw141292  set v [catch {execsql2 {SELECT test1.f1+F2 FROM test1 ORDER BY f2}} msg]
400c5c4113dSnw141292  lappend v $msg
401c5c4113dSnw141292} {0 {test1.f1+F2 33 test1.f1+F2 77}}
402c5c4113dSnw141292do_test select1-6.5.1 {
403c5c4113dSnw141292  execsql2 {PRAGMA full_column_names=on}
404c5c4113dSnw141292  set v [catch {execsql2 {SELECT test1.f1+F2 FROM test1 ORDER BY f2}} msg]
405c5c4113dSnw141292  execsql2 {PRAGMA full_column_names=off}
406c5c4113dSnw141292  lappend v $msg
407c5c4113dSnw141292} {0 {test1.f1+F2 33 test1.f1+F2 77}}
408c5c4113dSnw141292do_test select1-6.6 {
409c5c4113dSnw141292  set v [catch {execsql2 {SELECT test1.f1+F2, t1 FROM test1, test2
410c5c4113dSnw141292         ORDER BY f2}} msg]
411c5c4113dSnw141292  lappend v $msg
412c5c4113dSnw141292} {0 {test1.f1+F2 33 t1 abc test1.f1+F2 77 t1 abc}}
413c5c4113dSnw141292do_test select1-6.7 {
414c5c4113dSnw141292  set v [catch {execsql2 {SELECT A.f1, t1 FROM test1 as A, test2
415c5c4113dSnw141292         ORDER BY f2}} msg]
416c5c4113dSnw141292  lappend v $msg
417c5c4113dSnw141292} {0 {A.f1 11 t1 abc A.f1 33 t1 abc}}
418c5c4113dSnw141292do_test select1-6.8 {
419c5c4113dSnw141292  set v [catch {execsql2 {SELECT A.f1, f1 FROM test1 as A, test1 as B
420c5c4113dSnw141292         ORDER BY f2}} msg]
421c5c4113dSnw141292  lappend v $msg
422c5c4113dSnw141292} {1 {ambiguous column name: f1}}
423c5c4113dSnw141292do_test select1-6.8b {
424c5c4113dSnw141292  set v [catch {execsql2 {SELECT A.f1, B.f1 FROM test1 as A, test1 as B
425c5c4113dSnw141292         ORDER BY f2}} msg]
426c5c4113dSnw141292  lappend v $msg
427c5c4113dSnw141292} {1 {ambiguous column name: f2}}
428c5c4113dSnw141292do_test select1-6.8c {
429c5c4113dSnw141292  set v [catch {execsql2 {SELECT A.f1, f1 FROM test1 as A, test1 as A
430c5c4113dSnw141292         ORDER BY f2}} msg]
431c5c4113dSnw141292  lappend v $msg
432c5c4113dSnw141292} {1 {ambiguous column name: A.f1}}
433c5c4113dSnw141292do_test select1-6.9 {
434c5c4113dSnw141292  set v [catch {execsql2 {SELECT A.f1, B.f1 FROM test1 as A, test1 as B
435c5c4113dSnw141292         ORDER BY A.f1, B.f1}} msg]
436c5c4113dSnw141292  lappend v $msg
437c5c4113dSnw141292} {0 {A.f1 11 B.f1 11 A.f1 11 B.f1 33 A.f1 33 B.f1 11 A.f1 33 B.f1 33}}
438c5c4113dSnw141292do_test select1-6.10 {
439c5c4113dSnw141292  set v [catch {execsql2 {
440c5c4113dSnw141292    SELECT f1 FROM test1 UNION SELECT f2 FROM test1
441c5c4113dSnw141292    ORDER BY f2;
442c5c4113dSnw141292  }} msg]
443c5c4113dSnw141292  lappend v $msg
444c5c4113dSnw141292} {0 {f2 11 f2 22 f2 33 f2 44}}
445c5c4113dSnw141292do_test select1-6.11 {
446c5c4113dSnw141292  set v [catch {execsql2 {
447c5c4113dSnw141292    SELECT f1 FROM test1 UNION SELECT f2+100 FROM test1
448c5c4113dSnw141292    ORDER BY f2+100;
449c5c4113dSnw141292  }} msg]
450c5c4113dSnw141292  lappend v $msg
451c5c4113dSnw141292} {0 {f2+100 11 f2+100 33 f2+100 122 f2+100 144}}
452c5c4113dSnw141292
453c5c4113dSnw141292do_test select1-7.1 {
454c5c4113dSnw141292  set v [catch {execsql {
455c5c4113dSnw141292     SELECT f1 FROM test1 WHERE f2=;
456c5c4113dSnw141292  }} msg]
457c5c4113dSnw141292  lappend v $msg
458c5c4113dSnw141292} {1 {near ";": syntax error}}
459c5c4113dSnw141292do_test select1-7.2 {
460c5c4113dSnw141292  set v [catch {execsql {
461c5c4113dSnw141292     SELECT f1 FROM test1 UNION SELECT WHERE;
462c5c4113dSnw141292  }} msg]
463c5c4113dSnw141292  lappend v $msg
464c5c4113dSnw141292} {1 {near "WHERE": syntax error}}
465c5c4113dSnw141292do_test select1-7.3 {
466c5c4113dSnw141292  set v [catch {execsql {SELECT f1 FROM test1 as 'hi', test2 as}} msg]
467c5c4113dSnw141292  lappend v $msg
468c5c4113dSnw141292} {1 {near "as": syntax error}}
469c5c4113dSnw141292do_test select1-7.4 {
470c5c4113dSnw141292  set v [catch {execsql {
471c5c4113dSnw141292     SELECT f1 FROM test1 ORDER BY;
472c5c4113dSnw141292  }} msg]
473c5c4113dSnw141292  lappend v $msg
474c5c4113dSnw141292} {1 {near ";": syntax error}}
475c5c4113dSnw141292do_test select1-7.5 {
476c5c4113dSnw141292  set v [catch {execsql {
477c5c4113dSnw141292     SELECT f1 FROM test1 ORDER BY f1 desc, f2 where;
478c5c4113dSnw141292  }} msg]
479c5c4113dSnw141292  lappend v $msg
480c5c4113dSnw141292} {1 {near "where": syntax error}}
481c5c4113dSnw141292do_test select1-7.6 {
482c5c4113dSnw141292  set v [catch {execsql {
483c5c4113dSnw141292     SELECT count(f1,f2 FROM test1;
484c5c4113dSnw141292  }} msg]
485c5c4113dSnw141292  lappend v $msg
486c5c4113dSnw141292} {1 {near "FROM": syntax error}}
487c5c4113dSnw141292do_test select1-7.7 {
488c5c4113dSnw141292  set v [catch {execsql {
489c5c4113dSnw141292     SELECT count(f1,f2+) FROM test1;
490c5c4113dSnw141292  }} msg]
491c5c4113dSnw141292  lappend v $msg
492c5c4113dSnw141292} {1 {near ")": syntax error}}
493c5c4113dSnw141292do_test select1-7.8 {
494c5c4113dSnw141292  set v [catch {execsql {
495c5c4113dSnw141292     SELECT f1 FROM test1 ORDER BY f2, f1+;
496c5c4113dSnw141292  }} msg]
497c5c4113dSnw141292  lappend v $msg
498c5c4113dSnw141292} {1 {near ";": syntax error}}
499c5c4113dSnw141292
500c5c4113dSnw141292do_test select1-8.1 {
501c5c4113dSnw141292  execsql {SELECT f1 FROM test1 WHERE 4.3+2.4 OR 1 ORDER BY f1}
502c5c4113dSnw141292} {11 33}
503c5c4113dSnw141292do_test select1-8.2 {
504c5c4113dSnw141292  execsql {
505c5c4113dSnw141292    SELECT f1 FROM test1 WHERE ('x' || f1) BETWEEN 'x10' AND 'x20'
506c5c4113dSnw141292    ORDER BY f1
507c5c4113dSnw141292  }
508c5c4113dSnw141292} {11}
509c5c4113dSnw141292do_test select1-8.3 {
510c5c4113dSnw141292  execsql {
511c5c4113dSnw141292    SELECT f1 FROM test1 WHERE 5-3==2
512c5c4113dSnw141292    ORDER BY f1
513c5c4113dSnw141292  }
514c5c4113dSnw141292} {11 33}
515c5c4113dSnw141292do_test select1-8.4 {
516c5c4113dSnw141292  execsql {
517c5c4113dSnw141292    SELECT coalesce(f1/(f1-11),'x'),
518c5c4113dSnw141292           coalesce(min(f1/(f1-11),5),'y'),
519c5c4113dSnw141292           coalesce(max(f1/(f1-33),6),'z')
520c5c4113dSnw141292    FROM test1 ORDER BY f1
521c5c4113dSnw141292  }
522c5c4113dSnw141292} {x y 6 1.5 1.5 z}
523c5c4113dSnw141292do_test select1-8.5 {
524c5c4113dSnw141292  execsql {
525c5c4113dSnw141292    SELECT min(1,2,3), -max(1,2,3)
526c5c4113dSnw141292    FROM test1 ORDER BY f1
527c5c4113dSnw141292  }
528c5c4113dSnw141292} {1 -3 1 -3}
529c5c4113dSnw141292
530c5c4113dSnw141292
531c5c4113dSnw141292# Check the behavior when the result set is empty
532c5c4113dSnw141292#
533c5c4113dSnw141292do_test select1-9.1 {
534c5c4113dSnw141292  catch {unset r}
535c5c4113dSnw141292  set r(*) {}
536c5c4113dSnw141292  db eval {SELECT * FROM test1 WHERE f1<0} r {}
537c5c4113dSnw141292  set r(*)
538c5c4113dSnw141292} {}
539c5c4113dSnw141292do_test select1-9.2 {
540c5c4113dSnw141292  execsql {PRAGMA empty_result_callbacks=on}
541c5c4113dSnw141292  set r(*) {}
542c5c4113dSnw141292  db eval {SELECT * FROM test1 WHERE f1<0} r {}
543c5c4113dSnw141292  set r(*)
544c5c4113dSnw141292} {f1 f2}
545c5c4113dSnw141292do_test select1-9.3 {
546c5c4113dSnw141292  set r(*) {}
547c5c4113dSnw141292  db eval {SELECT * FROM test1 WHERE f1<(select count(*) from test2)} r {}
548c5c4113dSnw141292  set r(*)
549c5c4113dSnw141292} {f1 f2}
550c5c4113dSnw141292do_test select1-9.4 {
551c5c4113dSnw141292  set r(*) {}
552c5c4113dSnw141292  db eval {SELECT * FROM test1 ORDER BY f1} r {}
553c5c4113dSnw141292  set r(*)
554c5c4113dSnw141292} {f1 f2}
555c5c4113dSnw141292do_test select1-9.5 {
556c5c4113dSnw141292  set r(*) {}
557c5c4113dSnw141292  db eval {SELECT * FROM test1 WHERE f1<0 ORDER BY f1} r {}
558c5c4113dSnw141292  set r(*)
559c5c4113dSnw141292} {f1 f2}
560c5c4113dSnw141292unset r
561c5c4113dSnw141292
562c5c4113dSnw141292# Check for ORDER BY clauses that refer to an AS name in the column list
563c5c4113dSnw141292#
564c5c4113dSnw141292do_test select1-10.1 {
565c5c4113dSnw141292  execsql {
566c5c4113dSnw141292    SELECT f1 AS x FROM test1 ORDER BY x
567c5c4113dSnw141292  }
568c5c4113dSnw141292} {11 33}
569c5c4113dSnw141292do_test select1-10.2 {
570c5c4113dSnw141292  execsql {
571c5c4113dSnw141292    SELECT f1 AS x FROM test1 ORDER BY -x
572c5c4113dSnw141292  }
573c5c4113dSnw141292} {33 11}
574c5c4113dSnw141292do_test select1-10.3 {
575c5c4113dSnw141292  execsql {
576c5c4113dSnw141292    SELECT f1-23 AS x FROM test1 ORDER BY abs(x)
577c5c4113dSnw141292  }
578c5c4113dSnw141292} {10 -12}
579c5c4113dSnw141292do_test select1-10.4 {
580c5c4113dSnw141292  execsql {
581c5c4113dSnw141292    SELECT f1-23 AS x FROM test1 ORDER BY -abs(x)
582c5c4113dSnw141292  }
583c5c4113dSnw141292} {-12 10}
584c5c4113dSnw141292do_test select1-10.5 {
585c5c4113dSnw141292  execsql {
586c5c4113dSnw141292    SELECT f1-22 AS x, f2-22 as y FROM test1
587c5c4113dSnw141292  }
588c5c4113dSnw141292} {-11 0 11 22}
589c5c4113dSnw141292do_test select1-10.6 {
590c5c4113dSnw141292  execsql {
591c5c4113dSnw141292    SELECT f1-22 AS x, f2-22 as y FROM test1 WHERE x>0 AND y<50
592c5c4113dSnw141292  }
593c5c4113dSnw141292} {11 22}
594c5c4113dSnw141292
595c5c4113dSnw141292# Check the ability to specify "TABLE.*" in the result set of a SELECT
596c5c4113dSnw141292#
597c5c4113dSnw141292do_test select1-11.1 {
598c5c4113dSnw141292  execsql {
599c5c4113dSnw141292    DELETE FROM t3;
600c5c4113dSnw141292    DELETE FROM t4;
601c5c4113dSnw141292    INSERT INTO t3 VALUES(1,2);
602c5c4113dSnw141292    INSERT INTO t4 VALUES(3,4);
603c5c4113dSnw141292    SELECT * FROM t3, t4;
604c5c4113dSnw141292  }
605c5c4113dSnw141292} {1 2 3 4}
606c5c4113dSnw141292do_test select1-11.2 {
607c5c4113dSnw141292  execsql2 {
608c5c4113dSnw141292    SELECT * FROM t3, t4;
609c5c4113dSnw141292  }
610c5c4113dSnw141292} {t3.a 1 t3.b 2 t4.a 3 t4.b 4}
611c5c4113dSnw141292do_test select1-11.3 {
612c5c4113dSnw141292  execsql2 {
613c5c4113dSnw141292    SELECT * FROM t3 AS x, t4 AS y;
614c5c4113dSnw141292  }
615c5c4113dSnw141292} {x.a 1 x.b 2 y.a 3 y.b 4}
616c5c4113dSnw141292do_test select1-11.4.1 {
617c5c4113dSnw141292  execsql {
618c5c4113dSnw141292    SELECT t3.*, t4.b FROM t3, t4;
619c5c4113dSnw141292  }
620c5c4113dSnw141292} {1 2 4}
621c5c4113dSnw141292do_test select1-11.4.2 {
622c5c4113dSnw141292  execsql {
623c5c4113dSnw141292    SELECT "t3".*, t4.b FROM t3, t4;
624c5c4113dSnw141292  }
625c5c4113dSnw141292} {1 2 4}
626c5c4113dSnw141292do_test select1-11.5 {
627c5c4113dSnw141292  execsql2 {
628c5c4113dSnw141292    SELECT t3.*, t4.b FROM t3, t4;
629c5c4113dSnw141292  }
630c5c4113dSnw141292} {t3.a 1 t3.b 2 t4.b 4}
631c5c4113dSnw141292do_test select1-11.6 {
632c5c4113dSnw141292  execsql2 {
633c5c4113dSnw141292    SELECT x.*, y.b FROM t3 AS x, t4 AS y;
634c5c4113dSnw141292  }
635c5c4113dSnw141292} {x.a 1 x.b 2 y.b 4}
636c5c4113dSnw141292do_test select1-11.7 {
637c5c4113dSnw141292  execsql {
638c5c4113dSnw141292    SELECT t3.b, t4.* FROM t3, t4;
639c5c4113dSnw141292  }
640c5c4113dSnw141292} {2 3 4}
641c5c4113dSnw141292do_test select1-11.8 {
642c5c4113dSnw141292  execsql2 {
643c5c4113dSnw141292    SELECT t3.b, t4.* FROM t3, t4;
644c5c4113dSnw141292  }
645c5c4113dSnw141292} {t3.b 2 t4.a 3 t4.b 4}
646c5c4113dSnw141292do_test select1-11.9 {
647c5c4113dSnw141292  execsql2 {
648c5c4113dSnw141292    SELECT x.b, y.* FROM t3 AS x, t4 AS y;
649c5c4113dSnw141292  }
650c5c4113dSnw141292} {x.b 2 y.a 3 y.b 4}
651c5c4113dSnw141292do_test select1-11.10 {
652c5c4113dSnw141292  catchsql {
653c5c4113dSnw141292    SELECT t5.* FROM t3, t4;
654c5c4113dSnw141292  }
655c5c4113dSnw141292} {1 {no such table: t5}}
656c5c4113dSnw141292do_test select1-11.11 {
657c5c4113dSnw141292  catchsql {
658c5c4113dSnw141292    SELECT t3.* FROM t3 AS x, t4;
659c5c4113dSnw141292  }
660c5c4113dSnw141292} {1 {no such table: t3}}
661c5c4113dSnw141292do_test select1-11.12 {
662c5c4113dSnw141292  execsql2 {
663c5c4113dSnw141292    SELECT t3.* FROM t3, (SELECT max(a), max(b) FROM t4)
664c5c4113dSnw141292  }
665c5c4113dSnw141292} {t3.a 1 t3.b 2}
666c5c4113dSnw141292do_test select1-11.13 {
667c5c4113dSnw141292  execsql2 {
668c5c4113dSnw141292    SELECT t3.* FROM (SELECT max(a), max(b) FROM t4), t3
669c5c4113dSnw141292  }
670c5c4113dSnw141292} {t3.a 1 t3.b 2}
671c5c4113dSnw141292do_test select1-11.14 {
672c5c4113dSnw141292  execsql2 {
673c5c4113dSnw141292    SELECT * FROM t3, (SELECT max(a), max(b) FROM t4) AS 'tx'
674c5c4113dSnw141292  }
675c5c4113dSnw141292} {t3.a 1 t3.b 2 tx.max(a) 3 tx.max(b) 4}
676c5c4113dSnw141292do_test select1-11.15 {
677c5c4113dSnw141292  execsql2 {
678c5c4113dSnw141292    SELECT y.*, t3.* FROM t3, (SELECT max(a), max(b) FROM t4) AS y
679c5c4113dSnw141292  }
680c5c4113dSnw141292} {y.max(a) 3 y.max(b) 4 t3.a 1 t3.b 2}
681c5c4113dSnw141292do_test select1-11.16 {
682c5c4113dSnw141292  execsql2 {
683c5c4113dSnw141292    SELECT y.* FROM t3 as y, t4 as z
684c5c4113dSnw141292  }
685c5c4113dSnw141292} {y.a 1 y.b 2}
686c5c4113dSnw141292
687c5c4113dSnw141292# Tests of SELECT statements without a FROM clause.
688c5c4113dSnw141292#
689c5c4113dSnw141292do_test select1-12.1 {
690c5c4113dSnw141292  execsql2 {
691c5c4113dSnw141292    SELECT 1+2+3
692c5c4113dSnw141292  }
693c5c4113dSnw141292} {1+2+3 6}
694c5c4113dSnw141292do_test select1-12.2 {
695c5c4113dSnw141292  execsql2 {
696c5c4113dSnw141292    SELECT 1,'hello',2
697c5c4113dSnw141292  }
698c5c4113dSnw141292} {1 1 'hello' hello 2 2}
699c5c4113dSnw141292do_test select1-12.3 {
700c5c4113dSnw141292  execsql2 {
701c5c4113dSnw141292    SELECT 1 AS 'a','hello' AS 'b',2 AS 'c'
702c5c4113dSnw141292  }
703c5c4113dSnw141292} {a 1 b hello c 2}
704c5c4113dSnw141292do_test select1-12.4 {
705c5c4113dSnw141292  execsql {
706c5c4113dSnw141292    DELETE FROM t3;
707c5c4113dSnw141292    INSERT INTO t3 VALUES(1,2);
708c5c4113dSnw141292    SELECT * FROM t3 UNION SELECT 3 AS 'a', 4 ORDER BY a;
709c5c4113dSnw141292  }
710c5c4113dSnw141292} {1 2 3 4}
711c5c4113dSnw141292do_test select1-12.5 {
712c5c4113dSnw141292  execsql {
713c5c4113dSnw141292    SELECT 3, 4 UNION SELECT * FROM t3;
714c5c4113dSnw141292  }
715c5c4113dSnw141292} {1 2 3 4}
716c5c4113dSnw141292do_test select1-12.6 {
717c5c4113dSnw141292  execsql {
718c5c4113dSnw141292    SELECT * FROM t3 WHERE a=(SELECT 1);
719c5c4113dSnw141292  }
720c5c4113dSnw141292} {1 2}
721c5c4113dSnw141292do_test select1-12.7 {
722c5c4113dSnw141292  execsql {
723c5c4113dSnw141292    SELECT * FROM t3 WHERE a=(SELECT 2);
724c5c4113dSnw141292  }
725c5c4113dSnw141292} {}
726c5c4113dSnw141292do_test select1-12.8 {
727c5c4113dSnw141292  execsql2 {
728c5c4113dSnw141292    SELECT x FROM (
729c5c4113dSnw141292      SELECT a,b FROM t3 UNION SELECT a AS 'x', b AS 'y' FROM t4 ORDER BY a,b
730c5c4113dSnw141292    ) ORDER BY x;
731c5c4113dSnw141292  }
732c5c4113dSnw141292} {x 1 x 3}
733c5c4113dSnw141292do_test select1-12.9 {
734c5c4113dSnw141292  execsql2 {
735c5c4113dSnw141292    SELECT z.x FROM (
736c5c4113dSnw141292      SELECT a,b FROM t3 UNION SELECT a AS 'x', b AS 'y' FROM t4 ORDER BY a,b
737c5c4113dSnw141292    ) AS 'z' ORDER BY x;
738c5c4113dSnw141292  }
739c5c4113dSnw141292} {z.x 1 z.x 3}
740c5c4113dSnw141292
741c5c4113dSnw141292
742c5c4113dSnw141292finish_test
743