Index: third_party/sqlite/sqlite-src-3070603/src/test_backup.c |
diff --git a/third_party/sqlite/sqlite-src-3070603/src/test_backup.c b/third_party/sqlite/sqlite-src-3070603/src/test_backup.c |
new file mode 100644 |
index 0000000000000000000000000000000000000000..272713785a1a6d888ded5b7e3e61bc57fea79f61 |
--- /dev/null |
+++ b/third_party/sqlite/sqlite-src-3070603/src/test_backup.c |
@@ -0,0 +1,148 @@ |
+/* |
+** 2009 January 28 |
+** |
+** The author disclaims copyright to this source code. In place of |
+** a legal notice, here is a blessing: |
+** |
+** May you do good and not evil. |
+** May you find forgiveness for yourself and forgive others. |
+** May you share freely, never taking more than you give. |
+** |
+************************************************************************* |
+** This file contains test logic for the sqlite3_backup() interface. |
+** |
+*/ |
+ |
+#include "tcl.h" |
+#include <sqlite3.h> |
+#include <assert.h> |
+ |
+/* These functions are implemented in test1.c. */ |
+int getDbPointer(Tcl_Interp *, const char *, sqlite3 **); |
+const char *sqlite3TestErrorName(int); |
+ |
+static int backupTestCmd( |
+ ClientData clientData, |
+ Tcl_Interp *interp, |
+ int objc, |
+ Tcl_Obj *const*objv |
+){ |
+ enum BackupSubCommandEnum { |
+ BACKUP_STEP, BACKUP_FINISH, BACKUP_REMAINING, BACKUP_PAGECOUNT |
+ }; |
+ struct BackupSubCommand { |
+ const char *zCmd; |
+ enum BackupSubCommandEnum eCmd; |
+ int nArg; |
+ const char *zArg; |
+ } aSub[] = { |
+ {"step", BACKUP_STEP , 1, "npage" }, |
+ {"finish", BACKUP_FINISH , 0, "" }, |
+ {"remaining", BACKUP_REMAINING , 0, "" }, |
+ {"pagecount", BACKUP_PAGECOUNT , 0, "" }, |
+ {0, 0, 0, 0} |
+ }; |
+ |
+ sqlite3_backup *p = (sqlite3_backup *)clientData; |
+ int iCmd; |
+ int rc; |
+ |
+ rc = Tcl_GetIndexFromObjStruct( |
+ interp, objv[1], aSub, sizeof(aSub[0]), "option", 0, &iCmd |
+ ); |
+ if( rc!=TCL_OK ){ |
+ return rc; |
+ } |
+ if( objc!=(2 + aSub[iCmd].nArg) ){ |
+ Tcl_WrongNumArgs(interp, 2, objv, aSub[iCmd].zArg); |
+ return TCL_ERROR; |
+ } |
+ |
+ switch( aSub[iCmd].eCmd ){ |
+ |
+ case BACKUP_FINISH: { |
+ const char *zCmdName; |
+ Tcl_CmdInfo cmdInfo; |
+ zCmdName = Tcl_GetString(objv[0]); |
+ Tcl_GetCommandInfo(interp, zCmdName, &cmdInfo); |
+ cmdInfo.deleteProc = 0; |
+ Tcl_SetCommandInfo(interp, zCmdName, &cmdInfo); |
+ Tcl_DeleteCommand(interp, zCmdName); |
+ |
+ rc = sqlite3_backup_finish(p); |
+ Tcl_SetResult(interp, (char *)sqlite3TestErrorName(rc), TCL_STATIC); |
+ break; |
+ } |
+ |
+ case BACKUP_STEP: { |
+ int nPage; |
+ if( TCL_OK!=Tcl_GetIntFromObj(interp, objv[2], &nPage) ){ |
+ return TCL_ERROR; |
+ } |
+ rc = sqlite3_backup_step(p, nPage); |
+ Tcl_SetResult(interp, (char *)sqlite3TestErrorName(rc), TCL_STATIC); |
+ break; |
+ } |
+ |
+ case BACKUP_REMAINING: |
+ Tcl_SetObjResult(interp, Tcl_NewIntObj(sqlite3_backup_remaining(p))); |
+ break; |
+ |
+ case BACKUP_PAGECOUNT: |
+ Tcl_SetObjResult(interp, Tcl_NewIntObj(sqlite3_backup_pagecount(p))); |
+ break; |
+ } |
+ |
+ return TCL_OK; |
+} |
+ |
+static void backupTestFinish(ClientData clientData){ |
+ sqlite3_backup *pBackup = (sqlite3_backup *)clientData; |
+ sqlite3_backup_finish(pBackup); |
+} |
+ |
+/* |
+** sqlite3_backup CMDNAME DESTHANDLE DESTNAME SRCHANDLE SRCNAME |
+** |
+*/ |
+static int backupTestInit( |
+ ClientData clientData, |
+ Tcl_Interp *interp, |
+ int objc, |
+ Tcl_Obj *const*objv |
+){ |
+ sqlite3_backup *pBackup; |
+ sqlite3 *pDestDb; |
+ sqlite3 *pSrcDb; |
+ const char *zDestName; |
+ const char *zSrcName; |
+ const char *zCmd; |
+ |
+ if( objc!=6 ){ |
+ Tcl_WrongNumArgs( |
+ interp, 1, objv, "CMDNAME DESTHANDLE DESTNAME SRCHANDLE SRCNAME" |
+ ); |
+ return TCL_ERROR; |
+ } |
+ |
+ zCmd = Tcl_GetString(objv[1]); |
+ getDbPointer(interp, Tcl_GetString(objv[2]), &pDestDb); |
+ zDestName = Tcl_GetString(objv[3]); |
+ getDbPointer(interp, Tcl_GetString(objv[4]), &pSrcDb); |
+ zSrcName = Tcl_GetString(objv[5]); |
+ |
+ pBackup = sqlite3_backup_init(pDestDb, zDestName, pSrcDb, zSrcName); |
+ if( !pBackup ){ |
+ Tcl_AppendResult(interp, "sqlite3_backup_init() failed", 0); |
+ return TCL_ERROR; |
+ } |
+ |
+ Tcl_CreateObjCommand(interp, zCmd, backupTestCmd, pBackup, backupTestFinish); |
+ Tcl_SetObjResult(interp, objv[1]); |
+ return TCL_OK; |
+} |
+ |
+int Sqlitetestbackup_Init(Tcl_Interp *interp){ |
+ Tcl_CreateObjCommand(interp, "sqlite3_backup", backupTestInit, 0, 0); |
+ return TCL_OK; |
+} |