mirror of
https://github.com/sqlite/sqlite.git
synced 2025-11-14 00:22:38 +03:00
Rework the PRAGMA implementation to only call sqlite3ReadSchema() from a single
place, based on a flag in the pragma table, rather than separately from each case which needs the schema. FossilOrigin-Name: 8338232a111be16d6c2ab57176d0a23a001f02ad
This commit is contained in:
16
manifest
16
manifest
@@ -1,5 +1,5 @@
|
|||||||
C Return\san\serror\sif\san\sattempt\sis\smade\sto\screate\sa\strigger\swith\san\sSQL\svariable\sembedded\swithin\sit.\sIf\ssuch\sa\svariable\sreference\sis\sfound\swithin\sa\strigger\sdefinition\sloaded\sfrom\sthe\ssqlite_master\stable,\ssilently\sreplace\sit\swith\sa\sNULL.
|
C Rework\sthe\sPRAGMA\simplementation\sto\sonly\scall\ssqlite3ReadSchema()\sfrom\sa\ssingle\nplace,\sbased\son\sa\sflag\sin\sthe\spragma\stable,\srather\sthan\sseparately\sfrom\seach\ncase\swhich\sneeds\sthe\sschema.
|
||||||
D 2013-10-03T12:29:38.279
|
D 2013-10-03T14:08:07.579
|
||||||
F Makefile.arm-wince-mingw32ce-gcc d6df77f1f48d690bd73162294bbba7f59507c72f
|
F Makefile.arm-wince-mingw32ce-gcc d6df77f1f48d690bd73162294bbba7f59507c72f
|
||||||
F Makefile.in 5e41da95d92656a5004b03d3576e8b226858a28e
|
F Makefile.in 5e41da95d92656a5004b03d3576e8b226858a28e
|
||||||
F Makefile.linux-gcc 91d710bdc4998cb015f39edf3cb314ec4f4d7e23
|
F Makefile.linux-gcc 91d710bdc4998cb015f39edf3cb314ec4f4d7e23
|
||||||
@@ -210,7 +210,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 0c7a67a75cb4f9849190f33f62534d37f38ff8ed
|
F src/pragma.c 5a4d8d9c3c7d22ef920487a260ea3d4b59d3b3a6
|
||||||
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
|
||||||
@@ -1086,7 +1086,7 @@ F tool/lempar.c 01ca97f87610d1dac6d8cd96ab109ab1130e76dc
|
|||||||
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 e24da1496b4af6de448e9673cf6adbef53e6e830
|
F tool/mkpragmatab.tcl 33fa7a6e824b14f7b04109ed75b19f3e9e228412
|
||||||
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 d344cc3144a0271cd853c5e3df36e9f31d78d619
|
F tool/mksqlite3c.tcl d344cc3144a0271cd853c5e3df36e9f31d78d619
|
||||||
@@ -1119,7 +1119,7 @@ F tool/warnings-clang.sh f6aa929dc20ef1f856af04a730772f59283631d4
|
|||||||
F tool/warnings.sh fbc018d67fd7395f440c28f33ef0f94420226381
|
F tool/warnings.sh fbc018d67fd7395f440c28f33ef0f94420226381
|
||||||
F tool/wherecosttest.c f407dc4c79786982a475261866a161cd007947ae
|
F tool/wherecosttest.c f407dc4c79786982a475261866a161cd007947ae
|
||||||
F tool/win/sqlite.vsix 030f3eeaf2cb811a3692ab9c14d021a75ce41fff
|
F tool/win/sqlite.vsix 030f3eeaf2cb811a3692ab9c14d021a75ce41fff
|
||||||
P eec3187bc68ddebdbc2113f77c7f5cd32e9be61f
|
P f35f6ae3da77dbdf5f7a4a9927475659fc6e0ca6
|
||||||
R bcf82dacad10da610aa03ba9f5dccbf3
|
R 7c202bdb865ce04d0b0e729a78eddfa4
|
||||||
U dan
|
U drh
|
||||||
Z 81b7035f34aeb81458a978a9137553b8
|
Z ea56288271c03042a253b9d48679c21a
|
||||||
|
|||||||
@@ -1 +1 @@
|
|||||||
f35f6ae3da77dbdf5f7a4a9927475659fc6e0ca6
|
8338232a111be16d6c2ab57176d0a23a001f02ad
|
||||||
395
src/pragma.c
395
src/pragma.c
@@ -68,175 +68,353 @@
|
|||||||
#define PragTyp_REKEY 37
|
#define PragTyp_REKEY 37
|
||||||
#define PragTyp_LOCK_STATUS 38
|
#define PragTyp_LOCK_STATUS 38
|
||||||
#define PragTyp_PARSER_TRACE 39
|
#define PragTyp_PARSER_TRACE 39
|
||||||
|
#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 */
|
||||||
u8 ePragTyp; /* PragTyp_XXX value */
|
u8 ePragTyp; /* PragTyp_XXX value */
|
||||||
|
u8 mPragFlag; /* Zero or more PragFlag_XXX values */
|
||||||
u32 iArg; /* Extra argument */
|
u32 iArg; /* Extra argument */
|
||||||
} aPragmaNames[] = {
|
} aPragmaNames[] = {
|
||||||
#if defined(SQLITE_HAS_CODEC) || defined(SQLITE_ENABLE_CEROD)
|
#if defined(SQLITE_HAS_CODEC) || defined(SQLITE_ENABLE_CEROD)
|
||||||
{ "activate_extensions", PragTyp_ACTIVATE_EXTENSIONS, 0 },
|
{ /* zName: */ "activate_extensions",
|
||||||
|
/* ePragTyp: */ PragTyp_ACTIVATE_EXTENSIONS,
|
||||||
|
/* ePragFlag: */ 0,
|
||||||
|
/* iArg: */ 0 },
|
||||||
#endif
|
#endif
|
||||||
#if !defined(SQLITE_OMIT_SCHEMA_VERSION_PRAGMAS)
|
#if !defined(SQLITE_OMIT_SCHEMA_VERSION_PRAGMAS)
|
||||||
{ "application_id", PragTyp_HEADER_VALUE, 0 },
|
{ /* zName: */ "application_id",
|
||||||
|
/* ePragTyp: */ PragTyp_HEADER_VALUE,
|
||||||
|
/* ePragFlag: */ 0,
|
||||||
|
/* iArg: */ 0 },
|
||||||
#endif
|
#endif
|
||||||
#if !defined(SQLITE_OMIT_AUTOVACUUM)
|
#if !defined(SQLITE_OMIT_AUTOVACUUM)
|
||||||
{ "auto_vacuum", PragTyp_AUTO_VACUUM, 0 },
|
{ /* zName: */ "auto_vacuum",
|
||||||
|
/* ePragTyp: */ PragTyp_AUTO_VACUUM,
|
||||||
|
/* ePragFlag: */ PragFlag_NeedSchema,
|
||||||
|
/* iArg: */ 0 },
|
||||||
#endif
|
#endif
|
||||||
#if !defined(SQLITE_OMIT_AUTOMATIC_INDEX)
|
#if !defined(SQLITE_OMIT_AUTOMATIC_INDEX)
|
||||||
{ "automatic_index", PragTyp_FLAG,
|
{ /* zName: */ "automatic_index",
|
||||||
SQLITE_AutoIndex },
|
/* ePragTyp: */ PragTyp_FLAG,
|
||||||
|
/* ePragFlag: */ 0,
|
||||||
|
/* iArg: */ SQLITE_AutoIndex },
|
||||||
#endif
|
#endif
|
||||||
{ "busy_timeout", PragTyp_BUSY_TIMEOUT, 0 },
|
{ /* zName: */ "busy_timeout",
|
||||||
|
/* ePragTyp: */ PragTyp_BUSY_TIMEOUT,
|
||||||
|
/* ePragFlag: */ 0,
|
||||||
|
/* iArg: */ 0 },
|
||||||
#if !defined(SQLITE_OMIT_PAGER_PRAGMAS)
|
#if !defined(SQLITE_OMIT_PAGER_PRAGMAS)
|
||||||
{ "cache_size", PragTyp_CACHE_SIZE, 0 },
|
{ /* zName: */ "cache_size",
|
||||||
|
/* ePragTyp: */ PragTyp_CACHE_SIZE,
|
||||||
|
/* ePragFlag: */ PragFlag_NeedSchema,
|
||||||
|
/* iArg: */ 0 },
|
||||||
#endif
|
#endif
|
||||||
{ "cache_spill", PragTyp_FLAG,
|
{ /* zName: */ "cache_spill",
|
||||||
SQLITE_CacheSpill },
|
/* ePragTyp: */ PragTyp_FLAG,
|
||||||
{ "case_sensitive_like", PragTyp_CASE_SENSITIVE_LIKE, 0 },
|
/* ePragFlag: */ 0,
|
||||||
{ "checkpoint_fullfsync", PragTyp_FLAG,
|
/* iArg: */ SQLITE_CacheSpill },
|
||||||
SQLITE_CkptFullFSync },
|
{ /* zName: */ "case_sensitive_like",
|
||||||
|
/* ePragTyp: */ PragTyp_CASE_SENSITIVE_LIKE,
|
||||||
|
/* ePragFlag: */ 0,
|
||||||
|
/* iArg: */ 0 },
|
||||||
|
{ /* zName: */ "checkpoint_fullfsync",
|
||||||
|
/* ePragTyp: */ PragTyp_FLAG,
|
||||||
|
/* ePragFlag: */ 0,
|
||||||
|
/* iArg: */ SQLITE_CkptFullFSync },
|
||||||
#if !defined(SQLITE_OMIT_SCHEMA_PRAGMAS)
|
#if !defined(SQLITE_OMIT_SCHEMA_PRAGMAS)
|
||||||
{ "collation_list", PragTyp_COLLATION_LIST, 0 },
|
{ /* zName: */ "collation_list",
|
||||||
|
/* ePragTyp: */ PragTyp_COLLATION_LIST,
|
||||||
|
/* ePragFlag: */ 0,
|
||||||
|
/* iArg: */ 0 },
|
||||||
#endif
|
#endif
|
||||||
#if !defined(SQLITE_OMIT_COMPILEOPTION_DIAGS)
|
#if !defined(SQLITE_OMIT_COMPILEOPTION_DIAGS)
|
||||||
{ "compile_options", PragTyp_COMPILE_OPTIONS, 0 },
|
{ /* zName: */ "compile_options",
|
||||||
|
/* ePragTyp: */ PragTyp_COMPILE_OPTIONS,
|
||||||
|
/* ePragFlag: */ 0,
|
||||||
|
/* iArg: */ 0 },
|
||||||
#endif
|
#endif
|
||||||
{ "count_changes", PragTyp_FLAG,
|
{ /* zName: */ "count_changes",
|
||||||
SQLITE_CountRows },
|
/* ePragTyp: */ PragTyp_FLAG,
|
||||||
|
/* ePragFlag: */ 0,
|
||||||
|
/* iArg: */ SQLITE_CountRows },
|
||||||
#if !defined(SQLITE_OMIT_PAGER_PRAGMAS) && SQLITE_OS_WIN
|
#if !defined(SQLITE_OMIT_PAGER_PRAGMAS) && SQLITE_OS_WIN
|
||||||
{ "data_store_directory", PragTyp_DATA_STORE_DIRECTORY, 0 },
|
{ /* zName: */ "data_store_directory",
|
||||||
|
/* ePragTyp: */ PragTyp_DATA_STORE_DIRECTORY,
|
||||||
|
/* ePragFlag: */ 0,
|
||||||
|
/* iArg: */ 0 },
|
||||||
#endif
|
#endif
|
||||||
#if !defined(SQLITE_OMIT_SCHEMA_PRAGMAS)
|
#if !defined(SQLITE_OMIT_SCHEMA_PRAGMAS)
|
||||||
{ "database_list", PragTyp_DATABASE_LIST, 0 },
|
{ /* zName: */ "database_list",
|
||||||
|
/* ePragTyp: */ PragTyp_DATABASE_LIST,
|
||||||
|
/* ePragFlag: */ PragFlag_NeedSchema,
|
||||||
|
/* iArg: */ 0 },
|
||||||
#endif
|
#endif
|
||||||
#if !defined(SQLITE_OMIT_PAGER_PRAGMAS) && !defined(SQLITE_OMIT_DEPRECATED)
|
#if !defined(SQLITE_OMIT_PAGER_PRAGMAS) && !defined(SQLITE_OMIT_DEPRECATED)
|
||||||
{ "default_cache_size", PragTyp_DEFAULT_CACHE_SIZE, 0 },
|
{ /* zName: */ "default_cache_size",
|
||||||
|
/* ePragTyp: */ PragTyp_DEFAULT_CACHE_SIZE,
|
||||||
|
/* ePragFlag: */ PragFlag_NeedSchema,
|
||||||
|
/* iArg: */ 0 },
|
||||||
#endif
|
#endif
|
||||||
#if !defined(SQLITE_OMIT_FOREIGN_KEY) && !defined(SQLITE_OMIT_TRIGGER)
|
#if !defined(SQLITE_OMIT_FOREIGN_KEY) && !defined(SQLITE_OMIT_TRIGGER)
|
||||||
{ "defer_foreign_keys", PragTyp_FLAG,
|
{ /* zName: */ "defer_foreign_keys",
|
||||||
SQLITE_DeferFKs },
|
/* ePragTyp: */ PragTyp_FLAG,
|
||||||
|
/* ePragFlag: */ 0,
|
||||||
|
/* iArg: */ SQLITE_DeferFKs },
|
||||||
#endif
|
#endif
|
||||||
{ "empty_result_callbacks", PragTyp_FLAG,
|
{ /* zName: */ "empty_result_callbacks",
|
||||||
SQLITE_NullCallback },
|
/* ePragTyp: */ PragTyp_FLAG,
|
||||||
|
/* ePragFlag: */ 0,
|
||||||
|
/* iArg: */ SQLITE_NullCallback },
|
||||||
#if !defined(SQLITE_OMIT_UTF16)
|
#if !defined(SQLITE_OMIT_UTF16)
|
||||||
{ "encoding", PragTyp_ENCODING, 0 },
|
{ /* zName: */ "encoding",
|
||||||
|
/* ePragTyp: */ PragTyp_ENCODING,
|
||||||
|
/* ePragFlag: */ 0,
|
||||||
|
/* iArg: */ 0 },
|
||||||
#endif
|
#endif
|
||||||
#if !defined(SQLITE_OMIT_FOREIGN_KEY) && !defined(SQLITE_OMIT_TRIGGER)
|
#if !defined(SQLITE_OMIT_FOREIGN_KEY) && !defined(SQLITE_OMIT_TRIGGER)
|
||||||
{ "foreign_key_check", PragTyp_FOREIGN_KEY_CHECK, 0 },
|
{ /* zName: */ "foreign_key_check",
|
||||||
|
/* ePragTyp: */ PragTyp_FOREIGN_KEY_CHECK,
|
||||||
|
/* ePragFlag: */ PragFlag_NeedSchema,
|
||||||
|
/* iArg: */ 0 },
|
||||||
#endif
|
#endif
|
||||||
#if !defined(SQLITE_OMIT_FOREIGN_KEY)
|
#if !defined(SQLITE_OMIT_FOREIGN_KEY)
|
||||||
{ "foreign_key_list", PragTyp_FOREIGN_KEY_LIST, 0 },
|
{ /* zName: */ "foreign_key_list",
|
||||||
|
/* ePragTyp: */ PragTyp_FOREIGN_KEY_LIST,
|
||||||
|
/* ePragFlag: */ PragFlag_NeedSchema,
|
||||||
|
/* iArg: */ 0 },
|
||||||
#endif
|
#endif
|
||||||
#if !defined(SQLITE_OMIT_FOREIGN_KEY) && !defined(SQLITE_OMIT_TRIGGER)
|
#if !defined(SQLITE_OMIT_FOREIGN_KEY) && !defined(SQLITE_OMIT_TRIGGER)
|
||||||
{ "foreign_keys", PragTyp_FLAG,
|
{ /* zName: */ "foreign_keys",
|
||||||
SQLITE_ForeignKeys },
|
/* ePragTyp: */ PragTyp_FLAG,
|
||||||
|
/* ePragFlag: */ 0,
|
||||||
|
/* iArg: */ SQLITE_ForeignKeys },
|
||||||
#endif
|
#endif
|
||||||
#if !defined(SQLITE_OMIT_SCHEMA_VERSION_PRAGMAS)
|
#if !defined(SQLITE_OMIT_SCHEMA_VERSION_PRAGMAS)
|
||||||
{ "freelist_count", PragTyp_HEADER_VALUE, 0 },
|
{ /* zName: */ "freelist_count",
|
||||||
|
/* ePragTyp: */ PragTyp_HEADER_VALUE,
|
||||||
|
/* ePragFlag: */ 0,
|
||||||
|
/* iArg: */ 0 },
|
||||||
#endif
|
#endif
|
||||||
{ "full_column_names", PragTyp_FLAG,
|
{ /* zName: */ "full_column_names",
|
||||||
SQLITE_FullColNames },
|
/* ePragTyp: */ PragTyp_FLAG,
|
||||||
{ "fullfsync", PragTyp_FLAG,
|
/* ePragFlag: */ 0,
|
||||||
SQLITE_FullFSync },
|
/* iArg: */ SQLITE_FullColNames },
|
||||||
|
{ /* zName: */ "fullfsync",
|
||||||
|
/* ePragTyp: */ PragTyp_FLAG,
|
||||||
|
/* ePragFlag: */ 0,
|
||||||
|
/* iArg: */ SQLITE_FullFSync },
|
||||||
#if defined(SQLITE_HAS_CODEC)
|
#if defined(SQLITE_HAS_CODEC)
|
||||||
{ "hexkey", PragTyp_HEXKEY, 0 },
|
{ /* zName: */ "hexkey",
|
||||||
|
/* ePragTyp: */ PragTyp_HEXKEY,
|
||||||
|
/* ePragFlag: */ 0,
|
||||||
|
/* iArg: */ 0 },
|
||||||
#endif
|
#endif
|
||||||
#if !defined(SQLITE_OMIT_CHECK)
|
#if !defined(SQLITE_OMIT_CHECK)
|
||||||
{ "ignore_check_constraints", PragTyp_FLAG,
|
{ /* zName: */ "ignore_check_constraints",
|
||||||
SQLITE_IgnoreChecks },
|
/* ePragTyp: */ PragTyp_FLAG,
|
||||||
|
/* ePragFlag: */ 0,
|
||||||
|
/* iArg: */ SQLITE_IgnoreChecks },
|
||||||
#endif
|
#endif
|
||||||
#if !defined(SQLITE_OMIT_AUTOVACUUM)
|
#if !defined(SQLITE_OMIT_AUTOVACUUM)
|
||||||
{ "incremental_vacuum", PragTyp_INCREMENTAL_VACUUM, 0 },
|
{ /* zName: */ "incremental_vacuum",
|
||||||
|
/* ePragTyp: */ PragTyp_INCREMENTAL_VACUUM,
|
||||||
|
/* ePragFlag: */ PragFlag_NeedSchema,
|
||||||
|
/* iArg: */ 0 },
|
||||||
#endif
|
#endif
|
||||||
#if !defined(SQLITE_OMIT_SCHEMA_PRAGMAS)
|
#if !defined(SQLITE_OMIT_SCHEMA_PRAGMAS)
|
||||||
{ "index_info", PragTyp_INDEX_INFO, 0 },
|
{ /* zName: */ "index_info",
|
||||||
{ "index_list", PragTyp_INDEX_LIST, 0 },
|
/* ePragTyp: */ PragTyp_INDEX_INFO,
|
||||||
|
/* ePragFlag: */ PragFlag_NeedSchema,
|
||||||
|
/* iArg: */ 0 },
|
||||||
|
{ /* zName: */ "index_list",
|
||||||
|
/* ePragTyp: */ PragTyp_INDEX_LIST,
|
||||||
|
/* ePragFlag: */ PragFlag_NeedSchema,
|
||||||
|
/* iArg: */ 0 },
|
||||||
#endif
|
#endif
|
||||||
#if !defined(SQLITE_OMIT_INTEGRITY_CHECK)
|
#if !defined(SQLITE_OMIT_INTEGRITY_CHECK)
|
||||||
{ "integrity_check", PragTyp_INTEGRITY_CHECK, 0 },
|
{ /* zName: */ "integrity_check",
|
||||||
|
/* ePragTyp: */ PragTyp_INTEGRITY_CHECK,
|
||||||
|
/* ePragFlag: */ PragFlag_NeedSchema,
|
||||||
|
/* iArg: */ 0 },
|
||||||
#endif
|
#endif
|
||||||
#if !defined(SQLITE_OMIT_PAGER_PRAGMAS)
|
#if !defined(SQLITE_OMIT_PAGER_PRAGMAS)
|
||||||
{ "journal_mode", PragTyp_JOURNAL_MODE, 0 },
|
{ /* zName: */ "journal_mode",
|
||||||
{ "journal_size_limit", PragTyp_JOURNAL_SIZE_LIMIT, 0 },
|
/* ePragTyp: */ PragTyp_JOURNAL_MODE,
|
||||||
|
/* ePragFlag: */ PragFlag_NeedSchema,
|
||||||
|
/* iArg: */ 0 },
|
||||||
|
{ /* zName: */ "journal_size_limit",
|
||||||
|
/* ePragTyp: */ PragTyp_JOURNAL_SIZE_LIMIT,
|
||||||
|
/* ePragFlag: */ 0,
|
||||||
|
/* iArg: */ 0 },
|
||||||
#endif
|
#endif
|
||||||
#if defined(SQLITE_HAS_CODEC)
|
#if defined(SQLITE_HAS_CODEC)
|
||||||
{ "key", PragTyp_KEY, 0 },
|
{ /* zName: */ "key",
|
||||||
|
/* ePragTyp: */ PragTyp_KEY,
|
||||||
|
/* ePragFlag: */ 0,
|
||||||
|
/* iArg: */ 0 },
|
||||||
#endif
|
#endif
|
||||||
{ "legacy_file_format", PragTyp_FLAG,
|
{ /* zName: */ "legacy_file_format",
|
||||||
SQLITE_LegacyFileFmt },
|
/* ePragTyp: */ PragTyp_FLAG,
|
||||||
|
/* ePragFlag: */ 0,
|
||||||
|
/* iArg: */ SQLITE_LegacyFileFmt },
|
||||||
#if !defined(SQLITE_OMIT_PAGER_PRAGMAS) && SQLITE_ENABLE_LOCKING_STYLE
|
#if !defined(SQLITE_OMIT_PAGER_PRAGMAS) && SQLITE_ENABLE_LOCKING_STYLE
|
||||||
{ "lock_proxy_file", PragTyp_LOCK_PROXY_FILE, 0 },
|
{ /* zName: */ "lock_proxy_file",
|
||||||
|
/* ePragTyp: */ PragTyp_LOCK_PROXY_FILE,
|
||||||
|
/* ePragFlag: */ 0,
|
||||||
|
/* iArg: */ 0 },
|
||||||
#endif
|
#endif
|
||||||
#if defined(SQLITE_DEBUG) || defined(SQLITE_TEST)
|
#if defined(SQLITE_DEBUG) || defined(SQLITE_TEST)
|
||||||
{ "lock_status", PragTyp_LOCK_STATUS, 0 },
|
{ /* zName: */ "lock_status",
|
||||||
|
/* ePragTyp: */ PragTyp_LOCK_STATUS,
|
||||||
|
/* ePragFlag: */ 0,
|
||||||
|
/* iArg: */ 0 },
|
||||||
#endif
|
#endif
|
||||||
#if !defined(SQLITE_OMIT_PAGER_PRAGMAS)
|
#if !defined(SQLITE_OMIT_PAGER_PRAGMAS)
|
||||||
{ "locking_mode", PragTyp_LOCKING_MODE, 0 },
|
{ /* zName: */ "locking_mode",
|
||||||
{ "max_page_count", PragTyp_PAGE_COUNT, 0 },
|
/* ePragTyp: */ PragTyp_LOCKING_MODE,
|
||||||
{ "mmap_size", PragTyp_MMAP_SIZE, 0 },
|
/* ePragFlag: */ 0,
|
||||||
{ "page_count", PragTyp_PAGE_COUNT, 0 },
|
/* iArg: */ 0 },
|
||||||
{ "page_size", PragTyp_PAGE_SIZE, 0 },
|
{ /* zName: */ "max_page_count",
|
||||||
|
/* ePragTyp: */ PragTyp_PAGE_COUNT,
|
||||||
|
/* ePragFlag: */ PragFlag_NeedSchema,
|
||||||
|
/* iArg: */ 0 },
|
||||||
|
{ /* zName: */ "mmap_size",
|
||||||
|
/* ePragTyp: */ PragTyp_MMAP_SIZE,
|
||||||
|
/* ePragFlag: */ 0,
|
||||||
|
/* iArg: */ 0 },
|
||||||
|
{ /* zName: */ "page_count",
|
||||||
|
/* ePragTyp: */ PragTyp_PAGE_COUNT,
|
||||||
|
/* ePragFlag: */ PragFlag_NeedSchema,
|
||||||
|
/* iArg: */ 0 },
|
||||||
|
{ /* zName: */ "page_size",
|
||||||
|
/* ePragTyp: */ PragTyp_PAGE_SIZE,
|
||||||
|
/* ePragFlag: */ 0,
|
||||||
|
/* iArg: */ 0 },
|
||||||
#endif
|
#endif
|
||||||
#if defined(SQLITE_DEBUG)
|
#if defined(SQLITE_DEBUG)
|
||||||
{ "parser_trace", PragTyp_PARSER_TRACE, 0 },
|
{ /* zName: */ "parser_trace",
|
||||||
|
/* ePragTyp: */ PragTyp_PARSER_TRACE,
|
||||||
|
/* ePragFlag: */ 0,
|
||||||
|
/* iArg: */ 0 },
|
||||||
#endif
|
#endif
|
||||||
{ "query_only", PragTyp_FLAG,
|
{ /* zName: */ "query_only",
|
||||||
SQLITE_QueryOnly },
|
/* ePragTyp: */ PragTyp_FLAG,
|
||||||
|
/* ePragFlag: */ 0,
|
||||||
|
/* iArg: */ SQLITE_QueryOnly },
|
||||||
#if !defined(SQLITE_OMIT_INTEGRITY_CHECK)
|
#if !defined(SQLITE_OMIT_INTEGRITY_CHECK)
|
||||||
{ "quick_check", PragTyp_INTEGRITY_CHECK, 0 },
|
{ /* zName: */ "quick_check",
|
||||||
|
/* ePragTyp: */ PragTyp_INTEGRITY_CHECK,
|
||||||
|
/* ePragFlag: */ PragFlag_NeedSchema,
|
||||||
|
/* iArg: */ 0 },
|
||||||
#endif
|
#endif
|
||||||
{ "read_uncommitted", PragTyp_FLAG,
|
{ /* zName: */ "read_uncommitted",
|
||||||
SQLITE_ReadUncommitted },
|
/* ePragTyp: */ PragTyp_FLAG,
|
||||||
{ "recursive_triggers", PragTyp_FLAG,
|
/* ePragFlag: */ 0,
|
||||||
SQLITE_RecTriggers },
|
/* iArg: */ SQLITE_ReadUncommitted },
|
||||||
|
{ /* zName: */ "recursive_triggers",
|
||||||
|
/* ePragTyp: */ PragTyp_FLAG,
|
||||||
|
/* ePragFlag: */ 0,
|
||||||
|
/* iArg: */ SQLITE_RecTriggers },
|
||||||
#if defined(SQLITE_HAS_CODEC)
|
#if defined(SQLITE_HAS_CODEC)
|
||||||
{ "rekey", PragTyp_REKEY, 0 },
|
{ /* zName: */ "rekey",
|
||||||
|
/* ePragTyp: */ PragTyp_REKEY,
|
||||||
|
/* ePragFlag: */ 0,
|
||||||
|
/* iArg: */ 0 },
|
||||||
#endif
|
#endif
|
||||||
{ "reverse_unordered_selects", PragTyp_FLAG,
|
{ /* zName: */ "reverse_unordered_selects",
|
||||||
SQLITE_ReverseOrder },
|
/* ePragTyp: */ PragTyp_FLAG,
|
||||||
|
/* ePragFlag: */ 0,
|
||||||
|
/* iArg: */ SQLITE_ReverseOrder },
|
||||||
#if !defined(SQLITE_OMIT_SCHEMA_VERSION_PRAGMAS)
|
#if !defined(SQLITE_OMIT_SCHEMA_VERSION_PRAGMAS)
|
||||||
{ "schema_version", PragTyp_HEADER_VALUE, 0 },
|
{ /* zName: */ "schema_version",
|
||||||
|
/* ePragTyp: */ PragTyp_HEADER_VALUE,
|
||||||
|
/* ePragFlag: */ 0,
|
||||||
|
/* iArg: */ 0 },
|
||||||
#endif
|
#endif
|
||||||
#if !defined(SQLITE_OMIT_PAGER_PRAGMAS)
|
#if !defined(SQLITE_OMIT_PAGER_PRAGMAS)
|
||||||
{ "secure_delete", PragTyp_SECURE_DELETE, 0 },
|
{ /* zName: */ "secure_delete",
|
||||||
|
/* ePragTyp: */ PragTyp_SECURE_DELETE,
|
||||||
|
/* ePragFlag: */ 0,
|
||||||
|
/* iArg: */ 0 },
|
||||||
#endif
|
#endif
|
||||||
{ "short_column_names", PragTyp_FLAG,
|
{ /* zName: */ "short_column_names",
|
||||||
SQLITE_ShortColNames },
|
/* ePragTyp: */ PragTyp_FLAG,
|
||||||
{ "shrink_memory", PragTyp_SHRINK_MEMORY, 0 },
|
/* ePragFlag: */ 0,
|
||||||
{ "soft_heap_limit", PragTyp_SOFT_HEAP_LIMIT, 0 },
|
/* iArg: */ SQLITE_ShortColNames },
|
||||||
|
{ /* zName: */ "shrink_memory",
|
||||||
|
/* ePragTyp: */ PragTyp_SHRINK_MEMORY,
|
||||||
|
/* ePragFlag: */ 0,
|
||||||
|
/* iArg: */ 0 },
|
||||||
|
{ /* zName: */ "soft_heap_limit",
|
||||||
|
/* ePragTyp: */ PragTyp_SOFT_HEAP_LIMIT,
|
||||||
|
/* ePragFlag: */ 0,
|
||||||
|
/* iArg: */ 0 },
|
||||||
#if defined(SQLITE_DEBUG)
|
#if defined(SQLITE_DEBUG)
|
||||||
{ "sql_trace", PragTyp_FLAG,
|
{ /* zName: */ "sql_trace",
|
||||||
SQLITE_SqlTrace },
|
/* ePragTyp: */ PragTyp_FLAG,
|
||||||
|
/* ePragFlag: */ 0,
|
||||||
|
/* iArg: */ SQLITE_SqlTrace },
|
||||||
#endif
|
#endif
|
||||||
#if !defined(SQLITE_OMIT_PAGER_PRAGMAS)
|
#if !defined(SQLITE_OMIT_PAGER_PRAGMAS)
|
||||||
{ "synchronous", PragTyp_SYNCHRONOUS, 0 },
|
{ /* zName: */ "synchronous",
|
||||||
|
/* ePragTyp: */ PragTyp_SYNCHRONOUS,
|
||||||
|
/* ePragFlag: */ PragFlag_NeedSchema,
|
||||||
|
/* iArg: */ 0 },
|
||||||
#endif
|
#endif
|
||||||
#if !defined(SQLITE_OMIT_SCHEMA_PRAGMAS)
|
#if !defined(SQLITE_OMIT_SCHEMA_PRAGMAS)
|
||||||
{ "table_info", PragTyp_TABLE_INFO, 0 },
|
{ /* zName: */ "table_info",
|
||||||
|
/* ePragTyp: */ PragTyp_TABLE_INFO,
|
||||||
|
/* ePragFlag: */ PragFlag_NeedSchema,
|
||||||
|
/* iArg: */ 0 },
|
||||||
#endif
|
#endif
|
||||||
#if !defined(SQLITE_OMIT_PAGER_PRAGMAS)
|
#if !defined(SQLITE_OMIT_PAGER_PRAGMAS)
|
||||||
{ "temp_store", PragTyp_TEMP_STORE, 0 },
|
{ /* zName: */ "temp_store",
|
||||||
{ "temp_store_directory", PragTyp_TEMP_STORE_DIRECTORY, 0 },
|
/* ePragTyp: */ PragTyp_TEMP_STORE,
|
||||||
|
/* ePragFlag: */ 0,
|
||||||
|
/* iArg: */ 0 },
|
||||||
|
{ /* zName: */ "temp_store_directory",
|
||||||
|
/* ePragTyp: */ PragTyp_TEMP_STORE_DIRECTORY,
|
||||||
|
/* ePragFlag: */ 0,
|
||||||
|
/* iArg: */ 0 },
|
||||||
#endif
|
#endif
|
||||||
#if !defined(SQLITE_OMIT_SCHEMA_VERSION_PRAGMAS)
|
#if !defined(SQLITE_OMIT_SCHEMA_VERSION_PRAGMAS)
|
||||||
{ "user_version", PragTyp_HEADER_VALUE, 0 },
|
{ /* zName: */ "user_version",
|
||||||
|
/* ePragTyp: */ PragTyp_HEADER_VALUE,
|
||||||
|
/* ePragFlag: */ 0,
|
||||||
|
/* iArg: */ 0 },
|
||||||
#endif
|
#endif
|
||||||
#if defined(SQLITE_DEBUG)
|
#if defined(SQLITE_DEBUG)
|
||||||
{ "vdbe_addoptrace", PragTyp_FLAG,
|
{ /* zName: */ "vdbe_addoptrace",
|
||||||
SQLITE_VdbeAddopTrace },
|
/* ePragTyp: */ PragTyp_FLAG,
|
||||||
{ "vdbe_debug", PragTyp_FLAG,
|
/* ePragFlag: */ 0,
|
||||||
SQLITE_SqlTrace|SQLITE_VdbeListing|SQLITE_VdbeTrace },
|
/* iArg: */ SQLITE_VdbeAddopTrace },
|
||||||
{ "vdbe_listing", PragTyp_FLAG,
|
{ /* zName: */ "vdbe_debug",
|
||||||
SQLITE_VdbeListing },
|
/* ePragTyp: */ PragTyp_FLAG,
|
||||||
{ "vdbe_trace", PragTyp_FLAG,
|
/* ePragFlag: */ 0,
|
||||||
SQLITE_VdbeTrace },
|
/* iArg: */ SQLITE_SqlTrace|SQLITE_VdbeListing|SQLITE_VdbeTrace },
|
||||||
|
{ /* zName: */ "vdbe_listing",
|
||||||
|
/* ePragTyp: */ PragTyp_FLAG,
|
||||||
|
/* ePragFlag: */ 0,
|
||||||
|
/* iArg: */ SQLITE_VdbeListing },
|
||||||
|
{ /* zName: */ "vdbe_trace",
|
||||||
|
/* ePragTyp: */ PragTyp_FLAG,
|
||||||
|
/* ePragFlag: */ 0,
|
||||||
|
/* iArg: */ SQLITE_VdbeTrace },
|
||||||
#endif
|
#endif
|
||||||
#if !defined(SQLITE_OMIT_WAL)
|
#if !defined(SQLITE_OMIT_WAL)
|
||||||
{ "wal_autocheckpoint", PragTyp_WAL_AUTOCHECKPOINT, 0 },
|
{ /* zName: */ "wal_autocheckpoint",
|
||||||
{ "wal_checkpoint", PragTyp_WAL_CHECKPOINT, 0 },
|
/* ePragTyp: */ PragTyp_WAL_AUTOCHECKPOINT,
|
||||||
|
/* ePragFlag: */ 0,
|
||||||
|
/* iArg: */ 0 },
|
||||||
|
{ /* zName: */ "wal_checkpoint",
|
||||||
|
/* ePragTyp: */ PragTyp_WAL_CHECKPOINT,
|
||||||
|
/* ePragFlag: */ PragFlag_NeedSchema,
|
||||||
|
/* iArg: */ 0 },
|
||||||
#endif
|
#endif
|
||||||
{ "writable_schema", PragTyp_FLAG,
|
{ /* zName: */ "writable_schema",
|
||||||
SQLITE_WriteSchema|SQLITE_RecoveryMode },
|
/* ePragTyp: */ PragTyp_FLAG,
|
||||||
|
/* ePragFlag: */ 0,
|
||||||
|
/* iArg: */ SQLITE_WriteSchema|SQLITE_RecoveryMode },
|
||||||
};
|
};
|
||||||
/* Number of pragmas: 55 on by default, 66 total. */
|
/* Number of pragmas: 55 on by default, 66 total. */
|
||||||
/* End of the automatically generated pragma table.
|
/* End of the automatically generated pragma table.
|
||||||
@@ -571,6 +749,11 @@ void sqlite3Pragma(
|
|||||||
}
|
}
|
||||||
if( lwr>upr ) goto pragma_out;
|
if( lwr>upr ) goto pragma_out;
|
||||||
|
|
||||||
|
/* Make sure the database schema is loaded if the pragma requires that */
|
||||||
|
if( (aPragmaNames[mid].mPragFlag & PragFlag_NeedSchema)!=0 ){
|
||||||
|
if( sqlite3ReadSchema(pParse) ) goto pragma_out;
|
||||||
|
}
|
||||||
|
|
||||||
/* Jump to the appropriate pragma handler */
|
/* Jump to the appropriate pragma handler */
|
||||||
switch( aPragmaNames[mid].ePragTyp ){
|
switch( aPragmaNames[mid].ePragTyp ){
|
||||||
|
|
||||||
@@ -604,7 +787,6 @@ void sqlite3Pragma(
|
|||||||
{ OP_ResultRow, 1, 1, 0},
|
{ OP_ResultRow, 1, 1, 0},
|
||||||
};
|
};
|
||||||
int addr;
|
int addr;
|
||||||
if( sqlite3ReadSchema(pParse) ) goto pragma_out;
|
|
||||||
sqlite3VdbeUsesBtree(v, iDb);
|
sqlite3VdbeUsesBtree(v, iDb);
|
||||||
if( !zRight ){
|
if( !zRight ){
|
||||||
sqlite3VdbeSetNumCols(v, 1);
|
sqlite3VdbeSetNumCols(v, 1);
|
||||||
@@ -700,7 +882,6 @@ void sqlite3Pragma(
|
|||||||
*/
|
*/
|
||||||
case PragTyp_PAGE_COUNT: {
|
case PragTyp_PAGE_COUNT: {
|
||||||
int iReg;
|
int iReg;
|
||||||
if( sqlite3ReadSchema(pParse) ) goto pragma_out;
|
|
||||||
sqlite3CodeVerifySchema(pParse, iDb);
|
sqlite3CodeVerifySchema(pParse, iDb);
|
||||||
iReg = ++pParse->nMem;
|
iReg = ++pParse->nMem;
|
||||||
if( sqlite3Tolower(zLeft[0])=='p' ){
|
if( sqlite3Tolower(zLeft[0])=='p' ){
|
||||||
@@ -773,14 +954,6 @@ void sqlite3Pragma(
|
|||||||
int eMode; /* One of the PAGER_JOURNALMODE_XXX symbols */
|
int eMode; /* One of the PAGER_JOURNALMODE_XXX symbols */
|
||||||
int ii; /* Loop counter */
|
int ii; /* Loop counter */
|
||||||
|
|
||||||
/* Force the schema to be loaded on all databases. This causes all
|
|
||||||
** database files to be opened and the journal_modes set. This is
|
|
||||||
** necessary because subsequent processing must know if the databases
|
|
||||||
** are in WAL mode. */
|
|
||||||
if( sqlite3ReadSchema(pParse) ){
|
|
||||||
goto pragma_out;
|
|
||||||
}
|
|
||||||
|
|
||||||
sqlite3VdbeSetNumCols(v, 1);
|
sqlite3VdbeSetNumCols(v, 1);
|
||||||
sqlite3VdbeSetColName(v, 0, COLNAME_NAME, "journal_mode", SQLITE_STATIC);
|
sqlite3VdbeSetColName(v, 0, COLNAME_NAME, "journal_mode", SQLITE_STATIC);
|
||||||
|
|
||||||
@@ -846,22 +1019,12 @@ void sqlite3Pragma(
|
|||||||
case PragTyp_AUTO_VACUUM: {
|
case PragTyp_AUTO_VACUUM: {
|
||||||
Btree *pBt = pDb->pBt;
|
Btree *pBt = pDb->pBt;
|
||||||
assert( pBt!=0 );
|
assert( pBt!=0 );
|
||||||
if( sqlite3ReadSchema(pParse) ){
|
|
||||||
goto pragma_out;
|
|
||||||
}
|
|
||||||
if( !zRight ){
|
if( !zRight ){
|
||||||
int auto_vacuum;
|
returnSingleInt(pParse, "auto_vacuum", sqlite3BtreeGetAutoVacuum(pBt));
|
||||||
if( ALWAYS(pBt) ){
|
|
||||||
auto_vacuum = sqlite3BtreeGetAutoVacuum(pBt);
|
|
||||||
}else{
|
|
||||||
auto_vacuum = SQLITE_DEFAULT_AUTOVACUUM;
|
|
||||||
}
|
|
||||||
returnSingleInt(pParse, "auto_vacuum", auto_vacuum);
|
|
||||||
}else{
|
}else{
|
||||||
int eAuto = getAutoVacuum(zRight);
|
int eAuto = getAutoVacuum(zRight);
|
||||||
assert( eAuto>=0 && eAuto<=2 );
|
assert( eAuto>=0 && eAuto<=2 );
|
||||||
db->nextAutovac = (u8)eAuto;
|
db->nextAutovac = (u8)eAuto;
|
||||||
if( ALWAYS(eAuto>=0) ){
|
|
||||||
/* Call SetAutoVacuum() to set initialize the internal auto and
|
/* Call SetAutoVacuum() to set initialize the internal auto and
|
||||||
** incr-vacuum flags. This is required in case this connection
|
** incr-vacuum flags. This is required in case this connection
|
||||||
** creates the database file. It is important that it is created
|
** creates the database file. It is important that it is created
|
||||||
@@ -892,7 +1055,6 @@ void sqlite3Pragma(
|
|||||||
sqlite3VdbeUsesBtree(v, iDb);
|
sqlite3VdbeUsesBtree(v, iDb);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
@@ -905,9 +1067,6 @@ void sqlite3Pragma(
|
|||||||
#ifndef SQLITE_OMIT_AUTOVACUUM
|
#ifndef SQLITE_OMIT_AUTOVACUUM
|
||||||
case PragTyp_INCREMENTAL_VACUUM: {
|
case PragTyp_INCREMENTAL_VACUUM: {
|
||||||
int iLimit, addr;
|
int iLimit, addr;
|
||||||
if( sqlite3ReadSchema(pParse) ){
|
|
||||||
goto pragma_out;
|
|
||||||
}
|
|
||||||
if( zRight==0 || !sqlite3GetInt32(zRight, &iLimit) || iLimit<=0 ){
|
if( zRight==0 || !sqlite3GetInt32(zRight, &iLimit) || iLimit<=0 ){
|
||||||
iLimit = 0x7fffffff;
|
iLimit = 0x7fffffff;
|
||||||
}
|
}
|
||||||
@@ -935,7 +1094,6 @@ void sqlite3Pragma(
|
|||||||
** of memory.
|
** of memory.
|
||||||
*/
|
*/
|
||||||
case PragTyp_CACHE_SIZE: {
|
case PragTyp_CACHE_SIZE: {
|
||||||
if( sqlite3ReadSchema(pParse) ) goto pragma_out;
|
|
||||||
assert( sqlite3SchemaMutexHeld(db, iDb, 0) );
|
assert( sqlite3SchemaMutexHeld(db, iDb, 0) );
|
||||||
if( !zRight ){
|
if( !zRight ){
|
||||||
returnSingleInt(pParse, "cache_size", pDb->pSchema->cache_size);
|
returnSingleInt(pParse, "cache_size", pDb->pSchema->cache_size);
|
||||||
@@ -1156,7 +1314,6 @@ void sqlite3Pragma(
|
|||||||
** opened.
|
** opened.
|
||||||
*/
|
*/
|
||||||
case PragTyp_SYNCHRONOUS: {
|
case PragTyp_SYNCHRONOUS: {
|
||||||
if( sqlite3ReadSchema(pParse) ) goto pragma_out;
|
|
||||||
if( !zRight ){
|
if( !zRight ){
|
||||||
returnSingleInt(pParse, "synchronous", pDb->safety_level-1);
|
returnSingleInt(pParse, "synchronous", pDb->safety_level-1);
|
||||||
}else{
|
}else{
|
||||||
@@ -1218,7 +1375,6 @@ void sqlite3Pragma(
|
|||||||
*/
|
*/
|
||||||
case PragTyp_TABLE_INFO: if( zRight ){
|
case PragTyp_TABLE_INFO: if( zRight ){
|
||||||
Table *pTab;
|
Table *pTab;
|
||||||
if( sqlite3ReadSchema(pParse) ) goto pragma_out;
|
|
||||||
pTab = sqlite3FindTable(db, zRight, zDb);
|
pTab = sqlite3FindTable(db, zRight, zDb);
|
||||||
if( pTab ){
|
if( pTab ){
|
||||||
int i, k;
|
int i, k;
|
||||||
@@ -1268,7 +1424,6 @@ void sqlite3Pragma(
|
|||||||
case PragTyp_INDEX_INFO: if( zRight ){
|
case PragTyp_INDEX_INFO: if( zRight ){
|
||||||
Index *pIdx;
|
Index *pIdx;
|
||||||
Table *pTab;
|
Table *pTab;
|
||||||
if( sqlite3ReadSchema(pParse) ) goto pragma_out;
|
|
||||||
pIdx = sqlite3FindIndex(db, zRight, zDb);
|
pIdx = sqlite3FindIndex(db, zRight, zDb);
|
||||||
if( pIdx ){
|
if( pIdx ){
|
||||||
int i;
|
int i;
|
||||||
@@ -1294,7 +1449,6 @@ void sqlite3Pragma(
|
|||||||
case PragTyp_INDEX_LIST: if( zRight ){
|
case PragTyp_INDEX_LIST: if( zRight ){
|
||||||
Index *pIdx;
|
Index *pIdx;
|
||||||
Table *pTab;
|
Table *pTab;
|
||||||
if( sqlite3ReadSchema(pParse) ) goto pragma_out;
|
|
||||||
pTab = sqlite3FindTable(db, zRight, zDb);
|
pTab = sqlite3FindTable(db, zRight, zDb);
|
||||||
if( pTab ){
|
if( pTab ){
|
||||||
v = sqlite3GetVdbe(pParse);
|
v = sqlite3GetVdbe(pParse);
|
||||||
@@ -1322,7 +1476,6 @@ void sqlite3Pragma(
|
|||||||
|
|
||||||
case PragTyp_DATABASE_LIST: {
|
case PragTyp_DATABASE_LIST: {
|
||||||
int i;
|
int i;
|
||||||
if( sqlite3ReadSchema(pParse) ) goto pragma_out;
|
|
||||||
sqlite3VdbeSetNumCols(v, 3);
|
sqlite3VdbeSetNumCols(v, 3);
|
||||||
pParse->nMem = 3;
|
pParse->nMem = 3;
|
||||||
sqlite3VdbeSetColName(v, 0, COLNAME_NAME, "seq", SQLITE_STATIC);
|
sqlite3VdbeSetColName(v, 0, COLNAME_NAME, "seq", SQLITE_STATIC);
|
||||||
@@ -1361,7 +1514,6 @@ void sqlite3Pragma(
|
|||||||
case PragTyp_FOREIGN_KEY_LIST: if( zRight ){
|
case PragTyp_FOREIGN_KEY_LIST: if( zRight ){
|
||||||
FKey *pFK;
|
FKey *pFK;
|
||||||
Table *pTab;
|
Table *pTab;
|
||||||
if( sqlite3ReadSchema(pParse) ) goto pragma_out;
|
|
||||||
pTab = sqlite3FindTable(db, zRight, zDb);
|
pTab = sqlite3FindTable(db, zRight, zDb);
|
||||||
if( pTab ){
|
if( pTab ){
|
||||||
v = sqlite3GetVdbe(pParse);
|
v = sqlite3GetVdbe(pParse);
|
||||||
@@ -1423,7 +1575,6 @@ void sqlite3Pragma(
|
|||||||
int addrOk; /* Jump here if the key is OK */
|
int addrOk; /* Jump here if the key is OK */
|
||||||
int *aiCols; /* child to parent column mapping */
|
int *aiCols; /* child to parent column mapping */
|
||||||
|
|
||||||
if( sqlite3ReadSchema(pParse) ) goto pragma_out;
|
|
||||||
regResult = pParse->nMem+1;
|
regResult = pParse->nMem+1;
|
||||||
pParse->nMem += 4;
|
pParse->nMem += 4;
|
||||||
regKey = ++pParse->nMem;
|
regKey = ++pParse->nMem;
|
||||||
@@ -1584,7 +1735,6 @@ void sqlite3Pragma(
|
|||||||
if( pId2->z==0 ) iDb = -1;
|
if( pId2->z==0 ) iDb = -1;
|
||||||
|
|
||||||
/* Initialize the VDBE program */
|
/* Initialize the VDBE program */
|
||||||
if( sqlite3ReadSchema(pParse) ) goto pragma_out;
|
|
||||||
pParse->nMem = 6;
|
pParse->nMem = 6;
|
||||||
sqlite3VdbeSetNumCols(v, 1);
|
sqlite3VdbeSetNumCols(v, 1);
|
||||||
sqlite3VdbeSetColName(v, 0, COLNAME_NAME, "integrity_check", SQLITE_STATIC);
|
sqlite3VdbeSetColName(v, 0, COLNAME_NAME, "integrity_check", SQLITE_STATIC);
|
||||||
@@ -1908,7 +2058,6 @@ void sqlite3Pragma(
|
|||||||
eMode = SQLITE_CHECKPOINT_RESTART;
|
eMode = SQLITE_CHECKPOINT_RESTART;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if( sqlite3ReadSchema(pParse) ) goto pragma_out;
|
|
||||||
sqlite3VdbeSetNumCols(v, 3);
|
sqlite3VdbeSetNumCols(v, 3);
|
||||||
pParse->nMem = 3;
|
pParse->nMem = 3;
|
||||||
sqlite3VdbeSetColName(v, 0, COLNAME_NAME, "busy", SQLITE_STATIC);
|
sqlite3VdbeSetColName(v, 0, COLNAME_NAME, "busy", SQLITE_STATIC);
|
||||||
|
|||||||
@@ -109,6 +109,7 @@ set pragma_def {
|
|||||||
IF: !defined(SQLITE_OMIT_FOREIGN_KEY) && !defined(SQLITE_OMIT_TRIGGER)
|
IF: !defined(SQLITE_OMIT_FOREIGN_KEY) && !defined(SQLITE_OMIT_TRIGGER)
|
||||||
|
|
||||||
NAME: default_cache_size
|
NAME: default_cache_size
|
||||||
|
FLAG: NeedSchema
|
||||||
IF: !defined(SQLITE_OMIT_PAGER_PRAGMAS) && !defined(SQLITE_OMIT_DEPRECATED)
|
IF: !defined(SQLITE_OMIT_PAGER_PRAGMAS) && !defined(SQLITE_OMIT_DEPRECATED)
|
||||||
|
|
||||||
NAME: page_size
|
NAME: page_size
|
||||||
@@ -118,31 +119,37 @@ set pragma_def {
|
|||||||
IF: !defined(SQLITE_OMIT_PAGER_PRAGMAS)
|
IF: !defined(SQLITE_OMIT_PAGER_PRAGMAS)
|
||||||
|
|
||||||
NAME: page_count
|
NAME: page_count
|
||||||
|
FLAG: NeedSchema
|
||||||
IF: !defined(SQLITE_OMIT_PAGER_PRAGMAS)
|
IF: !defined(SQLITE_OMIT_PAGER_PRAGMAS)
|
||||||
|
|
||||||
NAME: max_page_count
|
NAME: max_page_count
|
||||||
TYPE: PAGE_COUNT
|
TYPE: PAGE_COUNT
|
||||||
|
FLAG: NeedSchema
|
||||||
IF: !defined(SQLITE_OMIT_PAGER_PRAGMAS)
|
IF: !defined(SQLITE_OMIT_PAGER_PRAGMAS)
|
||||||
|
|
||||||
NAME: locking_mode
|
NAME: locking_mode
|
||||||
IF: !defined(SQLITE_OMIT_PAGER_PRAGMAS)
|
IF: !defined(SQLITE_OMIT_PAGER_PRAGMAS)
|
||||||
|
|
||||||
NAME: journal_mode
|
NAME: journal_mode
|
||||||
|
FLAG: NeedSchema
|
||||||
IF: !defined(SQLITE_OMIT_PAGER_PRAGMAS)
|
IF: !defined(SQLITE_OMIT_PAGER_PRAGMAS)
|
||||||
|
|
||||||
NAME: journal_size_limit
|
NAME: journal_size_limit
|
||||||
IF: !defined(SQLITE_OMIT_PAGER_PRAGMAS)
|
IF: !defined(SQLITE_OMIT_PAGER_PRAGMAS)
|
||||||
|
|
||||||
NAME: cache_size
|
NAME: cache_size
|
||||||
|
FLAG: NeedSchema
|
||||||
IF: !defined(SQLITE_OMIT_PAGER_PRAGMAS)
|
IF: !defined(SQLITE_OMIT_PAGER_PRAGMAS)
|
||||||
|
|
||||||
NAME: mmap_size
|
NAME: mmap_size
|
||||||
IF: !defined(SQLITE_OMIT_PAGER_PRAGMAS)
|
IF: !defined(SQLITE_OMIT_PAGER_PRAGMAS)
|
||||||
|
|
||||||
NAME: auto_vacuum
|
NAME: auto_vacuum
|
||||||
|
FLAG: NeedSchema
|
||||||
IF: !defined(SQLITE_OMIT_AUTOVACUUM)
|
IF: !defined(SQLITE_OMIT_AUTOVACUUM)
|
||||||
|
|
||||||
NAME: incremental_vacuum
|
NAME: incremental_vacuum
|
||||||
|
FLAG: NeedSchema
|
||||||
IF: !defined(SQLITE_OMIT_AUTOVACUUM)
|
IF: !defined(SQLITE_OMIT_AUTOVACUUM)
|
||||||
|
|
||||||
NAME: temp_store
|
NAME: temp_store
|
||||||
@@ -158,27 +165,34 @@ set pragma_def {
|
|||||||
IF: !defined(SQLITE_OMIT_PAGER_PRAGMAS) && SQLITE_ENABLE_LOCKING_STYLE
|
IF: !defined(SQLITE_OMIT_PAGER_PRAGMAS) && SQLITE_ENABLE_LOCKING_STYLE
|
||||||
|
|
||||||
NAME: synchronous
|
NAME: synchronous
|
||||||
|
FLAG: NeedSchema
|
||||||
IF: !defined(SQLITE_OMIT_PAGER_PRAGMAS)
|
IF: !defined(SQLITE_OMIT_PAGER_PRAGMAS)
|
||||||
|
|
||||||
NAME: table_info
|
NAME: table_info
|
||||||
|
FLAG: NeedSchema
|
||||||
IF: !defined(SQLITE_OMIT_SCHEMA_PRAGMAS)
|
IF: !defined(SQLITE_OMIT_SCHEMA_PRAGMAS)
|
||||||
|
|
||||||
NAME: index_info
|
NAME: index_info
|
||||||
|
FLAG: NeedSchema
|
||||||
IF: !defined(SQLITE_OMIT_SCHEMA_PRAGMAS)
|
IF: !defined(SQLITE_OMIT_SCHEMA_PRAGMAS)
|
||||||
|
|
||||||
NAME: index_list
|
NAME: index_list
|
||||||
|
FLAG: NeedSchema
|
||||||
IF: !defined(SQLITE_OMIT_SCHEMA_PRAGMAS)
|
IF: !defined(SQLITE_OMIT_SCHEMA_PRAGMAS)
|
||||||
|
|
||||||
NAME: database_list
|
NAME: database_list
|
||||||
|
FLAG: NeedSchema
|
||||||
IF: !defined(SQLITE_OMIT_SCHEMA_PRAGMAS)
|
IF: !defined(SQLITE_OMIT_SCHEMA_PRAGMAS)
|
||||||
|
|
||||||
NAME: collation_list
|
NAME: collation_list
|
||||||
IF: !defined(SQLITE_OMIT_SCHEMA_PRAGMAS)
|
IF: !defined(SQLITE_OMIT_SCHEMA_PRAGMAS)
|
||||||
|
|
||||||
NAME: foreign_key_list
|
NAME: foreign_key_list
|
||||||
|
FLAG: NeedSchema
|
||||||
IF: !defined(SQLITE_OMIT_FOREIGN_KEY)
|
IF: !defined(SQLITE_OMIT_FOREIGN_KEY)
|
||||||
|
|
||||||
NAME: foreign_key_check
|
NAME: foreign_key_check
|
||||||
|
FLAG: NeedSchema
|
||||||
IF: !defined(SQLITE_OMIT_FOREIGN_KEY) && !defined(SQLITE_OMIT_TRIGGER)
|
IF: !defined(SQLITE_OMIT_FOREIGN_KEY) && !defined(SQLITE_OMIT_TRIGGER)
|
||||||
|
|
||||||
NAME: parser_trace
|
NAME: parser_trace
|
||||||
@@ -187,10 +201,12 @@ set pragma_def {
|
|||||||
NAME: case_sensitive_like
|
NAME: case_sensitive_like
|
||||||
|
|
||||||
NAME: integrity_check
|
NAME: integrity_check
|
||||||
|
FLAG: NeedSchema
|
||||||
IF: !defined(SQLITE_OMIT_INTEGRITY_CHECK)
|
IF: !defined(SQLITE_OMIT_INTEGRITY_CHECK)
|
||||||
|
|
||||||
NAME: quick_check
|
NAME: quick_check
|
||||||
TYPE: INTEGRITY_CHECK
|
TYPE: INTEGRITY_CHECK
|
||||||
|
FLAG: NeedSchema
|
||||||
IF: !defined(SQLITE_OMIT_INTEGRITY_CHECK)
|
IF: !defined(SQLITE_OMIT_INTEGRITY_CHECK)
|
||||||
|
|
||||||
NAME: encoding
|
NAME: encoding
|
||||||
@@ -216,6 +232,7 @@ set pragma_def {
|
|||||||
IF: !defined(SQLITE_OMIT_COMPILEOPTION_DIAGS)
|
IF: !defined(SQLITE_OMIT_COMPILEOPTION_DIAGS)
|
||||||
|
|
||||||
NAME: wal_checkpoint
|
NAME: wal_checkpoint
|
||||||
|
FLAG: NeedSchema
|
||||||
IF: !defined(SQLITE_OMIT_WAL)
|
IF: !defined(SQLITE_OMIT_WAL)
|
||||||
|
|
||||||
NAME: wal_autocheckpoint
|
NAME: wal_autocheckpoint
|
||||||
@@ -245,14 +262,16 @@ set pragma_def {
|
|||||||
set name {}
|
set name {}
|
||||||
set type {}
|
set type {}
|
||||||
set if {}
|
set if {}
|
||||||
|
set flags {}
|
||||||
set arg 0
|
set arg 0
|
||||||
proc record_one {} {
|
proc record_one {} {
|
||||||
global name type if arg allbyname typebyif
|
global name type if arg allbyname typebyif flags
|
||||||
if {$name==""} return
|
if {$name==""} return
|
||||||
set allbyname($name) [list $type $arg $if]
|
set allbyname($name) [list $type $arg $if $flags]
|
||||||
set name {}
|
set name {}
|
||||||
set type {}
|
set type {}
|
||||||
set if {}
|
set if {}
|
||||||
|
set flags {}
|
||||||
set arg 0
|
set arg 0
|
||||||
}
|
}
|
||||||
foreach line [split $pragma_def \n] {
|
foreach line [split $pragma_def \n] {
|
||||||
@@ -270,6 +289,11 @@ foreach line [split $pragma_def \n] {
|
|||||||
set arg $val
|
set arg $val
|
||||||
} elseif {$id=="IF"} {
|
} elseif {$id=="IF"} {
|
||||||
set if $val
|
set if $val
|
||||||
|
} elseif {$id=="FLAG"} {
|
||||||
|
foreach term [split $val] {
|
||||||
|
lappend flags $term
|
||||||
|
set allflags($term) 1
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
error "bad pragma_def line: $line"
|
error "bad pragma_def line: $line"
|
||||||
}
|
}
|
||||||
@@ -308,30 +332,42 @@ foreach name $allnames {
|
|||||||
incr pnum
|
incr pnum
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# Generate #defines for flags
|
||||||
|
#
|
||||||
|
set fv 1
|
||||||
|
foreach f [lsort [array names allflags]] {
|
||||||
|
puts [format {#define PragFlag_%-20s 0x%02x} $f $fv]
|
||||||
|
set fv [expr {$fv*2}]
|
||||||
|
}
|
||||||
|
|
||||||
# Generate the lookup table
|
# Generate the lookup table
|
||||||
#
|
#
|
||||||
puts "static const struct sPragmaNames \173"
|
puts "static const struct sPragmaNames \173"
|
||||||
puts " const char *const zName; /* Name of pragma */"
|
puts " const char *const zName; /* Name of pragma */"
|
||||||
puts " u8 ePragTyp; /* PragTyp_XXX value */"
|
puts " u8 ePragTyp; /* PragTyp_XXX value */"
|
||||||
|
puts " u8 mPragFlag; /* Zero or more PragFlag_XXX values */"
|
||||||
puts " u32 iArg; /* Extra argument */"
|
puts " u32 iArg; /* Extra argument */"
|
||||||
puts "\175 aPragmaNames\[\] = \173"
|
puts "\175 aPragmaNames\[\] = \173"
|
||||||
|
|
||||||
set current_if {}
|
set current_if {}
|
||||||
set spacer [format { %26s } {}]
|
set spacer [format { %26s } {}]
|
||||||
foreach name $allnames {
|
foreach name $allnames {
|
||||||
foreach {type arg if} $allbyname($name) break
|
foreach {type arg if flag} $allbyname($name) break
|
||||||
if {$if!=$current_if} {
|
if {$if!=$current_if} {
|
||||||
if {$current_if!=""} {puts "#endif"}
|
if {$current_if!=""} {puts "#endif"}
|
||||||
set current_if $if
|
set current_if $if
|
||||||
if {$current_if!=""} {puts "#if $current_if"}
|
if {$current_if!=""} {puts "#if $current_if"}
|
||||||
}
|
}
|
||||||
set namex [format %-26s \"$name\",]
|
|
||||||
set typex [format PragTyp_%-23s $type,]
|
set typex [format PragTyp_%-23s $type,]
|
||||||
if {[string length $arg]>10} {
|
if {$flag==""} {
|
||||||
puts " \173 $namex $typex\n$spacer$arg \175,"
|
set flagx "0"
|
||||||
} else {
|
} else {
|
||||||
puts " \173 $namex $typex $arg \175,"
|
set flagx PragFlag_[join $flag {|PragFlag_}]
|
||||||
}
|
}
|
||||||
|
puts " \173 /* zName: */ \"$name\","
|
||||||
|
puts " /* ePragTyp: */ PragTyp_$type,"
|
||||||
|
puts " /* ePragFlag: */ $flagx,"
|
||||||
|
puts " /* iArg: */ $arg \175,"
|
||||||
}
|
}
|
||||||
if {$current_if!=""} {puts "#endif"}
|
if {$current_if!=""} {puts "#endif"}
|
||||||
puts "\175;"
|
puts "\175;"
|
||||||
|
|||||||
Reference in New Issue
Block a user