]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
Add debugging functions btreePageOriginFile() and btreePageOriginOffset(). btree-debug
authordan <dan@noemail.net>
Sat, 27 May 2017 18:05:32 +0000 (18:05 +0000)
committerdan <dan@noemail.net>
Sat, 27 May 2017 18:05:32 +0000 (18:05 +0000)
FossilOrigin-Name: 214d238a4763adffa914232ffb4a94b27008f5429d2952d139490d6f9fd4114e

manifest
manifest.uuid
src/btree.c
src/pager.c
src/pager.h

index c92b423c16ba1f264722e51abcce56e5af492473..1cdd6a4ea6385ce9d90b60c60a59c683beb8a8da 100644 (file)
--- 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
index 14c57052b7f02b43710d85d9426f51d1780042ca..bf62dbb7b5285ae56ed4664d0de2fc51073966cc 100644 (file)
@@ -1 +1 @@
-12964240f1e497e6f02e4a87bf3eff75c807020108c3de83977264cc66188b8d
\ No newline at end of file
+214d238a4763adffa914232ffb4a94b27008f5429d2952d139490d6f9fd4114e
\ No newline at end of file
index 839469ece332d127e5ca45fa50e4303af3640569..1a1705b282c0def6783892ab029bfdd7e2aa36ce 100644 (file)
@@ -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
index 06b4e8a4faf45ab0233ea36805511f7c29824c41..3e34d3c4d2cf55a0177069a12df865b6d050e688 100644 (file)
@@ -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 */
index 84c177820407238300b7040306ab352a9f9fcf89..b8433885521237358d28e2b2db179f0e8fc17a92 100644 (file)
@@ -237,4 +237,6 @@ void *sqlite3PagerCodec(DbPage *);
 # define enable_simulated_io_errors()
 #endif
 
+const char *sqlite3PagerOrigin(DbPage *pPg, i64 *piOffset);
+
 #endif /* SQLITE_PAGER_H */