]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
Merge latest trunk changes into this branch.
authordan <dan@noemail.net>
Mon, 8 Oct 2018 18:58:51 +0000 (18:58 +0000)
committerdan <dan@noemail.net>
Mon, 8 Oct 2018 18:58:51 +0000 (18:58 +0000)
FossilOrigin-Name: 2ac72114a1f5344b42472b941c60f460c28c981a22ea40909b30f7bf4eb4b11b

17 files changed:
1  2 
manifest
manifest.uuid
src/alter.c
src/analyze.c
src/build.c
src/callback.c
src/main.c
src/prepare.c
src/sqlite.h.in
src/sqliteInt.h
src/tclsqlite.c
src/trigger.c
src/vacuum.c
src/vdbe.h
src/vdbeaux.c
src/vtab.c
test/tclsqlite.test

diff --cc manifest
index 29e51aef83afa91896a122c1afe6edf030420e11,7a838f249e7096985638fc01eaa94371ab85201b..c45274c15360f289da7abbe196e92ced47b6c8b6
+++ b/manifest
@@@ -1,10 -1,12 +1,12 @@@
- C Add\sexperimental\ssqlite3_open_v2()\sflag\sSQLITE_OPEN_REUSE_SCHEMA.\sFor\ssharing\nidentical\sin-memory\sschema\sobjects\sbetween\sconnections.
- D 2017-08-09T20:35:10.397
- F Makefile.in d9873c9925917cca9990ee24be17eb9613a668012c85a343aef7e5536ae266e8
 -C Add\sthe\sgeopoly_reverse()\sfunction\sto\sthe\sGeoPoly\sextension.
 -D 2018-10-08T12:58:59.969
++C Merge\slatest\strunk\schanges\sinto\sthis\sbranch.
++D 2018-10-08T18:58:51.339
+ F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1
+ F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea
+ F Makefile.in 01e95208a78b57d056131382c493c963518f36da4c42b12a97eb324401b3a334
  F Makefile.linux-gcc 7bc79876b875010e8c8f9502eb935ca92aa3c434
- F Makefile.msc 02b469e9dcd5b7ee63fc1fb05babc174260ee4cfa4e0ef2e48c3c6801567a016
- F README.md f5c87359573c4d255425e588a56554b50fdcc2afba4e017a2e02a43701456afd
- F VERSION f81232df28e2d3ff049feefad5fbd5489cc33697f6bd2ecf61af7f0dde3b83d0
+ F Makefile.msc b946f8806a5d401a299453f61de80dfd1a9df14fa4902b299e6465e3c3134872
+ F README.md 377233394b905d3b2e2b33741289e093bc93f2e7adbe00923b2c5958c9a9edee
+ F VERSION 654da1d4053fb09ffc33a3910e6d427182a7dcdc67e934fa83de2849ac83fccb
  F aclocal.m4 a5c22d164aff7ed549d53a90fa56d56955281f50
  F art/sqlite370.eps aa97a671332b432a54e1d74ff5e8775be34200c2
  F art/sqlite370.ico af56c1d00fee7cd4753e8631ed60703ed0fc6e90
@@@ -388,84 -437,85 +437,85 @@@ F spec.template 86a4a43b99ebb3e75e6b9a7
  F sqlite.pc.in 42b7bf0d02e08b9e77734a47798d1a55a9e0716b
  F sqlite3.1 fc7ad8990fc8409983309bb80de8c811a7506786
  F sqlite3.pc.in 48fed132e7cb71ab676105d2a4dc77127d8c1f3a
- F src/alter.c 748950c55b18099a82a9ee4da59272fa3ce935dc7edbdf22d3c84cbb56a31463
- F src/analyze.c a40d5a3012254c5d921a02a7c2eedf96118f541eb0a866dcdb6b6f2d64a03e43
- F src/attach.c 07b706e336fd3cedbd855e1f8266d10e82fecae07daf86717b5760cd7784c584
- F src/auth.c 79f96c6f33bf0e5da8d1c282cee5ebb1852bb8a6ccca3e485d7c459b035d9c3c
- F src/backup.c faf17e60b43233c214aae6a8179d24503a61e83b
 -F src/alter.c bcb67339d8551408bfc99aa78b597abdc9b880114bc4e42027f9a02615df4f43
 -F src/analyze.c 3dc6b98cf007b005af89df165c966baaa48e8124f38c87b4d2b276fe7f0b9eb9
++F src/alter.c 59fa34093fdf62a4049f847c651216f8fc91da494f86cbea35207b115dc4e82c
++F src/analyze.c 44f9189faccf08fbd547b3e232bec559f3669eeec3118751f26512e901698db5
+ F src/attach.c 4bd5b92633671d3e8ce431153ebb1893b50335818423b5373f3f27969f79769a
+ F src/auth.c 0fac71038875693a937e506bceb492c5f136dd7b1249fbd4ae70b4e8da14f9df
+ F src/backup.c 78d3cecfbe28230a3a9a1793e2ead609f469be43e8f486ca996006be551857ab
  F src/bitvec.c 17ea48eff8ba979f1f5b04cc484c7bb2be632f33
- F src/btmutex.c 0e9ce2d56159b89b9bc8e197e023ee11e39ff8ca
- F src/btree.c 1a17ba1a765d80c3ca39ce33ff55f92e1f51eb84bbbdab5377f11d36b1515fa1
- F src/btree.h 3edc5329bc59534d2d15b4f069a9f54b779a7e51289e98fa481ae3c0e526a5ca
- F src/btreeInt.h 97700795edf8a43245720414798b7b29d8e465aef46bf301ffacd431910c0da1
- F src/build.c 5b857c4302cb4b333beabfca7f4e79aa9705984cc77a3f09d2bd9cea4a58f855
- F src/callback.c cc17a561f8035b50e3ded141d1ceb582ae12cb79d879adcc43c6a3f28a698a57
+ F src/btmutex.c 8acc2f464ee76324bf13310df5692a262b801808984c1b79defb2503bbafadb6
+ F src/btree.c 3f5e1a03db871e627bf5da21092bf7434ecfc5c5980bbd7d45eba13341340173
+ F src/btree.h febb2e817be499570b7a2e32a9bbb4b607a9234f6b84bb9ae84916d4806e96f2
+ F src/btreeInt.h 620ab4c7235f43572cf3ac2ac8723cbdf68073be4d29da24897c7b77dda5fd96
 -F src/build.c 0b3d422770877d74ee6d54f4c122d82c48f7d04ee3bfb91702e402de7f5c45ac
 -F src/callback.c 36caff1e7eb7deb58572d59c41cee8f064a11d00297616995c5050ea0cfc1288
++F src/build.c 9cc3ee9b5736ad53a2f1667e7e7bc69bcdacb6ed6419006b26421e969bc0b696
++F src/callback.c 83fb13418d563554316b0eea16cc53145ae8668884900eaa730fda398a7cc787
  F src/complete.c a3634ab1e687055cd002e11b8f43eb75c17da23e
- F src/ctime.c ff1be3eed7bdd75aaca61ca8dc848f7c9f850ef2fb9cb56f2734e922a098f9c0
- F src/date.c 48f743d88bbe88f848532d333cca84f26e52a4f217e86f86be7fc1b919c33d74
- F src/dbstat.c 7a4ba8518b6369ef3600c49cf9c918ad979acba610b2aebef1b656d649b96720
- F src/delete.c 939bd15e6b54b82b951e1c0ffc2ff2b4ab579196780a1f6d394e47bd6f799b6c
- F src/expr.c fdb2fc465cabbf372fecad1fc2b291758bec74150b4db0fb945332e09df28a0e
+ F src/ctime.c b157b01081f92442f8b0218ddb93ddce8ebddad36dbddeecfdd771561dd4f387
+ F src/date.c ebe1dc7c8a347117bb02570f1a931c62dd78f4a2b1b516f4837d45b7d6426957
+ F src/dbpage.c 4aa7f26198934dbd002e69418220eae3dbc71b010bbac32bd78faf86b52ce6c3
+ F src/dbstat.c edabb82611143727511a45ca0859b8cd037851ebe756ae3db289859dd18b6f91
+ F src/delete.c 107e28d3ef8bd72fd11953374ca9107cd74e8b09c3ded076a6048742d26ce7d2
+ F src/expr.c 5cee8fb79b1952689af80ed71ed16ad295f29d85de30c7592993b05cf1ec1e06
  F src/fault.c 460f3e55994363812d9d60844b2a6de88826e007
- F src/fkey.c 5ff2c895fe087756d8085dc1a9bc229b5670e2a65c3929dd87c71e43649af333
- F src/func.c ed8888ae80b39f5a5d403954e4a05e0a38303523dff8143161439c142d31dec1
- F src/global.c 8a6ab6b4d91effb96ffa81b39f0d70c862abca157f8aaa194600a4a8b7923344
+ F src/fkey.c 972a4ba14296bef2303a0abbad1e3d82bc3c61f9e6ce4e8e9528bdee68748812
+ F src/func.c 7c288b4ce309b5a8b8473514b88e1f8e69a80134509a8c0db8e39c858e367e7f
+ F src/global.c 9bf034fd560bdd514715170ed8460bb7f823cec113f0569ef3f18a20c7ccd128
  F src/hash.c a12580e143f10301ed5166ea4964ae2853d3905a511d4e0c44497245c7ce1f7a
  F src/hash.h ab34c5c54a9e9de2e790b24349ba5aab3dbb4fd4
  F src/hwtime.h 747c1bbe9df21a92e9c50f3bbec1de841dc5e5da
  F src/in-operator.md 10cd8f4bcd225a32518407c2fb2484089112fd71
- F src/insert.c d2d1bf12d2b5382450620d7cede84c7ffe57e6a89fa9a908f1aba68df2731cd9
+ F src/insert.c 0a214201afec77880a31a59c33d86b473a160fc5cc31981eab2041ae03d8bf2f
  F src/legacy.c 134ab3e3fae00a0f67a5187981d6935b24b337bcf0f4b3e5c9fa5763da95bf4e
- F src/loadext.c 20865b183bb8a3723d59cf1efffc3c50217eb452c1021d077b908c94da26b0b2
- F src/main.c bd53babb6dbe4df7e601b79bb1a9c1cc3ca0f135bc62f5151a2ebebc9ad6f5c4
- F src/malloc.c e20bb2b48abec52d3faf01cce12e8b4f95973755fafec98d45162dfdab111978
+ F src/loadext.c 30b140d0e5031924c56f802760506c0a235ced0dff9f3d95119aa86df12856e2
 -F src/main.c 6275ece0699a957c4709a7ebe29476f132adbe459d18a6b497e234e4669abf91
++F src/main.c 45b337a5e2cf6c3c87f509e620a45feb59258240135b1a72af28c689624a6eb8
+ F src/malloc.c 07295435093ce354c6d9063ac05a2eeae28bd251d2e63c48b3d67c12c76f7e18
  F src/mem0.c 6a55ebe57c46ca1a7d98da93aaa07f99f1059645
  F src/mem1.c c12a42539b1ba105e3707d0e628ad70e611040d8f5e38cf942cee30c867083de
  F src/mem2.c f1940d9e91948dd6a908fbb9ce3835c36b5d83c3
  F src/mem3.c 8768ac94694f31ffaf8b4d0ea5dc08af7010a35a
  F src/mem5.c 9bf955937b07f8c32541c8a9991f33ce3173d944
+ F src/memdb.c cb4013d56fa71c79c498717cbc47b27dd1c7653fd866584b2071ae04114eec46
  F src/memjournal.c 6f3d36a0a8f72f48f6c3c722f04301ac64f2515435fa42924293e46fc7994661
  F src/msvc.h 4942752b6a253116baaa8de75256c51a459a5e81
- F src/mutex.c 8e45800ee78e0cd1f1f3fe8e398853307f4a085c
+ F src/mutex.c bae36f8af32c22ad80bbf0ccebec63c252b6a2b86e4d3e42672ff287ebf4a604
  F src/mutex.h 779d588e3b7756ec3ecf7d78cde1d84aba414f85
  F src/mutex_noop.c 9d4309c075ba9cc7249e19412d3d62f7f94839c4
- F src/mutex_unix.c 27bb6cc49485ee46711a6580ab7b3f1402211d23
- F src/mutex_w32.c a898fa969823b100c0f5fdc57e54c9a1e419ab4d
+ F src/mutex_unix.c aaf9ebc3f89df28483c52208497a99a02cc3650011422fc9d4c57e4392f7fe58
+ F src/mutex_w32.c 7670d770c94bbfe8289bec9d7f1394c5a00a57c37f892aab6b6612d085255235
  F src/notify.c 9711a7575036f0d3040ba61bc6e217f13a9888e7
- F src/os.c add02933b1dce7a39a005b00a2f5364b763e9a24
- F src/os.h 8e976e59eb4ca1c0fca6d35ee803e38951cb0343
+ F src/os.c 8aeb0b0f40f8f5b0da03fe49706695adaf42d2f516ab95abc72e86c245e119de
+ F src/os.h 48388821692e87da174ea198bf96b1b2d9d83be5dfc908f673ee21fafbe0d432
  F src/os_common.h b2f4707a603e36811d9b1a13278bffd757857b85
  F src/os_setup.h 0dbaea40a7d36bf311613d31342e0b99e2536586
- F src/os_unix.c a361273749229755f92c8f0e3e4855054ad39bbc5c65773e8db5d0b79afa632c
- F src/os_win.c 964165b66cde03abc72fe948198b01be608436894732eadb94c8720d2467f223
+ F src/os_unix.c d483d738183c822cc96ec5539424eee5b9847c882dee57f93b880aaf46a7af19
+ F src/os_win.c 070cdbb400097c6cda54aa005356095afdc2f3ee691d17192c54724ef146a971
  F src/os_win.h 7b073010f1451abe501be30d12f6bc599824944a
- F src/pager.c 1e63b0299cf123cf38c48413ec03190f56c1e7d0ccc6573c467d8ac240b898e9
- F src/pager.h f2a99646c5533ffe11afa43e9e0bea74054e4efa
- F src/parse.y 52ef3cecd0934e9da4a45b585883a03243ad615d338ad94f44501a05891dcdfa
- F src/pcache.c 62835bed959e2914edd26afadfecce29ece0e870
- F src/pcache.h 521bb9610d38ef17a3cc9b5ddafd4546c2ea67fa3d0e464823d73c2a28d50e11
- F src/pcache1.c 0b793738b5dddaf0a645784835c6b5557b1ecfaee339af9c26810c6ecdb273aa
- F src/pragma.c cd6aeda3587be6c5c08f9b2d45eae6068666a03c9d077c8c43cdb85fb0aa70f2
- F src/pragma.h bb83728944b42f6d409c77f5838a8edbdb0fe83046c5496ffc9602b40340a324
- F src/prepare.c 955b618566c42ddb28a38bd80e804c477bc2eda5ebc474a1e152847a6013d38d
- F src/printf.c 8757834f1b54dae512fb25eb1acc8e94a0d15dd2290b58f2563f65973265adb2
+ F src/pager.c a0d8f686ef64549ad5b356fd30429bd9ee7a06dd42b4d6faa096352ff26b1c5b
+ F src/pager.h ecc554a55bc55d1c4ba5e17137b72e238e00bd81e72ff2662d8b9c8c10ae3963
+ F src/parse.y 6840fe7c0b5eb4dd25ee5d075213bc8255ed4c0678d71bfb6744d0520d91c179
+ F src/pcache.c 4196eb6ed3bbf00b80596c8e0b4f50e57eb7d890c19fb27a7354306abb7f983d
+ F src/pcache.h 072f94d29281cffd99e46c1539849f248c4b56ae7684c1f36626797fee375170
+ F src/pcache1.c 716975564c15eb6679e97f734cec1bfd6c16ac3d4010f05f1f8e509fc7d19880
+ F src/pragma.c a656ff043a03bd94153e6d731a3fbf1bb420207edc969d8fc04b4d2448387901
+ F src/pragma.h 0ea639401ed7b8275c145e3a814119831e296118b545421e76ae2e1516f10ad8
 -F src/prepare.c f8e260d940a0e08494c0f30744521b2f832d7263eca9d02b050cea0ba144b097
++F src/prepare.c 051a2342f221f2c94b6bbbe4006b00546a3bf798f7c6ce8d4304ed9fcbcdad80
+ F src/printf.c 0f1177cf1dd4d7827bf64d840768514ec76409abecaca9e8b577dbd065150381
  F src/random.c 80f5d666f23feb3e6665a6ce04c7197212a88384
- F src/resolve.c 4324a94573b1e29286f8121e4881db59eaedc014afeb274c8d3e07ed282e0e20
- F src/rowset.c 7b7e7e479212e65b723bf40128c7b36dc5afdfac
- F src/select.c 3fd19c98c5223d411b883502d1ac928ddb762a1ea8f031d910210316545fc67c
- F src/shell.c bd6a37cbe8bf64ef6a6a74fdc50f067d3148149b4ce2b4d03154663e66ded55f
- F src/shell.c.in b5725acacba95ccefa57b6d068f710e29ba8239c3aa704628a1902a1f729c175
- F src/sqlite.h.in e1574e78bfa86255774679106ac63e5a5ed732535930257acefd1855a0471e29
+ F src/resolve.c bc8c79e56439b111e7d9415e44940951f7087e9466c3a9d664558ef0faf31073
+ F src/rowset.c d977b011993aaea002cab3e0bb2ce50cf346000dff94e944d547b989f4b1fe93
+ F src/select.c 33aacf1c17c64a00788c779b23d0875dd0d90eb4c08f867ebc31139ef3a67c95
+ F src/shell.c.in 09342e09c9518e2d927566069272a7a47799e3ad4125562bbfc1240478c4a5a2
 -F src/sqlite.h.in 4b4c2f2daeeed4412ba9d81bc78092c69831fe6eda4f0ae5bf951da51a8dccec
++F src/sqlite.h.in ced5a50faab700b4a60dd029a240496fa42e0225c9d5d381908c601d15fb27ee
  F src/sqlite3.rc 5121c9e10c3964d5755191c80dd1180c122fc3a8
- F src/sqlite3ext.h a1fd3aa82f967da436164e0728a7d6841651fd0c6e27b9044e0eb9f6c8462e47
- F src/sqliteInt.h 21a575b64a829fe1951030bab40135078ab0a152aea45535b2ad3057f31ee009
+ F src/sqlite3ext.h 305adca1b5da4a33ce2db5bd236935768e951d5651bfe5560ed55cfcdbce6a63
 -F src/sqliteInt.h 75d8266b27c287aeada717a541cf7b7543383fccdb1d7d45a5620f666e864c55
++F src/sqliteInt.h cc1062f66d3827bf2ff53db306d1ddabc1f00be4e73adc9cc042678387d2def5
  F src/sqliteLimit.h 1513bfb7b20378aa0041e7022d04acb73525de35b80b252f1b83fedb4de6a76b
- F src/status.c a9e66593dfb28a9e746cba7153f84d49c1ddc4b1
+ F src/status.c 46e7aec11f79dad50965a5ca5fa9de009f7d6bde08be2156f1538a0a296d4d0e
  F src/table.c b46ad567748f24a326d9de40e5b9659f96ffff34
- F src/tclsqlite.c e117575fed5cef7c2dc60d53eb7003578c67aaf50bde9cc8e83ba876450a2ce5
- F src/test1.c 8513b17ca4a7a9ba28748535d178b6e472ec7394ae0eea53907f2d3bcdbab2df
 -F src/tclsqlite.c e72862a271348d779672b45a730c33fd0c535e630ff927e8ce4a0c908d1d28c6
++F src/tclsqlite.c b15e46bdc1b14e994a358d51ce0bf8b7d7d4615cda96634ca0498ee39bc83b9c
+ F src/test1.c 9bb042e4afedc570f78638993fc9cc1760d897d3b27dd72c20618044b2a8fa5e
  F src/test2.c 3efb99ab7f1fc8d154933e02ae1378bac9637da5
- F src/test3.c b8434949dfb8aff8dfa082c8b592109e77844c2135ed3c492113839b6956255b
+ F src/test3.c 61798bb0d38b915067a8c8e03f5a534b431181f802659a6616f9b4ff7d872644
  F src/test4.c 18ec393bb4d0ad1de729f0b94da7267270f3d8e6
  F src/test5.c 328aae2c010c57a9829d255dc099d6899311672d
  F src/test6.c e8d839fbc552ce044bec8234561a2d5b8819b48e29548ad0ba400471697946a8
@@@ -505,39 -556,43 +556,43 @@@ F src/test_server.c a2615049954cbb9cfb4
  F src/test_sqllog.c 11e6ce7575f489155c604ac4b439f2ac1d3d5aef
  F src/test_superlock.c 4839644b9201da822f181c5bc406c0b2385f672e
  F src/test_syscall.c 1073306ba2e9bfc886771871a13d3de281ed3939
- F src/test_tclvar.c df9fe1213c2634687a9ca0b0bec0d2119d359ae3
+ F src/test_tclsh.c 06317648b0d85a85fd823f7973b55535c59a3156c1ef59394fe511f932cfa78d
+ F src/test_tclvar.c 33ff42149494a39c5fbb0df3d25d6fafb2f668888e41c0688d07273dcb268dfc
  F src/test_thread.c 911d15fb14e19c0c542bdc8aabf981c2f10a4858
- F src/test_vfs.c f0186261a24de2671d080bcd8050732f0cb64f6e
+ F src/test_vfs.c 112f1f9271c33c211812e0e681830a84262dac065da58579ff49f9cefec97d4f
  F src/test_vfstrace.c bab9594adc976cbe696ff3970728830b4c5ed698
- F src/test_windirent.c 17f91f5f2aa1bb7328abb49414c363b5d2a9d3ff
- F src/test_windirent.h 5d67483a55442e31e1bde0f4a230e6e932ad5906
+ F src/test_windirent.c a895e2c068a06644eef91a7f0a32182445a893b9a0f33d0cdb4283dca2486ac1
+ F src/test_windirent.h 90dfbe95442c9762357fe128dc7ae3dc199d006de93eb33ba3972e0a90484215
+ F src/test_window.c cdae419fdcea5bad6dcd9368c685abdad6deb59e9fc8b84b153de513d394ba3f
  F src/test_wsd.c 41cadfd9d97fe8e3e4e44f61a4a8ccd6f7ca8fe9
  F src/threads.c 4ae07fa022a3dc7c5beb373cf744a85d3c5c6c3c
- F src/tokenize.c 1003d6d90c6783206c711f0a9397656fa5b055209f4d092caa43bb3bf5215db5
- F src/treeview.c 2ee4a5dada213d5ab08a742af5c876cee6f1aaae65f10a61923f3fb63846afef
- F src/trigger.c bda24e1772804abd4db550f60bc3be3ef2b09248589362163772b257054a9270
- F src/update.c c443935c652af9365e033f756550b5032d02e1b06eb2cb890ed7511ae0c051dc
+ F src/tokenize.c 9f55961518f77793edd56eee860ecf035d4370ebbb0726ad2f6cada6637fd16b
+ F src/treeview.c 0ef7dc77d6fe03172ba65dddfd3b3c557b7b7e217ca1963b7665beb266a0e2c0
 -F src/trigger.c d3d78568f37fb2e6cdcc2d1e7b60156f15b0b600adec55b83c5d42f6cad250bd
++F src/trigger.c 9ec37388378ba50a433d3a2b7daaca5d712185977c0d3180ab5043c32ed4a8d0
+ F src/update.c 1816d56c1bca1ba4e0ef98cac2f49be62858e9df1dc08844c7067eb41cc44274
+ F src/upsert.c 0dd81b40206841814d46942a7337786932475f085716042d0cb2fc7791bf8ca4
  F src/utf.c 810fbfebe12359f10bc2a011520a6e10879ab2a163bcb26c74768eab82ea62a5
- F src/util.c fc081ec6f63448dcd80d3dfad35baecfa104823254a815b081a4d9fe76e1db23
- F src/vacuum.c c31a0fe4ca640e0aabf483bc2c65065b41622a3f6e820cd83817cce3e55a2581
- F src/vdbe.c 821b3edde2d17ec60da0617db1018a88f38634c359d22f3c8f7be10336c82636
- F src/vdbe.h 5aa766d2c95fd47a2d5d41e183ee052d21d3d8c3181c2255a56eac15aa6d62b4
- F src/vdbeInt.h ff2b7db0968d20e6184aee256d2e535d565f5a172e3588a78adb166a41fc4911
- F src/vdbeapi.c 05d6b14ab73952db0d73f6452d6960216997bd966a710266b2fe051f25326abc
- F src/vdbeaux.c c30be9a7030f62418b3159a950702aff49839b43130f1ab25fc06b77261d76a7
- F src/vdbeblob.c db3cf91060f6f4b2f1358a4200e844697990752177784c7c95da00b7ac9f1c7b
- F src/vdbemem.c b7fac20534c79b7554dab2e8a180c585a8bc1b9c85149d1b2d9746cf314d06ed
- F src/vdbesort.c fea2bea25f5e9ccd91e0760d7359f0365f9fba1aaeac7216c71cad78765f58e3
- F src/vdbetrace.c 41963d5376f0349842b5fc4aaaaacd7d9cdc0834
- F src/vtab.c 33ee6b2afdd43379b068e570fc88b8b8d4364ad02fcea5f3bc4d1d4dc0a33ae2
+ F src/util.c d9eb0a6c4aae1b00a7369eadd7ca0bbe946cb4c953b6751aa20d357c2f482157
 -F src/vacuum.c 36e7d21a20c0bf6ef4ef7c399d192b5239410b7c4d3c1070fba4e30810d0b855
++F src/vacuum.c 6da236d4897c0227c0bef7c8f5be718482b65c8fc158fc46ffda2c529df1ba2f
+ F src/vdbe.c 005e691ea4c7d51e6c1a69d9389aeb34700884c85f51681817ddea3fdc2fc39b
 -F src/vdbe.h 5081dcc497777efe5e9ebe7330d283a044a005e4bdda2e2e984f03bf89a0d907
++F src/vdbe.h faedef405cf4e0679b46286576cebb307255d1a5c65908f470628255833faec4
+ F src/vdbeInt.h f1f35f70460698d8f5a2bdef1001114babf318e2983a067804e2ae077d8e9827
+ F src/vdbeapi.c 2ba821c5929a2769e4b217dd85843479c718b8989d414723ec8af0616a83d611
 -F src/vdbeaux.c 9fe7760a6b9739f21f3e19ad5364330b0f681998fc52c32358243b0060423474
++F src/vdbeaux.c 40f4b3ca7e0b5328f72c7263aab49112e354ec6bdeb9f2aae8030bc029709306
+ F src/vdbeblob.c f5c70f973ea3a9e915d1693278a5f890dc78594300cf4d54e64f2b0917c94191
+ F src/vdbemem.c 81329ab760e4ec0162119d9cd10193e0303c45c5935bb20c7ae9139d44dd6641
+ F src/vdbesort.c 90aad5a92608f2dd771c96749beabdb562c9d881131a860a7a5bccf66dc3be7f
+ F src/vdbetrace.c 79d6dbbc479267b255a7de8080eee6e729928a0ef93ed9b0bfa5618875b48392
 -F src/vtab.c 70188a745dc4e57d26e942681ff4b2912b7c8249ad5de3f60f0677b4337bcfaa
++F src/vtab.c df409cbabcb98568981da6f3b6ae5465fc82da6f213bbdbb535a25714836b7e6
  F src/vxworks.h d2988f4e5a61a4dfe82c6524dd3d6e4f2ce3cdb9
- F src/wal.c 40c543f0a2195d1b0dc88ef12142bea690009344
- F src/wal.h 06b2a0b599cc0f53ea97f497cf8c6b758c999f71
- F src/walker.c a7ca64ce08a83a20d32186fbe06bca9234e348cfcf07959ee322fdc3e8a6173a
- F src/where.c cbe8ddffbcec7ce86f7a800fe8fd10aee412c76c87e0dd3732a1682e68d74cd9
- F src/whereInt.h 93bb90b77d39901eda31b44d8e90da1351193ccfe96876f89b58a93a33b84c3d
- F src/wherecode.c e7be3b7f4c11908500cdf02b299d190d3742659533f58e0f4047962fdb5a48da
- F src/whereexpr.c 1e55d79174522fe3b9b7ab224ebedc03da6ec5e6d204d740fa73e71280f54574
+ F src/wal.c 3f4f653daf234fe713edbcbca3fec2350417d159d28801feabc702a22c4e213f
+ F src/wal.h 606292549f5a7be50b6227bd685fa76e3a4affad71bb8ac5ce4cb5c79f6a176a
+ F src/walker.c fb94aadc9099ff9c6506d0a8b88d51266005bcaa265403f3d7caf732a562eb66
+ F src/where.c a54a3d639bcd751d1474deff58e239b2e475a96e1b8f9178aa7864df8782a4e3
+ F src/whereInt.h f125f29fca80890768e0b2caa14f95db74b2dacd3a122a168f97aa7b64d6968f
+ F src/wherecode.c 3df0a541373d5f999684d761e4bd700d57adb46c7d39da4e77b767b5adcd5893
+ F src/whereexpr.c 1b5a5a7876997f65232bbf19c5c1eeb47eb328b8fa5b28c865543052904cde00
+ F src/window.c a28d8d42c51c7e31136a42f3e245282049d4a9466b36d7bd765772991472df41
  F test/8_3_names.test ebbb5cd36741350040fd28b432ceadf495be25b2
  F test/affinity2.test a6d901b436328bd67a79b41bb0ac2663918fe3bd
  F test/affinity3.test 6a101af2fc945ce2912f6fe54dd646018551710d
@@@ -1113,11 -1197,11 +1197,12 @@@ F test/rdonly.test 64e2696c322e3538df0b
  F test/regexp1.test 497ea812f264d12b6198d6e50a76be4a1973a9d8
  F test/regexp2.test 40e894223b3d6672655481493f1be12012f2b33c
  F test/reindex.test 44edd3966b474468b823d481eafef0c305022254
- F test/releasetest.tcl 7bb585433ce7fb2a2c255ae4b5e24f1bc27fe177ec1120f886cc4852f48f5ee9 x
+ F test/releasetest.tcl c5b474f9880073fc3b69729ee05d5284653a9ee101af572204917d9dcb1d9015 x
+ F test/resetdb.test 684a6ffde5a5141bba79f3101981cc38dcfc3403f61e643b7b3aa68bef0b8408
  F test/resolver01.test f4022acafda7f4d40eca94dbf16bc5fc4ac30ceb
- F test/rollback.test f580934279800d480a19176c6b44909df31ce7ad45267ea475a541daa522f3d3
- F test/rollback2.test 8435d6ff0f13f51d2a4181c232e706005fa90fc5
 +F test/reuse1.test 04ae701b4000113fedc472719e4cf4bb1d34d22dcaf8d3e643d41d1256a9590d
+ F test/rollback.test 06680159bc6746d0f26276e339e3ae2f951c64812468308838e0a3362d911eaa
+ F test/rollback2.test bc868d57899dc6972e2b4483faae0e03365a0556941474eec487ae21d8d38bb6
  F test/rollbackfault.test 0e646aeab8840c399cfbfa43daab46fd609cf04a
  F test/rowallock.test 3f88ec6819489d0b2341c7a7528ae17c053ab7cc
  F test/rowhash.test 0bc1d31415e4575d10cacf31e1a66b5cc0f8be81
@@@ -1233,28 -1326,29 +1327,29 @@@ F test/subselect.test 0966aa8e720224dbd
  F test/substr.test 18f57c4ca8a598805c4d64e304c418734d843c1a
  F test/subtype1.test 7fe09496352f97053af1437150751be2d0a0cae8
  F test/superlock.test ec94f0556b6488d97f71c79f9061ae08d9ab8f12
- F test/swarmvtab.test 05c4ca7b6ab0cc6f4c335a510347f99d741fa71366004699cf7dfa3cff4e2d17
- F test/swarmvtab2.test 038ef9bcad6fd2fb9e395196080cf23e223ddb1219015049a61540c161bc577d
- F test/swarmvtabfault.test 73563eefe3073c6fb3bb14475fb4ef5d4f2e3a67a02947ee0ca08980ea3dd7fe
- F test/symlink.test c9ebe7330d228249e447038276bfc8a7b22f4849
- F test/sync.test 2f84bdbc2b2df1fcb0220575b4b9f8cea94b7529
- F test/sync2.test 6be8ed007fa063b147773c1982b5bdba97a32badc536bdc6077eff5cf8710ece
+ F test/swarmvtab.test 9a3fd5ab3e9b3c976ad1b3d7646aab725114f2ac26b59395d0778b33bab6cdaf
+ F test/swarmvtab2.test c948cb2fdfc5b01d85e8f6d6504854202dc1a0782ab2a0ed61538f27cbd0aa5c
+ F test/swarmvtab3.test 6cb664669630fcec4102a09333e52068734858fd2761eee3b0465c14cdbcee29
+ F test/swarmvtabfault.test 00aec54665909490f5c383f3cae3b5d18bd97c12490b429ff8752a3027acfa42
+ F test/symlink.test 0d816670325536b8973ec08d32b45136baddb80bd45fd178e0ce7a9e8153f3e7
+ F test/sync.test 89539f4973c010eda5638407e71ca7fddbcd8e0594f4c9980229f804d4333092
+ F test/sync2.test 8f9f7d4f6d5be8ca8941a8dadcc4299e558cb6a1ff653a9469146c7a76ef2039
  F test/syscall.test a39d9a36f852ae6e4800f861bc2f2e83f68bbc2112d9399931ecfadeabd2d69d
  F test/sysfault.test c9f2b0d8d677558f74de750c75e12a5454719d04
- F test/tabfunc01.test c47171c36b3d411df2bd49719dcaa5d034f8d277477fd41d253940723b969a51
+ F test/tabfunc01.test 5ddfdcda81f362d54cf301a65678edea2a02a570760a4c88051fc2730aafcd81
  F test/table.test b708f3e5fa2542fa51dfab21fc07b36ea445cb2f
- F test/tableapi.test 2674633fa95d80da917571ebdd759a14d9819126
+ F test/tableapi.test ecbcc29c4ab62c1912c3717c48ea5c5e59f7d64e4a91034e6148bd2b82f177f4
  F test/tableopts.test dba698ba97251017b7c80d738c198d39ab747930
- F test/tclsqlite.test d1fc287635da11f60b9243022b2332b667fbb9bdfb3d22b884a2e7d506afffd1
- F test/tempdb.test bd92eba8f20e16a9136e434e20b280794de3cdb6
- F test/tempdb2.test 27e41ed540b2f9b056c2e77e9bddc1b875358507
 -F test/tclsqlite.test dca8aa30d84175e7d8c8fc43d3ffa11fa56e23fbdac2679d03833a0f326edf34
++F test/tclsqlite.test 049da602775bebfadfa2fae0710e1099a38ef2fc9f76c7546be3ba8fdbb02263
+ F test/tempdb.test 4cdaa23ddd8acb4d79cbb1b68ccdfd09b0537aaba909ca69a876157c2a2cbd08
+ F test/tempdb2.test 4749545409c6d7438b435c3f05cdd139cf4145a954a6908d19e3443ffd8724b3
  F test/tempfault.test 0c0d349c9a99bf5f374655742577f8712c647900
  F test/temptable.test d2c9b87a54147161bcd1822e30c1d1cd891e5b30
- F test/temptable2.test cd396beb41117a5302fff61767c35fa4270a0d5e
+ F test/temptable2.test d2940417496e2b9548e01d09990763fbe88c316504033256d51493e1f1a5ce6a
  F test/temptable3.test d11a0974e52b347e45ee54ef1923c91ed91e4637
  F test/temptrigger.test 38f0ca479b1822d3117069e014daabcaacefffcc
- F test/tester.tcl eb7ec55fe074a909423c1de701f7c545417b8aa96787b8c3e7a79203f2cebec8
- F test/thread001.test 9f22fd3525a307ff42a326b6bc7b0465be1745a5
+ F test/tester.tcl fa5656391e3b477508abe12b3b81f019b2e71397399ab38a2f32d8d7f3bf8e56
+ F test/thread001.test b61a29dd87cf669f5f6ac96124a7c97d71b0c80d9012746072055877055cf9ef
  F test/thread002.test e630504f8a06c00bf8bbe68528774dd96aeb2e58
  F test/thread003.test ee4c9efc3b86a6a2767516a37bd64251272560a7
  F test/thread004.test f51dfc3936184aaf73ee85f315224baad272a87f
@@@ -1645,10 -1771,7 +1772,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 94434a252f0f2b57f325fd8fb82534f20cc1340ff13076cd88deeb47740ef6a2
- R ed2f8a5054bbb201ae29fcc7757dba48
- T *branch * reuse-schema
- T *sym-reuse-schema *
- T -sym-trunk *
 -P aac8f1dff0728c629b5cbf30369ee91c5862a707ede694dc2628d1d4f5a6c202
 -R 6c483dda78db6c9ea6a6a082c4feae71
 -U drh
 -Z f525bca01c12c5943b4f7c604400e173
++P a625698048c05375f12ea8875892fdbf3518291f10917fe68dd2294280cd3b42 690dd18a5768c5a8cdfa92d5b01901c1a7b1fb6ebb90399f56a3112e41609f92
++R fe6beb8363bb52b29ad9017127c5a25d
 +U dan
- Z 6d545754cdf84dd62577616fb01f7f9c
++Z 3140f4ddf8569ce4edd6a8cc2929ebcb
diff --cc manifest.uuid
index fe6f444d26ee1b2fd966612999a7bde975f572ea,b8eda6748ba2db6735bd6828c7170ac17eb42aa1..da2645ce6e4ed7ee696f9a27b965fa6adf4cc887
@@@ -1,1 -1,1 +1,1 @@@
- a625698048c05375f12ea8875892fdbf3518291f10917fe68dd2294280cd3b42
 -690dd18a5768c5a8cdfa92d5b01901c1a7b1fb6ebb90399f56a3112e41609f92
++2ac72114a1f5344b42472b941c60f460c28c981a22ea40909b30f7bf4eb4b11b
diff --cc src/alter.c
index b1aedd3a75c2064af0dec4ddee4846d5574b89f4,f0f913b1c59f789c6dcce11c45f90b3e198b2a16..71477a9fb2a603ad221e6bd2b5c4fbbc4f6c92ca
@@@ -366,20 -67,16 +67,16 @@@ static void renameTestSchema(Parse *pPa
  }
  
  /*
- ** Parameter zName is the name of a table that is about to be altered
- ** (either with ALTER TABLE ... RENAME TO or ALTER TABLE ... ADD COLUMN).
- ** If the table is a system table, this function leaves an error message
- ** in pParse->zErr (system tables may not be altered) and returns non-zero.
- **
- ** Or, if zName is not a system table, zero is returned.
+ ** Generate code to reload the schema for database iDb. And, if iDb!=1, for
+ ** the temp database as well.
  */
- static int isSystemTable(Parse *pParse, const char *zName){
-   if( 0==sqlite3StrNICmp(zName, "sqlite_", 7) ){
-     sqlite3ErrorMsg(pParse, "table %s may not be altered", zName);
-     return 1;
+ static void renameReloadSchema(Parse *pParse, int iDb){
+   Vdbe *v = pParse->pVdbe;
+   if( v ){
+     sqlite3ChangeCookie(pParse, iDb);
 -    sqlite3VdbeAddParseSchemaOp(pParse->pVdbe, iDb, 0);
 -    if( iDb!=1 ) sqlite3VdbeAddParseSchemaOp(pParse->pVdbe, 1, 0);
++    sqlite3VdbeAddParseSchemaOp(pParse, iDb, 0);
++    if( iDb!=1 ) sqlite3VdbeAddParseSchemaOp(pParse, 1, 0);
    }
-   return 0;
  }
  
  /*
diff --cc src/analyze.c
Simple merge
diff --cc src/build.c
index f60f3a62b1d6c82864782a7439edd93973cea5b4,b4041389bac6e5a2b80b530192ee598c52c0ca10..ed095644603f9abb2bae5a6a90a8dff35502576e
@@@ -514,24 -516,27 +516,30 @@@ void sqlite3CollapseDatabaseArray(sqlit
  
  /*
  ** Reset the schema for the database at index iDb.  Also reset the
- ** TEMP schema.
+ ** TEMP schema.  The reset is deferred if db->nSchemaLock is not zero.
+ ** Deferred resets may be run by calling with iDb<0.
  */
  void sqlite3ResetOneSchema(sqlite3 *db, int iDb){
-   /* If any database other than TEMP is reset, then also reset TEMP
-   ** since TEMP might be holding triggers that reference tables in the
-   ** other database.  */
-   Db *pDb = &db->aDb[1];
-   assert( pDb->pSchema!=0 );
-   sqlite3SchemaClear(pDb->pSchema);
+   int i;
    assert( iDb<db->nDb );
-   assert( sqlite3SchemaMutexHeld(db, iDb, 0) );
-   assert( db->aDb[iDb].pSchema!=0 );
  
-   if( iDb!=1 ){
-     sqlite3SchemaUnuse(db, iDb);
+   if( iDb>=0 ){
+     assert( sqlite3SchemaMutexHeld(db, iDb, 0) );
+     DbSetProperty(db, iDb, DB_ResetWanted);
+     DbSetProperty(db, 1, DB_ResetWanted);
+     db->mDbFlags &= ~DBFLAG_SchemaKnownOk;
+   }
 -
+   if( db->nSchemaLock==0 ){
+     for(i=0; i<db->nDb; i++){
+       if( DbHasProperty(db, i, DB_ResetWanted) ){
 -        sqlite3SchemaClear(db->aDb[i].pSchema);
++        if( i==1 ){
++          sqlite3SchemaClear(db->aDb[1].pSchema);
++        }else{
++          sqlite3SchemaUnuse(db, i);
++        }
+       }
+     }
    }
-   return;
  }
  
  /*
  void sqlite3ResetAllSchemasOfConnection(sqlite3 *db){
    int i;
    sqlite3BtreeEnterAll(db);
-   for(i=0; i<db->nDb; i = (i?i+1:2)){
+   assert( db->nSchemaLock==0 );
 -  for(i=0; i<db->nDb; i++){
 -    Db *pDb = &db->aDb[i];
 -    if( pDb->pSchema ){
 -      sqlite3SchemaClear(pDb->pSchema);
 -    }
++  for(i=0; i<db->nDb; i=(i?i+1:2)){
 +    sqlite3SchemaUnuse(db, i);
    }
-   db->mDbFlags &= ~DBFLAG_SchemaChange;
 +  sqlite3SchemaClear(db->aDb[1].pSchema);
+   db->mDbFlags &= ~(DBFLAG_SchemaChange|DBFLAG_SchemaKnownOk);
    sqlite3VtabUnlockList(db);
    sqlite3BtreeLeaveAll(db);
    sqlite3CollapseDatabaseArray(db);
@@@ -3306,98 -3414,101 +3416,101 @@@ void sqlite3CreateIndex
      }
    }
  
-   /* Link the new Index structure to its table and to the other
-   ** in-memory database structures. 
-   */
-   assert( pParse->nErr==0 );
-   if( db->init.busy ){
-     Index *p;
-     assert( !IN_DECLARE_VTAB );
-     assert( sqlite3SchemaMutexHeld(db, 0, pIndex->pSchema) );
-     p = sqlite3HashInsert(&pIndex->pSchema->idxHash, 
-                           pIndex->zName, pIndex);
-     if( p ){
-       assert( p==pIndex );  /* Malloc must have failed */
-       sqlite3OomFault(db);
-       goto exit_create_index;
-     }
-     db->mDbFlags |= DBFLAG_SchemaChange;
-     if( pTblName!=0 ){
-       pIndex->tnum = db->init.newTnum;
-     }
-   }
+   if( !IN_RENAME_OBJECT ){
  
-   /* If this is the initial CREATE INDEX statement (or CREATE TABLE if the
-   ** index is an implied index for a UNIQUE or PRIMARY KEY constraint) then
-   ** emit code to allocate the index rootpage on disk and make an entry for
-   ** the index in the sqlite_master table and populate the index with
-   ** content.  But, do not do this if we are simply reading the sqlite_master
-   ** table to parse the schema, or if this index is the PRIMARY KEY index
-   ** of a WITHOUT ROWID table.
-   **
-   ** If pTblName==0 it means this index is generated as an implied PRIMARY KEY
-   ** or UNIQUE index in a CREATE TABLE statement.  Since the table
-   ** has just been created, it contains no data and the index initialization
-   ** step can be skipped.
-   */
-   else if( HasRowid(pTab) || pTblName!=0 ){
-     Vdbe *v;
-     char *zStmt;
-     int iMem = ++pParse->nMem;
-     v = sqlite3GetVdbe(pParse);
-     if( v==0 ) goto exit_create_index;
-     sqlite3BeginWriteOperation(pParse, 1, iDb);
-     /* Create the rootpage for the index using CreateIndex. But before
-     ** doing so, code a Noop instruction and store its address in 
-     ** Index.tnum. This is required in case this index is actually a 
-     ** PRIMARY KEY and the table is actually a WITHOUT ROWID table. In 
-     ** that case the convertToWithoutRowidTable() routine will replace
-     ** the Noop with a Goto to jump over the VDBE code generated below. */
-     pIndex->tnum = sqlite3VdbeAddOp0(v, OP_Noop);
-     sqlite3VdbeAddOp2(v, OP_CreateIndex, iDb, iMem);
-     /* Gather the complete text of the CREATE INDEX statement into
-     ** the zStmt variable
+     /* Link the new Index structure to its table and to the other
+     ** in-memory database structures. 
      */
-     if( pStart ){
-       int n = (int)(pParse->sLastToken.z - pName->z) + pParse->sLastToken.n;
-       if( pName->z[n-1]==';' ) n--;
-       /* A named index with an explicit CREATE INDEX statement */
-       zStmt = sqlite3MPrintf(db, "CREATE%s INDEX %.*s",
-         onError==OE_None ? "" : " UNIQUE", n, pName->z);
-     }else{
-       /* An automatic index created by a PRIMARY KEY or UNIQUE constraint */
-       /* zStmt = sqlite3MPrintf(""); */
-       zStmt = 0;
+     assert( pParse->nErr==0 );
+     if( db->init.busy ){
+       Index *p;
+       assert( !IN_SPECIAL_PARSE );
+       assert( sqlite3SchemaMutexHeld(db, 0, pIndex->pSchema) );
+       p = sqlite3HashInsert(&pIndex->pSchema->idxHash, 
+           pIndex->zName, pIndex);
+       if( p ){
+         assert( p==pIndex );  /* Malloc must have failed */
+         sqlite3OomFault(db);
+         goto exit_create_index;
+       }
+       db->mDbFlags |= DBFLAG_SchemaChange;
+       if( pTblName!=0 ){
+         pIndex->tnum = db->init.newTnum;
+       }
      }
  
-     /* Add an entry in sqlite_master for this index
+     /* If this is the initial CREATE INDEX statement (or CREATE TABLE if the
+     ** index is an implied index for a UNIQUE or PRIMARY KEY constraint) then
+     ** emit code to allocate the index rootpage on disk and make an entry for
+     ** the index in the sqlite_master table and populate the index with
+     ** content.  But, do not do this if we are simply reading the sqlite_master
+     ** table to parse the schema, or if this index is the PRIMARY KEY index
+     ** of a WITHOUT ROWID table.
+     **
+     ** If pTblName==0 it means this index is generated as an implied PRIMARY KEY
+     ** or UNIQUE index in a CREATE TABLE statement.  Since the table
+     ** has just been created, it contains no data and the index initialization
+     ** step can be skipped.
      */
-     sqlite3NestedParse(pParse, 
-         "INSERT INTO %Q.%s VALUES('index',%Q,%Q,#%d,%Q);",
-         db->aDb[iDb].zDbSName, MASTER_NAME,
-         pIndex->zName,
-         pTab->zName,
-         iMem,
-         zStmt
-     );
-     sqlite3DbFree(db, zStmt);
+     else if( HasRowid(pTab) || pTblName!=0 ){
+       Vdbe *v;
+       char *zStmt;
+       int iMem = ++pParse->nMem;
+       v = sqlite3GetVdbe(pParse);
+       if( v==0 ) goto exit_create_index;
+       sqlite3BeginWriteOperation(pParse, 1, iDb);
+       /* Create the rootpage for the index using CreateIndex. But before
+       ** doing so, code a Noop instruction and store its address in 
+       ** Index.tnum. This is required in case this index is actually a 
+       ** PRIMARY KEY and the table is actually a WITHOUT ROWID table. In 
+       ** that case the convertToWithoutRowidTable() routine will replace
+       ** the Noop with a Goto to jump over the VDBE code generated below. */
+       pIndex->tnum = sqlite3VdbeAddOp0(v, OP_Noop);
+       sqlite3VdbeAddOp3(v, OP_CreateBtree, iDb, iMem, BTREE_BLOBKEY);
+       /* Gather the complete text of the CREATE INDEX statement into
+       ** the zStmt variable
+       */
+       if( pStart ){
+         int n = (int)(pParse->sLastToken.z - pName->z) + pParse->sLastToken.n;
+         if( pName->z[n-1]==';' ) n--;
+         /* A named index with an explicit CREATE INDEX statement */
+         zStmt = sqlite3MPrintf(db, "CREATE%s INDEX %.*s",
+             onError==OE_None ? "" : " UNIQUE", n, pName->z);
+       }else{
+         /* An automatic index created by a PRIMARY KEY or UNIQUE constraint */
+         /* zStmt = sqlite3MPrintf(""); */
+         zStmt = 0;
+       }
  
-     /* Fill the index with data and reparse the schema. Code an OP_Expire
-     ** to invalidate all pre-compiled statements.
-     */
-     if( pTblName ){
-       sqlite3RefillIndex(pParse, pIndex, iMem);
-       sqlite3ChangeCookie(pParse, iDb);
-       sqlite3VdbeAddParseSchemaOp(pParse, iDb,
-          sqlite3MPrintf(db, "name='%q' AND type='index'", pIndex->zName));
-       sqlite3VdbeAddOp0(v, OP_Expire);
-     }
+       /* Add an entry in sqlite_master for this index
+       */
+       sqlite3NestedParse(pParse, 
+           "INSERT INTO %Q.%s VALUES('index',%Q,%Q,#%d,%Q);",
+           db->aDb[iDb].zDbSName, MASTER_NAME,
+           pIndex->zName,
+           pTab->zName,
+           iMem,
+           zStmt
+           );
+       sqlite3DbFree(db, zStmt);
+       /* Fill the index with data and reparse the schema. Code an OP_Expire
+       ** to invalidate all pre-compiled statements.
+       */
+       if( pTblName ){
+         sqlite3RefillIndex(pParse, pIndex, iMem);
+         sqlite3ChangeCookie(pParse, iDb);
 -        sqlite3VdbeAddParseSchemaOp(v, iDb,
++        sqlite3VdbeAddParseSchemaOp(pParse, iDb,
+             sqlite3MPrintf(db, "name='%q' AND type='index'", pIndex->zName));
+         sqlite3VdbeAddOp2(v, OP_Expire, 0, 1);
+       }
  
-     sqlite3VdbeJumpHere(v, pIndex->tnum);
+       sqlite3VdbeJumpHere(v, pIndex->tnum);
+     }
    }
  
    /* When adding an index to the list of indices for a table, make
diff --cc src/callback.c
index 217c83a031a637fc6b9efe47247e876e76a2d288,a629b6825ed798e4c44635e3d3b4ab6adf7b0260..ed3e47f296fc00e2dd2afa37ab44fc3f113c1807
@@@ -457,112 -460,10 +460,112 @@@ void sqlite3SchemaClear(void *p)
    pSchema->pSeqTab = 0;
    if( pSchema->schemaFlags & DB_SchemaLoaded ){
      pSchema->iGeneration++;
-     pSchema->schemaFlags &= ~DB_SchemaLoaded;
    }
+   pSchema->schemaFlags &= ~(DB_SchemaLoaded|DB_ResetWanted);
  }
  
 +/*
 +** Global linked list of sharable Schema objects. Read and write access must
 +** be protected by the SQLITE_MUTEX_STATIC_MASTER mutex.
 +*/
 +static Schema *SQLITE_WSD sharedSchemaList = 0;
 +
 +/*
 +** Check that the schema of db iDb is writable (either because it is the temp
 +** db schema or because the db handle was opened without
 +** SQLITE_OPEN_REUSE_SCHEMA). If so, do nothing. Otherwise, leave an 
 +** error in the Parse object.
 +*/
 +void sqlite3SchemaWritable(Parse *pParse, int iDb){
 +  if( iDb!=1 && (pParse->db->openFlags & SQLITE_OPEN_REUSE_SCHEMA) ){
 +    sqlite3ErrorMsg(pParse, "attempt to modify read-only schema");
 +  }
 +}
 +
 +/*
 +** Replace the Schema object currently associated with database iDb with
 +** an empty schema object, ready to be populated. If there are multiple
 +** users of the Schema, this means decrementing the current objects ref
 +** count and replacing it with a pointer to a new, empty, object. Or, if
 +** the database handle passed as the first argument of the schema object 
 +** is the only user, remove it from the shared list (if applicable) and 
 +** clear it in place.
 +*/
 +void sqlite3SchemaUnuse(sqlite3 *db, int iDb){
 +  Db *pDb = &db->aDb[iDb];
 +  Schema *pSchema;
 +  assert( iDb!=1 );
 +  if( (pSchema = pDb->pSchema) ){
 +
 +    if( (db->openFlags & SQLITE_OPEN_REUSE_SCHEMA) ){
 +      sqlite3_mutex_enter( sqlite3_mutex_alloc(SQLITE_MUTEX_STATIC_MASTER) );
 +      assert( pSchema->nRef>=1 );
 +      if( pSchema->nRef==1 ){
 +        Schema **pp;
 +        for(pp=&sharedSchemaList; (*pp); pp=&(*pp)->pNext){
 +          if( *pp==pSchema ){
 +            *pp = pSchema->pNext;
 +            break;
 +          }
 +        }
 +        pSchema->pNext = 0;
 +      }else{
 +        assert( db->openFlags & SQLITE_OPEN_REUSE_SCHEMA );
 +        pSchema->nRef--;
 +        pDb->pSchema = pSchema = 0;
 +      }
 +      sqlite3_mutex_leave( sqlite3_mutex_alloc(SQLITE_MUTEX_STATIC_MASTER) );
 +    }
 +
 +    if( pSchema==0 ){
 +      db->aDb[iDb].pSchema = sqlite3SchemaGet(db, 0);
 +    }else{
 +      sqlite3SchemaClear(pSchema);
 +    }
 +  }
 +}
 +
 +/*
 +** The schema for database iDb of database handle db, which was opened
 +** with SQLITE_OPEN_REUSE_SCHEMA, has just been parsed. This function
 +** checks the global list (sharedSchemaList) for a matching schema and,
 +** if one is found, frees the newly parsed Schema object and adds a pointer 
 +** to the existing shared schema in its place. Or, if there is no matching
 +** schema in the list, then the new schema is added to it.
 +*/
 +void sqlite3SchemaReuse(sqlite3 *db, int iDb){
 +  Schema *pSchema = db->aDb[iDb].pSchema;
 +  Schema *p;
 +  assert( pSchema && iDb!=1 );
 +
 +  sqlite3_mutex_enter( sqlite3_mutex_alloc(SQLITE_MUTEX_STATIC_MASTER) );
 +  for(p=sharedSchemaList; p; p=p->pNext){
 +    if( p->cksum==pSchema->cksum 
 +        && p->schema_cookie==pSchema->schema_cookie 
 +      ){
 +      break;
 +    }
 +  }
 +  if( !p ){
 +    /* No matching schema was found. */
 +    pSchema->pNext = sharedSchemaList;
 +    sharedSchemaList = pSchema;
 +  }else{
 +    /* Found a matching schema. Increase its ref count. */
 +    p->nRef++;
 +  }
 +  sqlite3_mutex_leave( sqlite3_mutex_alloc(SQLITE_MUTEX_STATIC_MASTER) );
 +
 +  /* If a matching schema was found in the shared schema list, free the
 +  ** schema object just parsed, and add a pointer to the matching schema
 +  ** to the db handle.  */
 +  if( p ){
 +    sqlite3SchemaClear(pSchema);
 +    sqlite3DbFree(0, pSchema);
 +    db->aDb[iDb].pSchema = p;
 +  }
 +}
 +
  /*
  ** Find and return the schema associated with a BTree.  Create
  ** a new one if necessary.
diff --cc src/main.c
Simple merge
diff --cc src/prepare.c
index b0e1d0bce73db69ef4d36a578374e9ffef345b61,602e4dc49d727e4ce508a21dc51d748020d6b48f..f8f0623f706c7ee635a26e5a53dd6809d4bca9a8
@@@ -29,33 -38,12 +38,32 @@@ static void corruptSchema
      char *z;
      if( zObj==0 ) zObj = "?";
      z = sqlite3MPrintf(db, "malformed database schema (%s)", zObj);
-     if( zExtra ) z = sqlite3MPrintf(db, "%z - %s", z, zExtra);
-     sqlite3DbFree(db, *pData->pzErrMsg);
+     if( zExtra && zExtra[0] ) z = sqlite3MPrintf(db, "%z - %s", z, zExtra);
      *pData->pzErrMsg = z;
+     pData->rc = SQLITE_CORRUPT_BKPT;
    }
-   pData->rc = db->mallocFailed ? SQLITE_NOMEM_BKPT : SQLITE_CORRUPT_BKPT;
  }
  
 +/*
 +** Update the Schema.cksum checksum to account for the database object
 +** specified by the three arguments following the first.
 +*/
 +void schemaUpdateChecksum(
 +  Schema *pSchema,                /* Schema object being parsed */
 +  const char *zName,              /* Name of new database object */
 +  const char *zRoot,              /* Root page of new database object */
 +  const char *zSql                /* SQL used to create new database object */
 +){
 +  int i;
 +  u64 cksum = pSchema->cksum;
 +  if( zName ){
 +    for(i=0; zName[i]; i++) cksum += (cksum<<3) + zName[i];
 +  }
 +  if( zRoot ) for(i=0; zRoot[i]; i++) cksum += (cksum<<3) + zRoot[i];
 +  if( zSql ) for(i=0; zSql[i]; i++) cksum += (cksum<<3) + zSql[i];
 +  pSchema->cksum = cksum;
 +}
 +
  /*
  ** This is the callback routine for the code that initializes the
  ** database.  See sqlite3Init() below for additional information.
diff --cc src/sqlite.h.in
Simple merge
diff --cc src/sqliteInt.h
Simple merge
diff --cc src/tclsqlite.c
index dbed46a437bb6985af55b976e45df18b041639b0,3982ead7be90549b070bcf1e7d84c0764bab16f7..fb751e3912c9856656cecf3d7b6d7be34ac18e43
@@@ -3310,6 -3432,24 +3432,25 @@@ static int SQLITE_TCLAPI DbObjCmdAdapto
  }
  #endif /* SQLITE_TCL_NRE */
  
+ /*
+ ** Issue the usage message when the "sqlite3" command arguments are
+ ** incorrect.
+ */
+ static int sqliteCmdUsage(
+   Tcl_Interp *interp,
+   Tcl_Obj *const*objv
+ ){
+   Tcl_WrongNumArgs(interp, 1, objv,
+     "HANDLE ?FILENAME? ?-vfs VFSNAME? ?-readonly BOOLEAN? ?-create BOOLEAN?"
+     " ?-nomutex BOOLEAN? ?-fullmutex BOOLEAN? ?-uri BOOLEAN?"
++    " ?-reuse-schema BOOLEAN?"
+ #if defined(SQLITE_HAS_CODEC) && !defined(SQLITE_OMIT_CODEC_FROM_TCL)
+     " ?-key CODECKEY?"
+ #endif
+   );
+   return TCL_ERROR;
+ }
  /*
  **   sqlite3 DBNAME FILENAME ?-vfs VFSNAME? ?-key KEY? ?-readonly BOOLEAN?
  **                           ?-create BOOLEAN? ?-nomutex BOOLEAN?
@@@ -3428,14 -3577,6 +3578,14 @@@ static int SQLITE_TCLAPI DbMain
        }else{
          flags &= ~SQLITE_OPEN_URI;
        }
-       if( Tcl_GetBooleanFromObj(interp, objv[i+1], &b) ) return TCL_ERROR;
 +    }else if( strcmp(zArg, "-reuse-schema")==0 ){
 +      int b;
++      if( Tcl_GetBooleanFromObj(interp, objv[i], &b) ) return TCL_ERROR;
 +      if( b ){
 +        flags |= SQLITE_OPEN_REUSE_SCHEMA;
 +      }else{
 +        flags &= ~SQLITE_OPEN_REUSE_SCHEMA;
 +      }
      }else{
        Tcl_AppendResult(interp, "unknown option: ", zArg, (char*)0);
        return TCL_ERROR;
diff --cc src/trigger.c
Simple merge
diff --cc src/vacuum.c
Simple merge
diff --cc src/vdbe.h
index 889ca549a3d3243f0031634a24db47bbdd2e82cc,d42acc0cca2b44fd1fa3c6a1874c397d31f88860..b6b3204790ba97df326c388270796a812570b062
@@@ -196,8 -198,25 +198,25 @@@ void sqlite3VdbeEndCoroutine(Vdbe*,int)
  # define sqlite3VdbeVerifyNoMallocRequired(A,B)
  # define sqlite3VdbeVerifyNoResultRow(A)
  #endif
- VdbeOp *sqlite3VdbeAddOpList(Vdbe*, int nOp, VdbeOpList const *aOp, int iLineno);
+ #if defined(SQLITE_DEBUG)
+   void sqlite3VdbeVerifyAbortable(Vdbe *p, int);
+ #else
+ # define sqlite3VdbeVerifyAbortable(A,B)
+ #endif
+ VdbeOp *sqlite3VdbeAddOpList(Vdbe*, int nOp, VdbeOpList const *aOp,int iLineno);
+ #ifndef SQLITE_OMIT_EXPLAIN
+   void sqlite3VdbeExplain(Parse*,u8,const char*,...);
+   void sqlite3VdbeExplainPop(Parse*);
+   int sqlite3VdbeExplainParent(Parse*);
+ # define ExplainQueryPlan(P)        sqlite3VdbeExplain P
+ # define ExplainQueryPlanPop(P)     sqlite3VdbeExplainPop(P)
+ # define ExplainQueryPlanParent(P)  sqlite3VdbeExplainParent(P)
+ #else
+ # define ExplainQueryPlan(P)
+ # define ExplainQueryPlanPop(P)
+ # define ExplainQueryPlanParent(P) 0
+ #endif
 -void sqlite3VdbeAddParseSchemaOp(Vdbe*,int,char*);
 +void sqlite3VdbeAddParseSchemaOp(Parse*,int,char*);
  void sqlite3VdbeChangeOpcode(Vdbe*, u32 addr, u8);
  void sqlite3VdbeChangeP1(Vdbe*, u32 addr, int P1);
  void sqlite3VdbeChangeP2(Vdbe*, u32 addr, int P2);
diff --cc src/vdbeaux.c
Simple merge
diff --cc src/vtab.c
Simple merge
index c0d503140a58b4805d76d0b9876f5023335bcf87,36063bc46d03b5f1862fe13c319b58cb383693c8..0b31ef5fa603de51276fc78c07ffe41893ce9706
@@@ -22,7 -24,7 +24,7 @@@ source $testdir/tester.tc
  
  # Check the error messages generated by tclsqlite
  #
- set r "sqlite_orig HANDLE FILENAME ?-vfs VFSNAME? ?-readonly BOOLEAN? ?-create BOOLEAN? ?-nomutex BOOLEAN? ?-fullmutex BOOLEAN? ?-uri BOOLEAN? ?-reuse-schema BOOLEAN?"
 -set r "sqlite_orig HANDLE ?FILENAME? ?-vfs VFSNAME? ?-readonly BOOLEAN? ?-create BOOLEAN? ?-nomutex BOOLEAN? ?-fullmutex BOOLEAN? ?-uri BOOLEAN?"
++set r "sqlite_orig HANDLE ?FILENAME? ?-vfs VFSNAME? ?-readonly BOOLEAN? ?-create BOOLEAN? ?-nomutex BOOLEAN? ?-fullmutex BOOLEAN? ?-uri BOOLEAN? ?-reuse-schema BOOLEAN?"
  if {[sqlite3 -has-codec]} {
    append r " ?-key CODECKEY?"
  }