aboutsummaryrefslogtreecommitdiff
path: root/src/test_vfs.c
diff options
context:
space:
mode:
authordrh <drh@noemail.net>2010-05-30 19:55:15 +0000
committerdrh <drh@noemail.net>2010-05-30 19:55:15 +0000
commit73b64e4d2e6b95cc9f58ca30bb4dbaae90b7c185 (patch)
treef061713ee901059afe2e20cbc57237364024b7ed /src/test_vfs.c
parenta7a0c615d7587c7f2f609a46db29e520dd5d5428 (diff)
downloadsqlite-73b64e4d2e6b95cc9f58ca30bb4dbaae90b7c185.tar.gz
sqlite-73b64e4d2e6b95cc9f58ca30bb4dbaae90b7c185.zip
Initial code for incremental checkpoint in WAL mode. This check-in compiles
on unix and runs as long as you do not engage WAL mode. WAL mode crashes and burns. Consider this check-in a baseline implementation for getting the new capability up and running. FossilOrigin-Name: ef3ba7a17ff90674d702e5694b9e792851ab6998
Diffstat (limited to 'src/test_vfs.c')
-rw-r--r--src/test_vfs.c39
1 files changed, 20 insertions, 19 deletions
diff --git a/src/test_vfs.c b/src/test_vfs.c
index f95587931..d5e8ea1fa 100644
--- a/src/test_vfs.c
+++ b/src/test_vfs.c
@@ -102,7 +102,7 @@ static int tvfsShmOpen(sqlite3_file*);
static int tvfsShmSize(sqlite3_file*, int , int *);
static int tvfsShmGet(sqlite3_file*, int , int *, volatile void **);
static int tvfsShmRelease(sqlite3_file*);
-static int tvfsShmLock(sqlite3_file*, int , int *);
+static int tvfsShmLock(sqlite3_file*, int , int, int);
static void tvfsShmBarrier(sqlite3_file*);
static int tvfsShmClose(sqlite3_file*, int);
@@ -544,31 +544,34 @@ static int tvfsShmRelease(sqlite3_file *pFile){
static int tvfsShmLock(
sqlite3_file *pFile,
- int desiredLock,
- int *gotLock
+ int ofst,
+ int n,
+ int flags
){
int rc = SQLITE_OK;
TestvfsFile *pFd = (TestvfsFile *)pFile;
Testvfs *p = (Testvfs *)(pFd->pVfs->pAppData);
- char *zLock = "";
-
- switch( desiredLock ){
- case SQLITE_SHM_READ: zLock = "READ"; break;
- case SQLITE_SHM_WRITE: zLock = "WRITE"; break;
- case SQLITE_SHM_CHECKPOINT: zLock = "CHECKPOINT"; break;
- case SQLITE_SHM_RECOVER: zLock = "RECOVER"; break;
- case SQLITE_SHM_PENDING: zLock = "PENDING"; break;
- case SQLITE_SHM_UNLOCK: zLock = "UNLOCK"; break;
+ int nLock;
+ char zLock[80];
+
+ sqlite3_snprintf(sizeof(zLock), zLock, "%d %d", ofst, n);
+ nLock = strlen(zLock);
+ if( flags & SQLITE_SHM_LOCK ){
+ strcpy(&zLock[nLock], " lock");
+ }else{
+ strcpy(&zLock[nLock], " unlock");
+ }
+ nLock += strlen(&zLock[nLock]);
+ if( flags & SQLITE_SHM_SHARED ){
+ strcpy(&zLock[nLock], " shared");
+ }else{
+ strcpy(&zLock[nLock], " exclusive");
}
tvfsExecTcl(p, "xShmLock",
Tcl_NewStringObj(pFd->pShm->zFile, -1), pFd->pShmId,
Tcl_NewStringObj(zLock, -1)
);
tvfsResultCode(p, &rc);
- if( rc==SQLITE_OK ){
- *gotLock = desiredLock;
- }
-
return rc;
}
@@ -716,9 +719,7 @@ static void testvfs_obj_del(ClientData cd){
**
** SCRIPT xShmLock FILENAME ID LOCK
**
-** where LOCK is one of "UNLOCK", "READ", "READ_FULL", "WRITE", "PENDING",
-** "CHECKPOINT" or "RECOVER". The script should return an SQLite error
-** code.
+** where LOCK is of the form "OFFSET NBYTE lock/unlock shared/exclusive"
*/
static int testvfs_cmd(
ClientData cd,