|
|
@@ -125,7 +125,7 @@ extern "C" {
|
|
|
*/
|
|
|
#define SQLITE_VERSION "3.31.0"
|
|
|
#define SQLITE_VERSION_NUMBER 3031000
|
|
|
-#define SQLITE_SOURCE_ID "2019-12-18 21:22:40 062e00c4d7e30155299339eaefe6cbe01953894baebf0af6d7ab3295b743alt1"
|
|
|
+#define SQLITE_SOURCE_ID "2020-01-23 00:08:25 8a6fe3066cf0599fcf2960e8fb3ae39e4e7a61ec81e8ec71d0b5910aee2calt1"
|
|
|
|
|
|
/*
|
|
|
** CAPI3REF: Run-Time Library Version Numbers
|
|
|
@@ -536,6 +536,7 @@ SQLITE_API int sqlite3_exec(
|
|
|
#define SQLITE_CONSTRAINT_UNIQUE (SQLITE_CONSTRAINT | (8<<8))
|
|
|
#define SQLITE_CONSTRAINT_VTAB (SQLITE_CONSTRAINT | (9<<8))
|
|
|
#define SQLITE_CONSTRAINT_ROWID (SQLITE_CONSTRAINT |(10<<8))
|
|
|
+#define SQLITE_CONSTRAINT_PINNED (SQLITE_CONSTRAINT |(11<<8))
|
|
|
#define SQLITE_NOTICE_RECOVER_WAL (SQLITE_NOTICE | (1<<8))
|
|
|
#define SQLITE_NOTICE_RECOVER_ROLLBACK (SQLITE_NOTICE | (2<<8))
|
|
|
#define SQLITE_WARNING_AUTOINDEX (SQLITE_WARNING | (1<<8))
|
|
|
@@ -1111,6 +1112,12 @@ struct sqlite3_io_methods {
|
|
|
** called. This file control is the only mechanism to detect changes that
|
|
|
** happen either internally or externally and that are associated with
|
|
|
** a particular attached database.
|
|
|
+**
|
|
|
+** <li>[[SQLITE_FCNTL_CKPT_DONE]]
|
|
|
+** The [SQLITE_FCNTL_CKPT_DONE] opcode is invoked from within a checkpoint
|
|
|
+** in wal mode after the client has finished copying pages from the wal
|
|
|
+** file to the database file, but before the *-shm file is updated to
|
|
|
+** record the fact that the pages have been checkpointed.
|
|
|
** </ul>
|
|
|
*/
|
|
|
#define SQLITE_FCNTL_LOCKSTATE 1
|
|
|
@@ -1148,6 +1155,7 @@ struct sqlite3_io_methods {
|
|
|
#define SQLITE_FCNTL_LOCK_TIMEOUT 34
|
|
|
#define SQLITE_FCNTL_DATA_VERSION 35
|
|
|
#define SQLITE_FCNTL_SIZE_LIMIT 36
|
|
|
+#define SQLITE_FCNTL_CKPT_DONE 37
|
|
|
|
|
|
/* deprecated names */
|
|
|
#define SQLITE_GET_LOCKPROXYFILE SQLITE_FCNTL_GET_LOCKPROXYFILE
|
|
|
@@ -2265,6 +2273,27 @@ struct sqlite3_mem_methods {
|
|
|
** compile-time option.
|
|
|
** </dd>
|
|
|
**
|
|
|
+** [[SQLITE_DBCONFIG_TRUSTED_SCHEMA]]
|
|
|
+** <dt>SQLITE_DBCONFIG_TRUSTED_SCHEMA</td>
|
|
|
+** <dd>The SQLITE_DBCONFIG_TRUSTED_SCHEMA option tells SQLite to
|
|
|
+** assume that database schemas (the contents of the [sqlite_master] tables)
|
|
|
+** are untainted by malicious content.
|
|
|
+** When the SQLITE_DBCONFIG_TRUSTED_SCHEMA option is disabled, SQLite
|
|
|
+** takes additional defensive steps to protect the application from harm
|
|
|
+** including:
|
|
|
+** <ul>
|
|
|
+** <li> Prohibit the use of SQL functions inside triggers, views,
|
|
|
+** CHECK constraints, DEFAULT clauses, expression indexes,
|
|
|
+** partial indexes, or generated columns
|
|
|
+** unless those functions are tagged with [SQLITE_INNOCUOUS].
|
|
|
+** <li> Prohibit the use of virtual tables inside of triggers or views
|
|
|
+** unless those virtual tables are tagged with [SQLITE_VTAB_INNOCUOUS].
|
|
|
+** </ul>
|
|
|
+** This setting defaults to "on" for legacy compatibility, however
|
|
|
+** all applications are advised to turn it off if possible. This setting
|
|
|
+** can also be controlled using the [PRAGMA trusted_schema] statement.
|
|
|
+** </dd>
|
|
|
+**
|
|
|
** [[SQLITE_DBCONFIG_LEGACY_FILE_FORMAT]]
|
|
|
** <dt>SQLITE_DBCONFIG_LEGACY_FILE_FORMAT</td>
|
|
|
** <dd>The SQLITE_DBCONFIG_LEGACY_FILE_FORMAT option activates or deactivates
|
|
|
@@ -2305,7 +2334,8 @@ struct sqlite3_mem_methods {
|
|
|
#define SQLITE_DBCONFIG_DQS_DDL 1014 /* int int* */
|
|
|
#define SQLITE_DBCONFIG_ENABLE_VIEW 1015 /* int int* */
|
|
|
#define SQLITE_DBCONFIG_LEGACY_FILE_FORMAT 1016 /* int int* */
|
|
|
-#define SQLITE_DBCONFIG_MAX 1016 /* Largest DBCONFIG */
|
|
|
+#define SQLITE_DBCONFIG_TRUSTED_SCHEMA 1017 /* int int* */
|
|
|
+#define SQLITE_DBCONFIG_MAX 1017 /* Largest DBCONFIG */
|
|
|
|
|
|
/*
|
|
|
** CAPI3REF: Enable Or Disable Extended Result Codes
|
|
|
@@ -2789,7 +2819,7 @@ SQLITE_API int sqlite3_ivsnprintf(char*, int, const char*, va_list);
|
|
|
**
|
|
|
** The SQLite core uses these three routines for all of its own
|
|
|
** internal memory allocation needs. "Core" in the previous sentence
|
|
|
-** does not include operating-system specific VFS implementation. The
|
|
|
+** does not include operating-system specific [VFS] implementation. The
|
|
|
** Windows VFS uses native malloc() and free() for some operations.
|
|
|
**
|
|
|
** ^The sqlite3_malloc() routine returns a pointer to a block
|
|
|
@@ -3274,10 +3304,8 @@ SQLITE_API void sqlite3_progress_handler(sqlite3*, int, int(*)(void*), void*);
|
|
|
** The sqlite3_open_v2() interface works like sqlite3_open()
|
|
|
** except that it accepts two additional parameters for additional control
|
|
|
** over the new database connection. ^(The flags parameter to
|
|
|
-** sqlite3_open_v2() can take one of
|
|
|
-** the following three values, optionally combined with the
|
|
|
-** [SQLITE_OPEN_NOMUTEX], [SQLITE_OPEN_FULLMUTEX], [SQLITE_OPEN_SHAREDCACHE],
|
|
|
-** [SQLITE_OPEN_PRIVATECACHE], and/or [SQLITE_OPEN_URI] flags:)^
|
|
|
+** sqlite3_open_v2() must include, at a minimum, one of the following
|
|
|
+** three flag combinations:)^
|
|
|
**
|
|
|
** <dl>
|
|
|
** ^(<dt>[SQLITE_OPEN_READONLY]</dt>
|
|
|
@@ -3295,23 +3323,51 @@ SQLITE_API void sqlite3_progress_handler(sqlite3*, int, int(*)(void*), void*);
|
|
|
** sqlite3_open() and sqlite3_open16().</dd>)^
|
|
|
** </dl>
|
|
|
**
|
|
|
+** In addition to the required flags, the following optional flags are
|
|
|
+** also supported:
|
|
|
+**
|
|
|
+** <dl>
|
|
|
+** ^(<dt>[SQLITE_OPEN_URI]</dt>
|
|
|
+** <dd>The filename can be interpreted as a URI if this flag is set.</dd>)^
|
|
|
+**
|
|
|
+** ^(<dt>[SQLITE_OPEN_MEMORY]</dt>
|
|
|
+** <dd>The database will be opened as an in-memory database. The database
|
|
|
+** is named by the "filename" argument for the purposes of cache-sharing,
|
|
|
+** if shared cache mode is enabled, but the "filename" is otherwise ignored.
|
|
|
+** </dd>)^
|
|
|
+**
|
|
|
+** ^(<dt>[SQLITE_OPEN_NOMUTEX]</dt>
|
|
|
+** <dd>The new database connection will use the "multi-thread"
|
|
|
+** [threading mode].)^ This means that separate threads are allowed
|
|
|
+** to use SQLite at the same time, as long as each thread is using
|
|
|
+** a different [database connection].
|
|
|
+**
|
|
|
+** ^(<dt>[SQLITE_OPEN_FULLMUTEX]</dt>
|
|
|
+** <dd>The new database connection will use the "serialized"
|
|
|
+** [threading mode].)^ This means the multiple threads can safely
|
|
|
+** attempt to use the same database connection at the same time.
|
|
|
+** (Mutexes will block any actual concurrency, but in this mode
|
|
|
+** there is no harm in trying.)
|
|
|
+**
|
|
|
+** ^(<dt>[SQLITE_OPEN_SHAREDCACHE]</dt>
|
|
|
+** <dd>The database is opened [shared cache] enabled, overriding
|
|
|
+** the default shared cache setting provided by
|
|
|
+** [sqlite3_enable_shared_cache()].)^
|
|
|
+**
|
|
|
+** ^(<dt>[SQLITE_OPEN_PRIVATECACHE]</dt>
|
|
|
+** <dd>The database is opened [shared cache] disabled, overriding
|
|
|
+** the default shared cache setting provided by
|
|
|
+** [sqlite3_enable_shared_cache()].)^
|
|
|
+**
|
|
|
+** [[OPEN_NOFOLLOW]] ^(<dt>[SQLITE_OPEN_NOFOLLOW]</dt>
|
|
|
+** <dd>The database filename is not allowed to be a symbolic link</dd>
|
|
|
+** </dl>)^
|
|
|
+**
|
|
|
** If the 3rd parameter to sqlite3_open_v2() is not one of the
|
|
|
-** combinations shown above optionally combined with other
|
|
|
+** required combinations shown above optionally combined with other
|
|
|
** [SQLITE_OPEN_READONLY | SQLITE_OPEN_* bits]
|
|
|
** then the behavior is undefined.
|
|
|
**
|
|
|
-** ^If the [SQLITE_OPEN_NOMUTEX] flag is set, then the database connection
|
|
|
-** opens in the multi-thread [threading mode] as long as the single-thread
|
|
|
-** mode has not been set at compile-time or start-time. ^If the
|
|
|
-** [SQLITE_OPEN_FULLMUTEX] flag is set then the database connection opens
|
|
|
-** in the serialized [threading mode] unless single-thread was
|
|
|
-** previously selected at compile-time or start-time.
|
|
|
-** ^The [SQLITE_OPEN_SHAREDCACHE] flag causes the database connection to be
|
|
|
-** eligible to use [shared cache mode], regardless of whether or not shared
|
|
|
-** cache is enabled using [sqlite3_enable_shared_cache()]. ^The
|
|
|
-** [SQLITE_OPEN_PRIVATECACHE] flag causes the database connection to not
|
|
|
-** participate in [shared cache mode] even if it is enabled.
|
|
|
-**
|
|
|
** ^The fourth parameter to sqlite3_open_v2() is the name of the
|
|
|
** [sqlite3_vfs] object that defines the operating system interface that
|
|
|
** the new database connection should use. ^If the fourth parameter is
|
|
|
@@ -3493,14 +3549,13 @@ SQLITE_API void *sqlite3_get_db_user_data(sqlite3 *db);
|
|
|
/*
|
|
|
** CAPI3REF: Obtain Values For URI Parameters
|
|
|
**
|
|
|
-** These are utility routines, useful to VFS implementations, that check
|
|
|
-** to see if a database file was a URI that contained a specific query
|
|
|
+** These are utility routines, useful to [VFS|custom VFS implementations],
|
|
|
+** that check if a database file was a URI that contained a specific query
|
|
|
** parameter, and if so obtains the value of that query parameter.
|
|
|
**
|
|
|
** If F is the database filename pointer passed into the xOpen() method of
|
|
|
-** a VFS implementation when the flags parameter to xOpen() has one or
|
|
|
-** more of the [SQLITE_OPEN_URI] or [SQLITE_OPEN_MAIN_DB] bits set and
|
|
|
-** P is the name of the query parameter, then
|
|
|
+** a VFS implementation or it is the return value of [sqlite3_db_filename()]
|
|
|
+** and if P is the name of the query parameter, then
|
|
|
** sqlite3_uri_parameter(F,P) returns the value of the P
|
|
|
** parameter if it exists or a NULL pointer if P does not appear as a
|
|
|
** query parameter on F. If P is a query parameter of F and it
|
|
|
@@ -3523,17 +3578,65 @@ SQLITE_API void *sqlite3_get_db_user_data(sqlite3 *db);
|
|
|
** exist. If the value of P is something other than an integer, then
|
|
|
** zero is returned.
|
|
|
**
|
|
|
+** The sqlite3_uri_key(F,N) returns a pointer to the name (not
|
|
|
+** the value) of the N-th query parameter for filename F, or a NULL
|
|
|
+** pointer if N is less than zero or greater than the number of query
|
|
|
+** parameters minus 1. The N value is zero-based so N should be 0 to obtain
|
|
|
+** the name of the first query parameter, 1 for the second parameter, and
|
|
|
+** so forth.
|
|
|
+**
|
|
|
+>>>>>>> END MERGE CONFLICT >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
|
|
|
** If F is a NULL pointer, then sqlite3_uri_parameter(F,P) returns NULL and
|
|
|
** sqlite3_uri_boolean(F,P,B) returns B. If F is not a NULL pointer and
|
|
|
-** is not a database file pathname pointer that SQLite passed into the xOpen
|
|
|
-** VFS method, then the behavior of this routine is undefined and probably
|
|
|
-** undesirable.
|
|
|
+** is not a database file pathname pointer that the SQLite core passed
|
|
|
+** into the xOpen VFS method, then the behavior of this routine is undefined
|
|
|
+** and probably undesirable.
|
|
|
+**
|
|
|
+** Beginning with SQLite [version 3.31.0] ([dateof:3.31.0]) the input F
|
|
|
+** parameter can also be the name of a rollback journal file or WAL file
|
|
|
+** in addition to the main database file. Prior to version 3.31.0, these
|
|
|
+** routines would only work if F was the name of the main database file.
|
|
|
+** When the F parameter is the name of the rollback journal or WAL file,
|
|
|
+** it has access to all the same query parameters as were found on the
|
|
|
+** main database file.
|
|
|
**
|
|
|
** See the [URI filename] documentation for additional information.
|
|
|
*/
|
|
|
SQLITE_API const char *sqlite3_uri_parameter(const char *zFilename, const char *zParam);
|
|
|
SQLITE_API int sqlite3_uri_boolean(const char *zFile, const char *zParam, int bDefault);
|
|
|
SQLITE_API sqlite3_int64 sqlite3_uri_int64(const char*, const char*, sqlite3_int64);
|
|
|
+SQLITE_API const char *sqlite3_uri_key(const char *zFilename, int N);
|
|
|
+
|
|
|
+/*
|
|
|
+** CAPI3REF: Translate filenames
|
|
|
+**
|
|
|
+** These routines are available to [VFS|custom VFS implementations] for
|
|
|
+** translating filenames between the main database file, the journal file,
|
|
|
+** and the WAL file.
|
|
|
+**
|
|
|
+** If F is the name of an sqlite database file, journal file, or WAL file
|
|
|
+** passed by the SQLite core into the VFS, then sqlite3_filename_database(F)
|
|
|
+** returns the name of the corresponding database file.
|
|
|
+**
|
|
|
+** If F is the name of an sqlite database file, journal file, or WAL file
|
|
|
+** passed by the SQLite core into the VFS, or if F is a database filename
|
|
|
+** obtained from [sqlite3_db_filename()], then sqlite3_filename_journal(F)
|
|
|
+** returns the name of the corresponding rollback journal file.
|
|
|
+**
|
|
|
+** If F is the name of an sqlite database file, journal file, or WAL file
|
|
|
+** that was passed by the SQLite core into the VFS, or if F is a database
|
|
|
+** filename obtained from [sqlite3_db_filename()], then
|
|
|
+** sqlite3_filename_wal(F) returns the name of the corresponding
|
|
|
+** WAL file.
|
|
|
+**
|
|
|
+** In all of the above, if F is not the name of a database, journal or WAL
|
|
|
+** filename passed into the VFS from the SQLite core and F is not the
|
|
|
+** return value from [sqlite3_db_filename()], then the result is
|
|
|
+** undefined and is likely a memory access violation.
|
|
|
+*/
|
|
|
+SQLITE_API const char *sqlite3_filename_database(const char*);
|
|
|
+SQLITE_API const char *sqlite3_filename_journal(const char*);
|
|
|
+SQLITE_API const char *sqlite3_filename_wal(const char*);
|
|
|
|
|
|
|
|
|
/*
|
|
|
@@ -3852,26 +3955,12 @@ SQLITE_API int sqlite3_limit(sqlite3*, int id, int newVal);
|
|
|
** </li>
|
|
|
**
|
|
|
** <li>
|
|
|
-<<<<<<< BEGIN MERGE CONFLICT: local copy shown first <<<<<<<<<<<<<<<
|
|
|
-** ^If the specific value bound to [parameter | host parameter] in the
|
|
|
-======= COMMON ANCESTOR content follows ============================
|
|
|
-** ^If the specific value bound to [parameter | host parameter] in the
|
|
|
-======= MERGED IN content follows ==================================
|
|
|
-** ^If the specific value bound to a [parameter | host parameter] in the
|
|
|
->>>>>>> END MERGE CONFLICT >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
|
|
|
+** ^If the specific value bound to a [parameter | host parameter] in the
|
|
|
** WHERE clause might influence the choice of query plan for a statement,
|
|
|
** then the statement will be automatically recompiled, as if there had been
|
|
|
** a schema change, on the first [sqlite3_step()] call following any change
|
|
|
-<<<<<<< BEGIN MERGE CONFLICT: local copy shown first <<<<<<<<<<<<<<<
|
|
|
** to the [sqlite3_bind_text | bindings] of that [parameter].
|
|
|
-** ^The specific value of WHERE-clause [parameter] might influence the
|
|
|
-======= COMMON ANCESTOR content follows ============================
|
|
|
-** to the [sqlite3_bind_text | bindings] of that [parameter].
|
|
|
-** ^The specific value of WHERE-clause [parameter] might influence the
|
|
|
-======= MERGED IN content follows ==================================
|
|
|
-** to the [sqlite3_bind_text | bindings] of that [parameter].
|
|
|
-** ^The specific value of a WHERE-clause [parameter] might influence the
|
|
|
->>>>>>> END MERGE CONFLICT >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
|
|
|
+** ^The specific value of a WHERE-clause [parameter] might influence the
|
|
|
** choice of query plan if the parameter is the left-hand side of a [LIKE]
|
|
|
** or [GLOB] operator or if the parameter is compared to an indexed column
|
|
|
** and the [SQLITE_ENABLE_STAT4] compile-time option is enabled.
|
|
|
@@ -4850,8 +4939,6 @@ SQLITE_API int sqlite3_reset(sqlite3_stmt *pStmt);
|
|
|
/*
|
|
|
** CAPI3REF: Create Or Redefine SQL Functions
|
|
|
** KEYWORDS: {function creation routines}
|
|
|
-** KEYWORDS: {application-defined SQL function}
|
|
|
-** KEYWORDS: {application-defined SQL functions}
|
|
|
** METHOD: sqlite3
|
|
|
**
|
|
|
** ^These functions (collectively known as "function creation routines")
|
|
|
@@ -4907,9 +4994,20 @@ SQLITE_API int sqlite3_reset(sqlite3_stmt *pStmt);
|
|
|
**
|
|
|
** ^The fourth parameter may also optionally include the [SQLITE_DIRECTONLY]
|
|
|
** flag, which if present prevents the function from being invoked from
|
|
|
-** within VIEWs or TRIGGERs. For security reasons, the [SQLITE_DIRECTONLY]
|
|
|
-** flag is recommended for any application-defined SQL function that has
|
|
|
-** side-effects.
|
|
|
+** within VIEWs, TRIGGERs, CHECK constraints, generated column expressions,
|
|
|
+** index expressions, or the WHERE clause of partial indexes.
|
|
|
+**
|
|
|
+** <span style="background-color:#ffff90;">
|
|
|
+** For best security, the [SQLITE_DIRECTONLY] flag is recommended for
|
|
|
+** all application-defined SQL functions that do not need to be
|
|
|
+** used inside of triggers, view, CHECK constraints, or other elements of
|
|
|
+** the database schema. This flags is especially recommended for SQL
|
|
|
+** functions that have side effects or reveal internal application state.
|
|
|
+** Without this flag, an attacker might be able to modify the schema of
|
|
|
+** a database file to include invocations of the function with parameters
|
|
|
+** chosen by the attacker, which the application will then execute when
|
|
|
+** the database file is opened and read.
|
|
|
+** </span>
|
|
|
**
|
|
|
** ^(The fifth parameter is an arbitrary pointer. The implementation of the
|
|
|
** function can gain access to this pointer using [sqlite3_user_data()].)^
|
|
|
@@ -5028,21 +5126,53 @@ SQLITE_API int sqlite3_create_window_function(
|
|
|
** to [sqlite3_create_function()], [sqlite3_create_function16()], or
|
|
|
** [sqlite3_create_function_v2()].
|
|
|
**
|
|
|
+** <dl>
|
|
|
+** [[SQLITE_DETERMINISTIC]] <dt>SQLITE_DETERMINISTIC</dt><dd>
|
|
|
** The SQLITE_DETERMINISTIC flag means that the new function always gives
|
|
|
-** the same output when the input parameters are the same. The abs() function
|
|
|
-** is deterministic, for example, but randomblob() is not. Functions must
|
|
|
+** the same output when the input parameters are the same.
|
|
|
+** The [abs|abs() function] is deterministic, for example, but
|
|
|
+** [randomblob|randomblob()] is not. Functions must
|
|
|
** be deterministic in order to be used in certain contexts such as
|
|
|
-** [CHECK constraints] or [generated columns]. SQLite might also optimize
|
|
|
-** deterministic functions by factoring them out of inner loops.
|
|
|
+** with the WHERE clause of [partial indexes] or in [generated columns].
|
|
|
+** SQLite might also optimize deterministic functions by factoring them
|
|
|
+** out of inner loops.
|
|
|
+** </dd>
|
|
|
**
|
|
|
+** [[SQLITE_DIRECTONLY]] <dt>SQLITE_DIRECTONLY</dt><dd>
|
|
|
** The SQLITE_DIRECTONLY flag means that the function may only be invoked
|
|
|
-** from top-level SQL, and cannot be used in VIEWs or TRIGGERs. This is
|
|
|
-** a security feature which is recommended for all
|
|
|
-** [application-defined SQL functions] that have side-effects. This flag
|
|
|
-** prevents an attacker from adding triggers and views to a schema then
|
|
|
-** tricking a high-privilege application into causing unintended side-effects
|
|
|
-** while performing ordinary queries.
|
|
|
+** from top-level SQL, and cannot be used in VIEWs or TRIGGERs nor in
|
|
|
+** schema structures such as [CHECK constraints], [DEFAULT clauses],
|
|
|
+** [expression indexes], [partial indexes], or [generated columns].
|
|
|
+** The SQLITE_DIRECTONLY flags is a security feature which is recommended
|
|
|
+** for all [application-defined SQL functions], and especially for functions
|
|
|
+** that have side-effects or that could potentially leak sensitive
|
|
|
+** information.
|
|
|
+** </dd>
|
|
|
+**
|
|
|
+** [[SQLITE_INNOCUOUS]] <dt>SQLITE_INNOCUOUS</dt><dd>
|
|
|
+** The SQLITE_INNOCUOUS flag means that the function is unlikely
|
|
|
+** to cause problems even if misused. An innocuous function should have
|
|
|
+** no side effects and should not depend on any values other than its
|
|
|
+** input parameters. The [abs|abs() function] is an example of an
|
|
|
+** innocuous function.
|
|
|
+** The [load_extension() SQL function] is not innocuous because of its
|
|
|
+** side effects.
|
|
|
+** <p> SQLITE_INNOCUOUS is similar to SQLITE_DETERMINISTIC, but is not
|
|
|
+** exactly the same. The [random|random() function] is an example of a
|
|
|
+** function that is innocuous but not deterministic.
|
|
|
+** <p>Some heightened security settings
|
|
|
+** ([SQLITE_DBCONFIG_TRUSTED_SCHEMA] and [PRAGMA trusted_schema=OFF])
|
|
|
+** disable the use of SQL functions inside views and triggers and in
|
|
|
+** schema structures such as [CHECK constraints], [DEFAULT clauses],
|
|
|
+** [expression indexes], [partial indexes], and [generated columns] unless
|
|
|
+** the function is tagged with SQLITE_INNOCUOUS. Most built-in functions
|
|
|
+** are innocuous. Developers are advised to avoid using the
|
|
|
+** SQLITE_INNOCUOUS flag for application-defined functions unless the
|
|
|
+** function has been carefully audited and found to be free of potentially
|
|
|
+** security-adverse side-effects and information-leaks.
|
|
|
+** </dd>
|
|
|
**
|
|
|
+** [[SQLITE_SUBTYPE]] <dt>SQLITE_SUBTYPE</dt><dd>
|
|
|
** The SQLITE_SUBTYPE flag indicates to SQLite that a function may call
|
|
|
** [sqlite3_value_subtype()] to inspect the sub-types of its arguments.
|
|
|
** Specifying this flag makes no difference for scalar or aggregate user
|
|
|
@@ -5050,10 +5180,13 @@ SQLITE_API int sqlite3_create_window_function(
|
|
|
** function, then any sub-types belonging to arguments passed to the window
|
|
|
** function may be discarded before the window function is called (i.e.
|
|
|
** sqlite3_value_subtype() will always return 0).
|
|
|
+** </dd>
|
|
|
+** </dl>
|
|
|
*/
|
|
|
#define SQLITE_DETERMINISTIC 0x000000800
|
|
|
#define SQLITE_DIRECTONLY 0x000080000
|
|
|
#define SQLITE_SUBTYPE 0x000100000
|
|
|
+#define SQLITE_INNOCUOUS 0x000200000
|
|
|
|
|
|
/*
|
|
|
** CAPI3REF: Deprecated Functions
|
|
|
@@ -5586,7 +5719,7 @@ SQLITE_API void sqlite3_result_subtype(sqlite3_context*,unsigned int);
|
|
|
** <li> [SQLITE_UTF16_ALIGNED].
|
|
|
** </ul>)^
|
|
|
** ^The eTextRep argument determines the encoding of strings passed
|
|
|
-** to the collating function callback, xCallback.
|
|
|
+** to the collating function callback, xCompare.
|
|
|
** ^The [SQLITE_UTF16] and [SQLITE_UTF16_ALIGNED] values for eTextRep
|
|
|
** force strings to be UTF16 with native byte order.
|
|
|
** ^The [SQLITE_UTF16_ALIGNED] value for eTextRep forces strings to begin
|
|
|
@@ -5595,18 +5728,19 @@ SQLITE_API void sqlite3_result_subtype(sqlite3_context*,unsigned int);
|
|
|
** ^The fourth argument, pArg, is an application data pointer that is passed
|
|
|
** through as the first argument to the collating function callback.
|
|
|
**
|
|
|
-** ^The fifth argument, xCallback, is a pointer to the collating function.
|
|
|
+** ^The fifth argument, xCompare, is a pointer to the collating function.
|
|
|
** ^Multiple collating functions can be registered using the same name but
|
|
|
** with different eTextRep parameters and SQLite will use whichever
|
|
|
** function requires the least amount of data transformation.
|
|
|
-** ^If the xCallback argument is NULL then the collating function is
|
|
|
+** ^If the xCompare argument is NULL then the collating function is
|
|
|
** deleted. ^When all collating functions having the same name are deleted,
|
|
|
** that collation is no longer usable.
|
|
|
**
|
|
|
** ^The collating function callback is invoked with a copy of the pArg
|
|
|
** application data pointer and with two strings in the encoding specified
|
|
|
-** by the eTextRep argument. The collating function must return an
|
|
|
-** integer that is negative, zero, or positive
|
|
|
+** by the eTextRep argument. The two integer parameters to the collating
|
|
|
+** function callback are the length of the two strings, in bytes. The collating
|
|
|
+** function must return an integer that is negative, zero, or positive
|
|
|
** if the first string is less than, equal to, or greater than the second,
|
|
|
** respectively. A collating function must always return the same answer
|
|
|
** given the same inputs. If two or more collating functions are registered
|
|
|
@@ -5964,6 +6098,17 @@ SQLITE_API sqlite3 *sqlite3_db_handle(sqlite3_stmt*);
|
|
|
** xFullPathname method of the [VFS]. ^In other words, the filename
|
|
|
** will be an absolute pathname, even if the filename used
|
|
|
** to open the database originally was a URI or relative pathname.
|
|
|
+**
|
|
|
+** If the filename pointer returned by this routine is not NULL, then it
|
|
|
+** can be used as the filename input parameter to these routines:
|
|
|
+** <ul>
|
|
|
+** <li> [sqlite3_uri_parameter()]
|
|
|
+** <li> [sqlite3_uri_boolean()]
|
|
|
+** <li> [sqlite3_uri_int64()]
|
|
|
+** <li> [sqlite3_filename_database()]
|
|
|
+** <li> [sqlite3_filename_journal()]
|
|
|
+** <li> [sqlite3_filename_wal()]
|
|
|
+** </ul>
|
|
|
*/
|
|
|
SQLITE_API const char *sqlite3_db_filename(sqlite3 *db, const char *zDbName);
|
|
|
|
|
|
@@ -6486,16 +6631,8 @@ typedef struct sqlite3_module sqlite3_module;
|
|
|
** CAPI3REF: Virtual Table Object
|
|
|
** KEYWORDS: sqlite3_module {virtual table module}
|
|
|
**
|
|
|
-<<<<<<< BEGIN MERGE CONFLICT: local copy shown first <<<<<<<<<<<<<<<
|
|
|
** This structure, sometimes called a "virtual table module",
|
|
|
-** defines the implementation of a [virtual tables].
|
|
|
-======= COMMON ANCESTOR content follows ============================
|
|
|
-** This structure, sometimes called a "virtual table module",
|
|
|
-** defines the implementation of a [virtual tables].
|
|
|
-======= MERGED IN content follows ==================================
|
|
|
-** This structure, sometimes called a "virtual table module",
|
|
|
-** defines the implementation of a [virtual table].
|
|
|
->>>>>>> END MERGE CONFLICT >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
|
|
|
+** defines the implementation of a [virtual table].
|
|
|
** This structure consists mostly of methods for the module.
|
|
|
**
|
|
|
** ^A virtual table module is created by filling in a persistent
|
|
|
@@ -7849,13 +7986,7 @@ SQLITE_API int sqlite3_db_status(sqlite3*, int op, int *pCur, int *pHiwtr, int r
|
|
|
** checked out.</dd>)^
|
|
|
**
|
|
|
** [[SQLITE_DBSTATUS_LOOKASIDE_HIT]] ^(<dt>SQLITE_DBSTATUS_LOOKASIDE_HIT</dt>
|
|
|
-<<<<<<< BEGIN MERGE CONFLICT: local copy shown first <<<<<<<<<<<<<<<
|
|
|
-** <dd>This parameter returns the number malloc attempts that were
|
|
|
-======= COMMON ANCESTOR content follows ============================
|
|
|
-** <dd>This parameter returns the number malloc attempts that were
|
|
|
-======= MERGED IN content follows ==================================
|
|
|
-** <dd>This parameter returns the number of malloc attempts that were
|
|
|
->>>>>>> END MERGE CONFLICT >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
|
|
|
+** <dd>This parameter returns the number of malloc attempts that were
|
|
|
** satisfied using lookaside memory. Only the high-water value is meaningful;
|
|
|
** the current value is always zero.)^
|
|
|
**
|
|
|
@@ -8026,13 +8157,7 @@ SQLITE_API int sqlite3_stmt_status(sqlite3_stmt*, int op,int resetFlg);
|
|
|
**
|
|
|
** [[SQLITE_STMTSTATUS_REPREPARE]] <dt>SQLITE_STMTSTATUS_REPREPARE</dt>
|
|
|
** <dd>^This is the number of times that the prepare statement has been
|
|
|
-<<<<<<< BEGIN MERGE CONFLICT: local copy shown first <<<<<<<<<<<<<<<
|
|
|
-** automatically regenerated due to schema changes or change to
|
|
|
-======= COMMON ANCESTOR content follows ============================
|
|
|
-** automatically regenerated due to schema changes or change to
|
|
|
-======= MERGED IN content follows ==================================
|
|
|
-** automatically regenerated due to schema changes or changes to
|
|
|
->>>>>>> END MERGE CONFLICT >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
|
|
|
+** automatically regenerated due to schema changes or changes to
|
|
|
** [bound parameters] that might affect the query plan.
|
|
|
**
|
|
|
** [[SQLITE_STMTSTATUS_RUN]] <dt>SQLITE_STMTSTATUS_RUN</dt>
|
|
|
@@ -8907,14 +9032,20 @@ SQLITE_API int sqlite3_wal_checkpoint_v2(
|
|
|
** If this interface is invoked outside the context of an xConnect or
|
|
|
** xCreate virtual table method then the behavior is undefined.
|
|
|
**
|
|
|
-** At present, there is only one option that may be configured using
|
|
|
-** this function. (See [SQLITE_VTAB_CONSTRAINT_SUPPORT].) Further options
|
|
|
-** may be added in the future.
|
|
|
+** In the call sqlite3_vtab_config(D,C,...) the D parameter is the
|
|
|
+** [database connection] in which the virtual table is being created and
|
|
|
+** which is passed in as the first argument to the [xConnect] or [xCreate]
|
|
|
+** method that is invoking sqlite3_vtab_config(). The C parameter is one
|
|
|
+** of the [virtual table configuration options]. The presence and meaning
|
|
|
+** of parameters after C depend on which [virtual table configuration option]
|
|
|
+** is used.
|
|
|
*/
|
|
|
SQLITE_API int sqlite3_vtab_config(sqlite3*, int op, ...);
|
|
|
|
|
|
/*
|
|
|
** CAPI3REF: Virtual Table Configuration Options
|
|
|
+** KEYWORDS: {virtual table configuration options}
|
|
|
+** KEYWORDS: {virtual table configuration option}
|
|
|
**
|
|
|
** These macros define the various options to the
|
|
|
** [sqlite3_vtab_config()] interface that [virtual table] implementations
|
|
|
@@ -8922,7 +9053,7 @@ SQLITE_API int sqlite3_vtab_config(sqlite3*, int op, ...);
|
|
|
**
|
|
|
** <dl>
|
|
|
** [[SQLITE_VTAB_CONSTRAINT_SUPPORT]]
|
|
|
-** <dt>SQLITE_VTAB_CONSTRAINT_SUPPORT
|
|
|
+** <dt>SQLITE_VTAB_CONSTRAINT_SUPPORT</dt>
|
|
|
** <dd>Calls of the form
|
|
|
** [sqlite3_vtab_config](db,SQLITE_VTAB_CONSTRAINT_SUPPORT,X) are supported,
|
|
|
** where X is an integer. If X is zero, then the [virtual table] whose
|
|
|
@@ -8951,9 +9082,31 @@ SQLITE_API int sqlite3_vtab_config(sqlite3*, int op, ...);
|
|
|
** return SQLITE_OK. Or, if this is not possible, it may return
|
|
|
** SQLITE_CONSTRAINT, in which case SQLite falls back to OR ABORT
|
|
|
** constraint handling.
|
|
|
+** </dd>
|
|
|
+**
|
|
|
+** [[SQLITE_VTAB_DIRECTONLY]]<dt>SQLITE_VTAB_DIRECTONLY</dt>
|
|
|
+** <dd>Calls of the form
|
|
|
+** [sqlite3_vtab_config](db,SQLITE_VTAB_DIRECTONLY) from within the
|
|
|
+** the [xConnect] or [xCreate] methods of a [virtual table] implmentation
|
|
|
+** prohibits that virtual table from being used from within triggers and
|
|
|
+** views.
|
|
|
+** </dd>
|
|
|
+**
|
|
|
+** [[SQLITE_VTAB_INNOCUOUS]]<dt>SQLITE_VTAB_INNOCUOUS</dt>
|
|
|
+** <dd>Calls of the form
|
|
|
+** [sqlite3_vtab_config](db,SQLITE_VTAB_INNOCUOUS) from within the
|
|
|
+** the [xConnect] or [xCreate] methods of a [virtual table] implmentation
|
|
|
+** identify that virtual table as being safe to use from within triggers
|
|
|
+** and views. Conceptually, the SQLITE_VTAB_INNOCUOUS tag means that the
|
|
|
+** virtual table can do no serious harm even if it is controlled by a
|
|
|
+** malicious hacker. Developers should avoid setting the SQLITE_VTAB_INNOCUOUS
|
|
|
+** flag unless absolutely necessary.
|
|
|
+** </dd>
|
|
|
** </dl>
|
|
|
*/
|
|
|
#define SQLITE_VTAB_CONSTRAINT_SUPPORT 1
|
|
|
+#define SQLITE_VTAB_INNOCUOUS 2
|
|
|
+#define SQLITE_VTAB_DIRECTONLY 3
|
|
|
|
|
|
/*
|
|
|
** CAPI3REF: Determine The Virtual Table Conflict Policy
|