1: /*
2: ** 2007 May 05
3: **
4: ** The author disclaims copyright to this source code. In place of
5: ** a legal notice, here is a blessing:
6: **
7: ** May you do good and not evil.
8: ** May you find forgiveness for yourself and forgive others.
9: ** May you share freely, never taking more than you give.
10: **
11: *************************************************************************
12: ** Code for testing the btree.c module in SQLite. This code
13: ** is not included in the SQLite library. It is used for automated
14: ** testing of the SQLite library.
15: */
16: #include "btreeInt.h"
17: #include <tcl.h>
18:
19: /*
20: ** Usage: sqlite3_shared_cache_report
21: **
22: ** Return a list of file that are shared and the number of
23: ** references to each file.
24: */
25: int sqlite3BtreeSharedCacheReport(
26: void * clientData,
27: Tcl_Interp *interp,
28: int objc,
29: Tcl_Obj *CONST objv[]
30: ){
31: #ifndef SQLITE_OMIT_SHARED_CACHE
32: extern BtShared *sqlite3SharedCacheList;
33: BtShared *pBt;
34: Tcl_Obj *pRet = Tcl_NewObj();
35: for(pBt=GLOBAL(BtShared*,sqlite3SharedCacheList); pBt; pBt=pBt->pNext){
36: const char *zFile = sqlite3PagerFilename(pBt->pPager);
37: Tcl_ListObjAppendElement(interp, pRet, Tcl_NewStringObj(zFile, -1));
38: Tcl_ListObjAppendElement(interp, pRet, Tcl_NewIntObj(pBt->nRef));
39: }
40: Tcl_SetObjResult(interp, pRet);
41: #endif
42: return TCL_OK;
43: }
44:
45: /*
46: ** Print debugging information about all cursors to standard output.
47: */
48: void sqlite3BtreeCursorList(Btree *p){
49: #ifdef SQLITE_DEBUG
50: BtCursor *pCur;
51: BtShared *pBt = p->pBt;
52: for(pCur=pBt->pCursor; pCur; pCur=pCur->pNext){
53: MemPage *pPage = pCur->apPage[pCur->iPage];
54: char *zMode = pCur->wrFlag ? "rw" : "ro";
55: sqlite3DebugPrintf("CURSOR %p rooted at %4d(%s) currently at %d.%d%s\n",
56: pCur, pCur->pgnoRoot, zMode,
57: pPage ? pPage->pgno : 0, pCur->aiIdx[pCur->iPage],
58: (pCur->eState==CURSOR_VALID) ? "" : " eof"
59: );
60: }
61: #endif
62: }
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>