gitlab.com/CoiaPrant/sqlite3@v1.19.1/testdata/tcl/mmapfault.test (about) 1 # 2013-05-23 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 set testdir [file dirname $argv0] 14 source $testdir/tester.tcl 15 source $testdir/malloc_common.tcl 16 ifcapable !mmap { 17 finish_test 18 return 19 } 20 set testprefix mmapfault 21 22 set a_string_counter 1 23 proc a_string {n} { 24 global a_string_counter 25 incr a_string_counter 26 string range [string repeat "${a_string_counter}." $n] 1 $n 27 } 28 db func a_string a_string 29 30 do_test 1-pre { 31 execsql { 32 CREATE TABLE t1(a UNIQUE, b UNIQUE); 33 INSERT INTO t1 VALUES(a_string(200), a_string(300)); 34 INSERT INTO t1 SELECT a_string(200), a_string(300) FROM t1; 35 INSERT INTO t1 SELECT a_string(200), a_string(300) FROM t1; 36 } 37 faultsim_save_and_close 38 } {} 39 40 41 do_faultsim_test 1 -prep { 42 faultsim_restore_and_reopen 43 db func a_string a_string 44 execsql { 45 PRAGMA mmap_size = 1000000; 46 PRAGMA cache_size = 5; 47 BEGIN; 48 INSERT INTO t1 SELECT a_string(200), a_string(300) FROM t1; 49 INSERT INTO t1 SELECT a_string(200), a_string(300) FROM t1; 50 INSERT INTO t1 SELECT a_string(200), a_string(300) FROM t1; 51 INSERT INTO t1 SELECT a_string(200), a_string(300) FROM t1; 52 } 53 } -body { 54 execsql { INSERT INTO t1 VALUES(a_string(200), a_string(300)) } 55 } -test { 56 faultsim_test_result {0 {}} 57 58 if {[sqlite3_get_autocommit db]} { 59 sqlite3 db2 test.db 60 set nRow [db2 one {SELECT count(*) FROM t1}] 61 if {$nRow!=4} { error "Database content appears incorrect (1)" } 62 db2 close 63 } 64 65 execsql { INSERT INTO t1 VALUES(a_string(201), a_string(301)) } 66 set nRow [db one {SELECT count(*) FROM t1}] 67 if {$nRow!=5 && $nRow!=66 && $nRow!=65} { 68 error "Database content appears incorrect (2) ($nRow)" 69 } 70 71 catch { execsql COMMIT } 72 } 73 74 75 76 finish_test