--- sqlite-src-3180000/test/sync2.test.sync2-dirsync 2017-03-30 21:26:42.000000000 +0200 +++ sqlite-src-3180000/test/sync2.test 2017-04-03 13:16:14.422329691 +0200 @@ -44,6 +44,15 @@ uplevel [list do_test $tn [list execsql_sync $sql] [list {*}$res]] } +# Wrapper over the expected sync count, takes DIRSYNC into consideration +proc expected_sync_count {sync_count} { + ifcapable dirsync { + return $sync_count + } else { + return [ incr sync_count -1 ] + } +} + #----------------------------------------------------------------------- # Tests for journal mode. # @@ -53,13 +62,13 @@ INSERT INTO t1 VALUES(1, 2); } -do_execsql_sync_test 1.1 { INSERT INTO t1 VALUES(3, 4) } 4 +do_execsql_sync_test 1.1 { INSERT INTO t1 VALUES(3, 4) } [ expected_sync_count 4 ] # synchronous=normal. So, 1 sync on the directory, 1 on the journal, 1 # on the db file. 3 in total. do_execsql_test 1.2.1 { PRAGMA main.synchronous = NORMAL } do_execsql_test 1.2.2 { PRAGMA main.synchronous } 1 -do_execsql_sync_test 1.2.3 { INSERT INTO t1 VALUES(5, 6) } 3 +do_execsql_sync_test 1.2.3 { INSERT INTO t1 VALUES(5, 6) } [ expected_sync_count 3 ] # synchronous=off. No syncs. do_execsql_test 1.3.1 { PRAGMA main.synchronous = OFF } @@ -70,7 +79,7 @@ # 2 on the journal, 1 on the db file. 4 in total. do_execsql_test 1.4.1 { PRAGMA main.synchronous = FULL } do_execsql_test 1.4.2 { PRAGMA main.synchronous } 2 -do_execsql_sync_test 1.4.3 { INSERT INTO t1 VALUES(9, 10) } 4 +do_execsql_sync_test 1.4.3 { INSERT INTO t1 VALUES(9, 10) } [ expected_sync_count 4 ] #----------------------------------------------------------------------- # Tests for wal mode. @@ -79,7 +88,7 @@ # sync=full, journal_mode=wal. One sync on the directory, two on the # wal file. -do_execsql_sync_test 1.6 { INSERT INTO t1 VALUES(11, 12) } 3 +do_execsql_sync_test 1.6 { INSERT INTO t1 VALUES(11, 12) } [ expected_sync_count 3 ] # One sync on the wal file. do_execsql_sync_test 1.7 { INSERT INTO t1 VALUES(13, 14) } 1 @@ -112,7 +121,7 @@ # Wal mode, sync=normal. The first transaction does one sync on directory, # one on the wal file. The second does no syncs. - do_execsql_sync_test 1.11.1 { INSERT INTO t1 VALUES(19, 20) } 2 + do_execsql_sync_test 1.11.1 { INSERT INTO t1 VALUES(19, 20) } [ expected_sync_count 2 ] do_execsql_sync_test 1.11.2 { INSERT INTO t1 VALUES(21, 22) } 0 do_execsql_test 1.11.3 { PRAGMA main.synchronous } 1 @@ -129,14 +138,14 @@ # Delete mode, sync=full. The first transaction does one sync on # directory, two on the journal file, one on the db. The second does # the same. - do_execsql_sync_test 1.15.1 { INSERT INTO t1 VALUES(26, 27) } 4 - do_execsql_sync_test 1.15.2 { INSERT INTO t1 VALUES(28, 29) } 4 + do_execsql_sync_test 1.15.1 { INSERT INTO t1 VALUES(26, 27) } [ expected_sync_count 4 ] + do_execsql_sync_test 1.15.2 { INSERT INTO t1 VALUES(28, 29) } [ expected_sync_count 4 ] do_execsql_test 1.15.3 { PRAGMA main.synchronous } 2 # Switch back to wal mode. do_execsql_test 1.16 { PRAGMA journal_mode = wal } {wal} - do_execsql_sync_test 1.17.1 { INSERT INTO t1 VALUES(30, 31) } 2 + do_execsql_sync_test 1.17.1 { INSERT INTO t1 VALUES(30, 31) } [ expected_sync_count 2 ] do_execsql_sync_test 1.17.2 { INSERT INTO t1 VALUES(32, 33) } 0 do_execsql_test 1.17.3 { PRAGMA main.synchronous } 1 @@ -152,8 +161,8 @@ # Close and reopen the db. Back to synchronous=normal. db close sqlite3 db test.db - do_execsql_sync_test 1.20.1 { INSERT INTO t1 VALUES(38, 39) } 4 - do_execsql_sync_test 1.20.2 { INSERT INTO t1 VALUES(40, 41) } 4 + do_execsql_sync_test 1.20.1 { INSERT INTO t1 VALUES(38, 39) } [ expected_sync_count 4 ] + do_execsql_sync_test 1.20.2 { INSERT INTO t1 VALUES(40, 41) } [ expected_sync_count 4 ] do_execsql_test 1.20.3 { PRAGMA main.synchronous } 2 }