Add the ".scanstats on" command to the shell tool. Executing this command causes the shell tool to print values from sqlite3_stmt_scanstatus() after each query is run.
FossilOrigin-Name: 7974c0ed10ffdc960a43fed89845c2bed428958d
This commit is contained in:
parent
547fb61807
commit
8d1edb92c4
14
manifest
14
manifest
@ -1,5 +1,5 @@
|
|||||||
C Improved\soutput\sformatting\sfor\sthe\sshowstat4\stool.
|
C Add\sthe\s".scanstats\son"\scommand\sto\sthe\sshell\stool.\sExecuting\sthis\scommand\scauses\sthe\sshell\stool\sto\sprint\svalues\sfrom\ssqlite3_stmt_scanstatus()\safter\seach\squery\sis\srun.
|
||||||
D 2014-11-04T21:38:45.383
|
D 2014-11-05T09:07:28.365
|
||||||
F Makefile.arm-wince-mingw32ce-gcc d6df77f1f48d690bd73162294bbba7f59507c72f
|
F Makefile.arm-wince-mingw32ce-gcc d6df77f1f48d690bd73162294bbba7f59507c72f
|
||||||
F Makefile.in cf57f673d77606ab0f2d9627ca52a9ba1464146a
|
F Makefile.in cf57f673d77606ab0f2d9627ca52a9ba1464146a
|
||||||
F Makefile.linux-gcc 91d710bdc4998cb015f39edf3cb314ec4f4d7e23
|
F Makefile.linux-gcc 91d710bdc4998cb015f39edf3cb314ec4f4d7e23
|
||||||
@ -228,7 +228,7 @@ F src/random.c ba2679f80ec82c4190062d756f22d0c358180696
|
|||||||
F src/resolve.c 4965007d6497b6a4d7a6d98751cc39712885f952
|
F src/resolve.c 4965007d6497b6a4d7a6d98751cc39712885f952
|
||||||
F src/rowset.c eccf6af6d620aaa4579bd3b72c1b6395d9e9fa1e
|
F src/rowset.c eccf6af6d620aaa4579bd3b72c1b6395d9e9fa1e
|
||||||
F src/select.c 428165951748151e87a15295b7357221433e311b
|
F src/select.c 428165951748151e87a15295b7357221433e311b
|
||||||
F src/shell.c 282f8f5278e0c78eb442217531172ec9e1538796
|
F src/shell.c 5ad1eb4dfcd7a57e15825207a9bd559415bf34b1
|
||||||
F src/sqlite.h.in 6e9af739d79f0bea2584b70fb1c54d3bb1a2eab6
|
F src/sqlite.h.in 6e9af739d79f0bea2584b70fb1c54d3bb1a2eab6
|
||||||
F src/sqlite3.rc 992c9f5fb8285ae285d6be28240a7e8d3a7f2bad
|
F src/sqlite3.rc 992c9f5fb8285ae285d6be28240a7e8d3a7f2bad
|
||||||
F src/sqlite3ext.h 17d487c3c91b0b8c584a32fbeb393f6f795eea7d
|
F src/sqlite3ext.h 17d487c3c91b0b8c584a32fbeb393f6f795eea7d
|
||||||
@ -1211,7 +1211,7 @@ F tool/vdbe_profile.tcl 67746953071a9f8f2f668b73fe899074e2c6d8c1
|
|||||||
F tool/warnings-clang.sh f6aa929dc20ef1f856af04a730772f59283631d4
|
F tool/warnings-clang.sh f6aa929dc20ef1f856af04a730772f59283631d4
|
||||||
F tool/warnings.sh 0abfd78ceb09b7f7c27c688c8e3fe93268a13b32
|
F tool/warnings.sh 0abfd78ceb09b7f7c27c688c8e3fe93268a13b32
|
||||||
F tool/win/sqlite.vsix deb315d026cc8400325c5863eef847784a219a2f
|
F tool/win/sqlite.vsix deb315d026cc8400325c5863eef847784a219a2f
|
||||||
P d423349d2cd8bc7e04f3d90ca7bab11e1ad86e25
|
P 7df82c46da437bc743576358c25e758280067df8
|
||||||
R 3d8e834a0bd7bfcb019dc53478b58f7b
|
R f4931dcb1177b970d566df3dbaa382ec
|
||||||
U drh
|
U dan
|
||||||
Z 0a79c8f46f24bb92a10190eb30b27d6d
|
Z 44baa22d0450fc9fcacf5946d93d71c5
|
||||||
|
@ -1 +1 @@
|
|||||||
7df82c46da437bc743576358c25e758280067df8
|
7974c0ed10ffdc960a43fed89845c2bed428958d
|
54
src/shell.c
54
src/shell.c
@ -457,6 +457,7 @@ struct ShellState {
|
|||||||
int echoOn; /* True to echo input commands */
|
int echoOn; /* True to echo input commands */
|
||||||
int autoEQP; /* Run EXPLAIN QUERY PLAN prior to seach SQL stmt */
|
int autoEQP; /* Run EXPLAIN QUERY PLAN prior to seach SQL stmt */
|
||||||
int statsOn; /* True to display memory stats before each finalize */
|
int statsOn; /* True to display memory stats before each finalize */
|
||||||
|
int scanstatsOn; /* True to display scan stats before each finalize */
|
||||||
int outCount; /* Revert to stdout when reaching zero */
|
int outCount; /* Revert to stdout when reaching zero */
|
||||||
int cnt; /* Number of records displayed so far */
|
int cnt; /* Number of records displayed so far */
|
||||||
FILE *out; /* Write results here */
|
FILE *out; /* Write results here */
|
||||||
@ -1185,6 +1186,42 @@ static int display_stats(
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
** Display scan stats.
|
||||||
|
*/
|
||||||
|
static void display_scanstats(
|
||||||
|
sqlite3 *db, /* Database to query */
|
||||||
|
ShellState *pArg /* Pointer to ShellState */
|
||||||
|
){
|
||||||
|
#ifdef SQLITE_ENABLE_STMT_SCANSTATUS
|
||||||
|
int i;
|
||||||
|
fprintf(pArg->out, "-------- scanstats --------\n");
|
||||||
|
for(i=0; 1; i++){
|
||||||
|
sqlite3_stmt *p = pArg->pStmt;
|
||||||
|
sqlite3_int64 nEst, nLoop, nVisit;
|
||||||
|
const char *zExplain;
|
||||||
|
if( sqlite3_stmt_scanstatus(p, i, SQLITE_SCANSTAT_NLOOP, (void*)&nLoop) ){
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
sqlite3_stmt_scanstatus(p, i, SQLITE_SCANSTAT_NVISIT, (void*)&nVisit);
|
||||||
|
sqlite3_stmt_scanstatus(p, i, SQLITE_SCANSTAT_EST, (void*)&nEst);
|
||||||
|
sqlite3_stmt_scanstatus(p, i, SQLITE_SCANSTAT_EXPLAIN, (void*)&zExplain);
|
||||||
|
|
||||||
|
fprintf(pArg->out, "Loop %d: \"%s\"\n", i, zExplain);
|
||||||
|
fprintf(pArg->out, " nLoop=%-8lld nVisit=%-8lld nEst=%-8lld\n",
|
||||||
|
nLoop, nVisit, nEst
|
||||||
|
);
|
||||||
|
}
|
||||||
|
#else
|
||||||
|
fprintf(pArg->out, "-------- scanstats --------\n");
|
||||||
|
fprintf(pArg->out,
|
||||||
|
"sqlite3_stmt_scanstatus() unavailable - "
|
||||||
|
"rebuild with SQLITE_ENABLE_STMT_SCANSTATUS\n"
|
||||||
|
);
|
||||||
|
#endif
|
||||||
|
fprintf(pArg->out, "---------------------------\n");
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
** Parameter azArray points to a zero-terminated array of strings. zStr
|
** Parameter azArray points to a zero-terminated array of strings. zStr
|
||||||
** points to a single nul-terminated string. Return non-zero if zStr
|
** points to a single nul-terminated string. Return non-zero if zStr
|
||||||
@ -1423,6 +1460,11 @@ static int shell_exec(
|
|||||||
display_stats(db, pArg, 0);
|
display_stats(db, pArg, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* print loop-counters if required */
|
||||||
|
if( pArg && pArg->scanstatsOn ){
|
||||||
|
display_scanstats(db, pArg);
|
||||||
|
}
|
||||||
|
|
||||||
/* Finalize the statement just executed. If this fails, save a
|
/* Finalize the statement just executed. If this fails, save a
|
||||||
** copy of the error message. Otherwise, set zSql to point to the
|
** copy of the error message. Otherwise, set zSql to point to the
|
||||||
** next statement to execute. */
|
** next statement to execute. */
|
||||||
@ -3014,6 +3056,16 @@ static int do_meta_command(char *zLine, ShellState *p){
|
|||||||
sqlite3_close(pSrc);
|
sqlite3_close(pSrc);
|
||||||
}else
|
}else
|
||||||
|
|
||||||
|
|
||||||
|
if( c=='s' && strncmp(azArg[0], "scanstats", n)==0 ){
|
||||||
|
if( nArg==2 ){
|
||||||
|
p->scanstatsOn = booleanValue(azArg[1]);
|
||||||
|
}else{
|
||||||
|
fprintf(stderr, "Usage: .scanstats on|off\n");
|
||||||
|
rc = 1;
|
||||||
|
}
|
||||||
|
}else
|
||||||
|
|
||||||
if( c=='s' && strncmp(azArg[0], "schema", n)==0 ){
|
if( c=='s' && strncmp(azArg[0], "schema", n)==0 ){
|
||||||
ShellState data;
|
ShellState data;
|
||||||
char *zErrMsg = 0;
|
char *zErrMsg = 0;
|
||||||
@ -4140,6 +4192,8 @@ int main(int argc, char **argv){
|
|||||||
data.autoEQP = 1;
|
data.autoEQP = 1;
|
||||||
}else if( strcmp(z,"-stats")==0 ){
|
}else if( strcmp(z,"-stats")==0 ){
|
||||||
data.statsOn = 1;
|
data.statsOn = 1;
|
||||||
|
}else if( strcmp(z,"-scanstats")==0 ){
|
||||||
|
data.scanstatsOn = 1;
|
||||||
}else if( strcmp(z,"-bail")==0 ){
|
}else if( strcmp(z,"-bail")==0 ){
|
||||||
bail_on_error = 1;
|
bail_on_error = 1;
|
||||||
}else if( strcmp(z,"-version")==0 ){
|
}else if( strcmp(z,"-version")==0 ){
|
||||||
|
Loading…
Reference in New Issue
Block a user