mirror of
https://github.com/sqlite/sqlite.git
synced 2025-08-07 02:42:48 +03:00
Add the SQLITE_DB_STATUS_CACHE_HIT and MISS options. For querying the number of cache hits and misses on a per-connection basis.
FossilOrigin-Name: 5100b6e9dc5107f0f835d0aac26fe6d4938ffc73
This commit is contained in:
23
manifest
23
manifest
@@ -1,5 +1,5 @@
|
|||||||
C Update\sthe\sversion\snumber\sto\s3.7.9.
|
C Add\sthe\sSQLITE_DB_STATUS_CACHE_HIT\sand\sMISS\soptions.\sFor\squerying\sthe\snumber\sof\scache\shits\sand\smisses\son\sa\sper-connection\sbasis.
|
||||||
D 2011-09-22T00:56:38.282
|
D 2011-09-22T14:41:16.523
|
||||||
F Makefile.arm-wince-mingw32ce-gcc d6df77f1f48d690bd73162294bbba7f59507c72f
|
F Makefile.arm-wince-mingw32ce-gcc d6df77f1f48d690bd73162294bbba7f59507c72f
|
||||||
F Makefile.in 8de00a4e52f308ef6d564834c0973e53646e0d4c
|
F Makefile.in 8de00a4e52f308ef6d564834c0973e53646e0d4c
|
||||||
F Makefile.linux-gcc 91d710bdc4998cb015f39edf3cb314ec4f4d7e23
|
F Makefile.linux-gcc 91d710bdc4998cb015f39edf3cb314ec4f4d7e23
|
||||||
@@ -167,8 +167,8 @@ F src/os_common.h 92815ed65f805560b66166e3583470ff94478f04
|
|||||||
F src/os_os2.c 4a75888ba3dfc820ad5e8177025972d74d7f2440
|
F src/os_os2.c 4a75888ba3dfc820ad5e8177025972d74d7f2440
|
||||||
F src/os_unix.c 10e0c4dcdbec8d4189890fdf3e71b32efae194e3
|
F src/os_unix.c 10e0c4dcdbec8d4189890fdf3e71b32efae194e3
|
||||||
F src/os_win.c 0fc0f46c94b0385a940b0ee32992a833019a5985
|
F src/os_win.c 0fc0f46c94b0385a940b0ee32992a833019a5985
|
||||||
F src/pager.c 15d10371e2d560b68870a9ccec022ad8f01e70a2
|
F src/pager.c 8a6ac3e0d9694412076e2273e3c81e9c4e08758f
|
||||||
F src/pager.h 3f8c783de1d4706b40b1ac15b64f5f896bcc78d1
|
F src/pager.h dbcaa791e8b6c3a6b77c168c5c27deec289fb176
|
||||||
F src/parse.y 12b7ebd61ea54f0e1b1083ff69cc2c8ce9353d58
|
F src/parse.y 12b7ebd61ea54f0e1b1083ff69cc2c8ce9353d58
|
||||||
F src/pcache.c 49e718c095810c6b3334e3a6d89970aceaddefce
|
F src/pcache.c 49e718c095810c6b3334e3a6d89970aceaddefce
|
||||||
F src/pcache.h c683390d50f856d4cd8e24342ae62027d1bb6050
|
F src/pcache.h c683390d50f856d4cd8e24342ae62027d1bb6050
|
||||||
@@ -181,11 +181,11 @@ F src/resolve.c 36368f44569208fa074e61f4dd0b6c4fb60ca2b4
|
|||||||
F src/rowset.c 69afa95a97c524ba6faf3805e717b5b7ae85a697
|
F src/rowset.c 69afa95a97c524ba6faf3805e717b5b7ae85a697
|
||||||
F src/select.c d9b7d20b0365f80761846f00ef3638d4b33eeaf2
|
F src/select.c d9b7d20b0365f80761846f00ef3638d4b33eeaf2
|
||||||
F src/shell.c 13fe2aeddc3cc90d6a273831d1f63736d1596f81
|
F src/shell.c 13fe2aeddc3cc90d6a273831d1f63736d1596f81
|
||||||
F src/sqlite.h.in 0a6c9c23337fd1352c5c75a613ff9533aa7d91cb
|
F src/sqlite.h.in c0ebc53056fd99590dec4cb4bd60a0787098ff18
|
||||||
F src/sqlite3ext.h 1a1a4f784aa9c3b00edd287940197de52487cd93
|
F src/sqlite3ext.h 1a1a4f784aa9c3b00edd287940197de52487cd93
|
||||||
F src/sqliteInt.h 76d81cd9da0618b231398bfcf90556e971972fca
|
F src/sqliteInt.h 76d81cd9da0618b231398bfcf90556e971972fca
|
||||||
F src/sqliteLimit.h 164b0e6749d31e0daa1a4589a169d31c0dec7b3d
|
F src/sqliteLimit.h 164b0e6749d31e0daa1a4589a169d31c0dec7b3d
|
||||||
F src/status.c 7ac64842c86cec2fc1a1d0e5c16d3beb8ad332bf
|
F src/status.c 4568e72dfd36b6a5911f93457364deb072e0b03a
|
||||||
F src/table.c 2cd62736f845d82200acfa1287e33feb3c15d62e
|
F src/table.c 2cd62736f845d82200acfa1287e33feb3c15d62e
|
||||||
F src/tclsqlite.c 20578e66dda94b4d4db3d4478644a4dd9c6084a6
|
F src/tclsqlite.c 20578e66dda94b4d4db3d4478644a4dd9c6084a6
|
||||||
F src/test1.c 0f41b7c67719207a5de24b009e172c4dcf189827
|
F src/test1.c 0f41b7c67719207a5de24b009e172c4dcf189827
|
||||||
@@ -212,7 +212,7 @@ F src/test_intarray.c d879bbf8e4ce085ab966d1f3c896a7c8b4f5fc99
|
|||||||
F src/test_intarray.h 489edb9068bb926583445cb02589344961054207
|
F src/test_intarray.h 489edb9068bb926583445cb02589344961054207
|
||||||
F src/test_journal.c 03313c693cca72959dcaaf79f8d76f21c01e19ff
|
F src/test_journal.c 03313c693cca72959dcaaf79f8d76f21c01e19ff
|
||||||
F src/test_loadext.c df586c27176e3c2cb2e099c78da67bf14379a56e
|
F src/test_loadext.c df586c27176e3c2cb2e099c78da67bf14379a56e
|
||||||
F src/test_malloc.c 91d5cf1751d3e563754fd183da1c020727b5480e
|
F src/test_malloc.c 8d416f29ad8573f32601f6056c9d2b17472e9ad5
|
||||||
F src/test_multiplex.c 3fc368022c46fe44ec22c5e1ed727223a54a6a1d
|
F src/test_multiplex.c 3fc368022c46fe44ec22c5e1ed727223a54a6a1d
|
||||||
F src/test_multiplex.h e99c571bc4968b7a9363b661481f3934bfead61d
|
F src/test_multiplex.h e99c571bc4968b7a9363b661481f3934bfead61d
|
||||||
F src/test_mutex.c a6bd7b9cf6e19d989e31392b06ac8d189f0d573e
|
F src/test_mutex.c a6bd7b9cf6e19d989e31392b06ac8d189f0d573e
|
||||||
@@ -361,6 +361,7 @@ F test/cse.test 277350a26264495e86b1785f34d2d0c8600e021c
|
|||||||
F test/ctime.test 7f0bd5084d9dd7da9ad46901810896edd2ebb463
|
F test/ctime.test 7f0bd5084d9dd7da9ad46901810896edd2ebb463
|
||||||
F test/date.test a18a2ce81add84b17b06559e82ad7bb91bc6ddff
|
F test/date.test a18a2ce81add84b17b06559e82ad7bb91bc6ddff
|
||||||
F test/dbstatus.test a719af0f226bd280748a4bb9054c0a5a9fc1b16c
|
F test/dbstatus.test a719af0f226bd280748a4bb9054c0a5a9fc1b16c
|
||||||
|
F test/dbstatus2.test dc57b0d9610851c0ff58a8e1b5b191678398b72a
|
||||||
F test/default.test 6faf23ccb300114924353007795aa9a8ec0aa9dc
|
F test/default.test 6faf23ccb300114924353007795aa9a8ec0aa9dc
|
||||||
F test/delete.test a065b05d2ebf60fd16639c579a4adfb7c381c701
|
F test/delete.test a065b05d2ebf60fd16639c579a4adfb7c381c701
|
||||||
F test/delete2.test 3a03f2cca1f9a67ec469915cb8babd6485db43fa
|
F test/delete2.test 3a03f2cca1f9a67ec469915cb8babd6485db43fa
|
||||||
@@ -963,7 +964,7 @@ F tool/symbols.sh caaf6ccc7300fd43353318b44524853e222557d5
|
|||||||
F tool/tostr.awk e75472c2f98dd76e06b8c9c1367f4ab07e122d06
|
F tool/tostr.awk e75472c2f98dd76e06b8c9c1367f4ab07e122d06
|
||||||
F tool/vdbe-compress.tcl d70ea6d8a19e3571d7ab8c9b75cba86d1173ff0f
|
F tool/vdbe-compress.tcl d70ea6d8a19e3571d7ab8c9b75cba86d1173ff0f
|
||||||
F tool/warnings.sh b7fdb2cc525f5ef4fa43c80e771636dd3690f9d2
|
F tool/warnings.sh b7fdb2cc525f5ef4fa43c80e771636dd3690f9d2
|
||||||
P af1c5718292c0326b785416b7109eafefaeb59a7
|
P 14e28eb9546906b33eb03e596ad104c8ca049d6c
|
||||||
R 683508422a28a1700de71635798902cb
|
R 9879b749e51ddd30db2e7953d801cb26
|
||||||
U drh
|
U dan
|
||||||
Z fbf5cbfa4acf8c5482bae2d6dc544add
|
Z f68e24447a093110c356752c29a0f88a
|
||||||
|
@@ -1 +1 @@
|
|||||||
14e28eb9546906b33eb03e596ad104c8ca049d6c
|
5100b6e9dc5107f0f835d0aac26fe6d4938ffc73
|
33
src/pager.c
33
src/pager.c
@@ -670,8 +670,8 @@ struct Pager {
|
|||||||
char *zJournal; /* Name of the journal file */
|
char *zJournal; /* Name of the journal file */
|
||||||
int (*xBusyHandler)(void*); /* Function to call when busy */
|
int (*xBusyHandler)(void*); /* Function to call when busy */
|
||||||
void *pBusyHandlerArg; /* Context argument for xBusyHandler */
|
void *pBusyHandlerArg; /* Context argument for xBusyHandler */
|
||||||
|
int nHit, nMiss; /* Total cache hits and misses */
|
||||||
#ifdef SQLITE_TEST
|
#ifdef SQLITE_TEST
|
||||||
int nHit, nMiss; /* Cache hits and missing */
|
|
||||||
int nRead, nWrite; /* Database pages read/written */
|
int nRead, nWrite; /* Database pages read/written */
|
||||||
#endif
|
#endif
|
||||||
void (*xReiniter)(DbPage*); /* Call this routine when reloading pages */
|
void (*xReiniter)(DbPage*); /* Call this routine when reloading pages */
|
||||||
@@ -4169,7 +4169,7 @@ static int pagerStress(void *p, PgHdr *pPg){
|
|||||||
**
|
**
|
||||||
** Spilling is also prohibited when in an error state since that could
|
** Spilling is also prohibited when in an error state since that could
|
||||||
** lead to database corruption. In the current implementaton it
|
** lead to database corruption. In the current implementaton it
|
||||||
** is impossible for sqlite3PCacheFetch() to be called with createFlag==1
|
** is impossible for sqlite3PcacheFetch() to be called with createFlag==1
|
||||||
** while in the error state, hence it is impossible for this routine to
|
** while in the error state, hence it is impossible for this routine to
|
||||||
** be called in the error state. Nevertheless, we include a NEVER()
|
** be called in the error state. Nevertheless, we include a NEVER()
|
||||||
** test for the error state as a safeguard against future changes.
|
** test for the error state as a safeguard against future changes.
|
||||||
@@ -5005,14 +5005,13 @@ int sqlite3PagerAcquire(
|
|||||||
/* In this case the pcache already contains an initialized copy of
|
/* In this case the pcache already contains an initialized copy of
|
||||||
** the page. Return without further ado. */
|
** the page. Return without further ado. */
|
||||||
assert( pgno<=PAGER_MAX_PGNO && pgno!=PAGER_MJ_PGNO(pPager) );
|
assert( pgno<=PAGER_MAX_PGNO && pgno!=PAGER_MJ_PGNO(pPager) );
|
||||||
PAGER_INCR(pPager->nHit);
|
pPager->nHit++;
|
||||||
return SQLITE_OK;
|
return SQLITE_OK;
|
||||||
|
|
||||||
}else{
|
}else{
|
||||||
/* The pager cache has created a new page. Its content needs to
|
/* The pager cache has created a new page. Its content needs to
|
||||||
** be initialized. */
|
** be initialized. */
|
||||||
|
|
||||||
PAGER_INCR(pPager->nMiss);
|
|
||||||
pPg = *ppPage;
|
pPg = *ppPage;
|
||||||
pPg->pPager = pPager;
|
pPg->pPager = pPager;
|
||||||
|
|
||||||
@@ -5048,6 +5047,7 @@ int sqlite3PagerAcquire(
|
|||||||
IOTRACE(("ZERO %p %d\n", pPager, pgno));
|
IOTRACE(("ZERO %p %d\n", pPager, pgno));
|
||||||
}else{
|
}else{
|
||||||
assert( pPg->pPager==pPager );
|
assert( pPg->pPager==pPager );
|
||||||
|
pPager->nMiss++;
|
||||||
rc = readDbPage(pPg);
|
rc = readDbPage(pPg);
|
||||||
if( rc!=SQLITE_OK ){
|
if( rc!=SQLITE_OK ){
|
||||||
goto pager_acquire_err;
|
goto pager_acquire_err;
|
||||||
@@ -6082,6 +6082,31 @@ int *sqlite3PagerStats(Pager *pPager){
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
/*
|
||||||
|
** Parameter eStat must be either SQLITE_DBSTATUS_CACHE_HIT or
|
||||||
|
** SQLITE_DBSTATUS_CACHE_MISS. Before returning, *pnVal is incremented by the
|
||||||
|
** current cache hit or miss count, according to the value of eStat. If the
|
||||||
|
** reset parameter is non-zero, the cache hit or miss count is zeroed before
|
||||||
|
** returning.
|
||||||
|
*/
|
||||||
|
void sqlite3PagerCacheStat(Pager *pPager, int eStat, int reset, int *pnVal){
|
||||||
|
int *piStat;
|
||||||
|
|
||||||
|
assert( eStat==SQLITE_DBSTATUS_CACHE_HIT
|
||||||
|
|| eStat==SQLITE_DBSTATUS_CACHE_MISS
|
||||||
|
);
|
||||||
|
if( eStat==SQLITE_DBSTATUS_CACHE_HIT ){
|
||||||
|
piStat = &pPager->nHit;
|
||||||
|
}else{
|
||||||
|
piStat = &pPager->nMiss;
|
||||||
|
}
|
||||||
|
|
||||||
|
*pnVal += *piStat;
|
||||||
|
if( reset ){
|
||||||
|
*piStat = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
** Return true if this is an in-memory pager.
|
** Return true if this is an in-memory pager.
|
||||||
*/
|
*/
|
||||||
|
@@ -155,6 +155,7 @@ const char *sqlite3PagerJournalname(Pager*);
|
|||||||
int sqlite3PagerNosync(Pager*);
|
int sqlite3PagerNosync(Pager*);
|
||||||
void *sqlite3PagerTempSpace(Pager*);
|
void *sqlite3PagerTempSpace(Pager*);
|
||||||
int sqlite3PagerIsMemdb(Pager*);
|
int sqlite3PagerIsMemdb(Pager*);
|
||||||
|
void sqlite3PagerCacheStat(Pager *, int, int, int *);
|
||||||
|
|
||||||
/* Functions used to truncate the database file. */
|
/* Functions used to truncate the database file. */
|
||||||
void sqlite3PagerTruncateImage(Pager*,Pgno);
|
void sqlite3PagerTruncateImage(Pager*,Pgno);
|
||||||
|
@@ -5810,6 +5810,18 @@ int sqlite3_db_status(sqlite3*, int op, int *pCur, int *pHiwtr, int resetFlg);
|
|||||||
** the database connection.)^
|
** the database connection.)^
|
||||||
** ^The highwater mark associated with SQLITE_DBSTATUS_STMT_USED is always 0.
|
** ^The highwater mark associated with SQLITE_DBSTATUS_STMT_USED is always 0.
|
||||||
** </dd>
|
** </dd>
|
||||||
|
**
|
||||||
|
** [[SQLITE_DBSTATUS_CACHE_HIT]] ^(<dt>SQLITE_DBSTATUS_CACHE_HIT</dt>
|
||||||
|
** <dd>This parameter returns the number of pager cache hits that have
|
||||||
|
** occurred. ^The highwater mark associated with SQLITE_DBSTATUS_CACHE_HIT
|
||||||
|
** is always 0.
|
||||||
|
** </dd>
|
||||||
|
**
|
||||||
|
** [[SQLITE_DBSTATUS_CACHE_MISS]] ^(<dt>SQLITE_DBSTATUS_CACHE_MISS</dt>
|
||||||
|
** <dd>This parameter returns the number of pager cache misses that have
|
||||||
|
** occurred. ^The highwater mark associated with SQLITE_DBSTATUS_CACHE_MISS
|
||||||
|
** is always 0.
|
||||||
|
** </dd>
|
||||||
** </dl>
|
** </dl>
|
||||||
*/
|
*/
|
||||||
#define SQLITE_DBSTATUS_LOOKASIDE_USED 0
|
#define SQLITE_DBSTATUS_LOOKASIDE_USED 0
|
||||||
@@ -5819,7 +5831,9 @@ int sqlite3_db_status(sqlite3*, int op, int *pCur, int *pHiwtr, int resetFlg);
|
|||||||
#define SQLITE_DBSTATUS_LOOKASIDE_HIT 4
|
#define SQLITE_DBSTATUS_LOOKASIDE_HIT 4
|
||||||
#define SQLITE_DBSTATUS_LOOKASIDE_MISS_SIZE 5
|
#define SQLITE_DBSTATUS_LOOKASIDE_MISS_SIZE 5
|
||||||
#define SQLITE_DBSTATUS_LOOKASIDE_MISS_FULL 6
|
#define SQLITE_DBSTATUS_LOOKASIDE_MISS_FULL 6
|
||||||
#define SQLITE_DBSTATUS_MAX 6 /* Largest defined DBSTATUS */
|
#define SQLITE_DBSTATUS_CACHE_HIT 7
|
||||||
|
#define SQLITE_DBSTATUS_CACHE_MISS 8
|
||||||
|
#define SQLITE_DBSTATUS_MAX 8 /* Largest defined DBSTATUS */
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -5873,7 +5887,6 @@ int sqlite3_stmt_status(sqlite3_stmt*, int op,int resetFlg);
|
|||||||
** A non-zero value in this counter may indicate an opportunity to
|
** A non-zero value in this counter may indicate an opportunity to
|
||||||
** improvement performance by adding permanent indices that do not
|
** improvement performance by adding permanent indices that do not
|
||||||
** need to be reinitialized each time the statement is run.</dd>
|
** need to be reinitialized each time the statement is run.</dd>
|
||||||
**
|
|
||||||
** </dl>
|
** </dl>
|
||||||
*/
|
*/
|
||||||
#define SQLITE_STMTSTATUS_FULLSCAN_STEP 1
|
#define SQLITE_STMTSTATUS_FULLSCAN_STEP 1
|
||||||
|
22
src/status.c
22
src/status.c
@@ -218,6 +218,28 @@ int sqlite3_db_status(
|
|||||||
break;
|
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: {
|
||||||
|
int i;
|
||||||
|
int nRet = 0;
|
||||||
|
assert( SQLITE_DBSTATUS_CACHE_MISS==SQLITE_DBSTATUS_CACHE_HIT+1 );
|
||||||
|
|
||||||
|
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;
|
||||||
|
*pCurrent = nRet;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
default: {
|
default: {
|
||||||
rc = SQLITE_ERROR;
|
rc = SQLITE_ERROR;
|
||||||
}
|
}
|
||||||
|
@@ -1325,11 +1325,13 @@ static int test_db_status(
|
|||||||
{ "STMT_USED", SQLITE_DBSTATUS_STMT_USED },
|
{ "STMT_USED", SQLITE_DBSTATUS_STMT_USED },
|
||||||
{ "LOOKASIDE_HIT", SQLITE_DBSTATUS_LOOKASIDE_HIT },
|
{ "LOOKASIDE_HIT", SQLITE_DBSTATUS_LOOKASIDE_HIT },
|
||||||
{ "LOOKASIDE_MISS_SIZE", SQLITE_DBSTATUS_LOOKASIDE_MISS_SIZE },
|
{ "LOOKASIDE_MISS_SIZE", SQLITE_DBSTATUS_LOOKASIDE_MISS_SIZE },
|
||||||
{ "LOOKASIDE_MISS_FULL", SQLITE_DBSTATUS_LOOKASIDE_MISS_FULL }
|
{ "LOOKASIDE_MISS_FULL", SQLITE_DBSTATUS_LOOKASIDE_MISS_FULL },
|
||||||
|
{ "CACHE_HIT", SQLITE_DBSTATUS_CACHE_HIT },
|
||||||
|
{ "CACHE_MISS", SQLITE_DBSTATUS_CACHE_MISS }
|
||||||
};
|
};
|
||||||
Tcl_Obj *pResult;
|
Tcl_Obj *pResult;
|
||||||
if( objc!=4 ){
|
if( objc!=4 ){
|
||||||
Tcl_WrongNumArgs(interp, 1, objv, "PARAMETER RESETFLAG");
|
Tcl_WrongNumArgs(interp, 1, objv, "DB PARAMETER RESETFLAG");
|
||||||
return TCL_ERROR;
|
return TCL_ERROR;
|
||||||
}
|
}
|
||||||
if( getDbPointer(interp, Tcl_GetString(objv[1]), &db) ) return TCL_ERROR;
|
if( getDbPointer(interp, Tcl_GetString(objv[1]), &db) ) return TCL_ERROR;
|
||||||
|
76
test/dbstatus2.test
Normal file
76
test/dbstatus2.test
Normal file
@@ -0,0 +1,76 @@
|
|||||||
|
# 2011 September 20
|
||||||
|
#
|
||||||
|
# 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.
|
||||||
|
#
|
||||||
|
#***********************************************************************
|
||||||
|
#
|
||||||
|
# Tests for the sqlite3_stmt_status() function
|
||||||
|
#
|
||||||
|
|
||||||
|
set testdir [file dirname $argv0]
|
||||||
|
source $testdir/tester.tcl
|
||||||
|
|
||||||
|
set ::testprefix dbstatus2
|
||||||
|
|
||||||
|
do_execsql_test 1.0 {
|
||||||
|
PRAGMA page_size = 1024;
|
||||||
|
PRAGMA auto_vacuum = 0;
|
||||||
|
|
||||||
|
CREATE TABLE t1(a PRIMARY KEY, b);
|
||||||
|
INSERT INTO t1 VALUES(1, randomblob(600));
|
||||||
|
INSERT INTO t1 VALUES(2, randomblob(600));
|
||||||
|
INSERT INTO t1 VALUES(3, randomblob(600));
|
||||||
|
}
|
||||||
|
|
||||||
|
proc db_hit_miss {db {reset 0}} {
|
||||||
|
set nHit [sqlite3_db_status $db CACHE_HIT $reset]
|
||||||
|
set nMiss [sqlite3_db_status $db CACHE_MISS $reset]
|
||||||
|
list $nHit $nMiss
|
||||||
|
}
|
||||||
|
|
||||||
|
do_test 1.1 {
|
||||||
|
db close
|
||||||
|
sqlite3 db test.db
|
||||||
|
expr {[file size test.db] / 1024}
|
||||||
|
} 6
|
||||||
|
|
||||||
|
do_test 1.2 {
|
||||||
|
execsql { SELECT b FROM t1 WHERE a=2 }
|
||||||
|
db_hit_miss db
|
||||||
|
} {{0 2 0} {0 4 0}}
|
||||||
|
|
||||||
|
do_test 1.3 {
|
||||||
|
execsql { SELECT b FROM t1 WHERE a=2 }
|
||||||
|
db_hit_miss db
|
||||||
|
} {{0 6 0} {0 4 0}}
|
||||||
|
|
||||||
|
do_test 1.4 {
|
||||||
|
execsql { SELECT b FROM t1 WHERE a=2 }
|
||||||
|
db_hit_miss db
|
||||||
|
} {{0 10 0} {0 4 0}}
|
||||||
|
|
||||||
|
do_test 1.5 {
|
||||||
|
db_hit_miss db 1
|
||||||
|
} {{0 10 0} {0 4 0}}
|
||||||
|
|
||||||
|
do_test 1.6 {
|
||||||
|
db_hit_miss db 0
|
||||||
|
} {{0 0 0} {0 0 0}}
|
||||||
|
|
||||||
|
do_test 1.7 {
|
||||||
|
set fd [db incrblob main t1 b 1]
|
||||||
|
fconfigure $fd -translation binary
|
||||||
|
set len [string length [read $fd]]
|
||||||
|
close $fd
|
||||||
|
set len
|
||||||
|
} 600
|
||||||
|
do_test 1.8 { sqlite3_db_status db CACHE_HIT 0 } {0 2 0}
|
||||||
|
do_test 1.9 { sqlite3_db_status db CACHE_MISS 0 } {0 1 0}
|
||||||
|
|
||||||
|
|
||||||
|
finish_test
|
Reference in New Issue
Block a user