From: drh Date: Tue, 4 Mar 2014 14:34:14 +0000 (+0000) Subject: Merge the performance enhancements of trunk (and some obscure bug fixes) X-Git-Tag: version-3.13.0~148^2~157 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=7826a9b83fd51f25fb7ef92308cfe4086ca7b0bb;p=thirdparty%2Fsqlite.git Merge the performance enhancements of trunk (and some obscure bug fixes) into the sessions branch. FossilOrigin-Name: 7f51ad97f0b24c57453d58faf25eee68861faa23 --- 7826a9b83fd51f25fb7ef92308cfe4086ca7b0bb diff --cc manifest index 95a9a2733e,c0ec8eeea1..3b11b2b199 --- a/manifest +++ b/manifest @@@ -1,11 -1,11 +1,11 @@@ - C Sync\swith\strunk.\s\sBring\sin\sthe\scommand-line\sshell\supdates\sand\sthe\snew\s3.8.4\nversion\snumber. - D 2014-02-11T16:31:14.706 -C Improve\sclarity\sof\spresentation\sin\sthe\ssqlite3VdbeMemFromBtree()\sroutine. -D 2014-03-04T13:18:23.018 ++C Merge\sthe\sperformance\senhancements\sof\strunk\s(and\ssome\sobscure\sbug\sfixes)\ninto\sthe\ssessions\sbranch. ++D 2014-03-04T14:34:14.215 F Makefile.arm-wince-mingw32ce-gcc d6df77f1f48d690bd73162294bbba7f59507c72f -F Makefile.in 2ef13430cd359f7b361bb863504e227b25cc7f81 +F Makefile.in e4ee6d36cdf6136aee0158675a3b24dd3bf31a5a F Makefile.linux-gcc 91d710bdc4998cb015f39edf3cb314ec4f4d7e23 - F Makefile.msc 71dd5335d266351598e51f2d694396db2a2e219f -F Makefile.msc fdacba6fb574868c71fde6db6b77789a383a4c19 ++F Makefile.msc b448317831d9c364bf501538becce5cc1f0a0f8b F Makefile.vxworks db21ed42a01d5740e656b16f92cb5d8d5e5dd315 - F README cd04a36fbc7ea56932a4052d7d0b7f09f27c33d6 -F README.md 64f270c43c38c46de749e419c22f0ae2f4499fe8 ++F README.md 64f270c43c38c46de749e419c22f0ae2f4499fe8 w README F VERSION 0dc30ad5cf90736d5fd9e540c9f05c542658abe7 F aclocal.m4 a5c22d164aff7ed549d53a90fa56d56955281f50 F addopcodes.awk 9eb448a552d5c0185cf62c463f9c173cedae3811 @@@ -156,10 -142,7 +156,7 @@@ F ext/session/test_session.c d38968307c F install-sh 9d4de14ab9fb0facae2f48780b874848cbf2f895 x F ltmain.sh 3ff0879076df340d2e23ae905484d8c15d5fdea8 F magic.txt f439556c5ce01ced70987e5ee86549a45165d9ff -F main.mk 3ae543fa446525c1dec55f58de67f41b78651812 +F main.mk a3028a846754a96c8841d1a7227890c471c65ec2 - F mkdll.sh 7d09b23c05d56532e9d44a50868eb4b12ff4f74a - F mkextu.sh 416f9b7089d80e5590a29692c9d9280a10dbad9f - F mkextw.sh d2a981497b404d6498f5ff3e3b1f3816bdfcb338 F mkopcodec.awk c2ff431854d702cdd2d779c9c0d1f58fa16fa4ea F mkopcodeh.awk c6b3fa301db6ef7ac916b14c60868aeaec1337b5 F mkso.sh fd21c06b063bb16a5d25deea1752c2da6ac3ed83 @@@ -188,21 -171,21 +185,21 @@@ F src/callback.c 174e3c8656bc29f91d710a F src/complete.c dc1d136c0feee03c2f7550bafc0d29075e36deac F src/ctime.c 77779efbe78dd678d84bfb4fc2e87b6b6ad8dccd F src/date.c 593c744b2623971e45affd0bde347631bdfa4625 - F src/delete.c 2017d2913f760d581378259064d8be67882771d1 - F src/expr.c 9bea427f95665c1aa8fdc87b7678546eef50c296 -F src/delete.c cdd57149543bb28304d8f717c243f2a86b1fc280 ++F src/delete.c 19df05f1ab55f021605e1c7a3c0a3851876fb3c7 + F src/expr.c 014b8087a15c4c314bdd798cb1cb0b32693f8b40 F src/fault.c 160a0c015b6c2629d3899ed2daf63d75754a32bb - F src/fkey.c 2ab0f5384b70594468ef3ac5c7ed8ca24bfd17d5 + F src/fkey.c 5269ef07b100763134f71b889327c333bd0989cf F src/func.c f4499b39d66b71825514334ce67b32ff14bd19f5 F src/global.c 1d7bb7ea8254ae6a68ed9bfaf65fcb3d1690b486 F src/hash.c d139319967164f139c8d1bb8a11b14db9c4ba3cd F src/hash.h 8890a25af81fb85a9ad7790d32eedab4b994da22 F src/hwtime.h d32741c8f4df852c7d959236615444e2b1063b08 - F src/insert.c 985b61befb66ae35d629f10c3601ce9fa1bd8ef3 -F src/insert.c d3d1164299faa53b5347f8ff676d3787537fa9e5 ++F src/insert.c cb421bc5aa4831dae9d6f0715d869cc7a008c8b4 F src/journal.c b4124532212b6952f42eb2c12fa3c25701d8ba8d F src/legacy.c 0df0b1550b9cc1f58229644735e317ac89131f12 F src/lempar.c cdf0a000315332fc9b50b62f3b5e22e080a0952b F src/loadext.c 867c7b330b740c6c917af9956b13b81d0a048303 - F src/main.c e9c6feb98d8bf8fa15b87167f6ab87fcce13602c -F src/main.c e054917b1beb3081b0f23e8bdd3d6c0e12933dd3 ++F src/main.c d247f4de4af161edf1a7abbbe78a281c1b9710c9 F src/malloc.c 0203ebce9152c6a0e5de520140b8ba65187350be F src/mem0.c 6a55ebe57c46ca1a7d98da93aaa07f99f1059645 F src/mem1.c c0c990fcaddff810ea277b4fb5d9138603dd5d4b @@@ -231,18 -214,18 +228,18 @@@ F src/pragma.c a46ee83671f5c95f53d2ceeb F src/prepare.c 677521ab7132615a8a26107a1d1c3132f44ae337 F src/printf.c 85d07756e45d7496d19439dcae3e6e9e0090f269 F src/random.c d10c1f85b6709ca97278428fd5db5bbb9c74eece - F src/resolve.c 7eda9097b29fcf3d2b42fdc17d1de672134e09b6 + F src/resolve.c 273d5f47c4e2c05b2d3d2bffeda939551ab59e66 F src/rowset.c 64655f1a627c9c212d9ab497899e7424a34222e0 - F src/select.c 50961f0d0ab8f2d45ff29ec5f91d8db221330ca7 - F src/shell.c 3dd86bf73ccd079f0e32ef5069600586085e8239 - F src/sqlite.h.in a92d7fcdcb1a8003a62e916ec49025f27ccb56b8 + F src/select.c 780bbf39e401091845ba745a38326eabe5d44293 + F src/shell.c 7bf07bcacb181ecc3fc3ccacfdfeb4084aee67ed -F src/sqlite.h.in a2ef671f92747a5a1c8a47bad5c585a8dd9eca80 ++F src/sqlite.h.in a31c8b7782a0388b4bd823ed3a3a3e4b93b0cf42 F src/sqlite3.rc 11094cc6a157a028b301a9f06b3d03089ea37c3e F src/sqlite3ext.h 886f5a34de171002ad46fae8c36a7d8051c190fc - F src/sqliteInt.h 2c9a421de05893c798b851004658b12e9843c0f7 -F src/sqliteInt.h bf529055591dd81ec92a84d35dba0854642f6cc2 ++F src/sqliteInt.h 9c34060f8d1aa29006b93838399c86ae9af71156 F src/sqliteLimit.h 164b0e6749d31e0daa1a4589a169d31c0dec7b3d F src/status.c 7ac05a5c7017d0b9f0b4bcd701228b784f987158 F src/table.c 2cd62736f845d82200acfa1287e33feb3c15d62e - F src/tclsqlite.c 52c628d5ac76a13d9c633e6bf384595ac18662b7 -F src/tclsqlite.c e87c99e28a145943666b51b212dacae35fcea0bd ++F src/tclsqlite.c 7ada527ce7916adcabad7997c10f09680aac7c9b F src/test1.c 2401eee14a4309a7cfe2aeb2f30ad517a1d9c299 F src/test2.c 7355101c085304b90024f2261e056cdff13c6c35 F src/test3.c 1c0e5d6f080b8e33c1ce8b3078e7013fdbcd560c @@@ -289,25 -272,25 +286,25 @@@ F src/test_vfs.c e72f555ef7a59080f898fc F src/test_vfstrace.c 3a0ab304682fecbceb689e7d9b904211fde11d78 F src/test_wsd.c 41cadfd9d97fe8e3e4e44f61a4a8ccd6f7ca8fe9 F src/tokenize.c 6da2de6e12218ccb0aea5184b56727d011f4bee7 - F src/trigger.c a417d386e214f0abd2e0f756b834b4d9f4d3368a - F src/update.c 437c130e7d16230e182782baffa8290a349cdf7d - F src/utf.c 6fc6c88d50448c469c5c196acf21617a24f90269 + F src/trigger.c a80036fcbd992729adc7cd34a875d59a71fa10cc -F src/update.c 5b3e74a03b3811e586b4f2b4cbd7c49f01c93115 ++F src/update.c 7bb549d61efc6853f5cc708c1de6931179f8a12d + F src/utf.c 6dc9ec9f1b3db43ae8ba0365377f11df1ee4c01c F src/util.c c46c90459ef9bdc0c6c73803cf4c55425b4771cf F src/vacuum.c 3728d74919d4fb1356f9e9a13e27773db60b7179 - F src/vdbe.c 8b389fc56e63664e168c84989c645905eec650f4 - F src/vdbe.h 06016671144c70373331e348fd7edf2b2535ac97 - F src/vdbeInt.h 9ad4950c4af3531253a7b86cfc88f9ec3c38834c -F src/vdbe.c 75c3f5d27ab79af214646cf37d7551bc8cec09c2 -F src/vdbe.h d189f92468a17a6f04daeec9df3b767f50557b21 -F src/vdbeInt.h 9ccca0bc7646c918d065943e44bead4bf5de213d -F src/vdbeapi.c 5bc41aaea448a7fc250902c418f1795859be3820 -F src/vdbeaux.c 636a7e2eaaa48c3e3585b28b9b1673df78fc0fad -F src/vdbeblob.c d939997de046b8fcc607cfee4248f3d33dbcca50 ++F src/vdbe.c 69e2bd96704c5f56365db050a62430c3f261b611 ++F src/vdbe.h 6631430dddd1450dfe749ba6fa8e2acdda3933f6 ++F src/vdbeInt.h 3fecec2457cac8a57085dc8edf08eb486d370ca0 +F src/vdbeapi.c a130692dd1016cd2becdae323391437f580b2417 - F src/vdbeaux.c b02637a5c0369c2206ed883a3f24c4f71a85b71c - F src/vdbeblob.c c8c547cc9d5dd2d5a3d355128bb4a02e1889f423 - F src/vdbemem.c 06603e8e9d2f3247b68c6bbe4bd37fb6721b5bda - F src/vdbesort.c 9d83601f9d6243fe70dd0169a2820c5ddfd48147 ++F src/vdbeaux.c c50dc4f192cec40b6127c0c199f19e18f42258e6 ++F src/vdbeblob.c 666ce6596264fe88dad51bf60c160668d3cd0920 + F src/vdbemem.c 10b250f09a3843ee2bcabcadf50ca21fc3ff1f87 + F src/vdbesort.c 46801acb342e5e4c07ba1777fe58880c143abb59 F src/vdbetrace.c 6f52bc0c51e144b7efdcfb2a8f771167a8816767 F src/vtab.c 21b932841e51ebd7d075e2d0ad1415dce8d2d5fd - F src/wal.c 7dc3966ef98b74422267e7e6e46e07ff6c6eb1b4 + F src/wal.c 76e7fc6de229bea8b30bb2539110f03a494dc3a8 F src/wal.h df01efe09c5cb8c8e391ff1715cca294f89668a4 F src/walker.c 11edb74d587bc87b33ca96a5173e3ec1b8389e45 - F src/where.c b0436385f40e86f0f4cc60355cd018bde2c89d4b + F src/where.c 2269342f82ea97596564bdc981c362a5177b72c5 F src/whereInt.h 921f935af8b684ffb49705610bda7284db1db138 F test/8_3_names.test ebbb5cd36741350040fd28b432ceadf495be25b2 F test/aggerror.test a867e273ef9e3d7919f03ef4f0e8c0d2767944f2 @@@ -751,8 -735,8 +749,8 @@@ F test/pagesize.test 1dd51367e752e742f5 F test/pcache.test b09104b03160aca0d968d99e8cd2c5b1921a993d F test/pcache2.test a83efe2dec0d392f814bfc998def1d1833942025 F test/percentile.test b98fc868d71eb5619d42a1702e9ab91718cbed54 -F test/permutations.test 40add071ba71aefe1c04f5845308cf46f7de8d04 +F test/permutations.test b7b8b410e3d22e616ff473e588078da6a377c082 - F test/pragma.test e882183ecd21d064cec5c7aaea174fbd36293429 + F test/pragma.test adb21a90875bc54a880fa939c4d7c46598905aa0 F test/pragma2.test aea7b3d82c76034a2df2b38a13745172ddc0bc13 F test/printf.test ec9870c4dce8686a37818e0bf1aba6e6a1863552 F test/printf2.test bed79b4c3e5da08ba88ad637c0bf62586843cfb1 @@@ -805,8 -789,8 +803,9 @@@ F test/selectB.test 954e4e49cf1f896d617 F test/selectC.test 871fb55d884d3de5943c4057ebd22c2459e71977 F test/selectD.test b0f02a04ef7737decb24e08be2c39b9664b43394 F test/selectE.test fc02a1eb04c8eb537091482644b7d778ae8759b7 + F test/selectF.test 21c94e6438f76537b72532fa9fd4710cdd455fc3 F test/server1.test 46803bd3fe8b99b30dbc5ff38ffc756f5c13a118 +F test/session.test 082dea459efc76e2a527b8ee9ff74d76e63ea7b6 F test/shared.test 1da9dbad400cee0d93f252ccf76e1ae007a63746 F test/shared2.test 03eb4a8d372e290107d34b6ce1809919a698e879 F test/shared3.test fcd65cb11d189eff5f5c85cc4fad246fb0933108 @@@ -859,7 -843,7 +858,7 @@@ F test/tclsqlite.test a7308276aad2e6c0b F test/tempdb.test 19d0f66e2e3eeffd68661a11c83ba5e6ace9128c F test/temptable.test d2c9b87a54147161bcd1822e30c1d1cd891e5b30 F test/temptrigger.test 8ec228b0db5d7ebc4ee9b458fc28cb9e7873f5e1 - F test/tester.tcl 1c7b3cef48840ad67ca82cfed4ec3a4afbc322a3 -F test/tester.tcl f31bea1483ea1d39620f982130026e76f872d744 ++F test/tester.tcl 8bab16cd983b4207203d82b7de229aa7b457f575 F test/thread001.test 9f22fd3525a307ff42a326b6bc7b0465be1745a5 F test/thread002.test e630504f8a06c00bf8bbe68528774dd96aeb2e58 F test/thread003.test ee4c9efc3b86a6a2767516a37bd64251272560a7 @@@ -1138,8 -1124,8 +1139,8 @@@ F tool/mkopts.tcl 66ac10d240cc6e86abd37 F tool/mkpragmatab.tcl 78a77b2c554d534c6f2dc903130186ed15715460 F tool/mkspeedsql.tcl a1a334d288f7adfe6e996f2e712becf076745c97 F tool/mksqlite3c-noext.tcl 8bce31074e4cbe631bb7676526a048335f4c9f02 - F tool/mksqlite3c.tcl 5b63710413fa8604cdb1af8562b4fbf934870d45 -F tool/mksqlite3c.tcl ed5b4e9ca8bf209ff401059a16362f37710fd8b8 -F tool/mksqlite3h.tcl ba24038056f51fde07c0079c41885ab85e2cff12 ++F tool/mksqlite3c.tcl 3a7297ac69e6da8089eeb3d3ba986e0e3d6016f4 +F tool/mksqlite3h.tcl 2d0f1b3768f8d000b7881217d5fd4c776eb27467 F tool/mksqlite3internalh.tcl 3dca7bb5374cee003379b8cbac73714f610ef795 F tool/mkvsix.tcl 6477fb9dab838b7eea1eed50658ff1cda04850b5 F tool/offsets.c fe4262fdfa378e8f5499a42136d17bf3b98f6091 @@@ -1162,13 -1148,14 +1163,14 @@@ F tool/speedtest8inst1.c 293327bc76823f F tool/split-sqlite3c.tcl d9be87f1c340285a3e081eb19b4a247981ed290c F tool/stack_usage.tcl f8e71b92cdb099a147dad572375595eae55eca43 F tool/symbols-mingw.sh 4dbcea7e74768305384c9fd2ed2b41bbf9f0414d -F tool/symbols.sh fec58532668296d7c7dc48be9c87f75ccdb5814f +F tool/symbols.sh c5a617b8c61a0926747a56c65f5671ef8ac0e148 F tool/tostr.awk e75472c2f98dd76e06b8c9c1367f4ab07e122d06 F tool/vdbe-compress.tcl 0cf56e9263a152b84da86e75a5c0cdcdb7a47891 + F tool/vdbe_profile.tcl 67746953071a9f8f2f668b73fe899074e2c6d8c1 F tool/warnings-clang.sh f6aa929dc20ef1f856af04a730772f59283631d4 F tool/warnings.sh d1a6de74685f360ab718efda6265994b99bbea01 F tool/win/sqlite.vsix 030f3eeaf2cb811a3692ab9c14d021a75ce41fff - P b006792695d23980e1923b21915d5c1138ecf29d 0a8bcbbd4e11a60923736b2be9b1ce83ea2263fb - R 7d2fb347996fe34e28958e66dfeb20fe -P 1e57f67b20a1c01ede36d684be628e9270bf109a -R a19a15248ea3d7c53bb59593fa01c33d ++P 2cd35ff6512e1973077f7ffc2c902476eabbe672 9830c343bc954b828f6ca752f8ae63e2c0a980c1 ++R 1b0e794620966a99e11eff71e0b47bdf U drh - Z 8dc7cf7da8fba0cbde1ad37473fe5303 -Z e6c94fb8a2515aaa56cdd644b73247d7 ++Z bda0a10e708d562bf20c5bd0cbfd93f9 diff --cc manifest.uuid index cbdc5a1e4a,0ddf6b66df..6f9e315630 --- a/manifest.uuid +++ b/manifest.uuid @@@ -1,1 -1,1 +1,1 @@@ - 2cd35ff6512e1973077f7ffc2c902476eabbe672 -9830c343bc954b828f6ca752f8ae63e2c0a980c1 ++7f51ad97f0b24c57453d58faf25eee68861faa23 diff --cc src/insert.c index 2ff4237bc5,1d29da3092..e6a5895757 --- a/src/insert.c +++ b/src/insert.c @@@ -2022,8 -1966,8 +1978,8 @@@ static int xferOptimization sqlite3VdbeAddOp2(v, OP_RowData, iSrc, regData); sqlite3VdbeAddOp3(v, OP_Insert, iDest, regData, regRowid); sqlite3VdbeChangeP5(v, OPFLAG_NCHANGE|OPFLAG_LASTROWID|OPFLAG_APPEND); - sqlite3VdbeChangeP4(v, -1, pDest->zName, 0); + sqlite3VdbeChangeP4(v, -1, (char*)pDest, P4_TABLE); - sqlite3VdbeAddOp2(v, OP_Next, iSrc, addr1); + sqlite3VdbeAddOp2(v, OP_Next, iSrc, addr1); VdbeCoverage(v); sqlite3VdbeAddOp2(v, OP_Close, iSrc, 0); sqlite3VdbeAddOp2(v, OP_Close, iDest, 0); }else{ diff --cc src/update.c index 8ca33a9ad6,4138749f80..a1082068ec --- a/src/update.c +++ b/src/update.c @@@ -574,25 -580,13 +580,26 @@@ void sqlite3Update }else{ j1 = sqlite3VdbeAddOp3(v, OP_NotExists, iDataCur, 0, regOldRowid); } + VdbeCoverageNeverTaken(v); } sqlite3GenerateRowIndexDelete(pParse, pTab, iDataCur, iIdxCur, aRegIdx); - - /* If changing the record number, delete the old record. */ - if( hasFK || chngKey || pPk!=0 ){ - sqlite3VdbeAddOp2(v, OP_Delete, iDataCur, 0); + + /* If changing the rowid value, or if there are foreign key constraints + ** to process, delete the old record. Otherwise, add a noop OP_Delete + ** to invoke the pre-update hook. + ** + ** That (regNew==regnewRowid+1) is true is also important for the + ** pre-update hook. If the caller invokes preupdate_new(), the returned + ** value is copied from memory cell (regNewRowid+1+iCol), where iCol + ** is the column index supplied by the user. + */ + assert( regNew==regNewRowid+1 ); + sqlite3VdbeAddOp3(v, OP_Delete, iDataCur, + OPFLAG_ISUPDATE | ((hasFK || chngKey || pPk!=0) ? 0 : OPFLAG_ISNOOP), + regNewRowid + ); + if( !pParse->nested ){ + sqlite3VdbeChangeP4(v, -1, (char*)pTab, P4_TABLE); } if( bReplace || chngKey ){ sqlite3VdbeJumpHere(v, j1); diff --cc src/vdbe.c index f0ced58f8c,d54a96a11b..16ec099b58 --- a/src/vdbe.c +++ b/src/vdbe.c @@@ -4117,32 -4132,6 +4167,31 @@@ case OP_Delete: rc = sqlite3VdbeCursorMoveto(pC); if( NEVER(rc!=SQLITE_OK) ) goto abort_due_to_error; + /* If the update-hook or pre-update-hook will be invoked, set iKey to + ** the rowid of the row being deleted. Set zDb and zTab as well. + */ + if( pOp->p4.z && HAS_UPDATE_HOOK(db) ){ + assert( pC->iDb>=0 ); + assert( pC->rowidIsValid || !HasRowid(pOp->p4.pTab) ); + iKey = pC->lastRowid; + zDb = db->aDb[pC->iDb].zName; + pTab = pOp->p4.pTab; + } + +#ifdef SQLITE_ENABLE_PREUPDATE_HOOK + /* Invoke the pre-update-hook if required. */ + if( db->xPreUpdateCallback && pOp->p4.z && HasRowid(pTab) ){ + assert( !(opflags & OPFLAG_ISUPDATE) || (aMem[pOp->p3].flags & MEM_Int) ); + sqlite3VdbePreUpdateHook(p, pC, + (opflags & OPFLAG_ISUPDATE) ? SQLITE_UPDATE : SQLITE_DELETE, + zDb, pTab, iKey, + pOp->p3 + ); + } +#endif + + if( opflags & OPFLAG_ISNOOP ) break; + - sqlite3BtreeSetCachedRowid(pC->pCursor, 0); rc = sqlite3BtreeDelete(pC->pCursor); pC->cacheStatus = CACHE_STALE; diff --cc tool/mksqlite3c.tcl index f864bfaebd,7a4fe1b389..96497c8609 --- a/tool/mksqlite3c.tcl +++ b/tool/mksqlite3c.tcl @@@ -122,8 -121,6 +122,7 @@@ foreach hdr set available_hdr($hdr) 1 } set available_hdr(sqliteInt.h) 0 +set available_hdr(sqlite3session.h) 0 - set available_hdr(sqlite3.h) 0 # 78 stars used for comment formatting. set s78 \