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

Add new pragmas: "function_list" and "module_list"

FossilOrigin-Name: e5f01d7fde05fdb547f35816ff15c31a92c170b31877f4c640b7bc2be3f580b3
This commit is contained in:
drh
2017-07-07 15:43:22 +00:00
parent d10866798d
commit ab53bb635c
5 changed files with 134 additions and 65 deletions

View File

@ -1,5 +1,5 @@
C Exploit\sthe\sfact\sthat\sExpr.pRight\sand\sExpr.x\sare\snever\sused\sat\sthe\ssame\stime\nfor\sa\ssmall\sperformance\sgain. C Add\snew\spragmas:\s"function_list"\sand\s"module_list"
D 2017-07-07T13:59:34.309 D 2017-07-07T15:43:22.754
F Makefile.in 081e48dfe7f995d57ce1a88ddf4d2917b4349158648a6cd45b42beae30de3a12 F Makefile.in 081e48dfe7f995d57ce1a88ddf4d2917b4349158648a6cd45b42beae30de3a12
F Makefile.linux-gcc 7bc79876b875010e8c8f9502eb935ca92aa3c434 F Makefile.linux-gcc 7bc79876b875010e8c8f9502eb935ca92aa3c434
F Makefile.msc 4ebb1d257cac7fb1bcb4ba59278416d410ff1c4bf59447a9c37a415f3516056a F Makefile.msc 4ebb1d257cac7fb1bcb4ba59278416d410ff1c4bf59447a9c37a415f3516056a
@ -441,8 +441,8 @@ F src/parse.y 71bf06b02f567232deabe258641b03e833e93c4dee61a120765ad74c13e7faec
F src/pcache.c 62835bed959e2914edd26afadfecce29ece0e870 F src/pcache.c 62835bed959e2914edd26afadfecce29ece0e870
F src/pcache.h 521bb9610d38ef17a3cc9b5ddafd4546c2ea67fa3d0e464823d73c2a28d50e11 F src/pcache.h 521bb9610d38ef17a3cc9b5ddafd4546c2ea67fa3d0e464823d73c2a28d50e11
F src/pcache1.c 1195a21fe28e223e024f900b2011e80df53793f0356a24caace4188b098540dc F src/pcache1.c 1195a21fe28e223e024f900b2011e80df53793f0356a24caace4188b098540dc
F src/pragma.c 2362670a9d28b71708aecb2b9b10b3f7be71f4c950961c07e81dc400e3ce6371 F src/pragma.c 415a98ec60bd209b69e502f07f1c7b9a84140d7e44332202367b2d60e7c30e60
F src/pragma.h 99d3df4a3d2f12c5227ad403f767334910e6356325b6d155a9a99b4037093460 F src/pragma.h 0d5573ec6c5aa8e65a7d1b33055b868295f16d1ee6aa754754fc1fc75ececd1a
F src/prepare.c 4b84ae7458febe1df3e04ae62ba56abc851f771340e460d14426e6802c5615f4 F src/prepare.c 4b84ae7458febe1df3e04ae62ba56abc851f771340e460d14426e6802c5615f4
F src/printf.c 8757834f1b54dae512fb25eb1acc8e94a0d15dd2290b58f2563f65973265adb2 F src/printf.c 8757834f1b54dae512fb25eb1acc8e94a0d15dd2290b58f2563f65973265adb2
F src/random.c 80f5d666f23feb3e6665a6ce04c7197212a88384 F src/random.c 80f5d666f23feb3e6665a6ce04c7197212a88384
@ -1566,7 +1566,7 @@ F tool/mkmsvcmin.tcl cbd93f1cfa3a0a9ae56fc958510aa3fc3ac65e29cb111716199e3d0e66e
F tool/mkopcodec.tcl d1b6362bd3aa80d5520d4d6f3765badf01f6c43c F tool/mkopcodec.tcl d1b6362bd3aa80d5520d4d6f3765badf01f6c43c
F tool/mkopcodeh.tcl a01d2c1d8a6205b03fc635adf3735b4c523befd3 F tool/mkopcodeh.tcl a01d2c1d8a6205b03fc635adf3735b4c523befd3
F tool/mkopts.tcl 66ac10d240cc6e86abd37dc908d50382f84ff46e F tool/mkopts.tcl 66ac10d240cc6e86abd37dc908d50382f84ff46e
F tool/mkpragmatab.tcl aa94395a91b5bd47022b7db0c08126f047887e0d299cc19ec1c23a9e5b136961 F tool/mkpragmatab.tcl 3707a9586c5f3fccded77ac23b9f1672785f43c9bc0c1f49845bb81dbf8118d5
F tool/mkspeedsql.tcl a1a334d288f7adfe6e996f2e712becf076745c97 F tool/mkspeedsql.tcl a1a334d288f7adfe6e996f2e712becf076745c97
F tool/mksqlite3c-noext.tcl fef88397668ae83166735c41af99d79f56afaabb F tool/mksqlite3c-noext.tcl fef88397668ae83166735c41af99d79f56afaabb
F tool/mksqlite3c.tcl f6214285bec900d28441366ca31af327aade18bbc424b0480497966ec05bc43c F tool/mksqlite3c.tcl f6214285bec900d28441366ca31af327aade18bbc424b0480497966ec05bc43c
@ -1628,7 +1628,10 @@ F vsixtest/vsixtest.tcl 6a9a6ab600c25a91a7acc6293828957a386a8a93
F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc
F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e
F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0 F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0
P 115d4b83392d346634866dd959bef30fca50db2e526df17eaeb3d94da7fc895e P aacbb9a461fdb34c7f9c8ce348e44c3e96c93334f210d438d92bfac1794dc686
R 582e201382f2bd562c6f1266d901f884 R 0f36dd9733d38244f7ca6a934ae9744a
T *branch * list-pragmas
T *sym-list-pragmas *
T -sym-trunk *
U drh U drh
Z 92ef67718e1f4940d85eca215e487e0c Z 4e2b289a760c670e9cafd6cf4ad4b9b9

View File

@ -1 +1 @@
aacbb9a461fdb34c7f9c8ce348e44c3e96c93334f210d438d92bfac1794dc686 e5f01d7fde05fdb547f35816ff15c31a92c170b31877f4c640b7bc2be3f580b3

View File

@ -1225,6 +1225,40 @@ void sqlite3Pragma(
} }
} }
break; break;
case PragTyp_FUNCTION_LIST: {
int i;
HashElem *j;
FuncDef *p;
pParse->nMem = 2;
for(i=0; i<SQLITE_FUNC_HASH_SZ; i++){
for(p=sqlite3BuiltinFunctions.a[i]; p; p=p->u.pHash ){
sqlite3VdbeMultiLoad(v, 1, "si", p->zName, 1);
sqlite3VdbeAddOp2(v, OP_ResultRow, 1, 2);
}
}
for(j=sqliteHashFirst(&db->aFunc); j; j=sqliteHashNext(j)){
p = (FuncDef*)sqliteHashData(j);
sqlite3VdbeMultiLoad(v, 1, "si", p->zName, 0);
sqlite3VdbeAddOp2(v, OP_ResultRow, 1, 2);
}
}
break;
#ifndef SQLITE_OMIT_VIRTUALTABLE
case PragTyp_MODULE_LIST: {
HashElem *j;
pParse->nMem = 1;
for(j=sqliteHashFirst(&db->aModule); j; j=sqliteHashNext(j)){
Module *pMod = (Module*)sqliteHashData(j);
sqlite3VdbeMultiLoad(v, 1, "s", pMod->zName);
sqlite3VdbeAddOp2(v, OP_ResultRow, 1, 1);
}
}
break;
#endif /* SQLITE_OMIT_VIRTUALTABLE */
#endif /* SQLITE_OMIT_SCHEMA_PRAGMAS */ #endif /* SQLITE_OMIT_SCHEMA_PRAGMAS */
#ifndef SQLITE_OMIT_FOREIGN_KEY #ifndef SQLITE_OMIT_FOREIGN_KEY

View File

@ -20,35 +20,37 @@
#define PragTyp_ENCODING 12 #define PragTyp_ENCODING 12
#define PragTyp_FOREIGN_KEY_CHECK 13 #define PragTyp_FOREIGN_KEY_CHECK 13
#define PragTyp_FOREIGN_KEY_LIST 14 #define PragTyp_FOREIGN_KEY_LIST 14
#define PragTyp_INCREMENTAL_VACUUM 15 #define PragTyp_FUNCTION_LIST 15
#define PragTyp_INDEX_INFO 16 #define PragTyp_INCREMENTAL_VACUUM 16
#define PragTyp_INDEX_LIST 17 #define PragTyp_INDEX_INFO 17
#define PragTyp_INTEGRITY_CHECK 18 #define PragTyp_INDEX_LIST 18
#define PragTyp_JOURNAL_MODE 19 #define PragTyp_INTEGRITY_CHECK 19
#define PragTyp_JOURNAL_SIZE_LIMIT 20 #define PragTyp_JOURNAL_MODE 20
#define PragTyp_LOCK_PROXY_FILE 21 #define PragTyp_JOURNAL_SIZE_LIMIT 21
#define PragTyp_LOCKING_MODE 22 #define PragTyp_LOCK_PROXY_FILE 22
#define PragTyp_PAGE_COUNT 23 #define PragTyp_LOCKING_MODE 23
#define PragTyp_MMAP_SIZE 24 #define PragTyp_PAGE_COUNT 24
#define PragTyp_OPTIMIZE 25 #define PragTyp_MMAP_SIZE 25
#define PragTyp_PAGE_SIZE 26 #define PragTyp_MODULE_LIST 26
#define PragTyp_SECURE_DELETE 27 #define PragTyp_OPTIMIZE 27
#define PragTyp_SHRINK_MEMORY 28 #define PragTyp_PAGE_SIZE 28
#define PragTyp_SOFT_HEAP_LIMIT 29 #define PragTyp_SECURE_DELETE 29
#define PragTyp_SYNCHRONOUS 30 #define PragTyp_SHRINK_MEMORY 30
#define PragTyp_TABLE_INFO 31 #define PragTyp_SOFT_HEAP_LIMIT 31
#define PragTyp_TEMP_STORE 32 #define PragTyp_SYNCHRONOUS 32
#define PragTyp_TEMP_STORE_DIRECTORY 33 #define PragTyp_TABLE_INFO 33
#define PragTyp_THREADS 34 #define PragTyp_TEMP_STORE 34
#define PragTyp_WAL_AUTOCHECKPOINT 35 #define PragTyp_TEMP_STORE_DIRECTORY 35
#define PragTyp_WAL_CHECKPOINT 36 #define PragTyp_THREADS 36
#define PragTyp_ACTIVATE_EXTENSIONS 37 #define PragTyp_WAL_AUTOCHECKPOINT 37
#define PragTyp_HEXKEY 38 #define PragTyp_WAL_CHECKPOINT 38
#define PragTyp_KEY 39 #define PragTyp_ACTIVATE_EXTENSIONS 39
#define PragTyp_REKEY 40 #define PragTyp_HEXKEY 40
#define PragTyp_LOCK_STATUS 41 #define PragTyp_KEY 41
#define PragTyp_PARSER_TRACE 42 #define PragTyp_REKEY 42
#define PragTyp_STATS 43 #define PragTyp_LOCK_STATUS 43
#define PragTyp_PARSER_TRACE 44
#define PragTyp_STATS 45
/* Property flags associated with various pragma. */ /* Property flags associated with various pragma. */
#define PragFlg_NeedSchema 0x01 /* Force schema load before running */ #define PragFlg_NeedSchema 0x01 /* Force schema load before running */
@ -94,26 +96,29 @@ static const char *const pragCName[] = {
/* 26 */ "seq", /* Used by: database_list */ /* 26 */ "seq", /* Used by: database_list */
/* 27 */ "name", /* 27 */ "name",
/* 28 */ "file", /* 28 */ "file",
/* 29 */ "seq", /* Used by: collation_list */ /* 29 */ "name", /* Used by: function_list */
/* 30 */ "name", /* 30 */ "builtin",
/* 31 */ "id", /* Used by: foreign_key_list */ /* 31 */ "name", /* Used by: module_list */
/* 32 */ "seq", /* 32 */ "seq", /* Used by: collation_list */
/* 33 */ "table", /* 33 */ "name",
/* 34 */ "from", /* 34 */ "id", /* Used by: foreign_key_list */
/* 35 */ "to", /* 35 */ "seq",
/* 36 */ "on_update", /* 36 */ "table",
/* 37 */ "on_delete", /* 37 */ "from",
/* 38 */ "match", /* 38 */ "to",
/* 39 */ "table", /* Used by: foreign_key_check */ /* 39 */ "on_update",
/* 40 */ "rowid", /* 40 */ "on_delete",
/* 41 */ "parent", /* 41 */ "match",
/* 42 */ "fkid", /* 42 */ "table", /* Used by: foreign_key_check */
/* 43 */ "busy", /* Used by: wal_checkpoint */ /* 43 */ "rowid",
/* 44 */ "log", /* 44 */ "parent",
/* 45 */ "checkpointed", /* 45 */ "fkid",
/* 46 */ "timeout", /* Used by: busy_timeout */ /* 46 */ "busy", /* Used by: wal_checkpoint */
/* 47 */ "database", /* Used by: lock_status */ /* 47 */ "log",
/* 48 */ "status", /* 48 */ "checkpointed",
/* 49 */ "timeout", /* Used by: busy_timeout */
/* 50 */ "database", /* Used by: lock_status */
/* 51 */ "status",
}; };
/* Definitions of all built-in pragmas */ /* Definitions of all built-in pragmas */
@ -159,7 +164,7 @@ static const PragmaName aPragmaName[] = {
{/* zName: */ "busy_timeout", {/* zName: */ "busy_timeout",
/* ePragTyp: */ PragTyp_BUSY_TIMEOUT, /* ePragTyp: */ PragTyp_BUSY_TIMEOUT,
/* ePragFlg: */ PragFlg_Result0, /* ePragFlg: */ PragFlg_Result0,
/* ColNames: */ 46, 1, /* ColNames: */ 49, 1,
/* iArg: */ 0 }, /* iArg: */ 0 },
#if !defined(SQLITE_OMIT_PAGER_PRAGMAS) #if !defined(SQLITE_OMIT_PAGER_PRAGMAS)
{/* zName: */ "cache_size", {/* zName: */ "cache_size",
@ -196,7 +201,7 @@ static const PragmaName aPragmaName[] = {
{/* zName: */ "collation_list", {/* zName: */ "collation_list",
/* ePragTyp: */ PragTyp_COLLATION_LIST, /* ePragTyp: */ PragTyp_COLLATION_LIST,
/* ePragFlg: */ PragFlg_Result0, /* ePragFlg: */ PragFlg_Result0,
/* ColNames: */ 29, 2, /* ColNames: */ 32, 2,
/* iArg: */ 0 }, /* iArg: */ 0 },
#endif #endif
#if !defined(SQLITE_OMIT_COMPILEOPTION_DIAGS) #if !defined(SQLITE_OMIT_COMPILEOPTION_DIAGS)
@ -268,14 +273,14 @@ static const PragmaName aPragmaName[] = {
{/* zName: */ "foreign_key_check", {/* zName: */ "foreign_key_check",
/* ePragTyp: */ PragTyp_FOREIGN_KEY_CHECK, /* ePragTyp: */ PragTyp_FOREIGN_KEY_CHECK,
/* ePragFlg: */ PragFlg_NeedSchema|PragFlg_Result0, /* ePragFlg: */ PragFlg_NeedSchema|PragFlg_Result0,
/* ColNames: */ 39, 4, /* ColNames: */ 42, 4,
/* iArg: */ 0 }, /* iArg: */ 0 },
#endif #endif
#if !defined(SQLITE_OMIT_FOREIGN_KEY) #if !defined(SQLITE_OMIT_FOREIGN_KEY)
{/* zName: */ "foreign_key_list", {/* zName: */ "foreign_key_list",
/* ePragTyp: */ PragTyp_FOREIGN_KEY_LIST, /* ePragTyp: */ PragTyp_FOREIGN_KEY_LIST,
/* ePragFlg: */ PragFlg_NeedSchema|PragFlg_Result1|PragFlg_SchemaOpt, /* ePragFlg: */ PragFlg_NeedSchema|PragFlg_Result1|PragFlg_SchemaOpt,
/* ColNames: */ 31, 8, /* ColNames: */ 34, 8,
/* iArg: */ 0 }, /* iArg: */ 0 },
#endif #endif
#if !defined(SQLITE_OMIT_FLAG_PRAGMAS) #if !defined(SQLITE_OMIT_FLAG_PRAGMAS)
@ -306,6 +311,13 @@ static const PragmaName aPragmaName[] = {
/* ColNames: */ 0, 0, /* ColNames: */ 0, 0,
/* iArg: */ SQLITE_FullFSync }, /* iArg: */ SQLITE_FullFSync },
#endif #endif
#if !defined(SQLITE_OMIT_SCHEMA_PRAGMAS)
{/* zName: */ "function_list",
/* ePragTyp: */ PragTyp_FUNCTION_LIST,
/* ePragFlg: */ PragFlg_Result0,
/* ColNames: */ 29, 2,
/* iArg: */ 0 },
#endif
#if defined(SQLITE_HAS_CODEC) #if defined(SQLITE_HAS_CODEC)
{/* zName: */ "hexkey", {/* zName: */ "hexkey",
/* ePragTyp: */ PragTyp_HEXKEY, /* ePragTyp: */ PragTyp_HEXKEY,
@ -395,7 +407,7 @@ static const PragmaName aPragmaName[] = {
{/* zName: */ "lock_status", {/* zName: */ "lock_status",
/* ePragTyp: */ PragTyp_LOCK_STATUS, /* ePragTyp: */ PragTyp_LOCK_STATUS,
/* ePragFlg: */ PragFlg_Result0, /* ePragFlg: */ PragFlg_Result0,
/* ColNames: */ 47, 2, /* ColNames: */ 50, 2,
/* iArg: */ 0 }, /* iArg: */ 0 },
#endif #endif
#if !defined(SQLITE_OMIT_PAGER_PRAGMAS) #if !defined(SQLITE_OMIT_PAGER_PRAGMAS)
@ -414,6 +426,15 @@ static const PragmaName aPragmaName[] = {
/* ePragFlg: */ 0, /* ePragFlg: */ 0,
/* ColNames: */ 0, 0, /* ColNames: */ 0, 0,
/* iArg: */ 0 }, /* iArg: */ 0 },
#endif
#if !defined(SQLITE_OMIT_SCHEMA_PRAGMAS)
#if !defined(SQLITE_OMIT_VIRTUALTABLE)
{/* zName: */ "module_list",
/* ePragTyp: */ PragTyp_MODULE_LIST,
/* ePragFlg: */ PragFlg_Result0,
/* ColNames: */ 31, 1,
/* iArg: */ 0 },
#endif
#endif #endif
{/* zName: */ "optimize", {/* zName: */ "optimize",
/* ePragTyp: */ PragTyp_OPTIMIZE, /* ePragTyp: */ PragTyp_OPTIMIZE,
@ -602,7 +623,7 @@ static const PragmaName aPragmaName[] = {
{/* zName: */ "wal_checkpoint", {/* zName: */ "wal_checkpoint",
/* ePragTyp: */ PragTyp_WAL_CHECKPOINT, /* ePragTyp: */ PragTyp_WAL_CHECKPOINT,
/* ePragFlg: */ PragFlg_NeedSchema, /* ePragFlg: */ PragFlg_NeedSchema,
/* ColNames: */ 43, 3, /* ColNames: */ 46, 3,
/* iArg: */ 0 }, /* iArg: */ 0 },
#endif #endif
#if !defined(SQLITE_OMIT_FLAG_PRAGMAS) #if !defined(SQLITE_OMIT_FLAG_PRAGMAS)
@ -613,4 +634,4 @@ static const PragmaName aPragmaName[] = {
/* iArg: */ SQLITE_WriteSchema }, /* iArg: */ SQLITE_WriteSchema },
#endif #endif
}; };
/* Number of pragmas: 60 on by default, 74 total. */ /* Number of pragmas: 62 on by default, 76 total. */

View File

@ -252,6 +252,17 @@ set pragma_def {
COLS: seq name file COLS: seq name file
IF: !defined(SQLITE_OMIT_SCHEMA_PRAGMAS) IF: !defined(SQLITE_OMIT_SCHEMA_PRAGMAS)
NAME: function_list
FLAG: Result0
COLS: name builtin
IF: !defined(SQLITE_OMIT_SCHEMA_PRAGMAS)
NAME: module_list
FLAG: Result0
COLS: name
IF: !defined(SQLITE_OMIT_SCHEMA_PRAGMAS)
IF: !defined(SQLITE_OMIT_VIRTUALTABLE)
NAME: collation_list NAME: collation_list
FLAG: Result0 FLAG: Result0
COLS: seq name COLS: seq name