]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
Performance enhancement in sqlite3VdbeMemNulTerminate().
authordrh <drh@noemail.net>
Wed, 27 Aug 2014 00:50:11 +0000 (00:50 +0000)
committerdrh <drh@noemail.net>
Wed, 27 Aug 2014 00:50:11 +0000 (00:50 +0000)
FossilOrigin-Name: f94cacc393e895522b92c9717c53357afc918d60

manifest
manifest.uuid
src/vdbemem.c

index 80f1fa7f2b5ec2075e83c4fcbc1cb885bce9f1c5..5a5dcce8606269b7a2dde4182f5188a32c16a064 100644 (file)
--- a/manifest
+++ b/manifest
@@ -1,5 +1,5 @@
-C Change\sthe\spage\scache\sso\sthat\sa\snew\ssqlite3_pcache\sobject\sis\sallocated\sas\nsoon\sas\sthe\spage\scache\sis\sopened,\snot\sdelayed\suntil\sthe\sfirst\sfetch\srequest.\nThis\sgive\sa\snoticable\sperformance\sboost.\s\sThe\sinterface\sbetween\spager\sand\nthe\spage\scache\shas\schanged\sslightly,\swhich\smight\sbreak\sZIPVFS.
-D 2014-08-26T15:06:49.829
+C Performance\senhancement\sin\ssqlite3VdbeMemNulTerminate().
+D 2014-08-27T00:50:11.231
 F Makefile.arm-wince-mingw32ce-gcc d6df77f1f48d690bd73162294bbba7f59507c72f
 F Makefile.in 5eb79e334a5de69c87740edd56af6527dd219308
 F Makefile.linux-gcc 91d710bdc4998cb015f39edf3cb314ec4f4d7e23
@@ -290,7 +290,7 @@ F src/vdbeInt.h df58400454823954cfb241e5858f07f37fc1fd78
 F src/vdbeapi.c cda974083d7597f807640d344ffcf76d872201ce
 F src/vdbeaux.c dba006f67c9fd1b1d07ee7fb0fb38aa1905161d1
 F src/vdbeblob.c 848238dc73e93e48432991bb5651bf87d865eca4
-F src/vdbemem.c 4e08ea087aea367dae7c45129b75487e0056e819
+F src/vdbemem.c 39cde2d8ddaa391055885caba9cb137ec2750474
 F src/vdbesort.c f7f5563bf7d4695ca8f3203f3bf9de96d04ed0b3
 F src/vdbetrace.c 6f52bc0c51e144b7efdcfb2a8f771167a8816767
 F src/vtab.c 019dbfd0406a7447c990e1f7bd1dfcdb8895697f
@@ -1188,7 +1188,7 @@ F tool/vdbe_profile.tcl 67746953071a9f8f2f668b73fe899074e2c6d8c1
 F tool/warnings-clang.sh f6aa929dc20ef1f856af04a730772f59283631d4
 F tool/warnings.sh 0abfd78ceb09b7f7c27c688c8e3fe93268a13b32
 F tool/win/sqlite.vsix deb315d026cc8400325c5863eef847784a219a2f
-P af364cce9da0961593ef876b646197f82df08ad5
-R e52a11dddfc2629a8399ec2b801365c3
+P f1f94a971e031e784f8c30a6faf829df58709329
+R a4b7581e490aa7d71b634e963210e5ae
 U drh
-Z 1a77b3226c1f56b49ad44674617b7aa6
+Z d9bb31c0fee81f84beaf0ed2a801edba
index ea22adc369a21104a730733b230b543c46eb0230..44b2a27745e01b8bc56e8500e7af5434c7bc0798 100644 (file)
@@ -1 +1 @@
-f1f94a971e031e784f8c30a6faf829df58709329
\ No newline at end of file
+f94cacc393e895522b92c9717c53357afc918d60
\ No newline at end of file
index e4012593da83190f0145d103dbd49375bcc9a4f9..8457aa0da60083dc84b04b8ddc45d23ee3415735 100644 (file)
@@ -200,15 +200,11 @@ int sqlite3VdbeMemExpandBlob(Mem *pMem){
 }
 #endif
 
-
 /*
-** Make sure the given Mem is \u0000 terminated.
+** It is already known that pMem contains an unterminated string.
+** Add the zero terminator.
 */
-int sqlite3VdbeMemNulTerminate(Mem *pMem){
-  assert( pMem->db==0 || sqlite3_mutex_held(pMem->db->mutex) );
-  if( (pMem->flags & MEM_Term)!=0 || (pMem->flags & MEM_Str)==0 ){
-    return SQLITE_OK;   /* Nothing to do */
-  }
+static SQLITE_NOINLINE int vdbeMemAddTerminator(Mem *pMem){
   if( sqlite3VdbeMemGrow(pMem, pMem->n+2, 1) ){
     return SQLITE_NOMEM;
   }
@@ -218,6 +214,20 @@ int sqlite3VdbeMemNulTerminate(Mem *pMem){
   return SQLITE_OK;
 }
 
+/*
+** Make sure the given Mem is \u0000 terminated.
+*/
+int sqlite3VdbeMemNulTerminate(Mem *pMem){
+  assert( pMem->db==0 || sqlite3_mutex_held(pMem->db->mutex) );
+  testcase( (pMem->flags & (MEM_Term|MEM_Str))==(MEM_Term|MEM_Str) );
+  testcase( (pMem->flags & (MEM_Term|MEM_Str))==0 );
+  if( (pMem->flags & (MEM_Term|MEM_Str))!=MEM_Str ){
+    return SQLITE_OK;   /* Nothing to do */
+  }else{
+    return vdbeMemAddTerminator(pMem);
+  }
+}
+
 /*
 ** Add MEM_Str to the set of representations for the given Mem.  Numbers
 ** are converted using sqlite3_snprintf().  Converting a BLOB to a string