diff options
author | dan <dan@noemail.net> | 2013-04-03 11:52:16 +0000 |
---|---|---|
committer | dan <dan@noemail.net> | 2013-04-03 11:52:16 +0000 |
commit | 6c96946475fd5b61168ba6b7e43b33e46fee2a9f (patch) | |
tree | c24e314acce93dd88433a08d7c790fa174254cc0 /src | |
parent | f7679ad19eaaf249bd803010eab2da14f21c61e9 (diff) | |
download | sqlite-6c96946475fd5b61168ba6b7e43b33e46fee2a9f.tar.gz sqlite-6c96946475fd5b61168ba6b7e43b33e46fee2a9f.zip |
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
Diffstat (limited to 'src')
-rw-r--r-- | src/btree.c | 33 |
1 files changed, 1 insertions, 32 deletions
diff --git a/src/btree.c b/src/btree.c index dd37112c3..42c4ee3cc 100644 --- a/src/btree.c +++ b/src/btree.c @@ -2584,34 +2584,6 @@ int sqlite3BtreeNewDb(Btree *p){ } /* -** 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- ** transaction. If the second argument is 2 or more and exclusive @@ -2718,9 +2690,6 @@ int sqlite3BtreeBeginTrans(Btree *p, int wrflag){ }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; |