Performance improvements in the getAndInitPage() routine of btree.c.

FossilOrigin-Name: 2aa50f6f2029e3c91a4cb91224df8ec1194f215e
This commit is contained in:
drh 2015-11-04 22:31:02 +00:00
parent 9584f58cc2
commit 8dd1c25388
3 changed files with 20 additions and 16 deletions

View File

@ -1,5 +1,5 @@
C Rename\sthe\ssqlite3PagerAcquire()\sfunction\sto\ssqlite3PagerGet().\s\sThe\sformer\nmacro\scalled\ssqlite3PagerGet()\shas\sbeen\sremoved.
D 2015-11-04T20:22:37.219
C Performance\simprovements\sin\sthe\sgetAndInitPage()\sroutine\sof\sbtree.c.
D 2015-11-04T22:31:02.432
F Makefile.in 3a705bb4bd12e194212ddbdbf068310d17153cdb
F Makefile.linux-gcc 7bc79876b875010e8c8f9502eb935ca92aa3c434
F Makefile.msc 702d3e98f3afc6587a78481257f3c4c900efc3a4
@ -282,7 +282,7 @@ F src/auth.c b56c78ebe40a2110fd361379f7e8162d23f92240
F src/backup.c 2869a76c03eb393ee795416e2387005553df72bc
F src/bitvec.c d1f21d7d91690747881f03940584f4cc548c9d3d
F src/btmutex.c 45a968cc85afed9b5e6cf55bf1f42f8d18107f79
F src/btree.c 692ca3e69ade4e86844899dd5f85b2220daf3d76
F src/btree.c 080c3cb5440261dac7e9a03c45a948553338e1de
F src/btree.h b512723e4f27d7ba16b4b985cdecdb82c0f6d0c0
F src/btreeInt.h 3ab435ed27adea54d040584b0bcc488ee7db1e38
F src/build.c ca574d33ffb1763cfd2979383f4d507095bfbe19
@ -1398,7 +1398,7 @@ F tool/vdbe_profile.tcl 246d0da094856d72d2c12efec03250d71639d19f
F tool/warnings-clang.sh f6aa929dc20ef1f856af04a730772f59283631d4
F tool/warnings.sh 48bd54594752d5be3337f12c72f28d2080cb630b
F tool/win/sqlite.vsix deb315d026cc8400325c5863eef847784a219a2f
P 3fece5d02a8790701d8f0af18db4b4db33986369
R ed171729fbc3a46f9021f6d576752c27
P 708253be34084b89987efe955c34557516171a3a
R 95c8020c01e129a733cf3a0e93c349e0
U drh
Z bcdee87febad0b65031e24eb55987e22
Z 87f3216156230480787028b4d8a81ee0

View File

@ -1 +1 @@
708253be34084b89987efe955c34557516171a3a
2aa50f6f2029e3c91a4cb91224df8ec1194f215e

View File

@ -1901,11 +1901,14 @@ static void zeroPage(MemPage *pPage, int flags){
*/
static MemPage *btreePageFromDbPage(DbPage *pDbPage, Pgno pgno, BtShared *pBt){
MemPage *pPage = (MemPage*)sqlite3PagerGetExtra(pDbPage);
pPage->aData = sqlite3PagerGetData(pDbPage);
pPage->pDbPage = pDbPage;
pPage->pBt = pBt;
pPage->pgno = pgno;
pPage->hdrOffset = pgno==1 ? 100 : 0;
if( pgno!=pPage->pgno ){
pPage->aData = sqlite3PagerGetData(pDbPage);
pPage->pDbPage = pDbPage;
pPage->pBt = pBt;
pPage->pgno = pgno;
pPage->hdrOffset = pgno==1 ? 100 : 0;
}
assert( pPage->aData==sqlite3PagerGetData(pDbPage) );
return pPage;
}
@ -2000,20 +2003,21 @@ static int getAndInitPage(
if( rc ){
goto getAndInitPage_error;
}
*ppPage = btreePageFromDbPage(pDbPage, pgno, pBt);
*ppPage = (MemPage*)sqlite3PagerGetExtra(pDbPage);
if( (*ppPage)->isInit==0 ){
btreePageFromDbPage(pDbPage, pgno, pBt);
rc = btreeInitPage(*ppPage);
if( rc!=SQLITE_OK ){
releasePage(*ppPage);
goto getAndInitPage_error;
}
}
assert( (*ppPage)->pgno==pgno );
assert( (*ppPage)->aData==sqlite3PagerGetData(pDbPage) );
/* If obtaining a child page for a cursor, we must verify that the page is
** compatible with the root page. */
if( pCur
&& ((*ppPage)->nCell<1 || (*ppPage)->intKey!=pCur->curIntKey)
){
if( pCur && ((*ppPage)->nCell<1 || (*ppPage)->intKey!=pCur->curIntKey) ){
rc = SQLITE_CORRUPT_BKPT;
releasePage(*ppPage);
goto getAndInitPage_error;