| | # 2014 October 22 |
| | # |
| | # 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. |
| | # |
| | # |
| | |
| | |
| | |
| | return } |
| | source $testdir/malloc_common.tcl |
| | set ::testprefix rbufault |
| | |
| | proc copy_if_exists {src target} { |
| | if {[file exists $src]} { |
| | forcecopy $src $target |
| | } else { |
| | forcedelete $target |
| | } |
| | } |
| |
|
| | foreach {tn2 setup sql expect} { |
| | 1 { |
| | CREATE TABLE t1(a INTEGER PRIMARY KEY, b, c); |
| | CREATE INDEX t1cb ON t1(c, b); |
| | INSERT INTO t1 VALUES(1, 1, 1); |
| | INSERT INTO t1 VALUES(2, 2, 2); |
| | INSERT INTO t1 VALUES(3, 3, 3); |
| |
|
| | CREATE TABLE rbu.data_t1(a, b, c, rbu_control); |
| | INSERT INTO data_t1 VALUES(2, NULL, NULL, 1); |
| | INSERT INTO data_t1 VALUES(3, 'three', NULL, '.x.'); |
| | INSERT INTO data_t1 VALUES(4, 4, 4, 0); |
| | } { |
| | SELECT |
| | |
| | |
| | |
| | |
| | CREATE INDEX t2cb ON t2(c, b); |
| | INSERT INTO t2 VALUES('a', 'a', 'a'); |
| | INSERT INTO t2 VALUES('b', 'b', 'b'); |
| | INSERT INTO t2 VALUES('c', 'c', 'c'); |
| |
|
| | CREATE TABLE rbu.data_t2(a, b, c, rbu_control); |
| | INSERT INTO data_t2 VALUES('b', NULL, NULL, 1); |
| | INSERT INTO data_t2 VALUES('c', 'see', NULL, '.x.'); |
| | INSERT INTO data_t2 VALUES('d', 'd', 'd', 0); |
| | } { |
| | SELECT |
| | |
| | |
| | |
| | |
| | CREATE TABLE t2(a PRIMARY KEY, b, c) WITHOUT ROWID; |
| | CREATE INDEX t1cb ON t1(c, b); |
| | CREATE INDEX t2cb ON t2(c, b); |
| |
|
| | CREATE TABLE rbu.data_t1(a, b, c, rbu_control); |
| | CREATE TABLE rbu.data_t2(a, b, c, rbu_control); |
| | INSERT INTO data_t1 VALUES(1, 2, 3, 0); |
| | INSERT INTO data_t2 VALUES(4, 5, 6, 0); |
| | } { |
| | SELECT |
| | |
| | |
| | |
| | |
| | CREATE INDEX t1c ON t1(c); |
| | INSERT INTO t1 VALUES('A', 'B', 'C'); |
| | INSERT INTO t1 VALUES('D', 'E', 'F'); |
| |
|
| | CREATE TABLE rbu.data_t1(a, b, c, rbu_control); |
| | INSERT INTO data_t1 VALUES('D', NULL, NULL, 1); |
| | INSERT INTO data_t1 VALUES('A', 'Z', NULL, '.x.'); |
| | INSERT INTO data_t1 VALUES('G', 'H', 'I', 0); |
| | } { |
| | SELECT |
| | } {A Z C G H I} |
| |
|
| | 5 { |
| | CREATE TABLE t1(a, b, c); |
| | CREATE INDEX t1c ON t1(c, b); |
| |
|
| | CREATE TABLE rbu.data_t1(a, b, c, rbu_rowid, rbu_control); |
| | INSERT INTO data_t1 VALUES('a', 'b', 'c', 1, 0); |
| | INSERT INTO data_t1 VALUES('d', 'e', 'f', '2', 0); |
| | } { |
| | SELECT |
| | } {a b c d e f} |
| |
|
| | } { |
| | catch {db close} |
| | forcedelete rbu.db test.db |
| | sqlite3 db test.db |
| | execsql { |
| | PRAGMA encoding = utf16; |
| | ATTACH 'rbu.db' AS rbu; |
| | } |
| | execsql $setup |
| | db close |
| |
|
| | forcecopy test.db test.db.bak |
| | forcecopy rbu.db rbu.db.bak |
| |
|
| | foreach {tn f reslist} { |
| | 1 oom-tra |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | puts "XYZ [x eval { SELECT * FROM rbu_state } ]" ; x close |
| | |
| | copy_if_exists test.db test.db.bak.2 |
| | copy_if_exists test.db-wal test.db.bak.2-wal |
| | copy_if_exists test.db-oal test.db.bak.2-oal |
| | copy_if_exists rbu.db rbu.db.bak.2 |
| | |
| | do_faultsim_test 3.$tn.$iStep -faults $::f -prep { |
| | catch { db close } |
| | forcedelete test.db-journal test.db-wal rbu.db-journal rbu.db-wal |
| | copy_if_exists test.db.bak.2 test.db |
| | copy_if_exists test.db.bak.2-wal test.db-wal |
| | copy_if_exists test.db.bak.2-oal test.db-oal |
| | copy_if_exists rbu.db.bak.2 rbu.db |
| | } -body { |
| | sqlite3rbu rbu test.db rbu.db |
| | rbu step |
| | rbu close |
| | } -test { |
| |
|
| | if {$testresult=="SQLITE_OK"} {set testresult "SQLITE_DONE"} |
| | faultsim_test_result { |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |