wasCSharpSQLite – Blame information for rev 1

Subversion Repositories:
Rev:
Rev Author Line No. Line
1 office 1 # 2001 September 15
2 #
3 # The author disclaims copyright to this source code. In place of
4 # a legal notice, here is a blessing:
5 #
6 # May you do good and not evil.
7 # May you find forgiveness for yourself and forgive others.
8 # May you share freely, never taking more than you give.
9 #
10 #***********************************************************************
11 # This file implements regression tests for SQLite library. The
12 # focus of this file is testing the SELECT statement.
13 #
14 # $Id: select1.test,v 1.70 2009/05/28 01:00:56 drh Exp $
15  
16 set testdir [file dirname $argv0]
17 source $testdir/tester.tcl
18  
19 # Try to select on a non-existant table.
20 #
21 do_test select1-1.1 {
22 set v [catch {execsql {SELECT * FROM test1}} msg]
23 lappend v $msg
24 } {1 {no such table: test1}}
25  
26  
27 execsql {CREATE TABLE test1(f1 int, f2 int)}
28  
29 do_test select1-1.2 {
30 set v [catch {execsql {SELECT * FROM test1, test2}} msg]
31 lappend v $msg
32 } {1 {no such table: test2}}
33 do_test select1-1.3 {
34 set v [catch {execsql {SELECT * FROM test2, test1}} msg]
35 lappend v $msg
36 } {1 {no such table: test2}}
37  
38 execsql {INSERT INTO test1(f1,f2) VALUES(11,22)}
39  
40  
41 # Make sure the columns are extracted correctly.
42 #
43 do_test select1-1.4 {
44 execsql {SELECT f1 FROM test1}
45 } {11}
46 do_test select1-1.5 {
47 execsql {SELECT f2 FROM test1}
48 } {22}
49 do_test select1-1.6 {
50 execsql {SELECT f2, f1 FROM test1}
51 } {22 11}
52 do_test select1-1.7 {
53 execsql {SELECT f1, f2 FROM test1}
54 } {11 22}
55 do_test select1-1.8 {
56 execsql {SELECT * FROM test1}
57 } {11 22}
58 do_test select1-1.8.1 {
59 execsql {SELECT *, * FROM test1}
60 } {11 22 11 22}
61 do_test select1-1.8.2 {
62 execsql {SELECT *, min(f1,f2), max(f1,f2) FROM test1}
63 } {11 22 11 22}
64 do_test select1-1.8.3 {
65 execsql {SELECT 'one', *, 'two', * FROM test1}
66 } {one 11 22 two 11 22}
67  
68 execsql {CREATE TABLE test2(r1 real, r2 real)}
69 execsql {INSERT INTO test2(r1,r2) VALUES(1.1,2.2)}
70  
71 do_test select1-1.9 {
72 execsql {SELECT * FROM test1, test2}
73 } {11 22 1.1 2.2}
74 do_test select1-1.9.1 {
75 execsql {SELECT *, 'hi' FROM test1, test2}
76 } {11 22 1.1 2.2 hi}
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}
82 } {11 1.1}
83 do_test select1-1.11 {
84 execsql {SELECT test1.f1, test2.r1 FROM test2, test1}
85 } {11 1.1}
86 do_test select1-1.11.1 {
87 execsql {SELECT * FROM test2, test1}
88 } {1.1 2.2 11 22}
89 do_test select1-1.11.2 {
90 execsql {SELECT * FROM test1 AS a, test1 AS b}
91 } {11 22 11 22}
92 do_test select1-1.12 {
93 execsql {SELECT max(test1.f1,test2.r1), min(test1.f2,test2.r2)
94 FROM test2, test1}
95 } {11 2.2}
96 do_test select1-1.13 {
97 execsql {SELECT min(test1.f1,test2.r1), max(test1.f2,test2.r2)
98 FROM test1, test2}
99 } {1.1 22}
100  
101 set long {This is a string that is too big to fit inside a NBFS buffer}
102 do_test select1-2.0 {
103 execsql "
104 DROP TABLE test2;
105 DELETE FROM test1;
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');
114 SELECT * FROM t3;
115 "
116 } {abc {} {} xyz 11 22 33 44}
117  
118 # Error messges from sqliteExprCheck
119 #
120 do_test select1-2.1 {
121 set v [catch {execsql {SELECT count(f1,f2) FROM test1}} msg]
122 lappend v $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]
126 lappend v $msg
127 } {0 2}
128 do_test select1-2.3 {
129 set v [catch {execsql {SELECT Count() FROM test1}} msg]
130 lappend v $msg
131 } {0 2}
132 do_test select1-2.4 {
133 set v [catch {execsql {SELECT COUNT(*) FROM test1}} msg]
134 lappend v $msg
135 } {0 2}
136 do_test select1-2.5 {
137 set v [catch {execsql {SELECT COUNT(*)+1 FROM test1}} msg]
138 lappend v $msg
139 } {0 3}
140 do_test select1-2.5.1 {
141 execsql {SELECT count(*),count(a),count(b) FROM t3}
142 } {4 3 3}
143 do_test select1-2.5.2 {
144 execsql {SELECT count(*),count(a),count(b) FROM t4}
145 } {1 0 1}
146 do_test select1-2.5.3 {
147 execsql {SELECT count(*),count(a),count(b) FROM t4 WHERE b=5}
148 } {0 0 0}
149 do_test select1-2.6 {
150 set v [catch {execsql {SELECT min(*) FROM test1}} msg]
151 lappend v $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]
155 lappend v $msg
156 } {0 11}
157 do_test select1-2.8 {
158 set v [catch {execsql {SELECT MIN(f1,f2) FROM test1}} msg]
159 lappend v [lsort $msg]
160 } {0 {11 33}}
161 do_test select1-2.8.1 {
162 execsql {SELECT coalesce(min(a),'xyzzy') FROM t3}
163 } {11}
164 do_test select1-2.8.2 {
165 execsql {SELECT min(coalesce(a,'xyzzy')) FROM t3}
166 } {11}
167 do_test select1-2.8.3 {
168 execsql {SELECT min(b), min(b) FROM t4}
169 } [list $long $long]
170 do_test select1-2.9 {
171 set v [catch {execsql {SELECT MAX(*) FROM test1}} msg]
172 lappend v $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]
176 lappend v $msg
177 } {0 33}
178 do_test select1-2.11 {
179 set v [catch {execsql {SELECT max(f1,f2) FROM test1}} msg]
180 lappend v [lsort $msg]
181 } {0 {22 44}}
182 do_test select1-2.12 {
183 set v [catch {execsql {SELECT MAX(f1,f2)+1 FROM test1}} msg]
184 lappend v [lsort $msg]
185 } {0 {23 45}}
186 do_test select1-2.13 {
187 set v [catch {execsql {SELECT MAX(f1)+1 FROM test1}} msg]
188 lappend v $msg
189 } {0 34}
190 do_test select1-2.13.1 {
191 execsql {SELECT coalesce(max(a),'xyzzy') FROM t3}
192 } {abc}
193 do_test select1-2.13.2 {
194 execsql {SELECT max(coalesce(a,'xyzzy')) FROM t3}
195 } {xyzzy}
196 do_test select1-2.14 {
197 set v [catch {execsql {SELECT SUM(*) FROM test1}} msg]
198 lappend v $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]
202 lappend v $msg
203 } {0 44}
204 do_test select1-2.16 {
205 set v [catch {execsql {SELECT sum(f1,f2) FROM test1}} msg]
206 lappend v $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]
210 lappend v $msg
211 } {0 45}
212 do_test select1-2.17.1 {
213 execsql {SELECT sum(a) FROM t3}
214 } {44.0}
215 do_test select1-2.18 {
216 set v [catch {execsql {SELECT XYZZY(f1) FROM test1}} msg]
217 lappend v $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]
221 lappend v $msg
222 } {0 44}
223 do_test select1-2.20 {
224 set v [catch {execsql {SELECT SUM(min(f1)) FROM test1}} msg]
225 lappend v $msg
226 } {1 {misuse of aggregate function min()}}
227  
228 # Ticket #2526
229 #
230 do_test select1-2.21 {
231 catchsql {
232 SELECT min(f1) AS m FROM test1 GROUP BY f1 HAVING max(m+5)<10
233 }
234 } {1 {misuse of aliased aggregate m}}
235 do_test select1-2.22 {
236 catchsql {
237 SELECT coalesce(min(f1)+5,11) AS m FROM test1
238 GROUP BY f1
239 HAVING max(m+5)<10
240 }
241 } {1 {misuse of aliased aggregate m}}
242 do_test select1-2.23 {
243 execsql {
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);
247 }
248 catchsql {
249 SELECT count(a) AS cn FROM tkt2526 GROUP BY a HAVING cn<max(cn)
250 }
251 } {1 {misuse of aliased aggregate cn}}
252  
253 # WHERE clause expressions
254 #
255 do_test select1-3.1 {
256 set v [catch {execsql {SELECT f1 FROM test1 WHERE f1<11}} msg]
257 lappend v $msg
258 } {0 {}}
259 do_test select1-3.2 {
260 set v [catch {execsql {SELECT f1 FROM test1 WHERE f1<=11}} msg]
261 lappend v $msg
262 } {0 11}
263 do_test select1-3.3 {
264 set v [catch {execsql {SELECT f1 FROM test1 WHERE f1=11}} msg]
265 lappend v $msg
266 } {0 11}
267 do_test select1-3.4 {
268 set v [catch {execsql {SELECT f1 FROM test1 WHERE f1>=11}} msg]
269 lappend v [lsort $msg]
270 } {0 {11 33}}
271 do_test select1-3.5 {
272 set v [catch {execsql {SELECT f1 FROM test1 WHERE f1>11}} msg]
273 lappend v [lsort $msg]
274 } {0 33}
275 do_test select1-3.6 {
276 set v [catch {execsql {SELECT f1 FROM test1 WHERE f1!=11}} msg]
277 lappend v [lsort $msg]
278 } {0 33}
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]
282 } {0 33}
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]
286 } {0 {11 33}}
287 do_test select1-3.9 {
288 set v [catch {execsql {SELECT f1 FROM test1 WHERE count(f1,f2)!=11}} msg]
289 lappend v $msg
290 } {1 {wrong number of arguments to function count()}}
291  
292 # ORDER BY expressions
293 #
294 do_test select1-4.1 {
295 set v [catch {execsql {SELECT f1 FROM test1 ORDER BY f1}} msg]
296 lappend v $msg
297 } {0 {11 33}}
298 do_test select1-4.2 {
299 set v [catch {execsql {SELECT f1 FROM test1 ORDER BY -f1}} msg]
300 lappend v $msg
301 } {0 {33 11}}
302 do_test select1-4.3 {
303 set v [catch {execsql {SELECT f1 FROM test1 ORDER BY min(f1,f2)}} msg]
304 lappend v $msg
305 } {0 {11 33}}
306 do_test select1-4.4 {
307 set v [catch {execsql {SELECT f1 FROM test1 ORDER BY min(f1)}} msg]
308 lappend v $msg
309 } {1 {misuse of aggregate: min()}}
310  
311 # The restriction not allowing constants in the ORDER BY clause
312 # has been removed. See ticket #1768
313 #do_test select1-4.5 {
314 # catchsql {
315 # SELECT f1 FROM test1 ORDER BY 8.4;
316 # }
317 #} {1 {ORDER BY terms must not be non-integer constants}}
318 #do_test select1-4.6 {
319 # catchsql {
320 # SELECT f1 FROM test1 ORDER BY '8.4';
321 # }
322 #} {1 {ORDER BY terms must not be non-integer constants}}
323 #do_test select1-4.7.1 {
324 # catchsql {
325 # SELECT f1 FROM test1 ORDER BY 'xyz';
326 # }
327 #} {1 {ORDER BY terms must not be non-integer constants}}
328 #do_test select1-4.7.2 {
329 # catchsql {
330 # SELECT f1 FROM test1 ORDER BY -8.4;
331 # }
332 #} {1 {ORDER BY terms must not be non-integer constants}}
333 #do_test select1-4.7.3 {
334 # catchsql {
335 # SELECT f1 FROM test1 ORDER BY +8.4;
336 # }
337 #} {1 {ORDER BY terms must not be non-integer constants}}
338 #do_test select1-4.7.4 {
339 # catchsql {
340 # SELECT f1 FROM test1 ORDER BY 4294967296; -- constant larger than 32 bits
341 # }
342 #} {1 {ORDER BY terms must not be non-integer constants}}
343  
344 do_test select1-4.5 {
345 execsql {
346 SELECT f1 FROM test1 ORDER BY 8.4
347 }
348 } {11 33}
349 do_test select1-4.6 {
350 execsql {
351 SELECT f1 FROM test1 ORDER BY '8.4'
352 }
353 } {11 33}
354  
355 do_test select1-4.8 {
356 execsql {
357 CREATE TABLE t5(a,b);
358 INSERT INTO t5 VALUES(1,10);
359 INSERT INTO t5 VALUES(2,9);
360 SELECT * FROM t5 ORDER BY 1;
361 }
362 } {1 10 2 9}
363 do_test select1-4.9.1 {
364 execsql {
365 SELECT * FROM t5 ORDER BY 2;
366 }
367 } {2 9 1 10}
368 do_test select1-4.9.2 {
369 execsql {
370 SELECT * FROM t5 ORDER BY +2;
371 }
372 } {2 9 1 10}
373 do_test select1-4.10.1 {
374 catchsql {
375 SELECT * FROM t5 ORDER BY 3;
376 }
377 } {1 {1st ORDER BY term out of range - should be between 1 and 2}}
378 do_test select1-4.10.2 {
379 catchsql {
380 SELECT * FROM t5 ORDER BY -1;
381 }
382 } {1 {1st ORDER BY term out of range - should be between 1 and 2}}
383 do_test select1-4.11 {
384 execsql {
385 INSERT INTO t5 VALUES(3,10);
386 SELECT * FROM t5 ORDER BY 2, 1 DESC;
387 }
388 } {2 9 3 10 1 10}
389 do_test select1-4.12 {
390 execsql {
391 SELECT * FROM t5 ORDER BY 1 DESC, b;
392 }
393 } {3 10 2 9 1 10}
394 do_test select1-4.13 {
395 execsql {
396 SELECT * FROM t5 ORDER BY b DESC, 1;
397 }
398 } {1 10 3 10 2 9}
399  
400  
401 # ORDER BY ignored on an aggregate query
402 #
403 do_test select1-5.1 {
404 set v [catch {execsql {SELECT max(f1) FROM test1 ORDER BY f2}} msg]
405 lappend v $msg
406 } {0 33}
407  
408 execsql {CREATE TABLE test2(t1 text, t2 text)}
409 execsql {INSERT INTO test2 VALUES('abc','xyz')}
410  
411 # Check for column naming
412 #
413 do_test select1-6.1 {
414 set v [catch {execsql2 {SELECT f1 FROM test1 ORDER BY f2}} msg]
415 lappend v $msg
416 } {0 {f1 11 f1 33}}
417 do_test select1-6.1.1 {
418 db eval {PRAGMA full_column_names=on}
419 set v [catch {execsql2 {SELECT f1 FROM test1 ORDER BY f2}} msg]
420 lappend v $msg
421 } {0 {test1.f1 11 test1.f1 33}}
422 do_test select1-6.1.2 {
423 set v [catch {execsql2 {SELECT f1 as 'f1' FROM test1 ORDER BY f2}} msg]
424 lappend v $msg
425 } {0 {f1 11 f1 33}}
426 do_test select1-6.1.3 {
427 set v [catch {execsql2 {SELECT * FROM test1 WHERE f1==11}} msg]
428 lappend v $msg
429 } {0 {f1 11 f2 22}}
430 do_test select1-6.1.4 {
431 set v [catch {execsql2 {SELECT DISTINCT * FROM test1 WHERE f1==11}} msg]
432 db eval {PRAGMA full_column_names=off}
433 lappend v $msg
434 } {0 {f1 11 f2 22}}
435 do_test select1-6.1.5 {
436 set v [catch {execsql2 {SELECT * FROM test1 WHERE f1==11}} msg]
437 lappend v $msg
438 } {0 {f1 11 f2 22}}
439 do_test select1-6.1.6 {
440 set v [catch {execsql2 {SELECT DISTINCT * FROM test1 WHERE f1==11}} msg]
441 lappend v $msg
442 } {0 {f1 11 f2 22}}
443 do_test select1-6.2 {
444 set v [catch {execsql2 {SELECT f1 as xyzzy FROM test1 ORDER BY f2}} msg]
445 lappend v $msg
446 } {0 {xyzzy 11 xyzzy 33}}
447 do_test select1-6.3 {
448 set v [catch {execsql2 {SELECT f1 as "xyzzy" FROM test1 ORDER BY f2}} msg]
449 lappend v $msg
450 } {0 {xyzzy 11 xyzzy 33}}
451 do_test select1-6.3.1 {
452 set v [catch {execsql2 {SELECT f1 as 'xyzzy ' FROM test1 ORDER BY f2}} msg]
453 lappend v $msg
454 } {0 {{xyzzy } 11 {xyzzy } 33}}
455 do_test select1-6.4 {
456 set v [catch {execsql2 {SELECT f1+F2 as xyzzy FROM test1 ORDER BY f2}} msg]
457 lappend v $msg
458 } {0 {xyzzy 33 xyzzy 77}}
459 do_test select1-6.4a {
460 set v [catch {execsql2 {SELECT f1+F2 FROM test1 ORDER BY f2}} msg]
461 lappend v $msg
462 } {0 {f1+F2 33 f1+F2 77}}
463 do_test select1-6.5 {
464 set v [catch {execsql2 {SELECT test1.f1+F2 FROM test1 ORDER BY f2}} msg]
465 lappend v $msg
466 } {0 {test1.f1+F2 33 test1.f1+F2 77}}
467 do_test select1-6.5.1 {
468 execsql2 {PRAGMA full_column_names=on}
469 set v [catch {execsql2 {SELECT test1.f1+F2 FROM test1 ORDER BY f2}} msg]
470 execsql2 {PRAGMA full_column_names=off}
471 lappend v $msg
472 } {0 {test1.f1+F2 33 test1.f1+F2 77}}
473 do_test select1-6.6 {
474 set v [catch {execsql2 {SELECT test1.f1+F2, t1 FROM test1, test2
475 ORDER BY f2}} msg]
476 lappend v $msg
477 } {0 {test1.f1+F2 33 t1 abc test1.f1+F2 77 t1 abc}}
478 do_test select1-6.7 {
479 set v [catch {execsql2 {SELECT A.f1, t1 FROM test1 as A, test2
480 ORDER BY f2}} msg]
481 lappend v $msg
482 } {0 {f1 11 t1 abc f1 33 t1 abc}}
483 do_test select1-6.8 {
484 set v [catch {execsql2 {SELECT A.f1, f1 FROM test1 as A, test1 as B
485 ORDER BY f2}} msg]
486 lappend v $msg
487 } {1 {ambiguous column name: f1}}
488 do_test select1-6.8b {
489 set v [catch {execsql2 {SELECT A.f1, B.f1 FROM test1 as A, test1 as B
490 ORDER BY f2}} msg]
491 lappend v $msg
492 } {1 {ambiguous column name: f2}}
493 do_test select1-6.8c {
494 set v [catch {execsql2 {SELECT A.f1, f1 FROM test1 as A, test1 as A
495 ORDER BY f2}} msg]
496 lappend v $msg
497 } {1 {ambiguous column name: A.f1}}
498 do_test select1-6.9.1 {
499 set v [catch {execsql {SELECT A.f1, B.f1 FROM test1 as A, test1 as B
500 ORDER BY A.f1, B.f1}} msg]
501 lappend v $msg
502 } {0 {11 11 11 33 33 11 33 33}}
503 do_test select1-6.9.2 {
504 set v [catch {execsql2 {SELECT A.f1, B.f1 FROM test1 as A, test1 as B
505 ORDER BY A.f1, B.f1}} msg]
506 lappend v $msg
507 } {0 {f1 11 f1 11 f1 33 f1 33 f1 11 f1 11 f1 33 f1 33}}
508  
509 do_test select1-6.9.3 {
510 db eval {
511 PRAGMA short_column_names=OFF;
512 PRAGMA full_column_names=OFF;
513 }
514 execsql2 {
515 SELECT test1 . f1, test1 . f2 FROM test1 LIMIT 1
516 }
517 } {{test1 . f1} 11 {test1 . f2} 22}
518 do_test select1-6.9.4 {
519 db eval {
520 PRAGMA short_column_names=OFF;
521 PRAGMA full_column_names=ON;
522 }
523 execsql2 {
524 SELECT test1 . f1, test1 . f2 FROM test1 LIMIT 1
525 }
526 } {test1.f1 11 test1.f2 22}
527 do_test select1-6.9.5 {
528 db eval {
529 PRAGMA short_column_names=OFF;
530 PRAGMA full_column_names=ON;
531 }
532 execsql2 {
533 SELECT 123.45;
534 }
535 } {123.45 123.45}
536 do_test select1-6.9.6 {
537 execsql2 {
538 SELECT * FROM test1 a, test1 b LIMIT 1
539 }
540 } {a.f1 11 a.f2 22 b.f1 11 b.f2 22}
541 do_test select1-6.9.7 {
542 set x [execsql2 {
543 SELECT * FROM test1 a, (select 5, 6) LIMIT 1
544 }]
545 regsub -all {subquery_[0-9a-fA-F]+_} $x {subquery} x
546 set x
547 } {a.f1 11 a.f2 22 sqlite_subquery.5 5 sqlite_subquery.6 6}
548 do_test select1-6.9.8 {
549 set x [execsql2 {
550 SELECT * FROM test1 a, (select 5 AS x, 6 AS y) AS b LIMIT 1
551 }]
552 regsub -all {subquery_[0-9a-fA-F]+_} $x {subquery} x
553 set x
554 } {a.f1 11 a.f2 22 b.x 5 b.y 6}
555 do_test select1-6.9.9 {
556 execsql2 {
557 SELECT a.f1, b.f2 FROM test1 a, test1 b LIMIT 1
558 }
559 } {test1.f1 11 test1.f2 22}
560 do_test select1-6.9.10 {
561 execsql2 {
562 SELECT f1, t1 FROM test1, test2 LIMIT 1
563 }
564 } {test1.f1 11 test2.t1 abc}
565 do_test select1-6.9.11 {
566 db eval {
567 PRAGMA short_column_names=ON;
568 PRAGMA full_column_names=ON;
569 }
570 execsql2 {
571 SELECT a.f1, b.f2 FROM test1 a, test1 b LIMIT 1
572 }
573 } {test1.f1 11 test1.f2 22}
574 do_test select1-6.9.12 {
575 execsql2 {
576 SELECT f1, t1 FROM test1, test2 LIMIT 1
577 }
578 } {test1.f1 11 test2.t1 abc}
579 do_test select1-6.9.13 {
580 db eval {
581 PRAGMA short_column_names=ON;
582 PRAGMA full_column_names=OFF;
583 }
584 execsql2 {
585 SELECT a.f1, b.f1 FROM test1 a, test1 b LIMIT 1
586 }
587 } {f1 11 f1 11}
588 do_test select1-6.9.14 {
589 execsql2 {
590 SELECT f1, t1 FROM test1, test2 LIMIT 1
591 }
592 } {f1 11 t1 abc}
593 do_test select1-6.9.15 {
594 db eval {
595 PRAGMA short_column_names=OFF;
596 PRAGMA full_column_names=ON;
597 }
598 execsql2 {
599 SELECT a.f1, b.f1 FROM test1 a, test1 b LIMIT 1
600 }
601 } {test1.f1 11 test1.f1 11}
602 do_test select1-6.9.16 {
603 execsql2 {
604 SELECT f1, t1 FROM test1, test2 LIMIT 1
605 }
606 } {test1.f1 11 test2.t1 abc}
607  
608  
609 db eval {
610 PRAGMA short_column_names=ON;
611 PRAGMA full_column_names=OFF;
612 }
613  
614 ifcapable compound {
615 do_test select1-6.10 {
616 set v [catch {execsql2 {
617 SELECT f1 FROM test1 UNION SELECT f2 FROM test1
618 ORDER BY f2;
619 }} msg]
620 lappend v $msg
621 } {0 {f1 11 f1 22 f1 33 f1 44}}
622 do_test select1-6.11 {
623 set v [catch {execsql2 {
624 SELECT f1 FROM test1 UNION SELECT f2+100 FROM test1
625 ORDER BY f2+101;
626 }} msg]
627 lappend v $msg
628 } {1 {1st ORDER BY term does not match any column in the result set}}
629  
630 # Ticket #2296
631 ifcapable subquery&&compound {
632 do_test select1-6.20 {
633 execsql {
634 CREATE TABLE t6(a TEXT, b TEXT);
635 INSERT INTO t6 VALUES('a','0');
636 INSERT INTO t6 VALUES('b','1');
637 INSERT INTO t6 VALUES('c','2');
638 INSERT INTO t6 VALUES('d','3');
639 SELECT a FROM t6 WHERE b IN
640 (SELECT b FROM t6 WHERE a<='b' UNION SELECT '3' AS x
641 ORDER BY 1 LIMIT 1)
642 }
643 } {a}
644 do_test select1-6.21 {
645 execsql {
646 SELECT a FROM t6 WHERE b IN
647 (SELECT b FROM t6 WHERE a<='b' UNION SELECT '3' AS x
648 ORDER BY 1 DESC LIMIT 1)
649 }
650 } {d}
651 do_test select1-6.22 {
652 execsql {
653 SELECT a FROM t6 WHERE b IN
654 (SELECT b FROM t6 WHERE a<='b' UNION SELECT '3' AS x
655 ORDER BY b LIMIT 2)
656 ORDER BY a;
657 }
658 } {a b}
659 do_test select1-6.23 {
660 execsql {
661 SELECT a FROM t6 WHERE b IN
662 (SELECT b FROM t6 WHERE a<='b' UNION SELECT '3' AS x
663 ORDER BY x DESC LIMIT 2)
664 ORDER BY a;
665 }
666 } {b d}
667 }
668  
669 } ;#ifcapable compound
670  
671 do_test select1-7.1 {
672 set v [catch {execsql {
673 SELECT f1 FROM test1 WHERE f2=;
674 }} msg]
675 lappend v $msg
676 } {1 {near ";": syntax error}}
677 ifcapable compound {
678 do_test select1-7.2 {
679 set v [catch {execsql {
680 SELECT f1 FROM test1 UNION SELECT WHERE;
681 }} msg]
682 lappend v $msg
683 } {1 {near "WHERE": syntax error}}
684 } ;# ifcapable compound
685 do_test select1-7.3 {
686 set v [catch {execsql {SELECT f1 FROM test1 as 'hi', test2 as}} msg]
687 lappend v $msg
688 } {1 {near "as": syntax error}}
689 do_test select1-7.4 {
690 set v [catch {execsql {
691 SELECT f1 FROM test1 ORDER BY;
692 }} msg]
693 lappend v $msg
694 } {1 {near ";": syntax error}}
695 do_test select1-7.5 {
696 set v [catch {execsql {
697 SELECT f1 FROM test1 ORDER BY f1 desc, f2 where;
698 }} msg]
699 lappend v $msg
700 } {1 {near "where": syntax error}}
701 do_test select1-7.6 {
702 set v [catch {execsql {
703 SELECT count(f1,f2 FROM test1;
704 }} msg]
705 lappend v $msg
706 } {1 {near "FROM": syntax error}}
707 do_test select1-7.7 {
708 set v [catch {execsql {
709 SELECT count(f1,f2+) FROM test1;
710 }} msg]
711 lappend v $msg
712 } {1 {near ")": syntax error}}
713 do_test select1-7.8 {
714 set v [catch {execsql {
715 SELECT f1 FROM test1 ORDER BY f2, f1+;
716 }} msg]
717 lappend v $msg
718 } {1 {near ";": syntax error}}
719 do_test select1-7.9 {
720 catchsql {
721 SELECT f1 FROM test1 LIMIT 5+3 OFFSET 11 ORDER BY f2;
722 }
723 } {1 {near "ORDER": syntax error}}
724  
725 do_test select1-8.1 {
726 execsql {SELECT f1 FROM test1 WHERE 4.3+2.4 OR 1 ORDER BY f1}
727 } {11 33}
728 do_test select1-8.2 {
729 execsql {
730 SELECT f1 FROM test1 WHERE ('x' || f1) BETWEEN 'x10' AND 'x20'
731 ORDER BY f1
732 }
733 } {11}
734 do_test select1-8.3 {
735 execsql {
736 SELECT f1 FROM test1 WHERE 5-3==2
737 ORDER BY f1
738 }
739 } {11 33}
740  
741 # TODO: This test is failing because f1 is now being loaded off the
742 # disk as a vdbe integer, not a string. Hence the value of f1/(f1-11)
743 # changes because of rounding. Disable the test for now.
744 if 0 {
745 do_test select1-8.4 {
746 execsql {
747 SELECT coalesce(f1/(f1-11),'x'),
748 coalesce(min(f1/(f1-11),5),'y'),
749 coalesce(max(f1/(f1-33),6),'z')
750 FROM test1 ORDER BY f1
751 }
752 } {x y 6 1.5 1.5 z}
753 }
754 do_test select1-8.5 {
755 execsql {
756 SELECT min(1,2,3), -max(1,2,3)
757 FROM test1 ORDER BY f1
758 }
759 } {1 -3 1 -3}
760  
761  
762 # Check the behavior when the result set is empty
763 #
764 # SQLite v3 always sets r(*).
765 #
766 # do_test select1-9.1 {
767 # catch {unset r}
768 # set r(*) {}
769 # db eval {SELECT * FROM test1 WHERE f1<0} r {}
770 # set r(*)
771 # } {}
772 do_test select1-9.2 {
773 execsql {PRAGMA empty_result_callbacks=on}
774 catch {unset r}
775 set r(*) {}
776 db eval {SELECT * FROM test1 WHERE f1<0} r {}
777 set r(*)
778 } {f1 f2}
779 ifcapable subquery {
780 do_test select1-9.3 {
781 set r(*) {}
782 db eval {SELECT * FROM test1 WHERE f1<(select count(*) from test2)} r {}
783 set r(*)
784 } {f1 f2}
785 }
786 do_test select1-9.4 {
787 set r(*) {}
788 db eval {SELECT * FROM test1 ORDER BY f1} r {}
789 set r(*)
790 } {f1 f2}
791 do_test select1-9.5 {
792 set r(*) {}
793 db eval {SELECT * FROM test1 WHERE f1<0 ORDER BY f1} r {}
794 set r(*)
795 } {f1 f2}
796 unset r
797  
798 # Check for ORDER BY clauses that refer to an AS name in the column list
799 #
800 do_test select1-10.1 {
801 execsql {
802 SELECT f1 AS x FROM test1 ORDER BY x
803 }
804 } {11 33}
805 do_test select1-10.2 {
806 execsql {
807 SELECT f1 AS x FROM test1 ORDER BY -x
808 }
809 } {33 11}
810 do_test select1-10.3 {
811 execsql {
812 SELECT f1-23 AS x FROM test1 ORDER BY abs(x)
813 }
814 } {10 -12}
815 do_test select1-10.4 {
816 execsql {
817 SELECT f1-23 AS x FROM test1 ORDER BY -abs(x)
818 }
819 } {-12 10}
820 do_test select1-10.5 {
821 execsql {
822 SELECT f1-22 AS x, f2-22 as y FROM test1
823 }
824 } {-11 0 11 22}
825 do_test select1-10.6 {
826 execsql {
827 SELECT f1-22 AS x, f2-22 as y FROM test1 WHERE x>0 AND y<50
828 }
829 } {11 22}
830 do_test select1-10.7 {
831 execsql {
832 SELECT f1 COLLATE nocase AS x FROM test1 ORDER BY x
833 }
834 } {11 33}
835  
836 # Check the ability to specify "TABLE.*" in the result set of a SELECT
837 #
838 do_test select1-11.1 {
839 execsql {
840 DELETE FROM t3;
841 DELETE FROM t4;
842 INSERT INTO t3 VALUES(1,2);
843 INSERT INTO t4 VALUES(3,4);
844 SELECT * FROM t3, t4;
845 }
846 } {1 2 3 4}
847 do_test select1-11.2.1 {
848 execsql {
849 SELECT * FROM t3, t4;
850 }
851 } {1 2 3 4}
852 do_test select1-11.2.2 {
853 execsql2 {
854 SELECT * FROM t3, t4;
855 }
856 } {a 3 b 4 a 3 b 4}
857 do_test select1-11.4.1 {
858 execsql {
859 SELECT t3.*, t4.b FROM t3, t4;
860 }
861 } {1 2 4}
862 do_test select1-11.4.2 {
863 execsql {
864 SELECT "t3".*, t4.b FROM t3, t4;
865 }
866 } {1 2 4}
867 do_test select1-11.5.1 {
868 execsql2 {
869 SELECT t3.*, t4.b FROM t3, t4;
870 }
871 } {a 1 b 4 b 4}
872 do_test select1-11.6 {
873 execsql2 {
874 SELECT x.*, y.b FROM t3 AS x, t4 AS y;
875 }
876 } {a 1 b 4 b 4}
877 do_test select1-11.7 {
878 execsql {
879 SELECT t3.b, t4.* FROM t3, t4;
880 }
881 } {2 3 4}
882 do_test select1-11.8 {
883 execsql2 {
884 SELECT t3.b, t4.* FROM t3, t4;
885 }
886 } {b 4 a 3 b 4}
887 do_test select1-11.9 {
888 execsql2 {
889 SELECT x.b, y.* FROM t3 AS x, t4 AS y;
890 }
891 } {b 4 a 3 b 4}
892 do_test select1-11.10 {
893 catchsql {
894 SELECT t5.* FROM t3, t4;
895 }
896 } {1 {no such table: t5}}
897 do_test select1-11.11 {
898 catchsql {
899 SELECT t3.* FROM t3 AS x, t4;
900 }
901 } {1 {no such table: t3}}
902 ifcapable subquery {
903 do_test select1-11.12 {
904 execsql2 {
905 SELECT t3.* FROM t3, (SELECT max(a), max(b) FROM t4)
906 }
907 } {a 1 b 2}
908 do_test select1-11.13 {
909 execsql2 {
910 SELECT t3.* FROM (SELECT max(a), max(b) FROM t4), t3
911 }
912 } {a 1 b 2}
913 do_test select1-11.14 {
914 execsql2 {
915 SELECT * FROM t3, (SELECT max(a), max(b) FROM t4) AS 'tx'
916 }
917 } {a 1 b 2 max(a) 3 max(b) 4}
918 do_test select1-11.15 {
919 execsql2 {
920 SELECT y.*, t3.* FROM t3, (SELECT max(a), max(b) FROM t4) AS y
921 }
922 } {max(a) 3 max(b) 4 a 1 b 2}
923 }
924 do_test select1-11.16 {
925 execsql2 {
926 SELECT y.* FROM t3 as y, t4 as z
927 }
928 } {a 1 b 2}
929  
930 # Tests of SELECT statements without a FROM clause.
931 #
932 do_test select1-12.1 {
933 execsql2 {
934 SELECT 1+2+3
935 }
936 } {1+2+3 6}
937 do_test select1-12.2 {
938 execsql2 {
939 SELECT 1,'hello',2
940 }
941 } {1 1 'hello' hello 2 2}
942 do_test select1-12.3 {
943 execsql2 {
944 SELECT 1 AS 'a','hello' AS 'b',2 AS 'c'
945 }
946 } {a 1 b hello c 2}
947 do_test select1-12.4 {
948 execsql {
949 DELETE FROM t3;
950 INSERT INTO t3 VALUES(1,2);
951 }
952 } {}
953  
954 ifcapable compound {
955 do_test select1-12.5 {
956 execsql {
957 SELECT * FROM t3 UNION SELECT 3 AS 'a', 4 ORDER BY a;
958 }
959 } {1 2 3 4}
960  
961 do_test select1-12.6 {
962 execsql {
963 SELECT 3, 4 UNION SELECT * FROM t3;
964 }
965 } {1 2 3 4}
966 } ;# ifcapable compound
967  
968 ifcapable subquery {
969 do_test select1-12.7 {
970 execsql {
971 SELECT * FROM t3 WHERE a=(SELECT 1);
972 }
973 } {1 2}
974 do_test select1-12.8 {
975 execsql {
976 SELECT * FROM t3 WHERE a=(SELECT 2);
977 }
978 } {}
979 }
980  
981 ifcapable {compound && subquery} {
982 do_test select1-12.9 {
983 execsql2 {
984 SELECT x FROM (
985 SELECT a AS x, b AS y FROM t3 UNION SELECT a,b FROM t4 ORDER BY a,b
986 ) ORDER BY x;
987 }
988 } {x 1 x 3}
989 do_test select1-12.10 {
990 execsql2 {
991 SELECT z.x FROM (
992 SELECT a AS x,b AS y FROM t3 UNION SELECT a, b FROM t4 ORDER BY a,b
993 ) AS 'z' ORDER BY x;
994 }
995 } {x 1 x 3}
996 } ;# ifcapable compound
997  
998  
999 # Check for a VDBE stack growth problem that existed at one point.
1000 #
1001 ifcapable subquery {
1002 do_test select1-13.1 {
1003 execsql {
1004 BEGIN;
1005 create TABLE abc(a, b, c, PRIMARY KEY(a, b));
1006 INSERT INTO abc VALUES(1, 1, 1);
1007 }
1008 for {set i 0} {$i<10} {incr i} {
1009 execsql {
1010 INSERT INTO abc SELECT a+(select max(a) FROM abc),
1011 b+(select max(a) FROM abc), c+(select max(a) FROM abc) FROM abc;
1012 }
1013 }
1014 execsql {COMMIT}
1015  
1016 # This used to seg-fault when the problem existed.
1017 execsql {
1018 SELECT count(
1019 (SELECT a FROM abc WHERE a = NULL AND b >= upper.c)
1020 ) FROM abc AS upper;
1021 }
1022 } {0}
1023 }
1024  
1025 foreach tab [db eval {SELECT name FROM sqlite_master WHERE type = 'table'}] {
1026 db eval "DROP TABLE $tab"
1027 }
1028 db close
1029 sqlite3 db test.db
1030  
1031 do_test select1-14.1 {
1032 execsql {
1033 SELECT * FROM sqlite_master WHERE rowid>10;
1034 SELECT * FROM sqlite_master WHERE rowid=10;
1035 SELECT * FROM sqlite_master WHERE rowid<10;
1036 SELECT * FROM sqlite_master WHERE rowid<=10;
1037 SELECT * FROM sqlite_master WHERE rowid>=10;
1038 SELECT * FROM sqlite_master;
1039 }
1040 } {}
1041 do_test select1-14.2 {
1042 execsql {
1043 SELECT 10 IN (SELECT rowid FROM sqlite_master);
1044 }
1045 } {0}
1046  
1047 if {[db one {PRAGMA locking_mode}]=="normal"} {
1048 # Check that ticket #3771 has been fixed. This test does not
1049 # work with locking_mode=EXCLUSIVE so disable in that case.
1050 #
1051 do_test select1-15.1 {
1052 execsql {
1053 CREATE TABLE t1(a);
1054 CREATE INDEX i1 ON t1(a);
1055 INSERT INTO t1 VALUES(1);
1056 INSERT INTO t1 VALUES(2);
1057 INSERT INTO t1 VALUES(3);
1058 }
1059 } {}
1060 do_test select1-15.2 {
1061 sqlite3 db2 test.db
1062 execsql { DROP INDEX i1 } db2
1063 db2 close
1064 } {}
1065 do_test select1-15.3 {
1066 execsql { SELECT 2 IN (SELECT a FROM t1) }
1067 } {1}
1068 }
1069  
1070 finish_test