• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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# $Id: sync.test,v 1.6 2007/10/09 08:29:33 danielk1977 Exp $
17
18set testdir [file dirname $argv0]
19source $testdir/tester.tcl
20
21#
22# These tests are only applicable on unix when pager pragma are
23# enabled. Also, since every test uses an ATTACHed database, they
24# are only run when ATTACH is enabled.
25#
26if {$::tcl_platform(platform)!="unix"} {
27  finish_test
28  return
29}
30ifcapable !pager_pragmas||!attach {
31  finish_test
32  return
33}
34
35do_test sync-1.1 {
36  set sqlite_sync_count 0
37  file delete -force test2.db
38  file delete -force test2.db-journal
39  execsql {
40    PRAGMA fullfsync=OFF;
41    CREATE TABLE t1(a,b);
42    ATTACH DATABASE 'test2.db' AS db2;
43    CREATE TABLE db2.t2(x,y);
44  }
45  ifcapable !dirsync {
46    incr sqlite_sync_count 2
47  }
48  set sqlite_sync_count
49} 8
50ifcapable pager_pragmas {
51  do_test sync-1.2 {
52    set sqlite_sync_count 0
53    execsql {
54      PRAGMA main.synchronous=on;
55      PRAGMA db2.synchronous=on;
56      BEGIN;
57      INSERT INTO t1 VALUES(1,2);
58      INSERT INTO t2 VALUES(3,4);
59      COMMIT;
60    }
61    ifcapable !dirsync {
62      incr sqlite_sync_count 3
63    }
64    set sqlite_sync_count
65  } 8
66}
67do_test sync-1.3 {
68  set sqlite_sync_count 0
69  execsql {
70    PRAGMA main.synchronous=full;
71    PRAGMA db2.synchronous=full;
72    BEGIN;
73    INSERT INTO t1 VALUES(3,4);
74    INSERT INTO t2 VALUES(5,6);
75    COMMIT;
76  }
77  ifcapable !dirsync {
78    incr sqlite_sync_count 3
79  }
80  set sqlite_sync_count
81} 10
82ifcapable pager_pragmas {
83  do_test sync-1.4 {
84    set sqlite_sync_count 0
85    execsql {
86      PRAGMA main.synchronous=off;
87      PRAGMA db2.synchronous=off;
88      BEGIN;
89      INSERT INTO t1 VALUES(5,6);
90      INSERT INTO t2 VALUES(7,8);
91      COMMIT;
92    }
93    set sqlite_sync_count
94  } 0
95}
96
97
98finish_test
99