1
0
mirror of https://github.com/sqlite/sqlite.git synced 2025-11-19 21:43:15 +03:00

Added SQLITE_TESTCTRL_INITMODE for improved testability.

FossilOrigin-Name: 98e029134dc1300d3ecb48b41b5107ec69ba85db
This commit is contained in:
drh
2015-01-30 15:52:26 +00:00
7 changed files with 157 additions and 13 deletions

View File

@@ -3598,6 +3598,18 @@ int sqlite3_test_control(int op, ...){
if( sqlite3GlobalConfig.isInit==0 ) rc = SQLITE_ERROR;
break;
}
/* sqlite3_test_control(SQLITE_TESTCTRL_INITMODE, db, busy, iDb, newTnum);
**
** Set the db->init.busy, db->init.iDb, and db->init.tnum fields.
*/
case SQLITE_TESTCTRL_INITMODE: {
sqlite3 *db = va_arg(ap, sqlite3*);
db->init.busy = va_arg(ap,int);
db->init.iDb = va_arg(ap,int);
db->init.newTnum = va_arg(ap,int);
break;
}
}
va_end(ap);
#endif /* SQLITE_OMIT_BUILTIN_TEST */

View File

@@ -3536,6 +3536,7 @@ static int do_meta_command(char *zLine, ShellState *p){
{ "scratchmalloc", SQLITE_TESTCTRL_SCRATCHMALLOC },
{ "byteorder", SQLITE_TESTCTRL_BYTEORDER },
{ "never_corrupt", SQLITE_TESTCTRL_NEVER_CORRUPT },
{ "initmode", SQLITE_TESTCTRL_INITMODE },
};
int testctrl = -1;
int rc = 0;
@@ -3628,6 +3629,18 @@ static int do_meta_command(char *zLine, ShellState *p){
break;
#endif
case SQLITE_TESTCTRL_INITMODE:
if( nArg==5 ){
rc = sqlite3_test_control(testctrl, p->db,
integerValue(azArg[2]),
integerValue(azArg[3]),
integerValue(azArg[4]));
}else{
fprintf(stderr,"Usage: .testctrl initmode fBusy iDb newTnum\n");
rc = 1;
}
break;
case SQLITE_TESTCTRL_BITVEC_TEST:
case SQLITE_TESTCTRL_FAULT_INSTALL:
case SQLITE_TESTCTRL_BENIGN_MALLOC_HOOKS:

View File

@@ -6260,7 +6260,8 @@ int sqlite3_test_control(int op, ...);
#define SQLITE_TESTCTRL_BYTEORDER 22
#define SQLITE_TESTCTRL_ISINIT 23
#define SQLITE_TESTCTRL_SORTER_MMAP 24
#define SQLITE_TESTCTRL_LAST 24
#define SQLITE_TESTCTRL_INITMODE 25
#define SQLITE_TESTCTRL_LAST 25
/*
** CAPI3REF: SQLite Runtime Status

View File

@@ -5914,7 +5914,8 @@ static int test_test_control(
int i;
} aVerb[] = {
{ "SQLITE_TESTCTRL_LOCALTIME_FAULT", SQLITE_TESTCTRL_LOCALTIME_FAULT },
{ "SQLITE_TESTCTRL_SORTER_MMAP", SQLITE_TESTCTRL_SORTER_MMAP },
{ "SQLITE_TESTCTRL_SORTER_MMAP", SQLITE_TESTCTRL_SORTER_MMAP },
{ "SQLITE_TESTCTRL_INITMODE", SQLITE_TESTCTRL_INITMODE },
};
int iVerb;
int iFlag;
@@ -5955,6 +5956,21 @@ static int test_test_control(
sqlite3_test_control(SQLITE_TESTCTRL_SORTER_MMAP, db, val);
break;
}
case SQLITE_TESTCTRL_INITMODE: {
int fBusy, iDb, newTnum;
sqlite3 *db;
if( objc!=6 ){
Tcl_WrongNumArgs(interp, 2, objv, "DB fBusy iDb newTnum");
return TCL_ERROR;
}
if( getDbPointer(interp, Tcl_GetString(objv[2]), &db) ) return TCL_ERROR;
if( Tcl_GetIntFromObj(interp, objv[3], &fBusy) ) return TCL_ERROR;
if( Tcl_GetIntFromObj(interp, objv[4], &iDb) ) return TCL_ERROR;
if( Tcl_GetIntFromObj(interp, objv[5], &newTnum) ) return TCL_ERROR;
sqlite3_test_control(SQLITE_TESTCTRL_INITMODE, db, fBusy, iDb, newTnum);
break;
}
}
Tcl_ResetResult(interp);