-C Fix\sthe\sCLI\sso\sthat\sthe\s--bom\soption\sonly\soutputs\sa\ssingle\sBOM,\snot\stwo.
-D 2024-09-28T19:52:38.443
+C Merge\sthe\slatest\strunk\senhancements\sinto\sthe\sreuse-schema\sbranch.
- D 2024-09-06T15:52:48.974
++D 2024-09-30T15:17:32.851
F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1
F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea
F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724
- F Makefile.in 9a0a78b9b8ec286340d206de94871ef551734d2a683dffa13ffbb3b7c7531ce6
-F Makefile.in 6a826facc78c3c8ad38bf00ed588f6aa3665ccd7a9749b891d20582fc290c77e
++F Makefile.in 72e579661a39685fa461a09729d404833dfd7f630d9b2c4edbb6d4524095884a
F Makefile.linux-gcc f3842a0b1efbfbb74ac0ef60e56b301836d05b4d867d014f714fa750048f1ab6
- F Makefile.msc ee5f555631cc843c086082bed01bca1eeeae75a56e709a0d1a39cc242078e57e
-F Makefile.msc 9c6d80d9d103fa42e931f4c464884a5e577fae8563acc7589bff4e43fbe8f864
++F Makefile.msc dd823b4caef98141218c3d508710d0794f602f2ec4551f32574c89d01e9a10db
F README.md c3c0f19532ce28f6297a71870f3c7b424729f0e6d9ab889616d3587dd2332159
F VERSION 0db40f92c04378404eb45bff93e9e42c148c7e54fd3da99469ed21e22411f5a6
F aclocal.m4 a5c22d164aff7ed549d53a90fa56d56955281f50
F ext/misc/uuid.c 5bb2264c1b64d163efa46509544fd7500cb8769cb7c16dd52052da8d961505cf
F ext/misc/vfslog.c 3932ab932eeb2601dbc4447cb14d445aaa9fbe43b863ef5f014401c3420afd20
F ext/misc/vfsstat.c a85df08654743922a19410d7b1e3111de41bb7cd07d20dd16eda4e2b808d269d
-F ext/misc/vfstrace.c ac76a4ac4d907774fd423cc2b61410c756f9d0782e27cf6032e058594accaaca
++F ext/misc/vfstrace.c ac76a4ac4d907774fd423cc2b61410c756f9d0782e27cf6032e058594accaaca w src/test_vfstrace.c
F ext/misc/vtablog.c 1100250ce8782db37c833e3a9a5c9a3ecf1af5e15b8325572b82e6e0a138ffb5
F ext/misc/vtshim.c 1976e6dd68dd0d64508c91a6dfab8e75f8aaf6cd
F ext/misc/wholenumber.c 0fa0c082676b7868bf2fa918e911133f2b349bcdceabd1198bba5f65b4fc0668
F ext/userauth/sqlite3userauth.h 7f3ea8c4686db8e40b0a0e7a8e0b00fac13aa7a3
F ext/userauth/user-auth.txt ca7e9ee82ca4e1c1744295f8184dd70edfae1992865d26c64303f539eb6c084c
F ext/userauth/userauth.c 7f00cded7dcaa5d47f54539b290a43d2e59f4b1eb5f447545fa865f002fc80cb
-F ext/wasm/EXPORTED_FUNCTIONS.fiddle.in 27450c8b8c70875a260aca55435ec927068b34cef801a96205adb81bdcefc65c
+F ext/wasm/EXPORTED_FUNCTIONS.fiddle 7fb73f7150ab79d83bb45a67d257553c905c78cd3d693101699243f36c5ae6c3
- F ext/wasm/GNUmakefile d4f6586d9a36ee2869a8c7f77227a8b7f42b6c4623f3be594beafb1554ab20d9
+ F ext/wasm/GNUmakefile 6b94c3125c40932e71bbe46e582d24ed4c829b9fa2ff34dd842b0ed8a948ac6a
F ext/wasm/README-dist.txt 6382cb9548076fca472fb3330bbdba3a55c1ea0b180ff9253f084f07ff383576
F ext/wasm/README.md a8a2962c3aebdf8d2104a9102e336c5554e78fc6072746e5daf9c61514e7d193
F ext/wasm/SQLTester/GNUmakefile e0794f676d55819951bbfae45cc5e8d7818dc460492dc317ce7f0d2eca15caff
F ext/wasm/SQLTester/SQLTester.run.mjs c72b7fe2072d05992f7a3d8c6a1d34e95712513ceabe40849784e24e41c84638
F ext/wasm/SQLTester/index.html 3f8a016df0776be76605abf20e815ecaafbe055abac0e1fe5ea080e7846b760d
F ext/wasm/SQLTester/touint8array.c 2d5ece04ec1393a6a60c4bf96385bda5e1a10ad49f3038b96460fc5e5aa7e536
-F ext/wasm/api/EXPORTED_FUNCTIONS.sqlite3-core 2bcbbfe3b95c043ed6037e2708a2ee078d212dd1612c364f93588d8dc97300fe
-F ext/wasm/api/EXPORTED_FUNCTIONS.sqlite3-extras fe40d6d758646e38f8b15f709044951e10884214f5453d35502100179c388c13
+F ext/wasm/api/EXPORTED_FUNCTIONS.sqlite3-api c5eaceabb9e759aaae7d3101a4a3e542f96ab2c99d89a80ce20ec18c23115f33
- F ext/wasm/api/EXPORTED_FUNCTIONS.sqlite3-auth 7ac80cc3b6a6d52e041bb295e85555ce797be78c15ef2008a64ae58815014080
- F ext/wasm/api/EXPORTED_FUNCTIONS.sqlite3-preupdate d1d62a2212099f2c0782d730beb8cb84a7a52d99c15ead2cb9b1411fff5fd6b1
++F ext/wasm/api/EXPORTED_FUNCTIONS.sqlite3-extras fe40d6d758646e38f8b15f709044951e10884214f5453d35502100179c388c13 w ext/wasm/api/EXPORTED_FUNCTIONS.sqlite3-session
F ext/wasm/api/EXPORTED_FUNCTIONS.sqlite3-see fb29e62082a658f0d81102488414d422c393c4b20cc2f685b216bc566237957b
- F ext/wasm/api/EXPORTED_FUNCTIONS.sqlite3-session 213b6c04267cb9bd760172db011eb1650732805fb3d01f9395478a8ceec18eb0
- F ext/wasm/api/EXPORTED_FUNCTIONS.sqlite3-vtab fd57af1f4502a052be27d8402df74be1dc60fcb6a687d372972abd90e424120a
F ext/wasm/api/EXPORTED_RUNTIME_METHODS.sqlite3-api 1ec3c73e7d66e95529c3c64ac3de2470b0e9e7fbf7a5b41261c367cf4f1b7287
F ext/wasm/api/README.md 34fe11466f9c1d81b10a0469e1114e5f1c5a6365c73d80a1a6ca639a1a358b73
F ext/wasm/api/extern-post-js.c-pp.js c4154a7f90c2d7e51fd6738273908152036c3457fdc0b6523f1be3ef51105aac
F ext/wasm/api/sqlite3-vfs-opfs-sahpool.c-pp.js e529a99b7d5a088284821e2902b20d3404b561126969876997d5a73a656c9199
F ext/wasm/api/sqlite3-vfs-opfs.c-pp.js e99e3d99f736937914527070f00ab13e9391d3f1cef884ab99a64cbcbee8d675
F ext/wasm/api/sqlite3-vtab-helper.c-pp.js e809739d71e8b35dfe1b55d24d91f02d04239e6aef7ca1ea92a15a29e704f616
- F ext/wasm/api/sqlite3-wasm.c 09a938fc570f282e602acd111147c7b74b5332da72540c512a79b916ab57882a
+ F ext/wasm/api/sqlite3-wasm.c 83f5e9f998e9fa4261eb84e9f092210e3ffe03895119f5ded0429eb34ab9d2be
-F ext/wasm/api/sqlite3-worker1-promiser.c-pp.js 46f303ba8ddd1b2f0a391798837beddfa72e8c897038c8047eda49ce7d5ed46b
+F ext/wasm/api/sqlite3-worker1-promiser.c-pp.js c5ac33e39f21a3481812d7333ca6e18853640d423a01960ca8dbc6e7c5c3c21c
F ext/wasm/api/sqlite3-worker1.c-pp.js 5e8706c2c4af2a57fbcdc02f4e7ef79869971bc21bb8ede777687786ce1c92d5
F ext/wasm/batch-runner-sahpool.html e9a38fdeb36a13eac7b50241dfe7ae066fe3f51f5c0b0151e7baee5fce0d07a7
F ext/wasm/batch-runner-sahpool.js 54a3ac228e6c4703fe72fb65c897e19156263a51fe9b7e21d2834a45e876aabd
F ext/wasm/demo-worker1.js 836bece8615b17b1b572584f7b15912236a5947fe8c68b98d2737d7e287447ef
F ext/wasm/dist.make 653e212c1e84aa3be168d62a10616ccea45ee9585b0192745d2706707a5248ce
F ext/wasm/example_extra_init.c 2347cd69d19d839ef4e5e77b7855103a7fe3ef2af86f2e8c95839afd8b05862f
- F ext/wasm/fiddle.make 2406b02473878a99fb6a2eaff0923277017adc45eb041b2afb2d7707bf7b375c
+ F ext/wasm/fiddle.make ec2353f0eddade864f67b993376a0949e27b72465c24b1970940e48b70bc2df1
F ext/wasm/fiddle/fiddle-worker.js 850e66fce39b89d59e161d1abac43a181a4caa89ddeea162765d660277cd84ce
+F ext/wasm/fiddle/fiddle.html 550c5aafce40bd218de9bf26192749f69f9b10bc379423ecd2e162bcef885c08
F ext/wasm/fiddle/fiddle.js b444a5646a9aac9f3fc06c53d78af5e1912eb235d69a8e6010723e4eb0e9d4a1
-F ext/wasm/fiddle/index.html c79b1741cbeba78f88af0a84cf5ec7de87a909a6a8d10a369b1f4824c66c2088
F ext/wasm/index-dist.html 564b5ec5669676482c5a25dea9e721d8eafed426ecb155f93d29aeff8507511f
- F ext/wasm/index.html 4337f495416756802669f69f9f9f3df9f87ee4c1918e6718719b4b5718e4713a
+ F ext/wasm/index.html e4bbffdb3d40eff12b3f9c7abedef91787e2935620b7f8d40f2c774b80ad8fa9
F ext/wasm/jaccwabyt/jaccwabyt.js 1264710db3cfbcb6887d95665b7aeba60c1126eaef789ca4cf1a4a17d5bc7f54
F ext/wasm/jaccwabyt/jaccwabyt.md 59a20df389abcc3606eb4eaea7fb7ba14504beb3e345dbea9b99a0618ba3bec8
+ F ext/wasm/mkwasmbuilds.c e3580b26bc393e4e4beb25f6349b999878782f3319b740469f64c2e772632e03
F ext/wasm/module-symbols.html dc476b403369b26a1a23773e13b80f41b9a49f0825e81435fe3600a7cfbbe337
F ext/wasm/scratchpad-wasmfs.html a3d7388f3c4b263676b58b526846e9d02dfcb4014ff29d3a5040935286af5b96
F ext/wasm/scratchpad-wasmfs.mjs 66034b9256b218de59248aad796760a1584c1dd842231505895eff00dbd57c63
F install-sh 9d4de14ab9fb0facae2f48780b874848cbf2f895 x
F ltmain.sh 3ff0879076df340d2e23ae905484d8c15d5fdea8
F magic.txt 5ade0bc977aa135e79e3faaea894d5671b26107cc91e70783aa7dc83f22f3ba0
- F main.mk cc0be8a9ab902e06c0b1c924fa30192e6a6cf3efa91e05ebc5dd1c652416e0a1
-F main.mk 0a55ebec3508ca1bdb593d86f3aa19d7fa42a2ddd3220703e6dc0a65f1338a43
++F main.mk 2e0e2eb583809dd8480a30ab270903964efd774688320c7a509b25f61cb56f2a
F mptest/config01.test 3c6adcbc50b991866855f1977ff172eb6d901271
F mptest/config02.test 4415dfe36c48785f751e16e32c20b077c28ae504
F mptest/crash01.test 61e61469e257df0850df4293d7d4d6c2af301421
F src/json.c 68a98c020c22127f2d65f08855f7fc7460ff352a6ce0b543d8931dde83319c22
F src/legacy.c d7874bc885906868cd51e6c2156698f2754f02d9eee1bae2d687323c3ca8e5aa
F src/loadext.c 7432c944ff197046d67a1207790a1b13eec4548c85a9457eb0896bb3641dfb36
- F src/main.c d1662b77a1ab3211430f4149a0c2e9023b890e7043a65293cadb5a62374c35dd
-F src/main.c 4db6e3bde55ba0b24ccc83600c2b6ea11429f61ce7b3a2e7e3b42e1b45366c3e
++F src/main.c 22660c327f6cbef3ded329388b97808a9a8f2112c4803eb6748c8c5683e5d148
F src/malloc.c 410e570b30c26cc36e3372577df50f7a96ee3eed5b2b161c6b6b48773c650c5e
F src/mem0.c 6a55ebe57c46ca1a7d98da93aaa07f99f1059645
F src/mem1.c 3bb59158c38e05f6270e761a9f435bf19827a264c13d1631c58b84bdc96d73b2
F src/os_common.h 6c0eb8dd40ef3e12fe585a13e709710267a258e2c8dd1c40b1948a1d14582e06
F src/os_kv.c 4d39e1f1c180b11162c6dc4aa8ad34053873a639bac6baae23272fc03349986a
F src/os_setup.h 6011ad7af5db4e05155f385eb3a9b4470688de6f65d6166b8956e58a3d872107
- F src/os_unix.c 6e3e4fc75904ff85184091dbab996e6e35c1799e771788961cc3b4fcbe8f852c
+ F src/os_unix.c 779e83666ecd535f6725497ba6da069c1d15138ff6a4ee123edad1ae0cdfbe83
-F src/os_win.c 6ff43bac175bd9ed79e7c0f96840b139f2f51d01689a638fd05128becf94908a
+F src/os_win.c 3c5614e5ea39e2ea33659d2d652fabd82ec3b5a39e342ca587eb6e5806e6d047
F src/os_win.h 7b073010f1451abe501be30d12f6bc599824944a
F src/pager.c b08600ebf0db90b6d1e9b8b6577c6fa3877cbe1a100bd0b2899e4c6e9adad4b3
F src/pager.h 4b1140d691860de0be1347474c51fee07d5420bd7f802d38cbab8ea4ab9f538a
F src/pcache.c 588cc3c5ccaaadde689ed35ce5c5c891a1f7b1f4d1f56f6cf0143b74d8ee6484
F src/pcache.h 1497ce1b823cf00094bb0cf3bac37b345937e6f910890c626b16512316d3abf5
F src/pcache1.c 49516ad7718a3626f28f710fa7448ef1fce3c07fd169acbb4817341950264319
-F src/pragma.c 52bfbf6dfd668b69b5eb9bd1186e3a67367c8453807150d6e75239229924f684
-F src/pragma.h e690a356c18e98414d2e870ea791c1be1545a714ba623719deb63f7f226d8bb7
-F src/prepare.c 3ba0ad907b7773ed642f66cea8a2c9c8edc18841aa1050b6218dbb3479e86225
+F src/pragma.c cce8c7b08860023c01fab1c7806d56262745738ec1337bbe031a0ffbb87aff5e
+F src/pragma.h 50f6d3b408ed56bde4f4e4aead8c0b2022030b692e8de237c1b7a0b5ce87a0c8
- F src/prepare.c 44dd5fd6f40a2687619d967387992d81868012622f93d5167ce947a0405a6f42
++F src/prepare.c 2b6fdbfb4b859aa1b40777019e2f9759dc62c5283cd73f853a06c97acd722804
F src/printf.c 6a87534ebfb9e5346011191b1f3a7ebc457f5938c7e4feeea478ecf53f6a41b2
F src/random.c 606b00941a1d7dd09c381d3279a058d771f406c5213c9932bbd93d5587be4b9c
- F src/resolve.c 2c127880c0634962837f16f2f48a295e514357af959330cc038de73015d5b5e8
+ F src/resolve.c 9750a281f7ba073b4e6da2be1a6c4071f5d841a7746c5fb3f70d6d793b6675ea
F src/rowset.c 8432130e6c344b3401a8874c3cb49fefe6873fec593294de077afea2dce5ec97
F src/select.c 4b14337a2742f0c0beeba490e9a05507e9b4b12184b9cd12773501d08d48e3fe
- F src/shell.c.in 592f97a0b1e42d7eb685c0b7d2f1b473abd61adef9e1be63ccde3928c3b3fe68
- F src/sqlite.h.in fa87b85bd482e1ee14afecec21a8624c2140e48b686d64af3b6eb011ad91ffd5
-F src/shell.c.in 345173187067363374187176a8bbe779e359849e635d8288202000ee87f4405a
-F src/sqlite.h.in b20547021d20ba016c2fd0500f14f08a21ff23e64a0ed93e72ca0fecb9e1d0a0
++F src/shell.c.in d52bf5223669b7e655ea89464c2aa65c1fa87977831b8a4cad26a2dac175d5fd
++F src/sqlite.h.in e728e4471ebdad5703ca1a013db9c6466c56fe868357cd47a850b2f2f28318b2
F src/sqlite3.rc 5121c9e10c3964d5755191c80dd1180c122fc3a8
F src/sqlite3ext.h 3f046c04ea3595d6bfda99b781926b17e672fd6d27da2ba6d8d8fc39981dcb54
- F src/sqliteInt.h 9c620e7a97237847664f32abf45da3caf2923f14cb1e357154d4d079975f6837
-F src/sqliteInt.h 5978cbb11becc3ce6471015d770d95f694ece06336c496f691df1b02460e9cd5
++F src/sqliteInt.h bdf6b0db285827428761acbe0c4159d9d0329eafaba6324affa077f01a2c0906
F src/sqliteLimit.h 6878ab64bdeb8c24a1d762d45635e34b96da21132179023338c93f820eee6728
-F src/status.c cb11f8589a6912af2da3bb1ec509a94dd8ef27df4d4c1a97e0bcf2309ece972b
+F src/status.c 5028a0afee355aa492f26f0b6a3ec23145caa9261a93164d96cd0b9bf1b2318f
F src/table.c 0f141b58a16de7e2fbe81c308379e7279f4c6b50eb08efeec5892794a0ba30d1
-F src/tclsqlite.c c6888598f08dee3d9112a38ef42c8f5c89ca7f3190f4694744d0b84250f4bf8c
+F src/tclsqlite.c f3c74b7612c6f583c94af48531caa1a7fecc53202bf4e0b202d39e54dc9322bc
F src/tclsqlite.h c6af51f31a2b2172d674608763a4b98fdf5cd587e4025053e546fb8077757262
F src/test1.c 8d7cd219c004cd2ced60659ebf045025cc5c16ce19d12459589dacd4310f7f07
F src/test2.c 7ebc518e6735939d8979273a6f7b1d9b5702babf059f6ad62499f7f60a9eb9a3
F src/threads.c 4ae07fa022a3dc7c5beb373cf744a85d3c5c6c3c
F src/tokenize.c 3f703cacdab728d7741e5a6ac242006d74fe1c2754d4f03ed889d7253259bd68
F src/treeview.c 88aa39b754f5ef7214385c1bbbdd2f3dc20efafeed0cf590e8d1199b9c6e44aa
-F src/trigger.c 0bb986a5b96047fd597c6aac28588853df56064e576e6b81ba777ef2ccaac461
+F src/trigger.c cfe7abf63ad096388253f4cd7bd1f1c022e952137da68f4500922a4c4dab2ec8
F src/update.c 0e01aa6a3edf9ec112b33eb714b9016a81241497b1fb7c3e74332f4f71756508
F src/upsert.c 215328c3f91623c520ec8672c44323553f12caeb4f01b1090ebdca99fdf7b4f1
- F src/utf.c f23165685a67b4caf8ec08fb274cb3f319103decfb2a980b7cfd55d18dfa855e
+ F src/utf.c 7bc550af6f3ddd5f5dc82d092c41f728acb760c92e0b47f391963b01ae52569b
F src/util.c 5d1a0134cf4240648d1c6bb5cc8efaca0ea2b5d5c840985aec7e947271f04375
-F src/vacuum.c b763b6457bd058d2072ef9364832351fd8d11e8abf70cbb349657360f7d55c40
-F src/vdbe.c be5f58bc29f60252e041a618eae59e8d57d460ba136c5403cf0abf955560c457
-F src/vdbe.h c2549a215898a390de6669cfa32adba56f0d7e17ba5a7f7b14506d6fd5f0c36a
+F src/vacuum.c 38577d6f45e10a984720b5219be09ca8649a0e600c2e5c11993900446caca609
+F src/vdbe.c d30cf58519ee7557a385c6f3e5b85d8b5366322c53d9e0c4402100fd357c8e6b
+F src/vdbe.h ea7ab8f088ae87a71a733f7ac4c5edd9c34dd58dfa6aafbdd3ab81b2d4c9d496
- F src/vdbeInt.h 949669dfd8a41550d27dcb905b494f2ccde9a2e6c1b0b04daa1227e2e74c2b2c
- F src/vdbeapi.c 80235ac380e9467fec1cb0883354d841f2a771976e766995f7e0c77f845406df
- F src/vdbeaux.c c3f96ee10c4b7c7458d347adba9c959bf14b7ae606a76476b3992f27f6c00051
+ F src/vdbeInt.h af7d7e8291edd0b19f2cd698e60e4d4031078f9a2f2328ac8f0b7efb134f8a1d
+ F src/vdbeapi.c 53c7e26a2c0821a892b20eee2cde4656e31998212f3d515576c780dfaa45fd17
-F src/vdbeaux.c 676dbee99b4febdd94bc9658667a2e3bc413c4c0e356242d90f98a1155d513e5
-F src/vdbeblob.c 255be187436da38b01f276c02e6a08103489bbe2a7c6c21537b7aecbe0e1f797
++F src/vdbeaux.c b4bc5037ee92492710b5e36101e626a795d54821c83dad9093c525e62c0d2026
+F src/vdbeblob.c 9e61cd32f3b52bb82d8997f87ecfb0506af1d846f04bfe02d2ac1ab1929692d6
- F src/vdbemem.c 831a244831eaa45335f9ae276b50a7a82ee10d8c46c2c72492d4eb8c98d94d89
+ F src/vdbemem.c df568ef0187e4be2788c35174f6d9b8566ab9475f9aff2d73907ed05aa5684b2
F src/vdbesort.c d0a3c7056c081703c8b6d91ad60f17da5e062a5c64bf568ed0fa1b5f4cae311f
F src/vdbetrace.c fe0bc29ebd4e02c8bc5c1945f1d2e6be5927ec12c06d89b03ef2a4def34bf823
F src/vdbevtab.c fc46b9cbd759dc013f0b3724549cc0d71379183c667df3a5988f7e2f1bd485f3
- F src/vtab.c f99a7413a957f5175702f56b52488ff3df51ce04cc1b58b56a076a0f82dbc059
-F src/vtab.c 316cd48e9320660db3047cd306cd056e4361180cebb4d0f10a39244e10c11422
++F src/vtab.c dae9ef7d94bd06116c020bc3fb2f9a8e8f8243515aaa72d392fe8e6fc14517c2
F src/vxworks.h d2988f4e5a61a4dfe82c6524dd3d6e4f2ce3cdb9
- F src/wal.c 887fc4ca3f020ebb2e376f222069570834ac63bf50111ef0cbf3ae417048ed89
+ F src/wal.c ef68130ba330ee18c1cb22da36a881c82e3a3b109badbdc6a9b9acaf788a6688
F src/wal.h ba252daaa94f889f4b2c17c027e823d9be47ce39da1d3799886bbd51f0490452
F src/walker.c d5006d6b005e4ea7302ad390957a8d41ed83faa177e412f89bc5600a7462a014
- F src/where.c c924288b72eade267a3478c181f0aa8b627ed028734fc4ae6f1984d8bd5ad99e
-F src/where.c 461d41017d900d4248a268df96d2d30506c4dcc2257f4167c4f46072003ce2cf
++F src/where.c 3f5dcc72b9090465cca092d1981f2b2d432e3e070ef978581af85e3fa43b6aaf
F src/whereInt.h a5d079c346a658b7a6e9e47bb943d021e02fa1e6aed3b964ca112112a4892192
F src/wherecode.c 5172d647798134e7c92536ddffe7e530c393d79b5dedd648b88faf2646c65baf
F src/whereexpr.c 44f41ae554c7572e1de1485b3169b233ee04d464b2ee5881687ede3bf07cacfa
F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc
F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e
F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0
- P bd247ae7f95d2e50436961e9aee60578e98ceccc0df9f71c201dd4b1884f2085 d94541ae76b5d8b69f5524f10dcccc0814283f438a03f553848ed631a1983633
- R 76a272439d4f25d75a300922d222edfc
-P e815055b321085deda8607ac3279ef1a1c890fe3bf9d9b9c0a74028e87857a7d
-R c0b23dfcab02e83590bbedcac610fa7b
++P f9ce1ababbd62c579658c737059f6992bdb32909e7a06282fe6a359d10ad1272 76b6331e6a705a420a64820a18214f07cf4c1d5151e7158d6fff09964e63f352
++R 5d2d8012beab3e60a854582edf47f1eb
U drh
- Z 51c246f5c4aa6e5e2a88e51d2bad5700
-Z 5a1528ca859870969ffba6e26496a443
++Z bc738bb96e4a1c1da7fbee1e6b6b6694
# Remove this line to create a well-formed Fossil manifest.
*******************************************************************************/
#endif /* !defined(SQLITE_OMIT_VIRTUALTABLE) && defined(SQLITE_HAVE_ZLIB) */
-#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 ){
- sputf(stderr, "SQL error: %s\n", zErr);
++ sqlite3_fprintf(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);
+ }
+}
+
+static int sharedSchemaFix(ShellState *pState, const char *zDb){
+ 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) ){
- sputf(pState->out, "%s is NOT compatible (objects)\n", zDb);
++ sqlite3_fprintf(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) ){
- sputf(pState->out, "%s is NOT compatible (SQL)\n", zDb);
++ sqlite3_fprintf(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 ){
- sputf(pState->out, "%s is NOT compatible (root pages)\n", zDb);
++ sqlite3_fprintf(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 ){
- sputf(pState->out,
++ sqlite3_fprintf(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 ){
- sputf(pState->out,
++ sqlite3_fprintf(pState->out,
+ "%s is NOT compatible (schema cookie)\n", zDb
+ );
+ }
+ bFailed = 1;
+ if( peFix ) *peFix = 3;
+ }
+ }
+
+ if( rc==SQLITE_OK && bFailed==0 ){
- sputf(pState->out, "%s is compatible\n", zDb);
++ sqlite3_fprintf(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 ){
- sputf(pState->out, "Fixing %s... ", azArg[i]);
++ sqlite3_fprintf(pState->out, "Fixing %s... ", azArg[i]);
+ fflush(pState->out);
+ rc = sharedSchemaFix(pState, azArg[i]);
+ if( rc==SQLITE_OK ){
+ rc = sharedSchemaCheck(pState, azArg[i], &eFix);
+ if( rc==SQLITE_OK && eFix ){
- sputf(pState->out, "VACUUMing main... ");
++ sqlite3_fprintf(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:
- sputf(stderr, "usage: .shared-schema check|fix DB1 DB2...\n");
++ sqlite3_fprintf(stderr, "usage: .shared-schema check|fix DB1 DB2...\n");
+ return SQLITE_ERROR;
+}
+#if SQLITE_SHELL_HAVE_RECOVER
/*
** This function is used as a callback by the recover extension. Simply
** print the supplied SQL statement to stdout.