mirror of
https://github.com/sqlite/sqlite.git
synced 2025-08-08 14:02:16 +03:00
Add the sqlite3ResultStrAccum() internal interface to simplify the
the implementation of functions that return strings. FossilOrigin-Name: e548e9299d3fd6ce5b647cf0dd93ff8e917a5eda43076c6a02389c52640e2e50
This commit is contained in:
@@ -851,28 +851,19 @@ static void statGet(
|
||||
**
|
||||
** I = (K+D-1)/D
|
||||
*/
|
||||
char *z;
|
||||
int i;
|
||||
sqlite3_str sStat; /* Text of the constructed "stat" line */
|
||||
int i; /* Loop counter */
|
||||
|
||||
char *zRet = sqlite3MallocZero( (p->nKeyCol+1)*25 );
|
||||
if( zRet==0 ){
|
||||
sqlite3_result_error_nomem(context);
|
||||
return;
|
||||
}
|
||||
|
||||
sqlite3_snprintf(24, zRet, "%llu",
|
||||
sqlite3StrAccumInit(&sStat, 0, 0, 0, (p->nKeyCol+1)*100);
|
||||
sqlite3_str_appendf(&sStat, "%llu",
|
||||
p->nSkipAhead ? (u64)p->nEst : (u64)p->nRow);
|
||||
z = zRet + sqlite3Strlen30(zRet);
|
||||
for(i=0; i<p->nKeyCol; i++){
|
||||
u64 nDistinct = p->current.anDLt[i] + 1;
|
||||
u64 iVal = (p->nRow + nDistinct - 1) / nDistinct;
|
||||
sqlite3_snprintf(24, z, " %llu", iVal);
|
||||
z += sqlite3Strlen30(z);
|
||||
sqlite3_str_appendf(&sStat, " %llu", iVal);
|
||||
assert( p->current.anEq[i] );
|
||||
}
|
||||
assert( z[0]=='\0' && z>zRet );
|
||||
|
||||
sqlite3_result_text(context, zRet, -1, sqlite3_free);
|
||||
sqlite3ResultStrAccum(context, &sStat);
|
||||
}
|
||||
#ifdef SQLITE_ENABLE_STAT4
|
||||
else if( eCall==STAT_GET_ROWID ){
|
||||
@@ -891,6 +882,8 @@ static void statGet(
|
||||
}
|
||||
}else{
|
||||
tRowcnt *aCnt = 0;
|
||||
sqlite3_str sStat;
|
||||
int i;
|
||||
|
||||
assert( p->iGet<p->nSample );
|
||||
switch( eCall ){
|
||||
@@ -902,23 +895,12 @@ static void statGet(
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
{
|
||||
char *zRet = sqlite3MallocZero(p->nCol * 25);
|
||||
if( zRet==0 ){
|
||||
sqlite3_result_error_nomem(context);
|
||||
}else{
|
||||
int i;
|
||||
char *z = zRet;
|
||||
for(i=0; i<p->nCol; i++){
|
||||
sqlite3_snprintf(24, z, "%llu ", (u64)aCnt[i]);
|
||||
z += sqlite3Strlen30(z);
|
||||
}
|
||||
assert( z[0]=='\0' && z>zRet );
|
||||
z[-1] = '\0';
|
||||
sqlite3_result_text(context, zRet, -1, sqlite3_free);
|
||||
}
|
||||
sqlite3StrAccumInit(&sStat, 0, 0, 0, p->nCol*100);
|
||||
for(i=0; i<p->nCol; i++){
|
||||
sqlite3_str_appendf(&sStat, "%llu ", (u64)aCnt[i]);
|
||||
}
|
||||
if( sStat.nChar ) sStat.nChar--;
|
||||
sqlite3ResultStrAccum(context, &sStat);
|
||||
}
|
||||
#endif /* SQLITE_ENABLE_STAT4 */
|
||||
#ifndef SQLITE_DEBUG
|
||||
|
Reference in New Issue
Block a user