aboutsummaryrefslogtreecommitdiff
path: root/src/vdbeapi.c
diff options
context:
space:
mode:
authordan <Dan Kennedy>2022-12-07 20:09:54 +0000
committerdan <Dan Kennedy>2022-12-07 20:09:54 +0000
commit7f4b066eb2b5ab99ed126809e56e8a9bd41a91e3 (patch)
treeb905b159c9214d8360ddb8f29921ba9a0c193457 /src/vdbeapi.c
parent209dbab9979628ea1587a07e11c0bcfe78971dd8 (diff)
downloadsqlite-7f4b066eb2b5ab99ed126809e56e8a9bd41a91e3.tar.gz
sqlite-7f4b066eb2b5ab99ed126809e56e8a9bd41a91e3.zip
Reduce the overhead of SQLITE_ENABLE_STMT_SCANSTATUS some.
FossilOrigin-Name: 212927e97e7be7d237de08359dce0dfb9211ac406b32009a6e15afd79c006475
Diffstat (limited to 'src/vdbeapi.c')
-rw-r--r--src/vdbeapi.c22
1 files changed, 13 insertions, 9 deletions
diff --git a/src/vdbeapi.c b/src/vdbeapi.c
index 028eb7fe6..414745e8b 100644
--- a/src/vdbeapi.c
+++ b/src/vdbeapi.c
@@ -2123,14 +2123,12 @@ int sqlite3_stmt_scanstatus_v2(
ScanStatus *pScan;
int idx;
- /* If the v2 flag is clear, then this function must ignore any ScanStatus
- ** structures with ScanStatus.addrLoop set to 0. */
if( iScan<0 ){
int ii;
if( iScanStatusOp==SQLITE_SCANSTAT_NCYCLE ){
i64 res = 0;
for(ii=0; ii<p->nOp; ii++){
- res += p->anCycle[ii];
+ res += p->aOp[ii].nCycle;
}
*(i64*)pOut = res;
return 0;
@@ -2141,6 +2139,8 @@ int sqlite3_stmt_scanstatus_v2(
idx = iScan;
pScan = &p->aScan[idx];
}else{
+ /* If the COMPLEX flag is clear, then this function must ignore any
+ ** ScanStatus structures with ScanStatus.addrLoop set to 0. */
for(idx=0; idx<p->nScan; idx++){
pScan = &p->aScan[idx];
if( pScan->zName ){
@@ -2154,7 +2154,7 @@ int sqlite3_stmt_scanstatus_v2(
switch( iScanStatusOp ){
case SQLITE_SCANSTAT_NLOOP: {
if( pScan->addrLoop>0 ){
- *(sqlite3_int64*)pOut = p->anExec[pScan->addrLoop];
+ *(sqlite3_int64*)pOut = p->aOp[pScan->addrLoop].nExec;
}else{
*(sqlite3_int64*)pOut = -1;
}
@@ -2162,7 +2162,7 @@ int sqlite3_stmt_scanstatus_v2(
}
case SQLITE_SCANSTAT_NVISIT: {
if( pScan->addrVisit>0 ){
- *(sqlite3_int64*)pOut = p->anExec[pScan->addrVisit];
+ *(sqlite3_int64*)pOut = p->aOp[pScan->addrVisit].nExec;
}else{
*(sqlite3_int64*)pOut = -1;
}
@@ -2218,7 +2218,7 @@ int sqlite3_stmt_scanstatus_v2(
if( iIns==0 ) break;
if( iIns>0 ){
while( iIns<=iEnd ){
- res += p->anCycle[iIns];
+ res += p->aOp[iIns].nCycle;
iIns++;
}
}else{
@@ -2229,7 +2229,7 @@ int sqlite3_stmt_scanstatus_v2(
if( (sqlite3OpcodeProperty[pOp->opcode] & OPFLG_NCYCLE)==0 ){
continue;
}
- res += p->anCycle[iOp];
+ res += p->aOp[iOp].nCycle;
}
}
}
@@ -2261,7 +2261,11 @@ int sqlite3_stmt_scanstatus(
*/
void sqlite3_stmt_scanstatus_reset(sqlite3_stmt *pStmt){
Vdbe *p = (Vdbe*)pStmt;
- memset(p->anExec, 0, p->nOp * sizeof(i64));
- memset(p->anCycle, 0, p->nOp * sizeof(u64));
+ int ii;
+ for(ii=0; ii<p->nOp; ii++){
+ Op *pOp = &p->aOp[ii];
+ pOp->nExec = 0;
+ pOp->nCycle = 0;
+ }
}
#endif /* SQLITE_ENABLE_STMT_SCANSTATUS */