| OLD | NEW |
| 1 # 2009 January 3 | 1 # 2009 January 3 |
| 2 # | 2 # |
| 3 # The author disclaims copyright to this source code. In place of | 3 # The author disclaims copyright to this source code. In place of |
| 4 # a legal notice, here is a blessing: | 4 # a legal notice, here is a blessing: |
| 5 # | 5 # |
| 6 # May you do good and not evil. | 6 # May you do good and not evil. |
| 7 # May you find forgiveness for yourself and forgive others. | 7 # May you find forgiveness for yourself and forgive others. |
| 8 # May you share freely, never taking more than you give. | 8 # May you share freely, never taking more than you give. |
| 9 # | 9 # |
| 10 #*********************************************************************** | 10 #*********************************************************************** |
| 11 # | 11 # |
| 12 # $Id: savepoint6.test,v 1.4 2009/06/05 17:09:12 drh Exp $ | 12 # $Id: savepoint6.test,v 1.4 2009/06/05 17:09:12 drh Exp $ |
| 13 | 13 |
| 14 set testdir [file dirname $argv0] | 14 set testdir [file dirname $argv0] |
| 15 source $testdir/tester.tcl | 15 source $testdir/tester.tcl |
| 16 | 16 |
| 17 proc sql {zSql} { | 17 proc sql {zSql} { |
| 18 uplevel db eval [list $zSql] | 18 uplevel db eval [list $zSql] |
| 19 #puts stderr "$zSql ;" | 19 #puts stderr "$zSql ;" |
| 20 } | 20 } |
| 21 | 21 |
| 22 set DATABASE_SCHEMA { | 22 set DATABASE_SCHEMA { |
| 23 PRAGMA auto_vacuum = incremental; | 23 PRAGMA auto_vacuum = incremental; |
| 24 CREATE TABLE t1(x, y); | 24 CREATE TABLE t1(x, y); |
| 25 CREATE UNIQUE INDEX i1 ON t1(x); | 25 CREATE UNIQUE INDEX i1 ON t1(x); |
| 26 CREATE INDEX i2 ON t1(y); | 26 CREATE INDEX i2 ON t1(y); |
| 27 } | 27 } |
| 28 | 28 |
| 29 if {0==[info exists ::G(savepoint6_iterations)]} { |
| 30 set ::G(savepoint6_iterations) 1000 |
| 31 } |
| 32 |
| 29 #-------------------------------------------------------------------------- | 33 #-------------------------------------------------------------------------- |
| 30 # In memory database state. | 34 # In memory database state. |
| 31 # | 35 # |
| 32 # ::lSavepoint is a list containing one entry for each active savepoint. The | 36 # ::lSavepoint is a list containing one entry for each active savepoint. The |
| 33 # first entry in the list corresponds to the most recently opened savepoint. | 37 # first entry in the list corresponds to the most recently opened savepoint. |
| 34 # Each entry consists of two elements: | 38 # Each entry consists of two elements: |
| 35 # | 39 # |
| 36 # 1. The savepoint name. | 40 # 1. The savepoint name. |
| 37 # | 41 # |
| 38 # 2. A serialized Tcl array representing the contents of table t1 at the | 42 # 2. A serialized Tcl array representing the contents of table t1 at the |
| (...skipping 176 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 215 rollback two | 219 rollback two |
| 216 release one | 220 release one |
| 217 | 221 |
| 218 execsql {SELECT count(*) FROM t1} | 222 execsql {SELECT count(*) FROM t1} |
| 219 } {44} | 223 } {44} |
| 220 | 224 |
| 221 foreach zSetup [list { | 225 foreach zSetup [list { |
| 222 set testname normal | 226 set testname normal |
| 223 sqlite3 db test.db | 227 sqlite3 db test.db |
| 224 } { | 228 } { |
| 229 if {[wal_is_wal_mode]} continue |
| 225 set testname tempdb | 230 set testname tempdb |
| 226 sqlite3 db "" | 231 sqlite3 db "" |
| 227 } { | 232 } { |
| 228 if {[catch {set ::permutations_test_prefix} z] == 0 && $z eq "journaltest"} { | 233 if {[permutation] eq "journaltest"} { |
| 229 continue | 234 continue |
| 230 } | 235 } |
| 231 set testname nosync | 236 set testname nosync |
| 232 sqlite3 db test.db | 237 sqlite3 db test.db |
| 233 sql { PRAGMA synchronous = off } | 238 sql { PRAGMA synchronous = off } |
| 234 } { | 239 } { |
| 235 set testname smallcache | 240 set testname smallcache |
| 236 sqlite3 db test.db | 241 sqlite3 db test.db |
| 237 sql { PRAGMA cache_size = 10 } | 242 sql { PRAGMA cache_size = 10 } |
| 238 }] { | 243 }] { |
| 239 | 244 |
| 240 unset -nocomplain ::lSavepoint | 245 unset -nocomplain ::lSavepoint |
| 241 unset -nocomplain ::aEntry | 246 unset -nocomplain ::aEntry |
| 242 | 247 |
| 243 catch { db close } | 248 catch { db close } |
| 244 file delete -force test.db | 249 file delete -force test.db test.db-wal test.db-journal |
| 245 eval $zSetup | 250 eval $zSetup |
| 246 sql $DATABASE_SCHEMA | 251 sql $DATABASE_SCHEMA |
| 247 | 252 |
| 253 wal_set_journal_mode |
| 254 |
| 248 do_test savepoint6-$testname.setup { | 255 do_test savepoint6-$testname.setup { |
| 249 savepoint one | 256 savepoint one |
| 250 insert_rows [random_integers 100 1000] | 257 insert_rows [random_integers 100 1000] |
| 251 release one | 258 release one |
| 252 checkdb | 259 checkdb |
| 253 } {ok} | 260 } {ok} |
| 254 | 261 |
| 255 for {set i 0} {$i < 1000} {incr i} { | 262 for {set i 0} {$i < $::G(savepoint6_iterations)} {incr i} { |
| 256 do_test savepoint6-$testname.$i.1 { | 263 do_test savepoint6-$testname.$i.1 { |
| 257 savepoint_op | 264 savepoint_op |
| 258 checkdb | 265 checkdb |
| 259 } {ok} | 266 } {ok} |
| 260 | 267 |
| 261 do_test savepoint6-$testname.$i.2 { | 268 do_test savepoint6-$testname.$i.2 { |
| 262 database_op | 269 database_op |
| 263 database_op | 270 database_op |
| 264 checkdb | 271 checkdb |
| 265 } {ok} | 272 } {ok} |
| 266 } | 273 } |
| 274 |
| 275 wal_check_journal_mode savepoint6-$testname.walok |
| 267 } | 276 } |
| 268 | 277 |
| 269 unset -nocomplain ::lSavepoint | 278 unset -nocomplain ::lSavepoint |
| 270 unset -nocomplain ::aEntry | 279 unset -nocomplain ::aEntry |
| 271 | 280 |
| 272 finish_test | 281 finish_test |
| OLD | NEW |