aboutsummaryrefslogtreecommitdiff
path: root/src/btree.c
diff options
context:
space:
mode:
authordanielk1977 <danielk1977@noemail.net>2006-01-11 14:09:31 +0000
committerdanielk1977 <danielk1977@noemail.net>2006-01-11 14:09:31 +0000
commitb82e7edae9c6f8b0c9f2f6745442b5663a55b51a (patch)
treec388bb764973fcc40e8812c26ed450e7288a9c45 /src/btree.c
parent003437a0a7563fddadb95d4103630da3a9d7f2ae (diff)
downloadsqlite-b82e7edae9c6f8b0c9f2f6745442b5663a55b51a.tar.gz
sqlite-b82e7edae9c6f8b0c9f2f6745442b5663a55b51a.zip
Fix bugs caused by assuming that shared-schemas are initialized. (CVS 2917)
FossilOrigin-Name: 3970eb875d1830d35b3a70a7583a8ab6b238cad6
Diffstat (limited to 'src/btree.c')
-rw-r--r--src/btree.c27
1 files changed, 26 insertions, 1 deletions
diff --git a/src/btree.c b/src/btree.c
index daa45277a..b1bd141ed 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.289 2006/01/10 13:58:48 drh Exp $
+** $Id: btree.c,v 1.290 2006/01/11 14:09:31 danielk1977 Exp $
**
** This file implements a external (disk-based) database using BTrees.
** For a detailed discussion of BTrees, refer to
@@ -1579,6 +1579,7 @@ int sqlite3BtreeOpen(
return SQLITE_NOMEM;
}
for(pBt=pTsd->pBtree; pBt; pBt=pBt->pNext){
+ assert( pBt->nRef>0 );
if( 0==strcmp(zFullPathname, sqlite3pager_filename(pBt->pPager)) ){
p->pBt = pBt;
*ppBtree = p;
@@ -6498,3 +6499,27 @@ int sqlite3BtreeLockTable(Btree *p, int iTab, u8 isWriteLock){
#endif
return rc;
}
+
+#if defined(SQLITE_TEST) && !defined(NO_TCL)
+#include <tcl.h>
+int sqlite3_shared_cache_report(
+ void * clientData,
+ Tcl_Interp *interp,
+ int objc,
+ Tcl_Obj *CONST objv[]
+){
+ ThreadData *pTd = sqlite3ThreadData();
+ if( pTd->useSharedData ){
+ BtShared *pBt;
+ Tcl_Obj *pRet = Tcl_NewObj();
+ for(pBt=pTd->pBtree; pBt; pBt=pBt->pNext){
+ const char *zFile = sqlite3pager_filename(pBt->pPager);
+ Tcl_ListObjAppendElement(interp, pRet, Tcl_NewStringObj(zFile, -1));
+ Tcl_ListObjAppendElement(interp, pRet, Tcl_NewIntObj(pBt->nRef));
+ }
+ Tcl_SetObjResult(interp, pRet);
+ }
+ return TCL_OK;
+}
+#endif
+