From: dan Date: Wed, 3 Apr 2013 11:52:16 +0000 (+0000) Subject: Remove the restriction on using xFetch to load the root pages of tables and indexes... X-Git-Tag: version-3.7.17~114^2~4 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=6c96946475fd5b61168ba6b7e43b33e46fee2a9f;p=thirdparty%2Fsqlite.git 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 --- diff --git a/manifest b/manifest index cf7c875169..5aaf2a1f4f 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C When\smoving\sa\spage\sto\smake\sway\sfor\sthe\sroot\spage\sof\sa\snew\stable\sor\sindex\sin\san\sauto-vacuum\sdatabase,\ssave\sthe\spositions\sof\sany\scursors\sthat\smay\sbe\sholding\sxFetch\sreferences\sto\sthe\spage\sbeing\smoved. -D 2013-04-03T11:38:36.388 +C Remove\sthe\srestriction\son\susing\sxFetch\sto\sload\sthe\sroot\spages\sof\stables\sand\sindexes.\sIt\sappears\sto\shave\sbeen\sbased\son\sa\smisconception. +D 2013-04-03T11:52:16.489 F Makefile.arm-wince-mingw32ce-gcc d6df77f1f48d690bd73162294bbba7f59507c72f F Makefile.in df3e48659d80e1b7765785d8d66c86b320f72cc7 F Makefile.linux-gcc 91d710bdc4998cb015f39edf3cb314ec4f4d7e23 @@ -121,7 +121,7 @@ F src/auth.c 523da7fb4979469955d822ff9298352d6b31de34 F src/backup.c b266767351ae2d847716c56fcb2a1fea7c761c03 F src/bitvec.c 19a4ba637bd85f8f63fc8c9bae5ade9fb05ec1cb F src/btmutex.c 976f45a12e37293e32cae0281b15a21d48a8aaa7 -F src/btree.c 4f4b23941b38f68db425f68960f26031204d9807 +F src/btree.c fd492d65eee0eb35f4000ddf478215c99dca6838 F src/btree.h d9490cd37aaeb530a41b07f06e1262950b1be916 F src/btreeInt.h eecc84f02375b2bb7a44abbcbbe3747dde73edb2 F src/build.c 083da8466fd7e481cb8bd5264398f537507f6176 @@ -1042,7 +1042,7 @@ F tool/vdbe-compress.tcl f12c884766bd14277f4fcedcae07078011717381 F tool/warnings-clang.sh f6aa929dc20ef1f856af04a730772f59283631d4 F tool/warnings.sh fbc018d67fd7395f440c28f33ef0f94420226381 F tool/win/sqlite.vsix 97894c2790eda7b5bce3cc79cb2a8ec2fde9b3ac -P 3f09fba18f7e61e21381ffea13c31b968efd7d77 -R 7ec6dcb52e20c580b46b605bb884042f +P 9d9b1da54a555e8fb6037d63d1952458c12956d2 +R a9b149f10f100efb054372d5cd9076ff U dan -Z c27841a9d742e32f5c92b396fb592137 +Z cc4101c000adda873dbba809b24aeeeb diff --git a/manifest.uuid b/manifest.uuid index ab30a2773c..a21ce49234 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -9d9b1da54a555e8fb6037d63d1952458c12956d2 \ No newline at end of file +5b082efead488a2fccc18171e640e0aa5252d1d0 \ No newline at end of file diff --git a/src/btree.c b/src/btree.c index dd37112c39..42c4ee3cc0 100644 --- a/src/btree.c +++ b/src/btree.c @@ -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;