xref: /sqlite-3.40.0/test/sync.test (revision 69aedc8d)
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