12c8997b9Sdrh# 2005 August 28 22c8997b9Sdrh# 32c8997b9Sdrh# The author disclaims copyright to this source code. In place of 42c8997b9Sdrh# a legal notice, here is a blessing: 52c8997b9Sdrh# 62c8997b9Sdrh# May you do good and not evil. 72c8997b9Sdrh# May you find forgiveness for yourself and forgive others. 82c8997b9Sdrh# May you share freely, never taking more than you give. 92c8997b9Sdrh# 102c8997b9Sdrh#*********************************************************************** 112c8997b9Sdrh# This file implements regression tests for SQLite library. 122c8997b9Sdrh# 132c8997b9Sdrh# This file implements tests to verify that fsync is disabled when 142c8997b9Sdrh# pragma synchronous=off even for multi-database commits. 152c8997b9Sdrh# 162c8997b9Sdrh 172c8997b9Sdrhset testdir [file dirname $argv0] 182c8997b9Sdrhsource $testdir/tester.tcl 192c8997b9Sdrh 202c8997b9Sdrh# 219dd6e080Sshaneh# These tests are only applicable when pager pragma are 225a8f9374Sdanielk1977# enabled. Also, since every test uses an ATTACHed database, they 235a8f9374Sdanielk1977# are only run when ATTACH is enabled. 242c8997b9Sdrh# 255a8f9374Sdanielk1977ifcapable !pager_pragmas||!attach { 262c8997b9Sdrh finish_test 277aae9943Sdrh return 282c8997b9Sdrh} 29*69aedc8dSdanif {[atomic_batch_write test.db]} { 30*69aedc8dSdan finish_test 31*69aedc8dSdan return 32*69aedc8dSdan} 332c8997b9Sdrh 349dd6e080Sshanehset sqlite_sync_count 0 359dd6e080Sshanehproc cond_incr_sync_count {adj} { 369dd6e080Sshaneh global sqlite_sync_count 379dd6e080Sshaneh if {$::tcl_platform(platform) == "windows"} { 389dd6e080Sshaneh incr sqlite_sync_count $adj 396d258995Sdrh } else { 409dd6e080Sshaneh ifcapable !dirsync { 419dd6e080Sshaneh incr sqlite_sync_count $adj 429dd6e080Sshaneh } 439dd6e080Sshaneh } 449dd6e080Sshaneh} 459dd6e080Sshaneh 462c8997b9Sdrhdo_test sync-1.1 { 472c8997b9Sdrh set sqlite_sync_count 0 48fda06befSmistachkin forcedelete test2.db 49fda06befSmistachkin forcedelete test2.db-journal 502c8997b9Sdrh execsql { 51ac530b1aSdrh PRAGMA fullfsync=OFF; 522c8997b9Sdrh CREATE TABLE t1(a,b); 532c8997b9Sdrh ATTACH DATABASE 'test2.db' AS db2; 542c8997b9Sdrh CREATE TABLE db2.t2(x,y); 552c8997b9Sdrh } 569dd6e080Sshaneh cond_incr_sync_count 2 572c8997b9Sdrh set sqlite_sync_count 582c8997b9Sdrh} 8 593bdca9c9Sdanielk1977ifcapable pager_pragmas { 602c8997b9Sdrh do_test sync-1.2 { 612c8997b9Sdrh set sqlite_sync_count 0 622c8997b9Sdrh execsql { 632c8997b9Sdrh PRAGMA main.synchronous=on; 642c8997b9Sdrh PRAGMA db2.synchronous=on; 652c8997b9Sdrh BEGIN; 662c8997b9Sdrh INSERT INTO t1 VALUES(1,2); 672c8997b9Sdrh INSERT INTO t2 VALUES(3,4); 682c8997b9Sdrh COMMIT; 692c8997b9Sdrh } 706d258995Sdrh cond_incr_sync_count 4 712c8997b9Sdrh set sqlite_sync_count 726d258995Sdrh } 9 733bdca9c9Sdanielk1977} 742c8997b9Sdrhdo_test sync-1.3 { 752c8997b9Sdrh set sqlite_sync_count 0 762c8997b9Sdrh execsql { 772c8997b9Sdrh PRAGMA main.synchronous=full; 782c8997b9Sdrh PRAGMA db2.synchronous=full; 792c8997b9Sdrh BEGIN; 802c8997b9Sdrh INSERT INTO t1 VALUES(3,4); 812c8997b9Sdrh INSERT INTO t2 VALUES(5,6); 822c8997b9Sdrh COMMIT; 832c8997b9Sdrh } 846d258995Sdrh cond_incr_sync_count 4 852c8997b9Sdrh set sqlite_sync_count 866d258995Sdrh} 11 873bdca9c9Sdanielk1977ifcapable pager_pragmas { 8805accd22Sdanif {[permutation]!="journaltest"} { 892c8997b9Sdrh do_test sync-1.4 { 902c8997b9Sdrh set sqlite_sync_count 0 912c8997b9Sdrh execsql { 922c8997b9Sdrh PRAGMA main.synchronous=off; 932c8997b9Sdrh PRAGMA db2.synchronous=off; 942c8997b9Sdrh BEGIN; 952c8997b9Sdrh INSERT INTO t1 VALUES(5,6); 962c8997b9Sdrh INSERT INTO t2 VALUES(7,8); 972c8997b9Sdrh COMMIT; 982c8997b9Sdrh } 992c8997b9Sdrh set sqlite_sync_count 1002c8997b9Sdrh } 0 1013bdca9c9Sdanielk1977} 10205accd22Sdan} 1032c8997b9Sdrh 1042c8997b9Sdrh 1052c8997b9Sdrhfinish_test 106