Index: third_party/sqlite/src/src/test_journal.c |
diff --git a/third_party/sqlite/src/src/test_journal.c b/third_party/sqlite/src/src/test_journal.c |
index 9db8b3864f7fb61bcd65dbf9ee5fc7fc42060e9a..ca4c5c38844b96381a6b1d26cb1567eb7b7b9e55 100644 |
--- a/third_party/sqlite/src/src/test_journal.c |
+++ b/third_party/sqlite/src/src/test_journal.c |
@@ -14,8 +14,6 @@ |
** an existing VFS. The code in this file attempts to verify that SQLite |
** correctly populates and syncs a journal file before writing to a |
** corresponding database file. |
-** |
-** $Id: test_journal.c,v 1.17 2009/06/26 10:39:36 danielk1977 Exp $ |
*/ |
#if SQLITE_TEST /* This file is used for testing only */ |
@@ -163,9 +161,10 @@ static void jtDlClose(sqlite3_vfs*, void*); |
static int jtRandomness(sqlite3_vfs*, int nByte, char *zOut); |
static int jtSleep(sqlite3_vfs*, int microseconds); |
static int jtCurrentTime(sqlite3_vfs*, double*); |
+static int jtCurrentTimeInt64(sqlite3_vfs*, sqlite3_int64*); |
static sqlite3_vfs jt_vfs = { |
- 1, /* iVersion */ |
+ 2, /* iVersion */ |
sizeof(jt_file), /* szOsFile */ |
JT_MAX_PATHNAME, /* mxPathname */ |
0, /* pNext */ |
@@ -181,7 +180,9 @@ static sqlite3_vfs jt_vfs = { |
jtDlClose, /* xDlClose */ |
jtRandomness, /* xRandomness */ |
jtSleep, /* xSleep */ |
- jtCurrentTime /* xCurrentTime */ |
+ jtCurrentTime, /* xCurrentTime */ |
+ 0, /* xGetLastError */ |
+ jtCurrentTimeInt64 /* xCurrentTimeInt64 */ |
}; |
static sqlite3_io_methods jt_io_methods = { |
@@ -360,6 +361,7 @@ static int openTransaction(jt_file *pMain, jt_file *pJournal){ |
sqlite3_file *p = pMain->pReal; |
int rc = SQLITE_OK; |
+ closeTransaction(pMain); |
aData = sqlite3_malloc(pMain->nPagesize); |
pMain->pWritable = sqlite3BitvecCreate(pMain->nPage); |
pMain->aCksum = sqlite3_malloc(sizeof(u32) * (pMain->nPage + 1)); |
@@ -378,6 +380,15 @@ static int openTransaction(jt_file *pMain, jt_file *pJournal){ |
** leaf to the jt_file.pWritable bitvec. |
*/ |
rc = sqlite3OsRead(p, aData, pMain->nPagesize, 0); |
+ if( rc==SQLITE_OK ){ |
+ u32 nDbsize = decodeUint32(&aData[28]); |
+ if( nDbsize>0 && memcmp(&aData[24], &aData[92], 4)==0 ){ |
+ u32 iPg; |
+ for(iPg=nDbsize+1; iPg<=pMain->nPage; iPg++){ |
+ sqlite3BitvecSet(pMain->pWritable, iPg); |
+ } |
+ } |
+ } |
iTrunk = decodeUint32(&aData[32]); |
while( rc==SQLITE_OK && iTrunk>0 ){ |
u32 nLeaf; |
@@ -491,7 +502,6 @@ finish_rjf: |
return rc; |
} |
- |
/* |
** Write data to an jt-file. |
*/ |
@@ -803,7 +813,13 @@ static int jtSleep(sqlite3_vfs *pVfs, int nMicro){ |
** Return the current time as a Julian Day number in *pTimeOut. |
*/ |
static int jtCurrentTime(sqlite3_vfs *pVfs, double *pTimeOut){ |
- return sqlite3OsCurrentTime(g.pVfs, pTimeOut); |
+ return g.pVfs->xCurrentTime(g.pVfs, pTimeOut); |
+} |
+/* |
+** Return the current time as a Julian Day number in *pTimeOut. |
+*/ |
+static int jtCurrentTimeInt64(sqlite3_vfs *pVfs, sqlite3_int64 *pTimeOut){ |
+ return g.pVfs->xCurrentTimeInt64(g.pVfs, pTimeOut); |
} |
/************************************************************************** |
@@ -823,6 +839,11 @@ int jt_register(char *zWrap, int isDefault){ |
return SQLITE_ERROR; |
} |
jt_vfs.szOsFile = sizeof(jt_file) + g.pVfs->szOsFile; |
+ if( g.pVfs->iVersion==1 ){ |
+ jt_vfs.iVersion = 1; |
+ }else if( g.pVfs->xCurrentTimeInt64==0 ){ |
+ jt_vfs.xCurrentTimeInt64 = 0; |
+ } |
sqlite3_vfs_register(&jt_vfs, isDefault); |
return SQLITE_OK; |
} |