modernc.org/cc@v1.0.1/v2/testdata/_sqlite/ext/rbu/rbu_common.tcl (about) 1 # 2015 Aug 8 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 # 12 13 if {![info exists testdir]} { 14 set testdir [file join [file dirname [info script]] .. .. test] 15 } 16 source $testdir/tester.tcl 17 18 proc check_prestep_state {target state} { 19 set oal_exists [file exists $target-oal] 20 set wal_exists [file exists $target-wal] 21 set progress [rbu progress] 22 23 if {($progress==0 && $state!="oal" && $state!="done") 24 || ($oal_exists && $wal_exists) 25 || ($progress>0 && $state=="oal" && (!$oal_exists || $wal_exists)) 26 || ($state=="move" && (!$oal_exists || $wal_exists)) 27 || ($state=="checkpoint" && ($oal_exists || !$wal_exists)) 28 || ($state=="done" && ($oal_exists && $progress!=0)) 29 } { 30 error "B: state=$state progress=$progress oal=$oal_exists wal=$wal_exists" 31 } 32 } 33 34 proc check_poststep_state {rc target state} { 35 if {$rc=="SQLITE_OK" || $rc=="SQLITE_DONE"} { 36 set oal_exists [file exists $target-oal] 37 set wal_exists [file exists $target-wal] 38 if {$state=="move" && ($oal_exists || !$wal_exists)} { 39 error "A: state=$state progress=$progress oal=$oal_exists wal=$wal_exists" 40 } 41 } 42 } 43 44 # Run the RBU in file $rbu on target database $target until completion. 45 # 46 proc run_rbu {target rbu} { 47 sqlite3rbu rbu $target $rbu 48 while 1 { 49 set state [rbu state] 50 51 check_prestep_state $target $state 52 set rc [rbu step] 53 check_poststep_state $rc $target $state 54 55 if {$rc!="SQLITE_OK"} break 56 } 57 rbu close 58 } 59 60 proc step_rbu {target rbu} { 61 while 1 { 62 sqlite3rbu rbu $target $rbu 63 set state [rbu state] 64 check_prestep_state $target $state 65 set rc [rbu step] 66 check_poststep_state $rc $target $state 67 rbu close 68 if {$rc != "SQLITE_OK"} break 69 } 70 set rc 71 } 72 73 proc do_rbu_vacuum_test {tn step} { 74 uplevel [list do_test $tn.1 { 75 if {$step==0} { sqlite3rbu_vacuum rbu test.db state.db } 76 while 1 { 77 if {$step==1} { sqlite3rbu_vacuum rbu test.db state.db } 78 set state [rbu state] 79 check_prestep_state test.db $state 80 set rc [rbu step] 81 check_poststep_state $rc test.db $state 82 if {$rc!="SQLITE_OK"} break 83 if {$step==1} { rbu close } 84 } 85 rbu close 86 } {SQLITE_DONE}] 87 88 uplevel [list do_execsql_test $tn.2 { 89 PRAGMA integrity_check 90 } ok] 91 } 92