Add the experimental sqlite3_stmt_status() interface. (CVS 5781)

FossilOrigin-Name: de473efb35ffdf9a8222a70a84dfd7d3198c87c1
This commit is contained in:
drh
2008-10-07 23:46:38 +00:00
parent e82f5d04c3
commit d1d384888b
12 changed files with 225 additions and 63 deletions
+46 -1
View File
@@ -13,7 +13,7 @@
** is not included in the SQLite library. It is used for automated
** testing of the SQLite library.
**
** $Id: test1.c,v 1.326 2008/10/02 14:49:02 danielk1977 Exp $
** $Id: test1.c,v 1.327 2008/10/07 23:46:38 drh Exp $
*/
#include "sqliteInt.h"
#include "tcl.h"
@@ -1912,6 +1912,50 @@ static int test_finalize(
return TCL_OK;
}
/*
** Usage: sqlite3_stmt_status STMT CODE RESETFLAG
**
** Get the value of a status counter from a statement.
*/
static int test_stmt_status(
void * clientData,
Tcl_Interp *interp,
int objc,
Tcl_Obj *CONST objv[]
){
int iValue;
int i, op, resetFlag;
const char *zOpName;
sqlite3_stmt *pStmt;
static const struct {
const char *zName;
int op;
} aOp[] = {
{ "SQLITE_STMTSTATUS_FULLSCAN_STEP", SQLITE_STMTSTATUS_FULLSCAN_STEP },
{ "SQLITE_STMTSTATUS_SORT", SQLITE_STMTSTATUS_SORT },
};
if( objc!=4 ){
Tcl_WrongNumArgs(interp, 1, objv, "STMT PARAMETER RESETFLAG");
return TCL_ERROR;
}
if( getStmtPointer(interp, Tcl_GetString(objv[1]), &pStmt) ) return TCL_ERROR;
zOpName = Tcl_GetString(objv[2]);
for(i=0; i<ArraySize(aOp); i++){
if( strcmp(aOp[i].zName, zOpName)==0 ){
op = aOp[i].op;
break;
}
}
if( i>=ArraySize(aOp) ){
if( Tcl_GetIntFromObj(interp, objv[2], &op) ) return TCL_ERROR;
}
if( Tcl_GetBooleanFromObj(interp, objv[3], &resetFlag) ) return TCL_ERROR;
iValue = sqlite3_stmt_status(pStmt, op, resetFlag);
Tcl_SetObjResult(interp, Tcl_NewIntObj(iValue));
return TCL_OK;
}
/*
** Usage: sqlite3_next_stmt DB STMT
**
@@ -4623,6 +4667,7 @@ int Sqlitetest1_Init(Tcl_Interp *interp){
{ "sqlite3_prepare_tkt3134", test_prepare_tkt3134, 0},
{ "sqlite3_prepare16_v2", test_prepare16_v2 ,0 },
{ "sqlite3_finalize", test_finalize ,0 },
{ "sqlite3_stmt_status", test_stmt_status ,0 },
{ "sqlite3_reset", test_reset ,0 },
{ "sqlite3_expired", test_expired ,0 },
{ "sqlite3_transfer_bindings", test_transfer_bind ,0 },