Merge branch 'prerelease' of ssh://git.zetetic.net/sqlcipher into prerelease
[sqlcipher.git] / test / shared4.test
blob88959db42d767600cc6b74965619f47a2222f587
1 # 2008 July 14
3 # The author disclaims copyright to this source code.  In place of
4 # a legal notice, here is a blessing:
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.
10 #***********************************************************************
12 # Test the btree mutex protocol for shared cache mode.
14 # $Id: shared4.test,v 1.2 2008/08/04 03:51:24 danielk1977 Exp $
16 set testdir [file dirname $argv0]
17 source $testdir/tester.tcl
18 db close
20 # This script is only valid if we are running shared-cache mode in a
21 # threadsafe-capable database engine.
23 ifcapable !shared_cache||!compound {
24   finish_test
25   return
27 set ::enable_shared_cache [sqlite3_enable_shared_cache 1]
29 # Prepare multiple databases in shared cache mode.
31 do_test shared4-1.1 {
32   forcedelete test1.db test1.db-journal
33   forcedelete test2.db test2.db-journal
34   forcedelete test3.db test3.db-journal
35   forcedelete test4.db test4.db-journal
36   sqlite3 db1 test1.db
37   sqlite3 db2 test2.db
38   sqlite3 db3 test3.db
39   sqlite3 db4 test4.db
40   db1 eval {
41     CREATE TABLE t1(a);
42     INSERT INTO t1 VALUES(111);
43   }
44   db2 eval {
45     CREATE TABLE t2(b);
46     INSERT INTO t2 VALUES(222);
47   }
48   db3 eval {
49     CREATE TABLE t3(c);
50     INSERT INTO t3 VALUES(333);
51   }
52   db4 eval {
53     CREATE TABLE t4(d);
54     INSERT INTO t4 VALUES(444);
55   }
56   db1 eval {
57     ATTACH DATABASE 'test2.db' AS two;
58     ATTACH DATABASE 'test3.db' AS three;
59     ATTACH DATABASE 'test4.db' AS four;
60   }
61   db2 eval {
62     ATTACH DATABASE 'test4.db' AS four;
63     ATTACH DATABASE 'test3.db' AS three;
64     ATTACH DATABASE 'test1.db' AS one;
65   }
66   db3 eval {
67     ATTACH DATABASE 'test1.db' AS one;
68     ATTACH DATABASE 'test2.db' AS two;
69     ATTACH DATABASE 'test4.db' AS four;
70   }
71   db4 eval {
72     ATTACH DATABASE 'test3.db' AS three;
73     ATTACH DATABASE 'test2.db' AS two;
74     ATTACH DATABASE 'test1.db' AS one;
75   }
76   db1 eval {
77      SELECT a FROM t1 UNION ALL
78      SELECT b FROM t2 UNION ALL
79      SELECT c FROM t3 UNION ALL
80      SELECT d FROM t4;
81   }
82 } {111 222 333 444}
83 do_test shared4-1.2 {
84   db2 eval {
85      SELECT a FROM t1 UNION ALL
86      SELECT b FROM t2 UNION ALL
87      SELECT d FROM t4 UNION ALL
88      SELECT c FROM t3;
89   }
90 } {111 222 444 333}
91 do_test shared4-1.3 {
92   db3 eval {
93      SELECT a FROM t1 UNION ALL
94      SELECT c FROM t3 UNION ALL
95      SELECT b FROM t2 UNION ALL
96      SELECT d FROM t4;
97   }
98 } {111 333 222 444}
99 do_test shared4-1.4 {
100   db4 eval {
101      SELECT a FROM t1 UNION ALL
102      SELECT c FROM t3 UNION ALL
103      SELECT d FROM t4 UNION ALL
104      SELECT b FROM t2;
105   }
106 } {111 333 444 222}
107 do_test shared4-1.5 {
108   db3 eval {
109      SELECT a FROM t1 UNION ALL
110      SELECT d FROM t4 UNION ALL
111      SELECT b FROM t2 UNION ALL
112      SELECT c FROM t3;
113   }
114 } {111 444 222 333}
115 do_test shared4-1.6 {
116   db4 eval {
117      SELECT a FROM t1 UNION ALL
118      SELECT d FROM t4 UNION ALL
119      SELECT c FROM t3 UNION ALL
120      SELECT b FROM t2;
121   }
122 } {111 444 333 222}
123 do_test shared4-1.7 {
124   db1 eval {
125      SELECT b FROM t2 UNION ALL
126      SELECT a FROM t1 UNION ALL
127      SELECT c FROM t3 UNION ALL
128      SELECT d FROM t4;
129   }
130 } {222 111 333 444}
131 do_test shared4-1.8 {
132   db2 eval {
133      SELECT b FROM t2 UNION ALL
134      SELECT a FROM t1 UNION ALL
135      SELECT d FROM t4 UNION ALL
136      SELECT c FROM t3;
137   }
138 } {222 111 444 333}
139 do_test shared4-1.9 {
140   db3 eval {
141      SELECT b FROM t2 UNION ALL
142      SELECT c FROM t3 UNION ALL
143      SELECT a FROM t1 UNION ALL
144      SELECT d FROM t4;
145   }
146 } {222 333 111 444}
147 do_test shared4-1.10 {
148   db4 eval {
149      SELECT b FROM t2 UNION ALL
150      SELECT c FROM t3 UNION ALL
151      SELECT d FROM t4 UNION ALL
152      SELECT a FROM t1;
153   }
154 } {222 333 444 111}
155 do_test shared4-1.11 {
156   db1 eval {
157      SELECT c FROM t3 UNION ALL
158      SELECT a FROM t1 UNION ALL
159      SELECT b FROM t2 UNION ALL
160      SELECT d FROM t4;
161   }
162 } {333 111 222 444}
163 do_test shared4-1.12 {
164   db2 eval {
165      SELECT c FROM t3 UNION ALL
166      SELECT a FROM t1 UNION ALL
167      SELECT d FROM t4 UNION ALL
168      SELECT b FROM t2;
169   }
170 } {333 111 444 222}
172 do_test shared4-2.1 {
173   db1 eval {
174     UPDATE t1 SET a=a+1000;
175     UPDATE t2 SET b=b+2000;
176     UPDATE t3 SET c=c+3000;
177     UPDATE t4 SET d=d+4000;
178   }
179   db2 eval {
180     UPDATE t1 SET a=a+10000;
181     UPDATE t2 SET b=b+20000;
182     UPDATE t3 SET c=c+30000;
183     UPDATE t4 SET d=d+40000;
184   }
185   db3 eval {
186     UPDATE t1 SET a=a+100000;
187     UPDATE t2 SET b=b+200000;
188     UPDATE t3 SET c=c+300000;
189     UPDATE t4 SET d=d+400000;
190   }
191   db4 eval {
192     UPDATE t1 SET a=a+1000000;
193     UPDATE t2 SET b=b+2000000;
194     UPDATE t3 SET c=c+3000000;
195     UPDATE t4 SET d=d+4000000;
196   }
197   db1 eval {
198      SELECT a FROM t1 UNION ALL
199      SELECT b FROM t2 UNION ALL
200      SELECT c FROM t3 UNION ALL
201      SELECT d FROM t4;
202   }
203 } {1111111 2222222 3333333 4444444}
204 do_test shared4-2.2 {
205   db2 eval {
206      SELECT a FROM t1 UNION ALL
207      SELECT b FROM t2 UNION ALL
208      SELECT d FROM t4 UNION ALL
209      SELECT c FROM t3;
210   }
211 } {1111111 2222222 4444444 3333333}
212 do_test shared4-2.3 {
213   db3 eval {
214      SELECT a FROM t1 UNION ALL
215      SELECT c FROM t3 UNION ALL
216      SELECT b FROM t2 UNION ALL
217      SELECT d FROM t4;
218   }
219 } {1111111 3333333 2222222 4444444}
220 do_test shared4-2.4 {
221   db4 eval {
222      SELECT a FROM t1 UNION ALL
223      SELECT c FROM t3 UNION ALL
224      SELECT d FROM t4 UNION ALL
225      SELECT b FROM t2;
226   }
227 } {1111111 3333333 4444444 2222222}
230 db1 close
231 db2 close
232 db3 close
233 db4 close
235 sqlite3_enable_shared_cache $::enable_shared_cache
236 finish_test