Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(718)

Side by Side Diff: third_party/sqlite/src/test/wal5.test

Issue 901033002: Import SQLite 3.8.7.4. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Chromium changes to support SQLite 3.8.7.4. Created 5 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 # 2010 April 13 1 # 2010 April 13
2 # 2 #
3 # The author disclaims copyright to this source code. In place of 3 # The author disclaims copyright to this source code. In place of
4 # a legal notice, here is a blessing: 4 # a legal notice, here is a blessing:
5 # 5 #
6 # May you do good and not evil. 6 # May you do good and not evil.
7 # May you find forgiveness for yourself and forgive others. 7 # May you find forgiveness for yourself and forgive others.
8 # May you share freely, never taking more than you give. 8 # May you share freely, never taking more than you give.
9 # 9 #
10 #*********************************************************************** 10 #***********************************************************************
(...skipping 179 matching lines...) Expand 10 before | Expand all | Expand 10 after
190 do_multiclient_test tn { 190 do_multiclient_test tn {
191 setup_and_attach_aux 191 setup_and_attach_aux
192 do_test 2.1.$tn.1 { 192 do_test 2.1.$tn.1 {
193 sql1 { 193 sql1 {
194 CREATE TABLE t1(a, b); 194 CREATE TABLE t1(a, b);
195 INSERT INTO t1 VALUES(1, 2); 195 INSERT INTO t1 VALUES(1, 2);
196 CREATE TABLE aux.t2(a, b); 196 CREATE TABLE aux.t2(a, b);
197 INSERT INTO t2 VALUES(1, 2); 197 INSERT INTO t2 VALUES(1, 2);
198 } 198 }
199 } {} 199 } {}
200 do_test 2.2.$tn.2 { file_page_counts } {1 5 1 5} 200 do_test 2.2.$tn.2 { file_page_counts } {1 3 1 3}
201 do_test 2.1.$tn.3 { code1 { do_wal_checkpoint db } } {0 5 5} 201 do_test 2.1.$tn.3 { code1 { do_wal_checkpoint db } } {0 3 3}
202 do_test 2.1.$tn.4 { file_page_counts } {2 5 2 5} 202 do_test 2.1.$tn.4 { file_page_counts } {2 3 2 3}
203 } 203 }
204 204
205 do_multiclient_test tn { 205 do_multiclient_test tn {
206 setup_and_attach_aux 206 setup_and_attach_aux
207 do_test 2.2.$tn.1 { 207 do_test 2.2.$tn.1 {
208 execsql { 208 execsql {
209 CREATE TABLE t1(a, b); 209 CREATE TABLE t1(a, b);
210 INSERT INTO t1 VALUES(1, 2); 210 INSERT INTO t1 VALUES(1, 2);
211 CREATE TABLE aux.t2(a, b); 211 CREATE TABLE aux.t2(a, b);
212 INSERT INTO t2 VALUES(1, 2); 212 INSERT INTO t2 VALUES(1, 2);
213 INSERT INTO t2 VALUES(3, 4); 213 INSERT INTO t2 VALUES(3, 4);
214 } 214 }
215 } {} 215 } {}
216 do_test 2.2.$tn.2 { file_page_counts } {1 5 1 7} 216 do_test 2.2.$tn.2 { file_page_counts } {1 3 1 4}
217 do_test 2.2.$tn.3 { sql2 { BEGIN; SELECT * FROM t1 } } {1 2} 217 do_test 2.2.$tn.3 { sql2 { BEGIN; SELECT * FROM t1 } } {1 2}
218 do_test 2.2.$tn.4 { code1 { do_wal_checkpoint db -mode restart } } {1 5 5} 218 do_test 2.2.$tn.4 { code1 { do_wal_checkpoint db -mode restart } } {1 3 3}
219 do_test 2.2.$tn.5 { file_page_counts } {2 5 2 7} 219 do_test 2.2.$tn.5 { file_page_counts } {2 3 2 4}
220 } 220 }
221 221
222 do_multiclient_test tn { 222 do_multiclient_test tn {
223 setup_and_attach_aux 223 setup_and_attach_aux
224 do_test 2.3.$tn.1 { 224 do_test 2.3.$tn.1 {
225 execsql { 225 execsql {
226 CREATE TABLE t1(a, b); 226 CREATE TABLE t1(a, b);
227 INSERT INTO t1 VALUES(1, 2); 227 INSERT INTO t1 VALUES(1, 2);
228 CREATE TABLE aux.t2(a, b); 228 CREATE TABLE aux.t2(a, b);
229 INSERT INTO t2 VALUES(1, 2); 229 INSERT INTO t2 VALUES(1, 2);
230 } 230 }
231 } {} 231 } {}
232 do_test 2.3.$tn.2 { file_page_counts } {1 5 1 5} 232 do_test 2.3.$tn.2 { file_page_counts } {1 3 1 3}
233 do_test 2.3.$tn.3 { sql2 { BEGIN; SELECT * FROM t1 } } {1 2} 233 do_test 2.3.$tn.3 { sql2 { BEGIN; SELECT * FROM t1 } } {1 2}
234 do_test 2.3.$tn.4 { sql1 { INSERT INTO t1 VALUES(3, 4) } } {} 234 do_test 2.3.$tn.4 { sql1 { INSERT INTO t1 VALUES(3, 4) } } {}
235 do_test 2.3.$tn.5 { sql1 { INSERT INTO t2 VALUES(3, 4) } } {} 235 do_test 2.3.$tn.5 { sql1 { INSERT INTO t2 VALUES(3, 4) } } {}
236 do_test 2.3.$tn.6 { file_page_counts } {1 7 1 7} 236 do_test 2.3.$tn.6 { file_page_counts } {1 4 1 4}
237 do_test 2.3.$tn.7 { code1 { do_wal_checkpoint db -mode full } } {1 7 5} 237 do_test 2.3.$tn.7 { code1 { do_wal_checkpoint db -mode full } } {1 4 3}
238 do_test 2.3.$tn.8 { file_page_counts } {1 7 2 7} 238
239 # The checkpoint above only writes page 1 of the db file. The other
240 # page (page 2) is locked by the read-transaction opened by the
241 # [sql2] commmand above. So normally, the db is 1 page in size here.
242 # However, in mmap() mode, the db is pre-allocated to 2 pages at the
243 # start of the checkpoint, even though page 2 cannot be written.
244 set nDb 2
245 if {[permutation]!="mmap"} {set nDb 1}
246 ifcapable !mmap {set nDb 1}
247 do_test 2.3.$tn.8 { file_page_counts } [list $nDb 4 2 4]
239 } 248 }
240 249
241 # Check that checkpoints block on the correct locks. And respond correctly 250 # Check that checkpoints block on the correct locks. And respond correctly
242 # if they cannot obtain those locks. There are three locks that a checkpoint 251 # if they cannot obtain those locks. There are three locks that a checkpoint
243 # may block on (in the following order): 252 # may block on (in the following order):
244 # 253 #
245 # 1. The writer lock: FULL and RESTART checkpoints block until any writer 254 # 1. The writer lock: FULL and RESTART checkpoints block until any writer
246 # process releases its lock. 255 # process releases its lock.
247 # 256 #
248 # 2. Readers using part of the log file. FULL and RESTART checkpoints block 257 # 2. Readers using part of the log file. FULL and RESTART checkpoints block
249 # until readers using part (but not all) of the log file have finished. 258 # until readers using part (but not all) of the log file have finished.
250 # 259 #
251 # 3. Readers using any of the log file. After copying data into the 260 # 3. Readers using any of the log file. After copying data into the
252 # database file, RESTART checkpoints block until readers using any part 261 # database file, RESTART checkpoints block until readers using any part
253 # of the log file have finished. 262 # of the log file have finished.
254 # 263 #
255 # This test case involves running a checkpoint while there exist other 264 # This test case involves running a checkpoint while there exist other
256 # processes holding all three types of locks. 265 # processes holding all three types of locks.
257 # 266 #
258 foreach {tn1 checkpoint busy_on ckpt_expected expected} { 267 foreach {tn1 checkpoint busy_on ckpt_expected expected} {
259 1 PASSIVE - {0 5 5} - 268 1 PASSIVE - {0 3 3} -
260 2 TYPO - {0 5 5} - 269 2 TYPO - {0 3 3} -
261 270
262 3 FULL - {0 7 7} 2 271 3 FULL - {0 4 4} 2
263 4 FULL 1 {1 5 5} 1 272 4 FULL 1 {1 3 3} 1
264 5 FULL 2 {1 7 5} 2 273 5 FULL 2 {1 4 3} 2
265 6 FULL 3 {0 7 7} 2 274 6 FULL 3 {0 4 4} 2
266 275
267 7 RESTART - {0 7 7} 3 276 7 RESTART - {0 4 4} 3
268 8 RESTART 1 {1 5 5} 1 277 8 RESTART 1 {1 3 3} 1
269 9 RESTART 2 {1 7 5} 2 278 9 RESTART 2 {1 4 3} 2
270 10 RESTART 3 {1 7 7} 3 279 10 RESTART 3 {1 4 4} 3
271 280
272 } { 281 } {
273 do_multiclient_test tn { 282 do_multiclient_test tn {
274 setup_and_attach_aux 283 setup_and_attach_aux
275 284
276 proc busyhandler {x} { 285 proc busyhandler {x} {
277 set ::max_busyhandler $x 286 set ::max_busyhandler $x
278 if {$::busy_on!="-" && $x==$::busy_on} { return 1 } 287 if {$::busy_on!="-" && $x==$::busy_on} { return 1 }
279 switch -- $x { 288 switch -- $x {
280 1 { sql2 "COMMIT ; BEGIN ; SELECT * FROM t1" } 289 1 { sql2 "COMMIT ; BEGIN ; SELECT * FROM t1" }
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after
336 code3 {sqlite3 db3 test.db} 345 code3 {sqlite3 db3 test.db}
337 346
338 do_test 3.$tn.5 { sql3 { PRAGMA journal_mode } } {wal} 347 do_test 3.$tn.5 { sql3 { PRAGMA journal_mode } } {wal}
339 348
340 do_test 3.$tn.6 { code3 { do_wal_checkpoint db3 } } {0 0 0} 349 do_test 3.$tn.6 { code3 { do_wal_checkpoint db3 } } {0 0 0}
341 } 350 }
342 } 351 }
343 352
344 353
345 finish_test 354 finish_test
346
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698