1
0
mirror of https://github.com/sqlite/sqlite.git synced 2026-01-06 08:01:16 +03:00

Small performance improvement for the new %#Q conversion in printf.

FossilOrigin-Name: 17e440781e68d7d3ea68c5144e1e08e183f0caef595a6c7ac4ce56489c60f476
This commit is contained in:
drh
2025-02-25 12:18:27 +00:00
parent a357a90f12
commit d4c686ed8f
3 changed files with 24 additions and 20 deletions

View File

@@ -1,5 +1,5 @@
C Consolidate\stwo\sdifferent\sUTF8\sencoders\sinto\sa\ssingle\ssubroutine.
D 2025-02-25T11:47:34.550
C Small\sperformance\simprovement\sfor\sthe\snew\s%#Q\sconversion\sin\sprintf.
D 2025-02-25T12:18:27.029
F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1
F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea
F LICENSE.md e108e1e69ae8e8a59e93c455654b8ac9356a11720d3345df2a4743e9590fb20d
@@ -777,7 +777,7 @@ F src/pcache.h 1497ce1b823cf00094bb0cf3bac37b345937e6f910890c626b16512316d3abf5
F src/pcache1.c 78d4935e510f7bed0fdd1a3f742c0e663b36a795f9dc7411161dc22bdae1245e
F src/pragma.c c7ada272232e1182c4536d9637fa7b955a10bc1bd8d5a87d4dc9309dab827791
F src/prepare.c 1832be043fce7d489959aae6f994c452d023914714c4d5457beaed51c0f3d126
F src/printf.c b6056bd2818523255255af34d370e2665b4895e50476955de797368d92f8f31f
F src/printf.c b373a8800e09fb888497b2bc640e455ee8ebc584a60f16368989394d5b895ac0
F src/random.c 606b00941a1d7dd09c381d3279a058d771f406c5213c9932bbd93d5587be4b9c
F src/resolve.c 626c24b258b111f75c22107aa5614ad89810df3026f5ca071116d3fe75925c75
F src/rowset.c 8432130e6c344b3401a8874c3cb49fefe6873fec593294de077afea2dce5ec97
@@ -2211,8 +2211,8 @@ F tool/version-info.c 3b36468a90faf1bbd59c65fd0eb66522d9f941eedd364fabccd7227350
F tool/warnings-clang.sh bbf6a1e685e534c92ec2bfba5b1745f34fb6f0bc2a362850723a9ee87c1b31a7
F tool/warnings.sh 49a486c5069de041aedcbde4de178293e0463ae9918ecad7539eedf0ec77a139
F tool/win/sqlite.vsix deb315d026cc8400325c5863eef847784a219a2f
P c3949852cee320c2e02123b99c33155c459b10b2ac8e4fe80b1b7624c9ce0817
R 783f95f7f826d114483ba4d9a5fea8e7
P 6208e494858b9d362efc7db4e8aac6f8e93fe51d2e038c94dfa97c55a74688a0
R 5e3cbac5c36e856b76f244c18c63cff3
U drh
Z 0a01b2d715a4d18665f9611e7764aecb
Z 71404ee027b8adeecdc3ccec4e60e22e
# Remove this line to create a well-formed Fossil manifest.

View File

@@ -1 +1 @@
6208e494858b9d362efc7db4e8aac6f8e93fe51d2e038c94dfa97c55a74688a0
17e440781e68d7d3ea68c5144e1e08e183f0caef595a6c7ac4ce56489c60f476

View File

@@ -757,7 +757,7 @@ void sqlite3_str_vappendf(
case etESCAPE_Q: /* %Q: Escape ' and enclose in '...' */
case etESCAPE_w: { /* %w: Escape " characters */
i64 i, j, k, n;
int isnull, needQuote = 0;
int needQuote = 0;
char ch;
char *escarg;
char q;
@@ -767,18 +767,17 @@ void sqlite3_str_vappendf(
}else{
escarg = va_arg(ap,char*);
}
isnull = escarg==0;
if( escarg==0 ){
escarg = (xtype==etESCAPE_Q ? "NULL" : "(NULL)");
}else if( xtype==etESCAPE_Q ){
needQuote = 1;
}
if( xtype==etESCAPE_w ){
q = '"';
flag_alternateform = 0;
}else{
q = '\'';
}
if( isnull ){
escarg = (xtype==etESCAPE_Q ? "NULL" : "(NULL)");
}else if( xtype==etESCAPE_Q ){
needQuote = 1;
}
/* For %q, %Q, and %w, the precision is the number of bytes (or
** characters if the ! flags is present) to use from the input.
** Because of the extra quoting characters inserted, the number
@@ -832,12 +831,12 @@ void sqlite3_str_vappendf(
}
}
k = i;
for(i=0; i<k; i++){
bufpt[j++] = ch = escarg[i];
if( ch==q ){
bufpt[j++] = ch;
}else if( flag_alternateform ){
if( ch=='\\' ){
if( flag_alternateform ){
for(i=0; i<k; i++){
bufpt[j++] = ch = escarg[i];
if( ch==q ){
bufpt[j++] = ch;
}else if( ch=='\\' ){
bufpt[j++] = '\\';
}else if( ch<=0x1f ){
bufpt[j-1] = '\\';
@@ -848,6 +847,11 @@ void sqlite3_str_vappendf(
bufpt[j++] = "0123456789abcdef"[ch&0xf];
}
}
}else{
for(i=0; i<k; i++){
bufpt[j++] = ch = escarg[i];
if( ch==q ) bufpt[j++] = ch;
}
}
if( needQuote ){
bufpt[j++] = '\'';