]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
Merge latest changes from wal2 branch.
authordan <Dan Kennedy>
Thu, 26 Nov 2020 18:41:08 +0000 (18:41 +0000)
committerdan <Dan Kennedy>
Thu, 26 Nov 2020 18:41:08 +0000 (18:41 +0000)
FossilOrigin-Name: b451bb724ea73367a27c51fcf6e48d02d774c7c5b5b8ec0bd3726a6e4689e591

25 files changed:
1  2 
ext/session/sqlite3session.c
ext/session/test_session.c
main.mk
manifest
manifest.uuid
src/btree.c
src/btree.h
src/btreeInt.h
src/build.c
src/func.c
src/main.c
src/os_unix.c
src/pager.c
src/parse.y
src/select.c
src/sqlite.h.in
src/sqliteInt.h
src/test1.c
src/update.c
src/vacuum.c
src/vdbe.c
src/vdbeaux.c
src/wal.c
test/permutations.test
test/threadtest3.c

Simple merge
Simple merge
diff --cc main.mk
Simple merge
diff --cc manifest
index 15c72499307368e9b600faed4842d655e6da0917,c58b0f659f2cc6c2f3f1028c1acee5b004fd7ad5..a23dfda3427275a6d33397e84792ab3223a20339
+++ b/manifest
@@@ -1,5 -1,5 +1,5 @@@
- C Merge\sall\sthe\slatest\schanges\sinto\sthe\sbegin-concurrent-pnu-wal2\sbranch.
- D 2020-08-11T13:22:22.424
 -C Merge\slatest\strunk\schanges\sinto\sthis\sbranch.
 -D 2020-11-26T18:08:59.690
++C Merge\slatest\schanges\sfrom\swal2\sbranch.
++D 2020-11-26T18:41:08.207
  F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1
  F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea
  F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724
@@@ -34,14 -34,14 +34,15 @@@ F autoconf/tea/win/rules.vc c511f222b80
  F config.guess 883205ddf25b46f10c181818bf42c09da9888884af96f79e1719264345053bd6
  F config.h.in 6376abec766e9a0785178b1823b5a587e9f1ccbc
  F config.sub c2d0260f17f3e4bc0b6808fccf1b291cb5e9126c14fc5890efc77b9fd0175559
- F configure a97f98dfff699495aef66ae3d9c424345778a663f583e0d6e7522670518f87c1 x
- F configure.ac 40d01e89cb325c28b33f5957e61fede0bd17da2b5e37d9b223a90c8a318e88d4
+ F configure e7df2824b6e60d482d919fb3e7d823faf08467093b096ad47a4fe2eec3f0ba99 x
+ F configure.ac 73545c21eebcef9398d85c982c7be260f07708256778221b541f83ae8c6f61eb
  F contrib/sqlitecon.tcl 210a913ad63f9f991070821e599d600bd913e0ad
  F doc/F2FS.txt c1d4a0ae9711cfe0e1d8b019d154f1c29e0d3abfe820787ba1e9ed7691160fcd
- F doc/lemon.html 1edc0f916e771212792d4d077aedc05168bf13fd65d64d41b2c13e46ac0063a8
 +F doc/begin_concurrent.md 4bee2c3990d1eb800f1ce3726a911292a8e4b889300b2ffd4b08d357370db299
+ F doc/lemon.html c5d8ba85ac1daef7be8c2d389899480eb62451ff5c09b0c28ff8157bb8770746
  F doc/pager-invariants.txt 27fed9a70ddad2088750c4a2b493b63853da2710
  F doc/trusted-schema.md 33625008620e879c7bcfbbfa079587612c434fa094d338b08242288d358c3e8a
+ F doc/vdbesort-memory.md 4da2639c14cd24a31e0af694b1a8dd37eaf277aff3867e9a8cc14046bc49df56
  F doc/vfs-shm.txt e101f27ea02a8387ce46a05be2b1a902a021d37a
  F doc/wal-lock.md 781726aaba20bafeceb7ba9f91d5c98c6731691b30c954e37cf0b49a053d461d
  F doc/wal2.md a807405a05e19a4945c5905a9ffa0fe45b8560dd7572461192501f565c19cdb5
@@@ -453,18 -454,16 +457,18 @@@ F ext/session/sessioninvert.test 040755
  F ext/session/sessionrebase.test ccfa716b23bd1d3b03217ee58cfd90c78d4b99f53e6a9a2f05e82363b9142810
  F ext/session/sessionstat1.test 218d351cf9fcd6648f125a26b607b140310160184723c2666091b54450a68fb5
  F ext/session/sessionwor.test 67b5ab91d4f93ce65ff1f58240ac5ddf73f8670facc1ffa49cef56293d52818d
 -F ext/session/sqlite3session.c 2c76b8c3a5d6dab736686f8a48833b8bdac0871ecc6f447f9839d28bd4a63d6c
 -F ext/session/sqlite3session.h a2db5b72b938d12c727b4b4ec632254ca493670a9c0de597af3271a7f774fc57
 -F ext/session/test_session.c 24286d958dc6f4ca4d7e710f09bc0fa9d50956a40dd99fd8223e7488024c71fe
 +F ext/session/sqlite3changebatch.c d5553b79e012ee2cb06c0a96bdf9dfe19e66354390ea0036cc46c4953142d517
 +F ext/session/sqlite3changebatch.h e72016998c9a22d439ddfd547b69e1ebac810c24
- F ext/session/sqlite3session.c 6aa98b2158033fc9a20f789df5a7a7815284a458b18ed1c719d073be0bd635eb
++F ext/session/sqlite3session.c fe5fab3c63b734a647784596e44f4ee778e7c7b12ce7aaa2cf4ed445d6c5763a
 +F ext/session/sqlite3session.h 030746cb4c8fb18a3b635e0ff93f609a0ed03da77ce8172dfa61cccead42878c
- F ext/session/test_session.c 60e15d5db8ae7a0f521e70a7504ba1f74fc50548a25a5397808f487bc6a92b5d
++F ext/session/test_session.c 1e4790384606226f8e63a6ebebb39962721d0363c8192c230de1e4c31c410c1b
  F ext/userauth/sqlite3userauth.h 7f3ea8c4686db8e40b0a0e7a8e0b00fac13aa7a3
  F ext/userauth/user-auth.txt e6641021a9210364665fe625d067617d03f27b04
  F ext/userauth/userauth.c 7f00cded7dcaa5d47f54539b290a43d2e59f4b1eb5f447545fa865f002fc80cb
  F install-sh 9d4de14ab9fb0facae2f48780b874848cbf2f895 x
  F ltmain.sh 3ff0879076df340d2e23ae905484d8c15d5fdea8
  F magic.txt 8273bf49ba3b0c8559cb2774495390c31fd61c60
- F main.mk 6d989e321553de3910353b33054c4178d340ecf8dd333125234753b36718da55
 -F main.mk cf39ff6eb3b3c8b95a22ebc0764dbba3baa168b0c353ae8216294df45aa11f4d
++F main.mk c87970028c63dd8dede77e022304e36cfecbd1faba139bd3a53836ef056dcffd
  F mkso.sh fd21c06b063bb16a5d25deea1752c2da6ac3ed83
  F mptest/config01.test 3c6adcbc50b991866855f1977ff172eb6d901271
  F mptest/config02.test 4415dfe36c48785f751e16e32c20b077c28ae504
@@@ -476,38 -475,38 +480,38 @@@ F spec.template 86a4a43b99ebb3e75e6b9a7
  F sqlite.pc.in 42b7bf0d02e08b9e77734a47798d1a55a9e0716b
  F sqlite3.1 fc7ad8990fc8409983309bb80de8c811a7506786
  F sqlite3.pc.in 48fed132e7cb71ab676105d2a4dc77127d8c1f3a
- F src/alter.c 4bc16666a0df99d49658ec66f00ca36e541ec6cb39673ccc51be6a981fb9b2ce
- F src/analyze.c 5cffff3d355858cd22bfc6e20ac7203510d2e1cc935086eb06f4abb2f579f628
- F src/attach.c 0b11e00c166b622c84ec176773b1d691c61ad07d247809e3e1635d4e99e71d30
+ F src/alter.c b6de60d59419e34f5b48ff2b21fe0f9bb66fc714e5545a6ac790ac7a0c46548c
+ F src/analyze.c 01c6c6765cb4d40b473b71d85535093730770bb186f2f473abac25f07fcdee5c
+ F src/attach.c 0f497c15c4cfe3bdcb214f0dbdbbb6c5ed7e8a9308ac445c7959f5e5780437a9
  F src/auth.c a3d5bfdba83d25abed1013a8c7a5f204e2e29b0c25242a56bc02bb0c07bf1e06
- F src/backup.c b1c90cd4110248c8e1273ff4578d3a84c0c34725e1b96dacd4a6294a908702de
+ F src/backup.c 3014889fa06e20e6adfa0d07b60097eec1f6e5b06671625f476a714d2356513d
 -F src/bitvec.c 17ea48eff8ba979f1f5b04cc484c7bb2be632f33
 +F src/bitvec.c 8433d9e98dd6f2ea3286e0d2fe5d65de1bfc18a706486eb2026b01be066b5806
  F src/btmutex.c 8acc2f464ee76324bf13310df5692a262b801808984c1b79defb2503bbafadb6
- F src/btree.c 868a8d10764355672c06da94c9b33e9c07ca47c26aef769c1b132897308cb7cf
- F src/btree.h 7c0de202ff56db220d12abdd121ddda9a94994fda869c0ea273580cd0a653297
- F src/btreeInt.h 0fdb5107212804716ae74c1e140de46c6ad4ed2bfbbe1271a8925dbe8d12ed0e
- F src/build.c 11d915b843fa8f31c6cc8b62c7f4e68a65496effa6fbe35882ab949635b8d0bc
 -F src/btree.c abfcbfc8aaf36639c13fdca7f5726aa42620ca4eb1edf1d27262bc9b7aaeaa1a
 -F src/btree.h dcdff4037d75b3f032a5de0d922fcfaf35d48589417f634fa8627362709315f9
 -F src/btreeInt.h ffd66480520d9d70222171b3a026d78b80833b5cea49c89867949f3e023d5f43
 -F src/build.c f6449d4e85e998e14d3f537e8ea898dca2fcb83c277db3e60945af9b9177db81
++F src/btree.c f667788093ffab745776e943d3f9db030aea8530c1d14b062ca771e97d7527a1
++F src/btree.h a2eda1ab68939ea3057bc797fd16179dfe2bcd247c022f62ceccd136186611a5
++F src/btreeInt.h 900af7149206694de988d14fbc116e482a732340a8dc5e4bfdd23b7faf7d6f14
++F src/build.c 4c44cee793d16c653986cf00c32c36cf0cbfe4932a319cc7d5c0f10a2801151c
  F src/callback.c d0b853dd413255d2e337b34545e54d888ea02f20da5ad0e63585b389624c4a6c
  F src/complete.c a3634ab1e687055cd002e11b8f43eb75c17da23e
  F src/ctime.c e98518d2d3d4029a13c805e07313fb60c877be56db76e90dd5f3af73085d0ce6
  F src/date.c dace306a10d9b02ee553d454c8e1cf8d3c9b932e137738a6b15b90253a9bfc10
  F src/dbpage.c 8a01e865bf8bc6d7b1844b4314443a6436c07c3efe1d488ed89e81719047833a
  F src/dbstat.c 3aa79fc3aed7ce906e4ea6c10e85d657299e304f6049861fe300053ac57de36c
- F src/delete.c 410c771c25afc113c273d9efad6ab6881bda28c75a1838b9d2c52ba20d1dc704
- F src/expr.c 58c06940d964c2cf455b979cf66a648499d294a5ee6dadcaeaed447257c1dc75
+ F src/delete.c 927cf8f900583e79aca8f1a321979e0a8f053babd9a690b44b38f79de2cc09fe
+ F src/expr.c 0d196ed5a2ebf96be7e8df88add4fabfad0dce16c0fed81a4b8f6a26e259797f
  F src/fault.c 460f3e55994363812d9d60844b2a6de88826e007
  F src/fkey.c 83372403298e6a7dd989a47aaacdbaa5b4307b5199dbd56e07d4896066b3de72
- F src/func.c 3796e7e269a9f23867ad3e64152399d5f850f83b9ee3ba57a931da7e46ef9c00
 -F src/func.c 574f7e5a67e4b7a7855cf3478037717c8f44686c0cd727e1d7f7773414165c03
++F src/func.c 095f359528417453a4500b5f92dfe146273148f80ad926e53239bfc928a84933
  F src/global.c 943256ac44f333039d35a9830c18d075a81fa6b6bf2af05771494a9acfb9a40b
  F src/hash.c 8d7dda241d0ebdafb6ffdeda3149a412d7df75102cecfc1021c98d6219823b19
  F src/hash.h 9d56a9079d523b648774c1784b74b89bd93fac7b365210157482e4319a468f38
  F src/hwtime.h cb1d7e3e1ed94b7aa6fde95ae2c2daccc3df826be26fc9ed7fd90d1750ae6144
  F src/in-operator.md 10cd8f4bcd225a32518407c2fb2484089112fd71
- F src/insert.c 957254a2d0542597455d0d4c640e4e3f3eea8c6d78f04582df03dfc626f07925
+ F src/insert.c 7e081d33aab4a9d761c39dccf3c3872c35501565d2ed9db66301918d23bc7901
  F src/legacy.c d7874bc885906868cd51e6c2156698f2754f02d9eee1bae2d687323c3ca8e5aa
- F src/loadext.c 436af4968c6954d304fce9efa12719367bd8f37b19b93b71d6ad607e85adbb47
- F src/main.c 2f648881aa3d90b4bc6ceb1808a73400173e4c7e1aca9778a4696434a547be69
- F src/malloc.c 22d5bdd9fe88ae4fad1b91a1b9735104b82853ffef868f1f05517d60dc1875f5
+ F src/loadext.c 8c9c8cd2bd8eecdb06d9b6e89de7e9e65bae45cc8fc33609cc74023a5c296067
 -F src/main.c 54d61d1e94f225636053c862c930d7dd7b29162b93d3f3ecb00439910ccba02a
++F src/main.c 975a31135c95ab9b33d275141e4c54171d11b1cc3d6c7060db48a72536304fb5
+ F src/malloc.c c1af4ac5a463648cd2953fd4ac679b3ba9022ce5ec794a60806150ad69dfd33a
  F src/mem0.c 6a55ebe57c46ca1a7d98da93aaa07f99f1059645
  F src/mem1.c c12a42539b1ba105e3707d0e628ad70e611040d8f5e38cf942cee30c867083de
  F src/mem2.c b93b8762ab999a29ae7751532dadf0a1ac78040308a5fb1d17fcc365171d67eb
@@@ -526,33 -525,33 +530,33 @@@ F src/os.c 80e4cf3e5da06be03ca641661e33
  F src/os.h 48388821692e87da174ea198bf96b1b2d9d83be5dfc908f673ee21fafbe0d432
  F src/os_common.h b2f4707a603e36811d9b1a13278bffd757857b85
  F src/os_setup.h 0dbaea40a7d36bf311613d31342e0b99e2536586
- F src/os_unix.c 9abb2b5d1cabf67bfb260c04c265169fa49e3f09d5c4bc820813b5b7c5c41c34
- F src/os_win.c a2149ff0a85c1c3f9cc102a46c673ce87e992396ba3411bfb53db66813b32f1d
 -F src/os_unix.c adbbcea4c63d3b400d405f60a5da4c01433753ec4a12e2dc695beb2bbd671fe9
++F src/os_unix.c 09f02e450992ae878ab2ab2eea45e92d6bf12d53d0643e5ccd1f3e10103ad7de
+ F src/os_win.c 77d39873836f1831a9b0b91894fec45ab0e9ca8e067dc8c549e1d1eca1566fe9
  F src/os_win.h 7b073010f1451abe501be30d12f6bc599824944a
- F src/pager.c 96cb7fcda8ba78b440a1e27fb39e77b47ffd27b88b8fc492b9ae4ce3092dabec
 -F src/pager.c 10d275f5c5dc68a51c1f5dd96f25a91886933e0d87f620e04575a798effb9d9b
 -F src/pager.h 9d38ac4b9f0e1361f7ddb6aa0675a54f5e4f085703108d3aafe7868872113f92
 -F src/parse.y 9ce4dfb772608ed5bd3c32f33e943e021e3b06cfd2c01932d4280888fdd2ebed
++F src/pager.c d24754ab1d9e03349aca479f6357c716183a0db12df930f387071024f557efc1
 +F src/pager.h 034a193e53d6649bdb641aa996e38094dbb7cbe365d8c10eba871a38a0f5ebb3
- F src/parse.y b2a9db24fee32edf26e0e4970c64394eed90f0c3608fae6f3433cc5dd3404a83
++F src/parse.y 5ba6522aba301e829917c8dd48290d357b6a9f68276d411739d01f266bafe4be
  F src/pcache.c 385ff064bca69789d199a98e2169445dc16e4291fa807babd61d4890c3b34177
  F src/pcache.h 4f87acd914cef5016fae3030343540d75f5b85a1877eed1a2a19b9f284248586
  F src/pcache1.c 6596e10baf3d8f84cc1585d226cf1ab26564a5f5caf85a15757a281ff977d51a
- F src/pragma.c eedd779f8dd3c0c6328454510311286da41c298b85848105ed88d00b886daad8
+ F src/pragma.c 3c948d3ed733ece947757fbe2c1682ce0858f410c23d2347f8e0d8256f00098f
 -F src/pragma.h 8dc78ab7e9ec6ce3ded8332810a2066f1ef6267e2e03cd7356ee00276125c6cf
 +F src/pragma.h b93fd693bd38cefeaf8e2c7e8c929717f7799a9770104cdd2bae8df2a84e2da7
- F src/prepare.c 3d5a761d026052bc888d1b803a06dd2bfe245e8e836d4689f927003549148b0f
- F src/printf.c 9efcd4e984f22bcccb1ded37a1178cac98f6e3a0534e1e0629f64899971f8838
+ F src/prepare.c 270170a239c0f66bd3c228f373afe24447c2614a6829ae22080babc64f241931
+ F src/printf.c 30e92b638fac71dcd85cdea1d12ecfae354c9adee2c71e8e1ae4727cde7c91ed
 -F src/random.c 80f5d666f23feb3e6665a6ce04c7197212a88384
 +F src/random.c f27af4099afaea7284ade5c206224dcfdb2334cfd119d018b470d46356b3f27d
- F src/resolve.c d74715aceed2a8f493ba244d535646fa93132042a4400a29dfd26ec841514048
+ F src/resolve.c 1948a92ca9eab776632816b97e57c61d933474a78aad4f4ef835c916a83dbb1c
  F src/rowset.c ba9515a922af32abe1f7d39406b9d35730ed65efab9443dc5702693b60854c92
- F src/select.c 02c5b12ca8dc6c7c1a5fec01f0eb09867692962263ddcaf47d6d7264eebdc55d
- F src/shell.c.in b9b819feede7b85585ab0826490a352e04e2ee46e8132c92597d29972b2be1d7
- F src/sqlite.h.in 48dcf94e19ff17024767f549b966f5889c6cc46060d0d5f386b67289c02ec522
 -F src/select.c 31387e56f5e6d1adc798dfa04b946001289a61e65acf4615f7b7130f121f3b9c
++F src/select.c fe64564a9437fde31824b85b02d51a2806468e3c70666528087a1cb0730caee8
+ F src/shell.c.in 55113760ae91a05c6ce4558714a1c8fc7a44bf266f735de6e71ea40f79e69830
 -F src/sqlite.h.in 457c991c9d2ff483e17e5b5eb1a83c6793516d478cc63a78e1ea7b362e27e678
++F src/sqlite.h.in a3452ff4026c01484ed9291388d538c3de7da4118e359c6972de66060317eca8
  F src/sqlite3.rc 5121c9e10c3964d5755191c80dd1180c122fc3a8
- F src/sqlite3ext.h 2d1af80082edffd71c6f96f70ad1ce6a4fb46615ad10291fc77fe0dea9ff0197
- F src/sqliteInt.h 4b987a6c9a6aee3d6386b460e8b297eba5ea84344d4e54f74e68b879be814193
- F src/sqliteLimit.h 95cb8479ca459496d9c1c6a9f76b38aee12203a56ce1092fe13e50ae2454c032
+ F src/sqlite3ext.h 61b38c073d5e1e96a3d45271b257aef27d0d13da2bea5347692ae579475cd95e
 -F src/sqliteInt.h c01115c8dd967f7d334a98ba37ac821eafb04144c8085a795daaf2185743d27a
++F src/sqliteInt.h a40064e6dc3d788bb625e7a34e10b9e4b84c573925540bc07516cb691dd6d980
+ F src/sqliteLimit.h d7323ffea5208c6af2734574bae933ca8ed2ab728083caa117c9738581a31657
  F src/status.c 4b8bc2a6905163a38b739854a35b826c737333fab5b1f8e03fa7eb9a4799c4c1
  F src/table.c 0f141b58a16de7e2fbe81c308379e7279f4c6b50eb08efeec5892794a0ba30d1
  F src/tclsqlite.c 986b6391f02cd9b53c1d688be55899f6ffddeb8e8014cd83c1b73ff912579a71
- F src/test1.c 944a8b090e11921c5aa0bf82dfa99f6d3b782b54775ee1f00017bcfd721fc61b
 -F src/test1.c 465b7a35b7e231bf2833e47c1371b5dfc99bd803ebe73783862399d479d696a5
++F src/test1.c 67aa729f37c2d8066bf0c44536c5ab8646b5dc84d5f84bde6f7397147a4513cc
  F src/test2.c 3efb99ab7f1fc8d154933e02ae1378bac9637da5
  F src/test3.c 61798bb0d38b915067a8c8e03f5a534b431181f802659a6616f9b4ff7d872644
  F src/test4.c 7c4420e01c577b5c4add2cb03119743b1a357543d347773b9e717195ea967159
@@@ -567,13 -566,13 +571,13 @@@ F src/test_backup.c bf5da90c9926df0a4b9
  F src/test_bestindex.c 78809f11026f18a93fcfd798d9479cba37e1201c830260bf1edc674b2fa9b857
  F src/test_blob.c ae4a0620b478548afb67963095a7417cd06a4ec0a56adb453542203bfdcb31ce
  F src/test_btree.c 8b2dc8b8848cf3a4db93f11578f075e82252a274
 -F src/test_config.c 5ea19bf0972a9d91728518b4d30e91477acce80496003ecbef3a7fb18d0bd081
 +F src/test_config.c 2882bb5dfb6429a79736029766fd12f4fcf25a721dd9e48e71eeca3ccf2c94df
  F src/test_delete.c e2fe07646dff6300b48d49b2fee2fe192ed389e834dd635e3b3bac0ce0bf9f8f
  F src/test_demovfs.c 86142ba864d4297d54c5b2e972e74f3141ae4b30f05b3a95824184ed2d3d7f91
- F src/test_devsym.c 6109b45c3db3ef7b002320947ed448c027356ab8b885156ff535fd8684d4a571
+ F src/test_devsym.c aff2255ea290d7718da08af30cdf18e470ff7325a5eff63e0057b1496ed66593
  F src/test_fs.c ba1e1dc18fd3159fdba0b9c4256f14032159785320dfbd6776eb9973cb75d480
  F src/test_func.c 181f992e5495644434c4f0e3cc72362a78c295eb2cf3ff4d02498b8bde7aa276
- F src/test_hexio.c 0340a961c58d8c707c5f87e8b2b0a20c48ab2ac96961546cae432e931aaa989f
+ F src/test_hexio.c a605a100e628d39330044ae5f34cb19d50843061ed3178c3f83b37aef65f7e0a
  F src/test_init.c 4413c211a94b62157ca4c145b3f27c497f03c664
  F src/test_intarray.c 39b4181662a0f33a427748d87218e7578d913e683dc27eab7098bb41617cac71
  F src/test_intarray.h d57ae92f420cda25e22790dac474d60961bd0c500cbaa3338a05152d4a669ef7
@@@ -608,31 -607,31 +612,31 @@@ F src/test_wsd.c 41cadfd9d97fe8e3e4e44f
  F src/threads.c 4ae07fa022a3dc7c5beb373cf744a85d3c5c6c3c
  F src/tokenize.c 4dc01b267593537e2a0d0efe9f80dabe24c5b6f7627bc6971c487fa6a1dacbbf
  F src/treeview.c 4b92992176fb2caefbe06ba5bd06e0e0ebcde3d5564758da672631f17aa51cda
- F src/trigger.c ef67bde309a831515dc3c2173d792574309f2f42d45f8c078743fae9f7f98c75
- F src/update.c ca16ff9a6a33f62da491802de574190b9e60b0b845b863dec128ba74b8e6ba11
+ F src/trigger.c 515e79206d40d1d4149129318582e79a6e9db590a7b74e226fdb5b2a6c7e1b10
 -F src/update.c 9f126204a6acb96bbe47391ae48e0fc579105d8e76a6d9c4fab3271367476580
++F src/update.c 602d92660a940600f480e013ce2a23eef1da2eb8e2d1d7ece10dbc9ef464bc8c
  F src/upsert.c 2920de71b20f04fe25eb00b655d086f0ba60ea133c59d7fa3325c49838818e78
  F src/utf.c ee39565f0843775cc2c81135751ddd93eceb91a673ea2c57f61c76f288b041a0
- F src/util.c c8bf30c4356b091bcc3b624d0e24b2b4d11b8be4d6c90d8e0705971e15cc819b
- F src/vacuum.c 4f586072e58b950f31737a2f5294acf9ae077ce4dc62f991b71874c650b9e276
- F src/vdbe.c 6b86ee9462e938a605b9f374436ac1ef558fb40d4e48586ea585e650553a7854
+ F src/util.c c0c7977de7ef9b8cb10f6c85f2d0557889a658f817b0455909a49179ba4c8002
 -F src/vacuum.c 492422c1463c076473bae1858799c7a0a5fe87a133d1223239447c422cd26286
 -F src/vdbe.c e73ad83b92b5196c97c019fa8ec3aec2e77e023fd1b9ddfe4795cf3830845bbc
++F src/vacuum.c 9d6ac090ff36d80f0a2c5bfc63994b714c464bfc44efa5056c457a6a4163dc99
++F src/vdbe.c 31c984a6a4ec0445a57b13d76f59323cb364c050648d3acb3421751886e6184e
  F src/vdbe.h 83603854bfa5851af601fc0947671eb260f4363e62e960e8a994fb9bbcd2aaa1
- F src/vdbeInt.h 762abffb7709f19c2cb74af1bba73a900f762e64f80d69c31c9ae89ed1066b60
+ F src/vdbeInt.h 3ca5e9fd6e095a8b6cf6bc3587a46fc93499503b2fe48951e1034ba9e2ce2f6e
  F src/vdbeapi.c c5e7cb2ab89a24d7f723e87b508f21bfb1359a04db5277d8a99fd1e015c12eb9
- F src/vdbeaux.c 35730cc4c8d16bc313e3b1d4107f713dc5c5d75fbfbb4743a69047cda8bb8b75
 -F src/vdbeaux.c c76b7e96e189f5056d1de914d33d07bd03d3b88741f75375c8e18c9b11ffd379
++F src/vdbeaux.c 0aaec35c90956fb03238e9ce3981e7111a53ff99eb161ef79fa55ae14fedcf7c
  F src/vdbeblob.c 253ed82894924c362a7fa3079551d3554cd1cdace39aa833da77d3bc67e7c1b1
  F src/vdbemem.c 947f2a65910edb4014dc981d33e414a68c51f169f9df8c4c493a0ba840b6eb1f
- F src/vdbesort.c 2be76d26998ce2b3324cdcc9f6443728e54b6c7677c553ad909c7d7cfab587df
+ F src/vdbesort.c f5b5e473a7cee44e47a94817b042fd7172cf3aa2c0a7928a8339d612bcfdec5a
  F src/vdbetrace.c fa3bf238002f0bbbdfb66cc8afb0cea284ff9f148d6439bc1f6f2b4c3b7143f0
  F src/vdbevtab.c f99b275366c5fc5e2d99f734729880994ab9500bdafde7fae3b02d562b9d323c
  F src/vtab.c 5f5fc793092f53bbdfde296c50f563fb7bda58cf48e9cf6a8bdfbc5abd409845
  F src/vxworks.h d2988f4e5a61a4dfe82c6524dd3d6e4f2ce3cdb9
- F src/wal.c fb11935f9ade64b29659f8001656dca8b390def62e6848817d440c682e0020f1
 -F src/wal.c 4d548c33023f0d71dd63c327abdcae6cae69f7bfe6aa1796c674dc8f3230f1d9
 -F src/wal.h d01234e828943e002040c22a7e017642962f9fd9b2dc142fa599769ae4e459e9
++F src/wal.c 14561b22781dbf67ec97dddce537e31c1419f94e06d548d2d26cb5c44552ecda
 +F src/wal.h 7a733af13b966ecb81872ce397e862116b3575ea53245b90b139a2873ee87825
  F src/walker.c 3df26a33dc4f54e8771600fb7fdebe1ece0896c2ad68c30ab40b017aa4395049
- F src/where.c 2ea911238674e9baaeddf105dddabed92692a01996073c4d4983f9a7efe481f9
- F src/whereInt.h 6b874aa15f94e43a2cec1080be64d955b04deeafeac90ffb5d6975c0d511be3c
- F src/wherecode.c 8064fe5c042824853a9b1fda670054a51a49033a6c79059988c97751ccf8088e
- F src/whereexpr.c 264d58971eaf8256eb5b0917bcd7fc7a1f1109fdda183a8382308a1b18a2dce7
+ F src/where.c ad738741bf45999188a3047f6277063e3f6843304d581e3ad5875419afdeb6b2
+ F src/whereInt.h 59077fbd0b3d01bc8715e746c86a99ebf4c85bde8a57077ec04d2a23e59666ec
+ F src/wherecode.c a3a1aff30fe99a818d8e7c607980f033f40c68d890e03ed25838b9dbb7908bee
+ F src/whereexpr.c 3a463e156ea388083c501502229c2c7f4f5c6b5330ea59bdf40d6eb6e155a25f
  F src/window.c edd6f5e25a1e8f2b6f5305b7f5f7da7bb35f07f0d432b255b1d4c2fcab4205aa
  F test/8_3_names.test ebbb5cd36741350040fd28b432ceadf495be25b2
  F test/affinity2.test ce1aafc86e110685b324e9a763eab4f2a73f737842ec3b687bd965867de90627
@@@ -767,18 -766,8 +772,18 @@@ F test/collateA.test b8218ab90d1fa5c59d
  F test/collateB.test 1e68906951b846570f29f20102ed91d29e634854ee47454d725f2151ecac0b95
  F test/colmeta.test 2c765ea61ee37bc43bbe6d6047f89004e6508eb1
  F test/colname.test 87ad5458bb8709312dac0d6755fd30e8e4ca83298d0a9ef6e5c24277a3c3390e
- F test/conflict.test 58857e2533fb9f2e0358ea7cb191215657846be1dd9da3b3d6df3e750c02ae03
- F test/conflict2.test bb0b94cf7196c64a3cbd815c66d3ee98c2fecd9c
 +F test/concfault.test 500f17c3fcfe7705114422bcc6ddd3c740001a43
 +F test/concfault2.test 34b3fd258836aa305475d00e804c7450ade92f0de0bf9fa620e701446669bb12
 +F test/concurrent.test a0248ec6e3e79a5948453649cf86b5b359175cba55ea636b15426d6f0fa6c3da
 +F test/concurrent2.test 847cd11edc82229a95e1eaf88b55c974430b0f669cefd67a453d274e3480981c
 +F test/concurrent3.test 530671ac706f6a1d0f4992dbdd33a86408330d03cd90fb9e82ecb1b27f5fd081
 +F test/concurrent4.test e0b12cd467137e50259df3b4f837507e82aaa07c35941c88664dc8ed1d089c44
 +F test/concurrent5.test 0c16cbf7446af162a14e6def30445e94016064eb994e5aa4ebb2bebc59554176
 +F test/concurrent6.test a7860e9ca13bb5fb76bcf41c5524fbfa9c37e6e258ecf84ffb5748a272488c67
 +F test/concurrent7.test b96fa5c4cfdf8d5c0bc66b6934214500bad0260884a736f054ccc76e81aae85d
 +F test/concurrent8.test b93937e74a8efb8b84f2fea7595b53418c5f29777bbe9cbdb5dc219b3dd72a7d
+ F test/conflict.test ac0667090f66130ac77d5fb764655558ca6600dd6d88f670ca9123b61c448337
+ F test/conflict2.test 5557909ce683b1073982f5d1b61dfb1d41e369533bfdaf003180c5bc87282dd1
  F test/conflict3.test 81865d9599609aca394fb3b9cd5f561d4729ea5b176bece3644f6ecb540f88ac
  F test/contrib01.test 2a1cbc0f2f48955d7d073f725765da6fbceda6b4
  F test/corrupt.test d7cb0300e4a297147b6a05e92a1684bc8973635c3bcaa3d66e983c9cbdbf47a3
@@@ -1260,7 -1249,8 +1265,7 @@@ F test/pagesize.test 5769fc62d8c890a83a
  F test/pcache.test c8acbedd3b6fd0f9a7ca887a83b11d24a007972b
  F test/pcache2.test af7f3deb1a819f77a6d0d81534e97d1cf62cd442
  F test/percentile.test 4243af26b8f3f4555abe166f723715a1f74c77ff
- F test/permutations.test 710d000f860ff116954ce0b4ccee80dbc4100ad7afcabcfffd0d68382c899dad
 -F test/permutations.test 11dbe9f1c784df5f09f8d44f3e8443a7b8d3e815843abae852095c0952c65bd8
++F test/permutations.test 5ec98f5aa6840c42800fa138bc19adbd33ea455be815dbf52b7d100b515f8ecc
  F test/pg_common.tcl 3b27542224db1e713ae387459b5d117c836a5f6e328846922993b6d2b7640d9f
  F test/pragma.test 50b91bedea9324d3ab48e793f908ee7d2c7dcf84bfa2281e792838be59641ec8
  F test/pragma2.test e5d5c176360c321344249354c0c16aec46214c9f
@@@ -1454,7 -1444,7 +1459,7 @@@ F test/thread2.test f35d2106452b77523b3
  F test/thread_common.tcl 334639cadcb9f912bf82aa73f49efd5282e6cadd
  F test/threadtest1.c 6029d9c5567db28e6dc908a0c63099c3ba6c383b
  F test/threadtest2.c a70a8e94bef23339d34226eb9521015ef99f4df8
- F test/threadtest3.c 4b413718ab3ef5e4f9f1ab0502b89707c5a9ccdc
 -F test/threadtest3.c e63013af10cf236c7610eb06d33bde08c861806dc64be811940ff4d9ddd34a4f
++F test/threadtest3.c cfd72c74a40de3eb7576f1ab2da28183390deadb13f2aa5c8d077aacd41eda60
  F test/threadtest4.c c1e67136ceb6c7ec8184e56ac61db28f96bd2925
  F test/time-wordcount.sh 8e0b0f8109367827ad5d58f5cc849705731e4b90
  F test/tkt-02a8e81d44.test 6c80d9c7514e2a42d4918bf87bf6bc54f379110c
@@@ -1628,9 -1618,9 +1633,10 @@@ F test/triggerG.test 2b816093c91ba73c73
  F test/triggerupfrom.test d25961fa70a99b6736193da7b49a36d8c1d28d56188f0be6406d4366315cd6e4
  F test/trustschema1.test 4e970aef0bfe0cee139703cc7209d0e0f07725d999b180ba50770f49edef1494
  F test/tt3_checkpoint.c 9e75cf7c1c364f52e1c47fd0f14c4340a9db0fe1
 +F test/tt3_core.c 8cd89ead95410f70e7fb02c79f1e040f9c5ad5cf
  F test/tt3_index.c 39eec10a35f57672225be4d182862152896dee4a
  F test/tt3_lookaside1.c 0377e202c3c2a50d688cb65ba203afeda6fafeb9
+ F test/tt3_shared.c b37d22defc944a2ac4c91c927fd06c1d48cd51e2ce9d004fe868625bd2399f93
  F test/tt3_stress.c f9a769ca8b026ecc76ee93ca8c9700a5619f8e51c581107c4053ba6ac97f616f
  F test/tt3_vacuum.c 1753f45917699c9c1f66b64c717a717c9379f776
  F test/types.test bf816ce73c7dfcfe26b700c19f97ef4050d194ff
@@@ -1910,7 -1898,7 +1917,7 @@@ F vsixtest/vsixtest.tcl 6a9a6ab600c25a9
  F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc
  F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e
  F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0
- P ebd39665e5787fa2c35941ab6c6019f95f0c01229076e3859a3349b516183985 91262e665755a1430f3b667867b9c4fa0cc3aa0388c21e8ba436485beefa9f4a
- R 6e6bbd8cfd4d13ad21908fb903425bc4
- U drh
- Z cd5b6aca8ed2e749b6136e56e179c9c3
 -P 4f5481bf291c39e228dd9c67f504dfe70879617b7266245d6236cd1d2d99274c bb174a074b5833181900d396edda955254ea1768750a0ab3b6d714530b1fe13f
 -R ecead359aa280d8a97c53e1be9f0495e
++P ebefcb8607c91d19ee68935b01fc9c237af41df8b866a9372f7940d89ba44c9c cb1f6f18e74aeff522c332cb6c8f4c202bba8fba4ff7869198e4501ffa4a0387
++R 59ebeda1c8fa888639c3b8895a8adf30
+ U dan
 -Z d44a2021d179ad7ee698300552d963cd
++Z 7cc91863c865316e090ee96a83f0661e
diff --cc manifest.uuid
index 307ce171186459e606ae47fbc9fd4cc8c7e601a9,167fd76a75b01322d2ec76017a51c47606f511f0..fe0ffbc1cea6b2e479393f0f4716a0f09c4b9c14
@@@ -1,1 -1,1 +1,1 @@@
- ebefcb8607c91d19ee68935b01fc9c237af41df8b866a9372f7940d89ba44c9c
 -cb1f6f18e74aeff522c332cb6c8f4c202bba8fba4ff7869198e4501ffa4a0387
++b451bb724ea73367a27c51fcf6e48d02d774c7c5b5b8ec0bd3726a6e4689e591
diff --cc src/btree.c
Simple merge
diff --cc src/btree.h
index b687e56e36b3f9d69d51acafcab2dd92147e6779,7a9ed2e3c618140348e889f793f784c48b3fa268..0cd8a274731e447d47dee67060ca75d0190125b0
@@@ -331,8 -339,12 +339,14 @@@ int sqlite3BtreeCursorHasHint(BtCursor*
  int sqlite3BtreeIsReadonly(Btree *pBt);
  int sqlite3HeaderSizeBtree(void);
  
+ #ifdef SQLITE_DEBUG
+ sqlite3_uint64 sqlite3BtreeSeekCount(Btree*);
+ #else
+ # define sqlite3BtreeSeekCount(X) 0
+ #endif
 +int sqlite3BtreeExclusiveLock(Btree *pBt);
 +
  #ifndef NDEBUG
  int sqlite3BtreeCursorIsValid(BtCursor*);
  #endif
diff --cc src/btreeInt.h
Simple merge
diff --cc src/build.c
index 54031de6fdcd0b47cff6cb4a49685189f27504b9,9779e93732b6d2f50cf5ac3822df1fbe6802eaa6..d09bdb6939ee2bc842e075f05d4876506545f999
@@@ -59,10 -59,9 +59,11 @@@ void sqlite3TableLock
    TableLock *p;
    assert( iDb>=0 );
  
 +#ifdef SQLITE_OMIT_CONCURRENT
    if( iDb==1 ) return;
    if( !sqlite3BtreeSharable(pParse->db->aDb[iDb].pBt) ) return;
 +#endif
+   pToplevel = sqlite3ParseToplevel(pParse);
    for(i=0; i<pToplevel->nTableLock; i++){
      p = &pToplevel->aTableLock[i];
      if( p->iDb==iDb && p->iTab==iTab ){
@@@ -4646,9 -4655,18 +4657,18 @@@ void sqlite3BeginTransaction(Parse *pPa
    }
    v = sqlite3GetVdbe(pParse);
    if( !v ) return;
 -  if( type!=TK_DEFERRED ){
 +  if( type==TK_IMMEDIATE || type==TK_EXCLUSIVE ){
      for(i=0; i<db->nDb; i++){
-       sqlite3VdbeAddOp2(v, OP_Transaction, i, (type==TK_EXCLUSIVE)+1);
+       int eTxnType;
+       Btree *pBt = db->aDb[i].pBt;
+       if( pBt && sqlite3BtreeIsReadonly(pBt) ){
+         eTxnType = 0;  /* Read txn */
+       }else if( type==TK_EXCLUSIVE ){
+         eTxnType = 2;  /* Exclusive txn */
+       }else{
+         eTxnType = 1;  /* Write txn */
+       }
+       sqlite3VdbeAddOp2(v, OP_Transaction, i, eTxnType);
        sqlite3VdbeUsesBtree(v, i);
      }
    }
diff --cc src/func.c
Simple merge
diff --cc src/main.c
Simple merge
diff --cc src/os_unix.c
index 2188f98bbba22e2a3c50cb34b4788e945af2c8e5,a688ed2706e26a22f9e57b66ede58cc76de365b9..9479915a6e64055ae1e2847ea28c573f56a3b6f7
@@@ -4862,87 -4817,38 +4885,119 @@@ shmpage_out
    return rc;
  }
  
 +#ifdef SQLITE_MUTEXFREE_SHMLOCK
 +static int unixMutexFreeShmlock(
 +  unixFile *pFd,             /* Database file holding the shared memory */
 +  int ofst,                  /* First lock to acquire or release */
 +  int n,                     /* Number of locks to acquire or release */
 +  int flags                  /* What to do with the lock */
 +){
 +  struct LockMapEntry {
 +    int iFirst;
 +    int nSlot;
 +  } aMap[9] = {
 +    { 0, 1 },
 +    { 1, 1 },
 +    { 2, 1 },
 +    { 3+0*SQLITE_MFS_NSHARD, SQLITE_MFS_NSHARD },
 +    { 3+1*SQLITE_MFS_NSHARD, SQLITE_MFS_NSHARD },
 +    { 3+2*SQLITE_MFS_NSHARD, SQLITE_MFS_NSHARD },
 +    { 3+3*SQLITE_MFS_NSHARD, SQLITE_MFS_NSHARD },
 +    { 3+4*SQLITE_MFS_NSHARD, SQLITE_MFS_NSHARD },
 +    { 3+5*SQLITE_MFS_NSHARD, 0 },
 +  };
 +
 +  unixShm *p = pFd->pShm;               /* The shared memory being locked */
 +  unixShmNode *pShmNode = p->pShmNode;  /* The underlying file iNode */
 +
 +  if( flags & SQLITE_SHM_SHARED ){
 +    /* SHARED locks */
 +    u32 iOld, iNew, *ptr;
 +    int iIncr = -1;
 +    if( (flags & SQLITE_SHM_UNLOCK)==0 ){
 +      p->aMFCurrent[ofst] = (p->aMFCurrent[ofst] + 1) % aMap[ofst].nSlot;
 +      iIncr = 1;
 +    }
 +    ptr = &pShmNode->aMFSlot[aMap[ofst].iFirst + p->aMFCurrent[ofst]].nLock;
 +    do {
 +      iOld = *ptr;
 +      iNew = iOld + iIncr;
 +      if( iNew>SQLITE_MFS_EXCLUSIVE ){
 +        return SQLITE_BUSY;
 +      }
 +    }while( 0==unixCompareAndSwap(ptr, iOld, iNew) );
 +  }else{
 +    /* EXCLUSIVE locks */
 +    u16 mask = (1<<(ofst+n)) - (1<<ofst);
 +    if( (flags & SQLITE_SHM_LOCK) || (mask & p->exclMask) ){
 +      int iFirst = aMap[ofst].iFirst;
 +      int iLast = aMap[ofst+n].iFirst;
 +      int i;
 +      for(i=iFirst; i<iLast; i++){
 +        u32 *ptr = &pShmNode->aMFSlot[i].nLock;
 +        if( flags & SQLITE_SHM_UNLOCK ){
 +          assert( (*ptr)==SQLITE_MFS_EXCLUSIVE );
 +          *ptr = 0;
 +        }else{
 +          u32 iOld;
 +          do {
 +            iOld = *ptr;
 +            if( iOld>0 ){
 +              while( i>iFirst ){
 +                i--;
 +                pShmNode->aMFSlot[i].nLock = 0;
 +              }
 +              return SQLITE_BUSY;
 +            }
 +          }while( 0==unixCompareAndSwap(ptr, iOld, SQLITE_MFS_EXCLUSIVE) );
 +        }
 +      }
 +      if( flags & SQLITE_SHM_UNLOCK ){
 +        p->exclMask &= ~mask;
 +      }else{
 +        p->exclMask |= mask;
 +      }
 +    }
 +  }
 +
 +  return SQLITE_OK;
 +}
 +#else
 +# define unixMutexFreeShmlock(a,b,c,d) SQLITE_OK
 +#endif
 +
+ /*
+ ** Check that the pShmNode->aLock[] array comports with the locking bitmasks
+ ** held by each client. Return true if it does, or false otherwise. This
+ ** is to be used in an assert(). e.g.
+ **
+ **     assert( assertLockingArrayOk(pShmNode) );
+ */
+ #ifdef SQLITE_DEBUG
+ static int assertLockingArrayOk(unixShmNode *pShmNode){
+   unixShm *pX;
+   int aLock[SQLITE_SHM_NLOCK];
+   assert( sqlite3_mutex_held(pShmNode->pShmMutex) );
+   memset(aLock, 0, sizeof(aLock));
+   for(pX=pShmNode->pFirst; pX; pX=pX->pNext){
+     int i;
+     for(i=0; i<SQLITE_SHM_NLOCK; i++){
+       if( pX->exclMask & (1<<i) ){
+         assert( aLock[i]==0 );
+         aLock[i] = -1;
+       }else if( pX->sharedMask & (1<<i) ){
+         assert( aLock[i]>=0 );
+         aLock[i]++;
+       }
+     }
+   }
+   assert( 0==memcmp(pShmNode->aLock, aLock, sizeof(aLock)) );
+   return (memcmp(pShmNode->aLock, aLock, sizeof(aLock))==0);
+ }
+ #endif
  /*
  ** Change the lock state for a shared-memory segment.
  **
diff --cc src/pager.c
Simple merge
diff --cc src/parse.y
Simple merge
diff --cc src/select.c
Simple merge
diff --cc src/sqlite.h.in
Simple merge
diff --cc src/sqliteInt.h
Simple merge
diff --cc src/test1.c
Simple merge
diff --cc src/update.c
index bc7c282b54c5b247e9c25eba73166cfdc1a73297,f8cb2afedb6f9f2931d29d266f65fabcd2cd443c..4d3b6cc7245837754d5cb55fecfc15a52084f487
@@@ -447,17 -447,6 +447,17 @@@ void sqlite3Update
    */
    chngRowid = chngPk = 0;
    for(i=0; i<pChanges->nExpr; i++){
-       x.z = pChanges->a[i].zName;
 +#if defined(SQLITE_ENABLE_NOOP_UPDATE) && !defined(SQLITE_OMIT_FLAG_PRAGMAS)
 +    if( db->flags & SQLITE_NoopUpdate ){
 +      Token x;
 +      sqlite3ExprDelete(db, pChanges->a[i].pExpr);
++      x.z = pChanges->a[i].zEName;
 +      x.n = sqlite3Strlen30(x.z);
 +      pChanges->a[i].pExpr =
 +         sqlite3PExpr(pParse, TK_UPLUS, sqlite3ExprAlloc(db, TK_ID, &x, 0), 0);
 +      if( db->mallocFailed ) goto update_cleanup;
 +    }
 +#endif
      /* If this is an UPDATE with a FROM clause, do not resolve expressions
      ** here. The call to sqlite3Select() below will do that. */
      if( nChangeFrom==0 && sqlite3ResolveExprNames(&sNC, pChanges->a[i].pExpr) ){
diff --cc src/vacuum.c
Simple merge
diff --cc src/vdbe.c
Simple merge
diff --cc src/vdbeaux.c
index 04eaa43649a2a1c6b1a3cef9b114271b60757613,dfd259d7188cf5bf1f887288a58ad3fbe843ffd3..63495f35d574d58ff6c3e13e12b1d9b0bb6056f0
@@@ -2690,23 -2691,6 +2691,23 @@@ static int vdbeCommit(sqlite3 *db, Vdb
        sqlite3BtreeLeave(pBt);
      }
    }
-       if( sqlite3BtreeIsInTrans(pBt) ){
 +
 +#ifndef SQLITE_OMIT_CONCURRENT
 +  if( db->eConcurrent && (rc & 0xFF)==SQLITE_BUSY ){
 +    /* An SQLITE_BUSY or SQLITE_BUSY_SNAPSHOT was encountered while 
 +    ** attempting to take the WRITER lock on a wal file. Release the
 +    ** WRITER locks on all wal files and return early.  */
 +    for(i=0; i<db->nDb; i++){
 +      Btree *pBt = db->aDb[i].pBt;
++      if( sqlite3BtreeTxnState(pBt)==SQLITE_TXN_WRITE ){
 +        sqlite3BtreeEnter(pBt);
 +        sqlite3PagerDropExclusiveLock(sqlite3BtreePager(pBt));
 +        sqlite3BtreeLeave(pBt);
 +      }
 +    }
 +  }
 +#endif
 +
    if( rc!=SQLITE_OK ){
      return rc;
    }
diff --cc src/wal.c
index c0884bcbb2e0d5dd008d83041907d16a634f58b1,ca95b6942b3c81fea19469aa187967f036c6c3a3..ed7da63fd7ddaca61f19e8b9dcf86e445098d0f7
+++ b/src/wal.c
@@@ -719,11 -718,9 +719,11 @@@ struct Wal 
    WalIndexHdr hdr;           /* Wal-index header for current transaction */
    u32 minFrame;              /* Ignore wal frames before this one */
    u32 iReCksum;              /* On commit, recalculate checksums from here */
 +  u32 nPriorFrame;           /* For sqlite3WalInfo() */
    const char *zWalName;      /* Name of WAL file */
-   char *zWalName2;           /* Name of second WAL file */
+   const char *zWalName2;     /* Name of second WAL file */
    u32 nCkpt;                 /* Checkpoint sequence counter in the wal-header */
 +  FastPrng sPrng;            /* Random number generator */
  #ifdef SQLITE_DEBUG
    u8 lockError;              /* True if a locking error has occurred */
  #endif
@@@ -1931,13 -1926,8 +1929,9 @@@ int sqlite3WalOpen
    pRet->syncHeader = 1;
    pRet->padToSectorBoundary = 1;
    pRet->exclusiveMode = (bNoShm ? WAL_HEAPMEMORY_MODE: WAL_NORMAL_MODE);
 +  sqlite3FastPrngInit(&pRet->sPrng);
    pRet->bWal2 = bWal2;
-   pRet->zWalName2 = (char*)pRet + sizeof(Wal) + 2*pVfs->szOsFile;
-   memcpy(pRet->zWalName2, zWalName, nWalName);
-   pRet->zWalName2[nWalName] = '2';
-   pRet->zWalName2[nWalName+1] = '\0';
+   pRet->zWalName2 = &zWalName[sqlite3Strlen30(zWalName)+1];
  
    /* Open a file handle on the first write-ahead log file. */
    flags = (SQLITE_OPEN_READWRITE|SQLITE_OPEN_CREATE|SQLITE_OPEN_WAL);
Simple merge
Simple merge