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/delete.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/delete.test')
-rw-r--r-- | libraries/sqlite/unix/sqlite-3.5.1/test/delete.test | 313 |
1 files changed, 313 insertions, 0 deletions
diff --git a/libraries/sqlite/unix/sqlite-3.5.1/test/delete.test b/libraries/sqlite/unix/sqlite-3.5.1/test/delete.test new file mode 100644 index 0000000..0409ba9 --- /dev/null +++ b/libraries/sqlite/unix/sqlite-3.5.1/test/delete.test | |||
@@ -0,0 +1,313 @@ | |||
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 DELETE FROM statement. | ||
13 | # | ||
14 | # $Id: delete.test,v 1.21 2006/01/03 00:33:50 drh Exp $ | ||
15 | |||
16 | set testdir [file dirname $argv0] | ||
17 | source $testdir/tester.tcl | ||
18 | |||
19 | # Try to delete from a non-existant table. | ||
20 | # | ||
21 | do_test delete-1.1 { | ||
22 | set v [catch {execsql {DELETE FROM test1}} msg] | ||
23 | lappend v $msg | ||
24 | } {1 {no such table: test1}} | ||
25 | |||
26 | # Try to delete from sqlite_master | ||
27 | # | ||
28 | do_test delete-2.1 { | ||
29 | set v [catch {execsql {DELETE FROM sqlite_master}} msg] | ||
30 | lappend v $msg | ||
31 | } {1 {table sqlite_master may not be modified}} | ||
32 | |||
33 | # Delete selected entries from a table with and without an index. | ||
34 | # | ||
35 | do_test delete-3.1.1 { | ||
36 | execsql {CREATE TABLE table1(f1 int, f2 int)} | ||
37 | execsql {INSERT INTO table1 VALUES(1,2)} | ||
38 | execsql {INSERT INTO table1 VALUES(2,4)} | ||
39 | execsql {INSERT INTO table1 VALUES(3,8)} | ||
40 | execsql {INSERT INTO table1 VALUES(4,16)} | ||
41 | execsql {SELECT * FROM table1 ORDER BY f1} | ||
42 | } {1 2 2 4 3 8 4 16} | ||
43 | do_test delete-3.1.2 { | ||
44 | execsql {DELETE FROM table1 WHERE f1=3} | ||
45 | } {} | ||
46 | do_test delete-3.1.3 { | ||
47 | execsql {SELECT * FROM table1 ORDER BY f1} | ||
48 | } {1 2 2 4 4 16} | ||
49 | do_test delete-3.1.4 { | ||
50 | execsql {CREATE INDEX index1 ON table1(f1)} | ||
51 | execsql {PRAGMA count_changes=on} | ||
52 | ifcapable explain { | ||
53 | execsql {EXPLAIN DELETE FROM table1 WHERE f1=3} | ||
54 | } | ||
55 | execsql {DELETE FROM 'table1' WHERE f1=3} | ||
56 | } {0} | ||
57 | do_test delete-3.1.5 { | ||
58 | execsql {SELECT * FROM table1 ORDER BY f1} | ||
59 | } {1 2 2 4 4 16} | ||
60 | do_test delete-3.1.6.1 { | ||
61 | execsql {DELETE FROM table1 WHERE f1=2} | ||
62 | } {1} | ||
63 | do_test delete-3.1.6.2 { | ||
64 | db changes | ||
65 | } 1 | ||
66 | do_test delete-3.1.7 { | ||
67 | execsql {SELECT * FROM table1 ORDER BY f1} | ||
68 | } {1 2 4 16} | ||
69 | integrity_check delete-3.2 | ||
70 | |||
71 | |||
72 | # Semantic errors in the WHERE clause | ||
73 | # | ||
74 | do_test delete-4.1 { | ||
75 | execsql {CREATE TABLE table2(f1 int, f2 int)} | ||
76 | set v [catch {execsql {DELETE FROM table2 WHERE f3=5}} msg] | ||
77 | lappend v $msg | ||
78 | } {1 {no such column: f3}} | ||
79 | |||
80 | do_test delete-4.2 { | ||
81 | set v [catch {execsql {DELETE FROM table2 WHERE xyzzy(f1+4)}} msg] | ||
82 | lappend v $msg | ||
83 | } {1 {no such function: xyzzy}} | ||
84 | integrity_check delete-4.3 | ||
85 | |||
86 | # Lots of deletes | ||
87 | # | ||
88 | do_test delete-5.1.1 { | ||
89 | execsql {DELETE FROM table1} | ||
90 | } {2} | ||
91 | do_test delete-5.1.2 { | ||
92 | execsql {SELECT count(*) FROM table1} | ||
93 | } {0} | ||
94 | do_test delete-5.2.1 { | ||
95 | execsql {BEGIN TRANSACTION} | ||
96 | for {set i 1} {$i<=200} {incr i} { | ||
97 | execsql "INSERT INTO table1 VALUES($i,[expr {$i*$i}])" | ||
98 | } | ||
99 | execsql {COMMIT} | ||
100 | execsql {SELECT count(*) FROM table1} | ||
101 | } {200} | ||
102 | do_test delete-5.2.2 { | ||
103 | execsql {DELETE FROM table1} | ||
104 | } {200} | ||
105 | do_test delete-5.2.3 { | ||
106 | execsql {BEGIN TRANSACTION} | ||
107 | for {set i 1} {$i<=200} {incr i} { | ||
108 | execsql "INSERT INTO table1 VALUES($i,[expr {$i*$i}])" | ||
109 | } | ||
110 | execsql {COMMIT} | ||
111 | execsql {SELECT count(*) FROM table1} | ||
112 | } {200} | ||
113 | do_test delete-5.2.4 { | ||
114 | execsql {PRAGMA count_changes=off} | ||
115 | execsql {DELETE FROM table1} | ||
116 | } {} | ||
117 | do_test delete-5.2.5 { | ||
118 | execsql {SELECT count(*) FROM table1} | ||
119 | } {0} | ||
120 | do_test delete-5.2.6 { | ||
121 | execsql {BEGIN TRANSACTION} | ||
122 | for {set i 1} {$i<=200} {incr i} { | ||
123 | execsql "INSERT INTO table1 VALUES($i,[expr {$i*$i}])" | ||
124 | } | ||
125 | execsql {COMMIT} | ||
126 | execsql {SELECT count(*) FROM table1} | ||
127 | } {200} | ||
128 | do_test delete-5.3 { | ||
129 | for {set i 1} {$i<=200} {incr i 4} { | ||
130 | execsql "DELETE FROM table1 WHERE f1==$i" | ||
131 | } | ||
132 | execsql {SELECT count(*) FROM table1} | ||
133 | } {150} | ||
134 | do_test delete-5.4.1 { | ||
135 | execsql "DELETE FROM table1 WHERE f1>50" | ||
136 | db changes | ||
137 | } [db one {SELECT count(*) FROM table1 WHERE f1>50}] | ||
138 | do_test delete-5.4.2 { | ||
139 | execsql {SELECT count(*) FROM table1} | ||
140 | } {37} | ||
141 | do_test delete-5.5 { | ||
142 | for {set i 1} {$i<=70} {incr i 3} { | ||
143 | execsql "DELETE FROM table1 WHERE f1==$i" | ||
144 | } | ||
145 | execsql {SELECT f1 FROM table1 ORDER BY f1} | ||
146 | } {2 3 6 8 11 12 14 15 18 20 23 24 26 27 30 32 35 36 38 39 42 44 47 48 50} | ||
147 | do_test delete-5.6 { | ||
148 | for {set i 1} {$i<40} {incr i} { | ||
149 | execsql "DELETE FROM table1 WHERE f1==$i" | ||
150 | } | ||
151 | execsql {SELECT f1 FROM table1 ORDER BY f1} | ||
152 | } {42 44 47 48 50} | ||
153 | do_test delete-5.7 { | ||
154 | execsql "DELETE FROM table1 WHERE f1!=48" | ||
155 | execsql {SELECT f1 FROM table1 ORDER BY f1} | ||
156 | } {48} | ||
157 | integrity_check delete-5.8 | ||
158 | |||
159 | |||
160 | # Delete large quantities of data. We want to test the List overflow | ||
161 | # mechanism in the vdbe. | ||
162 | # | ||
163 | do_test delete-6.1 { | ||
164 | execsql {BEGIN; DELETE FROM table1} | ||
165 | for {set i 1} {$i<=3000} {incr i} { | ||
166 | execsql "INSERT INTO table1 VALUES($i,[expr {$i*$i}])" | ||
167 | } | ||
168 | execsql {DELETE FROM table2} | ||
169 | for {set i 1} {$i<=3000} {incr i} { | ||
170 | execsql "INSERT INTO table2 VALUES($i,[expr {$i*$i}])" | ||
171 | } | ||
172 | execsql {COMMIT} | ||
173 | execsql {SELECT count(*) FROM table1} | ||
174 | } {3000} | ||
175 | do_test delete-6.2 { | ||
176 | execsql {SELECT count(*) FROM table2} | ||
177 | } {3000} | ||
178 | do_test delete-6.3 { | ||
179 | execsql {SELECT f1 FROM table1 WHERE f1<10 ORDER BY f1} | ||
180 | } {1 2 3 4 5 6 7 8 9} | ||
181 | do_test delete-6.4 { | ||
182 | execsql {SELECT f1 FROM table2 WHERE f1<10 ORDER BY f1} | ||
183 | } {1 2 3 4 5 6 7 8 9} | ||
184 | do_test delete-6.5.1 { | ||
185 | execsql {DELETE FROM table1 WHERE f1>7} | ||
186 | db changes | ||
187 | } {2993} | ||
188 | do_test delete-6.5.2 { | ||
189 | execsql {SELECT f1 FROM table1 ORDER BY f1} | ||
190 | } {1 2 3 4 5 6 7} | ||
191 | do_test delete-6.6 { | ||
192 | execsql {DELETE FROM table2 WHERE f1>7} | ||
193 | execsql {SELECT f1 FROM table2 ORDER BY f1} | ||
194 | } {1 2 3 4 5 6 7} | ||
195 | do_test delete-6.7 { | ||
196 | execsql {DELETE FROM table1} | ||
197 | execsql {SELECT f1 FROM table1} | ||
198 | } {} | ||
199 | do_test delete-6.8 { | ||
200 | execsql {INSERT INTO table1 VALUES(2,3)} | ||
201 | execsql {SELECT f1 FROM table1} | ||
202 | } {2} | ||
203 | do_test delete-6.9 { | ||
204 | execsql {DELETE FROM table2} | ||
205 | execsql {SELECT f1 FROM table2} | ||
206 | } {} | ||
207 | do_test delete-6.10 { | ||
208 | execsql {INSERT INTO table2 VALUES(2,3)} | ||
209 | execsql {SELECT f1 FROM table2} | ||
210 | } {2} | ||
211 | integrity_check delete-6.11 | ||
212 | |||
213 | do_test delete-7.1 { | ||
214 | execsql { | ||
215 | CREATE TABLE t3(a); | ||
216 | INSERT INTO t3 VALUES(1); | ||
217 | INSERT INTO t3 SELECT a+1 FROM t3; | ||
218 | INSERT INTO t3 SELECT a+2 FROM t3; | ||
219 | SELECT * FROM t3; | ||
220 | } | ||
221 | } {1 2 3 4} | ||
222 | ifcapable {trigger} { | ||
223 | do_test delete-7.2 { | ||
224 | execsql { | ||
225 | CREATE TABLE cnt(del); | ||
226 | INSERT INTO cnt VALUES(0); | ||
227 | CREATE TRIGGER r1 AFTER DELETE ON t3 FOR EACH ROW BEGIN | ||
228 | UPDATE cnt SET del=del+1; | ||
229 | END; | ||
230 | DELETE FROM t3 WHERE a<2; | ||
231 | SELECT * FROM t3; | ||
232 | } | ||
233 | } {2 3 4} | ||
234 | do_test delete-7.3 { | ||
235 | execsql { | ||
236 | SELECT * FROM cnt; | ||
237 | } | ||
238 | } {1} | ||
239 | do_test delete-7.4 { | ||
240 | execsql { | ||
241 | DELETE FROM t3; | ||
242 | SELECT * FROM t3; | ||
243 | } | ||
244 | } {} | ||
245 | do_test delete-7.5 { | ||
246 | execsql { | ||
247 | SELECT * FROM cnt; | ||
248 | } | ||
249 | } {4} | ||
250 | do_test delete-7.6 { | ||
251 | execsql { | ||
252 | INSERT INTO t3 VALUES(1); | ||
253 | INSERT INTO t3 SELECT a+1 FROM t3; | ||
254 | INSERT INTO t3 SELECT a+2 FROM t3; | ||
255 | CREATE TABLE t4 AS SELECT * FROM t3; | ||
256 | PRAGMA count_changes=ON; | ||
257 | DELETE FROM t3; | ||
258 | DELETE FROM t4; | ||
259 | } | ||
260 | } {4 4} | ||
261 | } ;# endif trigger | ||
262 | ifcapable {!trigger} { | ||
263 | execsql {DELETE FROM t3} | ||
264 | } | ||
265 | integrity_check delete-7.7 | ||
266 | |||
267 | # Make sure error messages are consistent when attempting to delete | ||
268 | # from a read-only database. Ticket #304. | ||
269 | # | ||
270 | do_test delete-8.0 { | ||
271 | execsql { | ||
272 | PRAGMA count_changes=OFF; | ||
273 | INSERT INTO t3 VALUES(123); | ||
274 | SELECT * FROM t3; | ||
275 | } | ||
276 | } {123} | ||
277 | db close | ||
278 | catch {file attributes test.db -permissions 0444} | ||
279 | catch {file attributes test.db -readonly 1} | ||
280 | sqlite3 db test.db | ||
281 | set ::DB [sqlite3_connection_pointer db] | ||
282 | do_test delete-8.1 { | ||
283 | catchsql { | ||
284 | DELETE FROM t3; | ||
285 | } | ||
286 | } {1 {attempt to write a readonly database}} | ||
287 | do_test delete-8.2 { | ||
288 | execsql {SELECT * FROM t3} | ||
289 | } {123} | ||
290 | do_test delete-8.3 { | ||
291 | catchsql { | ||
292 | DELETE FROM t3 WHERE 1; | ||
293 | } | ||
294 | } {1 {attempt to write a readonly database}} | ||
295 | do_test delete-8.4 { | ||
296 | execsql {SELECT * FROM t3} | ||
297 | } {123} | ||
298 | |||
299 | # Update for v3: In v2 the DELETE statement would succeed because no | ||
300 | # database writes actually occur. Version 3 refuses to open a transaction | ||
301 | # on a read-only file, so the statement fails. | ||
302 | do_test delete-8.5 { | ||
303 | catchsql { | ||
304 | DELETE FROM t3 WHERE a<100; | ||
305 | } | ||
306 | # v2 result: {0 {}} | ||
307 | } {1 {attempt to write a readonly database}} | ||
308 | do_test delete-8.6 { | ||
309 | execsql {SELECT * FROM t3} | ||
310 | } {123} | ||
311 | integrity_check delete-8.7 | ||
312 | |||
313 | finish_test | ||