Merge Chromium + Blink git repositories
[chromium-blink-merge.git] / third_party / sqlite / src / test / shared4.test
blob83925b06e4cbf79a1d5365cb0ddffad7f629c543
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
19 puts hello
21 # This script is only valid if we are running shared-cache mode in a
22 # threadsafe-capable database engine.
24 ifcapable !shared_cache||!compound {
25   finish_test
26   return
28 set ::enable_shared_cache [sqlite3_enable_shared_cache 1]
30 # Prepare multiple databases in shared cache mode.
32 do_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}
84 do_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}
92 do_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}
100 do_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}
108 do_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}
116 do_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}
124 do_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}
132 do_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}
140 do_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}
148 do_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}
156 do_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}
164 do_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}
173 do_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}
205 do_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}
213 do_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}
221 do_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}
231 db1 close
232 db2 close
233 db3 close
234 db4 close
236 sqlite3_enable_shared_cache $::enable_shared_cache
237 finish_test