1
0
mirror of https://github.com/sqlite/sqlite.git synced 2025-08-07 02:42:48 +03:00

Remove the restriction on using xFetch to load the root pages of tables and indexes. It appears to have been based on a misconception.

FossilOrigin-Name: 5b082efead488a2fccc18171e640e0aa5252d1d0
This commit is contained in:
dan
2013-04-03 11:52:16 +00:00
parent f7679ad19e
commit 6c96946475
3 changed files with 8 additions and 39 deletions

View File

@@ -2583,34 +2583,6 @@ int sqlite3BtreeNewDb(Btree *p){
return rc;
}
/*
** Ensure that any root page references held by open cursors are not
** mmap pages.
*/
static int btreeSwapOutMmap(BtShared *pBt){
int rc = SQLITE_OK; /* Return code */
BtCursor *pCsr; /* Used to iterate through all open cursors */
for(pCsr=pBt->pCursor; pCsr && rc==SQLITE_OK; pCsr=pCsr->pNext){
if( pCsr->iPage>=0 ){
MemPage *pPg = pCsr->apPage[0];
if( pPg && pPg->pDbPage->flags & PGHDR_MMAP ){
MemPage *pNew = 0;
rc = getAndInitPage(pBt, pPg->pgno, &pNew, 0);
if( rc==SQLITE_OK ){
if( pCsr->iPage==0 ){
pCsr->info.pCell = pNew->aData + (pCsr->info.pCell - pPg->aData);
}
pCsr->apPage[0] = pNew;
releasePage(pPg);
}
}
}
}
return rc;
}
/*
** Attempt to start a new transaction. A write-transaction
** is started if the second argument is nonzero, otherwise a read-
@@ -2717,9 +2689,6 @@ int sqlite3BtreeBeginTrans(Btree *p, int wrflag){
rc = SQLITE_READONLY;
}else{
rc = sqlite3PagerBegin(pBt->pPager,wrflag>1,sqlite3TempInMemory(p->db));
if( rc==SQLITE_OK ){
rc = btreeSwapOutMmap(pBt);
}
if( rc==SQLITE_OK ){
rc = newDatabase(pBt);
}
@@ -4419,7 +4388,7 @@ static int moveToRoot(BtCursor *pCur){
pCur->eState = CURSOR_INVALID;
return SQLITE_OK;
}else{
rc = getAndInitPage(pBt, pCur->pgnoRoot, &pCur->apPage[0], 0);
rc = getAndInitPage(pBt, pCur->pgnoRoot, &pCur->apPage[0], pCur->wrFlag==0);
if( rc!=SQLITE_OK ){
pCur->eState = CURSOR_INVALID;
return rc;