diff options
author | drh <drh@noemail.net> | 2015-09-02 21:00:48 +0000 |
---|---|---|
committer | drh <drh@noemail.net> | 2015-09-02 21:00:48 +0000 |
commit | 2a8f67124484efd84f0e87e9090f2c1e1c2f31cd (patch) | |
tree | 54ff5bbb7a32808ea576efeaa65acfb0a383ffce /src | |
parent | 0ff287fb0137268f9f7658cf17b44bb6937f1d0c (diff) | |
download | sqlite-2a8f67124484efd84f0e87e9090f2c1e1c2f31cd.tar.gz sqlite-2a8f67124484efd84f0e87e9090f2c1e1c2f31cd.zip |
Optimizations to the printf formatter.
FossilOrigin-Name: a3b35ddeca8f459e81105ab6477f3c5afb9b96d5
Diffstat (limited to 'src')
-rw-r--r-- | src/printf.c | 26 |
1 files changed, 11 insertions, 15 deletions
diff --git a/src/printf.c b/src/printf.c index cec5ad44c..dba928d10 100644 --- a/src/printf.c +++ b/src/printf.c @@ -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 ){ |