aboutsummaryrefslogtreecommitdiff
path: root/src/test_thread.c
diff options
context:
space:
mode:
authorstephan <stephan@noemail.net>2023-02-06 22:25:18 +0000
committerstephan <stephan@noemail.net>2023-02-06 22:25:18 +0000
commitf8c73aed6716f911d8a19511586751e5b9aa1e9f (patch)
tree8d35e728901da3454cbff9c600fd0bc1602b2ce8 /src/test_thread.c
parent87ce1ff7f72621cb8a8a99dc93141d253899eba0 (diff)
parent9f29998d2a8890d58b52d13605324193703525c3 (diff)
downloadsqlite-f8c73aed6716f911d8a19511586751e5b9aa1e9f.tar.gz
sqlite-f8c73aed6716f911d8a19511586751e5b9aa1e9f.zip
Merge trunk into wasi-patches branch.
FossilOrigin-Name: 656d36f50f630da68262469087bad1ac71b10325e233a7963103c8cbc232f61a
Diffstat (limited to 'src/test_thread.c')
-rw-r--r--src/test_thread.c46
1 files changed, 39 insertions, 7 deletions
diff --git a/src/test_thread.c b/src/test_thread.c
index de0fdb434..126fd9836 100644
--- a/src/test_thread.c
+++ b/src/test_thread.c
@@ -384,6 +384,27 @@ static int SQLITE_TCLAPI clock_seconds_proc(
return TCL_OK;
}
+/*
+** The [clock_milliseconds] command. This is more or less the same as the
+** regular tcl [clock milliseconds].
+*/
+static int SQLITE_TCLAPI clock_milliseconds_proc(
+ ClientData clientData,
+ Tcl_Interp *interp,
+ int objc,
+ Tcl_Obj *CONST objv[]
+){
+ Tcl_Time now;
+ Tcl_GetTime(&now);
+ Tcl_SetObjResult(interp, Tcl_NewWideIntObj(
+ ((Tcl_WideInt)now.sec * 1000) + (now.usec / 1000)
+ ));
+ UNUSED_PARAMETER(clientData);
+ UNUSED_PARAMETER(objc);
+ UNUSED_PARAMETER(objv);
+ return TCL_OK;
+}
+
/*************************************************************************
** This block contains the implementation of the [sqlite3_blocking_step]
** command available to threads created by [sqlthread spawn] commands. It
@@ -617,15 +638,26 @@ static int SQLITE_TCLAPI blocking_prepare_v2_proc(
** Register commands with the TCL interpreter.
*/
int SqlitetestThread_Init(Tcl_Interp *interp){
- Tcl_CreateObjCommand(interp, "sqlthread", sqlthread_proc, 0, 0);
- Tcl_CreateObjCommand(interp, "clock_seconds", clock_seconds_proc, 0, 0);
+ struct TclCmd {
+ int (*xProc)(void*, Tcl_Interp*, int, Tcl_Obj*const*);
+ const char *zName;
+ int iCtx;
+ } aCmd[] = {
+ { sqlthread_proc, "sqlthread", 0 },
+ { clock_seconds_proc, "clock_second", 0 },
+ { clock_milliseconds_proc, "clock_milliseconds", 0 },
#if SQLITE_OS_UNIX && defined(SQLITE_ENABLE_UNLOCK_NOTIFY)
- Tcl_CreateObjCommand(interp, "sqlite3_blocking_step", blocking_step_proc,0,0);
- Tcl_CreateObjCommand(interp,
- "sqlite3_blocking_prepare_v2", blocking_prepare_v2_proc, (void *)1, 0);
- Tcl_CreateObjCommand(interp,
- "sqlite3_nonblocking_prepare_v2", blocking_prepare_v2_proc, 0, 0);
+ { blocking_step_proc, "sqlite3_blocking_step", 0 },
+ { blocking_prepare_v2_proc, "sqlite3_blocking_prepare_v2", 1 },
+ { blocking_prepare_v2_proc, "sqlite3_nonblocking_prepare_v2", 0 },
#endif
+ };
+ int ii;
+
+ for(ii=0; ii<sizeof(aCmd)/sizeof(aCmd[0]); ii++){
+ void *p = SQLITE_INT_TO_PTR(aCmd[ii].iCtx);
+ Tcl_CreateObjCommand(interp, aCmd[ii].zName, aCmd[ii].xProc, p, 0);
+ }
return TCL_OK;
}
#else