From: drh <> Date: Fri, 21 May 2021 16:32:15 +0000 (+0000) Subject: Merge the latest trunk changes into begin-concurrent-report branch via the X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=6be80c706214b349e3edffef187c923b36857097;p=thirdparty%2Fsqlite.git Merge the latest trunk changes into begin-concurrent-report branch via the begin-concurrent-pnu branch. FossilOrigin-Name: 1dc6cf51138bd16c1e291f3ddb0fa00fd35fbb087de54e0b4c4afd5dd52da62c --- 6be80c706214b349e3edffef187c923b36857097 diff --cc manifest index ba0c84883f,1f46325671..cd0f9c16f2 --- a/manifest +++ b/manifest @@@ -1,5 -1,5 +1,5 @@@ - C Merge\slatest\schanges\sinto\sthis\sbranch. - D 2021-04-07T17:46:32.744 -C Merge\srecent\strunk\schanges\sinto\sthe\sbegin-concurrent-pnu\sbranch. -D 2021-05-21T16:17:42.430 ++C Merge\sthe\slatest\strunk\schanges\sinto\sbegin-concurrent-report\sbranch\svia\sthe\nbegin-concurrent-pnu\sbranch. ++D 2021-05-21T16:32:15.249 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724 @@@ -482,20 -482,20 +483,20 @@@ F spec.template 86a4a43b99ebb3e75e6b9a7 F sqlite.pc.in 42b7bf0d02e08b9e77734a47798d1a55a9e0716b F sqlite3.1 fc7ad8990fc8409983309bb80de8c811a7506786 F sqlite3.pc.in 48fed132e7cb71ab676105d2a4dc77127d8c1f3a - F src/alter.c 14d5d9ba332de515c6e2f729e728426cdd6f5683cdc356ba6b6e3444e1ed210e + F src/alter.c df53c39fd4f32528fc7ad8188b3bf2b506e1a8b3bb975b14f16a1bc6e901950f F src/analyze.c 01c6c6765cb4d40b473b71d85535093730770bb186f2f473abac25f07fcdee5c - F src/attach.c 9cbe761e464025694df8e6f6ee4d9f41432c3a255ca9443ccbb4130eeb87cf72 + F src/attach.c a514e81758ba7b3a3a0501faf70af6cfc509de8810235db726cfc9f25165e929 F src/auth.c 08954fdc4cc2da5264ba5b75cfd90b67a6fc7d1710a02ccf917c38eadec77853 -F src/backup.c 3014889fa06e20e6adfa0d07b60097eec1f6e5b06671625f476a714d2356513d -F src/bitvec.c 8433d9e98dd6f2ea3286e0d2fe5d65de1bfc18a706486eb2026b01be066b5806 +F src/backup.c 0d3f5004d5c85f257add00aee97687d40790a471a5d56306043ed9a7b53d6994 +F src/bitvec.c a012cfe503cddd1df1a75c139baf4586acc32f25c66f79039caf1d06474434f2 F src/btmutex.c 8acc2f464ee76324bf13310df5692a262b801808984c1b79defb2503bbafadb6 - F src/btree.c 7fad474c16bfe7eabf35139c1285a8b54784cadda1f7c5b964f83a68c052c7ae -F src/btree.c c48a67a825d4b9df9c86d5f44ad9cca92c7059dc84a3e00db7b519e160449f5e -F src/btree.h ccdc64bd1eee7ba79d4c0b2af22b6df1e5ededdbf9606f45f4fca4738dd6fa0b -F src/btreeInt.h 1e9f10107a4ec5d2940ae5b859242ae83b81402986724bed08b8491a5ea64a4d ++F src/btree.c 2796e765c14282a0f73ad5a050f9fa69c067cf0ac1d77950e10ca1fd26ef80ea +F src/btree.h 888d9cea384478728e1e475e1660bd4138e3ec635f1b430e3f57e88d9c81d2fe +F src/btreeInt.h b8c4dee39e4cbe127a6cf479f32e345e186db63923e937b5f42807c76bfd8e9d - F src/build.c f197c3433d4c69d23dfb6861e52ccb1e28a37bb4cc57c45cbd9563c2e5f33f16 + F src/build.c 3a6da77c49a36ad578e9d534597e649256a5bd5c12676a17d837cfc1a381948a F src/callback.c d0b853dd413255d2e337b34545e54d888ea02f20da5ad0e63585b389624c4a6c F src/complete.c a3634ab1e687055cd002e11b8f43eb75c17da23e - F src/ctime.c 2a322b9a3d75771fb4d99e0702851f4f68dda982507a0f798eefb0712969a410 + F src/ctime.c 3052b6b05ed9ef547a3dd66b8e01bfa9d582e78752ad6ed327da84652641e038 F src/date.c e0632f335952b32401482d099321bbf12716b29d6e72836b53ae49683ebae4bf F src/dbpage.c 8a01e865bf8bc6d7b1844b4314443a6436c07c3efe1d488ed89e81719047833a F src/dbstat.c 3aa79fc3aed7ce906e4ea6c10e85d657299e304f6049861fe300053ac57de36c @@@ -509,10 -509,10 +510,10 @@@ F src/hash.c 8d7dda241d0ebdafb6ffdeda31 F src/hash.h 9d56a9079d523b648774c1784b74b89bd93fac7b365210157482e4319a468f38 F src/hwtime.h cb1d7e3e1ed94b7aa6fde95ae2c2daccc3df826be26fc9ed7fd90d1750ae6144 F src/in-operator.md 10cd8f4bcd225a32518407c2fb2484089112fd71 - F src/insert.c 129f686e23a940a061b85c2dbc60c6c04699bcba1a47f2ac77a98aed2730ad5b -F src/insert.c 2189e0e596010a0dc5405d9f14f78db1ee2fa71138c931f5b6ea96610b95bfc1 ++F src/insert.c 7c7ef7b00c58443b5a3832eb4a963377fa9216682d992d5bc96310fb00625496 F src/legacy.c d7874bc885906868cd51e6c2156698f2754f02d9eee1bae2d687323c3ca8e5aa F src/loadext.c 8c9c8cd2bd8eecdb06d9b6e89de7e9e65bae45cc8fc33609cc74023a5c296067 - F src/main.c 985fba2ca304a27886d37ae2482d42f5ead58d9f296835f59f0902af9973d6c5 -F src/main.c 28f45be66f575edf05465a2bc91ec50ebff6bb49099ef884f4dd506d83fd7769 ++F src/main.c 11ef55f5f32ac56319f86d758466bf9451500f457cf10802b26de400757371f1 F src/malloc.c c1af4ac5a463648cd2953fd4ac679b3ba9022ce5ec794a60806150ad69dfd33a F src/mem0.c 6a55ebe57c46ca1a7d98da93aaa07f99f1059645 F src/mem1.c c12a42539b1ba105e3707d0e628ad70e611040d8f5e38cf942cee30c867083de @@@ -532,34 -532,34 +533,34 @@@ F src/os.c 6e94cd64b134c9317e52ad534117 F src/os.h 48388821692e87da174ea198bf96b1b2d9d83be5dfc908f673ee21fafbe0d432 F src/os_common.h b2f4707a603e36811d9b1a13278bffd757857b85 F src/os_setup.h 0dbaea40a7d36bf311613d31342e0b99e2536586 - F src/os_unix.c 9ee493ab91a3b20f5671ff3b4447ddbb64ae653b013258f676d75f6f658414eb + F src/os_unix.c ff4738e222bbbc2ecc396398c8ba1ae757bee03b782a8dd8bc8a5d39128e52d1 F src/os_win.c 77d39873836f1831a9b0b91894fec45ab0e9ca8e067dc8c549e1d1eca1566fe9 F src/os_win.h 7b073010f1451abe501be30d12f6bc599824944a - F src/pager.c a7ea62b293a84853f9bbfbf0a35a7472263d3af22f427c19fbef0e6087b93741 -F src/pager.c 12b7e6f061247cc7e24d81dddd0161ba9e317ef3c3b93f0a299873746a07d989 -F src/pager.h fdc30693c403aa9b4293d0b126346db7e450f8f0e5d2c1bb8355acb1cb8da6fd ++F src/pager.c 8302eb7aab26c8f0120c714d5f0505ba41140790b76fc62ff8163ca00b7122d7 +F src/pager.h ed1f7bc91ceae75fa918d51f7c2ad071a5458cc3dc0085ca7577f8d51bf2d7cb - F src/parse.y 3a7f2156485e377a637b4217b797001cf2ed9228e501f8d34fd06a9f46a40a73 + F src/parse.y 68f3bdc6ab07f5660944cde812318eab6007416fd1ea008422a96f1675c75ff2 F src/pcache.c 385ff064bca69789d199a98e2169445dc16e4291fa807babd61d4890c3b34177 F src/pcache.h 4f87acd914cef5016fae3030343540d75f5b85a1877eed1a2a19b9f284248586 F src/pcache1.c 388304fd2d91c39591080b5e0f3c62cfba87db20370e7e0554062bfb29740e9f F src/pragma.c eb42cb9bec189cf18cef5d8fcae56e13bb73ef2b019b198fb48740ced81bce95 F src/pragma.h b93fd693bd38cefeaf8e2c7e8c929717f7799a9770104cdd2bae8df2a84e2da7 - F src/prepare.c 7a0fc6866748541af55e59f950f3461aa419f137d6e6a16c6246c115b9198287 + F src/prepare.c d778af9986f3b0107c5b255dcfe2696e8e99e00fb77c5115bbfea4e92c3302e7 F src/printf.c 78fabb49b9ac9a12dd1c89d744abdc9b67fd3205e62967e158f78b965a29ec4b F src/random.c f27af4099afaea7284ade5c206224dcfdb2334cfd119d018b470d46356b3f27d - F src/resolve.c fc136d935f19966747663bed605ad7f06f84f9fe7bf7bf79e9bf844ef5c7556d + F src/resolve.c 40e216d9a72e52841a9c8e0aec7d367bade8e2df17b804653b539b20c1ab5660 F src/rowset.c ba9515a922af32abe1f7d39406b9d35730ed65efab9443dc5702693b60854c92 - F src/select.c a270ad51cdc21aa3c5a9fae50db3c7edc01945d048dc2de28f2880a8f07e6d52 - F src/shell.c.in 9320b476fde0f7c46700e5695b69b435f1e46843a1513cdd187ac426cdbee016 - F src/sqlite.h.in cd68c86bf2c2bca6406085564268ec77e0e8acad3e447ce5d887ef211429d323 + F src/select.c 52ed98f39e1629ccf568b372f29b376ca6007158a46cdd956dbdcf8cab05fc89 + F src/shell.c.in 1b32ba2918ede13b68df47c7b92b72ba0d06e68d384e78bb9d7456527271d400 -F src/sqlite.h.in a5d8462d3c5a45240a258e6ed401b6fc14b7f4d2e00e94b864c31fc019151ce1 ++F src/sqlite.h.in 3cb1a5e743b9dedd528af37562a55e34f56bd46c332fca91959e6abced32e0b0 F src/sqlite3.rc 5121c9e10c3964d5755191c80dd1180c122fc3a8 F src/sqlite3ext.h 61b38c073d5e1e96a3d45271b257aef27d0d13da2bea5347692ae579475cd95e - F src/sqliteInt.h 043c8af8fac4566a9c55f45d7c8680c9813626b29abf5c8967ebc50bf702310a -F src/sqliteInt.h 8b2ad8ea70a7c4a836cc5d27f990bfe3b1fd47f0b58c720ec661f58dd1ba115c ++F src/sqliteInt.h 81408a969ee8d6efac8d24bcb32f61fcabfdd246b03938184fc573ed0ca6873f F src/sqliteLimit.h d7323ffea5208c6af2734574bae933ca8ed2ab728083caa117c9738581a31657 F src/status.c 4b8bc2a6905163a38b739854a35b826c737333fab5b1f8e03fa7eb9a4799c4c1 F src/table.c 0f141b58a16de7e2fbe81c308379e7279f4c6b50eb08efeec5892794a0ba30d1 - F src/tclsqlite.c 986b6391f02cd9b53c1d688be55899f6ffddeb8e8014cd83c1b73ff912579a71 + F src/tclsqlite.c 97645e4a15dde6a6ad6de8d81057ff9869413b866015a89e208fedacd709493e -F src/test1.c bb6fe83c5a0e255930c14cc6f0b29414410661839fcdd95015abed823df636b4 -F src/test2.c 3efb99ab7f1fc8d154933e02ae1378bac9637da5 +F src/test1.c 460024efcc596adf9a4a860de53806a2ac013532af846e6f978d7c434af27d69 +F src/test2.c cb988be1ee1b972dc471e6b076087cfa9cb9ce5c2aa31e98ecf41c3256a72a53 F src/test3.c 61798bb0d38b915067a8c8e03f5a534b431181f802659a6616f9b4ff7d872644 F src/test4.c 7c4420e01c577b5c4add2cb03119743b1a357543d347773b9e717195ea967159 F src/test5.c 328aae2c010c57a9829d255dc099d6899311672d @@@ -620,26 -620,26 +621,26 @@@ F src/upsert.c df8f1727d62b5987c4fd302c F src/utf.c ee39565f0843775cc2c81135751ddd93eceb91a673ea2c57f61c76f288b041a0 F src/util.c 41c7a72da1df47864faa378a1c720b38adb288c6838cb6be5594511b6287a048 F src/vacuum.c 9d6ac090ff36d80f0a2c5bfc63994b714c464bfc44efa5056c457a6a4163dc99 - F src/vdbe.c 2a0a30c6e595624924e578bbe6579a7f3b3fd548cb3ab17b8c92f24611a1b025 -F src/vdbe.c 897ee680a162cb407457fcf3b4220d38e115de02612254602fdc8ecc881cc1e8 ++F src/vdbe.c 409213701d5001e854c2c22f5c12295fc94ffe40e105a7ce464f4cd1a06eade4 F src/vdbe.h 25dabb25c7e157b84e59260cfb5b466c3ac103ede9f36f4db371332c47601abe - F src/vdbeInt.h 5762107e9092be62790460ead0972c6e77146b8c5a63dd2bd41718c3ae9f499d - F src/vdbeapi.c d8f8c94303d8455f4152aa9bbff2217feb06486df94694313421cf3c8bd0378c - F src/vdbeaux.c 816663d5ab438d5bf373aaab876de8bb5c05ba08d4dd7cf74c3fd6937c796b07 - F src/vdbeblob.c 253ed82894924c362a7fa3079551d3554cd1cdace39aa833da77d3bc67e7c1b1 - F src/vdbemem.c 947f2a65910edb4014dc981d33e414a68c51f169f9df8c4c493a0ba840b6eb1f -F src/vdbeInt.h 58980223a32495ad059d10581b83e133abdc77248b1bab85c080cab8a13bd819 -F src/vdbeapi.c d9e99daf59fec928986838b3389a7337e82fec6b3b5de30206cb99fb4661b94e ++F src/vdbeInt.h ffdda10e25c4da582a7e1cb1af37d4be9d9dd181c55ea95c61cc8bdc3c250647 ++F src/vdbeapi.c 3f32ddfcdd548a98ccf11647fd2d95b790cfb34cbd20450297e387cd4de3749d + F src/vdbeaux.c 708f3479a4b1f895f654e29b4fa597ee4c2927ecde3a27ed07dda964a3a12b3a + F src/vdbeblob.c c6b8db50b227f66fb404215732068df76485b5b433e5f9d4d9ac27410b218193 + F src/vdbemem.c 175c73ced03edbb0f6567a41c8032afaeb83372090fa7bddfc88a67e28da2b8a F src/vdbesort.c f5b5e473a7cee44e47a94817b042fd7172cf3aa2c0a7928a8339d612bcfdec5a F src/vdbetrace.c 666c6fd9f1b62be6999e072a45b913e3c2c3518bc60dfd4d54fe304130acb724 F src/vdbevtab.c f99b275366c5fc5e2d99f734729880994ab9500bdafde7fae3b02d562b9d323c - F src/vtab.c 032a0165c147fda16927e6a3230e90c068d4af93f887ce94e26f678fe48e5e4c + F src/vtab.c b928405ccb66040fc6c3a11eaa93ddb02cbf20f9ab6860b301b222b9b50dc089 F src/vxworks.h d2988f4e5a61a4dfe82c6524dd3d6e4f2ce3cdb9 - F src/wal.c c9dfe3054c82aaa8d1dea91b56afa9397b54e55d5fb1dcbac32a4a7f6231bdc9 + F src/wal.c 59ad6d70c32f6e52d9695b081a429b5c2ed76b116bee5dcfed88d3e78148164a F src/wal.h 7ffe787437f20a098af347011967a6d3bb8e5c3dc645e6be59eff44d2b2c5297 - F src/walker.c d42d6c80ea363ef689a462e65eefcfe87deab924c50de5baa37ecb6af7d7ddaa - F src/where.c a41a5713482208a67524f596110cfb3a403cff2c29b8b2cb53d32647cad83f73 - F src/whereInt.h 446e5e8018f83358ef917cf32d8e6a86dc8430113d0b17e720f1839d3faa44c4 - F src/wherecode.c dbc9ff7386512869d574cf1617763be9f0ea298626805ba68e0423fd0fbb11af - F src/whereexpr.c 4ba94b8ebbff97c658b212de6ccdb6d3a41847800bdf99e7a2a967c250269f2c - F src/window.c ae9fbd0cbaa39e1b384c13289ed769f9981383bde7b2f262c70ad6c42e5ab226 + F src/walker.c 7342becedf3f8a26f9817f08436bdf8b56ad69af83705f6b9320a0ad3092c2ac + F src/where.c 32f41c3c93c6785e0077e3a2cdc669c3ccfe70173787847be77f294c18fc7dc3 + F src/whereInt.h 9248161dd004f625ce5d3841ca9b99fed3fc8d61522cf76340fc5217dbe1375b -F src/wherecode.c 110ed13049e0f1dc27e9dd942eb870417b36480cb7819302f5804cbcf9330b0e ++F src/wherecode.c d4dded15e9b105dc6d6ade682e89463f2637d45135139058aadfaa9436de6fde + F src/whereexpr.c 5a9c9f5d2dac4bcdcaae3035034b4667523f731df228e0bb1d4efc669efa9da5 + F src/window.c ce5e73ab88a8527d268673906bf89cbe58c61bca8d54d38ed8c33c3220a276ee F test/8_3_names.test ebbb5cd36741350040fd28b432ceadf495be25b2 F test/affinity2.test ce1aafc86e110685b324e9a763eab4f2a73f737842ec3b687bd965867de90627 F test/affinity3.test eecb0dabee4b7765a8465439d5e99429279ffba23ca74a7eae270a452799f9e7 @@@ -1930,7 -1930,7 +1932,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 a22162593366c2d3be7eca2c64516cc2f2fffe876989dce47ef0966f306e32da 1f3f7e4bf3f16eeb68261c06b14201e445a8544d54505cef57a24d7ab0e93191 - R 8d8ba4844dafbc9c07a435785bda2db8 - U dan - Z 0703168fc0fe46b3fc0b7f1bbcf979ab -P 1f3f7e4bf3f16eeb68261c06b14201e445a8544d54505cef57a24d7ab0e93191 240f7494bfa3e0806ae2f971e78039c62a419de647cb9e807309f90e1d2a536d -R f0d4d8a64eedd347c1d59d5f1673d038 ++P 655c28412fcbd3d39c8b4f1167229f28bc01a22b08c172fadddef0a4247d501f a8d05f8e92b13bb5c150c1e3e7cf861d15bc7d50149ebb83646a2376cbfbd52b ++R cfd252e42cd99e4e94680145c5f75dc6 + U drh -Z 332e39eb47fddaa60ceb507ece121f2a ++Z 1ea5827baf41d9bb6a5061b0098597da diff --cc manifest.uuid index 5b9065886f,6fd1b26a03..42e455ab7a --- a/manifest.uuid +++ b/manifest.uuid @@@ -1,1 -1,1 +1,1 @@@ - 655c28412fcbd3d39c8b4f1167229f28bc01a22b08c172fadddef0a4247d501f -a8d05f8e92b13bb5c150c1e3e7cf861d15bc7d50149ebb83646a2376cbfbd52b ++1dc6cf51138bd16c1e291f3ddb0fa00fd35fbb087de54e0b4c4afd5dd52da62c diff --cc src/insert.c index ba14b96d2a,1ed0b43156..616dd20b7c --- a/src/insert.c +++ b/src/insert.c @@@ -2441,7 -2442,7 +2443,7 @@@ static void codeWithoutRowidPreupdate sqlite3ReleaseTempReg(pParse, r); } #else --# define codeWithoutRowidPreupdate(a,b,c,d) ++# define codeWithoutRowidPreupdate(a,b,c,d,e) #endif /* diff --cc src/vdbe.c index 8df7844bc2,e0d7dca7e8..544a4764fe --- a/src/vdbe.c +++ b/src/vdbe.c @@@ -2018,6 -2044,31 +2044,36 @@@ case OP_Ge: { /* same as TK pIn3 = &aMem[pOp->p3]; flags1 = pIn1->flags; flags3 = pIn3->flags; + if( (flags1 & flags3 & MEM_Int)!=0 ){ + assert( (pOp->p5 & SQLITE_AFF_MASK)!=SQLITE_AFF_TEXT || CORRUPT_DB ); + /* Common case of comparison of two integers */ ++ if( pOp->p4type==P4_INT32 ){ ++ sqlite3BtreeScanLimit( ++ p->apCsr[pOp->p4.i]->uc.pCursor, 0, pIn1->u.i, pOp->opcode ++ ); ++ } + if( pIn3->u.i > pIn1->u.i ){ + iCompare = +1; + if( sqlite3aGTb[pOp->opcode] ){ + VdbeBranchTaken(1, (pOp->p5 & SQLITE_NULLEQ)?2:3); + goto jump_to_p2; + } + }else if( pIn3->u.i < pIn1->u.i ){ + iCompare = -1; + if( sqlite3aLTb[pOp->opcode] ){ + VdbeBranchTaken(1, (pOp->p5 & SQLITE_NULLEQ)?2:3); + goto jump_to_p2; + } + }else{ + iCompare = 0; + if( sqlite3aEQb[pOp->opcode] ){ + VdbeBranchTaken(1, (pOp->p5 & SQLITE_NULLEQ)?2:3); + goto jump_to_p2; + } + } + VdbeBranchTaken(0, (pOp->p5 & SQLITE_NULLEQ)?2:3); + break; + } if( (flags1 | flags3)&MEM_Null ){ /* One or both operands are NULL */ if( pOp->p5 & SQLITE_NULLEQ ){ @@@ -2093,10 -2132,10 +2137,10 @@@ flags3 = (pIn3->flags & ~MEM_TypeMask) | (flags3 & MEM_TypeMask); } } - assert( pOp->p4type==P4_COLLSEQ || pOp->p4.pColl==0 ); - res = sqlite3MemCompare(pIn3, pIn1, pOp->p4.pColl); + /* assert( pOp->p4type==P4_COLLSEQ || pOp->p4.pColl==0 ); */ + res = sqlite3MemCompare(pIn3,pIn1,pOp->p4type==P4_COLLSEQ?pOp->p4.pColl:0); } - compare_op: + /* At this point, res is negative, zero, or positive if reg[P1] is ** less than, equal to, or greater than reg[P3], respectively. Compute ** the answer to this operator in res2, depending on what the comparison @@@ -5124,13 -5171,8 +5183,11 @@@ case OP_Insert: #ifdef SQLITE_ENABLE_PREUPDATE_HOOK /* Invoke the pre-update hook, if any */ if( pTab ){ + sqlite3BtreeScanWrite( + pC->uc.pCursor, SQLITE_INSERT, pC->movetoTarget, (u8*)pData->z, pData->n + ); - if( !(pOp->p5 & OPFLAG_ISUPDATE) && db->xPreUpdateCallback ){ - if( db->xPreUpdateCallback ){ - sqlite3VdbePreUpdateHook(p, pC, SQLITE_INSERT,zDb,pTab,x.nKey,pOp->p2); - } + if( db->xPreUpdateCallback && !(pOp->p5 & OPFLAG_ISUPDATE) ){ + sqlite3VdbePreUpdateHook(p,pC,SQLITE_INSERT,zDb,pTab,x.nKey,pOp->p2,-1); } if( db->xUpdateCallback==0 || pTab->aCol==0 ){ /* Prevent post-update hook from running in cases when it should not */ @@@ -5282,20 -5324,16 +5339,20 @@@ case OP_Delete: #ifdef SQLITE_ENABLE_PREUPDATE_HOOK /* Invoke the pre-update-hook if required. */ - if( db->xPreUpdateCallback && pOp->p4.pTab ){ - assert( !(opflags & OPFLAG_ISUPDATE) - || HasRowid(pTab)==0 - || (aMem[pOp->p3].flags & MEM_Int) - ); - sqlite3VdbePreUpdateHook(p, pC, - (opflags & OPFLAG_ISUPDATE) ? SQLITE_UPDATE : SQLITE_DELETE, - zDb, pTab, pC->movetoTarget, - pOp->p3, -1 - ); + if( pOp->p4.pTab ){ + rc = sqlite3BtreeScanWrite(pC->uc.pCursor, 0, pC->movetoTarget, 0, 0); + if( rc ) goto abort_due_to_error; + if( db->xPreUpdateCallback ){ + assert( !(opflags & OPFLAG_ISUPDATE) + || HasRowid(pTab)==0 + || (aMem[pOp->p3].flags & MEM_Int) + ); + sqlite3VdbePreUpdateHook(p, pC, + (opflags & OPFLAG_ISUPDATE) ? SQLITE_UPDATE : SQLITE_DELETE, + zDb, pTab, pC->movetoTarget, - pOp->p3 ++ pOp->p3, -1 + ); + } } if( opflags & OPFLAG_ISNOOP ) break; #endif