| Index: third_party/sqlite/src/ext/rbu/test_rbu.c
|
| diff --git a/third_party/sqlite/src/ext/rbu/test_rbu.c b/third_party/sqlite/src/ext/rbu/test_rbu.c
|
| index 3fa85b756909b72f2c01874c4422f2e5f9b0a594..b1a2252741ee0ff2d4e11383cf2c9a1c0ed7683e 100644
|
| --- a/third_party/sqlite/src/ext/rbu/test_rbu.c
|
| +++ b/third_party/sqlite/src/ext/rbu/test_rbu.c
|
| @@ -17,11 +17,19 @@
|
| #if !defined(SQLITE_CORE) || defined(SQLITE_ENABLE_RBU)
|
|
|
| #include "sqlite3rbu.h"
|
| -#include <tcl.h>
|
| +#if defined(INCLUDE_SQLITE_TCL_H)
|
| +# include "sqlite_tcl.h"
|
| +#else
|
| +# include "tcl.h"
|
| +# ifndef SQLITE_TCLAPI
|
| +# define SQLITE_TCLAPI
|
| +# endif
|
| +#endif
|
| #include <assert.h>
|
|
|
| -/* From main.c (apparently...) */
|
| +/* From main.c */
|
| extern const char *sqlite3ErrName(int);
|
| +extern int sqlite3TestMakePointerStr(Tcl_Interp*, char*, void*);
|
|
|
| void test_rbu_delta(sqlite3_context *pCtx, int nArg, sqlite3_value **apVal){
|
| Tcl_Interp *interp = (Tcl_Interp*)sqlite3_user_data(pCtx);
|
| @@ -48,7 +56,7 @@ void test_rbu_delta(sqlite3_context *pCtx, int nArg, sqlite3_value **apVal){
|
| }
|
|
|
|
|
| -static int test_sqlite3rbu_cmd(
|
| +static int SQLITE_TCLAPI test_sqlite3rbu_cmd(
|
| ClientData clientData,
|
| Tcl_Interp *interp,
|
| int objc,
|
| @@ -66,6 +74,10 @@ static int test_sqlite3rbu_cmd(
|
| {"create_rbu_delta", 2, ""}, /* 2 */
|
| {"savestate", 2, ""}, /* 3 */
|
| {"dbMain_eval", 3, "SQL"}, /* 4 */
|
| + {"bp_progress", 2, ""}, /* 5 */
|
| + {"db", 3, "RBU"}, /* 6 */
|
| + {"state", 2, ""}, /* 7 */
|
| + {"progress", 2, ""}, /* 8 */
|
| {0,0,0}
|
| };
|
| int iCmd;
|
| @@ -136,6 +148,46 @@ static int test_sqlite3rbu_cmd(
|
| break;
|
| }
|
|
|
| + case 5: /* bp_progress */ {
|
| + int one, two;
|
| + Tcl_Obj *pObj;
|
| + sqlite3rbu_bp_progress(pRbu, &one, &two);
|
| +
|
| + pObj = Tcl_NewObj();
|
| + Tcl_ListObjAppendElement(interp, pObj, Tcl_NewIntObj(one));
|
| + Tcl_ListObjAppendElement(interp, pObj, Tcl_NewIntObj(two));
|
| + Tcl_SetObjResult(interp, pObj);
|
| + break;
|
| + }
|
| +
|
| + case 6: /* db */ {
|
| + int bArg;
|
| + if( Tcl_GetBooleanFromObj(interp, objv[2], &bArg) ){
|
| + ret = TCL_ERROR;
|
| + }else{
|
| + char zBuf[50];
|
| + sqlite3 *db = sqlite3rbu_db(pRbu, bArg);
|
| + if( sqlite3TestMakePointerStr(interp, zBuf, (void*)db) ){
|
| + ret = TCL_ERROR;
|
| + }else{
|
| + Tcl_SetResult(interp, zBuf, TCL_VOLATILE);
|
| + }
|
| + }
|
| + break;
|
| + }
|
| + case 7: /* state */ {
|
| + const char *aRes[] = { 0, "oal", "move", "checkpoint", "done", "error" };
|
| + int eState = sqlite3rbu_state(pRbu);
|
| + assert( eState>0 && eState<=5 );
|
| + Tcl_SetResult(interp, (char*)aRes[eState], TCL_STATIC);
|
| + break;
|
| + }
|
| + case 8: /* progress */ {
|
| + sqlite3_int64 nStep = sqlite3rbu_progress(pRbu);
|
| + Tcl_SetObjResult(interp, Tcl_NewWideIntObj(nStep));
|
| + break;
|
| + }
|
| +
|
| default: /* seems unlikely */
|
| assert( !"cannot happen" );
|
| break;
|
| @@ -147,7 +199,7 @@ static int test_sqlite3rbu_cmd(
|
| /*
|
| ** Tclcmd: sqlite3rbu CMD <target-db> <rbu-db> ?<state-db>?
|
| */
|
| -static int test_sqlite3rbu(
|
| +static int SQLITE_TCLAPI test_sqlite3rbu(
|
| ClientData clientData,
|
| Tcl_Interp *interp,
|
| int objc,
|
| @@ -175,9 +227,37 @@ static int test_sqlite3rbu(
|
| }
|
|
|
| /*
|
| +** Tclcmd: sqlite3rbu_vacuum CMD <target-db> <state-db>
|
| +*/
|
| +static int SQLITE_TCLAPI test_sqlite3rbu_vacuum(
|
| + ClientData clientData,
|
| + Tcl_Interp *interp,
|
| + int objc,
|
| + Tcl_Obj *CONST objv[]
|
| +){
|
| + sqlite3rbu *pRbu = 0;
|
| + const char *zCmd;
|
| + const char *zTarget;
|
| + const char *zStateDb = 0;
|
| +
|
| + if( objc!=3 && objc!=4 ){
|
| + Tcl_WrongNumArgs(interp, 1, objv, "NAME TARGET-DB ?STATE-DB?");
|
| + return TCL_ERROR;
|
| + }
|
| + zCmd = Tcl_GetString(objv[1]);
|
| + zTarget = Tcl_GetString(objv[2]);
|
| + if( objc==4 ) zStateDb = Tcl_GetString(objv[3]);
|
| +
|
| + pRbu = sqlite3rbu_vacuum(zTarget, zStateDb);
|
| + Tcl_CreateObjCommand(interp, zCmd, test_sqlite3rbu_cmd, (ClientData)pRbu, 0);
|
| + Tcl_SetObjResult(interp, objv[1]);
|
| + return TCL_OK;
|
| +}
|
| +
|
| +/*
|
| ** Tclcmd: sqlite3rbu_create_vfs ?-default? NAME PARENT
|
| */
|
| -static int test_sqlite3rbu_create_vfs(
|
| +static int SQLITE_TCLAPI test_sqlite3rbu_create_vfs(
|
| ClientData clientData,
|
| Tcl_Interp *interp,
|
| int objc,
|
| @@ -212,7 +292,7 @@ static int test_sqlite3rbu_create_vfs(
|
| /*
|
| ** Tclcmd: sqlite3rbu_destroy_vfs NAME
|
| */
|
| -static int test_sqlite3rbu_destroy_vfs(
|
| +static int SQLITE_TCLAPI test_sqlite3rbu_destroy_vfs(
|
| ClientData clientData,
|
| Tcl_Interp *interp,
|
| int objc,
|
| @@ -233,7 +313,7 @@ static int test_sqlite3rbu_destroy_vfs(
|
| /*
|
| ** Tclcmd: sqlite3rbu_internal_test
|
| */
|
| -static int test_sqlite3rbu_internal_test(
|
| +static int SQLITE_TCLAPI test_sqlite3rbu_internal_test(
|
| ClientData clientData,
|
| Tcl_Interp *interp,
|
| int objc,
|
| @@ -261,6 +341,7 @@ int SqliteRbu_Init(Tcl_Interp *interp){
|
| Tcl_ObjCmdProc *xProc;
|
| } aObjCmd[] = {
|
| { "sqlite3rbu", test_sqlite3rbu },
|
| + { "sqlite3rbu_vacuum", test_sqlite3rbu_vacuum },
|
| { "sqlite3rbu_create_vfs", test_sqlite3rbu_create_vfs },
|
| { "sqlite3rbu_destroy_vfs", test_sqlite3rbu_destroy_vfs },
|
| { "sqlite3rbu_internal_test", test_sqlite3rbu_internal_test },
|
| @@ -273,7 +354,11 @@ int SqliteRbu_Init(Tcl_Interp *interp){
|
| }
|
|
|
| #else
|
| -#include <tcl.h>
|
| +#if defined(INCLUDE_SQLITE_TCL_H)
|
| +# include "sqlite_tcl.h"
|
| +#else
|
| +# include "tcl.h"
|
| +#endif
|
| int SqliteRbu_Init(Tcl_Interp *interp){ return TCL_OK; }
|
| #endif /* !defined(SQLITE_CORE) || defined(SQLITE_ENABLE_RBU) */
|
| #endif /* defined(SQLITE_TEST) */
|
|
|