From: drh Date: Fri, 25 Nov 2016 15:11:26 +0000 (+0000) Subject: Performance improvement in sqlite3StrAccumFinish() for the common case where X-Git-Tag: version-3.16.0~102 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=043e586e29572d447302fd95987d673d5f0438b7;p=thirdparty%2Fsqlite.git Performance improvement in sqlite3StrAccumFinish() for the common case where no memory allocation is required. FossilOrigin-Name: b6acf5d4ef016326a079463e70e71c2fc95a352d --- diff --git a/manifest b/manifest index 4349d03c88..242a15cf54 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Add\sa\scomment\sto\shelp\sclarify\sthe\sEP_FromJoin\shack\sin\sexprCodeBetween(). -D 2016-11-25T14:30:42.666 +C Performance\simprovement\sin\ssqlite3StrAccumFinish()\sfor\sthe\scommon\scase\swhere\nno\smemory\sallocation\sis\srequired. +D 2016-11-25T15:11:26.619 F Makefile.in 6b572807415d3f0a379cebc9461416d8df4a12c8 F Makefile.linux-gcc 7bc79876b875010e8c8f9502eb935ca92aa3c434 F Makefile.msc bb4d970894abbbe0e88d00aac29bd52af8bc95f4 @@ -383,7 +383,7 @@ F src/pcache1.c e3967219b2a92b9edcb9324a4ba75009090d3953 F src/pragma.c d932ba278654617cdd281f88a790a3185fca7c44 F src/pragma.h 64c78a648751b9f4f297276c4eb7507b14b4628c F src/prepare.c b1140c3d0cf59bc85ace00ce363153041b424b7a -F src/printf.c a5f0ca08ddede803c241266abb46356ec748ded1 +F src/printf.c 8a76e8e9b44a282bd78f5a4113e4dec233c3dfff F src/random.c ba2679f80ec82c4190062d756f22d0c358180696 F src/resolve.c bb070cf5f23611c44ab7e4788803684e385fc3fb F src/rowset.c 7b7e7e479212e65b723bf40128c7b36dc5afdfac @@ -1534,7 +1534,7 @@ F vsixtest/vsixtest.tcl 6a9a6ab600c25a91a7acc6293828957a386a8a93 F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0 -P 9a603a18ef626b7d7a24b82eb961d6d8b4926195 -R ef9f01036377c9e5a69b01dd8a74832e +P 6df7c5747e0247b14bf015ef4320ddcf6fccf694 +R 52321675b69054515968315ac6e47ed5 U drh -Z 1cc8fc31dc9cfa12819270a952431b2f +Z 9d212a5ec3719e9483eacdb11891359b diff --git a/manifest.uuid b/manifest.uuid index 1b68bc8bdc..ffa66fcd74 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -6df7c5747e0247b14bf015ef4320ddcf6fccf694 \ No newline at end of file +b6acf5d4ef016326a079463e70e71c2fc95a352d \ No newline at end of file diff --git a/src/printf.c b/src/printf.c index a888d50b94..563f37c6a6 100644 --- a/src/printf.c +++ b/src/printf.c @@ -861,18 +861,23 @@ void sqlite3StrAccumAppendAll(StrAccum *p, const char *z){ ** Return a pointer to the resulting string. Return a NULL ** pointer if any kind of error was encountered. */ +static SQLITE_NOINLINE char *strAccumFinishRealloc(StrAccum *p){ + assert( p->mxAlloc>0 && !isMalloced(p) ); + p->zText = sqlite3DbMallocRaw(p->db, p->nChar+1 ); + if( p->zText ){ + memcpy(p->zText, p->zBase, p->nChar+1); + p->printfFlags |= SQLITE_PRINTF_MALLOCED; + }else{ + setStrAccumError(p, STRACCUM_NOMEM); + } + return p->zText; +} char *sqlite3StrAccumFinish(StrAccum *p){ if( p->zText ){ assert( (p->zText==p->zBase)==!isMalloced(p) ); p->zText[p->nChar] = 0; if( p->mxAlloc>0 && !isMalloced(p) ){ - p->zText = sqlite3DbMallocRaw(p->db, p->nChar+1 ); - if( p->zText ){ - memcpy(p->zText, p->zBase, p->nChar+1); - p->printfFlags |= SQLITE_PRINTF_MALLOCED; - }else{ - setStrAccumError(p, STRACCUM_NOMEM); - } + return strAccumFinishRealloc(p); } } return p->zText;