diff options
author | drh <drh@noemail.net> | 2013-01-03 22:22:55 +0000 |
---|---|---|
committer | drh <drh@noemail.net> | 2013-01-03 22:22:55 +0000 |
commit | 89ded43b3602fee3a703b7ca28b7536e9f8d6a03 (patch) | |
tree | bfed6cb44a3e38bbd7e5c0fd2abf4905b83e7963 /src/backup.c | |
parent | bd36911f4d3449cdcac15db56bb1bf5684e779d4 (diff) | |
parent | 26de1e99568c0f04a7956f2503bd9fcf007d85e6 (diff) | |
download | sqlite-89ded43b3602fee3a703b7ca28b7536e9f8d6a03.tar.gz sqlite-89ded43b3602fee3a703b7ca28b7536e9f8d6a03.zip |
Merge recent trunk changes into the sessions branch.
FossilOrigin-Name: 7e068e39b3b31364271664e0afb1cd95a235c26f
Diffstat (limited to 'src/backup.c')
-rw-r--r-- | src/backup.c | 14 |
1 files changed, 11 insertions, 3 deletions
diff --git a/src/backup.c b/src/backup.c index b234716d6..d3614b88c 100644 --- a/src/backup.c +++ b/src/backup.c @@ -212,7 +212,12 @@ static int isFatalError(int rc){ ** page iSrcPg from the source database. Copy this data into the ** destination database. */ -static int backupOnePage(sqlite3_backup *p, Pgno iSrcPg, const u8 *zSrcData){ +static int backupOnePage( + sqlite3_backup *p, /* Backup handle */ + Pgno iSrcPg, /* Source database page to backup */ + const u8 *zSrcData, /* Source database page data */ + int bUpdate /* True for an update, false otherwise */ +){ Pager * const pDestPager = sqlite3BtreePager(p->pDest); const int nSrcPgsz = sqlite3BtreeGetPageSize(p->pSrc); int nDestPgsz = sqlite3BtreeGetPageSize(p->pDest); @@ -285,6 +290,9 @@ static int backupOnePage(sqlite3_backup *p, Pgno iSrcPg, const u8 *zSrcData){ */ memcpy(zOut, zIn, nCopy); ((u8 *)sqlite3PagerGetExtra(pDestPg))[0] = 0; + if( iOff==0 && bUpdate==0 ){ + sqlite3Put4byte(&zOut[28], sqlite3BtreeLastPage(p->pSrc)); + } } sqlite3PagerUnref(pDestPg); } @@ -391,7 +399,7 @@ int sqlite3_backup_step(sqlite3_backup *p, int nPage){ DbPage *pSrcPg; /* Source page object */ rc = sqlite3PagerGet(pSrcPager, iSrcPg, &pSrcPg); if( rc==SQLITE_OK ){ - rc = backupOnePage(p, iSrcPg, sqlite3PagerGetData(pSrcPg)); + rc = backupOnePage(p, iSrcPg, sqlite3PagerGetData(pSrcPg), 0); sqlite3PagerUnref(pSrcPg); } } @@ -639,7 +647,7 @@ void sqlite3BackupUpdate(sqlite3_backup *pBackup, Pgno iPage, const u8 *aData){ int rc; assert( p->pDestDb ); sqlite3_mutex_enter(p->pDestDb->mutex); - rc = backupOnePage(p, iPage, aData); + rc = backupOnePage(p, iPage, aData, 1); sqlite3_mutex_leave(p->pDestDb->mutex); assert( rc!=SQLITE_BUSY && rc!=SQLITE_LOCKED ); if( rc!=SQLITE_OK ){ |