Index: third_party/sqlite/src/test/wal5.test |
diff --git a/third_party/sqlite/src/test/wal5.test b/third_party/sqlite/src/test/wal5.test |
index ad6bcfc7d83844f1341db75e5ff78cb8912087ff..68750f1479d8eb4061a9ead52a6a28c580233103 100644 |
--- a/third_party/sqlite/src/test/wal5.test |
+++ b/third_party/sqlite/src/test/wal5.test |
@@ -197,9 +197,9 @@ foreach {testprefix do_wal_checkpoint} { |
INSERT INTO t2 VALUES(1, 2); |
} |
} {} |
- do_test 2.2.$tn.2 { file_page_counts } {1 5 1 5} |
- do_test 2.1.$tn.3 { code1 { do_wal_checkpoint db } } {0 5 5} |
- do_test 2.1.$tn.4 { file_page_counts } {2 5 2 5} |
+ do_test 2.2.$tn.2 { file_page_counts } {1 3 1 3} |
+ do_test 2.1.$tn.3 { code1 { do_wal_checkpoint db } } {0 3 3} |
+ do_test 2.1.$tn.4 { file_page_counts } {2 3 2 3} |
} |
do_multiclient_test tn { |
@@ -213,10 +213,10 @@ foreach {testprefix do_wal_checkpoint} { |
INSERT INTO t2 VALUES(3, 4); |
} |
} {} |
- do_test 2.2.$tn.2 { file_page_counts } {1 5 1 7} |
+ do_test 2.2.$tn.2 { file_page_counts } {1 3 1 4} |
do_test 2.2.$tn.3 { sql2 { BEGIN; SELECT * FROM t1 } } {1 2} |
- do_test 2.2.$tn.4 { code1 { do_wal_checkpoint db -mode restart } } {1 5 5} |
- do_test 2.2.$tn.5 { file_page_counts } {2 5 2 7} |
+ do_test 2.2.$tn.4 { code1 { do_wal_checkpoint db -mode restart } } {1 3 3} |
+ do_test 2.2.$tn.5 { file_page_counts } {2 3 2 4} |
} |
do_multiclient_test tn { |
@@ -229,13 +229,22 @@ foreach {testprefix do_wal_checkpoint} { |
INSERT INTO t2 VALUES(1, 2); |
} |
} {} |
- do_test 2.3.$tn.2 { file_page_counts } {1 5 1 5} |
+ do_test 2.3.$tn.2 { file_page_counts } {1 3 1 3} |
do_test 2.3.$tn.3 { sql2 { BEGIN; SELECT * FROM t1 } } {1 2} |
do_test 2.3.$tn.4 { sql1 { INSERT INTO t1 VALUES(3, 4) } } {} |
do_test 2.3.$tn.5 { sql1 { INSERT INTO t2 VALUES(3, 4) } } {} |
- do_test 2.3.$tn.6 { file_page_counts } {1 7 1 7} |
- do_test 2.3.$tn.7 { code1 { do_wal_checkpoint db -mode full } } {1 7 5} |
- do_test 2.3.$tn.8 { file_page_counts } {1 7 2 7} |
+ do_test 2.3.$tn.6 { file_page_counts } {1 4 1 4} |
+ do_test 2.3.$tn.7 { code1 { do_wal_checkpoint db -mode full } } {1 4 3} |
+ |
+ # The checkpoint above only writes page 1 of the db file. The other |
+ # page (page 2) is locked by the read-transaction opened by the |
+ # [sql2] commmand above. So normally, the db is 1 page in size here. |
+ # However, in mmap() mode, the db is pre-allocated to 2 pages at the |
+ # start of the checkpoint, even though page 2 cannot be written. |
+ set nDb 2 |
+ if {[permutation]!="mmap"} {set nDb 1} |
+ ifcapable !mmap {set nDb 1} |
+ do_test 2.3.$tn.8 { file_page_counts } [list $nDb 4 2 4] |
} |
# Check that checkpoints block on the correct locks. And respond correctly |
@@ -256,18 +265,18 @@ foreach {testprefix do_wal_checkpoint} { |
# processes holding all three types of locks. |
# |
foreach {tn1 checkpoint busy_on ckpt_expected expected} { |
- 1 PASSIVE - {0 5 5} - |
- 2 TYPO - {0 5 5} - |
+ 1 PASSIVE - {0 3 3} - |
+ 2 TYPO - {0 3 3} - |
- 3 FULL - {0 7 7} 2 |
- 4 FULL 1 {1 5 5} 1 |
- 5 FULL 2 {1 7 5} 2 |
- 6 FULL 3 {0 7 7} 2 |
+ 3 FULL - {0 4 4} 2 |
+ 4 FULL 1 {1 3 3} 1 |
+ 5 FULL 2 {1 4 3} 2 |
+ 6 FULL 3 {0 4 4} 2 |
- 7 RESTART - {0 7 7} 3 |
- 8 RESTART 1 {1 5 5} 1 |
- 9 RESTART 2 {1 7 5} 2 |
- 10 RESTART 3 {1 7 7} 3 |
+ 7 RESTART - {0 4 4} 3 |
+ 8 RESTART 1 {1 3 3} 1 |
+ 9 RESTART 2 {1 4 3} 2 |
+ 10 RESTART 3 {1 4 4} 3 |
} { |
do_multiclient_test tn { |
@@ -343,4 +352,3 @@ foreach {testprefix do_wal_checkpoint} { |
finish_test |
- |