Annotation of embedaddon/sqlite3/src/test_backup.c, revision 1.1.1.1
1.1 misho 1: /*
2: ** 2009 January 28
3: **
4: ** The author disclaims copyright to this source code. In place of
5: ** a legal notice, here is a blessing:
6: **
7: ** May you do good and not evil.
8: ** May you find forgiveness for yourself and forgive others.
9: ** May you share freely, never taking more than you give.
10: **
11: *************************************************************************
12: ** This file contains test logic for the sqlite3_backup() interface.
13: **
14: */
15:
16: #include "tcl.h"
17: #include <sqlite3.h>
18: #include <assert.h>
19:
20: /* These functions are implemented in test1.c. */
21: int getDbPointer(Tcl_Interp *, const char *, sqlite3 **);
22: const char *sqlite3TestErrorName(int);
23:
24: static int backupTestCmd(
25: ClientData clientData,
26: Tcl_Interp *interp,
27: int objc,
28: Tcl_Obj *const*objv
29: ){
30: enum BackupSubCommandEnum {
31: BACKUP_STEP, BACKUP_FINISH, BACKUP_REMAINING, BACKUP_PAGECOUNT
32: };
33: struct BackupSubCommand {
34: const char *zCmd;
35: enum BackupSubCommandEnum eCmd;
36: int nArg;
37: const char *zArg;
38: } aSub[] = {
39: {"step", BACKUP_STEP , 1, "npage" },
40: {"finish", BACKUP_FINISH , 0, "" },
41: {"remaining", BACKUP_REMAINING , 0, "" },
42: {"pagecount", BACKUP_PAGECOUNT , 0, "" },
43: {0, 0, 0, 0}
44: };
45:
46: sqlite3_backup *p = (sqlite3_backup *)clientData;
47: int iCmd;
48: int rc;
49:
50: rc = Tcl_GetIndexFromObjStruct(
51: interp, objv[1], aSub, sizeof(aSub[0]), "option", 0, &iCmd
52: );
53: if( rc!=TCL_OK ){
54: return rc;
55: }
56: if( objc!=(2 + aSub[iCmd].nArg) ){
57: Tcl_WrongNumArgs(interp, 2, objv, aSub[iCmd].zArg);
58: return TCL_ERROR;
59: }
60:
61: switch( aSub[iCmd].eCmd ){
62:
63: case BACKUP_FINISH: {
64: const char *zCmdName;
65: Tcl_CmdInfo cmdInfo;
66: zCmdName = Tcl_GetString(objv[0]);
67: Tcl_GetCommandInfo(interp, zCmdName, &cmdInfo);
68: cmdInfo.deleteProc = 0;
69: Tcl_SetCommandInfo(interp, zCmdName, &cmdInfo);
70: Tcl_DeleteCommand(interp, zCmdName);
71:
72: rc = sqlite3_backup_finish(p);
73: Tcl_SetResult(interp, (char *)sqlite3TestErrorName(rc), TCL_STATIC);
74: break;
75: }
76:
77: case BACKUP_STEP: {
78: int nPage;
79: if( TCL_OK!=Tcl_GetIntFromObj(interp, objv[2], &nPage) ){
80: return TCL_ERROR;
81: }
82: rc = sqlite3_backup_step(p, nPage);
83: Tcl_SetResult(interp, (char *)sqlite3TestErrorName(rc), TCL_STATIC);
84: break;
85: }
86:
87: case BACKUP_REMAINING:
88: Tcl_SetObjResult(interp, Tcl_NewIntObj(sqlite3_backup_remaining(p)));
89: break;
90:
91: case BACKUP_PAGECOUNT:
92: Tcl_SetObjResult(interp, Tcl_NewIntObj(sqlite3_backup_pagecount(p)));
93: break;
94: }
95:
96: return TCL_OK;
97: }
98:
99: static void backupTestFinish(ClientData clientData){
100: sqlite3_backup *pBackup = (sqlite3_backup *)clientData;
101: sqlite3_backup_finish(pBackup);
102: }
103:
104: /*
105: ** sqlite3_backup CMDNAME DESTHANDLE DESTNAME SRCHANDLE SRCNAME
106: **
107: */
108: static int backupTestInit(
109: ClientData clientData,
110: Tcl_Interp *interp,
111: int objc,
112: Tcl_Obj *const*objv
113: ){
114: sqlite3_backup *pBackup;
115: sqlite3 *pDestDb;
116: sqlite3 *pSrcDb;
117: const char *zDestName;
118: const char *zSrcName;
119: const char *zCmd;
120:
121: if( objc!=6 ){
122: Tcl_WrongNumArgs(
123: interp, 1, objv, "CMDNAME DESTHANDLE DESTNAME SRCHANDLE SRCNAME"
124: );
125: return TCL_ERROR;
126: }
127:
128: zCmd = Tcl_GetString(objv[1]);
129: getDbPointer(interp, Tcl_GetString(objv[2]), &pDestDb);
130: zDestName = Tcl_GetString(objv[3]);
131: getDbPointer(interp, Tcl_GetString(objv[4]), &pSrcDb);
132: zSrcName = Tcl_GetString(objv[5]);
133:
134: pBackup = sqlite3_backup_init(pDestDb, zDestName, pSrcDb, zSrcName);
135: if( !pBackup ){
136: Tcl_AppendResult(interp, "sqlite3_backup_init() failed", 0);
137: return TCL_ERROR;
138: }
139:
140: Tcl_CreateObjCommand(interp, zCmd, backupTestCmd, pBackup, backupTestFinish);
141: Tcl_SetObjResult(interp, objv[1]);
142: return TCL_OK;
143: }
144:
145: int Sqlitetestbackup_Init(Tcl_Interp *interp){
146: Tcl_CreateObjCommand(interp, "sqlite3_backup", backupTestInit, 0, 0);
147: return TCL_OK;
148: }
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>