mirror of
https://github.com/sqlite/sqlite.git
synced 2025-11-14 00:22:38 +03:00
Performance improvement in sqlite3StrAccumFinish() for the common case where
no memory allocation is required. FossilOrigin-Name: b6acf5d4ef016326a079463e70e71c2fc95a352d
This commit is contained in:
12
manifest
12
manifest
@@ -1,5 +1,5 @@
|
|||||||
C Add\sa\scomment\sto\shelp\sclarify\sthe\sEP_FromJoin\shack\sin\sexprCodeBetween().
|
C Performance\simprovement\sin\ssqlite3StrAccumFinish()\sfor\sthe\scommon\scase\swhere\nno\smemory\sallocation\sis\srequired.
|
||||||
D 2016-11-25T14:30:42.666
|
D 2016-11-25T15:11:26.619
|
||||||
F Makefile.in 6b572807415d3f0a379cebc9461416d8df4a12c8
|
F Makefile.in 6b572807415d3f0a379cebc9461416d8df4a12c8
|
||||||
F Makefile.linux-gcc 7bc79876b875010e8c8f9502eb935ca92aa3c434
|
F Makefile.linux-gcc 7bc79876b875010e8c8f9502eb935ca92aa3c434
|
||||||
F Makefile.msc bb4d970894abbbe0e88d00aac29bd52af8bc95f4
|
F Makefile.msc bb4d970894abbbe0e88d00aac29bd52af8bc95f4
|
||||||
@@ -383,7 +383,7 @@ F src/pcache1.c e3967219b2a92b9edcb9324a4ba75009090d3953
|
|||||||
F src/pragma.c d932ba278654617cdd281f88a790a3185fca7c44
|
F src/pragma.c d932ba278654617cdd281f88a790a3185fca7c44
|
||||||
F src/pragma.h 64c78a648751b9f4f297276c4eb7507b14b4628c
|
F src/pragma.h 64c78a648751b9f4f297276c4eb7507b14b4628c
|
||||||
F src/prepare.c b1140c3d0cf59bc85ace00ce363153041b424b7a
|
F src/prepare.c b1140c3d0cf59bc85ace00ce363153041b424b7a
|
||||||
F src/printf.c a5f0ca08ddede803c241266abb46356ec748ded1
|
F src/printf.c 8a76e8e9b44a282bd78f5a4113e4dec233c3dfff
|
||||||
F src/random.c ba2679f80ec82c4190062d756f22d0c358180696
|
F src/random.c ba2679f80ec82c4190062d756f22d0c358180696
|
||||||
F src/resolve.c bb070cf5f23611c44ab7e4788803684e385fc3fb
|
F src/resolve.c bb070cf5f23611c44ab7e4788803684e385fc3fb
|
||||||
F src/rowset.c 7b7e7e479212e65b723bf40128c7b36dc5afdfac
|
F src/rowset.c 7b7e7e479212e65b723bf40128c7b36dc5afdfac
|
||||||
@@ -1534,7 +1534,7 @@ F vsixtest/vsixtest.tcl 6a9a6ab600c25a91a7acc6293828957a386a8a93
|
|||||||
F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc
|
F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc
|
||||||
F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e
|
F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e
|
||||||
F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0
|
F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0
|
||||||
P 9a603a18ef626b7d7a24b82eb961d6d8b4926195
|
P 6df7c5747e0247b14bf015ef4320ddcf6fccf694
|
||||||
R ef9f01036377c9e5a69b01dd8a74832e
|
R 52321675b69054515968315ac6e47ed5
|
||||||
U drh
|
U drh
|
||||||
Z 1cc8fc31dc9cfa12819270a952431b2f
|
Z 9d212a5ec3719e9483eacdb11891359b
|
||||||
|
|||||||
@@ -1 +1 @@
|
|||||||
6df7c5747e0247b14bf015ef4320ddcf6fccf694
|
b6acf5d4ef016326a079463e70e71c2fc95a352d
|
||||||
19
src/printf.c
19
src/printf.c
@@ -861,18 +861,23 @@ void sqlite3StrAccumAppendAll(StrAccum *p, const char *z){
|
|||||||
** Return a pointer to the resulting string. Return a NULL
|
** Return a pointer to the resulting string. Return a NULL
|
||||||
** pointer if any kind of error was encountered.
|
** 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){
|
char *sqlite3StrAccumFinish(StrAccum *p){
|
||||||
if( p->zText ){
|
if( p->zText ){
|
||||||
assert( (p->zText==p->zBase)==!isMalloced(p) );
|
assert( (p->zText==p->zBase)==!isMalloced(p) );
|
||||||
p->zText[p->nChar] = 0;
|
p->zText[p->nChar] = 0;
|
||||||
if( p->mxAlloc>0 && !isMalloced(p) ){
|
if( p->mxAlloc>0 && !isMalloced(p) ){
|
||||||
p->zText = sqlite3DbMallocRaw(p->db, p->nChar+1 );
|
return strAccumFinishRealloc(p);
|
||||||
if( p->zText ){
|
|
||||||
memcpy(p->zText, p->zBase, p->nChar+1);
|
|
||||||
p->printfFlags |= SQLITE_PRINTF_MALLOCED;
|
|
||||||
}else{
|
|
||||||
setStrAccumError(p, STRACCUM_NOMEM);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return p->zText;
|
return p->zText;
|
||||||
|
|||||||
Reference in New Issue
Block a user