]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
Merge in the blocking-checkpoint enhancement, including the new
authordrh <drh@noemail.net>
Wed, 2 Feb 2011 16:34:08 +0000 (16:34 +0000)
committerdrh <drh@noemail.net>
Wed, 2 Feb 2011 16:34:08 +0000 (16:34 +0000)
sqlite3_wal_checkpoint_v2() interface and the
PRAGMA wal_checkpoint(full) statement.

FossilOrigin-Name: bac7342c368a7c4f5f2878e08d9581dcbf57dd58

14 files changed:
1  2 
main.mk
manifest
manifest.uuid
src/btree.c
src/main.c
src/pager.c
src/pragma.c
src/sqlite.h.in
src/sqliteInt.h
src/vdbe.c
src/wal.c
test/pager1.test
test/wal2.test
test/wal3.test

diff --cc main.mk
Simple merge
diff --cc manifest
index 1e2ce7408ce76e018882227ffd4f291d044d6c9e,8fc2b20728881cc916687d74057116a1f349055e..77c138220ff765fd4d804548776edc56cb1fa744
+++ b/manifest
@@@ -1,7 -1,10 +1,10 @@@
- C Merge\sfts4aux\sbranch.
- D 2011-02-02T04:40:07.295
+ -----BEGIN PGP SIGNED MESSAGE-----
+ Hash: SHA1
 -C Merge\sthe\scheckpoint_fullfsync\spragma\sand\sthe\ssuperlock\sdemonstration\sinto\nthe\scheckpoint-v2\sexperimental\sbranch.
 -D 2010-11-19T18:51:31
++C Merge\sin\sthe\sblocking-checkpoint\senhancement,\sincluding\sthe\snew\nsqlite3_wal_checkpoint_v2()\sinterface\sand\sthe\nPRAGMA\swal_checkpoint(full)\sstatement.
++D 2011-02-02T16:34:08.739
  F Makefile.arm-wince-mingw32ce-gcc d6df77f1f48d690bd73162294bbba7f59507c72f
 -F Makefile.in e7a59672eaeb04408d1fa8501618d7501a3c5e39
 +F Makefile.in de6498556d536ae60bb8bb10e8c1ba011448658c
  F Makefile.linux-gcc 91d710bdc4998cb015f39edf3cb314ec4f4d7e23
  F Makefile.vxworks c85ec1d8597fe2f7bc225af12ac1666e21379151
  F README cd04a36fbc7ea56932a4052d7d0b7f09f27c33d6
@@@ -100,7 -102,7 +103,7 @@@ F ext/rtree/tkt3363.test 142ab96eded44a
  F ext/rtree/viewrtree.tcl eea6224b3553599ae665b239bd827e182b466024
  F install-sh 9d4de14ab9fb0facae2f48780b874848cbf2f895 x
  F ltmain.sh 3ff0879076df340d2e23ae905484d8c15d5fdea8
- F main.mk 589cd0fdc9d9bf7a8220511ff5db5bd57efe3558
 -F main.mk 731380a234515bd21ba4f930e12041ed3acfcc3a
++F main.mk 54190fab7cdba523e311c274c95ea480f32abfb5
  F mkdll.sh 7d09b23c05d56532e9d44a50868eb4b12ff4f74a
  F mkextu.sh 416f9b7089d80e5590a29692c9d9280a10dbad9f
  F mkextw.sh 4123480947681d9b434a5e7b1ee08135abe409ac
@@@ -114,15 -116,15 +117,15 @@@ F sqlite.pc.in 42b7bf0d02e08b9e77734a47
  F sqlite3.1 6be1ad09113570e1fc8dcaff84c9b0b337db5ffc
  F sqlite3.pc.in ae6f59a76e862f5c561eb32a380228a02afc3cad
  F src/alter.c 6a0c176e64a34929a4436048066a84ef4f1445b3
 -F src/analyze.c 1ea594a912a14138e20a05db09d9065e46f29a2a
 +F src/analyze.c a038162344265ac21dfb24b3fcc06c666ebb9c07
  F src/attach.c 252c4f7e36cc219349451ed63e278c60e80b26f3
  F src/auth.c 523da7fb4979469955d822ff9298352d6b31de34
 -F src/backup.c d5b0137bc20327af08c14772227cc35134839c30
 +F src/backup.c 6728d6d48d55b449af76a3e51c0808849cb32a2e
  F src/bitvec.c af50f1c8c0ff54d6bdb7a80e2fceca5a93670bef
  F src/btmutex.c 96a12f50f7a17475155971a241d85ec5171573ff
- F src/btree.c 9004c98fc576306eee4fc0562ffeb362ef53912c
- F src/btree.h 10f9296bf4edf034f5adce921b7b4383a56a1c90
 -F src/btree.c 3578a5e812ab9b434b1b705aad547939a055be11
++F src/btree.c cefe096650179dc4c5d876e7a27593ff1e6a86ed
+ F src/btree.h e2f2cd9933bf30724f53ffa12c4c5a3a864bbd6e
 -F src/btreeInt.h c424f2f131cc61ddf130f9bd736b3df12c8a51f0
 +F src/btreeInt.h 20f73dc93b1eeb83afd7259fbc6bd7dcf2df7fe4
  F src/build.c 00a327120d81ace6267e714ae8010c997d55de5d
  F src/callback.c a1d1b1c9c85415dff013af033e2fed9c8382d33b
  F src/complete.c dc1d136c0feee03c2f7550bafc0d29075e36deac
@@@ -142,8 -144,8 +145,8 @@@ F src/journal.c 552839e54d1bf76fb8f7abe
  F src/legacy.c a199d7683d60cef73089e892409113e69c23a99f
  F src/lempar.c 7f026423f4d71d989e719a743f98a1cbd4e6d99e
  F src/loadext.c 8af9fcc75708d60b88636ccba38b4a7b3c155c3e
- F src/main.c 6653e46db7ecb5a7449d8a12900147192f748b97
 -F src/main.c 84fdf5b2d823641f6bb394a81e467b6d7ff9b7ec
 -F src/malloc.c 3d7284cd9346ab6e3945535761e68c23c6cf40ef
++F src/main.c 1b04ef67eb03d026c8cc2d438c61635163153c24
 +F src/malloc.c 92d59a007d7a42857d4e9454aa25b6b703286be1
  F src/mem0.c 6a55ebe57c46ca1a7d98da93aaa07f99f1059645
  F src/mem1.c 00bd8265c81abb665c48fea1e0c234eb3b922206
  F src/mem2.c e307323e86b5da1853d7111b68fd6b84ad6f09cf
@@@ -160,31 -162,31 +163,31 @@@ F src/notify.c 976dd0f6171d4588e89e874f
  F src/os.c 22ac61d06e72a0dac900400147333b07b13d8e1d
  F src/os.h 9dbed8c2b9c1f2f2ebabc09e49829d4777c26bf9
  F src/os_common.h a8f95b81eca8a1ab8593d23e94f8a35f35d4078f
 -F src/os_os2.c 72d0b2e562952a2464308c4ce5f7913ac10bef3e
 -F src/os_unix.c de5be4cdbf3d07018059934eaf7e5d8d594a895c
 -F src/os_win.c 2f90f7bdec714fad51cd31b4ecad3cc1b4bb5aad
 -F src/pager.c b3e86e5d27c04e05a73a55ce2c79bb6028196431
 +F src/os_os2.c 2e452c9f2ca507623ad351c33a8a8b27849b1863
 +F src/os_unix.c 1be46a35bad4bec5171e4de88aaff817260eb378
 +F src/os_win.c 9abdcdd925416d854eabb0996c96debd92abfef5
- F src/pager.c c22b8531596c984dcc6b90645714b7ed951023fe
- F src/pager.h 0ea59db2a33bc6c2c02cae34de33367e1effdf76
++F src/pager.c d62dfc1d77168c4415e7f3e23c6dbee4f3fdff60
+ F src/pager.h 3f8c783de1d4706b40b1ac15b64f5f896bcc78d1
  F src/parse.y 12b7ebd61ea54f0e1b1083ff69cc2c8ce9353d58
  F src/pcache.c 09d38c44ab275db581f7a2f6ff8b9bc7f8c0faaa
  F src/pcache.h c683390d50f856d4cd8e24342ae62027d1bb6050
 -F src/pcache1.c e9578a3beac26f229ee558a4e16c863f2498185f
 -F src/pragma.c 900f480cc266428218d1a745a3e670fbd33cf12d
 -F src/prepare.c c2b318037d626fed27905c9446730b560637217a
 -F src/printf.c 8ae5082dd38a1b5456030c3755ec3a392cd51506
 +F src/pcache1.c d548e31beafa792d1994b663a29a5303569efc4e
- F src/pragma.c 8a6cd3c787f882fa44f6490d2411fc26839ce8f3
++F src/pragma.c 3d48a7f0a90bae8740adcc0d86e583b79da57f5b
 +F src/prepare.c 395b3fab1b93f45b6aa194b23ebc201221c47b99
 +F src/printf.c df2ff3bb5409e8958136933342c46464fbd017e7
  F src/random.c cd4a67b3953b88019f8cd4ccd81394a8ddfaba50
  F src/resolve.c 1c0f32b64f8e3f555fe1f732f9d6f501a7f05706
  F src/rowset.c 69afa95a97c524ba6faf3805e717b5b7ae85a697
 -F src/select.c 550d67688f5e8bc8022faf6d014838afba1415af
 -F src/shell.c 8517fc1f9c59ae4007e6cc8b9af91ab231ea2056
 -F src/sqlite.h.in daa5e94df834537708afb917e9b4cc4489c63c00
 +F src/select.c 8a7ba246b0b4bb45df7fbc52681728a0e3deaaa7
 +F src/shell.c 83c6f0cc5a79a081c7b9ddfe4f557b47e0bad976
- F src/sqlite.h.in 7599c4975cd0d0fff8d8d8cd3e423ca893b48f47
++F src/sqlite.h.in c0456330093737c74409e7f7d89d0f1e0dbf43b7
  F src/sqlite3ext.h c90bd5507099f62043832d73f6425d8d5c5da754
- F src/sqliteInt.h 45926deaf59b1ce3f55d21d5f91a8cecb6a7eb4c
 -F src/sqliteInt.h eea368b138c8c90ea1aef8f06f49ec29aacb2a8b
++F src/sqliteInt.h 4290fff17fabc6e07fc4338233df0e39e6350ca1
  F src/sqliteLimit.h a17dcd3fb775d63b64a43a55c54cb282f9726f44
 -F src/status.c 496913d4e8441195f6f2a75b1c95993a45b9b30b
 +F src/status.c 4997380fbb915426fef9e500b4872e79c99267fc
  F src/table.c 2cd62736f845d82200acfa1287e33feb3c15d62e
 -F src/tclsqlite.c 77c5c4b8ac7b2d94ee480e1ad626fbd921d948e4
 -F src/test1.c c2aa29d0fd6db7506fb7f0de7bff1386078296df
 +F src/tclsqlite.c 549859dc2c143f3deb6a92636a2d27973652c164
 +F src/test1.c 771407a49ae199241f0efb7055634e4a1899c026
  F src/test2.c 80d323d11e909cf0eb1b6fbb4ac22276483bcf31
  F src/test3.c 056093cfef69ff4227a6bdb9108564dc7f45e4bc
  F src/test4.c 0528360b5025688002a5feb6be906ddce52eaaee
@@@ -227,24 -229,24 +230,24 @@@ F src/tokenize.c 604607d6813e9551cf5189
  F src/trigger.c b8bedb9c0084ceb51a40f54fcca2ce048c8de852
  F src/update.c 227e6cd512108b84f69421fc6c7aa1b83d60d6e0
  F src/utf.c 1baeeac91707a4df97ccc6141ec0f808278af685
 -F src/util.c cd78524566fe45671863eee78685969a4bfd4e4c
 +F src/util.c ab1c92426494f499f42b9e307537b03e923d75c1
  F src/vacuum.c 924bd1bcee2dfb05376f79845bd3b4cec7b54b2f
- F src/vdbe.c 5d310eaf1a4d8383602126fa82e01291ab7d3cf3
 -F src/vdbe.c 06f868b6daff465cd805d09b43661d0e0bee62a7
++F src/vdbe.c 7f54982de40509458ee7ede8e356dccc19f5b161
  F src/vdbe.h 4de0efb4b0fdaaa900cf419b35c458933ef1c6d2
 -F src/vdbeInt.h 7f4cf1b2b69bef3a432b1f23dfebef57275436b4
 -F src/vdbeapi.c fb0036185b3c56e15916a5ee96309cd4acf6818f
 -F src/vdbeaux.c 762c2b146cf5fe7a7f743af1bbfed4a966aa937a
 -F src/vdbeblob.c e0ce3c54cc0c183af2ec67b63a289acf92251df4
 -F src/vdbemem.c 23723a12cd3ba7ab3099193094cbb2eb78956aa9
 -F src/vdbetrace.c 864cef96919323482ebd9986f2132435115e9cc2
 +F src/vdbeInt.h 6e6f28e9bccc6c703dca1372fd661c57b5c15fb0
 +F src/vdbeapi.c 8e9324fd35eb70d0b5904bd1af40f2598744dc4d
 +F src/vdbeaux.c 33448d23b857654dd69ed2103611f5c733606f68
 +F src/vdbeblob.c 18955f0ee6b133cd08e1592010cb9a6b11e9984c
 +F src/vdbemem.c 411649a35686f54268ccabeda175322c4697f5a6
 +F src/vdbetrace.c 3ba13bc32bdf16d2bdea523245fd16736bed67b5
  F src/vtab.c b297e8fa656ab5e66244ab15680d68db0adbec30
- F src/wal.c dbca424f71678f663a286ab2a98f947af1d412a7
- F src/wal.h c1aac6593a0b02b15dc625987e619edeab39292e
 -F src/wal.c 23facfd0f148ac72729fe28bbf973fe0458757b6
++F src/wal.c e6a609ab090eeb27013cf908a979e448859d01c7
+ F src/wal.h 7a5fbb00114b7f2cd40c7e1003d4c41ce9d26840
  F src/walker.c 3112bb3afe1d85dc52317cb1d752055e9a781f8f
 -F src/where.c fa22d45b2577c77146f2e894d58011d472d64103
 +F src/where.c af069e6b53234118014dabfece96a9515b69d76b
  F test/aggerror.test a867e273ef9e3d7919f03ef4f0e8c0d2767944f2
  F test/alias.test 4529fbc152f190268a15f9384a5651bbbabc9d87
 -F test/all.test 6745008c144bd2956d58864d21f7b304689c1cce
 +F test/all.test 51756962d522e474338e9b2ebb26e7364d4aa125
  F test/alter.test 15f9224868b290d6bf7a63f31437f31aee070636
  F test/alter2.test 75f731508f1bf27ba09a6075c66cd02216ba464b
  F test/alter3.test 8677e48d95536f7a6ed86a1a774744dadcc22b07
@@@ -579,8 -575,8 +582,8 @@@ F test/notify3.test d60923e186e0900f481
  F test/notnull.test cc7c78340328e6112a13c3e311a9ab3127114347
  F test/null.test a8b09b8ed87852742343b33441a9240022108993
  F test/openv2.test af02ed0a9cbc0d2a61b8f35171d4d117e588e4ec
- F test/pager1.test 7006a8b5dd3df1fe0d51d7da014333d7dc099778
 -F test/pager1.test 1e07368795dc6205a046a7a29f4455a9d5195d19
 -F test/pager2.test 0fbb6b6dc40ce1fecfe758c555a748ad2e9beaa3
++F test/pager1.test d8672fd0af5f4f9b99b06283d00f01547809bebe
 +F test/pager2.test 745b911dde3d1f24ae0870bd433dfa83d7c658c1
  F test/pager3.test 3856d9c80839be0668efee1b74811b1b7f7fc95f
  F test/pagerfault.test 9de4d3e0c59970b4c6cb8dac511fa242f335d8a7
  F test/pagerfault2.test 1f79ea40d1133b2683a2f811b00f2399f7ec2401
@@@ -805,8 -797,9 +808,9 @@@ F test/trigger8.test 30cb0530bd7c472805
  F test/trigger9.test 5b0789f1c5c4600961f8e68511b825b87be53e31
  F test/triggerA.test eaf11a29db2a11967d2d4b49d37f92bce598194e
  F test/triggerB.test 56780c031b454abac2340dbb3b71ac5c56c3d7fe
 -F test/triggerC.test 2a23edcc00684d084902ba5ec93e721775c3a70a
 +F test/triggerC.test 8a691ff6dd47df2e57395bbec4b62101fac0f363
  F test/triggerD.test c6add3817351451e419f6ff9e9a259b02b6e2de7
+ F test/tt3_checkpoint.c 415eccce672d681b297485fc20f44cdf0eac93af
  F test/types.test bf816ce73c7dfcfe26b700c19f97ef4050d194ff
  F test/types2.test 3555aacf8ed8dc883356e59efc314707e6247a84
  F test/types3.test a0f66bf12f80fad89493535474f7a6d16fa58150
@@@ -837,12 -830,12 +841,13 @@@ F test/vtabE.test 7c4693638d7797ce2eda1
  F test/vtab_alter.test 9e374885248f69e251bdaacf480b04a197f125e5
  F test/vtab_err.test 0d4d8eb4def1d053ac7c5050df3024fd47a3fbd8
  F test/vtab_shared.test 0eff9ce4f19facbe0a3e693f6c14b80711a4222d
- F test/wal.test 70227190e713b3e7eb2a7d5ec3510b66db01f327
- F test/wal2.test 3de797854de175323e7351b5f2514a30d1ee1410
- F test/wal3.test ac51126c36814bce334f66a0a4dbbfa56d429733
+ F test/wal.test f060cae4b2164c4375109a8f803873187234661d
 -F test/wal2.test 894d55dda774340fe7bebe239bed9b6130ff23d7
 -F test/wal3.test 55529a3fbf0a04670558dbf0b06f04a2f3508db4
++F test/wal2.test c9b23c97329a825415abb004d7502844d72fd8fc
++F test/wal3.test ec87d9dd9e9cebabed4024064e8ff531d336ead2
  F test/wal4.test 3404b048fa5e10605facaf70384e6d2943412e30
- F test/wal_common.tcl 895d76138043b86bdccf36494054bdabcf65837b
+ F test/wal5.test 1f99651d856c8b9e1376781c981d1b903e93a478
 +F test/wal6.test 07aa31ca8892d0527f2c5c5a9a2a87aa421dfaa8
+ F test/wal_common.tcl a98f17fba96206122eff624db0ab13ec377be4fe
  F test/walbak.test 4df1c7369da0301caeb9a48fa45997fd592380e4
  F test/walbig.test e882bc1d014afffbfa2b6ba36e0f07d30a633ad0
  F test/walcksum.test a37b36375c595e61bdb7e1ec49b5f0979b6fc7ce
@@@ -901,7 -894,14 +906,14 @@@ F tool/speedtest2.tcl ee2149167303ba8e9
  F tool/speedtest8.c 2902c46588c40b55661e471d7a86e4dd71a18224
  F tool/speedtest8inst1.c 293327bc76823f473684d589a8160bde1f52c14e
  F tool/vdbe-compress.tcl d70ea6d8a19e3571d7ab8c9b75cba86d1173ff0f
- P ed759d5a9edb3bba5f48f243df47be29e3fe8cd7 0147d9739f318a02721d3ae0e7be339a19231f60
- R 531c9b98b4934054a140000876bf40a8
- U dan
- Z d29ed65f9181e7ba0766a4c73453d1ce
 -P 648dd157ef3b7b790764698fd4dd7107c25212c9 570e79a8eb3bb2d2a15c46c55fbf52c9dd3e3ae8
 -R 29ee6d2e4bc9e75a0c4b1469b6aa491c
++P c6d9f7d8c48e1ff405e1c1d98a166974fc829f58 ebf74015f09fe241c1c6902dc8954f2b59ab41ec
++R 0634baae0b43c2b82e8b9905e8c6ee5b
+ U drh
 -Z 62a52f8bb2681a24e7959006560a6980
++Z d29f42a4b972ec3903a5f796629ef74c
+ -----BEGIN PGP SIGNATURE-----
 -Version: GnuPG v1.4.6 (GNU/Linux)
++Version: GnuPG v1.4.10 (Darwin)
 -iD8DBQFM5sdNoxKgR168RlERAn8IAJ4xAREF+dTwudzwR6tkh9wg+ffZegCeIyuW
 -SnmYKb+i1Y56lE+LONz+l/g=
 -=HICj
++iEYEARECAAYFAk1Jh4EACgkQoxKgR168RlEDdgCfTySKHScQj7r5Q2WPZ7harLi+
++uBIAn0+3gnlHjhVd4fzemcV4FGDrMm/Y
++=REwF
+ -----END PGP SIGNATURE-----
diff --cc manifest.uuid
index 3695689d8774b7d9777746f57f2c6289745cf788,0da19b37b64b346b568f5cded8fc8c4d236c022c..e607a2875c1cd434418d9f7539eeb5369dda79d2
@@@ -1,1 -1,1 +1,1 @@@
- c6d9f7d8c48e1ff405e1c1d98a166974fc829f58
 -ebf74015f09fe241c1c6902dc8954f2b59ab41ec
++bac7342c368a7c4f5f2878e08d9581dcbf57dd58
diff --cc src/btree.c
Simple merge
diff --cc src/main.c
Simple merge
diff --cc src/pager.c
index c6db5c2e3fbf1422855afb716b51750b36a7822f,e0230c6e978e0ec7d2ce1e0c97e5285efa39296a..218429838bd3946e7763debcfdc8e64cd120b61d
@@@ -2947,10 -2919,7 +2947,10 @@@ static int pagerRollbackWal(Pager *pPag
  ** This function is a wrapper around sqlite3WalFrames(). As well as logging
  ** the contents of the list of pages headed by pList (connected by pDirty),
  ** this function notifies any active backup processes that the pages have
- ** changed.
+ ** changed. 
 +**
 +** The list of pages passed into this routine is always sorted by page number.
 +** Hence, if page 1 appears anywhere on the list, it will be the first page.
  */ 
  static int pagerWalFrames(
    Pager *pPager,                  /* Pager object */
diff --cc src/pragma.c
Simple merge
diff --cc src/sqlite.h.in
index 3ee1aa93233991c61a7f109a17e874c590399231,dadc589abf113d57a256b18ea18caf2c3d5cb9cb..6bdc6afc95f03a7d940155c095ca9126b29295a5
@@@ -2666,31 -2645,14 +2666,31 @@@ const char *sqlite3_sql(sqlite3_stmt *p
  /*
  ** CAPI3REF: Determine If An SQL Statement Writes The Database
  **
- ** ^The sqlite3_stmt_readonly(X) interface returns true (non-zero) if 
+ ** ^The sqlite3_stmt_readonly(X) interface returns true (non-zero) if
 -** the [prepared statement] X is [SELECT] statement and false (zero) if
 -** X is an [INSERT], [UPDATE], [DELETE], CREATE, DROP, [ANALYZE],
 -** [ALTER], or [REINDEX] statement.
 -** If X is a NULL pointer or any other kind of statement, including but
 -** not limited to [ATTACH], [DETACH], [COMMIT], [ROLLBACK], [RELEASE],
 -** [SAVEPOINT], [PRAGMA], or [VACUUM] the result of sqlite3_stmt_readonly(X) is
 -** undefined.
 +** and only if the [prepared statement] X makes no direct changes to
 +** the content of the database file.
 +**
 +** Note that [application-defined SQL functions] or
 +** [virtual tables] might change the database indirectly as a side effect.  
 +** ^(For example, if an application defines a function "eval()" that 
 +** calls [sqlite3_exec()], then the following SQL statement would
 +** change the database file through side-effects:
 +**
 +** <blockquote><pre>
 +**    SELECT eval('DELETE FROM t1') FROM t2;
 +** </pre></blockquote>
 +**
 +** But because the [SELECT] statement does not change the database file
 +** directly, sqlite3_stmt_readonly() would still return true.)^
 +**
 +** ^Transaction control statements such as [BEGIN], [COMMIT], [ROLLBACK],
 +** [SAVEPOINT], and [RELEASE] cause sqlite3_stmt_readonly() to return true,
 +** since the statements themselves do not actually modify the database but
 +** rather they control the timing of when other statements modify the 
 +** database.  ^The [ATTACH] and [DETACH] statements also cause
 +** sqlite3_stmt_readonly() to return true since, while those statements
 +** change the configuration of a database connection, they do not make 
 +** changes to the content of the database files on disk.
  */
  int sqlite3_stmt_readonly(sqlite3_stmt *pStmt);
  
diff --cc src/sqliteInt.h
Simple merge
diff --cc src/vdbe.c
Simple merge
diff --cc src/wal.c
index ff327bf6bb5a30147beab40fa3aa81f765b05f3d,2cb0e415ee9c1aa45ab212bd35d92ac36500f30f..d557b12f047097fdafd2e8156e72daafdd26999b
+++ b/src/wal.c
@@@ -1604,12 -1600,11 +1635,13 @@@ static int walCheckpoint
    u32 mxPage;                     /* Max database page to write */
    int i;                          /* Loop counter */
    volatile WalCkptInfo *pInfo;    /* The checkpoint status information */
+   int (*xBusy)(void*) = 0;        /* Function to call when waiting for locks */
  
-   szPage = (pWal->hdr.szPage&0xfe00) + ((pWal->hdr.szPage&0x0001)<<16);
+   szPage = walPagesize(pWal);
    testcase( szPage<=32768 );
    testcase( szPage>=65536 );
 +  pInfo = walCkptInfo(pWal);
 +  if( pInfo->nBackfill>=pWal->hdr.mxFrame ) return SQLITE_OK;
  
    /* Allocate the iterator */
    rc = walIteratorInit(pWal, &pIter);
    ** cannot be backfilled from the WAL.
    */
    mxSafeFrame = pWal->hdr.mxFrame;
 +  mxPage = pWal->hdr.nPage;
    for(i=1; i<WAL_NREADER; i++){
      u32 y = pInfo->aReadMark[i];
-     if( mxSafeFrame>=y ){
+     if( mxSafeFrame>y ){
        assert( y<=pWal->hdr.mxFrame );
-       rc = walLockExclusive(pWal, WAL_READ_LOCK(i), 1);
+       rc = walBusyLock(pWal, xBusy, pBusyArg, WAL_READ_LOCK(i), 1);
        if( rc==SQLITE_OK ){
          pInfo->aReadMark[i] = READMARK_NOT_USED;
          walUnlockExclusive(pWal, WAL_READ_LOCK(i), 1);
Simple merge
diff --cc test/wal2.test
index e31fe794937bd6381841e5a0e970df0b04c58db2,299afa4f79958253da274d282a23bf1d627623b4..7927d7a9a8345547cb43e1b32f09463c6132178f
@@@ -1154,127 -1152,6 +1154,127 @@@ if {$::tcl_platform(platform) == "unix"
      }
      catch { db close }
    }
- } 
+ }
  
 +#-------------------------------------------------------------------------
 +# Test that "PRAGMA checkpoint_fullsync" appears to be working.
 +#
 +foreach {tn sql reslist} {
 +  1 { }                                 {8 0 3 0 5 0}
 +  2 { PRAGMA checkpoint_fullfsync = 1 } {8 4 3 2 5 2}
 +  3 { PRAGMA checkpoint_fullfsync = 0 } {8 0 3 0 5 0}
 +} {
 +  faultsim_delete_and_reopen
 +
 +  execsql $sql
 +  do_execsql_test wal2-14.$tn.1 { PRAGMA journal_mode = WAL } {wal}
 +
 +  set sqlite_sync_count 0
 +  set sqlite_fullsync_count 0
 +
 +  do_execsql_test wal2-14.$tn.2 {
 +    PRAGMA wal_autocheckpoint = 10;
 +    CREATE TABLE t1(a, b);                -- 2 wal syncs
 +    INSERT INTO t1 VALUES(1, 2);          -- 1 wal sync
 +    PRAGMA wal_checkpoint;                -- 1 wal sync, 1 db sync
 +    BEGIN;
 +      INSERT INTO t1 VALUES(3, 4);
 +      INSERT INTO t1 VALUES(5, 6);
 +    COMMIT;                               -- 1 wal sync
 +    PRAGMA wal_checkpoint;                -- 1 wal sync, 1 db sync
 +  } {10}
 +
 +  do_test wal2-14.$tn.3 {
 +    list $sqlite_sync_count $sqlite_fullsync_count
 +  } [lrange $reslist 0 1]
 +
 +  set sqlite_sync_count 0
 +  set sqlite_fullsync_count 0
 +
 +  do_test wal2-14.$tn.4 {
 +    execsql { INSERT INTO t1 VALUES(7, zeroblob(12*4096)) }
 +    list $sqlite_sync_count $sqlite_fullsync_count
 +  } [lrange $reslist 2 3]
 +
 +  set sqlite_sync_count 0
 +  set sqlite_fullsync_count 0
 +
 +  do_test wal2-14.$tn.5 {
 +    execsql { PRAGMA wal_autocheckpoint = 1000 }
 +    execsql { INSERT INTO t1 VALUES(9, 10) }
 +    execsql { INSERT INTO t1 VALUES(11, 12) }
 +    execsql { INSERT INTO t1 VALUES(13, 14) }
 +    db close
 +    list $sqlite_sync_count $sqlite_fullsync_count
 +  } [lrange $reslist 4 5]
 +}
 +
 +catch { db close }
 +
 +# PRAGMA checkpoint_fullsync
 +# PRAGMA fullfsync
 +# PRAGMA synchronous
 +#
 +foreach {tn settings commit_sync ckpt_sync} {
 +  1  {0 0 off}     {0 0}  {0 0}
 +  2  {0 0 normal}  {0 0}  {2 0}
 +  3  {0 0 full}    {1 0}  {2 0}
 +
 +  4  {0 1 off}     {0 0}  {0 0}
 +  5  {0 1 normal}  {0 0}  {0 2}
 +  6  {0 1 full}    {0 1}  {0 2}
 +
 +  7  {1 0 off}     {0 0}  {0 0}
 +  8  {1 0 normal}  {0 0}  {0 2}
 +  9  {1 0 full}    {1 0}  {0 2}
 +
 +  10 {1 1 off}     {0 0}  {0 0}
 +  11 {1 1 normal}  {0 0}  {0 2}
 +  12 {1 1 full}    {0 1}  {0 2}
 +} {
 +  forcedelete test.db
 +
 +  testvfs tvfs -default 1
 +  tvfs filter xSync
 +  tvfs script xSyncCb
 +  proc xSyncCb {method file fileid flags} {
 +    incr ::sync($flags)
 +  }
 +
 +  sqlite3 db test.db
 +  do_execsql_test 15.$tn.1 "
 +    CREATE TABLE t1(x);
 +    PRAGMA journal_mode = WAL;
 +    PRAGMA checkpoint_fullfsync = [lindex $settings 0];
 +    PRAGMA fullfsync = [lindex $settings 1];
 +    PRAGMA synchronous = [lindex $settings 2];
 +  " {wal}
 +
 +  do_test 15.$tn.2 {
 +    set sync(normal) 0
 +    set sync(full) 0
 +    execsql { INSERT INTO t1 VALUES('abc') }
 +    list $::sync(normal) $::sync(full)
 +  } $commit_sync
 +
 +  do_test 15.$tn.3 {
 +    set sync(normal) 0
 +    set sync(full) 0
 +    execsql { INSERT INTO t1 VALUES('def') }
 +    list $::sync(normal) $::sync(full)
 +  } $commit_sync
 +
 +  do_test 15.$tn.4 {
 +    set sync(normal) 0
 +    set sync(full) 0
 +    execsql { PRAGMA wal_checkpoint }
 +    list $::sync(normal) $::sync(full)
 +  } $ckpt_sync
 +  
 +  db close
 +  tvfs delete
 +}
 +
 +
 +
  finish_test
diff --cc test/wal3.test
Simple merge