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))
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
51 check_prestep_state
$target $state
53 check_poststep_state
$rc $target $state
55 if {$rc!="SQLITE_OK"} break
60 proc step_rbu
{target rbu
} {
62 sqlite3rbu rbu
$target $rbu
64 check_prestep_state
$target $state
66 check_poststep_state
$rc $target $state
68 if {$rc != "SQLITE_OK"} break
73 proc step_rbu_legacy
{target rbu
} {
75 sqlite3rbu rbu
$target $rbu
77 check_prestep_state
$target $state
79 check_poststep_state
$rc $target $state
81 if {$rc != "SQLITE_OK"} break
83 tmpdb
eval { DELETE FROM rbu_state WHERE k
==10 }
89 proc do_rbu_vacuum_test
{tn step
{statedb state.db
}} {
91 if {$statedb=="" && $step==1} breakpoint
92 uplevel [list do_test
$tn.1 [string map
[list %state
% $statedb %step
% $step] {
93 if {%step
%==0} { sqlite3rbu_vacuum rbu test.db
{%state
%}}
95 if {%step
%==1} { sqlite3rbu_vacuum rbu test.db
{%state
%}}
97 check_prestep_state test.db
$state
99 check_poststep_state
$rc test.db
$state
100 if {$rc!="SQLITE_OK"} break
101 if {%step
%==1} { rbu
close }
106 uplevel [list do_execsql_test
$tn.2 {
107 PRAGMA integrity_check