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