diff options
author | drh <drh@noemail.net> | 2010-05-13 08:53:41 +0000 |
---|---|---|
committer | drh <drh@noemail.net> | 2010-05-13 08:53:41 +0000 |
commit | 043c20e63e7c075e85ef554fdf7bbba5cd9c0ea7 (patch) | |
tree | 51961f4f4d2f98d34248b8c4722f7d36d7e8c37e /src/pager.c | |
parent | eaf52d883a9eafbe7ad60bd7590988c66d696c07 (diff) | |
parent | a925fd256b74e5da9c6320849c3b7d85110ce73f (diff) | |
download | sqlite-043c20e63e7c075e85ef554fdf7bbba5cd9c0ea7.tar.gz sqlite-043c20e63e7c075e85ef554fdf7bbba5cd9c0ea7.zip |
The refactored of VFS SHM primitives are now working so merge the
wal-refactor branch back into the trunk.
FossilOrigin-Name: bce21c18380715e894eac9c173c97315e0d69d93
Diffstat (limited to 'src/pager.c')
-rw-r--r-- | src/pager.c | 24 |
1 files changed, 18 insertions, 6 deletions
diff --git a/src/pager.c b/src/pager.c index 672789c94..42403c997 100644 --- a/src/pager.c +++ b/src/pager.c @@ -3077,7 +3077,7 @@ int sqlite3PagerClose(Pager *pPager){ pPager->errCode = 0; pPager->exclusiveMode = 0; #ifndef SQLITE_OMIT_WAL - sqlite3WalClose(pPager->pWal, pPager->fd, + sqlite3WalClose(pPager->pWal, (pPager->noSync ? 0 : pPager->sync_flags), pPager->pageSize, pTmp ); @@ -5878,7 +5878,7 @@ int sqlite3PagerCheckpoint(Pager *pPager){ int rc = SQLITE_OK; if( pPager->pWal ){ u8 *zBuf = (u8 *)pPager->pTmpSpace; - rc = sqlite3WalCheckpoint(pPager->pWal, pPager->fd, + rc = sqlite3WalCheckpoint(pPager->pWal, (pPager->noSync ? 0 : pPager->sync_flags), pPager->pageSize, zBuf, pPager->xBusyHandler, pPager->pBusyHandlerArg @@ -5892,6 +5892,15 @@ int sqlite3PagerWalCallback(Pager *pPager){ } /* +** Return true if the underlying VFS for the given pager supports the +** primitives necessary for write-ahead logging. +*/ +int sqlite3PagerWalSupported(Pager *pPager){ + const sqlite3_io_methods *pMethods = pPager->fd->pMethods; + return pMethods->iVersion>=2 && pMethods->xShmOpen!=0; +} + +/* ** Open a connection to the write-ahead log file for pager pPager. If ** the log connection is already open, this function is a no-op. ** @@ -5903,12 +5912,14 @@ int sqlite3PagerOpenWal(Pager *pPager, int *pisOpen){ assert( pPager->state>=PAGER_SHARED ); if( !pPager->pWal ){ + if( !sqlite3PagerWalSupported(pPager) ) return SQLITE_CANTOPEN; /* Open the connection to the log file. If this operation fails, ** (e.g. due to malloc() failure), unlock the database file and ** return an error code. */ - rc = sqlite3WalOpen(pPager->pVfs, pPager->zFilename, &pPager->pWal); + rc = sqlite3WalOpen(pPager->pVfs, pPager->fd, + pPager->zFilename, &pPager->pWal); if( rc==SQLITE_OK ){ pPager->journalMode = PAGER_JOURNALMODE_WAL; } @@ -5944,7 +5955,8 @@ int sqlite3PagerCloseWal(Pager *pPager){ rc = pagerHasWAL(pPager, &logexists); } if( rc==SQLITE_OK && logexists ){ - rc = sqlite3WalOpen(pPager->pVfs, pPager->zFilename, &pPager->pWal); + rc = sqlite3WalOpen(pPager->pVfs, pPager->fd, + pPager->zFilename, &pPager->pWal); } } @@ -5954,8 +5966,8 @@ int sqlite3PagerCloseWal(Pager *pPager){ if( rc==SQLITE_OK && pPager->pWal ){ rc = sqlite3OsLock(pPager->fd, SQLITE_LOCK_EXCLUSIVE); if( rc==SQLITE_OK ){ - rc = sqlite3WalClose(pPager->pWal, pPager->fd, - (pPager->noSync ? 0 : pPager->sync_flags), + rc = sqlite3WalClose(pPager->pWal, + (pPager->noSync ? 0 : pPager->sync_flags), pPager->pageSize, (u8*)pPager->pTmpSpace ); pPager->pWal = 0; |