aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authordrh <drh@noemail.net>2015-01-30 15:52:26 +0000
committerdrh <drh@noemail.net>2015-01-30 15:52:26 +0000
commit0699f29a14f0cd013092a04789ee14f53fc5ed9f (patch)
treeb5f0c936b1a038f5fc8cf86f6b4b72f3ebac944f /src
parentfdc2e6d3444129d7e582e24f809f4f3b911b3966 (diff)
parent917682a4f429ae75e2c3cdfa6b62162a5d3a36be (diff)
downloadsqlite-0699f29a14f0cd013092a04789ee14f53fc5ed9f.tar.gz
sqlite-0699f29a14f0cd013092a04789ee14f53fc5ed9f.zip
Added SQLITE_TESTCTRL_INITMODE for improved testability.
FossilOrigin-Name: 98e029134dc1300d3ecb48b41b5107ec69ba85db
Diffstat (limited to 'src')
-rw-r--r--src/main.c12
-rw-r--r--src/shell.c13
-rw-r--r--src/sqlite.h.in3
-rw-r--r--src/test1.c18
4 files changed, 44 insertions, 2 deletions
diff --git a/src/main.c b/src/main.c
index 5aa37fa49..0d6f1be24 100644
--- a/src/main.c
+++ b/src/main.c
@@ -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 */
diff --git a/src/shell.c b/src/shell.c
index f9a360c7b..1a191e0fd 100644
--- a/src/shell.c
+++ b/src/shell.c
@@ -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:
diff --git a/src/sqlite.h.in b/src/sqlite.h.in
index f2e802eb0..722b9235a 100644
--- a/src/sqlite.h.in
+++ b/src/sqlite.h.in
@@ -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
diff --git a/src/test1.c b/src/test1.c
index d86ec1e84..b9503cf39 100644
--- a/src/test1.c
+++ b/src/test1.c
@@ -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);