From: drh Date: Thu, 22 Aug 2013 15:07:08 +0000 (+0000) Subject: Merge in minor bug fixes and performance tweaks from trunk leading up to X-Git-Tag: version-3.13.0~148^2~183 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=32683532f02c39393d8b251243bcbc11f5ad4520;p=thirdparty%2Fsqlite.git Merge in minor bug fixes and performance tweaks from trunk leading up to the version 3.8.0 release. FossilOrigin-Name: 831492dca8bcfb1a1f83a8bb15de9cc94f29f07e --- 32683532f02c39393d8b251243bcbc11f5ad4520 diff --cc manifest index e33c693306,18542bbdc3..eeb634ab67 --- a/manifest +++ b/manifest @@@ -1,9 -1,9 +1,9 @@@ - C Merge\sperformance\senhancements\sand\scompiler\swarning\sfixes\sfrom\strunk. - D 2013-08-20T13:02:16.832 -C Defer\sthe\screation\sof\sautomatic\sindices\suntil\sthe\sindex\sis\sactually\sused. -D 2013-08-22T02:56:28.029 ++C Merge\sin\sminor\sbug\sfixes\sand\sperformance\stweaks\sfrom\strunk\sleading\sup\sto\nthe\sversion\s3.8.0\srelease. ++D 2013-08-22T15:07:08.266 F Makefile.arm-wince-mingw32ce-gcc d6df77f1f48d690bd73162294bbba7f59507c72f -F Makefile.in 5e41da95d92656a5004b03d3576e8b226858a28e +F Makefile.in aff38bc64c582dd147f18739532198372587b0f0 F Makefile.linux-gcc 91d710bdc4998cb015f39edf3cb314ec4f4d7e23 -F Makefile.msc e9f41f89111627baaabd95cab4988b8d1c3e47c9 +F Makefile.msc e5cc521bbc9fb09f032f7fef563542da7ac5544a F Makefile.vxworks db21ed42a01d5740e656b16f92cb5d8d5e5dd315 F README cd04a36fbc7ea56932a4052d7d0b7f09f27c33d6 F VERSION f135b651727f978b7191bd6fa12c7fc1e13e13ac @@@ -184,11 -171,11 +184,11 @@@ F src/callback.c d7e46f40c3cf53c43550b7 F src/complete.c dc1d136c0feee03c2f7550bafc0d29075e36deac F src/ctime.c 4262c227bc91cecc61ae37ed3a40f08069cfa267 F src/date.c 067a81c9942c497aafd2c260e13add8a7d0c7dd4 -F src/delete.c 2317c814866d9aa71fea16b3faf4fdd4d6a49b94 +F src/delete.c 30ed4bc76a1a32c55bf17ac1528c5867aa5502c0 - F src/expr.c 42d8235af422661ab80be097bebca485b33e2e14 + F src/expr.c 6bab61c757c4c4c94a92e98d507025d5d18afd3c F src/fault.c 160a0c015b6c2629d3899ed2daf63d75754a32bb F src/fkey.c 914a6bbd987d857c41ac9d244efa6641f36faadb - F src/func.c 5c50c1ea31fd864b0fe921fe1a8d4c55acd609ef + F src/func.c d7be77897c91d5b9887beb372f1e6deb515c92af F src/global.c 5caf4deab621abb45b4c607aad1bd21c20aac759 F src/hash.c ac3470bbf1ca4ae4e306a8ecb0fdf1731810ffe4 F src/hash.h 8890a25af81fb85a9ad7790d32eedab4b994da22 @@@ -231,10 -218,10 +231,10 @@@ F src/resolve.c 9d53899cc6e1f4ec0b4632d F src/rowset.c 64655f1a627c9c212d9ab497899e7424a34222e0 F src/select.c 8b148eb851f384412aea57091659d14b369918ca F src/shell.c 1c317a4c96d61d8d9fdad9fd1811d9b10b8c7f57 -F src/sqlite.h.in bd1451ba1ab681022a53bccc3c39580ba094a3ff +F src/sqlite.h.in dcca940021f8f6643630fb7711bfd4e3fa002566 F src/sqlite3.rc fea433eb0a59f4c9393c8e6d76a6e2596b1fe0c0 F src/sqlite3ext.h 886f5a34de171002ad46fae8c36a7d8051c190fc - F src/sqliteInt.h a24a7f54dd59e8f59d67f7ab0682b5c22f554855 -F src/sqliteInt.h 124e4b19cd5533116909ccf203bdcdd04a28f99a ++F src/sqliteInt.h 93fe5b4c6234942cb9ca14fc25ad634d0e2ff775 F src/sqliteLimit.h 164b0e6749d31e0daa1a4589a169d31c0dec7b3d F src/status.c 7ac05a5c7017d0b9f0b4bcd701228b784f987158 F src/table.c 2cd62736f845d82200acfa1287e33feb3c15d62e @@@ -290,16 -277,16 +290,16 @@@ F src/update.c e3668141dd97010236812392 F src/utf.c 8d819e2e5104a430fc2005f018db14347c95a38f F src/util.c f566b5138099a2df8533b190d0dcc74b7dfbe0c9 F src/vacuum.c d9c5759f4c5a438bb43c2086f72c5d2edabc36c8 - F src/vdbe.c 76502f0813c3ecf1a54611fc5262c8bc77a54fb7 -F src/vdbe.c d37aee2c89e2a589f2b1599e0178eb17a08a3ccb -F src/vdbe.h 4f554b5627f26710c4c36d919110a3fc611ca5c4 -F src/vdbeInt.h cbe71b8b36d8b3bba5709cc3f436c7e3b47b7b08 -F src/vdbeapi.c 96b24b946cf21894f63d9393e821baa2f0a80979 -F src/vdbeaux.c c7fe2695e256dbf254113c4fe90d3ec9aabe3bbe -F src/vdbeblob.c 5dc79627775bd9a9b494dd956e26297946417d69 ++F src/vdbe.c 08a46d04e5bdfd95884664eeeb8fbe5e4de426ee +F src/vdbe.h 7aa3ab6210a68471c8490dedfc9aa4ef5684b9a0 +F src/vdbeInt.h 9bf236dc477fb8f1f54b078cf80064663f8a409a +F src/vdbeapi.c ae87d198eb3ce67c02886601baee0fd478092076 - F src/vdbeaux.c 6549864e5fffa3d04941551610e4800de72e1be9 ++F src/vdbeaux.c 20ec92cdc43374b6537fbd7bc2cf7a28967bbe44 +F src/vdbeblob.c 1268e0bcb8e21fa32520b0fc376e1bcdfaa0c642 - F src/vdbemem.c 833005f1cbbf447289f1973dba2a0c2228c7b8ab + F src/vdbemem.c 61d5ddb8e4d4e14f625062bf5bcc7ce08bb20af3 F src/vdbesort.c 3937e06b2a0e354500e17dc206ef4c35770a5017 F src/vdbetrace.c e7ec40e1999ff3c6414424365d5941178966dcbc - F src/vtab.c 2e8b489db47e20ae36cd247932dc671c9ded0624 + F src/vtab.c 165ce0e797c2cd23badb104c9f2ae9042d6d942c F src/wal.c 7dc3966ef98b74422267e7e6e46e07ff6c6eb1b4 F src/wal.h df01efe09c5cb8c8e391ff1715cca294f89668a4 F src/walker.c 4fa43583d0a84b48f93b1e88f11adf2065be4e73 @@@ -1119,7 -1105,7 +1119,7 @@@ F tool/warnings-clang.sh f6aa929dc20ef1 F tool/warnings.sh fbc018d67fd7395f440c28f33ef0f94420226381 F tool/wherecosttest.c f407dc4c79786982a475261866a161cd007947ae F tool/win/sqlite.vsix 97894c2790eda7b5bce3cc79cb2a8ec2fde9b3ac - P 67587a3348b84424b2ab1f2df1ea923a5168e2e4 7f72fc4f47445a2c01910b268335873de9f75059 - R 38645eeb23d643e57952026ace84c002 -P 617e23ec283d3147fc3fd29c474ccedf4915cdc7 -R c8cf06f49dffbef3bb0170f8252069c7 ++P 3e4033285deb417bd72c008917729dbf3bf4e90d 0775501acf152dcbf4dd039f4511f3d8c4330d85 ++R f6e422c39c44105817eb40d9d54618de U drh - Z 8d51de2c92073e757664e09f591c4bfa -Z c5e5b20d4589a0c600c887ab3fa62d4e ++Z f9597afebde4efa08f5ab31e24bede7f diff --cc manifest.uuid index 04e1209cd3,296e198d71..8fadc4e3f6 --- a/manifest.uuid +++ b/manifest.uuid @@@ -1,1 -1,1 +1,1 @@@ - 3e4033285deb417bd72c008917729dbf3bf4e90d -0775501acf152dcbf4dd039f4511f3d8c4330d85 ++831492dca8bcfb1a1f83a8bb15de9cc94f29f07e diff --cc src/vdbeaux.c index 8f7f0a9c4c,ec071606a2..3d8d3e3c29 --- a/src/vdbeaux.c +++ b/src/vdbeaux.c @@@ -3307,84 -3305,17 +3307,99 @@@ void sqlite3VdbeSetVarmask(Vdbe *v, in } } + #ifndef SQLITE_OMIT_VIRTUALTABLE + /* + ** Transfer error message text from an sqlite3_vtab.zErrMsg (text stored + ** in memory obtained from sqlite3_malloc) into a Vdbe.zErrMsg (text stored + ** 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; + } + #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 */