]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
Performance improvement in sqlite3StrAccumFinish() for the common case where
authordrh <drh@noemail.net>
Fri, 25 Nov 2016 15:11:26 +0000 (15:11 +0000)
committerdrh <drh@noemail.net>
Fri, 25 Nov 2016 15:11:26 +0000 (15:11 +0000)
no memory allocation is required.

FossilOrigin-Name: b6acf5d4ef016326a079463e70e71c2fc95a352d

manifest
manifest.uuid
src/printf.c

index 4349d03c885c5a6bb78e8306f8cef4f956ee0a6e..242a15cf541115142f194ddd5eb4e2853672e540 100644 (file)
--- 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
index 1b68bc8bdce90e25e0d75ebbc4ebe6ba336f8b26..ffa66fcd745d19f916d602aeb54ac83f9020807a 100644 (file)
@@ -1 +1 @@
-6df7c5747e0247b14bf015ef4320ddcf6fccf694
\ No newline at end of file
+b6acf5d4ef016326a079463e70e71c2fc95a352d
\ No newline at end of file
index a888d50b944e72d0a2ca3e307d8e574cd37bd1c3..563f37c6a69037c7aacca5ebb9f142720d2bebe2 100644 (file)
@@ -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;