⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 status.c

📁 sqlite最新源码
💻 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 + -