?? status.c
字號:
/*** 2008 June 18**** The author disclaims copyright to this source code. In place of** a legal notice, here is a blessing:**** May you do good and not evil.** May you find forgiveness for yourself and forgive others.** May you share freely, never taking more than you give.******************************************************************************* This module implements the sqlite3_status() interface and related** functionality.**** $Id: status.c,v 1.9 2008/09/02 00:52:52 drh Exp $*/#include "sqliteInt.h"/*** Variables in which to record status information.*/typedef struct sqlite3StatType sqlite3StatType;static SQLITE_WSD struct sqlite3StatType { int nowValue[9]; /* Current value */ int mxValue[9]; /* Maximum value */} sqlite3Stat = { {0,}, {0,} };/* The "wsdStat" macro will resolve to the status information** state vector. If writable static data is unsupported on the target,** we have to locate the state vector at run-time. In the more common** case where writable static data is supported, wsdStat can refer directly** to the "sqlite3Stat" state vector declared above.*/#ifdef SQLITE_OMIT_WSD# define wsdStatInit sqlite3StatType *x = &GLOBAL(sqlite3StatType,sqlite3Stat)# define wsdStat x[0]#else# define wsdStatInit# define wsdStat sqlite3Stat#endif/*** Return the current value of a status parameter.*/int sqlite3StatusValue(int op){ wsdStatInit; assert( op>=0 && op<ArraySize(wsdStat.nowValue) ); return wsdStat.nowValue[op];}/*** Add N to the value of a status record. It is assumed that the** caller holds appropriate locks.*/void sqlite3StatusAdd(int op, int N){ wsdStatInit; assert( op>=0 && op<ArraySize(wsdStat.nowValue) ); wsdStat.nowValue[op] += N; if( wsdStat.nowValue[op]>wsdStat.mxValue[op] ){ wsdStat.mxValue[op] = wsdStat.nowValue[op]; }}/*** Set the value of a status to X.*/void sqlite3StatusSet(int op, int X){ wsdStatInit; assert( op>=0 && op<ArraySize(wsdStat.nowValue) ); wsdStat.nowValue[op] = X; if( wsdStat.nowValue[op]>wsdStat.mxValue[op] ){ wsdStat.mxValue[op] = wsdStat.nowValue[op]; }}/*** Query status information.**** This implementation assumes that reading or writing an aligned** 32-bit integer is an atomic operation. If that assumption is not true,** then this routine is not threadsafe.*/int sqlite3_status(int op, int *pCurrent, int *pHighwater, int resetFlag){ wsdStatInit; if( op<0 || op>=ArraySize(wsdStat.nowValue) ){ return SQLITE_MISUSE; } *pCurrent = wsdStat.nowValue[op]; *pHighwater = wsdStat.mxValue[op]; if( resetFlag ){ wsdStat.mxValue[op] = wsdStat.nowValue[op]; } return SQLITE_OK;}/*** Query status information for a single database connection*/int sqlite3_db_status( sqlite3 *db, /* The database connection whose status is desired */ int op, /* Status verb */ int *pCurrent, /* Write current value here */ int *pHighwater, /* Write high-water mark here */ int resetFlag /* Reset high-water mark if true */){ switch( op ){ case SQLITE_DBSTATUS_LOOKASIDE_USED: { *pCurrent = db->lookaside.nOut; *pHighwater = db->lookaside.mxOut; if( resetFlag ){ db->lookaside.mxOut = db->lookaside.nOut; } break; } default: { return SQLITE_ERROR; } } return SQLITE_OK;}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -