Index: third_party/sqlite/src/src/status.c |
diff --git a/third_party/sqlite/src/src/status.c b/third_party/sqlite/src/src/status.c |
index b8c1d58df7f2407427d4f605772606ee7b91d9f9..79a8001b8af07081243bea966c2677e95189ce21 100644 |
--- a/third_party/sqlite/src/src/status.c |
+++ b/third_party/sqlite/src/src/status.c |
@@ -208,16 +208,53 @@ int sqlite3_db_status( |
db->pnBytesFreed = &nByte; |
for(pVdbe=db->pVdbe; pVdbe; pVdbe=pVdbe->pNext){ |
- sqlite3VdbeDeleteObject(db, pVdbe); |
+ sqlite3VdbeClearObject(db, pVdbe); |
+ sqlite3DbFree(db, pVdbe); |
} |
db->pnBytesFreed = 0; |
- *pHighwater = 0; |
+ *pHighwater = 0; /* IMP: R-64479-57858 */ |
*pCurrent = nByte; |
break; |
} |
+ /* |
+ ** Set *pCurrent to the total cache hits or misses encountered by all |
+ ** pagers the database handle is connected to. *pHighwater is always set |
+ ** to zero. |
+ */ |
+ case SQLITE_DBSTATUS_CACHE_HIT: |
+ case SQLITE_DBSTATUS_CACHE_MISS: |
+ case SQLITE_DBSTATUS_CACHE_WRITE:{ |
+ int i; |
+ int nRet = 0; |
+ assert( SQLITE_DBSTATUS_CACHE_MISS==SQLITE_DBSTATUS_CACHE_HIT+1 ); |
+ assert( SQLITE_DBSTATUS_CACHE_WRITE==SQLITE_DBSTATUS_CACHE_HIT+2 ); |
+ |
+ for(i=0; i<db->nDb; i++){ |
+ if( db->aDb[i].pBt ){ |
+ Pager *pPager = sqlite3BtreePager(db->aDb[i].pBt); |
+ sqlite3PagerCacheStat(pPager, op, resetFlag, &nRet); |
+ } |
+ } |
+ *pHighwater = 0; /* IMP: R-42420-56072 */ |
+ /* IMP: R-54100-20147 */ |
+ /* IMP: R-29431-39229 */ |
+ *pCurrent = nRet; |
+ break; |
+ } |
+ |
+ /* Set *pCurrent to non-zero if there are unresolved deferred foreign |
+ ** key constraints. Set *pCurrent to zero if all foreign key constraints |
+ ** have been satisfied. The *pHighwater is always set to zero. |
+ */ |
+ case SQLITE_DBSTATUS_DEFERRED_FKS: { |
+ *pHighwater = 0; /* IMP: R-11967-56545 */ |
+ *pCurrent = db->nDeferredImmCons>0 || db->nDeferredCons>0; |
+ break; |
+ } |
+ |
default: { |
rc = SQLITE_ERROR; |
} |