From: drh Date: Wed, 20 Jan 2016 11:33:37 +0000 (+0000) Subject: Merge recent enhancements from trunk. X-Git-Tag: version-3.13.0~148^2~18 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=20f272c96f2b67c3a3fa6784dcf14a2d5439791e;p=thirdparty%2Fsqlite.git Merge recent enhancements from trunk. FossilOrigin-Name: 327af5f644a49b2f41d5456958f9d61a2b704e1c --- 20f272c96f2b67c3a3fa6784dcf14a2d5439791e diff --cc manifest index c13c8d974c,1c1653b60a..1d86286d5b --- a/manifest +++ b/manifest @@@ -1,8 -1,8 +1,8 @@@ - C Merge\sthe\slatest\sfixes\sand\senhancements\sfrom\strunk. - D 2016-01-14T14:48:17.709 - F Makefile.in c61147c9afcc7a058a3a88876a5b9344fce55353 -C Improve\sperformance\sof\ssqlite3VtabImportErrmsg(). -D 2016-01-20T08:47:55.546 -F Makefile.in a476545d0c8626224d0bacac85c6e2967474af81 ++C Merge\srecent\senhancements\sfrom\strunk. ++D 2016-01-20T11:33:37.587 ++F Makefile.in a47ec69daac0cdfe3413e50ceea6dc8da3dc4ecb F Makefile.linux-gcc 7bc79876b875010e8c8f9502eb935ca92aa3c434 - F Makefile.msc d35026ada75f21433cd34be90dc3865972cea6df -F Makefile.msc 01e855f958932d0d3ed62ec675fc63e2cef61fcb ++F Makefile.msc b4d0270955b3f102214b2242f2a1b802c22ee21b F README.md 8ecc12493ff9f820cdea6520a9016001cb2e59b7 F VERSION 866588d1edf0ccb5b0d33896974338f97564f719 F aclocal.m4 a5c22d164aff7ed549d53a90fa56d56955281f50 @@@ -282,7 -269,7 +289,7 @@@ F ext/userauth/userauth.c 5fa3bdb492f48 F install-sh 9d4de14ab9fb0facae2f48780b874848cbf2f895 x F ltmain.sh 3ff0879076df340d2e23ae905484d8c15d5fdea8 F magic.txt 8273bf49ba3b0c8559cb2774495390c31fd61c60 - F main.mk 727b093cca39460048ae9948b283063857b04402 -F main.mk 8670f56454bdc59d5e33397bf8c7e43eb33af50c ++F main.mk ad2c0fe02599cf4d58d13776ee57be1e53883909 F mkso.sh fd21c06b063bb16a5d25deea1752c2da6ac3ed83 F mptest/config01.test 3c6adcbc50b991866855f1977ff172eb6d901271 F mptest/config02.test 4415dfe36c48785f751e16e32c20b077c28ae504 @@@ -301,17 -288,17 +308,17 @@@ F src/auth.c b56c78ebe40a2110fd361379f7 F src/backup.c 2869a76c03eb393ee795416e2387005553df72bc F src/bitvec.c 1a78d450a17c5016710eec900bedfc5729bf9bdf F src/btmutex.c bc87dd3b062cc26edfe79918de2200ccb8d41e73 - F src/btree.c 5d93e2477acb99d50a8b045f2e26a0be3d7751fe + F src/btree.c f224ae877fde69d1a9d430f502edaf8502752dbe F src/btree.h 68ef301795e00cdf1d3ab93abc44a43b7fe771e0 F src/btreeInt.h c18b7d2a3494695133e4e60ee36061d37f45d9a5 - F src/build.c 9d497ff4bf3c82cecb520436e0e9963785627583 - F src/callback.c 7b44ce59674338ad48b0e84e7b72f935ea4f68b0 + F src/build.c 31af80bba31ac159967951ef58f3144cc7db9d70 + F src/callback.c 29ae4faba226c7ebb9aee93016b5ce8a8f071261 F src/complete.c addcd8160b081131005d5bc2d34adf20c1c5c92f F src/ctime.c 60e135af364d777a9ab41c97e5e89cd224da6198 - F src/date.c e4655393bb403fa310eef66cc4583d75d4d7fd93 + F src/date.c 997651e3ee6c2818fbf7fcdb7156cef9eb3ece20 F src/dbstat.c ffd63fc8ba7541476ced189b95e95d7f2bc63f78 -F src/delete.c 00af9f08a15ddc5cba5962d3d3e5bf2d67b2e7da +F src/delete.c 86e3940d07fe69a40270c2aaf6ca6c7adf19246c - F src/expr.c fe55c489362d1429c364e98c877514f4455f45a6 + F src/expr.c df0d7c3230d59abd679da22ff5ce4cfd0e3a0e63 F src/fault.c 160a0c015b6c2629d3899ed2daf63d75754a32bb F src/fkey.c e18b3dff7d47c7bcac5ac4fc178a89b9fd322b44 F src/func.c ccaf46fa98f795673afbfab73dff7c18db88f3cd @@@ -319,12 -306,12 +326,12 @@@ F src/global.c bd5a0af3f30b0c01be6db756 F src/hash.c 4263fbc955f26c2e8cdc0cf214bc42435aa4e4f5 F src/hash.h c8f3c31722cf3277d03713909761e152a5b81094 F src/hwtime.h d32741c8f4df852c7d959236615444e2b1063b08 - F src/insert.c a2302c96652242b2d871445c9975a7a849316dcf -F src/insert.c a00e6d8a843dc22e2c136df04e6300c4528d9b9f ++F src/insert.c 0be969e32a28107a4a7008ea4fe7cb15ff47b0ef F src/journal.c b4124532212b6952f42eb2c12fa3c25701d8ba8d F src/legacy.c ba1863ea58c4c840335a84ec276fc2b25e22bc4e F src/loadext.c 84996d7d70a605597d79c1f1d7b2012a5fd34f2b - F src/main.c a88a45514be79e5f48b5cf4a147956f267425fa7 - F src/malloc.c 8f787669e79de26efc42272b5797bc00fff527c6 -F src/main.c b686dabe9a7ece9121da87120d5c7bf402d77eb3 ++F src/main.c c7d4a1858446db5f611891ddce62572b1fdec040 + F src/malloc.c b67c26c359c13836d370350b3f43d228dff5b360 F src/mem0.c 6a55ebe57c46ca1a7d98da93aaa07f99f1059645 F src/mem1.c 6919bcf12f221868ea066eec27e579fed95ce98b F src/mem2.c f1940d9e91948dd6a908fbb9ce3835c36b5d83c3 @@@ -351,19 -338,19 +358,19 @@@ F src/parse.y caad1e98edeca6960493d0c60 F src/pcache.c 73895411fa6b7bd6f0091212feabbe833b358d23 F src/pcache.h 4d0ccaad264d360981ec5e6a2b596d6e85242545 F src/pcache1.c 72f644dc9e1468c72922eff5904048427b817051 - F src/pragma.c f3e7147299ca05ef4304a36f1fd6e002729c72c6 + F src/pragma.c ea290193369faa0a26ae2f924e7b86289b4a7987 F src/pragma.h 64c78a648751b9f4f297276c4eb7507b14b4628c - F src/prepare.c 82e5db1013846a819f198336fed72c44c974e7b1 + F src/prepare.c 74855ddbdfad6a1c4a4d5c4b0913ebb01174ba19 F src/printf.c af589a27b7d40f6f4f704e9eea99f02f18ad6d32 F src/random.c ba2679f80ec82c4190062d756f22d0c358180696 - F src/resolve.c a83b41104e6ff69855d03cd0aaa09e93927ec39f + F src/resolve.c 9f7ce3a3c087afb7597b7c916c99126ff3f12f0c F src/rowset.c eccf6af6d620aaa4579bd3b72c1b6395d9e9fa1e - F src/select.c 5b0f2aa9f73ec7b65d1711d485471854d5bad23c + F src/select.c 718954db86277d696c520fe671148db1e9c4ed3c -F src/shell.c dcd7a83645ef2a58ee9c6d0ea4714d877d7835c4 -F src/sqlite.h.in 214476a62012e578f42133a9a3b4f97a9aa421a3 +F src/shell.c 01e109c27300379b1c35b254cd294cde635f0179 +F src/sqlite.h.in bb645ccc4090a6e95e7b5d92818f46e41033d076 F src/sqlite3.rc 992c9f5fb8285ae285d6be28240a7e8d3a7f2bad F src/sqlite3ext.h dfbe62ffd95b99afe2140d8c35b180d11924072d - F src/sqliteInt.h 09f70fe715a74ea0048ae05526f2a1b6e3a3b6a2 -F src/sqliteInt.h 8c1debffeeb1579bdc264d54c72c05892e23b7ee ++F src/sqliteInt.h cf3ca8ec73daef3b744d41663e124c2275fb6f26 F src/sqliteLimit.h 216557999cb45f2e3578ed53ebefe228d779cb46 F src/status.c 70912d7be68e9e2dbc4010c93d344af61d4c59ba F src/table.c 51b46b2a62d1b3a959633d593b89bab5e2c9155e @@@ -418,21 -405,21 +425,21 @@@ F src/test_wsd.c 41cadfd9d97fe8e3e4e44f F src/threads.c bbfb74450643cb5372a43ad4f6cffd7e9dfcecb0 F src/tokenize.c 5606871a377f390af7040ec3c12e0d183512d785 F src/treeview.c 78842e90c1f71269e7a73a1d4221b6fe360bab66 - F src/trigger.c de3ed31ad3218a20d7d7e18bf1b3b734e78bda66 + F src/trigger.c 056e51182a3677434423e3be0c74e61b90b4a663 -F src/update.c 17332f9fe818cbc0444c36a811800af8498af4c3 +F src/update.c d8d675aa299336ac086ad2039d7e812cd6237db0 F src/utf.c 32d7f82aa921322f3e1c956f4b58f019ebd2c6b3 F src/util.c e802e8e311a0d6c48cd1b3e89db164f6f0248d70 F src/vacuum.c 2ddd5cad2a7b9cef7f9e431b8c7771634c6b1701 - F src/vdbe.c 9b4da74dbc1554045c69dacbbceb373272d2e0be - F src/vdbe.h bfe3f80dba435377cdb64fd917f2529f0f48ab77 -F src/vdbe.c b90d9d38e5e0260c2eafa3cb4c2274d8ea94da27 -F src/vdbe.h 7a733ea8aac1b77305a67698e784fa3484ee3337 -F src/vdbeInt.h 42eefa4f9e7432b9968d321b44e48821ec13b189 -F src/vdbeapi.c ffae8f5af4570fbd548504e815e9fb7227f0822e -F src/vdbeaux.c 07f8f485a6cbc0a62da660f14e303061d45d5cb6 -F src/vdbeblob.c 37c3d11a753e403698c69e17383d282e1ae73e75 -F src/vdbemem.c b9181e77eca2a095929d46250daf85c8d2621fc0 ++F src/vdbe.c 1443ca69877410c90ba521220d4336d5ef689cdd ++F src/vdbe.h 19162d5d75d00ee9e634ad630f2a873e1cf76359 +F src/vdbeInt.h 1bff4effc71888e3f304e2e6ac7484e39ab78c28 - F src/vdbeapi.c ab2cb8fe23fb9f3195f1311eaa800495d83b6118 - F src/vdbeaux.c 30f329b90af08d92739185788c6fbfd1c233b8b4 - F src/vdbeblob.c cc13eca96b8ec51b6248de785a1aec5df11f5805 - F src/vdbemem.c 25b6cfd665b5073480452426e84136edd94140c0 ++F src/vdbeapi.c 75fa852c0d6e7e9c1334aaaa91b6821cba6a713b ++F src/vdbeaux.c 3781db199a8d9376c9512fb7e1304aae7af67dfa ++F src/vdbeblob.c 6ccda01a78b3f9d9a0c75f79e7a1150f3fb0cb39 ++F src/vdbemem.c 6c962ee0a77de009dafb6d7f3c7e8bf7b82c47f8 F src/vdbesort.c 0971557e5d3c289e46f56a52aed2197c13251de7 F src/vdbetrace.c 8befe829faff6d9e6f6e4dee5a7d3f85cc85f1a0 - F src/vtab.c 2a8b44aa372c33f6154208e7a7f6c44254549806 + F src/vtab.c 320682cca733115b4cbe71320b5c5eeb1074ebde F src/vxworks.h 974e7d9a98f602d6310d563e1dc4e08f9fc48e47 F src/wal.c d21b99fd1458159d0b1ecdccc8ee6ada4fdc4c54 F src/wal.h 2f7c831cf3b071fa548bf2d5cac640846a7ff19c @@@ -784,7 -771,7 +791,7 @@@ F test/fuzzerfault.test 8792cd77fd5bce7 F test/genesis.tcl 1e2e2e8e5cc4058549a154ff1892fe5c9de19f98 F test/hexlit.test d7b0a5f41123df1e43985b91b8b2e70f95282d21 F test/hidden.test 23c1393a79e846d68fd902d72c85d5e5dcf98711 - F test/hook.test aa41c095d26822b8a51aa4c82904a14347961be6 -F test/hook.test 162d7cef7a2d2b04839fe14402934e6a1b79442f ++F test/hook.test 40523db3aa76d62bda71c26f824fa0eabc420f0e F test/icu.test 70df4faca133254c042d02ae342c0a141f2663f4 F test/ieee754.test 806fc0ce7f305f57e3331eaceeddcfec9339e607 F test/imposter1.test c3f1db2d3db2c24611a6596a3fc0ffc14f1466c8 @@@ -1433,7 -1419,7 +1440,7 @@@ F tool/vdbe_profile.tcl 246d0da094856d7 F tool/warnings-clang.sh f6aa929dc20ef1f856af04a730772f59283631d4 F tool/warnings.sh 48bd54594752d5be3337f12c72f28d2080cb630b F tool/win/sqlite.vsix deb315d026cc8400325c5863eef847784a219a2f - P c4a858b228a164be2f89f5b01833f0b5e0d7735b 8dedff3b9ac3e6bf9c131fee19f7d26dc1ebd61f - R 99385ae0fdf1facdff7c072dfc1f2a57 -P ff8eadbed5004ab03438f737492387dee6b9750a -R 9def3e1e6201afa0dc73a868079c61c0 -U dan -Z 16223910bb7e7f6f85293111cf2f150d ++P 007e5c6df60f9743ac6914332f59925e4a7a861c 18d61c8e40ed1466b6a3a2f53bf0eeb09687c20e ++R 062849fc5c2e599b32ec755e50c1d8e3 +U drh - Z c131c7ae38d871cc572c248d8ac0f193 ++Z 10a2fcf1cf68156c27545982ac8f140d diff --cc manifest.uuid index 448e42f7f4,eacc6db990..230276985d --- a/manifest.uuid +++ b/manifest.uuid @@@ -1,1 -1,1 +1,1 @@@ - 007e5c6df60f9743ac6914332f59925e4a7a861c -18d61c8e40ed1466b6a3a2f53bf0eeb09687c20e ++327af5f644a49b2f41d5456958f9d61a2b704e1c diff --cc src/insert.c index 6261d45898,8082bcb459..910216b8ba --- a/src/insert.c +++ b/src/insert.c @@@ -2020,9 -2011,9 +2020,9 @@@ static int xferOptimization assert( (pDest->tabFlags & TF_Autoincrement)==0 ); } sqlite3VdbeAddOp2(v, OP_RowData, iSrc, regData); - sqlite3VdbeAddOp3(v, OP_Insert, iDest, regData, regRowid); + sqlite3VdbeAddOp4(v, OP_Insert, iDest, regData, regRowid, - pDest->zName, 0); ++ (char*)pDest, P4_TABLE); sqlite3VdbeChangeP5(v, OPFLAG_NCHANGE|OPFLAG_LASTROWID|OPFLAG_APPEND); - sqlite3VdbeChangeP4(v, -1, (char*)pDest, P4_TABLE); sqlite3VdbeAddOp2(v, OP_Next, iSrc, addr1); VdbeCoverage(v); sqlite3VdbeAddOp2(v, OP_Close, iSrc, 0); sqlite3VdbeAddOp2(v, OP_Close, iDest, 0); diff --cc src/vdbeaux.c index b1646f6109,17f1cb7dc4..8348cee9b2 --- a/src/vdbeaux.c +++ b/src/vdbeaux.c @@@ -4430,92 -4445,12 +4447,94 @@@ void sqlite3VdbeSetVarmask(Vdbe *v, in ** in memory obtained from sqlite3DbMalloc). */ void sqlite3VtabImportErrmsg(Vdbe *p, sqlite3_vtab *pVtab){ - sqlite3 *db = p->db; - sqlite3DbFree(db, p->zErrMsg); - p->zErrMsg = sqlite3DbStrDup(db, pVtab->zErrMsg); - sqlite3_free(pVtab->zErrMsg); - pVtab->zErrMsg = 0; + if( pVtab->zErrMsg ){ + sqlite3 *db = p->db; + sqlite3DbFree(db, p->zErrMsg); + p->zErrMsg = sqlite3DbStrDup(db, pVtab->zErrMsg); + sqlite3_free(pVtab->zErrMsg); + pVtab->zErrMsg = 0; + } } #endif /* SQLITE_OMIT_VIRTUALTABLE */ + +#ifdef SQLITE_ENABLE_PREUPDATE_HOOK + +/* +** If the second argument is not NULL, release any allocations associated +** with the memory cells in the p->aMem[] array. Also free the UnpackedRecord +** structure itself, using sqlite3DbFree(). +** +** This function is used to free UnpackedRecord structures allocated by +** the vdbeUnpackRecord() function found in vdbeapi.c. +*/ +static void vdbeFreeUnpacked(sqlite3 *db, UnpackedRecord *p){ + if( p ){ + int i; + for(i=0; inField; i++){ + Mem *pMem = &p->aMem[i]; + if( pMem->zMalloc ) sqlite3VdbeMemRelease(pMem); + } + sqlite3DbFree(db, p); + } +} + +/* +** Invoke the pre-update hook. If this is an UPDATE or DELETE pre-update call, +** then cursor passed as the second argument should point to the row about +** to be update or deleted. If the application calls sqlite3_preupdate_old(), +** the required value will be read from the row the cursor points to. +*/ +void sqlite3VdbePreUpdateHook( + Vdbe *v, /* Vdbe pre-update hook is invoked by */ + VdbeCursor *pCsr, /* Cursor to grab old.* values from */ + int op, /* SQLITE_INSERT, UPDATE or DELETE */ + const char *zDb, /* Database name */ + Table *pTab, /* Modified table */ + i64 iKey1, /* Initial key value */ + int iReg /* Register for new.* record */ +){ + sqlite3 *db = v->db; + i64 iKey2; + PreUpdate preupdate; + const char *zTbl = pTab->zName; + static const u8 fakeSortOrder = 0; + + assert( db->pPreUpdate==0 ); + memset(&preupdate, 0, sizeof(PreUpdate)); + if( op==SQLITE_UPDATE ){ + iKey2 = v->aMem[iReg].u.i; + }else{ + iKey2 = iKey1; + } + + assert( pCsr->nField==pTab->nCol + || (pCsr->nField==pTab->nCol+1 && op==SQLITE_DELETE && iReg==-1) + ); + + preupdate.v = v; + preupdate.pCsr = pCsr; + preupdate.op = op; + preupdate.iNewReg = iReg; + preupdate.keyinfo.db = db; + preupdate.keyinfo.enc = ENC(db); + preupdate.keyinfo.nField = pTab->nCol; + preupdate.keyinfo.aSortOrder = (u8*)&fakeSortOrder; + preupdate.iKey1 = iKey1; + preupdate.iKey2 = iKey2; + preupdate.iPKey = pTab->iPKey; + + db->pPreUpdate = &preupdate; + db->xPreUpdateCallback(db->pPreUpdateArg, db, op, zDb, zTbl, iKey1, iKey2); + db->pPreUpdate = 0; + sqlite3DbFree(db, preupdate.aRecord); + vdbeFreeUnpacked(db, preupdate.pUnpacked); + vdbeFreeUnpacked(db, preupdate.pNewUnpacked); + if( preupdate.aNew ){ + int i; + for(i=0; inField; i++){ + sqlite3VdbeMemRelease(&preupdate.aNew[i]); + } + sqlite3DbFree(db, preupdate.aNew); + } +} +#endif /* SQLITE_ENABLE_PREUPDATE_HOOK */