]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
Optimizations to the printf formatter.
authordrh <drh@noemail.net>
Wed, 2 Sep 2015 21:00:48 +0000 (21:00 +0000)
committerdrh <drh@noemail.net>
Wed, 2 Sep 2015 21:00:48 +0000 (21:00 +0000)
FossilOrigin-Name: a3b35ddeca8f459e81105ab6477f3c5afb9b96d5

manifest
manifest.uuid
src/printf.c

index 0d72efafc19ad77b5ad06554f21d7360280f1230..bcdd16fab5b62326c94cd14ae0998b2e278b9cd0 100644 (file)
--- a/manifest
+++ b/manifest
@@ -1,5 +1,5 @@
-C Add\sand\suse\sthe\ssqlite3VdbeChangeOpcode()\sroutine.\s\sSimplify\sthe\simplementation\nof\sthe\sother\ssqlite3VdbeChange*()\sroutines.
-D 2015-09-02T18:40:33.669
+C Optimizations\sto\sthe\sprintf\sformatter.
+D 2015-09-02T21:00:48.651
 F Makefile.arm-wince-mingw32ce-gcc d6df77f1f48d690bd73162294bbba7f59507c72f
 F Makefile.in f85066ce844a28b671aaeeff320921cd0ce36239
 F Makefile.linux-gcc 91d710bdc4998cb015f39edf3cb314ec4f4d7e23
@@ -333,7 +333,7 @@ F src/pcache1.c b31af9dbc83b9c68e87d681b8453a9605f28e734
 F src/pragma.c 5d84bdb3798dddb4828a3e4925f53840ff06bb82
 F src/pragma.h 631a91c8b0e6ca8f051a1d8a4a0da4150e04620a
 F src/prepare.c 82e5db1013846a819f198336fed72c44c974e7b1
-F src/printf.c e66737e0e460aa7a765d1dbc3834c1ed91fbf36b
+F src/printf.c 0c4bcdd1c2e2521024f0a69cb5eb334f86b3652a
 F src/random.c ba2679f80ec82c4190062d756f22d0c358180696
 F src/resolve.c f2ef256786a6435efddd64a632fea89c8be62215
 F src/rowset.c eccf6af6d620aaa4579bd3b72c1b6395d9e9fa1e
@@ -1380,7 +1380,7 @@ F tool/vdbe_profile.tcl 67746953071a9f8f2f668b73fe899074e2c6d8c1
 F tool/warnings-clang.sh f6aa929dc20ef1f856af04a730772f59283631d4
 F tool/warnings.sh 48bd54594752d5be3337f12c72f28d2080cb630b
 F tool/win/sqlite.vsix deb315d026cc8400325c5863eef847784a219a2f
-P be78f413df1b0d874b44a866ef6bf17543d7e8a2
-R 138106b5d1592d7b3ab07c4b2a8bef1c
+P 0a5b00e493efae58252f9fc7bde5a469645942d5
+R c3f6d7912ae748700d66714a924c7560
 U drh
-Z b950fd2bf2820566755471b0217b6e9b
+Z 20ed1b27f691567d47268151076d8428
index 08692eb9716d8518e6c3dd4e8b88c5fca8c457fd..c4bc82b336a9a5a0fc69cebfa9dff40d2678b73d 100644 (file)
@@ -1 +1 @@
-0a5b00e493efae58252f9fc7bde5a469645942d5
\ No newline at end of file
+a3b35ddeca8f459e81105ab6477f3c5afb9b96d5
\ No newline at end of file
index cec5ad44cace367735f4645ed6f7ddd5b58f9669..dba928d102be37d55ffd0db40d79bd216194dce9 100644 (file)
@@ -468,21 +468,16 @@ void sqlite3VXPrintf(
         if( realvalue>0.0 ){
           LONGDOUBLE_TYPE scale = 1.0;
           while( realvalue>=1e100*scale && exp<=350 ){ scale *= 1e100;exp+=100;}
-          while( realvalue>=1e64*scale && exp<=350 ){ scale *= 1e64; exp+=64; }
-          while( realvalue>=1e8*scale && exp<=350 ){ scale *= 1e8; exp+=8; }
+          while( realvalue>=1e10*scale && exp<=350 ){ scale *= 1e10; exp+=10; }
           while( realvalue>=10.0*scale && exp<=350 ){ scale *= 10.0; exp++; }
           realvalue /= scale;
           while( realvalue<1e-8 ){ realvalue *= 1e8; exp-=8; }
           while( realvalue<1.0 ){ realvalue *= 10.0; exp--; }
           if( exp>350 ){
-            if( prefix=='-' ){
-              bufpt = "-Inf";
-            }else if( prefix=='+' ){
-              bufpt = "+Inf";
-            }else{
-              bufpt = "Inf";
-            }
-            length = sqlite3Strlen30(bufpt);
+            bufpt = buf;
+            buf[0] = prefix;
+            memcpy(buf+(prefix!=0),"Inf",4);
+            length = 3+(prefix!=0);
             break;
           }
         }
@@ -631,12 +626,13 @@ void sqlite3VXPrintf(
       case etDYNSTRING:
         if( bArgList ){
           bufpt = getTextArg(pArgList);
+          xtype = etSTRING;
         }else{
           bufpt = va_arg(ap,char*);
         }
         if( bufpt==0 ){
           bufpt = "";
-        }else if( xtype==etDYNSTRING && !bArgList ){
+        }else if( xtype==etDYNSTRING ){
           zExtra = bufpt;
         }
         if( precision>=0 ){
@@ -645,9 +641,9 @@ void sqlite3VXPrintf(
           length = sqlite3Strlen30(bufpt);
         }
         break;
-      case etSQLESCAPE:
-      case etSQLESCAPE2:
-      case etSQLESCAPE3: {
+      case etSQLESCAPE:           /* Escape ' characters */
+      case etSQLESCAPE2:          /* Escape ' and enclose in '...' */
+      case etSQLESCAPE3: {        /* Escape " characters */
         int i, j, k, n, isnull;
         int needQuote;
         char ch;
@@ -666,7 +662,7 @@ void sqlite3VXPrintf(
           if( ch==q )  n++;
         }
         needQuote = !isnull && xtype==etSQLESCAPE2;
-        n += i + 1 + needQuote*2;
+        n += i + 3;
         if( n>etBUFSIZE ){
           bufpt = zExtra = sqlite3Malloc( n );
           if( bufpt==0 ){