xref: /sqlite-3.40.0/test/shared4.test (revision 7b96f2fa)
1# 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#
14# $Id: shared4.test,v 1.2 2008/08/04 03:51:24 danielk1977 Exp $
15
16set testdir [file dirname $argv0]
17source $testdir/tester.tcl
18db close
19
20# This script is only valid if we are running shared-cache mode in a
21# threadsafe-capable database engine.
22#
23ifcapable !shared_cache||!compound {
24  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 {
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}
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
237