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:
18
manifest
18
manifest
@ -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
|
||||||
|
@ -1 +1 @@
|
|||||||
27001356ed8201529b3f31d4313f2010f1b4e1b1
|
f0cf8c85dcbcc7778aed2816792c368d777f79cb
|
80
src/pragma.c
80
src/pragma.c
@ -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);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -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;
|
||||||
|
@ -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)
|
||||||
|
Reference in New Issue
Block a user