# 2026 July 6 # # 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. # #*********************************************************************** # source [file join [file dirname [info script]] rbu_common.tcl] if_no_rbu_support { finish_test ; return } set ::testprefix rbucorrupt catch {db close} sqlite3_shutdown sqlite3_config_lookaside 0 0 sqlite3_initialize autoinstall_test_functions reset_db forcedelete rbu.db forcedelete state.db do_execsql_test 1.0 { CREATE TABLE t1(id INTEGER PRIMARY KEY, a, b); WITH s(i) AS ( SELECT 1 UNION ALL SELECT i+1 FROM s WHERE i<63 ) INSERT INTO t1 SELECT i, i*10, 'row'||i FROM s; } sqlite3 db rbu.db do_execsql_test 1.1 { CREATE TABLE data_t1(id INTEGER PRIMARY KEY, a, b, rbu_control); WITH s(i) AS ( SELECT 1 UNION ALL SELECT i+1 FROM s WHERE i<63 ) INSERT INTO data_t1 SELECT i, i*100, NULL, '.x.' FROM s; } db close do_test 1.2 { sqlite3rbu rbu test.db rbu.db state.db while {[rbu step]=="SQLITE_OK"} { set st [rbu state] if {$st=="checkpoint"} break } rbu close } {SQLITE_OK} do_test 1.3 { sqlite3 db state.db db eval { UPDATE rbu_state SET v=-1 WHERE k=4 } db close } {} do_test 1.4 { sqlite3rbu rbu test.db rbu.db state.db rbu step list [catch { rbu close } msg] $msg } {1 SQLITE_CORRUPT} #------------------------------------------------------------------------- reset_db forcedelete rbu.db forcedelete state.db do_test 2.0 { for {set ii 0} {$ii<200} {incr ii} { lappend cols "c$ii" } execsql " CREATE TABLE t1(a INTEGER PRIMARY KEY, [join $cols ,]); INSERT INTO t1(a, c0) VALUES(10, 100); " } {} db close sqlite3 db rbu.db do_test 2.1 { execsql " CREATE TABLE data_t1(a INTEGER PRIMARY KEY, [join $cols ,], rbu_control); INSERT INTO data_t1(a, c0, rbu_control) VALUES(10, 100, 'x'); " db close } {} breakpoint do_test 2.2 { sqlite3rbu rbu test.db rbu.db while {[rbu step]=="SQLITE_OK"} {} list [catch { rbu close } msg] $msg } {1 {SQLITE_ERROR - invalid rbu_control value}} finish_test