1
0
mirror of https://github.com/sqlite/sqlite.git synced 2025-07-30 19:03:16 +03:00

Restore the index_list pragma back to its former operation. Create a new

PRAGMA stats used to access the table and index widths and heights.

FossilOrigin-Name: f0cf8c85dcbcc7778aed2816792c368d777f79cb
This commit is contained in:
drh
2013-10-12 20:22:00 +00:00
parent a8dbadacee
commit 3ef261567a
5 changed files with 71 additions and 39 deletions

View File

@ -1,5 +1,5 @@
C Fix\shandling\sof\s"DROP\sTABLE"\scommands\swhen\s"PRAGMA\sdefer_foreign_keys=1"\sis\sset. C Restore\sthe\sindex_list\spragma\sback\sto\sits\sformer\soperation.\s\sCreate\sa\snew\nPRAGMA\sstats\sused\sto\saccess\sthe\stable\sand\sindex\swidths\sand\sheights.
D 2013-10-12T15:12:43.761 D 2013-10-12T20:22:00.025
F Makefile.arm-wince-mingw32ce-gcc d6df77f1f48d690bd73162294bbba7f59507c72f F Makefile.arm-wince-mingw32ce-gcc d6df77f1f48d690bd73162294bbba7f59507c72f
F Makefile.in e2d28ec95bd17ab4f3b6ee40b7102e9d7a0857b9 F Makefile.in e2d28ec95bd17ab4f3b6ee40b7102e9d7a0857b9
F Makefile.linux-gcc 91d710bdc4998cb015f39edf3cb314ec4f4d7e23 F Makefile.linux-gcc 91d710bdc4998cb015f39edf3cb314ec4f4d7e23
@ -211,7 +211,7 @@ F src/parse.y a97566d6da75075589a7c716d1bda14b586cf8da
F src/pcache.c f8043b433a57aba85384a531e3937a804432a346 F src/pcache.c f8043b433a57aba85384a531e3937a804432a346
F src/pcache.h a5e4f5d9f5d592051d91212c5949517971ae6222 F src/pcache.h a5e4f5d9f5d592051d91212c5949517971ae6222
F src/pcache1.c a467393909a4ed7ca9de066d85ba5c5b04a5be63 F src/pcache1.c a467393909a4ed7ca9de066d85ba5c5b04a5be63
F src/pragma.c f4ff6e29c316d06bf7dffca0c8cee7c229cae42e F src/pragma.c 1c00ed0dea8bc119d248e26e648d438e16e92010
F src/prepare.c fa6988589f39af8504a61731614cd4f6ae71554f F src/prepare.c fa6988589f39af8504a61731614cd4f6ae71554f
F src/printf.c da9119eb31a187a4b99f60aa4a225141c0ebb74b F src/printf.c da9119eb31a187a4b99f60aa4a225141c0ebb74b
F src/random.c 0b2dbc37fdfbfa6bd455b091dfcef5bdb32dba68 F src/random.c 0b2dbc37fdfbfa6bd455b091dfcef5bdb32dba68
@ -725,7 +725,7 @@ F test/pcache.test b09104b03160aca0d968d99e8cd2c5b1921a993d
F test/pcache2.test a83efe2dec0d392f814bfc998def1d1833942025 F test/pcache2.test a83efe2dec0d392f814bfc998def1d1833942025
F test/percentile.test b98fc868d71eb5619d42a1702e9ab91718cbed54 F test/percentile.test b98fc868d71eb5619d42a1702e9ab91718cbed54
F test/permutations.test e154f5ed66d4d4913a99a110e870c9407f75b055 F test/permutations.test e154f5ed66d4d4913a99a110e870c9407f75b055
F test/pragma.test 5c6e8ae9eaa9a505cc1035b51f7f0da9805092c7 F test/pragma.test 5e7de6c32a5d764f09437d2025f07e4917b9e178
F test/pragma2.test aea7b3d82c76034a2df2b38a13745172ddc0bc13 F test/pragma2.test aea7b3d82c76034a2df2b38a13745172ddc0bc13
F test/printf.test ec9870c4dce8686a37818e0bf1aba6e6a1863552 F test/printf.test ec9870c4dce8686a37818e0bf1aba6e6a1863552
F test/progress.test a282973d1d17f08071bc58a77d6b80f2a81c354d F test/progress.test a282973d1d17f08071bc58a77d6b80f2a81c354d
@ -1090,7 +1090,7 @@ F tool/logest.c 7ad625cac3d54012b27d468b7af6612f78b9ba75
F tool/mkautoconfamal.sh f8d8dbf7d62f409ebed5134998bf5b51d7266383 F tool/mkautoconfamal.sh f8d8dbf7d62f409ebed5134998bf5b51d7266383
F tool/mkkeywordhash.c bb52064aa614e1426445e4b2b9b00eeecd23cc79 F tool/mkkeywordhash.c bb52064aa614e1426445e4b2b9b00eeecd23cc79
F tool/mkopts.tcl 66ac10d240cc6e86abd37dc908d50382f84ff46e F tool/mkopts.tcl 66ac10d240cc6e86abd37dc908d50382f84ff46e
F tool/mkpragmatab.tcl ceaaeebcd882864caefe4176592ca6fa4648fab1 F tool/mkpragmatab.tcl 3fc52e00a234750675e8a569d2919ff48558e9eb
F tool/mkspeedsql.tcl a1a334d288f7adfe6e996f2e712becf076745c97 F tool/mkspeedsql.tcl a1a334d288f7adfe6e996f2e712becf076745c97
F tool/mksqlite3c-noext.tcl 8bce31074e4cbe631bb7676526a048335f4c9f02 F tool/mksqlite3c-noext.tcl 8bce31074e4cbe631bb7676526a048335f4c9f02
F tool/mksqlite3c.tcl d8dc444d403019167260e5578f5c362741f03696 F tool/mksqlite3c.tcl d8dc444d403019167260e5578f5c362741f03696
@ -1123,7 +1123,7 @@ F tool/vdbe-compress.tcl f12c884766bd14277f4fcedcae07078011717381
F tool/warnings-clang.sh f6aa929dc20ef1f856af04a730772f59283631d4 F tool/warnings-clang.sh f6aa929dc20ef1f856af04a730772f59283631d4
F tool/warnings.sh d1a6de74685f360ab718efda6265994b99bbea01 F tool/warnings.sh d1a6de74685f360ab718efda6265994b99bbea01
F tool/win/sqlite.vsix 030f3eeaf2cb811a3692ab9c14d021a75ce41fff F tool/win/sqlite.vsix 030f3eeaf2cb811a3692ab9c14d021a75ce41fff
P 67e28a11de97e97889f0c0f41c05605721c605c1 P 27001356ed8201529b3f31d4313f2010f1b4e1b1
R dc1f4dd0df343cdf7a68b757db650d93 R f3adfc8132b3f36843e2e67728415fbc
U dan U drh
Z abee286031badbf2a2b4e2d1bb40e0a3 Z d16ae1a1de8f3334074e16125e33c2b1

View File

@ -1 +1 @@
27001356ed8201529b3f31d4313f2010f1b4e1b1 f0cf8c85dcbcc7778aed2816792c368d777f79cb

View File

@ -56,18 +56,19 @@
#define PragTyp_SECURE_DELETE 25 #define PragTyp_SECURE_DELETE 25
#define PragTyp_SHRINK_MEMORY 26 #define PragTyp_SHRINK_MEMORY 26
#define PragTyp_SOFT_HEAP_LIMIT 27 #define PragTyp_SOFT_HEAP_LIMIT 27
#define PragTyp_SYNCHRONOUS 28 #define PragTyp_STATS 28
#define PragTyp_TABLE_INFO 29 #define PragTyp_SYNCHRONOUS 29
#define PragTyp_TEMP_STORE 30 #define PragTyp_TABLE_INFO 30
#define PragTyp_TEMP_STORE_DIRECTORY 31 #define PragTyp_TEMP_STORE 31
#define PragTyp_WAL_AUTOCHECKPOINT 32 #define PragTyp_TEMP_STORE_DIRECTORY 32
#define PragTyp_WAL_CHECKPOINT 33 #define PragTyp_WAL_AUTOCHECKPOINT 33
#define PragTyp_ACTIVATE_EXTENSIONS 34 #define PragTyp_WAL_CHECKPOINT 34
#define PragTyp_HEXKEY 35 #define PragTyp_ACTIVATE_EXTENSIONS 35
#define PragTyp_KEY 36 #define PragTyp_HEXKEY 36
#define PragTyp_REKEY 37 #define PragTyp_KEY 37
#define PragTyp_LOCK_STATUS 38 #define PragTyp_REKEY 38
#define PragTyp_PARSER_TRACE 39 #define PragTyp_LOCK_STATUS 39
#define PragTyp_PARSER_TRACE 40
#define PragFlag_NeedSchema 0x01 #define PragFlag_NeedSchema 0x01
static const struct sPragmaNames { static const struct sPragmaNames {
const char *const zName; /* Name of pragma */ const char *const zName; /* Name of pragma */
@ -359,6 +360,12 @@ static const struct sPragmaNames {
/* ePragFlag: */ 0, /* ePragFlag: */ 0,
/* iArg: */ SQLITE_SqlTrace }, /* iArg: */ SQLITE_SqlTrace },
#endif #endif
#if !defined(SQLITE_OMIT_SCHEMA_PRAGMAS)
{ /* zName: */ "stats",
/* ePragTyp: */ PragTyp_STATS,
/* ePragFlag: */ PragFlag_NeedSchema,
/* iArg: */ 0 },
#endif
#if !defined(SQLITE_OMIT_PAGER_PRAGMAS) #if !defined(SQLITE_OMIT_PAGER_PRAGMAS)
{ /* zName: */ "synchronous", { /* zName: */ "synchronous",
/* ePragTyp: */ PragTyp_SYNCHRONOUS, /* ePragTyp: */ PragTyp_SYNCHRONOUS,
@ -420,7 +427,7 @@ static const struct sPragmaNames {
/* ePragFlag: */ 0, /* ePragFlag: */ 0,
/* iArg: */ SQLITE_WriteSchema|SQLITE_RecoveryMode }, /* iArg: */ SQLITE_WriteSchema|SQLITE_RecoveryMode },
}; };
/* Number of pragmas: 55 on by default, 67 total. */ /* Number of pragmas: 56 on by default, 68 total. */
/* End of the automatically generated pragma table. /* End of the automatically generated pragma table.
***************************************************************************/ ***************************************************************************/
@ -1425,6 +1432,36 @@ void sqlite3Pragma(
} }
break; break;
case PragTyp_STATS: {
Index *pIdx;
HashElem *i;
v = sqlite3GetVdbe(pParse);
sqlite3VdbeSetNumCols(v, 4);
pParse->nMem = 4;
sqlite3CodeVerifySchema(pParse, iDb);
sqlite3VdbeSetColName(v, 0, COLNAME_NAME, "table", SQLITE_STATIC);
sqlite3VdbeSetColName(v, 1, COLNAME_NAME, "index", SQLITE_STATIC);
sqlite3VdbeSetColName(v, 2, COLNAME_NAME, "width", SQLITE_STATIC);
sqlite3VdbeSetColName(v, 3, COLNAME_NAME, "height", SQLITE_STATIC);
for(i=sqliteHashFirst(&pDb->pSchema->tblHash); i; i=sqliteHashNext(i)){
Table *pTab = sqliteHashData(i);
sqlite3VdbeAddOp4(v, OP_String8, 0, 1, 0, pTab->zName, 0);
sqlite3VdbeAddOp2(v, OP_Null, 0, 2);
sqlite3VdbeAddOp2(v, OP_Integer,
(int)sqlite3LogEstToInt(pTab->szTabRow), 3);
sqlite3VdbeAddOp2(v, OP_Integer, (int)pTab->nRowEst, 4);
sqlite3VdbeAddOp2(v, OP_ResultRow, 1, 4);
for(pIdx=pTab->pIndex; pIdx; pIdx=pIdx->pNext){
sqlite3VdbeAddOp4(v, OP_String8, 0, 2, 0, pIdx->zName, 0);
sqlite3VdbeAddOp2(v, OP_Integer,
(int)sqlite3LogEstToInt(pIdx->szIdxRow), 3);
sqlite3VdbeAddOp2(v, OP_Integer, (int)pIdx->aiRowEst[0], 4);
sqlite3VdbeAddOp2(v, OP_ResultRow, 1, 4);
}
}
}
break;
case PragTyp_INDEX_INFO: if( zRight ){ case PragTyp_INDEX_INFO: if( zRight ){
Index *pIdx; Index *pIdx;
Table *pTab; Table *pTab;
@ -1457,26 +1494,17 @@ void sqlite3Pragma(
pTab = sqlite3FindTable(db, zRight, zDb); pTab = sqlite3FindTable(db, zRight, zDb);
if( pTab ){ if( pTab ){
v = sqlite3GetVdbe(pParse); v = sqlite3GetVdbe(pParse);
sqlite3VdbeSetNumCols(v, 4); sqlite3VdbeSetNumCols(v, 3);
pParse->nMem = 4; pParse->nMem = 3;
sqlite3CodeVerifySchema(pParse, iDb); sqlite3CodeVerifySchema(pParse, iDb);
sqlite3VdbeSetColName(v, 0, COLNAME_NAME, "seq", SQLITE_STATIC); sqlite3VdbeSetColName(v, 0, COLNAME_NAME, "seq", SQLITE_STATIC);
sqlite3VdbeSetColName(v, 1, COLNAME_NAME, "name", SQLITE_STATIC); sqlite3VdbeSetColName(v, 1, COLNAME_NAME, "name", SQLITE_STATIC);
sqlite3VdbeSetColName(v, 2, COLNAME_NAME, "unique", SQLITE_STATIC); sqlite3VdbeSetColName(v, 2, COLNAME_NAME, "unique", SQLITE_STATIC);
sqlite3VdbeSetColName(v, 3, COLNAME_NAME, "avgrowsize", SQLITE_STATIC); for(pIdx=pTab->pIndex, i=0; pIdx; pIdx=pIdx->pNext, i++){
sqlite3VdbeAddOp2(v, OP_Integer, 0, 1);
sqlite3VdbeAddOp2(v, OP_Null, 0, 2);
sqlite3VdbeAddOp2(v, OP_Integer, 1, 3);
sqlite3VdbeAddOp2(v, OP_Integer,
(int)sqlite3LogEstToInt(pTab->szTabRow), 4);
sqlite3VdbeAddOp2(v, OP_ResultRow, 1, 4);
for(pIdx=pTab->pIndex, i=1; pIdx; pIdx=pIdx->pNext, i++){
sqlite3VdbeAddOp2(v, OP_Integer, i, 1); sqlite3VdbeAddOp2(v, OP_Integer, i, 1);
sqlite3VdbeAddOp4(v, OP_String8, 0, 2, 0, pIdx->zName, 0); sqlite3VdbeAddOp4(v, OP_String8, 0, 2, 0, pIdx->zName, 0);
sqlite3VdbeAddOp2(v, OP_Integer, pIdx->onError!=OE_None, 3); sqlite3VdbeAddOp2(v, OP_Integer, pIdx->onError!=OE_None, 3);
sqlite3VdbeAddOp2(v, OP_Integer, sqlite3VdbeAddOp2(v, OP_ResultRow, 1, 3);
(int)sqlite3LogEstToInt(pIdx->szIdxRow), 4);
sqlite3VdbeAddOp2(v, OP_ResultRow, 1, 4);
} }
} }
} }

View File

@ -574,7 +574,7 @@ ifcapable {foreignkey} {
execsql { execsql {
pragma index_list(t3); pragma index_list(t3);
} }
} {/0 {} 1 \d+ 1 sqlite_autoindex_t3_1 1 \d+/} } {0 sqlite_autoindex_t3_1 1}
} }
ifcapable {!foreignkey} { ifcapable {!foreignkey} {
execsql {CREATE TABLE t3(a,b UNIQUE)} execsql {CREATE TABLE t3(a,b UNIQUE)}
@ -647,7 +647,7 @@ do_test pragma-7.1.1 {
execsql { execsql {
pragma index_list(t3); pragma index_list(t3);
} }
} {/0 {} 1 \d+ 1 t3i1 0 \d+ 2 sqlite_autoindex_t3_1 1 \d+/} } {0 t3i1 0 1 sqlite_autoindex_t3_1 1}
do_test pragma-7.1.2 { do_test pragma-7.1.2 {
execsql { execsql {
pragma index_list(t3_bogus); pragma index_list(t3_bogus);
@ -1661,7 +1661,7 @@ do_test 23.3 {
CREATE INDEX i3 ON t1(d,b,c); CREATE INDEX i3 ON t1(d,b,c);
} }
db2 eval {PRAGMA index_list(t1)} db2 eval {PRAGMA index_list(t1)}
} {/0 {} 1 \d+ 1 i3 0 \d+ 2 i2 0 \d+ 3 i1 0 \d+/} } {0 i3 0 1 i2 0 2 i1 0}
do_test 23.4 { do_test 23.4 {
db eval { db eval {
ALTER TABLE t1 ADD COLUMN e; ALTER TABLE t1 ADD COLUMN e;

View File

@ -172,6 +172,10 @@ set pragma_def {
FLAG: NeedSchema FLAG: NeedSchema
IF: !defined(SQLITE_OMIT_SCHEMA_PRAGMAS) IF: !defined(SQLITE_OMIT_SCHEMA_PRAGMAS)
NAME: stats
FLAG: NeedSchema
IF: !defined(SQLITE_OMIT_SCHEMA_PRAGMAS)
NAME: index_info NAME: index_info
FLAG: NeedSchema FLAG: NeedSchema
IF: !defined(SQLITE_OMIT_SCHEMA_PRAGMAS) IF: !defined(SQLITE_OMIT_SCHEMA_PRAGMAS)