]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
Merge the latest trunk enhancements into the reuse-schema branch.
authordrh <>
Sat, 5 Nov 2022 15:31:07 +0000 (15:31 +0000)
committerdrh <>
Sat, 5 Nov 2022 15:31:07 +0000 (15:31 +0000)
FossilOrigin-Name: 224eaf2622ca0e0489d0d3feb20fb46082b866a98a216a84323c96a800618b60

21 files changed:
1  2 
Makefile.in
Makefile.msc
main.mk
manifest
manifest.uuid
src/analyze.c
src/build.c
src/ctime.c
src/main.c
src/pragma.c
src/prepare.c
src/shell.c.in
src/sqlite.h.in
src/sqliteInt.h
src/test_tclsh.c
src/trigger.c
src/vacuum.c
src/vdbe.c
src/vdbe.h
src/vdbeaux.c
src/vtab.c

diff --cc Makefile.in
Simple merge
diff --cc Makefile.msc
Simple merge
diff --cc main.mk
Simple merge
diff --cc manifest
index fd5262152d14c6af28400aecc7e54c3fb2931ffa,d60d45244e08123ead9f7c72c70e5705518956eb..3c678167fd5620db72cc8e879dbb973b0e6d8565
+++ b/manifest
@@@ -1,11 -1,11 +1,11 @@@
- C Merge\srecent\strunk\senhancements\sinto\sthe\sreuse-schema\sbranch.
- D 2022-09-30T14:14:24.285
 -C Tweaks\sto\srecover\smodule\stest\sscripts\sto\swork\swith\svarious\spermutations.
 -D 2022-11-04T18:32:45.744
++C Merge\sthe\slatest\strunk\senhancements\sinto\sthe\sreuse-schema\sbranch.
++D 2022-11-05T15:31:07.222
  F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1
  F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea
  F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724
- F Makefile.in 131c21992341dded9e32816f76a881b100353750742c54114c77741111e48f3a
 -F Makefile.in 78e4c4916f2c3993a8a454018745ff02094a8029d449d0c22db98f1cf8260420
++F Makefile.in 8274fec98db5e2e54c5a05ba7854039fe02e09ad30fa7a21505784b5910e12ba
  F Makefile.linux-gcc f609543700659711fbd230eced1f01353117621dccae7b9fb70daa64236c5241
- F Makefile.msc 197f8dee2f97a91302c1dcb5a336e21f49f17cf19d021bb477e8c3f6907f7bba
 -F Makefile.msc e7a564ceec71f0d9666031d5638cf0d4f88b050b44e8df5d32125137cd259ac0
++F Makefile.msc 4312ecc6629df35ed862c2082a3655dbda57a1e8f72b0b0fb9fed9e494cd9f7b
  F README.md 8b8df9ca852aeac4864eb1e400002633ee6db84065bd01b78c33817f97d31f5e
  F VERSION 8868ddfa6e1eee218286021a94b3e22d13e550c76c72d878857547ca001de24a
  F aclocal.m4 a5c22d164aff7ed549d53a90fa56d56955281f50
@@@ -388,6 -385,22 +386,22 @@@ F ext/rbu/rbuvacuum4.test a78898e438a44
  F ext/rbu/sqlite3rbu.c 8737cabdfbee84bb25a7851ecef8b1312be332761238da9be6ddb10c62ad4291
  F ext/rbu/sqlite3rbu.h 1dc88ab7bd32d0f15890ea08d23476c4198d3da3056985403991f8c9cd389812
  F ext/rbu/test_rbu.c 03f6f177096a5f822d68d8e4069ad8907fe572c62ff2d19b141f59742821828a
 -F ext/recover/dbdata.c 1d5353d3af247c4e0656f8f88a80564aa840644c1177212dd11a186dce4ab213
++F ext/recover/dbdata.c 1d5353d3af247c4e0656f8f88a80564aa840644c1177212dd11a186dce4ab213 w ext/misc/dbdata.c
+ F ext/recover/recover1.test 02004eb8f9ec2825ba77e24742c18e45162cb21d27e76a3a435b83a759a1131a
+ F ext/recover/recover_common.tcl a61306c1eb45c0c3fc45652c35b2d4ec19729e340bdf65a272ce4c229cefd85a
+ F ext/recover/recoverclobber.test 3ba6c0c373c5c63d17e82eced64c05c57ccaf26c1abe1ca7141334022a79f32e
+ F ext/recover/recovercorrupt.test 64c081ad1200ae77b447da99eb724785d6bf71715f394543dc7689642e92bf49
+ F ext/recover/recovercorrupt2.test 74bef7dd2d7dd4856f3da21be6e213d27da44827e0f5f0946ca0325b46d163ed
+ F ext/recover/recoverfault.test 9d9f88eeb222615a25e7514f234c950d46bee20d24cd8db49d8fff8d650dcfe1
+ F ext/recover/recoverfault2.test 730e7371bcda769554d15460cb23126abba1be8eca9539ccabf63623e7bb7e09
+ F ext/recover/recoverold.test 68db3d6f85dd2b98e785b6c4da4f5eea4bbe52ccf6674d9a94c7506dc92596aa
+ F ext/recover/recoverpgsz.test 3658ab8e68475b1bb87d6af88baa04551c84b73280a566a1be847182410ffc58
+ F ext/recover/recoverrowid.test f948bf4024a5f41b0e21b8af80c60564c5b5d78c05a8d64fc00787715ff9f45f
+ F ext/recover/recoverslowidx.test 5205a9742dd9490ee99950dabb622307355ef1662dea6a3a21030057bfd81411
+ F ext/recover/recoversql.test e66d01f95302a223bcd3fd42b5ee58dc2b53d70afa90b0d00e41e4b8eab20486
+ F ext/recover/sqlite3recover.c 3e38f2bd607f6ecd8dc10ed419363448c206791c7ce344e3a2a6848731b9f37c
+ F ext/recover/sqlite3recover.h 011c799f02deb70ab685916f6f538e6bb32c4e0025e79bfd0e24ff9c74820959
+ F ext/recover/test_recover.c 1a34e2d04533d919a30ae4d5caeb1643f6684e9ccd7597ca27721d8af81f4ade
  F ext/repair/README.md 92f5e8aae749a4dae14f02eea8e1bb42d4db2b6ce5e83dbcdd6b1446997e0c15
  F ext/repair/checkfreelist.c e21f06995ff4efdc1622dcceaea4dcba2caa83ca2f31a1607b98a8509168a996
  F ext/repair/checkindex.c 4383e4469c21e5b9ae321d0d63cec53e981af9d7a6564be6374f0eeb93dfc890
@@@ -473,44 -486,76 +487,76 @@@ F ext/session/test_session.c f433f68a8a
  F ext/userauth/sqlite3userauth.h 7f3ea8c4686db8e40b0a0e7a8e0b00fac13aa7a3
  F ext/userauth/user-auth.txt e6641021a9210364665fe625d067617d03f27b04
  F ext/userauth/userauth.c 7f00cded7dcaa5d47f54539b290a43d2e59f4b1eb5f447545fa865f002fc80cb
 -F ext/wasm/EXPORTED_FUNCTIONS.fiddle.in 27450c8b8c70875a260aca55435ec927068b34cef801a96205adb81bdcefc65c
 +F ext/wasm/EXPORTED_FUNCTIONS.fiddle 7fb73f7150ab79d83bb45a67d257553c905c78cd3d693101699243f36c5ae6c3
- F ext/wasm/EXPORTED_RUNTIME_METHODS.fiddle a004bd5eeeda6d3b28d16779b7f1a80305bfe009dfc7f0721b042967f0d39d02
- F ext/wasm/GNUmakefile 5359a37fc13b68fad2259228590450339a0c59687744edd0db7bb93d3b1ae2b1
- F ext/wasm/README.md 4b00ae7c7d93c4591251245f0996a319e2651361013c98d2efb0b026771b7331
+ F ext/wasm/GNUmakefile 3aa8c160705ab9d9d4d552a1f4e630925a65a27df216befe2e9a956904434c1d
+ F ext/wasm/README-dist.txt 2d670b426fc7c613b90a7d2f2b05b433088fe65181abead970980f0a4a75ea20
+ F ext/wasm/README.md ef39861aa21632fdbca0bdd469f78f0096f6449a720f3f39642594af503030e9
 -F ext/wasm/api/EXPORTED_FUNCTIONS.sqlite3-api 9120c2f8f51fa85f46dcf4dcb6b12f4a807d428f6089b99cdb08d8ddfcfd88b2
 +F ext/wasm/api/EXPORTED_FUNCTIONS.sqlite3-api c5eaceabb9e759aaae7d3101a4a3e542f96ab2c99d89a80ce20ec18c23115f33
  F ext/wasm/api/EXPORTED_RUNTIME_METHODS.sqlite3-api 1ec3c73e7d66e95529c3c64ac3de2470b0e9e7fbf7a5b41261c367cf4f1b7287
- F ext/wasm/api/README.md b6d0fb64bfdf7bf9ce6938ea4104228f6f5bbef600f5d910b2f8c8694195988c
- F ext/wasm/api/post-js-footer.js b64319261d920211b8700004d08b956a6c285f3b0bba81456260a713ed04900c
- F ext/wasm/api/post-js-header.js 0e853b78db83cb1c06b01663549e0e8b4f377f12f5a2d9a4a06cb776c003880b
- F ext/wasm/api/sqlite3-api-cleanup.js 149fd63a0400cd1d69548887ffde2ed89c13283384a63c2e9fcfc695e38a9e11
- F ext/wasm/api/sqlite3-api-glue.js 82c09f49c69984009ba5af2b628e67cc26c5dd203d383cd3091d40dab4e6514b
- F ext/wasm/api/sqlite3-api-oo1.js e9612cb704c0563c5d71ed2a8dccd95bf6394fa4de3115d1b978dc269c49ab02
- F ext/wasm/api/sqlite3-api-opfs.js c93cdd14f81a26b3a64990515ee05c7e29827fbc8fba4e4c2fef3a37a984db89
- F ext/wasm/api/sqlite3-api-prologue.js 0fb0703d2d8ac89fa2d4dd8f9726b0ea226b8708ac34e5b482df046e147de0eb
- F ext/wasm/api/sqlite3-api-worker.js 1124f404ecdf3c14d9f829425cef778cd683911a9883f0809a463c3c7773c9fd
+ F ext/wasm/api/README.md 1350088aee90e959ad9a94fab1bb6bcb5e99d4d27f976db389050f54f2640c78
+ F ext/wasm/api/extern-post-js.js f3dc4219a2a1f183d98452dcbd55a0c5351b759eccca75480a92473974d8b047
+ F ext/wasm/api/extern-pre-js.js cc61c09c7a24a07dbecb4c352453c3985170cec12b4e7e7e7a4d11d43c5c8f41
+ F ext/wasm/api/post-js-footer.js cd0a8ec768501d9bd45d325ab0442037fb0e33d1f3b4f08902f15c34720ee4a1
+ F ext/wasm/api/post-js-header.js d6ab3dfef4a06960d28a7eaa338d4e2a1a5981e9b38718168bbde8fdb2a439b8
+ F ext/wasm/api/pre-js.js 287e462f969342b032c03900e668099fa1471d852df7a472de5bc349161d9c04
+ F ext/wasm/api/sqlite3-api-cleanup.js ecdc69dbfccfe26146f04799fcfd4a6f5790d46e7e3b9b6e9b0491f92ed8ae34
+ F ext/wasm/api/sqlite3-api-glue.js 056f44b82c126358a0175e08a892d56fadfce177b0d7a0012502a6acf67ea6d5
+ F ext/wasm/api/sqlite3-api-oo1.js e9a83489bbb4838ce0aee46eaaa9350e0e25a5b926b565e4f5ae8e840e4fbaed
+ F ext/wasm/api/sqlite3-api-opfs.js cdcbb57acc66f4569ac9e18f9d13d5a3657d8aae195725c6324943da56c1005d
+ F ext/wasm/api/sqlite3-api-prologue.js 952ba908cc5ee42728c5c09dd549af32ef0c3cc15ab7b919a8007c5684f69320
 -F ext/wasm/api/sqlite3-api-worker1.js e94ba98e44afccfa482874cd9acb325883ade50ed1f9f9526beb9de1711f182f
++F ext/wasm/api/sqlite3-api-worker1.js e94ba98e44afccfa482874cd9acb325883ade50ed1f9f9526beb9de1711f182f w ext/wasm/api/sqlite3-api-worker.js
+ F ext/wasm/api/sqlite3-license-version-header.js a661182fc93fc2cf212dfd0b987f8e138a3ac98f850b1112e29b5fbdaecc87c3
+ F ext/wasm/api/sqlite3-opfs-async-proxy.js ab7d2888ad9b3dd24bb782bd882fcada2a20cb88eb78c8f36e7bfe708857dbd1
  F ext/wasm/api/sqlite3-wasi.h 25356084cfe0d40458a902afb465df8c21fc4152c1d0a59b563a3fba59a068f9
- F ext/wasm/api/sqlite3-wasm.c 8585793ca8311c7a0618b7e00ed2b3729799c20664a51f196258576e3d475c9e
- F ext/wasm/api/sqlite3-worker.js 1325ca8d40129a82531902a3a077b795db2eeaee81746e5a0c811a04b415fa7f
- F ext/wasm/common/SqliteTestUtil.js e41a1406f18da9224523fad0c48885caf995b56956a5b9852909c0989e687e90
+ F ext/wasm/api/sqlite3-wasm.c 778409e00fb25a4d6989be17fc856c84460198fd3b05ba2ef8289e60c50157ca
+ F ext/wasm/api/sqlite3-worker1-promiser.js 0c7a9826dbf82a5ed4e4f7bf7816e825a52aff253afbf3350431f5773faf0e4b
 -F ext/wasm/api/sqlite3-worker1.js 1e54ea3d540161bcfb2100368a2fc0cad871a207b8336afee1c445715851ec54
++F ext/wasm/api/sqlite3-worker1.js 1e54ea3d540161bcfb2100368a2fc0cad871a207b8336afee1c445715851ec54 w ext/wasm/api/sqlite3-worker.js
+ F ext/wasm/batch-runner.html 4deeed44fe41496dc6898d9fb17938ea3291f40f4bfb977e29d0cef96fbbe4c8
+ F ext/wasm/batch-runner.js 49609e89aaac9989d6c1ad3fae268e4878e1ad7bc5fd3e5c2f44959660780b2e
+ F ext/wasm/common/SqliteTestUtil.js d8bf97ecb0705a2299765c8fc9e11b1a5ac7f10988bbf375a6558b7ca287067b
  F ext/wasm/common/emscripten.css 3d253a6fdb8983a2ac983855bfbdd4b6fa1ff267c28d69513dd6ef1f289ada3f
- F ext/wasm/common/testing.css 572cf1ffae0b6eb7ca63684d3392bf350217a07b90e7a896e4fa850700c989b0
- F ext/wasm/common/whwasmutil.js 3d9deda1be718e2b10e2b6b474ba6ba857d905be314201ae5b3df5eef79f66aa
+ F ext/wasm/common/testing.css 35889709547d89a6109ff83b25c11bbc91d8dd43aab8722e428655ca98880a06
+ F ext/wasm/common/whwasmutil.js 16a592d5c304a2d268ca1c28e08a5b029a2f3cbe10af78dbc3456cfc9e3559d1
+ F ext/wasm/demo-123-worker.html a0b58d9caef098a626a1a1db567076fca4245e8d60ba94557ede8684350a81ed
+ F ext/wasm/demo-123.html 8c70a412ce386bd3796534257935eb1e3ea5c581e5d5aea0490b8232e570a508
+ F ext/wasm/demo-123.js ebae30756585bca655b4ab2553ec9236a87c23ad24fc8652115dcedb06d28df6
+ F ext/wasm/demo-jsstorage.html 409c4be4af5f207fb2877160724b91b33ea36a3cd8c204e8da1acb828ffe588e
+ F ext/wasm/demo-jsstorage.js 44e3ae7ec2483b6c511384c3c290beb6f305c721186bcf5398ca4e00004a06b8
+ F ext/wasm/demo-worker1-promiser.html 1de7c248c7c2cfd4a5783d2aa154bce62d74c6de98ab22f5786620b3354ed15f
+ F ext/wasm/demo-worker1-promiser.js b85a2bb1b918db4f09dfa24419241cb3edad7791389425c2505092e9b715017d
 -F ext/wasm/demo-worker1.html 2c178c1890a2beb5a5fecb1453e796d067a4b8d3d2a04d65ca2eb1ab2c68ef5d
 -F ext/wasm/demo-worker1.js a619adffc98b75b66c633b00f747b856449a134a9a0357909287d80a182d70fa
++F ext/wasm/demo-worker1.html 2c178c1890a2beb5a5fecb1453e796d067a4b8d3d2a04d65ca2eb1ab2c68ef5d w ext/wasm/testing2.html
++F ext/wasm/demo-worker1.js a619adffc98b75b66c633b00f747b856449a134a9a0357909287d80a182d70fa w ext/wasm/testing2.js
+ F ext/wasm/dist.make 481289899a07958439d07ee4302ff86235fa0fbb72f17ea05db2be90a94abf90
+ F ext/wasm/fiddle.make e570ec1bfc7d803507a2e514fe32f673fe001b2114b85c73c3964a462ba8bcfc
  F ext/wasm/fiddle/emscripten.css 3d253a6fdb8983a2ac983855bfbdd4b6fa1ff267c28d69513dd6ef1f289ada3f
- F ext/wasm/fiddle/fiddle-worker.js 88bc2193a6cb6a3f04d8911bed50a4401fe6f277de7a71ba833865ab64a1b4ae
+ F ext/wasm/fiddle/fiddle-worker.js b4a0c8ab6c0983218543ca771c45f6075449f63a1dcf290ae5a681b2cba8800d
 +F ext/wasm/fiddle/fiddle.html 550c5aafce40bd218de9bf26192749f69f9b10bc379423ecd2e162bcef885c08
- F ext/wasm/fiddle/fiddle.js 812f9954cc7c4b191884ad171f36fcf2d0112d0a7ecfdf6087896833a0c079a8
- F ext/wasm/jaccwabyt/jaccwabyt.js 99b424b4d467d4544e82615b58e2fe07532a898540bf9de2a985f3c21e7082b2
- F ext/wasm/jaccwabyt/jaccwabyt.md 447cc02b598f7792edaa8ae6853a7847b8178a18ed356afacbdbf312b2588106
- F ext/wasm/jaccwabyt/jaccwabyt_test.c 39e4b865a33548f943e2eb9dd0dc8d619a80de05d5300668e9960fff30d0d36f
- F ext/wasm/jaccwabyt/jaccwabyt_test.exports 5ff001ef975c426ffe88d7d8a6e96ec725e568d2c2307c416902059339c06f19
- F ext/wasm/testing1.html 0bf3ff224628c1f1e3ed22a2dc1837c6c73722ad8c0ad9c8e6fb9e6047667231
- F ext/wasm/testing1.js cba7134901a965743fa9289d82447ab71de4690b1ee5d06f6cb83e8b569d7943
- F ext/wasm/testing2.html 73e5048e666fd6fb28b6e635677a9810e1e139c599ddcf28d687c982134b92b8
- F ext/wasm/testing2.js d37433c601f88ed275712c1cfc92d3fb36c7c22e1ed8c7396fb2359e42238ebc
+ F ext/wasm/fiddle/fiddle.js 974b995119ac443685d7d94d3b3c58c6a36540e9eb3fed7069d5653284071715
 -F ext/wasm/fiddle/index.html 5daf54e8f3d7777cbb1ca4f93affe28858dbfff25841cb4ab81d694efed28ec2
+ F ext/wasm/index-dist.html cb0da16cba0f21cda2c25724c5869102d48eb0af04446acd3cd0ca031f80ed19
+ F ext/wasm/index.html ce6a68a75532b47e3c0adb83381a06d15de8c0ac0331fb7bf31d33f8e7c77dc4
+ F ext/wasm/jaccwabyt/jaccwabyt.js 95f573de1826474c9605dda620ee622fcb1673ae74f191eb324c0853aa4dcb66
+ F ext/wasm/jaccwabyt/jaccwabyt.md 9aa6951b529a8b29f578ec8f0355713c39584c92cf1708f63ba0cf917cb5b68e
+ F ext/wasm/module-symbols.html eca884ef4380612145ee550213be57478ee2b9cd9a9c2b27530cc23359c99682
+ F ext/wasm/scratchpad-wasmfs-main.html 20cf6f1a8f368e70d01e8c17200e3eaa90f1c8e1029186d836d14b83845fbe06
+ F ext/wasm/scratchpad-wasmfs-main.js 4c140457f4d6da9d646a49addd91edb6e9ad1643c6c48e3258b5bce24725dc18
+ F ext/wasm/speedtest1-wasmfs.html bc28eb29b69a73864b8d7aae428448f8b7e1de81d8bfb9bba99541322054dbd0
+ F ext/wasm/speedtest1-worker.html 94246488e10af9daa1ebd0979b1b8d7a22a579e5a983fa2a5ad94591ecf55f2c
+ F ext/wasm/speedtest1-worker.js 13b57c4a41729678a1194014afec2bd5b94435dcfc8d1039dfa9a533ac819ee1
+ F ext/wasm/speedtest1.html e4c4e5c1c8ec1ad13c995e346e4216a1df152fd2c5cd17e0793b865b2f3c5000
+ F ext/wasm/split-speedtest1-script.sh a3e271938d4d14ee49105eb05567c6a69ba4c1f1293583ad5af0cd3a3779e205 x
+ F ext/wasm/sql/000-mandelbrot.sql 775337a4b80938ac8146aedf88808282f04d02d983d82675bd63d9c2d97a15f0
+ F ext/wasm/sql/001-sudoku.sql 35b7cb7239ba5d5f193bc05ec379bcf66891bce6f2a5b3879f2f78d0917299b5
+ F ext/wasm/test-opfs-vfs.html 1f2d672f3f3fce810dfd48a8d56914aba22e45c6834e262555e685bce3da8c3f
+ F ext/wasm/test-opfs-vfs.js 44363db07b2a20e73b0eb1808de4400ca71b703af718d0fa6d962f15e73bf2ac
+ F ext/wasm/tester1-worker.html 51bf39e2b87f974ae3d5bc3086e2fb36d258f3698c54f6e21ba4b3b99636fa27
+ F ext/wasm/tester1.html 624ec41cd9f78a1f2b6d7df70aaa7a6394396b1f2455ecbd6de5775c1275b121
+ F ext/wasm/tester1.js 3a5558201359ff8a1c3051ab24fcc8bed5a4e99ae5e086e5184cbfc915d08724
+ F ext/wasm/version-info.c 3b36468a90faf1bbd59c65fd0eb66522d9f941eedd364fabccd72273503ae7d5
+ F ext/wasm/wasmfs.make edfd60691d10fd19ada4c061280fd7fbe4cf5f6bf6b913268e8ebedfccea6ab5
  F install-sh 9d4de14ab9fb0facae2f48780b874848cbf2f895 x
  F ltmain.sh 3ff0879076df340d2e23ae905484d8c15d5fdea8
- F magic.txt 8273bf49ba3b0c8559cb2774495390c31fd61c60
- F main.mk 208497ea8df10369256e6408fb319fab367345ca77207bf004112dc535a2236b
+ F magic.txt 5ade0bc977aa135e79e3faaea894d5671b26107cc91e70783aa7dc83f22f3ba0
 -F main.mk 73410c1f180660fd95c8203f35e1d4c1003e033d6bd0dbcb2c41610e4166500d
++F main.mk 4b2df0dd87d12eff590f4c3f83a46aa3a99d52556b6476768a25a622c859e2dc
  F mkso.sh fd21c06b063bb16a5d25deea1752c2da6ac3ed83
  F mptest/config01.test 3c6adcbc50b991866855f1977ff172eb6d901271
  F mptest/config02.test 4415dfe36c48785f751e16e32c20b077c28ae504
@@@ -522,38 -567,39 +568,39 @@@ F spec.template 86a4a43b99ebb3e75e6b9a7
  F sqlite.pc.in 42b7bf0d02e08b9e77734a47798d1a55a9e0716b
  F sqlite3.1 fc7ad8990fc8409983309bb80de8c811a7506786
  F sqlite3.pc.in 48fed132e7cb71ab676105d2a4dc77127d8c1f3a
 -F sqlite_cfg.h.in baf2e409c63d4e7a765e17769b6ff17c5a82bbd9cbf1e284fd2e4cefaff3fcf2
 -F src/alter.c 0390ca1d69ec3626cfa9f153114b7ab233e6b2bada6a9eb91361ed385fe90deb
 -F src/analyze.c d2fce73f6a024897593012c6ca25368629fa4aeb49960d88a52fac664582e483
 -F src/attach.c 4431f82f0247bf3aaf91589acafdff77d1882235c95407b36da1585c765fbbc8
++F sqlite_cfg.h.in baf2e409c63d4e7a765e17769b6ff17c5a82bbd9cbf1e284fd2e4cefaff3fcf2 w config.h.in
 +F src/alter.c 23f95fd33885c27edb5ece2bec9c184d3c7e575a3de60a97c036aa9d225e06f4
- F src/analyze.c ac1decb7db9f8fc12ad930d35b44f06d4097643b52dc9264ae18f8eca5c25f0d
++F src/analyze.c e242f6ad429477397bbf104a5c26a5682e7a70c1114673e7d5280c5bca3fcf0a
 +F src/attach.c e1eb237a21422b2d637fd854e1b72609b1b589e24b4b3a5cac0e13c9ef20ee8d
  F src/auth.c f4fa91b6a90bbc8e0d0f738aa284551739c9543a367071f55574681e0f24f8cf
  F src/backup.c a2891172438e385fdbe97c11c9745676bec54f518d4447090af97189fd8e52d7
  F src/bitvec.c 7c849aac407230278445cb069bebc5f89bf2ddd87c5ed9459b070a9175707b3d
  F src/btmutex.c 6ffb0a22c19e2f9110be0964d0731d2ef1c67b5f7fabfbaeb7b9dabc4b7740ca
- F src/btree.c aad3381b25b0aa56838b35f86fbae9fb10ab8670ba130b413e6e3652cb732d74
+ F src/btree.c 36f21a5596227507e285dd7a9ed967118031fdf331fe56d61625d7c8958f2d1e
  F src/btree.h 74d64b8f28cfa4a894d14d4ed64fa432cd697b98b61708d4351482ae15913e22
  F src/btreeInt.h 8ce1332edd89dfd2461d561ac10a0ab5601c8e06200cb5230596c3caaf54482e
- F src/build.c 2974aff12be4288c78903f27a9c96fc7d785389cd25f4c41add8b26e3a284302
 -F src/build.c d3e43e950e4e377c1d451a4862556792acdef1faba14a03f899d30d09731c48b
 -F src/callback.c 4cd7225b26a97f7de5fee5ae10464bed5a78f2adefe19534cc2095b3a8ca484a
++F src/build.c e8804b9fdb873949f9bceda5e9e8c70fb6961c620534b11d4f1cc51e8e2eb404
 +F src/callback.c bd46ff3b1c6a241a24d80d3ffb695a63dc71eb73c8b76a3bd29b3668fa1ccb86
  F src/complete.c a3634ab1e687055cd002e11b8f43eb75c17da23e
- F src/ctime.c 03bdf16b7ce9625b5153cc5124b684a867c3ae4f1b4344d8b720c53b8b5baa9d
 -F src/ctime.c 20507cc0b0a6c19cd882fcd0eaeda32ae6a4229fb4b024cfdf3183043d9b703d
++F src/ctime.c 7dd467e9116985022644f4120c812ea397fbfea67c728c892830d45bab7cee76
  F src/date.c 94ce83b4cd848a387680a5f920c9018c16655db778c4d36525af0a0f34679ac5
- F src/dbpage.c 5808e91bc27fa3981b028000f8fadfdc10ce9e59a34ce7dc4e035a69be3906ec
+ F src/dbpage.c f1a87f4ebcf22284e0aaf0697862f4ccfc120dcd6db3d8dfa3b049b2580c01d8
  F src/dbstat.c 861e08690fcb0f2ee1165eff0060ea8d4f3e2ea10f80dab7d32ad70443a6ff2d
  F src/delete.c 86573edae75e3d3e9a8b590d87db8e47222103029df4f3e11fa56044459b514e
- F src/expr.c 1cbdd76eeedb729ea9060df03e3e6b74a302784a13bfa38794a8194f894641ea
+ F src/expr.c 847f87d9df3ede2b2b0a8db088af0b9c1923b21009f8ea1b9b7b28cb0a383170
  F src/fault.c 460f3e55994363812d9d60844b2a6de88826e007
  F src/fkey.c 722f20779f5342a787922deded3628d8c74b5249cab04098cf17ee2f2aaff002
- F src/func.c 8f72e88cccdee22185133c10f96ccd61dc34c5ea4b1fa9a73c237ef59b2e64f1
- F src/global.c e83ee571b79ee3adc32e380cf554cf1254bc43763d23786c71721fbcdfbbb965
+ F src/func.c d25f3c667d59dbac195e65f3539fdbbd8a36c142ce7bcdb45d1baf07446ad13a
+ F src/global.c e06ff8e0acd85aec13563c9ecb44fbbf38232ccf73594998fd880b92d619594b
  F src/hash.c 8d7dda241d0ebdafb6ffdeda3149a412d7df75102cecfc1021c98d6219823b19
  F src/hash.h 3340ab6e1d13e725571d7cee6d3e3135f0779a7d8e76a9ce0a85971fa3953c51
  F src/hwtime.h cb1d7e3e1ed94b7aa6fde95ae2c2daccc3df826be26fc9ed7fd90d1750ae6144
  F src/in-operator.md 10cd8f4bcd225a32518407c2fb2484089112fd71
- F src/insert.c aea5361767817f917b0f0f647a1f0b1621bd858938ae6ae545c3b6b9814b798f
+ F src/insert.c 90a32bc7faa755cd5292ade21d2b3c6edba8fd1d70754a364caccabfde2c3bb2
  F src/json.c 7749b98c62f691697c7ee536b570c744c0583cab4a89200fdd0fc2aa8cc8cbd6
  F src/legacy.c d7874bc885906868cd51e6c2156698f2754f02d9eee1bae2d687323c3ca8e5aa
- F src/loadext.c 853385cc7a604157e137585097949252d5d0c731768e16b044608e5c95c3614b
- F src/main.c d34c554704d81b38d262660f7fd5662583ade36b440248e49ea2ce0b2642e4c0
+ F src/loadext.c 8086232d10e51e183a7f64199815bad1c579896354db69435347665f62f481e9
 -F src/main.c fa53bb2ae09549dab5629271c3cfd681f89059f5192afaaaf5c0d396bb3957fe
++F src/main.c 59e1f1317274aebb0145911c56674ca378c2dfab7e0660771d53ad2f44c67ce0
  F src/malloc.c dfddca1e163496c0a10250cedeafaf56dff47673e0f15888fb0925340a8e3f90
  F src/mem0.c 6a55ebe57c46ca1a7d98da93aaa07f99f1059645
  F src/mem1.c c12a42539b1ba105e3707d0e628ad70e611040d8f5e38cf942cee30c867083de
@@@ -582,24 -629,24 +630,24 @@@ F src/parse.y 8e67d820030d2655b9942ffe6
  F src/pcache.c f4268f7f73c6a3db12ce22fd25bc68dc42315d19599414ab1207d7cf32f79197
  F src/pcache.h 4f87acd914cef5016fae3030343540d75f5b85a1877eed1a2a19b9f284248586
  F src/pcache1.c dee95e3cd2b61e6512dc814c5ab76d5eb36f0bfc9441dbb4260fccc0d12bbddc
- F src/pragma.c 3993e34659d7c9744975f262acfc59527817e7c6f1f3dd188e0d49d837ad58b4
 -F src/pragma.c 41430ca04735cc8e5d003bfd9315eadede3ec326e50805cc81bcf34e46601292
 -F src/pragma.h e690a356c18e98414d2e870ea791c1be1545a714ba623719deb63f7f226d8bb7
 -F src/prepare.c 1b02be0441eda4579471fea097f678effcbb77ef0c39ab3f703c837822bcd674
++F src/pragma.c d39068c344a1c77b7a02a71b9104ba4af0874c927940c85e49c91a0a7f9186e4
 +F src/pragma.h 50f6d3b408ed56bde4f4e4aead8c0b2022030b692e8de237c1b7a0b5ce87a0c8
- F src/prepare.c 61bb87e193f7a146b7a4dc20792a6bde83ee1c5cc35a761ca0b153d0d1f56ba7
++F src/prepare.c 740e262cc0e011ac4f6f02b8a51b3da6f51d7c0760423d5a72e80c4bc536bc70
  F src/printf.c e99ee9741e79ae3873458146f59644276657340385ade4e76a5f5d1c25793764
  F src/random.c 546d6feb15ec69c1aafe9bb351a277cbb498fd5410e646add673acb805714960
  F src/resolve.c efea4e5fbecfd6d0a9071b0be0d952620991673391b6ffaaf4c277b0bb674633
  F src/rowset.c ba9515a922af32abe1f7d39406b9d35730ed65efab9443dc5702693b60854c92
- F src/select.c bb18acf4eded647fef88d4d543c673874dbebff516fbeba90a85e6c13f2a58cd
- F src/shell.c.in 698e3b55d01dd3b42eb5995ee756be96dc2e6983d7e638c18e5b7514bcadd5bf
- F src/sqlite.h.in 2e84f5b18efd61e3db661d255cff9bf82d9d79c22ab549379b9cbb6984ae1e96
+ F src/select.c 12cb5162e606290354f9512ff0c30fc6dc4d7a77a92b6c5b581395f9c4edd047
 -F src/shell.c.in 84bb08d8762920285f08f1c0993f1b3992ac43af5d72445cb8a973fc50c71923
 -F src/sqlite.h.in bf5846820130b6cf01b002e90427eae29f02db07d9cb9b5ccd0e0aad867eed14
++F src/shell.c.in fd88899be56e1b9125980aba61a380758b03cd2ef042932c8538bdeaeec7715d
++F src/sqlite.h.in 967327562762bcabf4e489290dd4dec34df5b17138ce1b3c05848257df63088f
  F src/sqlite3.rc 5121c9e10c3964d5755191c80dd1180c122fc3a8
- F src/sqlite3ext.h a988810c9b21c0dc36dc7a62735012339dc76fc7ab448fb0792721d30eacb69d
- F src/sqliteInt.h 3bbbcedb6746cae09bde8a1274854a76a8b6ff29dc18525bbcbb95719170c3fd
+ F src/sqlite3ext.h c4b9fa7a7e2bcdf850cfeb4b8a91d5ec47b7a00033bc996fd2ee96cbf2741f5f
 -F src/sqliteInt.h 2c24ba38f78e32fe5d7ec136321a6ad827698b33ca98664970a8b7274d69ef7c
++F src/sqliteInt.h d5094a93de4c8b17a4d0de26feea9fd8fa48c6dd2d5773e5fed9a32d39e6f073
  F src/sqliteLimit.h d7323ffea5208c6af2734574bae933ca8ed2ab728083caa117c9738581a31657
 -F src/status.c 160c445d7d28c984a0eae38c144f6419311ed3eace59b44ac6dafc20db4af749
 +F src/status.c 501433a8bdf64be125746a53bb9180761f9364428b59b318365eb88afd6d5cea
  F src/table.c 0f141b58a16de7e2fbe81c308379e7279f4c6b50eb08efeec5892794a0ba30d1
 -F src/tclsqlite.c 4e64ba300a5a26e0f1170e09032429faeb65e45e8f3d1a7833e8edb69fc2979e
 +F src/tclsqlite.c c5b9f6540d6de1adc6554589ce4011e07bb02250440a3e777ff86b40f1c1dd2c
- F src/test1.c 1356984e97bff07e4a8cc3863e892f05b3348678a74783bb6f350b76316736f1
+ F src/test1.c 40c9a40975512985762f87b83d0c63e4904833a9fe78cbcca664a37095301b1d
  F src/test2.c 3efb99ab7f1fc8d154933e02ae1378bac9637da5
  F src/test3.c 61798bb0d38b915067a8c8e03f5a534b431181f802659a6616f9b4ff7d872644
  F src/test4.c 4533b76419e7feb41b40582554663ed3cd77aaa54e135cf76b3205098cd6e664
@@@ -614,9 -661,9 +662,9 @@@ F src/test_backup.c bf5da90c9926df0a4b9
  F src/test_bestindex.c 8294d8223b7f18a3ddb7f9a0e30815dcca4e61681f78b538c870f7d934f88b81
  F src/test_blob.c ae4a0620b478548afb67963095a7417cd06a4ec0a56adb453542203bfdcb31ce
  F src/test_btree.c 8b2dc8b8848cf3a4db93f11578f075e82252a274
 -F src/test_config.c 8264637b06a3c1f0727c88d1ea32dcf7986b9e7e358a970cae87cdac8a5b2708
 +F src/test_config.c 73ebdc35580900d12c20b984db9ec1abe860dc75f66ae703f2b6fc9d95e09dc1
  F src/test_delete.c e2fe07646dff6300b48d49b2fee2fe192ed389e834dd635e3b3bac0ce0bf9f8f
- F src/test_demovfs.c 86142ba864d4297d54c5b2e972e74f3141ae4b30f05b3a95824184ed2d3d7f91
+ F src/test_demovfs.c 7cc7623d1025d1e92c51da20fd25060759733b7a356a121545a3b7d2faa8a0f1
  F src/test_devsym.c aff2255ea290d7718da08af30cdf18e470ff7325a5eff63e0057b1496ed66593
  F src/test_fs.c ba1e1dc18fd3159fdba0b9c4256f14032159785320dfbd6776eb9973cb75d480
  F src/test_func.c 24df3a346c012b1fc9e1001d346db6054deb426db0a7437e92490630e71c9b0a
@@@ -643,7 -689,7 +691,7 @@@ F src/test_server.c a2615049954cbb9cfb4
  F src/test_sqllog.c 540feaea7280cd5f926168aee9deb1065ae136d0bbbe7361e2ef3541783e187a
  F src/test_superlock.c 4839644b9201da822f181c5bc406c0b2385f672e
  F src/test_syscall.c 1073306ba2e9bfc886771871a13d3de281ed3939
- F src/test_tclsh.c ec192bceacfe67d427e97d4985a298b0aaadb266dfbc77c54425537c5e263b65
 -F src/test_tclsh.c 7dd98be675a1dc0d1fd302b8247bab992c909db384df054381a2279ad76f9b0e
++F src/test_tclsh.c 88b764a4353ebea5526ce861214f627011e2aa9efd6c4512e09d3c36f74d3be4
  F src/test_tclvar.c 33ff42149494a39c5fbb0df3d25d6fafb2f668888e41c0688d07273dcb268dfc
  F src/test_thread.c 269ea9e1fa5828dba550eb26f619aa18aedbc29fd92f8a5f6b93521fbb74a61c
  F src/test_vdbecov.c f60c6f135ec42c0de013a1d5136777aa328a776d33277f92abac648930453d43
@@@ -656,23 -702,23 +704,23 @@@ F src/test_wsd.c 41cadfd9d97fe8e3e4e44f
  F src/threads.c 4ae07fa022a3dc7c5beb373cf744a85d3c5c6c3c
  F src/tokenize.c 1305797eab3542a0896b552c6e7669c972c1468e11e92b370533c1f37a37082b
  F src/treeview.c 07787f67cd297a6d09d04b8d70c06769c60c9c1d9080378f93929c16f8fd3298
- F src/trigger.c 53fbf255f234d23aa7b877a18e0024436eec88373b7c0ebe1ba3f69341dfa72c
- F src/update.c c52a7991bece0453d22c77c08469512ee2f1391c12503fd347d1c939220c5877
- F src/upsert.c 8789047a8f0a601ea42fa0256d1ba3190c13746b6ba940fe2d25643a7e991937
 -F src/trigger.c 4163ada044af89d51caba1cb713a73165347b2ec05fe84a283737c134d61fcd5
++F src/trigger.c 0ee4386e2092008edb24f65e6e402deb9ecebd3cc121c72b120a3b423d968ccb
+ F src/update.c 5b0302c47cf31b533d5dff04c497ca1d8b9d89c39727e633fbe7b882fd5ac5aa
+ F src/upsert.c 5303dc6c518fa7d4b280ec65170f465c7a70b7ac2b22491598f6d0b4875b3145
  F src/utf.c ee39565f0843775cc2c81135751ddd93eceb91a673ea2c57f61c76f288b041a0
  F src/util.c 0be191521ff6d2805995f4910f0b6231b42843678b2efdc1abecaf39929a673f
- F src/vacuum.c 50f980eee45f25faf1faedc5be27a561c0df086e27bef12618485f10b3bae40b
- F src/vdbe.c fbfb1361981106c0693b3e49cb84a2be31edf6ff53451c5a1d020bab5f5b84b8
- F src/vdbe.h f3d94a12913aff17a01e2dec97634ca9df0c7eb4cd578390deaf3f5a99ba922b
 -F src/vacuum.c 84ce7f01f8a7a08748e107a441db83bcec13970190ddcb0c9ff522adbc1c23fd
 -F src/vdbe.c 0c7cb1b934ad8611e14e7efaf2c3a95df7dd3f7964d63ea07fef42a23df86131
 -F src/vdbe.h 58675f47dcf3105bab182c3ad3726efd60ffd003e954386904ac9107d0d2b743
++F src/vacuum.c 4c46040e481b32cc4f24946fd5509396bd9492ecf4c1455034b03eed8533c971
++F src/vdbe.c 0cae5da94722e8fa1bc0692e0557adcaf5c7562c1f6726b9e54ac109c9c47c33
++F src/vdbe.h 930a4b944dc21053d8d57943b21b4a6186dd3741bdd48b46b42bef5ad743202e
  F src/vdbeInt.h 17b7461ffcf9ee760d1341731715a419f6b8c763089a7ece25c2e8098d702b3f
- F src/vdbeapi.c fc3183daf72808b4311b228989120fdbc2dc44972fb0d77d5c453460cc0e5b2c
- F src/vdbeaux.c 01000d3f1a40a135ad10d8482c6ca38a36522d3a99ec6dda49e1994e4901d60c
+ F src/vdbeapi.c 1e8713d0b653acb43cd1bdf579c40e005c4844ea90f414f065946a83db3c27fb
 -F src/vdbeaux.c 87684b89877eae0c58c78b340bb5356aa1c8fb1dd650b29410c8b745aeeb20b5
 -F src/vdbeblob.c 5e61ce31aca17db8fb60395407457a8c1c7fb471dde405e0cd675974611dcfcd
++F src/vdbeaux.c 431f5e5102eb97bc22e407b2e5deada408348b141621ed46240fc6fbf2fe83d4
 +F src/vdbeblob.c aa23a326ff86bdde8f7ba74cf23c3e1795b13bee749314feaf26273be2f63e89
- F src/vdbemem.c c3ce80af15e2ff5c2824a8db881681cbf511376f13613da020bac6d320c535b1
+ F src/vdbemem.c 6cfed43758d57b6e3b99d9cdedfeccd86e45a07e427b22d8487cbdbebb6c522a
  F src/vdbesort.c 43756031ca7430f7aec3ef904824a7883c4ede783e51f280d99b9b65c0796e35
  F src/vdbetrace.c fe0bc29ebd4e02c8bc5c1945f1d2e6be5927ec12c06d89b03ef2a4def34bf823
  F src/vdbevtab.c f99b275366c5fc5e2d99f734729880994ab9500bdafde7fae3b02d562b9d323c
- F src/vtab.c 3db62ab8ce33b370ff86f01e4d8307a0786acb9fdcbfb42d3b0c30cad36084f1
 -F src/vtab.c b2f993aa954078985bc40317bb2140fe0880a08a7440f3a428b60fce74636808
++F src/vtab.c d25ed4bd90e8a6ab71df8887667109069349e04f808170311991b93ee3bb0e7b
  F src/vxworks.h d2988f4e5a61a4dfe82c6524dd3d6e4f2ce3cdb9
  F src/wal.c b9df133a705093da8977da5eb202eaadb844839f1c7297c08d33471f5491843d
  F src/wal.h c3aa7825bfa2fe0d85bef2db94655f99870a285778baa36307c0a16da32b226a
@@@ -2010,8 -2054,8 +2064,8 @@@ F vsixtest/vsixtest.tcl 6a9a6ab600c25a9
  F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc
  F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e
  F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0
- P 9c05a48ee0a6a02aa5f5c91f4fb4df3d6a72ca2e650920daea8989a87ab57c65 f25cf63471cbed1edb27591e57fead62550d4046dbdcb61312288f0f6f24c646
- R d6b8c92184367c1dbce6bbc28ac278e7
 -P c1c47eff48e0831b5aed987e90d797aee99caf1861fa8318c6c3ecfb108de7e6
 -R 96c1a1e097290369d58e43a186b26522
 -U dan
 -Z 0f3def2d760a90c1360a62b337e54d9b
++P b119a5e896184a54fa29349fa8ab114f1d7ea5b85f456a8ad012d74f7c84fbe3 454c61e818f6941c9a23f6600e37828a3f2b2ad3c6dbc8d6223570aed5d9cd8b
++R 3ebc122bf55584731f8d550f012b4b02
 +U drh
- Z 672928e881c9ab9df4343442b208c1df
++Z 68c475f5ad337e752409633ac3b17ae3
  # Remove this line to create a well-formed Fossil manifest.
diff --cc manifest.uuid
index f53514660dbdc8e5e63d7c1927e53e1677d9d3f9,85565b8a8499dd8461403e12e95333cbb7aeb718..83a36086655271d875a3bf9a7d4d52dcbae04ba6
@@@ -1,1 -1,1 +1,1 @@@
- b119a5e896184a54fa29349fa8ab114f1d7ea5b85f456a8ad012d74f7c84fbe3
 -454c61e818f6941c9a23f6600e37828a3f2b2ad3c6dbc8d6223570aed5d9cd8b
++224eaf2622ca0e0489d0d3feb20fb46082b866a98a216a84323c96a800618b60
diff --cc src/analyze.c
Simple merge
diff --cc src/build.c
Simple merge
diff --cc src/ctime.c
Simple merge
diff --cc src/main.c
Simple merge
diff --cc src/pragma.c
Simple merge
diff --cc src/prepare.c
Simple merge
diff --cc src/shell.c.in
index cb95e29ea8c01bd9569799e3906d5a805759e5aa,635361aa922884ba6a1bb3a312a66f9fd2a892ce..2bcaa10ca9b3c461c6eea0b486a9d47705c011bd
@@@ -7263,595 -7284,16 +7296,285 @@@ end_ar_command
  *******************************************************************************/
  #endif /* !defined(SQLITE_OMIT_VIRTUALTABLE) && defined(SQLITE_HAVE_ZLIB) */
  
- #if !defined(SQLITE_OMIT_VIRTUALTABLE) && defined(SQLITE_ENABLE_DBPAGE_VTAB)
 -#if SQLITE_SHELL_HAVE_RECOVER
 +/*
 +** If (*pRc) is not SQLITE_OK when this function is called, it is a no-op.
 +** Otherwise, the SQL statement or statements in zSql are executed using
 +** database connection db and the error code written to *pRc before
 +** this function returns.
 +*/
 +static void shellExec(sqlite3 *db, int *pRc, const char *zSql){
 +  int rc = *pRc;
 +  if( rc==SQLITE_OK ){
 +    char *zErr = 0;
 +    rc = sqlite3_exec(db, zSql, 0, 0, &zErr);
 +    if( rc!=SQLITE_OK ){
 +      raw_printf(stderr, "SQL error: %s\n", zErr);
 +    }
 +    sqlite3_free(zErr);
 +    *pRc = rc;
 +  }
 +}
 +
 +/*
 +** Like shellExec(), except that zFmt is a printf() style format string.
 +*/
 +static void shellExecPrintf(sqlite3 *db, int *pRc, const char *zFmt, ...){
 +  char *z = 0;
 +  if( *pRc==SQLITE_OK ){
 +    va_list ap;
 +    va_start(ap, zFmt);
 +    z = sqlite3_vmprintf(zFmt, ap);
 +    va_end(ap);
 +    if( z==0 ){
 +      *pRc = SQLITE_NOMEM;
 +    }else{
 +      shellExec(db, pRc, z);
 +    }
 +    sqlite3_free(z);
 +  }
 +}
 +
- /*
- ** If *pRc is not SQLITE_OK when this function is called, it is a no-op.
- ** Otherwise, an attempt is made to allocate, zero and return a pointer
- ** to a buffer nByte bytes in size. If an OOM error occurs, *pRc is set
- ** to SQLITE_NOMEM and NULL returned.
- */
- static void *shellMalloc(int *pRc, sqlite3_int64 nByte){
-   void *pRet = 0;
-   if( *pRc==SQLITE_OK ){
-     pRet = sqlite3_malloc64(nByte);
-     if( pRet==0 ){
-       *pRc = SQLITE_NOMEM;
-     }else{
-       memset(pRet, 0, nByte);
-     }
-   }
-   return pRet;
- }
- /*
- ** If *pRc is not SQLITE_OK when this function is called, it is a no-op.
- ** Otherwise, zFmt is treated as a printf() style string. The result of
- ** formatting it along with any trailing arguments is written into a 
- ** buffer obtained from sqlite3_malloc(), and pointer to which is returned.
- ** It is the responsibility of the caller to eventually free this buffer
- ** using a call to sqlite3_free().
- ** 
- ** If an OOM error occurs, (*pRc) is set to SQLITE_NOMEM and a NULL 
- ** pointer returned.
- */
- static char *shellMPrintf(int *pRc, const char *zFmt, ...){
-   char *z = 0;
-   if( *pRc==SQLITE_OK ){
-     va_list ap;
-     va_start(ap, zFmt);
-     z = sqlite3_vmprintf(zFmt, ap);
-     va_end(ap);
-     if( z==0 ){
-       *pRc = SQLITE_NOMEM;
-     }
-   }
-   return z;
- }
 +static int sharedSchemaFix(ShellState *pState, const char *zDb, int eFix){
 +  int rc = SQLITE_OK;
 +  i64 iLast = 0;
 +  int iCookie = 0;
 +  int iAutoVacuum = 0;
 +  sqlite3_stmt *pStmt = 0;
 +
 +  shellExecPrintf(pState->db, &rc, "ATTACH '%q' AS _shared_schema_tmp", zDb);
 +  shellExecPrintf(pState->db, &rc, "PRAGMA writable_schema = 1");
 +  shellExecPrintf(pState->db, &rc, "BEGIN");
 +  shellPreparePrintf(pState->db, &rc, &pStmt, 
 +      "SELECT max(rowid) FROM _shared_schema_tmp.sqlite_master"
 +  );
 +  sqlite3_step(pStmt);
 +  iLast = sqlite3_column_int64(pStmt, 0);
 +  shellFinalize(&rc, pStmt);
 +  shellPreparePrintf(pState->db, &rc, &pStmt,
 +      "INSERT INTO _shared_schema_tmp.sqlite_master SELECT "
 +      "  type, name, tbl_name, ("
 +      "    SELECT rootpage FROM _shared_schema_tmp.sqlite_master WHERE "
 +      "      type IS o.type AND name IS o.name AND rowid<=?"
 +      "  ), sql FROM main.sqlite_master AS o"
 +  );
 +  sqlite3_bind_int64(pStmt, 1, iLast);
 +  sqlite3_step(pStmt);
 +  shellFinalize(&rc, pStmt);
 +
 +  shellExecPrintf(pState->db, &rc,
 +      "DELETE FROM _shared_schema_tmp.sqlite_master WHERE rowid<=%lld",
 +      iLast
 +  );
 +  shellExecPrintf(pState->db, &rc, "COMMIT");
 +  sqlite3_exec(pState->db, "PRAGMA writable_schema = 0", 0, 0, 0);
 +
 +  /* Copy the auto-vacuum setting from main to the target db */
 +  shellPreparePrintf(pState->db, &rc, &pStmt, "PRAGMA main.auto_vacuum");
 +  sqlite3_step(pStmt);
 +  iAutoVacuum = sqlite3_column_int(pStmt, 0);
 +  shellFinalize(&rc, pStmt);
 +  shellExecPrintf(pState->db, &rc, 
 +      "PRAGMA _shared_schema_tmp.auto_vacuum = %d", iAutoVacuum
 +  );
 +
 +  /* Vacuum the db in order to standardize the rootpage numbers. */
 +  shellExecPrintf(pState->db, &rc, "VACUUM _shared_schema_tmp");
 +
 +  /* Set the schema-cookie value to the same as database "main" */
 +  shellPreparePrintf(pState->db, &rc, &pStmt, "PRAGMA main.schema_version");
 +  sqlite3_step(pStmt);
 +  iCookie = sqlite3_column_int(pStmt, 0);
 +  shellFinalize(&rc, pStmt);
 +  shellExecPrintf(pState->db, &rc, 
 +      "PRAGMA _shared_schema_tmp.schema_version = %d", iCookie
 +  );
 +
 +  sqlite3_exec(pState->db, "DETACH _shared_schema_tmp", 0, 0, 0);
 +  return rc;
 +}
 +
 +static int sharedSchemaCheck(ShellState *pState, const char *zDb, int *peFix){
 +  int rc = SQLITE_OK;
 +  int bFailed = 0;
 +  sqlite3_stmt *pStmt = 0;
 +
 +  if( peFix ) *peFix = 0;
 +  shellExecPrintf(pState->db, &rc, "ATTACH '%q' AS _shared_schema_tmp", zDb);
 +
 +  /* Check if this database has the same set of objects as the current db */
 +  shellPreparePrintf(pState->db, &rc, &pStmt, 
 +    "SELECT type, name FROM _shared_schema_tmp.sqlite_master AS o "
 +    "WHERE NOT EXISTS ("
 +    "  SELECT 1 FROM main.sqlite_master "
 +    "    WHERE name IS o.name AND type IS o.type"
 +    ")"
 +    " UNION ALL "
 +    "SELECT type, name FROM main.sqlite_master AS o "
 +    "WHERE NOT EXISTS ("
 +    "  SELECT 1 FROM _shared_schema_tmp.sqlite_master "
 +    "    WHERE name IS o.name AND type IS o.type"
 +    ")"
 +  );
 +  if( rc==SQLITE_OK && SQLITE_ROW==sqlite3_step(pStmt) ){
 +    utf8_printf(pState->out, "%s is NOT compatible (objects)\n", zDb);
 +    bFailed = 1;
 +  }
 +  shellFinalize(&rc, pStmt);
 +
 +  /* Check if this database has the same set of SQL statements as the 
 +  ** current db. */
 +  if( bFailed==0 ){
 +    shellPreparePrintf(pState->db, &rc, &pStmt, 
 +        "SELECT 1 FROM _shared_schema_tmp.sqlite_master AS o "
 +        "WHERE sql IS NOT ("
 +        "  SELECT sql FROM main.sqlite_master "
 +        "    WHERE name IS o.name AND type IS o.type"
 +        ")"
 +    );
 +    if( rc==SQLITE_OK && SQLITE_ROW==sqlite3_step(pStmt) ){
 +      utf8_printf(pState->out, "%s is NOT compatible (SQL)\n", zDb);
 +      bFailed = 1;
 +    }
 +    shellFinalize(&rc, pStmt);
 +  }
 +
 +  /* Check if this database has the same set of root pages as the current 
 +  ** db. */
 +  if( bFailed==0 ){
 +    shellPreparePrintf(pState->db, &rc, &pStmt, 
 +        "SELECT 1 FROM _shared_schema_tmp.sqlite_master AS o "
 +        "WHERE rootpage IS NOT ("
 +        "  SELECT rootpage FROM main.sqlite_master "
 +        "    WHERE name IS o.name AND type IS o.type"
 +        ")"
 +    );
 +    if( rc==SQLITE_OK && SQLITE_ROW==sqlite3_step(pStmt) ){
 +      if( peFix==0 ){
 +        utf8_printf(pState->out, "%s is NOT compatible (root pages)\n", zDb);
 +      }
 +      bFailed = 1;
 +      if( peFix ) *peFix = 1;
 +    }
 +    shellFinalize(&rc, pStmt);
 +  }
 +
 +  if( bFailed==0 ){
 +    shellPreparePrintf(pState->db, &rc, &pStmt, 
 +        "SELECT 1 WHERE ("
 +        "  SELECT group_concat(rootpage || '.' || name || '.' || sql, '.') "
 +        "  FROM _shared_schema_tmp.sqlite_master"
 +        ") IS NOT ("
 +        "  SELECT group_concat(rootpage || '.' || name || '.' || sql, '.') "
 +        "  FROM main.sqlite_master"
 +        ")"
 +    );
 +    if( rc==SQLITE_OK && SQLITE_ROW==sqlite3_step(pStmt) ){
 +      if( peFix==0 ){
 +        utf8_printf(pState->out, 
 +            "%s is NOT compatible (order of sqlite_master rows)\n", zDb
 +        );
 +      }
 +      bFailed = 1;
 +      if( peFix ) *peFix = 2;
 +    }
 +    shellFinalize(&rc, pStmt);
 +  }
 +
 +  if( bFailed==0 ){
 +    int iMain = -1;
 +    int iNew = +1;
 +    shellPreparePrintf(pState->db, &rc, &pStmt, 
 +        "PRAGMA main.schema_version"
 +    );
 +    if( rc==SQLITE_OK && SQLITE_ROW==sqlite3_step(pStmt) ){
 +      iMain = sqlite3_column_int(pStmt, 0);
 +    }
 +    shellFinalize(&rc, pStmt);
 +    shellPreparePrintf(pState->db, &rc, &pStmt, 
 +        "PRAGMA _shared_schema_tmp.schema_version"
 +    );
 +    if( rc==SQLITE_OK && SQLITE_ROW==sqlite3_step(pStmt) ){
 +      iNew = sqlite3_column_int(pStmt, 0);
 +    }
 +    shellFinalize(&rc, pStmt);
 +    if( rc==SQLITE_OK && iMain!=iNew ){
 +      if( peFix==0 ){
 +        utf8_printf(pState->out, 
 +            "%s is NOT compatible (schema cookie)\n", zDb
 +        );
 +      }
 +      bFailed = 1;
 +      if( peFix ) *peFix = 3;
 +    }
 +  }
 +
 +  if( rc==SQLITE_OK && bFailed==0 ){
 +    utf8_printf(pState->out, "%s is compatible\n", zDb);
 +  }
 +
 +  sqlite3_exec(pState->db, "DETACH _shared_schema_tmp", 0, 0, 0);
 +  return rc;
 +}
 +
 +/*
 +** .shared-schema check|fix DB1 DB2...
 +*/
 +static int sharedSchemaDotCommand(
 +  ShellState *pState,             /* Current shell tool state */
 +  char **azArg,                   /* Array of arguments passed to dot command */
 +  int nArg                        /* Number of entries in azArg[] */
 +){
 +  int rc = SQLITE_OK;
 +  int bFix = 0;                   /* Fix databases if possible */
 +  int n1;
 +  int i;
 +  if( nArg<3 ){
 +    goto shared_schema_usage;
 +  }
 +
 +  n1 = (int)strlen(azArg[1]);
 +  if( n1>0 && n1<=3 && memcmp("fix", azArg[1], n1)==0 ){
 +    bFix = 1;
 +  }else if( n1==0 || n1>5 || memcmp("check", azArg[1], n1) ){
 +    goto shared_schema_usage;
 +  }
 +
 +  for(i=2; rc==SQLITE_OK && i<nArg; i++){
 +    int eFix = 0;
 +    rc = sharedSchemaCheck(pState, azArg[i], bFix ? &eFix : 0);
 +    if( rc==SQLITE_OK && bFix && eFix ){
 +      utf8_printf(pState->out, "Fixing %s... ", azArg[i]);
 +      fflush(pState->out);
 +      rc = sharedSchemaFix(pState, azArg[i], eFix);
 +      if( rc==SQLITE_OK ){
 +        rc = sharedSchemaCheck(pState, azArg[i], &eFix);
 +        if( rc==SQLITE_OK && eFix ){
 +          utf8_printf(pState->out, "VACUUMing main... ");
 +          fflush(pState->out);
 +          rc = sqlite3_exec(pState->db, "VACUUM main", 0, 0, 0);
 +          if( rc==SQLITE_OK ){
 +            rc = sharedSchemaCheck(pState, azArg[i], 0);
 +          }
 +        }
 +      }
 +    }
 +  }
 +
 +  return rc;
 + shared_schema_usage:
 +  raw_printf(stderr, "usage: .shared-schema check|fix DB1 DB2...\n");
 +  return SQLITE_ERROR;
 +}
  
- /*
- ** When running the ".recover" command, each output table, and the special
- ** orphaned row table if it is required, is represented by an instance
- ** of the following struct.
- */
- typedef struct RecoverTable RecoverTable;
- struct RecoverTable {
-   char *zQuoted;                  /* Quoted version of table name */
-   int nCol;                       /* Number of columns in table */
-   char **azlCol;                  /* Array of column lists */
-   int iPk;                        /* Index of IPK column */
- };
- /*
- ** Free a RecoverTable object allocated by recoverFindTable() or
- ** recoverOrphanTable().
- */
- static void recoverFreeTable(RecoverTable *pTab){
-   if( pTab ){
-     sqlite3_free(pTab->zQuoted);
-     if( pTab->azlCol ){
-       int i;
-       for(i=0; i<=pTab->nCol; i++){
-         sqlite3_free(pTab->azlCol[i]);
-       }
-       sqlite3_free(pTab->azlCol);
-     }
-     sqlite3_free(pTab);
-   }
- }
- /*
- ** This function is a no-op if (*pRc) is not SQLITE_OK when it is called.
- ** Otherwise, it allocates and returns a RecoverTable object based on the
- ** final four arguments passed to this function. It is the responsibility
- ** of the caller to eventually free the returned object using
- ** recoverFreeTable().
- */
- static RecoverTable *recoverNewTable(
-   int *pRc,                       /* IN/OUT: Error code */
-   const char *zName,              /* Name of table */
-   const char *zSql,               /* CREATE TABLE statement */
-   int bIntkey, 
-   int nCol
- ){
-   sqlite3 *dbtmp = 0;             /* sqlite3 handle for testing CREATE TABLE */
-   int rc = *pRc;
-   RecoverTable *pTab = 0;
-   pTab = (RecoverTable*)shellMalloc(&rc, sizeof(RecoverTable));
-   if( rc==SQLITE_OK ){
-     int nSqlCol = 0;
-     int bSqlIntkey = 0;
-     sqlite3_stmt *pStmt = 0;
-     
-     rc = sqlite3_open("", &dbtmp);
-     if( rc==SQLITE_OK ){
-       sqlite3_create_function(dbtmp, "shell_idquote", 1, SQLITE_UTF8, 0,
-                               shellIdQuote, 0, 0);
-     }
-     if( rc==SQLITE_OK ){
-       rc = sqlite3_exec(dbtmp, "PRAGMA writable_schema = on", 0, 0, 0);
-     }
-     if( rc==SQLITE_OK ){
-       rc = sqlite3_exec(dbtmp, zSql, 0, 0, 0);
-       if( rc==SQLITE_ERROR ){
-         rc = SQLITE_OK;
-         goto finished;
-       }
-     }
-     shellPreparePrintf(dbtmp, &rc, &pStmt, 
-         "SELECT count(*) FROM pragma_table_info(%Q)", zName
-     );
-     if( rc==SQLITE_OK && SQLITE_ROW==sqlite3_step(pStmt) ){
-       nSqlCol = sqlite3_column_int(pStmt, 0);
-     }
-     shellFinalize(&rc, pStmt);
-     if( rc!=SQLITE_OK || nSqlCol<nCol ){
-       goto finished;
-     }
-     shellPreparePrintf(dbtmp, &rc, &pStmt, 
-       "SELECT ("
-       "  SELECT substr(data,1,1)==X'0D' FROM sqlite_dbpage WHERE pgno=rootpage"
-       ") FROM sqlite_schema WHERE name = %Q", zName
-     );
-     if( rc==SQLITE_OK && SQLITE_ROW==sqlite3_step(pStmt) ){
-       bSqlIntkey = sqlite3_column_int(pStmt, 0);
-     }
-     shellFinalize(&rc, pStmt);
-     if( bIntkey==bSqlIntkey ){
-       int i;
-       const char *zPk = "_rowid_";
-       sqlite3_stmt *pPkFinder = 0;
-       /* If this is an intkey table and there is an INTEGER PRIMARY KEY,
-       ** set zPk to the name of the PK column, and pTab->iPk to the index
-       ** of the column, where columns are 0-numbered from left to right.
-       ** Or, if this is a WITHOUT ROWID table or if there is no IPK column,
-       ** leave zPk as "_rowid_" and pTab->iPk at -2.  */
-       pTab->iPk = -2;
-       if( bIntkey ){
-         shellPreparePrintf(dbtmp, &rc, &pPkFinder, 
-           "SELECT cid, name FROM pragma_table_info(%Q) "
-           "  WHERE pk=1 AND type='integer' COLLATE nocase"
-           "  AND NOT EXISTS (SELECT cid FROM pragma_table_info(%Q) WHERE pk=2)"
-           , zName, zName
-         );
-         if( rc==SQLITE_OK && SQLITE_ROW==sqlite3_step(pPkFinder) ){
-           pTab->iPk = sqlite3_column_int(pPkFinder, 0);
-           zPk = (const char*)sqlite3_column_text(pPkFinder, 1);
-           if( zPk==0 ){ zPk = "_";  /* Defensive.  Should never happen */ }
-         }
-       }
-       pTab->zQuoted = shellMPrintf(&rc, "\"%w\"", zName);
-       pTab->azlCol = (char**)shellMalloc(&rc, sizeof(char*) * (nSqlCol+1));
-       pTab->nCol = nSqlCol;
-       if( bIntkey ){
-         pTab->azlCol[0] = shellMPrintf(&rc, "\"%w\"", zPk);
-       }else{
-         pTab->azlCol[0] = shellMPrintf(&rc, "");
-       }
-       i = 1;
-       shellPreparePrintf(dbtmp, &rc, &pStmt, 
-           "SELECT %Q || group_concat(shell_idquote(name), ', ') "
-           "  FILTER (WHERE cid!=%d) OVER (ORDER BY %s cid) "
-           "FROM pragma_table_info(%Q)", 
-           bIntkey ? ", " : "", pTab->iPk, 
-           bIntkey ? "" : "(CASE WHEN pk=0 THEN 1000000 ELSE pk END), ",
-           zName
-       );
-       while( rc==SQLITE_OK && SQLITE_ROW==sqlite3_step(pStmt) ){
-         const char *zText = (const char*)sqlite3_column_text(pStmt, 0);
-         pTab->azlCol[i] = shellMPrintf(&rc, "%s%s", pTab->azlCol[0], zText);
-         i++;
-       }
-       shellFinalize(&rc, pStmt);
-       shellFinalize(&rc, pPkFinder);
-     }
-   }
-  finished:
-   sqlite3_close(dbtmp);
-   *pRc = rc;
-   if( rc!=SQLITE_OK || (pTab && pTab->zQuoted==0) ){
-     recoverFreeTable(pTab);
-     pTab = 0;
-   }
-   return pTab;
- }
- /*
- ** This function is called to search the schema recovered from the
- ** sqlite_schema table of the (possibly) corrupt database as part
- ** of a ".recover" command. Specifically, for a table with root page
- ** iRoot and at least nCol columns. Additionally, if bIntkey is 0, the
- ** table must be a WITHOUT ROWID table, or if non-zero, not one of
- ** those.
- **
- ** If a table is found, a (RecoverTable*) object is returned. Or, if
- ** no such table is found, but bIntkey is false and iRoot is the 
- ** root page of an index in the recovered schema, then (*pbNoop) is
- ** set to true and NULL returned. Or, if there is no such table or
- ** index, NULL is returned and (*pbNoop) set to 0, indicating that
- ** the caller should write data to the orphans table.
- */
- static RecoverTable *recoverFindTable(
-   ShellState *pState,             /* Shell state object */
-   int *pRc,                       /* IN/OUT: Error code */
-   int iRoot,                      /* Root page of table */
-   int bIntkey,                    /* True for an intkey table */
-   int nCol,                       /* Number of columns in table */
-   int *pbNoop                     /* OUT: True if iRoot is root of index */
- ){
-   sqlite3_stmt *pStmt = 0;
-   RecoverTable *pRet = 0;
-   int bNoop = 0;
-   const char *zSql = 0;
-   const char *zName = 0;
-   /* Search the recovered schema for an object with root page iRoot. */
-   shellPreparePrintf(pState->db, pRc, &pStmt,
-       "SELECT type, name, sql FROM recovery.schema WHERE rootpage=%d", iRoot
-   );
-   while( *pRc==SQLITE_OK && SQLITE_ROW==sqlite3_step(pStmt) ){
-     const char *zType = (const char*)sqlite3_column_text(pStmt, 0);
-     if( bIntkey==0 && sqlite3_stricmp(zType, "index")==0 ){
-       bNoop = 1;
-       break;
-     }
-     if( sqlite3_stricmp(zType, "table")==0 ){
-       zName = (const char*)sqlite3_column_text(pStmt, 1);
-       zSql = (const char*)sqlite3_column_text(pStmt, 2);
-       if( zName!=0 && zSql!=0 ){
-         pRet = recoverNewTable(pRc, zName, zSql, bIntkey, nCol);
-         break;
-       }
-     }
-   }
-   shellFinalize(pRc, pStmt);
-   *pbNoop = bNoop;
-   return pRet;
- }
++#if SQLITE_SHELL_HAVE_RECOVER
  /*
- ** Return a RecoverTable object representing the orphans table.
+ ** This function is used as a callback by the recover extension. Simply
+ ** print the supplied SQL statement to stdout.
  */
- static RecoverTable *recoverOrphanTable(
-   ShellState *pState,             /* Shell state object */
-   int *pRc,                       /* IN/OUT: Error code */
-   const char *zLostAndFound,      /* Base name for orphans table */
-   int nCol                        /* Number of user data columns */
- ){
-   RecoverTable *pTab = 0;
-   if( nCol>=0 && *pRc==SQLITE_OK ){
-     int i;
-     /* This block determines the name of the orphan table. The prefered
-     ** name is zLostAndFound. But if that clashes with another name
-     ** in the recovered schema, try zLostAndFound_0, zLostAndFound_1
-     ** and so on until a non-clashing name is found.  */
-     int iTab = 0;
-     char *zTab = shellMPrintf(pRc, "%s", zLostAndFound);
-     sqlite3_stmt *pTest = 0;
-     shellPrepare(pState->db, pRc,
-         "SELECT 1 FROM recovery.schema WHERE name=?", &pTest
-     );
-     if( pTest ) sqlite3_bind_text(pTest, 1, zTab, -1, SQLITE_TRANSIENT);
-     while( *pRc==SQLITE_OK && SQLITE_ROW==sqlite3_step(pTest) ){
-       shellReset(pRc, pTest);
-       sqlite3_free(zTab);
-       zTab = shellMPrintf(pRc, "%s_%d", zLostAndFound, iTab++);
-       sqlite3_bind_text(pTest, 1, zTab, -1, SQLITE_TRANSIENT);
-     }
-     shellFinalize(pRc, pTest);
-     pTab = (RecoverTable*)shellMalloc(pRc, sizeof(RecoverTable));
-     if( pTab ){
-       pTab->zQuoted = shellMPrintf(pRc, "\"%w\"", zTab);
-       pTab->nCol = nCol;
-       pTab->iPk = -2;
-       if( nCol>0 ){
-         pTab->azlCol = (char**)shellMalloc(pRc, sizeof(char*) * (nCol+1));
-         if( pTab->azlCol ){
-           pTab->azlCol[nCol] = shellMPrintf(pRc, "");
-           for(i=nCol-1; i>=0; i--){
-             pTab->azlCol[i] = shellMPrintf(pRc, "%s, NULL", pTab->azlCol[i+1]);
-           }
-         }
-       }
-       if( *pRc!=SQLITE_OK ){
-         recoverFreeTable(pTab);
-         pTab = 0;
-       }else{
-         raw_printf(pState->out, 
-             "CREATE TABLE %s(rootpgno INTEGER, "
-             "pgno INTEGER, nfield INTEGER, id INTEGER", pTab->zQuoted
-         );
-         for(i=0; i<nCol; i++){
-           raw_printf(pState->out, ", c%d", i);
-         }
-         raw_printf(pState->out, ");\n");
-       }
-     }
-     sqlite3_free(zTab);
-   }
-   return pTab;
+ static int recoverSqlCb(void *pCtx, const char *zSql){
+   ShellState *pState = (ShellState*)pCtx;
+   utf8_printf(pState->out, "%s;\n", zSql);
+   return SQLITE_OK;
  }
  
  /*
@@@ -10954,16 -10146,10 +10427,17 @@@ static int do_meta_command(char *zLine
      sqlite3_free(zSql);
    }else
  
 +#if !defined(SQLITE_OMIT_VIRTUALTABLE) && defined(SQLITE_ENABLE_DBPAGE_VTAB)
 +  if( c=='s' && strncmp(azArg[0], "shared-schema", n)==0 ){
 +    open_db(p, 0);
 +    sharedSchemaDotCommand(p, azArg, nArg);
 +  }else
 +#endif
 +
  #if !defined(SQLITE_NOHAVE_SYSTEM) && !defined(SQLITE_SHELL_FIDDLE)
    if( c=='s'
-    && (strncmp(azArg[0], "shell", n)==0 || strncmp(azArg[0],"system",n)==0)
+    && (cli_strncmp(azArg[0], "shell", n)==0
+        || cli_strncmp(azArg[0],"system",n)==0)
    ){
      char *zCmd;
      int i, x;
@@@ -12485,28 -11672,26 +11960,28 @@@ int SQLITE_CDECL wmain(int argc, wchar_
        sqlite3_int64 sz = integerValue(cmdline_option_value(argc,argv,++i));
        sqlite3_config(SQLITE_CONFIG_SORTERREF_SIZE, (int)sz);
  #endif
-     }else if( strcmp(z,"-vfs")==0 ){
+     }else if( cli_strcmp(z,"-vfs")==0 ){
        zVfs = cmdline_option_value(argc, argv, ++i);
  #ifdef SQLITE_HAVE_ZLIB
-     }else if( strcmp(z,"-zip")==0 ){
+     }else if( cli_strcmp(z,"-zip")==0 ){
        data.openMode = SHELL_OPEN_ZIPFILE;
  #endif
-     }else if( strcmp(z,"-append")==0 ){
+     }else if( cli_strcmp(z,"-append")==0 ){
        data.openMode = SHELL_OPEN_APPENDVFS;
  #ifndef SQLITE_OMIT_DESERIALIZE
-     }else if( strcmp(z,"-deserialize")==0 ){
+     }else if( cli_strcmp(z,"-deserialize")==0 ){
        data.openMode = SHELL_OPEN_DESERIALIZE;
-     }else if( strcmp(z,"-maxsize")==0 && i+1<argc ){
+     }else if( cli_strcmp(z,"-maxsize")==0 && i+1<argc ){
        data.szMax = integerValue(argv[++i]);
  #endif
-     }else if( strcmp(z,"-readonly")==0 ){
+     }else if( cli_strcmp(z,"-readonly")==0 ){
        data.openMode = SHELL_OPEN_READONLY;
-     }else if( strcmp(z,"-nofollow")==0 ){
 +    }else if( strcmp(z,"-sharedschema")==0 ){
 +      data.openMode = SHELL_OPEN_SHAREDSCHEMA;
+     }else if( cli_strcmp(z,"-nofollow")==0 ){
        data.openFlags = SQLITE_OPEN_NOFOLLOW;
  #if !defined(SQLITE_OMIT_VIRTUALTABLE) && defined(SQLITE_HAVE_ZLIB)
-     }else if( strncmp(z, "-A",2)==0 ){
+     }else if( cli_strncmp(z, "-A",2)==0 ){
        /* All remaining command-line arguments are passed to the ".archive"
        ** command, so ignore them */
        break;
        data.mode = MODE_Csv;
        memcpy(data.colSeparator,",",2);
  #ifdef SQLITE_HAVE_ZLIB
-     }else if( strcmp(z,"-zip")==0 ){
+     }else if( cli_strcmp(z,"-zip")==0 ){
        data.openMode = SHELL_OPEN_ZIPFILE;
  #endif
-     }else if( strcmp(z,"-append")==0 ){
+     }else if( cli_strcmp(z,"-append")==0 ){
        data.openMode = SHELL_OPEN_APPENDVFS;
  #ifndef SQLITE_OMIT_DESERIALIZE
-     }else if( strcmp(z,"-deserialize")==0 ){
+     }else if( cli_strcmp(z,"-deserialize")==0 ){
        data.openMode = SHELL_OPEN_DESERIALIZE;
-     }else if( strcmp(z,"-maxsize")==0 && i+1<argc ){
+     }else if( cli_strcmp(z,"-maxsize")==0 && i+1<argc ){
        data.szMax = integerValue(argv[++i]);
  #endif
-     }else if( strcmp(z,"-readonly")==0 ){
+     }else if( cli_strcmp(z,"-readonly")==0 ){
        data.openMode = SHELL_OPEN_READONLY;
-     }else if( strcmp(z,"-nofollow")==0 ){
 +    }else if( strcmp(z,"-sharedschema")==0 ){
 +      data.openMode = SHELL_OPEN_SHAREDSCHEMA;
+     }else if( cli_strcmp(z,"-nofollow")==0 ){
        data.openFlags |= SQLITE_OPEN_NOFOLLOW;
-     }else if( strcmp(z,"-ascii")==0 ){
+     }else if( cli_strcmp(z,"-ascii")==0 ){
        data.mode = MODE_Ascii;
        sqlite3_snprintf(sizeof(data.colSeparator), data.colSeparator, SEP_Unit);
        sqlite3_snprintf(sizeof(data.rowSeparator), data.rowSeparator, SEP_Record);
diff --cc src/sqlite.h.in
Simple merge
diff --cc src/sqliteInt.h
Simple merge
Simple merge
diff --cc src/trigger.c
Simple merge
diff --cc src/vacuum.c
Simple merge
diff --cc src/vdbe.c
Simple merge
diff --cc src/vdbe.h
Simple merge
diff --cc src/vdbeaux.c
Simple merge
diff --cc src/vtab.c
Simple merge