mirror of
https://github.com/sqlite/sqlite.git
synced 2025-08-08 14:02:16 +03:00
When opening a write-transaction on a database file that has been appended to or truncated by a pre-3.7.0 client, update the database-size field in the database header. Fix for [51ae9cad31].
FossilOrigin-Name: 65b8636ac6e5d3e4502d4f576ddf9350d5df3022
This commit is contained in:
18
src/btree.c
18
src/btree.c
@@ -2569,13 +2569,27 @@ int sqlite3BtreeBeginTrans(Btree *p, int wrflag){
|
||||
if( p->inTrans>pBt->inTransaction ){
|
||||
pBt->inTransaction = p->inTrans;
|
||||
}
|
||||
#ifndef SQLITE_OMIT_SHARED_CACHE
|
||||
if( wrflag ){
|
||||
MemPage *pPage1 = pBt->pPage1;
|
||||
#ifndef SQLITE_OMIT_SHARED_CACHE
|
||||
assert( !pBt->pWriter );
|
||||
pBt->pWriter = p;
|
||||
pBt->isExclusive = (u8)(wrflag>1);
|
||||
}
|
||||
#endif
|
||||
|
||||
/* If the db-size header field is incorrect (as it may be if an old
|
||||
** client has been writing the database file), update it now. Doing
|
||||
** this sooner rather than later means the database size can safely
|
||||
** re-read the database size from page 1 if a savepoint or transaction
|
||||
** rollback occurs within the transaction.
|
||||
*/
|
||||
if( pBt->nPage!=get4byte(&pPage1->aData[28]) ){
|
||||
rc = sqlite3PagerWrite(pPage1->pDbPage);
|
||||
if( rc==SQLITE_OK ){
|
||||
put4byte(&pPage1->aData[28], pBt->nPage);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
Reference in New Issue
Block a user