# 2016 October 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. # #*********************************************************************** # # The focus of this file is testing the session module. # if {![info exists testdir]} { set testdir [file join [file dirname [info script]] .. .. test] } source [file join [file dirname [info script]] session_common.tcl] source $testdir/tester.tcl ifcapable !session {finish_test; return} set testprefix sessionfault3 do_execsql_test 1.0 { CREATE TABLE t1(a, b, PRIMARY KEY(a)); INSERT INTO t1 VALUES(1, 2); INSERT INTO t1 VALUES(3, 4); INSERT INTO t1 VALUES('five', 'six'); } set C1 [changeset_from_sql { INSERT INTO t1 VALUES('seven', 'eight'); UPDATE t1 SET b=6 WHERE a='five'; DELETE FROM t1 WHERE a=1; }] do_execsql_test 1.1 { ALTER TABLE t1 ADD COLUMN d DEFAULT 123; ALTER TABLE t1 ADD COLUMN e DEFAULT 'string'; } set C2 [changeset_from_sql { UPDATE t1 SET e='new value' WHERE a='seven'; INSERT INTO t1 VALUES(0, 0, 0, 0); }] do_faultsim_test 1 -faults oom* -prep { sqlite3changegroup G } -body { G schema db main G add $::C1 G add $::C2 G output set {} {} } -test { catch { G delete } faultsim_test_result {0 {}} {1 SQLITE_NOMEM} } #------------------------------------------------------------------------- reset_db do_execsql_test 2.0 { CREATE TABLE t1(a INTEGER PRIMARY KEY, b); INSERT INTO t1 VALUES(1, 'one'); INSERT INTO t1 VALUES(2, 'two'); ALTER TABLE t1 ADD COLUMN c DEFAULT 'abcdefghijklmnopqrstuvwxyz'; } faultsim_save_and_close do_faultsim_test 2 -faults oom-t* -prep { faultsim_restore_and_reopen db eval {SELECT * FROM sqlite_schema} } -body { sqlite3session S db main S attach * execsql { DELETE FROM t1 WHERE a = 1; } } -test { faultsim_test_result {0 {}} {1 SQLITE_NOMEM} catch { S delete } } finish_test