| Index: third_party/sqlite/sqlite-src-3170000/ext/rbu/rbu_common.tcl
|
| diff --git a/third_party/sqlite/sqlite-src-3170000/ext/rbu/rbu_common.tcl b/third_party/sqlite/sqlite-src-3170000/ext/rbu/rbu_common.tcl
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..a58c3aa0a781af34ee9885349c48085a0ea35d3b
|
| --- /dev/null
|
| +++ b/third_party/sqlite/sqlite-src-3170000/ext/rbu/rbu_common.tcl
|
| @@ -0,0 +1,92 @@
|
| +# 2015 Aug 8
|
| +#
|
| +# The author disclaims copyright to this source code. In place of
|
| +# a legal notice, here is a blessing:
|
| +#
|
| +# May you do good and not evil.
|
| +# May you find forgiveness for yourself and forgive others.
|
| +# May you share freely, never taking more than you give.
|
| +#
|
| +#***********************************************************************
|
| +#
|
| +
|
| +if {![info exists testdir]} {
|
| + set testdir [file join [file dirname [info script]] .. .. test]
|
| +}
|
| +source $testdir/tester.tcl
|
| +
|
| +proc check_prestep_state {target state} {
|
| + set oal_exists [file exists $target-oal]
|
| + set wal_exists [file exists $target-wal]
|
| + set progress [rbu progress]
|
| +
|
| + if {($progress==0 && $state!="oal" && $state!="done")
|
| + || ($oal_exists && $wal_exists)
|
| + || ($progress>0 && $state=="oal" && (!$oal_exists || $wal_exists))
|
| + || ($state=="move" && (!$oal_exists || $wal_exists))
|
| + || ($state=="checkpoint" && ($oal_exists || !$wal_exists))
|
| + || ($state=="done" && ($oal_exists && $progress!=0))
|
| + } {
|
| + error "B: state=$state progress=$progress oal=$oal_exists wal=$wal_exists"
|
| + }
|
| +}
|
| +
|
| +proc check_poststep_state {rc target state} {
|
| + if {$rc=="SQLITE_OK" || $rc=="SQLITE_DONE"} {
|
| + set oal_exists [file exists $target-oal]
|
| + set wal_exists [file exists $target-wal]
|
| + if {$state=="move" && ($oal_exists || !$wal_exists)} {
|
| + error "A: state=$state progress=$progress oal=$oal_exists wal=$wal_exists"
|
| + }
|
| + }
|
| +}
|
| +
|
| +# Run the RBU in file $rbu on target database $target until completion.
|
| +#
|
| +proc run_rbu {target rbu} {
|
| + sqlite3rbu rbu $target $rbu
|
| + while 1 {
|
| + set state [rbu state]
|
| +
|
| + check_prestep_state $target $state
|
| + set rc [rbu step]
|
| + check_poststep_state $rc $target $state
|
| +
|
| + if {$rc!="SQLITE_OK"} break
|
| + }
|
| + rbu close
|
| +}
|
| +
|
| +proc step_rbu {target rbu} {
|
| + while 1 {
|
| + sqlite3rbu rbu $target $rbu
|
| + set state [rbu state]
|
| + check_prestep_state $target $state
|
| + set rc [rbu step]
|
| + check_poststep_state $rc $target $state
|
| + rbu close
|
| + if {$rc != "SQLITE_OK"} break
|
| + }
|
| + set rc
|
| +}
|
| +
|
| +proc do_rbu_vacuum_test {tn step} {
|
| + uplevel [list do_test $tn.1 {
|
| + if {$step==0} { sqlite3rbu_vacuum rbu test.db state.db }
|
| + while 1 {
|
| + if {$step==1} { sqlite3rbu_vacuum rbu test.db state.db }
|
| + set state [rbu state]
|
| + check_prestep_state test.db $state
|
| + set rc [rbu step]
|
| + check_poststep_state $rc test.db $state
|
| + if {$rc!="SQLITE_OK"} break
|
| + if {$step==1} { rbu close }
|
| + }
|
| + rbu close
|
| + } {SQLITE_DONE}]
|
| +
|
| + uplevel [list do_execsql_test $tn.2 {
|
| + PRAGMA integrity_check
|
| + } ok]
|
| +}
|
| +
|
|
|