blob: 88959db42d767600cc6b74965619f47a2222f587 [file] [log] [blame]
drh65cef1a2008-07-14 19:39:16 +00001# 2008 July 14
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#
12# Test the btree mutex protocol for shared cache mode.
13#
danielk1977de3e41e2008-08-04 03:51:24 +000014# $Id: shared4.test,v 1.2 2008/08/04 03:51:24 danielk1977 Exp $
drh65cef1a2008-07-14 19:39:16 +000015
16set testdir [file dirname $argv0]
17source $testdir/tester.tcl
18db close
drh65cef1a2008-07-14 19:39:16 +000019
20# This script is only valid if we are running shared-cache mode in a
21# threadsafe-capable database engine.
22#
danielk1977de3e41e2008-08-04 03:51:24 +000023ifcapable !shared_cache||!compound {
drh65cef1a2008-07-14 19:39:16 +000024 finish_test
25 return
26}
27set ::enable_shared_cache [sqlite3_enable_shared_cache 1]
28
29# Prepare multiple databases in shared cache mode.
30#
31do_test shared4-1.1 {
mistachkinfda06be2011-08-02 00:57:34 +000032 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
drh65cef1a2008-07-14 19:39:16 +000036 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}
83do_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}
91do_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}
99do_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}
107do_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}
115do_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}
123do_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}
131do_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}
139do_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}
147do_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}
155do_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}
163do_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}
171
172do_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}
204do_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}
212do_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}
220do_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}
228
229
230db1 close
231db2 close
232db3 close
233db4 close
234
235sqlite3_enable_shared_cache $::enable_shared_cache
236finish_test