From: dan Date: Sat, 27 May 2017 18:05:32 +0000 (+0000) Subject: Add debugging functions btreePageOriginFile() and btreePageOriginOffset(). X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=refs%2Fheads%2Fbtree-debug;p=thirdparty%2Fsqlite.git Add debugging functions btreePageOriginFile() and btreePageOriginOffset(). FossilOrigin-Name: 214d238a4763adffa914232ffb4a94b27008f5429d2952d139490d6f9fd4114e --- diff --git a/manifest b/manifest index c92b423c16..1cdd6a4ea6 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Merge\sall\sfixes\sfrom\sthe\s3.19.2\srelease. -D 2017-05-25T17:36:33.543 +C Add\sdebugging\sfunctions\sbtreePageOriginFile()\sand\sbtreePageOriginOffset(). +D 2017-05-27T18:05:32.812 F Makefile.in 227347646e289e3b016ebb7a391ad6ed4ab56525834d56d47d1a83b8d97d6989 F Makefile.linux-gcc 7bc79876b875010e8c8f9502eb935ca92aa3c434 F Makefile.msc fb28c0304f8a14c5ce7d4bde9fea1c903f644b49e78ebd9976ab2a1f0eb8afb5 @@ -349,7 +349,7 @@ F src/auth.c 79f96c6f33bf0e5da8d1c282cee5ebb1852bb8a6ccca3e485d7c459b035d9c3c F src/backup.c faf17e60b43233c214aae6a8179d24503a61e83b F src/bitvec.c 17ea48eff8ba979f1f5b04cc484c7bb2be632f33 F src/btmutex.c 0e9ce2d56159b89b9bc8e197e023ee11e39ff8ca -F src/btree.c 9d5f1346945b4d94715fb990e7243f583a3f174606d812fa179b14cdc72d0e86 +F src/btree.c babb72f4fda4577b8ccd12bc63330fc57e92272678c51b425de5a8268f08a433 F src/btree.h 80f518c0788be6cec8d9f8e13bd8e380df299d2b5e4ac340dc887b0642647cfc F src/btreeInt.h a392d353104b4add58b4a59cb185f5d5693dde832c565b77d8d4c343ed98f610 F src/build.c 4026a9c554b233e50c5e9ad46963e676cf54dd2306d952aa1eaa07a1bc9ce14f @@ -393,8 +393,8 @@ F src/os_setup.h 0dbaea40a7d36bf311613d31342e0b99e2536586 F src/os_unix.c 4a58dfdfda7e72aab0e393953890a9b6d40a7ff4 F src/os_win.c 85b19486054c8cd5c4117dea882d983ea065d16e F src/os_win.h 7b073010f1451abe501be30d12f6bc599824944a -F src/pager.c 1ca1c8157485d474695d8fc82af7a403c50370fa379b23e4f61ea1c17364e5ea -F src/pager.h 32adb801774046224e87829fa74ce16ce31a9087 +F src/pager.c fcca412103fb548dfb209ba652893e4ca879036b779fd8c1f95eea9a442c074f +F src/pager.h e430a536b3eb5ec053992afd3d561185a33de546d2905c47413403b9899698c4 F src/parse.y 0513387ce02fea97897d8caef82d45f347818593f24f1bdc48e0c530a8af122d F src/pcache.c 62835bed959e2914edd26afadfecce29ece0e870 F src/pcache.h 2cedcd8407eb23017d92790b112186886e179490 @@ -1585,7 +1585,7 @@ F vsixtest/vsixtest.tcl 6a9a6ab600c25a91a7acc6293828957a386a8a93 F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0 -P bbd2d0e1400984c9fabb4df015981c09ad172139ffa33db5132951d4f1f6fc96 edb4e819b0c058c7d74d27ebd14cc5ceb2bad6a6144a486a970182b7afe3f8b9 -R 8f7f4a2a67f7b616427682df9786aa3e -U drh -Z e4355aaf22b79f91f5965efabd280186 +P 12964240f1e497e6f02e4a87bf3eff75c807020108c3de83977264cc66188b8d +R 2bfdab9d552d306c18a7beebf16cb9a1 +U dan +Z e78eb8e2881553fe9b3c98c2aeb63057 diff --git a/manifest.uuid b/manifest.uuid index 14c57052b7..bf62dbb7b5 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -12964240f1e497e6f02e4a87bf3eff75c807020108c3de83977264cc66188b8d \ No newline at end of file +214d238a4763adffa914232ffb4a94b27008f5429d2952d139490d6f9fd4114e \ No newline at end of file diff --git a/src/btree.c b/src/btree.c index 839469ece3..1a1705b282 100644 --- a/src/btree.c +++ b/src/btree.c @@ -756,6 +756,26 @@ void sqlite3BtreeClearCursor(BtCursor *pCur){ pCur->eState = CURSOR_INVALID; } +/* +** This is a debugging routine designed to reveal the file (database or +** wal file) that the page would be read from if it were reread at the +** current time. It returns the name of the file. +*/ +static const char *btreePageOriginFile(MemPage *pPage){ + return sqlite3PagerOrigin(pPage->pDbPage, 0); +} + +/* +** This is a debugging routine designed to reveal the byte offset that +** the page would be read from (from either the database or wal file) if it +** were reread at the current time. The byte offset is returned. +*/ +static i64 btreePageOriginOffset(MemPage *pPage){ + i64 iOffset = 0; + sqlite3PagerOrigin(pPage->pDbPage, &iOffset); + return iOffset; +} + /* ** In this version of BtreeMoveto, pKey is a packed index record ** such as is generated by the OP_MakeRecord opcode. Unpack the diff --git a/src/pager.c b/src/pager.c index 06b4e8a4fa..3e34d3c4d2 100644 --- a/src/pager.c +++ b/src/pager.c @@ -7602,4 +7602,31 @@ int sqlite3PagerWalFramesize(Pager *pPager){ } #endif +/* +** Return the name of the file (wal file or database file) that page +** pPg would be read from if it were reread at this point. Also set +** output parameter (*piOffset) to the offset within said file. +*/ +const char *sqlite3PagerOrigin(DbPage *pPg, i64 *piOffset){ + Pager *pPager = pPg->pPager; + Pgno pgno = pPg->pgno; + + assert( pPager->eState>=PAGER_READER ); + assert( assert_pager_state(pPager) ); + assert( pPager->hasHeldSharedLock==1 ); + + if( pagerUseWal(pPager) ){ + u32 iFrame = 0; + int rc = sqlite3WalFindFrame(pPager->pWal, pgno, &iFrame); + if( rc!=SQLITE_OK ) return 0; + if( iFrame ){ + if( piOffset ) *piOffset = (i64)(iFrame-1) * (pPager->pageSize + 24) + 32; + return (const char*)pPager->zWal; + } + } + + if( piOffset ) *piOffset = (i64)pPager->pageSize * (i64)(pgno-1); + return (const char*)pPager->zFilename; +} + #endif /* SQLITE_OMIT_DISKIO */ diff --git a/src/pager.h b/src/pager.h index 84c1778204..b843388552 100644 --- a/src/pager.h +++ b/src/pager.h @@ -237,4 +237,6 @@ void *sqlite3PagerCodec(DbPage *); # define enable_simulated_io_errors() #endif +const char *sqlite3PagerOrigin(DbPage *pPg, i64 *piOffset); + #endif /* SQLITE_PAGER_H */