1
0
mirror of https://github.com/sqlite/sqlite.git synced 2025-11-14 00:22:38 +03:00

Testing improvements and corner-case bug fixes for the dbstat virtual table.

FossilOrigin-Name: d51ce539327b4807150b030a10bb105fa34cbc24
This commit is contained in:
drh
2015-05-07 18:29:04 +00:00
parent 857df26b85
commit 5f36a83329
3 changed files with 19 additions and 14 deletions

View File

@@ -1,5 +1,5 @@
C Enhance\sthe\sdbstat\svirtual\stable\swith\sthe\sability\sto\sanalyze\sATTACHed\ndatabases. C Testing\simprovements\sand\scorner-case\sbug\sfixes\sfor\sthe\sdbstat\svirtual\stable.
D 2015-05-07T14:41:56.372 D 2015-05-07T18:29:04.911
F Makefile.arm-wince-mingw32ce-gcc d6df77f1f48d690bd73162294bbba7f59507c72f F Makefile.arm-wince-mingw32ce-gcc d6df77f1f48d690bd73162294bbba7f59507c72f
F Makefile.in 08728ecbeddca339c77bfd564d3484b523dffdb1 F Makefile.in 08728ecbeddca339c77bfd564d3484b523dffdb1
F Makefile.linux-gcc 91d710bdc4998cb015f39edf3cb314ec4f4d7e23 F Makefile.linux-gcc 91d710bdc4998cb015f39edf3cb314ec4f4d7e23
@@ -181,7 +181,7 @@ F src/callback.c 7b44ce59674338ad48b0e84e7b72f935ea4f68b0
F src/complete.c a5cf5b4b56390cfb7b8636e8f7ddef90258dd575 F src/complete.c a5cf5b4b56390cfb7b8636e8f7ddef90258dd575
F src/ctime.c 98f89724adc891a1a4c655bee04e33e716e05887 F src/ctime.c 98f89724adc891a1a4c655bee04e33e716e05887
F src/date.c e4d50b3283696836ec1036b695ead9a19e37a5ac F src/date.c e4d50b3283696836ec1036b695ead9a19e37a5ac
F src/dbstat.c a9c0550fe90b765e1ac38760e1822bb7a1dfe857 F src/dbstat.c db36fbd268f778ea1cdb8b0c1eb9828c1f10bf70
F src/delete.c 37964e6c1d73ff49cbea9ff690c9605fb15f600e F src/delete.c 37964e6c1d73ff49cbea9ff690c9605fb15f600e
F src/expr.c 3fb2ab3ab69d15b4b75ae53fceb4e317f64cb306 F src/expr.c 3fb2ab3ab69d15b4b75ae53fceb4e317f64cb306
F src/fault.c 160a0c015b6c2629d3899ed2daf63d75754a32bb F src/fault.c 160a0c015b6c2629d3899ed2daf63d75754a32bb
@@ -1256,7 +1256,7 @@ F tool/vdbe_profile.tcl 67746953071a9f8f2f668b73fe899074e2c6d8c1
F tool/warnings-clang.sh f6aa929dc20ef1f856af04a730772f59283631d4 F tool/warnings-clang.sh f6aa929dc20ef1f856af04a730772f59283631d4
F tool/warnings.sh 0abfd78ceb09b7f7c27c688c8e3fe93268a13b32 F tool/warnings.sh 0abfd78ceb09b7f7c27c688c8e3fe93268a13b32
F tool/win/sqlite.vsix deb315d026cc8400325c5863eef847784a219a2f F tool/win/sqlite.vsix deb315d026cc8400325c5863eef847784a219a2f
P cf975957b9ae671f34bb65f049acf351e650d437 P 25ec09400b753fcb10a2aae57eb43dbf0548b7ca
R e2036c834faa435fbd4ece874ab9ac24 R a722e2e22e0813a5eab44a056c8ee5fc
U drh U drh
Z cef1b7912e822bf40819db2b70a8eba6 Z 6e76fa3acb898a213eb3b606e7343836

View File

@@ -1 +1 @@
25ec09400b753fcb10a2aae57eb43dbf0548b7ca d51ce539327b4807150b030a10bb105fa34cbc24

View File

@@ -424,6 +424,7 @@ static void statSizeAndOffset(StatCursor *pCsr){
static int statNext(sqlite3_vtab_cursor *pCursor){ static int statNext(sqlite3_vtab_cursor *pCursor){
int rc; int rc;
int nPayload; int nPayload;
char *z;
StatCursor *pCsr = (StatCursor *)pCursor; StatCursor *pCsr = (StatCursor *)pCursor;
StatTable *pTab = (StatTable *)pCursor->pVtab; StatTable *pTab = (StatTable *)pCursor->pVtab;
Btree *pBt = pTab->db->aDb[pTab->iDb].pBt; Btree *pBt = pTab->db->aDb[pTab->iDb].pBt;
@@ -446,8 +447,9 @@ statNextRestart:
rc = sqlite3PagerGet(pPager, iRoot, &pCsr->aPage[0].pPg); rc = sqlite3PagerGet(pPager, iRoot, &pCsr->aPage[0].pPg);
pCsr->aPage[0].iPgno = iRoot; pCsr->aPage[0].iPgno = iRoot;
pCsr->aPage[0].iCell = 0; pCsr->aPage[0].iCell = 0;
pCsr->aPage[0].zPath = sqlite3_mprintf("/"); pCsr->aPage[0].zPath = z = sqlite3_mprintf("/");
pCsr->iPage = 0; pCsr->iPage = 0;
if( z==0 ) rc = SQLITE_NOMEM;
}else{ }else{
pCsr->isEof = 1; pCsr->isEof = 1;
return sqlite3_reset(pCsr->pStmt); return sqlite3_reset(pCsr->pStmt);
@@ -470,7 +472,7 @@ statNextRestart:
pCsr->zPagetype = "overflow"; pCsr->zPagetype = "overflow";
pCsr->nCell = 0; pCsr->nCell = 0;
pCsr->nMxPayload = 0; pCsr->nMxPayload = 0;
pCsr->zPath = sqlite3_mprintf( pCsr->zPath = z = sqlite3_mprintf(
"%s%.3x+%.6x", p->zPath, p->iCell, pCell->iOvfl "%s%.3x+%.6x", p->zPath, p->iCell, pCell->iOvfl
); );
if( pCell->iOvfl<pCell->nOvfl-1 ){ if( pCell->iOvfl<pCell->nOvfl-1 ){
@@ -482,7 +484,7 @@ statNextRestart:
} }
pCell->iOvfl++; pCell->iOvfl++;
statSizeAndOffset(pCsr); statSizeAndOffset(pCsr);
return SQLITE_OK; return z==0 ? SQLITE_NOMEM : SQLITE_OK;
} }
if( p->iRightChildPg ) break; if( p->iRightChildPg ) break;
p->iCell++; p->iCell++;
@@ -504,8 +506,9 @@ statNextRestart:
} }
rc = sqlite3PagerGet(pPager, p[1].iPgno, &p[1].pPg); rc = sqlite3PagerGet(pPager, p[1].iPgno, &p[1].pPg);
p[1].iCell = 0; p[1].iCell = 0;
p[1].zPath = sqlite3_mprintf("%s%.3x/", p->zPath, p->iCell); p[1].zPath = z = sqlite3_mprintf("%s%.3x/", p->zPath, p->iCell);
p->iCell++; p->iCell++;
if( z==0 ) rc = SQLITE_NOMEM;
} }
@@ -538,7 +541,8 @@ statNextRestart:
pCsr->nCell = p->nCell; pCsr->nCell = p->nCell;
pCsr->nUnused = p->nUnused; pCsr->nUnused = p->nUnused;
pCsr->nMxPayload = p->nMxPayload; pCsr->nMxPayload = p->nMxPayload;
pCsr->zPath = sqlite3_mprintf("%s", p->zPath); pCsr->zPath = z = sqlite3_mprintf("%s", p->zPath);
if( z==0 ) rc = SQLITE_NOMEM;
nPayload = 0; nPayload = 0;
for(i=0; i<p->nCell; i++){ for(i=0; i<p->nCell; i++){
nPayload += p->aCell[i].nLocal; nPayload += p->aCell[i].nLocal;
@@ -574,7 +578,7 @@ static int statColumn(
StatCursor *pCsr = (StatCursor *)pCursor; StatCursor *pCsr = (StatCursor *)pCursor;
switch( i ){ switch( i ){
case 0: /* name */ case 0: /* name */
sqlite3_result_text(ctx, pCsr->zName, -1, SQLITE_STATIC); sqlite3_result_text(ctx, pCsr->zName, -1, SQLITE_TRANSIENT);
break; break;
case 1: /* path */ case 1: /* path */
sqlite3_result_text(ctx, pCsr->zPath, -1, SQLITE_TRANSIENT); sqlite3_result_text(ctx, pCsr->zPath, -1, SQLITE_TRANSIENT);
@@ -600,7 +604,8 @@ static int statColumn(
case 8: /* pgoffset */ case 8: /* pgoffset */
sqlite3_result_int64(ctx, pCsr->iOffset); sqlite3_result_int64(ctx, pCsr->iOffset);
break; break;
case 9: /* pgsize */ default: /* pgsize */
assert( i==9 );
sqlite3_result_int(ctx, pCsr->szPage); sqlite3_result_int(ctx, pCsr->szPage);
break; break;
} }