aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/libraries/sqlite/unix/sqlite-3.5.1/test/pager.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/pager.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/pager.test')
-rw-r--r--libraries/sqlite/unix/sqlite-3.5.1/test/pager.test571
1 files changed, 571 insertions, 0 deletions
diff --git a/libraries/sqlite/unix/sqlite-3.5.1/test/pager.test b/libraries/sqlite/unix/sqlite-3.5.1/test/pager.test
new file mode 100644
index 0000000..bb92617
--- /dev/null
+++ b/libraries/sqlite/unix/sqlite-3.5.1/test/pager.test
@@ -0,0 +1,571 @@
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 script is page cache subsystem.
13#
14# $Id: pager.test,v 1.30 2007/08/24 16:29:24 drh Exp $
15
16
17set testdir [file dirname $argv0]
18source $testdir/tester.tcl
19
20if {[info commands pager_open]!=""} {
21db close
22
23# Basic sanity check. Open and close a pager.
24#
25do_test pager-1.0 {
26 catch {file delete -force ptf1.db}
27 catch {file delete -force ptf1.db-journal}
28 set v [catch {
29 set ::p1 [pager_open ptf1.db 10]
30 } msg]
31} {0}
32do_test pager-1.1 {
33 pager_stats $::p1
34} {ref 0 page 0 max 10 size -1 state 0 err 0 hit 0 miss 0 ovfl 0}
35do_test pager-1.2 {
36 pager_pagecount $::p1
37} {0}
38do_test pager-1.3 {
39 pager_stats $::p1
40} {ref 0 page 0 max 10 size -1 state 0 err 0 hit 0 miss 0 ovfl 0}
41do_test pager-1.4 {
42 pager_close $::p1
43} {}
44
45# Try to write a few pages.
46#
47do_test pager-2.1 {
48 set v [catch {
49 set ::p1 [pager_open ptf1.db 10]
50 } msg]
51} {0}
52#do_test pager-2.2 {
53# set v [catch {
54# set ::g1 [page_get $::p1 0]
55# } msg]
56# lappend v $msg
57#} {1 SQLITE_ERROR}
58do_test pager-2.3.1 {
59 set ::gx [page_lookup $::p1 1]
60} {}
61do_test pager-2.3.2 {
62 pager_stats $::p1
63} {ref 0 page 0 max 10 size -1 state 0 err 0 hit 0 miss 0 ovfl 0}
64do_test pager-2.3.3 {
65 set v [catch {
66 set ::g1 [page_get $::p1 1]
67 } msg]
68 if {$v} {lappend v $msg}
69 set v
70} {0}
71do_test pager-2.3.3 {
72 pager_stats $::p1
73} {ref 1 page 1 max 10 size 0 state 1 err 0 hit 0 miss 1 ovfl 0}
74do_test pager-2.3.4 {
75 set ::gx [page_lookup $::p1 1]
76 expr {$::gx!=""}
77} {1}
78do_test pager-2.3.5 {
79 pager_stats $::p1
80} {ref 1 page 1 max 10 size 0 state 1 err 0 hit 0 miss 1 ovfl 0}
81do_test pager-2.3.6 {
82 expr {$::g1==$::gx}
83} {1}
84do_test pager-2.3.7 {
85 page_unref $::gx
86 pager_stats $::p1
87} {ref 1 page 1 max 10 size 0 state 1 err 0 hit 0 miss 1 ovfl 0}
88do_test pager-2.4 {
89 pager_stats $::p1
90} {ref 1 page 1 max 10 size 0 state 1 err 0 hit 0 miss 1 ovfl 0}
91do_test pager-2.5 {
92 pager_pagecount $::p1
93} {0}
94do_test pager-2.6 {
95 pager_stats $::p1
96} {ref 1 page 1 max 10 size 0 state 1 err 0 hit 0 miss 1 ovfl 0}
97do_test pager-2.7 {
98 page_number $::g1
99} {1}
100do_test pager-2.8 {
101 page_read $::g1
102} {}
103do_test pager-2.9 {
104 page_unref $::g1
105} {}
106
107# Update 24/03/2007: Even though the ref-count has dropped to zero, the
108# pager-cache still contains some pages. Previously, it was always true
109# that if there were no references to a pager it was empty.
110do_test pager-2.10 {
111 pager_stats $::p1
112} {ref 0 page 1 max 10 size -1 state 0 err 0 hit 0 miss 1 ovfl 0}
113do_test pager-2.11 {
114 set ::g1 [page_get $::p1 1]
115 expr {$::g1!=0}
116} {1}
117do_test pager-2.12 {
118 page_number $::g1
119} {1}
120do_test pager-2.13 {
121 pager_stats $::p1
122} {ref 1 page 1 max 10 size 0 state 1 err 0 hit 1 miss 1 ovfl 0}
123do_test pager-2.14 {
124 set v [catch {
125 page_write $::g1 "Page-One"
126 } msg]
127 lappend v $msg
128} {0 {}}
129do_test pager-2.15 {
130 pager_stats $::p1
131} {ref 1 page 1 max 10 size 1 state 2 err 0 hit 1 miss 1 ovfl 0}
132do_test pager-2.16 {
133 page_read $::g1
134} {Page-One}
135do_test pager-2.17 {
136 set v [catch {
137 pager_commit $::p1
138 } msg]
139 lappend v $msg
140} {0 {}}
141do_test pager-2.20 {
142 pager_stats $::p1
143} {ref 1 page 1 max 10 size -1 state 1 err 0 hit 2 miss 1 ovfl 0}
144do_test pager-2.19 {
145 pager_pagecount $::p1
146} {1}
147do_test pager-2.21 {
148 pager_stats $::p1
149} {ref 1 page 1 max 10 size 1 state 1 err 0 hit 2 miss 1 ovfl 0}
150do_test pager-2.22 {
151 page_unref $::g1
152} {}
153do_test pager-2.23 {
154 pager_stats $::p1
155} {ref 0 page 1 max 10 size -1 state 0 err 0 hit 2 miss 1 ovfl 0}
156do_test pager-2.24 {
157 set v [catch {
158 page_get $::p1 1
159 } ::g1]
160 if {$v} {lappend v $::g1}
161 set v
162} {0}
163do_test pager-2.25 {
164 page_read $::g1
165} {Page-One}
166do_test pager-2.26 {
167 set v [catch {
168 page_write $::g1 {page-one}
169 } msg]
170 lappend v $msg
171} {0 {}}
172do_test pager-2.27 {
173 page_read $::g1
174} {page-one}
175do_test pager-2.28 {
176 set v [catch {
177 pager_rollback $::p1
178 } msg]
179 lappend v $msg
180} {0 {}}
181do_test pager-2.29 {
182 page_unref $::g1
183 set ::g1 [page_get $::p1 1]
184 page_read $::g1
185} {Page-One}
186do_test pager-2.99 {
187 pager_close $::p1
188} {}
189
190do_test pager-3.1 {
191 set v [catch {
192 set ::p1 [pager_open ptf1.db 15]
193 } msg]
194 if {$v} {lappend v $msg}
195 set v
196} {0}
197do_test pager-3.2 {
198 pager_pagecount $::p1
199} {1}
200do_test pager-3.3 {
201 set v [catch {
202 set ::g(1) [page_get $::p1 1]
203 } msg]
204 if {$v} {lappend v $msg}
205 set v
206} {0}
207do_test pager-3.4 {
208 page_read $::g(1)
209} {Page-One}
210do_test pager-3.5 {
211 for {set i 2} {$i<=20} {incr i} {
212 set gx [page_get $::p1 $i]
213 page_write $gx "Page-$i"
214 page_unref $gx
215 }
216 pager_commit $::p1
217} {}
218for {set i 2} {$i<=20} {incr i} {
219 do_test pager-3.6.[expr {$i-1}] [subst {
220 set gx \[page_get $::p1 $i\]
221 set v \[page_read \$gx\]
222 page_unref \$gx
223 set v
224 }] "Page-$i"
225}
226for {set i 1} {$i<=20} {incr i} {
227 regsub -all CNT {
228 set ::g1 [page_get $::p1 CNT]
229 set ::g2 [page_get $::p1 CNT]
230 set ::vx [page_read $::g2]
231 expr {$::g1==$::g2}
232 } $i body;
233 do_test pager-3.7.$i.1 $body {1}
234 regsub -all CNT {
235 page_unref $::g2
236 set vy [page_read $::g1]
237 expr {$vy==$::vx}
238 } $i body;
239 do_test pager-3.7.$i.2 $body {1}
240 regsub -all CNT {
241 page_unref $::g1
242 set gx [page_get $::p1 CNT]
243 set vy [page_read $gx]
244 page_unref $gx
245 expr {$vy==$::vx}
246 } $i body;
247 do_test pager-3.7.$i.3 $body {1}
248}
249do_test pager-3.99 {
250 pager_close $::p1
251} {}
252
253# tests of the checkpoint mechanism and api
254#
255do_test pager-4.0 {
256 set v [catch {
257 file delete -force ptf1.db
258 set ::p1 [pager_open ptf1.db 15]
259 } msg]
260 if {$v} {lappend v $msg}
261 set v
262} {0}
263do_test pager-4.1 {
264 set g1 [page_get $::p1 1]
265 page_write $g1 "Page-1 v0"
266 for {set i 2} {$i<=20} {incr i} {
267 set gx [page_get $::p1 $i]
268 page_write $gx "Page-$i v0"
269 page_unref $gx
270 }
271 pager_commit $::p1
272} {}
273for {set i 1} {$i<=20} {incr i} {
274 do_test pager-4.2.$i {
275 set gx [page_get $p1 $i]
276 set v [page_read $gx]
277 page_unref $gx
278 set v
279 } "Page-$i v0"
280}
281do_test pager-4.3 {
282 lrange [pager_stats $::p1] 0 1
283} {ref 1}
284do_test pager-4.4 {
285 lrange [pager_stats $::p1] 8 9
286} {state 1}
287
288for {set i 1} {$i<20} {incr i} {
289 do_test pager-4.5.$i.0 {
290 set res {}
291 for {set j 2} {$j<=20} {incr j} {
292 set gx [page_get $p1 $j]
293 set value [page_read $gx]
294 page_unref $gx
295 set shouldbe "Page-$j v[expr {$i-1}]"
296 if {$value!=$shouldbe} {
297 lappend res $value $shouldbe
298 }
299 }
300 set res
301 } {}
302 do_test pager-4.5.$i.1 {
303 page_write $g1 "Page-1 v$i"
304 lrange [pager_stats $p1] 8 9
305 } {state 2}
306 do_test pager-4.5.$i.2 {
307 for {set j 2} {$j<=20} {incr j} {
308 set gx [page_get $p1 $j]
309 page_write $gx "Page-$j v$i"
310 page_unref $gx
311 if {$j==$i} {
312 pager_stmt_begin $p1
313 }
314 }
315 } {}
316 do_test pager-4.5.$i.3 {
317 set res {}
318 for {set j 2} {$j<=20} {incr j} {
319 set gx [page_get $p1 $j]
320 set value [page_read $gx]
321 page_unref $gx
322 set shouldbe "Page-$j v$i"
323 if {$value!=$shouldbe} {
324 lappend res $value $shouldbe
325 }
326 }
327 set res
328 } {}
329 do_test pager-4.5.$i.4 {
330 pager_rollback $p1
331 set res {}
332 for {set j 2} {$j<=20} {incr j} {
333 set gx [page_get $p1 $j]
334 set value [page_read $gx]
335 page_unref $gx
336 set shouldbe "Page-$j v[expr {$i-1}]"
337 if {$value!=$shouldbe} {
338 lappend res $value $shouldbe
339 }
340 }
341 set res
342 } {}
343 do_test pager-4.5.$i.5 {
344 page_write $g1 "Page-1 v$i"
345 lrange [pager_stats $p1] 8 9
346 } {state 2}
347 do_test pager-4.5.$i.6 {
348 for {set j 2} {$j<=20} {incr j} {
349 set gx [page_get $p1 $j]
350 page_write $gx "Page-$j v$i"
351 page_unref $gx
352 if {$j==$i} {
353 pager_stmt_begin $p1
354 }
355 }
356 } {}
357 do_test pager-4.5.$i.7 {
358 pager_stmt_rollback $p1
359 for {set j 2} {$j<=20} {incr j} {
360 set gx [page_get $p1 $j]
361 set value [page_read $gx]
362 page_unref $gx
363 if {$j<=$i || $i==1} {
364 set shouldbe "Page-$j v$i"
365 } else {
366 set shouldbe "Page-$j v[expr {$i-1}]"
367 }
368 if {$value!=$shouldbe} {
369 lappend res $value $shouldbe
370 }
371 }
372 set res
373 } {}
374 do_test pager-4.5.$i.8 {
375 for {set j 2} {$j<=20} {incr j} {
376 set gx [page_get $p1 $j]
377 page_write $gx "Page-$j v$i"
378 page_unref $gx
379 if {$j==$i} {
380 pager_stmt_begin $p1
381 }
382 }
383 } {}
384 do_test pager-4.5.$i.9 {
385 pager_stmt_commit $p1
386 for {set j 2} {$j<=20} {incr j} {
387 set gx [page_get $p1 $j]
388 set value [page_read $gx]
389 page_unref $gx
390 set shouldbe "Page-$j v$i"
391 if {$value!=$shouldbe} {
392 lappend res $value $shouldbe
393 }
394 }
395 set res
396 } {}
397 do_test pager-4.5.$i.10 {
398 pager_commit $p1
399 lrange [pager_stats $p1] 8 9
400 } {state 1}
401}
402
403# Test that nothing bad happens when sqlite3pager_set_cachesize() is
404# called with a negative argument.
405do_test pager-4.6.1 {
406 pager_close [pager_open ptf2.db -15]
407} {}
408
409# Test truncate on an in-memory database is Ok.
410ifcapable memorydb {
411 do_test pager-4.6.2 {
412 set ::p2 [pager_open :memory: 10]
413 pager_truncate $::p2 5
414 } {}
415 do_test pager-4.6.3 {
416 for {set i 1} {$i<5} {incr i} {
417 set p [page_get $::p2 $i]
418 page_write $p "Page $i"
419 pager_commit $::p2
420 page_unref $p
421 }
422 # pager_truncate $::p2 3
423 } {}
424 do_test pager-4.6.4 {
425 pager_close $::p2
426 } {}
427}
428
429do_test pager-4.99 {
430 pager_close $::p1
431} {}
432
433
434
435 file delete -force ptf1.db
436
437} ;# end if( not mem: and has pager_open command );
438
439if 0 {
440# Ticket #615: an assertion fault inside the pager. It is a benign
441# fault, but we might as well test for it.
442#
443do_test pager-5.1 {
444 sqlite3 db test.db
445 execsql {
446 BEGIN;
447 CREATE TABLE t1(x);
448 PRAGMA synchronous=off;
449 COMMIT;
450 }
451} {}
452}
453
454# The following tests cover rolling back hot journal files.
455# They can't be run on windows because the windows version of
456# SQLite holds a mandatory exclusive lock on journal files it has open.
457#
458if {$tcl_platform(platform)!="windows"} {
459do_test pager-6.1 {
460 file delete -force test2.db
461 file delete -force test2.db-journal
462 sqlite3 db2 test2.db
463 execsql {
464 PRAGMA synchronous = 0;
465 CREATE TABLE abc(a, b, c);
466 INSERT INTO abc VALUES(1, 2, randstr(200,200));
467 INSERT INTO abc VALUES(1, 2, randstr(200,200));
468 INSERT INTO abc VALUES(1, 2, randstr(200,200));
469 INSERT INTO abc VALUES(1, 2, randstr(200,200));
470 INSERT INTO abc VALUES(1, 2, randstr(200,200));
471 INSERT INTO abc VALUES(1, 2, randstr(200,200));
472 INSERT INTO abc VALUES(1, 2, randstr(200,200));
473 INSERT INTO abc VALUES(1, 2, randstr(200,200));
474 INSERT INTO abc VALUES(1, 2, randstr(200,200));
475 BEGIN;
476 UPDATE abc SET c = randstr(200,200);
477 } db2
478 copy_file test2.db test.db
479 copy_file test2.db-journal test.db-journal
480
481 set f [open test.db-journal a]
482 fconfigure $f -encoding binary
483 seek $f [expr [file size test.db-journal] - 1032] start
484 puts -nonewline $f "\00\00\00\00"
485 close $f
486
487 sqlite3 db test.db
488 execsql {
489 SELECT sql FROM sqlite_master
490 }
491} {{CREATE TABLE abc(a, b, c)}}
492
493do_test pager-6.2 {
494 copy_file test2.db test.db
495 copy_file test2.db-journal test.db-journal
496
497 set f [open test.db-journal a]
498 fconfigure $f -encoding binary
499 seek $f [expr [file size test.db-journal] - 1032] start
500 puts -nonewline $f "\00\00\00\FF"
501 close $f
502
503 sqlite3 db test.db
504 execsql {
505 SELECT sql FROM sqlite_master
506 }
507} {{CREATE TABLE abc(a, b, c)}}
508
509do_test pager-6.3 {
510 copy_file test2.db test.db
511 copy_file test2.db-journal test.db-journal
512
513 set f [open test.db-journal a]
514 fconfigure $f -encoding binary
515 seek $f [expr [file size test.db-journal] - 4] start
516 puts -nonewline $f "\00\00\00\00"
517 close $f
518
519 sqlite3 db test.db
520 execsql {
521 SELECT sql FROM sqlite_master
522 }
523} {{CREATE TABLE abc(a, b, c)}}
524
525do_test pager-6.4.1 {
526 execsql {
527 BEGIN;
528 SELECT sql FROM sqlite_master;
529 }
530 copy_file test2.db-journal test.db-journal;
531 sqlite3 db3 test.db
532 catchsql {
533 BEGIN;
534 SELECT sql FROM sqlite_master;
535 } db3;
536} {1 {database is locked}}
537do_test pager-6.4.2 {
538 file delete -force test.db-journal
539 catchsql {
540 SELECT sql FROM sqlite_master;
541 } db3;
542} {0 {{CREATE TABLE abc(a, b, c)}}}
543do_test pager-6.4.3 {
544 db3 close
545 execsql {
546 COMMIT;
547 }
548} {}
549
550do_test pager-6.5 {
551 copy_file test2.db test.db
552 copy_file test2.db-journal test.db-journal
553
554 set f [open test.db-journal a]
555 fconfigure $f -encoding binary
556 puts -nonewline $f "hello"
557 puts -nonewline $f "\x00\x00\x00\x05\x01\x02\x03\x04"
558 puts -nonewline $f "\xd9\xd5\x05\xf9\x20\xa1\x63\xd7"
559 close $f
560
561 sqlite3 db test.db
562 execsql {
563 SELECT sql FROM sqlite_master
564 }
565} {{CREATE TABLE abc(a, b, c)}}
566
567do_test pager-6.5 {
568 db2 close
569} {}
570}
571finish_test