Add a new (experimental) sqlite3_stmt_status() verb that returns the number

of VM steps.

FossilOrigin-Name: f1366bab737a3ac2ea20a0ec014cc306d7ded8a5
This commit is contained in:
drh 2013-06-25 22:01:22 +00:00
parent adbae616bd
commit bf159fa21b
7 changed files with 32 additions and 13 deletions

View File

@ -1,5 +1,5 @@
C Remove\san\sunused\sfunction\sdeclaration\sfrom\sthe\sFTS3\ssource\scode.
D 2013-06-21T18:36:44.416
C Add\sa\snew\s(experimental)\ssqlite3_stmt_status()\sverb\sthat\sreturns\sthe\snumber\nof\sVM\ssteps.
D 2013-06-25T22:01:22.917
F Makefile.arm-wince-mingw32ce-gcc d6df77f1f48d690bd73162294bbba7f59507c72f
F Makefile.in 5e41da95d92656a5004b03d3576e8b226858a28e
F Makefile.linux-gcc 91d710bdc4998cb015f39edf3cb314ec4f4d7e23
@ -216,8 +216,8 @@ F src/random.c cd4a67b3953b88019f8cd4ccd81394a8ddfaba50
F src/resolve.c 89f9003e8316ee3a172795459efc2a0274e1d5a8
F src/rowset.c 64655f1a627c9c212d9ab497899e7424a34222e0
F src/select.c 22ee971346a736ddefdc4497d07c92f2e9978afc
F src/shell.c ab6eea968c8745be3aa74e45fedb37d057b4cd0d
F src/sqlite.h.in 5b390ca5d94e09e56e7fee6a51ddde4721b89f8e
F src/shell.c a02544af6697c5782d29ec3204616f35ed9e8458
F src/sqlite.h.in 5f86553f4c1d8b4a9069285ed19e7981451ea77a
F src/sqlite3.rc fea433eb0a59f4c9393c8e6d76a6e2596b1fe0c0
F src/sqlite3ext.h d936f797812c28b81b26ed18345baf8db28a21a5
F src/sqliteInt.h 46fb17f604ce941551fe64c342dbeb4dbed3edaa
@ -225,7 +225,7 @@ F src/sqliteLimit.h 164b0e6749d31e0daa1a4589a169d31c0dec7b3d
F src/status.c bedc37ec1a6bb9399944024d63f4c769971955a9
F src/table.c 2cd62736f845d82200acfa1287e33feb3c15d62e
F src/tclsqlite.c b8835978e853a89bf58de88acc943a5ca94d752e
F src/test1.c 6d2a340eea1d866bf7059894491652a69a7ee802
F src/test1.c d94d55d85e7250fa3493585635811c584b1d05be
F src/test2.c 7355101c085304b90024f2261e056cdff13c6c35
F src/test3.c 1c0e5d6f080b8e33c1ce8b3078e7013fdbcd560c
F src/test4.c 9b32d22f5f150abe23c1830e2057c4037c45b3df
@ -276,9 +276,9 @@ F src/update.c 4c0c6864c4349ba292042e984a56d15985b57f4e
F src/utf.c 8d819e2e5104a430fc2005f018db14347c95a38f
F src/util.c f566b5138099a2df8533b190d0dcc74b7dfbe0c9
F src/vacuum.c ddf21cc9577c4cb459d08bee9863a78ec000c5bb
F src/vdbe.c 34929e1b5bd95a85b5e1b7767b5cc8da582ad78d
F src/vdbe.c af2bc360189ce8eaed47133037e082a1652bc4a0
F src/vdbe.h b52887278cb173e66188da84dfab216bea61119d
F src/vdbeInt.h c1e830268b75f04a2901dd895b51a637a26c7045
F src/vdbeInt.h b8a76f7b7304abfdb8e6bd286eba954ecfe73863
F src/vdbeapi.c 0b2c78797058c6c9bfa1687977de039566e22877
F src/vdbeaux.c af9cd9372c7ab82294b9645723e652c2d4213b95
F src/vdbeblob.c 5dc79627775bd9a9b494dd956e26297946417d69
@ -1094,7 +1094,10 @@ F tool/vdbe-compress.tcl f12c884766bd14277f4fcedcae07078011717381
F tool/warnings-clang.sh f6aa929dc20ef1f856af04a730772f59283631d4
F tool/warnings.sh fbc018d67fd7395f440c28f33ef0f94420226381
F tool/win/sqlite.vsix 97894c2790eda7b5bce3cc79cb2a8ec2fde9b3ac
P 361084e1eb281e985568d19fe217263be92be31d
R 0d6c636b8cfd628682ea33e027cb07be
P 096ae1d8f9a08f92daedece6b0615f4d22b05023
R dca9e91df626c57b27d64840398d576b
T *branch * status-vm-step
T *sym-status-vm-step *
T -sym-trunk *
U drh
Z 55b5720fc386809651d148c0a8415781
Z 5f8be8eb1fd8b6cd7aa46981a30c4d1b

View File

@ -1 +1 @@
096ae1d8f9a08f92daedece6b0615f4d22b05023
f1366bab737a3ac2ea20a0ec014cc306d7ded8a5

View File

@ -1109,6 +1109,8 @@ static int display_stats(
fprintf(pArg->out, "Sort Operations: %d\n", iCur);
iCur = sqlite3_stmt_status(pArg->pStmt, SQLITE_STMTSTATUS_AUTOINDEX, bReset);
fprintf(pArg->out, "Autoindex Inserts: %d\n", iCur);
iCur = sqlite3_stmt_status(pArg->pStmt, SQLITE_STMTSTATUS_VM_STEP, bReset);
fprintf(pArg->out, "Virtual Machine Steps: %d\n", iCur);
}
return 0;

View File

@ -6303,11 +6303,21 @@ int sqlite3_stmt_status(sqlite3_stmt*, int op,int resetFlg);
** A non-zero value in this counter may indicate an opportunity to
** improvement performance by adding permanent indices that do not
** need to be reinitialized each time the statement is run.</dd>
**
** [[SQLITE_STMTSTATUS_VM_STEP]] <dt>SQLITE_STMTSTATUS_VM_STEP</dt>
** <dd>^This is the number of virtual machine operations executed
** by the prepared statement if that number is less than or equal
** to 2147483647. The number of virtual machine operations can be
** used as a proxy for the total work done by the prepared statement.
** If the number of virtual machine operations exceeds 2147483647
** then the value returned by this statement status code is undefined.
** </dd>
** </dl>
*/
#define SQLITE_STMTSTATUS_FULLSCAN_STEP 1
#define SQLITE_STMTSTATUS_SORT 2
#define SQLITE_STMTSTATUS_AUTOINDEX 3
#define SQLITE_STMTSTATUS_VM_STEP 4
/*
** CAPI3REF: Custom Page Cache Object

View File

@ -2218,6 +2218,7 @@ static int test_stmt_status(
{ "SQLITE_STMTSTATUS_FULLSCAN_STEP", SQLITE_STMTSTATUS_FULLSCAN_STEP },
{ "SQLITE_STMTSTATUS_SORT", SQLITE_STMTSTATUS_SORT },
{ "SQLITE_STMTSTATUS_AUTOINDEX", SQLITE_STMTSTATUS_AUTOINDEX },
{ "SQLITE_STMTSTATUS_VM_STEP", SQLITE_STMTSTATUS_VM_STEP },
};
if( objc!=4 ){
Tcl_WrongNumArgs(interp, 1, objv, "STMT PARAMETER RESETFLAG");

View File

@ -556,12 +556,13 @@ int sqlite3VdbeExec(
int checkProgress; /* True if progress callbacks are enabled */
int nProgressOps = 0; /* Opcodes executed since progress callback. */
#endif
int iCompare = 0; /* Result of last OP_Compare operation */
unsigned nVmStep = 0; /* Number of virtual machine steps */
Mem *aMem = p->aMem; /* Copy of p->aMem */
Mem *pIn1 = 0; /* 1st input operand */
Mem *pIn2 = 0; /* 2nd input operand */
Mem *pIn3 = 0; /* 3rd input operand */
Mem *pOut = 0; /* Output operand */
int iCompare = 0; /* Result of last OP_Compare operation */
int *aPermute = 0; /* Permutation of columns for OP_Compare */
i64 lastRowid = db->lastRowid; /* Saved value of the last insert ROWID */
#ifdef VDBE_PROFILE
@ -606,6 +607,7 @@ int sqlite3VdbeExec(
origPc = pc;
start = sqlite3Hwtime();
#endif
nVmStep++;
pOp = &aOp[pc];
/* Only allow tracing if SQLITE_DEBUG is defined.
@ -6200,6 +6202,7 @@ vdbe_error_halt:
** top. */
vdbe_return:
db->lastRowid = lastRowid;
p->aCounter[SQLITE_STMTSTATUS_VM_STEP-1] += (int)nVmStep;
sqlite3VdbeLeave(p);
return rc;

View File

@ -344,7 +344,7 @@ struct Vdbe {
yDbMask btreeMask; /* Bitmask of db->aDb[] entries referenced */
yDbMask lockMask; /* Subset of btreeMask that requires a lock */
int iStatement; /* Statement number (or 0 if has not opened stmt) */
int aCounter[3]; /* Counters used by sqlite3_stmt_status() */
int aCounter[4]; /* Counters used by sqlite3_stmt_status() */
#ifndef SQLITE_OMIT_TRACE
i64 startTime; /* Time when query started - used for profiling */
#endif