github.com/jdgcs/sqlite3@v1.12.1-0.20210908114423-bc5f96e4dd51/testdata/tcl/sync.test (about) 1 # 2005 August 28 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 # This file implements regression tests for SQLite library. 12 # 13 # This file implements tests to verify that fsync is disabled when 14 # pragma synchronous=off even for multi-database commits. 15 # 16 17 set testdir [file dirname $argv0] 18 source $testdir/tester.tcl 19 20 # 21 # These tests are only applicable when pager pragma are 22 # enabled. Also, since every test uses an ATTACHed database, they 23 # are only run when ATTACH is enabled. 24 # 25 ifcapable !pager_pragmas||!attach { 26 finish_test 27 return 28 } 29 if {[atomic_batch_write test.db]} { 30 finish_test 31 return 32 } 33 34 set sqlite_sync_count 0 35 proc cond_incr_sync_count {adj} { 36 global sqlite_sync_count 37 if {$::tcl_platform(platform) == "windows"} { 38 incr sqlite_sync_count $adj 39 } else { 40 ifcapable !dirsync { 41 incr sqlite_sync_count $adj 42 } 43 } 44 } 45 46 do_test sync-1.1 { 47 set sqlite_sync_count 0 48 forcedelete test2.db 49 forcedelete test2.db-journal 50 execsql { 51 PRAGMA fullfsync=OFF; 52 CREATE TABLE t1(a,b); 53 ATTACH DATABASE 'test2.db' AS db2; 54 CREATE TABLE db2.t2(x,y); 55 } 56 cond_incr_sync_count 2 57 set sqlite_sync_count 58 } 8 59 ifcapable pager_pragmas { 60 do_test sync-1.2 { 61 set sqlite_sync_count 0 62 execsql { 63 PRAGMA main.synchronous=on; 64 PRAGMA db2.synchronous=on; 65 BEGIN; 66 INSERT INTO t1 VALUES(1,2); 67 INSERT INTO t2 VALUES(3,4); 68 COMMIT; 69 } 70 cond_incr_sync_count 4 71 set sqlite_sync_count 72 } 9 73 } 74 do_test sync-1.3 { 75 set sqlite_sync_count 0 76 execsql { 77 PRAGMA main.synchronous=full; 78 PRAGMA db2.synchronous=full; 79 BEGIN; 80 INSERT INTO t1 VALUES(3,4); 81 INSERT INTO t2 VALUES(5,6); 82 COMMIT; 83 } 84 cond_incr_sync_count 4 85 set sqlite_sync_count 86 } 11 87 ifcapable pager_pragmas { 88 if {[permutation]!="journaltest"} { 89 do_test sync-1.4 { 90 set sqlite_sync_count 0 91 execsql { 92 PRAGMA main.synchronous=off; 93 PRAGMA db2.synchronous=off; 94 BEGIN; 95 INSERT INTO t1 VALUES(5,6); 96 INSERT INTO t2 VALUES(7,8); 97 COMMIT; 98 } 99 set sqlite_sync_count 100 } 0 101 } 102 } 103 104 105 finish_test