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