From ea89730823331765de66391998f58b8a11a02c29 Mon Sep 17 00:00:00 2001 From: danielk1977 Date: Fri, 19 Sep 2008 15:10:58 +0000 Subject: [PATCH] In sqlite3BtreeGetMeta(), if BtShared.pPage1 is available use it instead of requesting a new reference from the pager layer. (CVS 5724) FossilOrigin-Name: 59be34cfa4fe74f7e5b547c55d273ecba9d7796c --- manifest | 12 ++++++------ manifest.uuid | 2 +- src/btree.c | 23 +++++++++++++++-------- 3 files changed, 22 insertions(+), 15 deletions(-) diff --git a/manifest b/manifest index cac3999762..b5eb763553 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Remove\san\sobsolete\slayer\sof\sredirection\sin\spager.c.\s(CVS\s5723) -D 2008-09-19T09:14:44 +C In\ssqlite3BtreeGetMeta(),\sif\sBtShared.pPage1\sis\savailable\suse\sit\sinstead\sof\srequesting\sa\snew\sreference\sfrom\sthe\spager\slayer.\s(CVS\s5724) +D 2008-09-19T15:10:58 F Makefile.arm-wince-mingw32ce-gcc fcd5e9cd67fe88836360bb4f9ef4cb7f8e2fb5a0 F Makefile.in d15a7ebfe5e057a72a49805ffb302dbb601c8329 F Makefile.linux-gcc d53183f4aa6a9192d249731c90dbdffbd2c68654 @@ -99,7 +99,7 @@ F src/attach.c db3f4a60538733c1e4dcb9d0217a6e0d6ccd615b F src/auth.c c8b2ab5c8bad4bd90ed7c294694f48269162c627 F src/bitvec.c 95c86bd18d8fedf0533f5af196192546e10a7e7d F src/btmutex.c 709cad2cdca0afd013f0f612363810e53f59ec53 -F src/btree.c 54fc8950e4c292ff92bb431449a27772862feae9 +F src/btree.c cfe8dbbaa75f587653f33121c3e82999c65069ae F src/btree.h 6371c5e599fab391a150c96afbc10062b276d107 F src/btreeInt.h e36f77e6621d671beb19ae581af1eba116cdfdc4 F src/build.c 160c71acca8f643f436ed6c1ee2f684c88df4dfe @@ -637,7 +637,7 @@ F tool/speedtest16.c c8a9c793df96db7e4933f0852abb7a03d48f2e81 F tool/speedtest2.tcl ee2149167303ba8e95af97873c575c3e0fab58ff F tool/speedtest8.c 1dbced29de5f59ba2ebf877edcadf171540374d1 F tool/speedtest8inst1.c 293327bc76823f473684d589a8160bde1f52c14e -P 4de71a4e2f59d302156e10efcb288efa23e18598 -R e7e88b502f42bf2bf854d0ef69d24fbc +P 75deaa442f3a363c4ea5b6f0e510306feeaa8915 +R 62a9176bcf4a5c57a6633d26293ede50 U danielk1977 -Z a0c5df28c3667ba69a8633d2e8e61142 +Z 89134c443f08e4715d35e3ebe96ef424 diff --git a/manifest.uuid b/manifest.uuid index 87582be27d..a8be7d7d02 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -75deaa442f3a363c4ea5b6f0e510306feeaa8915 \ No newline at end of file +59be34cfa4fe74f7e5b547c55d273ecba9d7796c \ No newline at end of file diff --git a/src/btree.c b/src/btree.c index b7f738ab59..3c1512f2b3 100644 --- a/src/btree.c +++ b/src/btree.c @@ -9,7 +9,7 @@ ** May you share freely, never taking more than you give. ** ************************************************************************* -** $Id: btree.c,v 1.514 2008/09/18 18:17:04 danielk1977 Exp $ +** $Id: btree.c,v 1.515 2008/09/19 15:10:58 danielk1977 Exp $ ** ** This file implements a external (disk-based) database using BTrees. ** See the header comment on "btreeInt.h" for additional information. @@ -1148,7 +1148,7 @@ static int getAndInitPage( pPage = *ppPage; } if( pPage->isInit!=PAGE_ISINIT_FULL ){ - rc = sqlite3BtreeInitPage(pPage, pParent); + rc = sqlite3BtreeInitPage(pPage, pParent); }else if( pParent && (pPage==pParent || pPage->pParent!=pParent) ){ /* This condition indicates a loop in the b-tree structure (the scenario ** where database corruption has caused a page to be a direct or @@ -6472,14 +6472,21 @@ int sqlite3BtreeGetMeta(Btree *p, int idx, u32 *pMeta){ } assert( idx>=0 && idx<=15 ); - rc = sqlite3PagerGet(pBt->pPager, 1, &pDbPage); - if( rc ){ - sqlite3BtreeLeave(p); - return rc; + if( !pBt->pPage1 ){ + rc = sqlite3PagerGet(pBt->pPager, 1, &pDbPage); + if( rc ){ + sqlite3BtreeLeave(p); + return rc; + } + pP1 = (unsigned char *)sqlite3PagerGetData(pDbPage); + }else{ + pP1 = (unsigned char *)pBt->pPage1->aData; } - pP1 = (unsigned char *)sqlite3PagerGetData(pDbPage); *pMeta = get4byte(&pP1[36 + idx*4]); - sqlite3PagerUnref(pDbPage); + + if( !pBt->pPage1 ){ + sqlite3PagerUnref(pDbPage); + } /* If autovacuumed is disabled in this build but we are trying to ** access an autovacuumed database, then make the database readonly.