Remove incorrect NEVER() macro added by the previous check-in.
[sqlite.git] / ext / rbu / rbu_common.tcl
blob2b263b7660d5a3a9f1e2392f63018f1cbf058700
1 # 2015 Aug 8
3 # The author disclaims copyright to this source code. In place of
4 # a legal notice, here is a blessing:
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.
10 #***********************************************************************
13 if {![info exists testdir]} {
14 set testdir [file join [file dirname [info script]] .. .. test]
16 source $testdir/tester.tcl
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]
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"
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"
44 # Run the RBU in file $rbu on target database $target until completion.
46 proc run_rbu {target rbu} {
47 sqlite3rbu rbu $target $rbu
48 while 1 {
49 set state [rbu state]
51 check_prestep_state $target $state
52 set rc [rbu step]
53 check_poststep_state $rc $target $state
55 if {$rc!="SQLITE_OK"} break
57 rbu close
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
70 set rc
73 proc step_rbu_legacy {target rbu} {
74 while 1 {
75 sqlite3rbu rbu $target $rbu
76 set state [rbu state]
77 check_prestep_state $target $state
78 set rc [rbu step]
79 check_poststep_state $rc $target $state
80 rbu close
81 if {$rc != "SQLITE_OK"} break
82 sqlite3 tmpdb $rbu
83 tmpdb eval { DELETE FROM rbu_state WHERE k==10 }
84 tmpdb close
86 set rc
89 proc do_rbu_vacuum_test {tn step} {
90 forcedelete state.db
91 uplevel [list do_test $tn.1 {
92 if {$step==0} { sqlite3rbu_vacuum rbu test.db state.db }
93 while 1 {
94 if {$step==1} { sqlite3rbu_vacuum rbu test.db state.db }
95 set state [rbu state]
96 check_prestep_state test.db $state
97 set rc [rbu step]
98 check_poststep_state $rc test.db $state
99 if {$rc!="SQLITE_OK"} break
100 if {$step==1} { rbu close }
102 rbu close
103 } {SQLITE_DONE}]
105 uplevel [list do_execsql_test $tn.2 {
106 PRAGMA integrity_check
107 } ok]