diff options
author | dan miller | 2007-10-20 02:49:29 +0000 |
---|---|---|
committer | dan miller | 2007-10-20 02:49:29 +0000 |
commit | e36d23a85ebff914d74bb541558c2b6082b78edb (patch) | |
tree | 54b58fdf162e78af64055282a6035c8d2443389d /libraries/sqlite/unix/sqlite-3.5.1/test/subselect.test | |
parent | * Fixed an issue whereby avatar chat distances were being calculated against ... (diff) | |
download | opensim-SC-e36d23a85ebff914d74bb541558c2b6082b78edb.zip opensim-SC-e36d23a85ebff914d74bb541558c2b6082b78edb.tar.gz opensim-SC-e36d23a85ebff914d74bb541558c2b6082b78edb.tar.bz2 opensim-SC-e36d23a85ebff914d74bb541558c2b6082b78edb.tar.xz |
sqlite source (unix build) added to libraries
Diffstat (limited to 'libraries/sqlite/unix/sqlite-3.5.1/test/subselect.test')
-rw-r--r-- | libraries/sqlite/unix/sqlite-3.5.1/test/subselect.test | 202 |
1 files changed, 202 insertions, 0 deletions
diff --git a/libraries/sqlite/unix/sqlite-3.5.1/test/subselect.test b/libraries/sqlite/unix/sqlite-3.5.1/test/subselect.test new file mode 100644 index 0000000..a43bca3 --- /dev/null +++ b/libraries/sqlite/unix/sqlite-3.5.1/test/subselect.test | |||
@@ -0,0 +1,202 @@ | |||
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 SELECT statements that are part of | ||
13 | # expressions. | ||
14 | # | ||
15 | # $Id: subselect.test,v 1.14 2007/04/12 03:54:39 drh Exp $ | ||
16 | |||
17 | set testdir [file dirname $argv0] | ||
18 | source $testdir/tester.tcl | ||
19 | |||
20 | # Omit this whole file if the library is build without subquery support. | ||
21 | ifcapable !subquery { | ||
22 | finish_test | ||
23 | return | ||
24 | } | ||
25 | |||
26 | # Basic sanity checking. Try a simple subselect. | ||
27 | # | ||
28 | do_test subselect-1.1 { | ||
29 | execsql { | ||
30 | CREATE TABLE t1(a int, b int); | ||
31 | INSERT INTO t1 VALUES(1,2); | ||
32 | INSERT INTO t1 VALUES(3,4); | ||
33 | INSERT INTO t1 VALUES(5,6); | ||
34 | } | ||
35 | execsql {SELECT * FROM t1 WHERE a = (SELECT count(*) FROM t1)} | ||
36 | } {3 4} | ||
37 | |||
38 | # Try a select with more than one result column. | ||
39 | # | ||
40 | do_test subselect-1.2 { | ||
41 | set v [catch {execsql {SELECT * FROM t1 WHERE a = (SELECT * FROM t1)}} msg] | ||
42 | lappend v $msg | ||
43 | } {1 {only a single result allowed for a SELECT that is part of an expression}} | ||
44 | |||
45 | # A subselect without an aggregate. | ||
46 | # | ||
47 | do_test subselect-1.3a { | ||
48 | execsql {SELECT b from t1 where a = (SELECT a FROM t1 WHERE b=2)} | ||
49 | } {2} | ||
50 | do_test subselect-1.3b { | ||
51 | execsql {SELECT b from t1 where a = (SELECT a FROM t1 WHERE b=4)} | ||
52 | } {4} | ||
53 | do_test subselect-1.3c { | ||
54 | execsql {SELECT b from t1 where a = (SELECT a FROM t1 WHERE b=6)} | ||
55 | } {6} | ||
56 | do_test subselect-1.3c { | ||
57 | execsql {SELECT b from t1 where a = (SELECT a FROM t1 WHERE b=8)} | ||
58 | } {} | ||
59 | |||
60 | # What if the subselect doesn't return any value. We should get | ||
61 | # NULL as the result. Check it out. | ||
62 | # | ||
63 | do_test subselect-1.4 { | ||
64 | execsql {SELECT b from t1 where a = coalesce((SELECT a FROM t1 WHERE b=5),1)} | ||
65 | } {2} | ||
66 | |||
67 | # Try multiple subselects within a single expression. | ||
68 | # | ||
69 | do_test subselect-1.5 { | ||
70 | execsql { | ||
71 | CREATE TABLE t2(x int, y int); | ||
72 | INSERT INTO t2 VALUES(1,2); | ||
73 | INSERT INTO t2 VALUES(2,4); | ||
74 | INSERT INTO t2 VALUES(3,8); | ||
75 | INSERT INTO t2 VALUES(4,16); | ||
76 | } | ||
77 | execsql { | ||
78 | SELECT y from t2 | ||
79 | WHERE x = (SELECT sum(b) FROM t1 where a notnull) - (SELECT sum(a) FROM t1) | ||
80 | } | ||
81 | } {8} | ||
82 | |||
83 | # Try something useful. Delete every entry from t2 where the | ||
84 | # x value is less than half of the maximum. | ||
85 | # | ||
86 | do_test subselect-1.6 { | ||
87 | execsql {DELETE FROM t2 WHERE x < 0.5*(SELECT max(x) FROM t2)} | ||
88 | execsql {SELECT x FROM t2 ORDER BY x} | ||
89 | } {2 3 4} | ||
90 | |||
91 | # Make sure sorting works for SELECTs there used as a scalar expression. | ||
92 | # | ||
93 | do_test subselect-2.1 { | ||
94 | execsql { | ||
95 | SELECT (SELECT a FROM t1 ORDER BY a), (SELECT a FROM t1 ORDER BY a DESC) | ||
96 | } | ||
97 | } {1 5} | ||
98 | do_test subselect-2.2 { | ||
99 | execsql { | ||
100 | SELECT 1 IN (SELECT a FROM t1 ORDER BY a); | ||
101 | } | ||
102 | } {1} | ||
103 | do_test subselect-2.3 { | ||
104 | execsql { | ||
105 | SELECT 2 IN (SELECT a FROM t1 ORDER BY a DESC); | ||
106 | } | ||
107 | } {0} | ||
108 | |||
109 | # Verify that the ORDER BY clause is honored in a subquery. | ||
110 | # | ||
111 | ifcapable compound { | ||
112 | do_test subselect-3.1 { | ||
113 | execsql { | ||
114 | CREATE TABLE t3(x int); | ||
115 | INSERT INTO t3 SELECT a FROM t1 UNION ALL SELECT b FROM t1; | ||
116 | SELECT * FROM t3 ORDER BY x; | ||
117 | } | ||
118 | } {1 2 3 4 5 6} | ||
119 | } ;# ifcapable compound | ||
120 | ifcapable !compound { | ||
121 | do_test subselect-3.1 { | ||
122 | execsql { | ||
123 | CREATE TABLE t3(x int); | ||
124 | INSERT INTO t3 SELECT a FROM t1; | ||
125 | INSERT INTO t3 SELECT b FROM t1; | ||
126 | SELECT * FROM t3 ORDER BY x; | ||
127 | } | ||
128 | } {1 2 3 4 5 6} | ||
129 | } ;# ifcapable !compound | ||
130 | |||
131 | do_test subselect-3.2 { | ||
132 | execsql { | ||
133 | SELECT sum(x) FROM (SELECT x FROM t3 ORDER BY x LIMIT 2); | ||
134 | } | ||
135 | } {3} | ||
136 | do_test subselect-3.3 { | ||
137 | execsql { | ||
138 | SELECT sum(x) FROM (SELECT x FROM t3 ORDER BY x DESC LIMIT 2); | ||
139 | } | ||
140 | } {11} | ||
141 | do_test subselect-3.4 { | ||
142 | execsql { | ||
143 | SELECT (SELECT x FROM t3 ORDER BY x); | ||
144 | } | ||
145 | } {1} | ||
146 | do_test subselect-3.5 { | ||
147 | execsql { | ||
148 | SELECT (SELECT x FROM t3 ORDER BY x DESC); | ||
149 | } | ||
150 | } {6} | ||
151 | do_test subselect-3.6 { | ||
152 | execsql { | ||
153 | SELECT (SELECT x FROM t3 ORDER BY x LIMIT 1); | ||
154 | } | ||
155 | } {1} | ||
156 | do_test subselect-3.7 { | ||
157 | execsql { | ||
158 | SELECT (SELECT x FROM t3 ORDER BY x DESC LIMIT 1); | ||
159 | } | ||
160 | } {6} | ||
161 | do_test subselect-3.8 { | ||
162 | execsql { | ||
163 | SELECT (SELECT x FROM t3 ORDER BY x LIMIT 1 OFFSET 2); | ||
164 | } | ||
165 | } {3} | ||
166 | do_test subselect-3.9 { | ||
167 | execsql { | ||
168 | SELECT (SELECT x FROM t3 ORDER BY x DESC LIMIT 1 OFFSET 2); | ||
169 | } | ||
170 | } {4} | ||
171 | do_test subselect-3.10 { | ||
172 | execsql { | ||
173 | SELECT x FROM t3 WHERE x IN | ||
174 | (SELECT x FROM t3 ORDER BY x DESC LIMIT 1 OFFSET 2); | ||
175 | } | ||
176 | } {4} | ||
177 | |||
178 | # Ticket #2295. | ||
179 | # Make sure type affinities work correctly on subqueries with | ||
180 | # an ORDER BY clause. | ||
181 | # | ||
182 | do_test subselect-4.1 { | ||
183 | execsql { | ||
184 | CREATE TABLE t4(a TEXT, b TEXT); | ||
185 | INSERT INTO t4 VALUES('a','1'); | ||
186 | INSERT INTO t4 VALUES('b','2'); | ||
187 | INSERT INTO t4 VALUES('c','3'); | ||
188 | SELECT a FROM t4 WHERE b IN (SELECT b FROM t4 ORDER BY b); | ||
189 | } | ||
190 | } {a b c} | ||
191 | do_test subselect-4.2 { | ||
192 | execsql { | ||
193 | SELECT a FROM t4 WHERE b IN (SELECT b FROM t4 ORDER BY b LIMIT 1); | ||
194 | } | ||
195 | } {a} | ||
196 | do_test subselect-4.3 { | ||
197 | execsql { | ||
198 | SELECT a FROM t4 WHERE b IN (SELECT b FROM t4 ORDER BY b DESC LIMIT 1); | ||
199 | } | ||
200 | } {c} | ||
201 | |||
202 | finish_test | ||