aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/libraries/sqlite/unix/sqlite-3.5.1/test/tclsqlite.test
diff options
context:
space:
mode:
authordan miller2007-10-20 02:49:29 +0000
committerdan miller2007-10-20 02:49:29 +0000
commite36d23a85ebff914d74bb541558c2b6082b78edb (patch)
tree54b58fdf162e78af64055282a6035c8d2443389d /libraries/sqlite/unix/sqlite-3.5.1/test/tclsqlite.test
parent* Fixed an issue whereby avatar chat distances were being calculated against ... (diff)
downloadopensim-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/tclsqlite.test')
-rw-r--r--libraries/sqlite/unix/sqlite-3.5.1/test/tclsqlite.test496
1 files changed, 496 insertions, 0 deletions
diff --git a/libraries/sqlite/unix/sqlite-3.5.1/test/tclsqlite.test b/libraries/sqlite/unix/sqlite-3.5.1/test/tclsqlite.test
new file mode 100644
index 0000000..50bdf63
--- /dev/null
+++ b/libraries/sqlite/unix/sqlite-3.5.1/test/tclsqlite.test
@@ -0,0 +1,496 @@
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 TCL interface to the
12# SQLite library.
13#
14# Actually, all tests are based on the TCL interface, so the main
15# interface is pretty well tested. This file contains some addition
16# tests for fringe issues that the main test suite does not cover.
17#
18# $Id: tclsqlite.test,v 1.62 2007/09/12 17:01:45 danielk1977 Exp $
19
20set testdir [file dirname $argv0]
21source $testdir/tester.tcl
22
23# Check the error messages generated by tclsqlite
24#
25if {[sqlite3 -has-codec]} {
26 set r "sqlite_orig HANDLE FILENAME ?-key CODEC-KEY?"
27} else {
28 set r "sqlite3 HANDLE FILENAME ?-vfs VFSNAME? ?-readonly BOOLEAN? ?-create BOOLEAN?"
29}
30do_test tcl-1.1 {
31 set v [catch {sqlite3 bogus} msg]
32 lappend v $msg
33} [list 1 "wrong # args: should be \"$r\""]
34do_test tcl-1.2 {
35 set v [catch {db bogus} msg]
36 lappend v $msg
37} {1 {bad option "bogus": must be authorizer, busy, cache, changes, close, collate, collation_needed, commit_hook, complete, copy, enable_load_extension, errorcode, eval, exists, function, incrblob, interrupt, last_insert_rowid, nullvalue, onecolumn, profile, progress, rekey, rollback_hook, timeout, total_changes, trace, transaction, update_hook, or version}}
38do_test tcl-1.3 {
39 execsql {CREATE TABLE t1(a int, b int)}
40 execsql {INSERT INTO t1 VALUES(10,20)}
41 set v [catch {
42 db eval {SELECT * FROM t1} data {
43 error "The error message"
44 }
45 } msg]
46 lappend v $msg
47} {1 {The error message}}
48do_test tcl-1.4 {
49 set v [catch {
50 db eval {SELECT * FROM t2} data {
51 error "The error message"
52 }
53 } msg]
54 lappend v $msg
55} {1 {no such table: t2}}
56do_test tcl-1.5 {
57 set v [catch {
58 db eval {SELECT * FROM t1} data {
59 break
60 }
61 } msg]
62 lappend v $msg
63} {0 {}}
64do_test tcl-1.6 {
65 set v [catch {
66 db eval {SELECT * FROM t1} data {
67 expr x*
68 }
69 } msg]
70 regsub {:.*$} $msg {} msg
71 lappend v $msg
72} {1 {syntax error in expression "x*"}}
73do_test tcl-1.7 {
74 set v [catch {db} msg]
75 lappend v $msg
76} {1 {wrong # args: should be "db SUBCOMMAND ..."}}
77if {[catch {db auth {}}]==0} {
78 do_test tcl-1.8 {
79 set v [catch {db authorizer 1 2 3} msg]
80 lappend v $msg
81 } {1 {wrong # args: should be "db authorizer ?CALLBACK?"}}
82}
83do_test tcl-1.9 {
84 set v [catch {db busy 1 2 3} msg]
85 lappend v $msg
86} {1 {wrong # args: should be "db busy CALLBACK"}}
87do_test tcl-1.10 {
88 set v [catch {db progress 1} msg]
89 lappend v $msg
90} {1 {wrong # args: should be "db progress N CALLBACK"}}
91do_test tcl-1.11 {
92 set v [catch {db changes xyz} msg]
93 lappend v $msg
94} {1 {wrong # args: should be "db changes "}}
95do_test tcl-1.12 {
96 set v [catch {db commit_hook a b c} msg]
97 lappend v $msg
98} {1 {wrong # args: should be "db commit_hook ?CALLBACK?"}}
99ifcapable {complete} {
100 do_test tcl-1.13 {
101 set v [catch {db complete} msg]
102 lappend v $msg
103 } {1 {wrong # args: should be "db complete SQL"}}
104}
105do_test tcl-1.14 {
106 set v [catch {db eval} msg]
107 lappend v $msg
108} {1 {wrong # args: should be "db eval SQL ?ARRAY-NAME? ?SCRIPT?"}}
109do_test tcl-1.15 {
110 set v [catch {db function} msg]
111 lappend v $msg
112} {1 {wrong # args: should be "db function NAME SCRIPT"}}
113do_test tcl-1.16 {
114 set v [catch {db last_insert_rowid xyz} msg]
115 lappend v $msg
116} {1 {wrong # args: should be "db last_insert_rowid "}}
117do_test tcl-1.17 {
118 set v [catch {db rekey} msg]
119 lappend v $msg
120} {1 {wrong # args: should be "db rekey KEY"}}
121do_test tcl-1.18 {
122 set v [catch {db timeout} msg]
123 lappend v $msg
124} {1 {wrong # args: should be "db timeout MILLISECONDS"}}
125do_test tcl-1.19 {
126 set v [catch {db collate} msg]
127 lappend v $msg
128} {1 {wrong # args: should be "db collate NAME SCRIPT"}}
129do_test tcl-1.20 {
130 set v [catch {db collation_needed} msg]
131 lappend v $msg
132} {1 {wrong # args: should be "db collation_needed SCRIPT"}}
133do_test tcl-1.21 {
134 set v [catch {db total_changes xyz} msg]
135 lappend v $msg
136} {1 {wrong # args: should be "db total_changes "}}
137do_test tcl-1.20 {
138 set v [catch {db copy} msg]
139 lappend v $msg
140} {1 {wrong # args: should be "db copy CONFLICT-ALGORITHM TABLE FILENAME ?SEPARATOR? ?NULLINDICATOR?"}}
141do_test tcl-1.21 {
142 set v [catch {sqlite3 db2 test.db -vfs nosuchvfs} msg]
143 lappend v $msg
144} {1 {no such vfs: nosuchvfs}}
145
146catch {unset ::result}
147do_test tcl-2.1 {
148 execsql "CREATE TABLE t\u0123x(a int, b\u1235 float)"
149} {}
150ifcapable schema_pragmas {
151 do_test tcl-2.2 {
152 execsql "PRAGMA table_info(t\u0123x)"
153 } "0 a int 0 {} 0 1 b\u1235 float 0 {} 0"
154}
155do_test tcl-2.3 {
156 execsql "INSERT INTO t\u0123x VALUES(1,2.3)"
157 db eval "SELECT * FROM t\u0123x" result break
158 set result(*)
159} "a b\u1235"
160
161
162# Test the onecolumn method
163#
164do_test tcl-3.1 {
165 execsql {
166 INSERT INTO t1 SELECT a*2, b*2 FROM t1;
167 INSERT INTO t1 SELECT a*2+1, b*2+1 FROM t1;
168 INSERT INTO t1 SELECT a*2+3, b*2+3 FROM t1;
169 }
170 set rc [catch {db onecolumn {SELECT * FROM t1 ORDER BY a}} msg]
171 lappend rc $msg
172} {0 10}
173do_test tcl-3.2 {
174 db onecolumn {SELECT * FROM t1 WHERE a<0}
175} {}
176do_test tcl-3.3 {
177 set rc [catch {db onecolumn} errmsg]
178 lappend rc $errmsg
179} {1 {wrong # args: should be "db onecolumn SQL"}}
180do_test tcl-3.4 {
181 set rc [catch {db onecolumn {SELECT bogus}} errmsg]
182 lappend rc $errmsg
183} {1 {no such column: bogus}}
184ifcapable {tclvar} {
185 do_test tcl-3.5 {
186 set b 50
187 set rc [catch {db one {SELECT * FROM t1 WHERE b>$b}} msg]
188 lappend rc $msg
189 } {0 41}
190 do_test tcl-3.6 {
191 set b 500
192 set rc [catch {db one {SELECT * FROM t1 WHERE b>$b}} msg]
193 lappend rc $msg
194 } {0 {}}
195 do_test tcl-3.7 {
196 set b 500
197 set rc [catch {db one {
198 INSERT INTO t1 VALUES(99,510);
199 SELECT * FROM t1 WHERE b>$b
200 }} msg]
201 lappend rc $msg
202 } {0 99}
203}
204ifcapable {!tclvar} {
205 execsql {INSERT INTO t1 VALUES(99,510)}
206}
207
208# Turn the busy handler on and off
209#
210do_test tcl-4.1 {
211 proc busy_callback {cnt} {
212 break
213 }
214 db busy busy_callback
215 db busy
216} {busy_callback}
217do_test tcl-4.2 {
218 db busy {}
219 db busy
220} {}
221
222ifcapable {tclvar} {
223 # Parsing of TCL variable names within SQL into bound parameters.
224 #
225 do_test tcl-5.1 {
226 execsql {CREATE TABLE t3(a,b,c)}
227 catch {unset x}
228 set x(1) 5
229 set x(2) 7
230 execsql {
231 INSERT INTO t3 VALUES($::x(1),$::x(2),$::x(3));
232 SELECT * FROM t3
233 }
234 } {5 7 {}}
235 do_test tcl-5.2 {
236 execsql {
237 SELECT typeof(a), typeof(b), typeof(c) FROM t3
238 }
239 } {text text null}
240 do_test tcl-5.3 {
241 catch {unset x}
242 set x [binary format h12 686900686f00]
243 execsql {
244 UPDATE t3 SET a=$::x;
245 }
246 db eval {
247 SELECT a FROM t3
248 } break
249 binary scan $a h12 adata
250 set adata
251 } {686900686f00}
252 do_test tcl-5.4 {
253 execsql {
254 SELECT typeof(a), typeof(b), typeof(c) FROM t3
255 }
256 } {blob text null}
257}
258
259# Operation of "break" and "continue" within row scripts
260#
261do_test tcl-6.1 {
262 db eval {SELECT * FROM t1} {
263 break
264 }
265 lappend a $b
266} {10 20}
267do_test tcl-6.2 {
268 set cnt 0
269 db eval {SELECT * FROM t1} {
270 if {$a>40} continue
271 incr cnt
272 }
273 set cnt
274} {4}
275do_test tcl-6.3 {
276 set cnt 0
277 db eval {SELECT * FROM t1} {
278 if {$a<40} continue
279 incr cnt
280 }
281 set cnt
282} {5}
283do_test tcl-6.4 {
284 proc return_test {x} {
285 db eval {SELECT * FROM t1} {
286 if {$a==$x} {return $b}
287 }
288 }
289 return_test 10
290} 20
291do_test tcl-6.5 {
292 return_test 20
293} 40
294do_test tcl-6.6 {
295 return_test 99
296} 510
297do_test tcl-6.7 {
298 return_test 0
299} {}
300
301do_test tcl-7.1 {
302 db version
303 expr 0
304} {0}
305
306# modify and reset the NULL representation
307#
308do_test tcl-8.1 {
309 db nullvalue NaN
310 execsql {INSERT INTO t1 VALUES(30,NULL)}
311 db eval {SELECT * FROM t1 WHERE b IS NULL}
312} {30 NaN}
313do_test tcl-8.2 {
314 db nullvalue NULL
315 db nullvalue
316} {NULL}
317do_test tcl-8.3 {
318 db nullvalue {}
319 db eval {SELECT * FROM t1 WHERE b IS NULL}
320} {30 {}}
321
322# Test the return type of user-defined functions
323#
324do_test tcl-9.1 {
325 db function ret_str {return "hi"}
326 execsql {SELECT typeof(ret_str())}
327} {text}
328do_test tcl-9.2 {
329 db function ret_dbl {return [expr {rand()*0.5}]}
330 execsql {SELECT typeof(ret_dbl())}
331} {real}
332do_test tcl-9.3 {
333 db function ret_int {return [expr {int(rand()*200)}]}
334 execsql {SELECT typeof(ret_int())}
335} {integer}
336
337# Recursive calls to the same user-defined function
338#
339ifcapable tclvar {
340 do_test tcl-9.10 {
341 proc userfunc_r1 {n} {
342 if {$n<=0} {return 0}
343 set nm1 [expr {$n-1}]
344 return [expr {[db eval {SELECT r1($nm1)}]+$n}]
345 }
346 db function r1 userfunc_r1
347 execsql {SELECT r1(10)}
348 } {55}
349 do_test tcl-9.11 {
350 execsql {SELECT r1(100)}
351 } {5050}
352}
353
354# Tests for the new transaction method
355#
356do_test tcl-10.1 {
357 db transaction {}
358} {}
359do_test tcl-10.2 {
360 db transaction deferred {}
361} {}
362do_test tcl-10.3 {
363 db transaction immediate {}
364} {}
365do_test tcl-10.4 {
366 db transaction exclusive {}
367} {}
368do_test tcl-10.5 {
369 set rc [catch {db transaction xyzzy {}} msg]
370 lappend rc $msg
371} {1 {bad transaction type "xyzzy": must be deferred, exclusive, or immediate}}
372do_test tcl-10.6 {
373 set rc [catch {db transaction {error test-error}} msg]
374 lappend rc $msg
375} {1 test-error}
376do_test tcl-10.7 {
377 db transaction {
378 db eval {CREATE TABLE t4(x)}
379 db transaction {
380 db eval {INSERT INTO t4 VALUES(1)}
381 }
382 }
383 db eval {SELECT * FROM t4}
384} 1
385do_test tcl-10.8 {
386 catch {
387 db transaction {
388 db eval {INSERT INTO t4 VALUES(2)}
389 db eval {INSERT INTO t4 VALUES(3)}
390 db eval {INSERT INTO t4 VALUES(4)}
391 error test-error
392 }
393 }
394 db eval {SELECT * FROM t4}
395} 1
396do_test tcl-10.9 {
397 db transaction {
398 db eval {INSERT INTO t4 VALUES(2)}
399 catch {
400 db transaction {
401 db eval {INSERT INTO t4 VALUES(3)}
402 db eval {INSERT INTO t4 VALUES(4)}
403 error test-error
404 }
405 }
406 }
407 db eval {SELECT * FROM t4}
408} {1 2 3 4}
409do_test tcl-10.10 {
410 for {set i 0} {$i<1} {incr i} {
411 db transaction {
412 db eval {INSERT INTO t4 VALUES(5)}
413 continue
414 }
415 }
416 db eval {SELECT * FROM t4}
417} {1 2 3 4 5}
418do_test tcl-10.11 {
419 for {set i 0} {$i<10} {incr i} {
420 db transaction {
421 db eval {INSERT INTO t4 VALUES(6)}
422 break
423 }
424 }
425 db eval {SELECT * FROM t4}
426} {1 2 3 4 5 6}
427do_test tcl-10.12 {
428 set rc [catch {
429 for {set i 0} {$i<10} {incr i} {
430 db transaction {
431 db eval {INSERT INTO t4 VALUES(7)}
432 return
433 }
434 }
435 }]
436} {2}
437do_test tcl-10.13 {
438 db eval {SELECT * FROM t4}
439} {1 2 3 4 5 6 7}
440
441do_test tcl-11.1 {
442 db exists {SELECT x,x*2,x+x FROM t4 WHERE x==4}
443} {1}
444do_test tcl-11.2 {
445 db exists {SELECT 0 FROM t4 WHERE x==4}
446} {1}
447do_test tcl-11.3 {
448 db exists {SELECT 1 FROM t4 WHERE x==8}
449} {0}
450
451do_test tcl-12.1 {
452 unset -nocomplain a b c version
453 set version [db version]
454 scan $version "%d.%d.%d" a b c
455 expr $a*1000000 + $b*1000 + $c
456} [sqlite3_libversion_number]
457
458
459# Check to see that when bindings of the form @aaa are used instead
460# of $aaa, that objects are treated as bytearray and are inserted
461# as BLOBs.
462#
463ifcapable tclvar {
464 do_test tcl-13.1 {
465 db eval {CREATE TABLE t5(x BLOB)}
466 set x abc123
467 db eval {INSERT INTO t5 VALUES($x)}
468 db eval {SELECT typeof(x) FROM t5}
469 } {text}
470 do_test tcl-13.2 {
471 binary scan $x H notUsed
472 db eval {
473 DELETE FROM t5;
474 INSERT INTO t5 VALUES($x);
475 SELECT typeof(x) FROM t5;
476 }
477 } {text}
478 do_test tcl-13.3 {
479 db eval {
480 DELETE FROM t5;
481 INSERT INTO t5 VALUES(@x);
482 SELECT typeof(x) FROM t5;
483 }
484 } {blob}
485 do_test tcl-13.4 {
486 set y 1234
487 db eval {
488 DELETE FROM t5;
489 INSERT INTO t5 VALUES(@y);
490 SELECT hex(x), typeof(x) FROM t5
491 }
492 } {31323334 blob}
493}
494
495
496finish_test