1
0
mirror of https://github.com/sqlite/sqlite.git synced 2025-08-20 07:41:32 +03:00

Add the experimental sqlite3_stmt_scanstatus() API.

FossilOrigin-Name: 6a9bab34aeb6a01b612211a28c140de60a3e883c
This commit is contained in:
dan
2014-10-31 20:11:32 +00:00
parent 0fb5daed34
commit 04489b6dce
12 changed files with 394 additions and 31 deletions

View File

@@ -672,6 +672,7 @@ static void freeP4(sqlite3 *db, int p4type, void *p4){
if( p4 ){
assert( db );
switch( p4type ){
case P4_EXPLAIN:
case P4_REAL:
case P4_INT64:
case P4_DYNAMIC:
@@ -820,6 +821,13 @@ void sqlite3VdbeChangeP4(Vdbe *p, int addr, const char *zP4, int n){
pOp->p4type = P4_VTAB;
sqlite3VtabLock((VTable *)zP4);
assert( ((VTable *)zP4)->db==p->db );
}else if( n==P4_EXPLAIN ){
pOp->p4.p = (void*)zP4;
pOp->p4type = P4_EXPLAIN;
p->apExplain = (ExplainArg**)sqlite3DbReallocOrFree(
p->db, p->apExplain, sizeof(ExplainArg*) * p->nExplain + 1
);
if( p->apExplain ) p->apExplain[p->nExplain++] = (ExplainArg*)zP4;
}else if( n<0 ){
pOp->p4.p = (void*)zP4;
pOp->p4type = (signed char)n;
@@ -1103,6 +1111,10 @@ static char *displayP4(Op *pOp, char *zTemp, int nTemp){
zTemp[0] = 0;
break;
}
case P4_EXPLAIN: {
zP4 = (char*)pOp->p4.pExplain->zExplain;
break;
}
default: {
zP4 = pOp->p4.z;
if( zP4==0 ){
@@ -2685,6 +2697,7 @@ void sqlite3VdbeClearObject(sqlite3 *db, Vdbe *p){
sqlite3DbFree(db, p->aColName);
sqlite3DbFree(db, p->zSql);
sqlite3DbFree(db, p->pFree);
sqlite3DbFree(db, p->apExplain);
}
/*