update: sqlite 3.50.2.

This commit is contained in:
2025-06-29 17:20:50 -04:00
parent 052663efbe
commit 39e51f7790
4 changed files with 180 additions and 128 deletions

View File

@ -23,7 +23,7 @@ VERSION_NAME := This program kills fascists.
IPHONEOS_VERSION_MIN=14.0 IPHONEOS_VERSION_MIN=14.0
SQLITE_URL := https://www.sqlite.org/2025/sqlite-amalgamation-3500100.zip SQLITE_URL := https://www.sqlite.org/2025/sqlite-amalgamation-3500200.zip
BUNDLETOOL_URL := https://github.com/google/bundletool/releases/download/1.17.0/bundletool-all-1.17.0.jar BUNDLETOOL_URL := https://github.com/google/bundletool/releases/download/1.17.0/bundletool-all-1.17.0.jar
APPIMAGETOOL_URL := https://github.com/AppImage/AppImageKit/releases/download/continuous/appimagetool-x86_64.AppImage APPIMAGETOOL_URL := https://github.com/AppImage/AppImageKit/releases/download/continuous/appimagetool-x86_64.AppImage
APPIMAGETOOL_MD5 := e989fadfc4d685fd3d6aeeb9b525d74d out/appimagetool APPIMAGETOOL_MD5 := e989fadfc4d685fd3d6aeeb9b525d74d out/appimagetool

15
deps/sqlite/shell.c vendored
View File

@ -8027,13 +8027,14 @@ SQLITE_EXTENSION_INIT1
# include <dirent.h> # include <dirent.h>
# include <utime.h> # include <utime.h>
# include <sys/time.h> # include <sys/time.h>
# define STRUCT_STAT struct stat
#else #else
# include "windows.h" # include "windows.h"
# include <io.h> # include <io.h>
# include <direct.h> # include <direct.h>
/* # include "test_windirent.h" */ /* # include "test_windirent.h" */
# define dirent DIRENT # define dirent DIRENT
# define stat _stat # define STRUCT_STAT struct _stat
# define chmod(path,mode) fileio_chmod(path,mode) # define chmod(path,mode) fileio_chmod(path,mode)
# define mkdir(path,mode) fileio_mkdir(path) # define mkdir(path,mode) fileio_mkdir(path)
#endif #endif
@ -8224,7 +8225,7 @@ LPWSTR utf8_to_utf16(const char *z){
*/ */
static void statTimesToUtc( static void statTimesToUtc(
const char *zPath, const char *zPath,
struct stat *pStatBuf STRUCT_STAT *pStatBuf
){ ){
HANDLE hFindFile; HANDLE hFindFile;
WIN32_FIND_DATAW fd; WIN32_FIND_DATAW fd;
@ -8252,7 +8253,7 @@ static void statTimesToUtc(
*/ */
static int fileStat( static int fileStat(
const char *zPath, const char *zPath,
struct stat *pStatBuf STRUCT_STAT *pStatBuf
){ ){
#if defined(_WIN32) #if defined(_WIN32)
sqlite3_int64 sz = strlen(zPath); sqlite3_int64 sz = strlen(zPath);
@ -8276,7 +8277,7 @@ static int fileStat(
*/ */
static int fileLinkStat( static int fileLinkStat(
const char *zPath, const char *zPath,
struct stat *pStatBuf STRUCT_STAT *pStatBuf
){ ){
#if defined(_WIN32) #if defined(_WIN32)
return fileStat(zPath, pStatBuf); return fileStat(zPath, pStatBuf);
@ -8309,7 +8310,7 @@ static int makeDirectory(
int i = 1; int i = 1;
while( rc==SQLITE_OK ){ while( rc==SQLITE_OK ){
struct stat sStat; STRUCT_STAT sStat;
int rc2; int rc2;
for(; zCopy[i]!='/' && i<nCopy; i++); for(; zCopy[i]!='/' && i<nCopy; i++);
@ -8359,7 +8360,7 @@ static int writeFile(
** be an error though - if there is already a directory at the same ** be an error though - if there is already a directory at the same
** path and either the permissions already match or can be changed ** path and either the permissions already match or can be changed
** to do so using chmod(), it is not an error. */ ** to do so using chmod(), it is not an error. */
struct stat sStat; STRUCT_STAT sStat;
if( errno!=EEXIST if( errno!=EEXIST
|| 0!=fileStat(zFile, &sStat) || 0!=fileStat(zFile, &sStat)
|| !S_ISDIR(sStat.st_mode) || !S_ISDIR(sStat.st_mode)
@ -8561,7 +8562,7 @@ struct fsdir_cursor {
const char *zBase; const char *zBase;
int nBase; int nBase;
struct stat sStat; /* Current lstat() results */ STRUCT_STAT sStat; /* Current lstat() results */
char *zPath; /* Path to current entry */ char *zPath; /* Path to current entry */
sqlite3_int64 iRowid; /* Current rowid */ sqlite3_int64 iRowid; /* Current rowid */
}; };

199
deps/sqlite/sqlite3.c vendored
View File

@ -1,6 +1,6 @@
/****************************************************************************** /******************************************************************************
** This file is an amalgamation of many separate C source files from SQLite ** This file is an amalgamation of many separate C source files from SQLite
** version 3.50.1. By combining all the individual C code files into this ** version 3.50.2. By combining all the individual C code files into this
** single large file, the entire code can be compiled as a single translation ** single large file, the entire code can be compiled as a single translation
** unit. This allows many compilers to do optimizations that would not be ** unit. This allows many compilers to do optimizations that would not be
** possible if the files were compiled separately. Performance improvements ** possible if the files were compiled separately. Performance improvements
@ -18,7 +18,7 @@
** separate file. This file contains only code for the core SQLite library. ** separate file. This file contains only code for the core SQLite library.
** **
** The content in this amalgamation comes from Fossil check-in ** The content in this amalgamation comes from Fossil check-in
** b77dc5e0f596d2140d9ac682b2893ff65d3a with changes in files: ** 2af157d77fb1304a74176eaee7fbc7c7e932 with changes in files:
** **
** **
*/ */
@ -465,9 +465,9 @@ extern "C" {
** [sqlite3_libversion_number()], [sqlite3_sourceid()], ** [sqlite3_libversion_number()], [sqlite3_sourceid()],
** [sqlite_version()] and [sqlite_source_id()]. ** [sqlite_version()] and [sqlite_source_id()].
*/ */
#define SQLITE_VERSION "3.50.1" #define SQLITE_VERSION "3.50.2"
#define SQLITE_VERSION_NUMBER 3050001 #define SQLITE_VERSION_NUMBER 3050002
#define SQLITE_SOURCE_ID "2025-06-06 14:52:32 b77dc5e0f596d2140d9ac682b2893ff65d3a4140aa86067a3efebe29dc914c95" #define SQLITE_SOURCE_ID "2025-06-28 14:00:48 2af157d77fb1304a74176eaee7fbc7c7e932d946bf25325e9c26c91db19e3079"
/* /*
** CAPI3REF: Run-Time Library Version Numbers ** CAPI3REF: Run-Time Library Version Numbers
@ -4398,7 +4398,7 @@ SQLITE_API sqlite3_file *sqlite3_database_file_object(const char*);
** **
** The sqlite3_create_filename(D,J,W,N,P) allocates memory to hold a version of ** The sqlite3_create_filename(D,J,W,N,P) allocates memory to hold a version of
** database filename D with corresponding journal file J and WAL file W and ** database filename D with corresponding journal file J and WAL file W and
** with N URI parameters key/values pairs in the array P. The result from ** an array P of N URI Key/Value pairs. The result from
** sqlite3_create_filename(D,J,W,N,P) is a pointer to a database filename that ** sqlite3_create_filename(D,J,W,N,P) is a pointer to a database filename that
** is safe to pass to routines like: ** is safe to pass to routines like:
** <ul> ** <ul>
@ -5079,7 +5079,7 @@ typedef struct sqlite3_context sqlite3_context;
** METHOD: sqlite3_stmt ** METHOD: sqlite3_stmt
** **
** ^(In the SQL statement text input to [sqlite3_prepare_v2()] and its variants, ** ^(In the SQL statement text input to [sqlite3_prepare_v2()] and its variants,
** literals may be replaced by a [parameter] that matches one of following ** literals may be replaced by a [parameter] that matches one of the following
** templates: ** templates:
** **
** <ul> ** <ul>
@ -5124,7 +5124,7 @@ typedef struct sqlite3_context sqlite3_context;
** **
** [[byte-order determination rules]] ^The byte-order of ** [[byte-order determination rules]] ^The byte-order of
** UTF16 input text is determined by the byte-order mark (BOM, U+FEFF) ** UTF16 input text is determined by the byte-order mark (BOM, U+FEFF)
** found in first character, which is removed, or in the absence of a BOM ** found in the first character, which is removed, or in the absence of a BOM
** the byte order is the native byte order of the host ** the byte order is the native byte order of the host
** machine for sqlite3_bind_text16() or the byte order specified in ** machine for sqlite3_bind_text16() or the byte order specified in
** the 6th parameter for sqlite3_bind_text64().)^ ** the 6th parameter for sqlite3_bind_text64().)^
@ -5144,7 +5144,7 @@ typedef struct sqlite3_context sqlite3_context;
** or sqlite3_bind_text16() or sqlite3_bind_text64() then ** or sqlite3_bind_text16() or sqlite3_bind_text64() then
** that parameter must be the byte offset ** that parameter must be the byte offset
** where the NUL terminator would occur assuming the string were NUL ** where the NUL terminator would occur assuming the string were NUL
** terminated. If any NUL characters occurs at byte offsets less than ** terminated. If any NUL characters occur at byte offsets less than
** the value of the fourth parameter then the resulting string value will ** the value of the fourth parameter then the resulting string value will
** contain embedded NULs. The result of expressions involving strings ** contain embedded NULs. The result of expressions involving strings
** with embedded NULs is undefined. ** with embedded NULs is undefined.
@ -5356,7 +5356,7 @@ SQLITE_API const void *sqlite3_column_name16(sqlite3_stmt*, int N);
** METHOD: sqlite3_stmt ** METHOD: sqlite3_stmt
** **
** ^These routines provide a means to determine the database, table, and ** ^These routines provide a means to determine the database, table, and
** table column that is the origin of a particular result column in ** table column that is the origin of a particular result column in a
** [SELECT] statement. ** [SELECT] statement.
** ^The name of the database or table or column can be returned as ** ^The name of the database or table or column can be returned as
** either a UTF-8 or UTF-16 string. ^The _database_ routines return ** either a UTF-8 or UTF-16 string. ^The _database_ routines return
@ -5925,8 +5925,8 @@ SQLITE_API int sqlite3_reset(sqlite3_stmt *pStmt);
** **
** For best security, the [SQLITE_DIRECTONLY] flag is recommended for ** For best security, the [SQLITE_DIRECTONLY] flag is recommended for
** all application-defined SQL functions that do not need to be ** all application-defined SQL functions that do not need to be
** used inside of triggers, view, CHECK constraints, or other elements of ** used inside of triggers, views, CHECK constraints, or other elements of
** the database schema. This flags is especially recommended for SQL ** the database schema. This flag is especially recommended for SQL
** functions that have side effects or reveal internal application state. ** functions that have side effects or reveal internal application state.
** Without this flag, an attacker might be able to modify the schema of ** Without this flag, an attacker might be able to modify the schema of
** a database file to include invocations of the function with parameters ** a database file to include invocations of the function with parameters
@ -5957,7 +5957,7 @@ SQLITE_API int sqlite3_reset(sqlite3_stmt *pStmt);
** [user-defined window functions|available here]. ** [user-defined window functions|available here].
** **
** ^(If the final parameter to sqlite3_create_function_v2() or ** ^(If the final parameter to sqlite3_create_function_v2() or
** sqlite3_create_window_function() is not NULL, then it is destructor for ** sqlite3_create_window_function() is not NULL, then it is the destructor for
** the application data pointer. The destructor is invoked when the function ** the application data pointer. The destructor is invoked when the function
** is deleted, either by being overloaded or when the database connection ** is deleted, either by being overloaded or when the database connection
** closes.)^ ^The destructor is also invoked if the call to ** closes.)^ ^The destructor is also invoked if the call to
@ -6357,7 +6357,7 @@ SQLITE_API unsigned int sqlite3_value_subtype(sqlite3_value*);
** METHOD: sqlite3_value ** METHOD: sqlite3_value
** **
** ^The sqlite3_value_dup(V) interface makes a copy of the [sqlite3_value] ** ^The sqlite3_value_dup(V) interface makes a copy of the [sqlite3_value]
** object D and returns a pointer to that copy. ^The [sqlite3_value] returned ** object V and returns a pointer to that copy. ^The [sqlite3_value] returned
** is a [protected sqlite3_value] object even if the input is not. ** is a [protected sqlite3_value] object even if the input is not.
** ^The sqlite3_value_dup(V) interface returns NULL if V is NULL or if a ** ^The sqlite3_value_dup(V) interface returns NULL if V is NULL or if a
** memory allocation fails. ^If V is a [pointer value], then the result ** memory allocation fails. ^If V is a [pointer value], then the result
@ -6395,7 +6395,7 @@ SQLITE_API void sqlite3_value_free(sqlite3_value*);
** allocation error occurs. ** allocation error occurs.
** **
** ^(The amount of space allocated by sqlite3_aggregate_context(C,N) is ** ^(The amount of space allocated by sqlite3_aggregate_context(C,N) is
** determined by the N parameter on first successful call. Changing the ** determined by the N parameter on the first successful call. Changing the
** value of N in any subsequent call to sqlite3_aggregate_context() within ** value of N in any subsequent call to sqlite3_aggregate_context() within
** the same aggregate function instance will not resize the memory ** the same aggregate function instance will not resize the memory
** allocation.)^ Within the xFinal callback, it is customary to set ** allocation.)^ Within the xFinal callback, it is customary to set
@ -6557,7 +6557,7 @@ SQLITE_API void sqlite3_set_auxdata(sqlite3_context*, int N, void*, void (*)(voi
** **
** Security Warning: These interfaces should not be exposed in scripting ** Security Warning: These interfaces should not be exposed in scripting
** languages or in other circumstances where it might be possible for an ** languages or in other circumstances where it might be possible for an
** an attacker to invoke them. Any agent that can invoke these interfaces ** attacker to invoke them. Any agent that can invoke these interfaces
** can probably also take control of the process. ** can probably also take control of the process.
** **
** Database connection client data is only available for SQLite ** Database connection client data is only available for SQLite
@ -6671,7 +6671,7 @@ typedef void (*sqlite3_destructor_type)(void*);
** pointed to by the 2nd parameter are taken as the application-defined ** pointed to by the 2nd parameter are taken as the application-defined
** function result. If the 3rd parameter is non-negative, then it ** function result. If the 3rd parameter is non-negative, then it
** must be the byte offset into the string where the NUL terminator would ** must be the byte offset into the string where the NUL terminator would
** appear if the string where NUL terminated. If any NUL characters occur ** appear if the string were NUL terminated. If any NUL characters occur
** in the string at a byte offset that is less than the value of the 3rd ** in the string at a byte offset that is less than the value of the 3rd
** parameter, then the resulting string will contain embedded NULs and the ** parameter, then the resulting string will contain embedded NULs and the
** result of expressions operating on strings with embedded NULs is undefined. ** result of expressions operating on strings with embedded NULs is undefined.
@ -6729,7 +6729,7 @@ typedef void (*sqlite3_destructor_type)(void*);
** string and preferably a string literal. The sqlite3_result_pointer() ** string and preferably a string literal. The sqlite3_result_pointer()
** routine is part of the [pointer passing interface] added for SQLite 3.20.0. ** routine is part of the [pointer passing interface] added for SQLite 3.20.0.
** **
** If these routines are called from within the different thread ** If these routines are called from within a different thread
** than the one containing the application-defined function that received ** than the one containing the application-defined function that received
** the [sqlite3_context] pointer, the results are undefined. ** the [sqlite3_context] pointer, the results are undefined.
*/ */
@ -7135,7 +7135,7 @@ SQLITE_API sqlite3 *sqlite3_db_handle(sqlite3_stmt*);
** METHOD: sqlite3 ** METHOD: sqlite3
** **
** ^The sqlite3_db_name(D,N) interface returns a pointer to the schema name ** ^The sqlite3_db_name(D,N) interface returns a pointer to the schema name
** for the N-th database on database connection D, or a NULL pointer of N is ** for the N-th database on database connection D, or a NULL pointer if N is
** out of range. An N value of 0 means the main database file. An N of 1 is ** out of range. An N value of 0 means the main database file. An N of 1 is
** the "temp" schema. Larger values of N correspond to various ATTACH-ed ** the "temp" schema. Larger values of N correspond to various ATTACH-ed
** databases. ** databases.
@ -7230,7 +7230,7 @@ SQLITE_API int sqlite3_txn_state(sqlite3*,const char *zSchema);
** <dd>The SQLITE_TXN_READ state means that the database is currently ** <dd>The SQLITE_TXN_READ state means that the database is currently
** in a read transaction. Content has been read from the database file ** in a read transaction. Content has been read from the database file
** but nothing in the database file has changed. The transaction state ** but nothing in the database file has changed. The transaction state
** will advanced to SQLITE_TXN_WRITE if any changes occur and there are ** will be advanced to SQLITE_TXN_WRITE if any changes occur and there are
** no other conflicting concurrent write transactions. The transaction ** no other conflicting concurrent write transactions. The transaction
** state will revert to SQLITE_TXN_NONE following a [ROLLBACK] or ** state will revert to SQLITE_TXN_NONE following a [ROLLBACK] or
** [COMMIT].</dd> ** [COMMIT].</dd>
@ -7239,7 +7239,7 @@ SQLITE_API int sqlite3_txn_state(sqlite3*,const char *zSchema);
** <dd>The SQLITE_TXN_WRITE state means that the database is currently ** <dd>The SQLITE_TXN_WRITE state means that the database is currently
** in a write transaction. Content has been written to the database file ** in a write transaction. Content has been written to the database file
** but has not yet committed. The transaction state will change to ** but has not yet committed. The transaction state will change to
** to SQLITE_TXN_NONE at the next [ROLLBACK] or [COMMIT].</dd> ** SQLITE_TXN_NONE at the next [ROLLBACK] or [COMMIT].</dd>
*/ */
#define SQLITE_TXN_NONE 0 #define SQLITE_TXN_NONE 0
#define SQLITE_TXN_READ 1 #define SQLITE_TXN_READ 1
@ -7520,7 +7520,7 @@ SQLITE_API int sqlite3_db_release_memory(sqlite3*);
** CAPI3REF: Impose A Limit On Heap Size ** CAPI3REF: Impose A Limit On Heap Size
** **
** These interfaces impose limits on the amount of heap memory that will be ** These interfaces impose limits on the amount of heap memory that will be
** by all database connections within a single process. ** used by all database connections within a single process.
** **
** ^The sqlite3_soft_heap_limit64() interface sets and/or queries the ** ^The sqlite3_soft_heap_limit64() interface sets and/or queries the
** soft limit on the amount of heap memory that may be allocated by SQLite. ** soft limit on the amount of heap memory that may be allocated by SQLite.
@ -7578,7 +7578,7 @@ SQLITE_API int sqlite3_db_release_memory(sqlite3*);
** </ul>)^ ** </ul>)^
** **
** The circumstances under which SQLite will enforce the heap limits may ** The circumstances under which SQLite will enforce the heap limits may
** changes in future releases of SQLite. ** change in future releases of SQLite.
*/ */
SQLITE_API sqlite3_int64 sqlite3_soft_heap_limit64(sqlite3_int64 N); SQLITE_API sqlite3_int64 sqlite3_soft_heap_limit64(sqlite3_int64 N);
SQLITE_API sqlite3_int64 sqlite3_hard_heap_limit64(sqlite3_int64 N); SQLITE_API sqlite3_int64 sqlite3_hard_heap_limit64(sqlite3_int64 N);
@ -7693,8 +7693,8 @@ SQLITE_API int sqlite3_table_column_metadata(
** ^The entry point is zProc. ** ^The entry point is zProc.
** ^(zProc may be 0, in which case SQLite will try to come up with an ** ^(zProc may be 0, in which case SQLite will try to come up with an
** entry point name on its own. It first tries "sqlite3_extension_init". ** entry point name on its own. It first tries "sqlite3_extension_init".
** If that does not work, it constructs a name "sqlite3_X_init" where the ** If that does not work, it constructs a name "sqlite3_X_init" where
** X is consists of the lower-case equivalent of all ASCII alphabetic ** X consists of the lower-case equivalent of all ASCII alphabetic
** characters in the filename from the last "/" to the first following ** characters in the filename from the last "/" to the first following
** "." and omitting any initial "lib".)^ ** "." and omitting any initial "lib".)^
** ^The sqlite3_load_extension() interface returns ** ^The sqlite3_load_extension() interface returns
@ -7765,7 +7765,7 @@ SQLITE_API int sqlite3_enable_load_extension(sqlite3 *db, int onoff);
** ^(Even though the function prototype shows that xEntryPoint() takes ** ^(Even though the function prototype shows that xEntryPoint() takes
** no arguments and returns void, SQLite invokes xEntryPoint() with three ** no arguments and returns void, SQLite invokes xEntryPoint() with three
** arguments and expects an integer result as if the signature of the ** arguments and expects an integer result as if the signature of the
** entry point where as follows: ** entry point were as follows:
** **
** <blockquote><pre> ** <blockquote><pre>
** &nbsp; int xEntryPoint( ** &nbsp; int xEntryPoint(
@ -7929,7 +7929,7 @@ struct sqlite3_module {
** virtual table and might not be checked again by the byte code.)^ ^(The ** virtual table and might not be checked again by the byte code.)^ ^(The
** aConstraintUsage[].omit flag is an optimization hint. When the omit flag ** aConstraintUsage[].omit flag is an optimization hint. When the omit flag
** is left in its default setting of false, the constraint will always be ** is left in its default setting of false, the constraint will always be
** checked separately in byte code. If the omit flag is change to true, then ** checked separately in byte code. If the omit flag is changed to true, then
** the constraint may or may not be checked in byte code. In other words, ** the constraint may or may not be checked in byte code. In other words,
** when the omit flag is true there is no guarantee that the constraint will ** when the omit flag is true there is no guarantee that the constraint will
** not be checked again using byte code.)^ ** not be checked again using byte code.)^
@ -7955,7 +7955,7 @@ struct sqlite3_module {
** The xBestIndex method may optionally populate the idxFlags field with a ** The xBestIndex method may optionally populate the idxFlags field with a
** mask of SQLITE_INDEX_SCAN_* flags. One such flag is ** mask of SQLITE_INDEX_SCAN_* flags. One such flag is
** [SQLITE_INDEX_SCAN_HEX], which if set causes the [EXPLAIN QUERY PLAN] ** [SQLITE_INDEX_SCAN_HEX], which if set causes the [EXPLAIN QUERY PLAN]
** output to show the idxNum has hex instead of as decimal. Another flag is ** output to show the idxNum as hex instead of as decimal. Another flag is
** SQLITE_INDEX_SCAN_UNIQUE, which if set indicates that the query plan will ** SQLITE_INDEX_SCAN_UNIQUE, which if set indicates that the query plan will
** return at most one row. ** return at most one row.
** **
@ -8096,7 +8096,7 @@ struct sqlite3_index_info {
** the implementation of the [virtual table module]. ^The fourth ** the implementation of the [virtual table module]. ^The fourth
** parameter is an arbitrary client data pointer that is passed through ** parameter is an arbitrary client data pointer that is passed through
** into the [xCreate] and [xConnect] methods of the virtual table module ** into the [xCreate] and [xConnect] methods of the virtual table module
** when a new virtual table is be being created or reinitialized. ** when a new virtual table is being created or reinitialized.
** **
** ^The sqlite3_create_module_v2() interface has a fifth parameter which ** ^The sqlite3_create_module_v2() interface has a fifth parameter which
** is a pointer to a destructor for the pClientData. ^SQLite will ** is a pointer to a destructor for the pClientData. ^SQLite will
@ -8261,7 +8261,7 @@ typedef struct sqlite3_blob sqlite3_blob;
** in *ppBlob. Otherwise an [error code] is returned and, unless the error ** in *ppBlob. Otherwise an [error code] is returned and, unless the error
** code is SQLITE_MISUSE, *ppBlob is set to NULL.)^ ^This means that, provided ** code is SQLITE_MISUSE, *ppBlob is set to NULL.)^ ^This means that, provided
** the API is not misused, it is always safe to call [sqlite3_blob_close()] ** the API is not misused, it is always safe to call [sqlite3_blob_close()]
** on *ppBlob after this function it returns. ** on *ppBlob after this function returns.
** **
** This function fails with SQLITE_ERROR if any of the following are true: ** This function fails with SQLITE_ERROR if any of the following are true:
** <ul> ** <ul>
@ -8381,7 +8381,7 @@ SQLITE_API int sqlite3_blob_close(sqlite3_blob *);
** **
** ^Returns the size in bytes of the BLOB accessible via the ** ^Returns the size in bytes of the BLOB accessible via the
** successfully opened [BLOB handle] in its only argument. ^The ** successfully opened [BLOB handle] in its only argument. ^The
** incremental blob I/O routines can only read or overwriting existing ** incremental blob I/O routines can only read or overwrite existing
** blob content; they cannot change the size of a blob. ** blob content; they cannot change the size of a blob.
** **
** This routine only works on a [BLOB handle] which has been created ** This routine only works on a [BLOB handle] which has been created
@ -8531,7 +8531,7 @@ SQLITE_API int sqlite3_vfs_unregister(sqlite3_vfs*);
** ^The sqlite3_mutex_alloc() routine allocates a new ** ^The sqlite3_mutex_alloc() routine allocates a new
** mutex and returns a pointer to it. ^The sqlite3_mutex_alloc() ** mutex and returns a pointer to it. ^The sqlite3_mutex_alloc()
** routine returns NULL if it is unable to allocate the requested ** routine returns NULL if it is unable to allocate the requested
** mutex. The argument to sqlite3_mutex_alloc() must one of these ** mutex. The argument to sqlite3_mutex_alloc() must be one of these
** integer constants: ** integer constants:
** **
** <ul> ** <ul>
@ -8764,7 +8764,7 @@ SQLITE_API int sqlite3_mutex_notheld(sqlite3_mutex*);
** CAPI3REF: Retrieve the mutex for a database connection ** CAPI3REF: Retrieve the mutex for a database connection
** METHOD: sqlite3 ** METHOD: sqlite3
** **
** ^This interface returns a pointer the [sqlite3_mutex] object that ** ^This interface returns a pointer to the [sqlite3_mutex] object that
** serializes access to the [database connection] given in the argument ** serializes access to the [database connection] given in the argument
** when the [threading mode] is Serialized. ** when the [threading mode] is Serialized.
** ^If the [threading mode] is Single-thread or Multi-thread then this ** ^If the [threading mode] is Single-thread or Multi-thread then this
@ -8887,7 +8887,7 @@ SQLITE_API int sqlite3_test_control(int op, ...);
** CAPI3REF: SQL Keyword Checking ** CAPI3REF: SQL Keyword Checking
** **
** These routines provide access to the set of SQL language keywords ** These routines provide access to the set of SQL language keywords
** recognized by SQLite. Applications can uses these routines to determine ** recognized by SQLite. Applications can use these routines to determine
** whether or not a specific identifier needs to be escaped (for example, ** whether or not a specific identifier needs to be escaped (for example,
** by enclosing in double-quotes) so as not to confuse the parser. ** by enclosing in double-quotes) so as not to confuse the parser.
** **
@ -9055,7 +9055,7 @@ SQLITE_API void sqlite3_str_reset(sqlite3_str*);
** content of the dynamic string under construction in X. The value ** content of the dynamic string under construction in X. The value
** returned by [sqlite3_str_value(X)] is managed by the sqlite3_str object X ** returned by [sqlite3_str_value(X)] is managed by the sqlite3_str object X
** and might be freed or altered by any subsequent method on the same ** and might be freed or altered by any subsequent method on the same
** [sqlite3_str] object. Applications must not used the pointer returned ** [sqlite3_str] object. Applications must not use the pointer returned by
** [sqlite3_str_value(X)] after any subsequent method call on the same ** [sqlite3_str_value(X)] after any subsequent method call on the same
** object. ^Applications may change the content of the string returned ** object. ^Applications may change the content of the string returned
** by [sqlite3_str_value(X)] as long as they do not write into any bytes ** by [sqlite3_str_value(X)] as long as they do not write into any bytes
@ -9141,7 +9141,7 @@ SQLITE_API int sqlite3_status64(
** allocation which could not be satisfied by the [SQLITE_CONFIG_PAGECACHE] ** allocation which could not be satisfied by the [SQLITE_CONFIG_PAGECACHE]
** buffer and where forced to overflow to [sqlite3_malloc()]. The ** buffer and where forced to overflow to [sqlite3_malloc()]. The
** returned value includes allocations that overflowed because they ** returned value includes allocations that overflowed because they
** where too large (they were larger than the "sz" parameter to ** were too large (they were larger than the "sz" parameter to
** [SQLITE_CONFIG_PAGECACHE]) and allocations that overflowed because ** [SQLITE_CONFIG_PAGECACHE]) and allocations that overflowed because
** no space was left in the page cache.</dd>)^ ** no space was left in the page cache.</dd>)^
** **
@ -9225,28 +9225,29 @@ SQLITE_API int sqlite3_db_status(sqlite3*, int op, int *pCur, int *pHiwtr, int r
** [[SQLITE_DBSTATUS_LOOKASIDE_HIT]] ^(<dt>SQLITE_DBSTATUS_LOOKASIDE_HIT</dt> ** [[SQLITE_DBSTATUS_LOOKASIDE_HIT]] ^(<dt>SQLITE_DBSTATUS_LOOKASIDE_HIT</dt>
** <dd>This parameter returns the number of malloc attempts that were ** <dd>This parameter returns the number of malloc attempts that were
** satisfied using lookaside memory. Only the high-water value is meaningful; ** satisfied using lookaside memory. Only the high-water value is meaningful;
** the current value is always zero.)^ ** the current value is always zero.</dd>)^
** **
** [[SQLITE_DBSTATUS_LOOKASIDE_MISS_SIZE]] ** [[SQLITE_DBSTATUS_LOOKASIDE_MISS_SIZE]]
** ^(<dt>SQLITE_DBSTATUS_LOOKASIDE_MISS_SIZE</dt> ** ^(<dt>SQLITE_DBSTATUS_LOOKASIDE_MISS_SIZE</dt>
** <dd>This parameter returns the number malloc attempts that might have ** <dd>This parameter returns the number of malloc attempts that might have
** been satisfied using lookaside memory but failed due to the amount of ** been satisfied using lookaside memory but failed due to the amount of
** memory requested being larger than the lookaside slot size. ** memory requested being larger than the lookaside slot size.
** Only the high-water value is meaningful; ** Only the high-water value is meaningful;
** the current value is always zero.)^ ** the current value is always zero.</dd>)^
** **
** [[SQLITE_DBSTATUS_LOOKASIDE_MISS_FULL]] ** [[SQLITE_DBSTATUS_LOOKASIDE_MISS_FULL]]
** ^(<dt>SQLITE_DBSTATUS_LOOKASIDE_MISS_FULL</dt> ** ^(<dt>SQLITE_DBSTATUS_LOOKASIDE_MISS_FULL</dt>
** <dd>This parameter returns the number malloc attempts that might have ** <dd>This parameter returns the number of malloc attempts that might have
** been satisfied using lookaside memory but failed due to all lookaside ** been satisfied using lookaside memory but failed due to all lookaside
** memory already being in use. ** memory already being in use.
** Only the high-water value is meaningful; ** Only the high-water value is meaningful;
** the current value is always zero.)^ ** the current value is always zero.</dd>)^
** **
** [[SQLITE_DBSTATUS_CACHE_USED]] ^(<dt>SQLITE_DBSTATUS_CACHE_USED</dt> ** [[SQLITE_DBSTATUS_CACHE_USED]] ^(<dt>SQLITE_DBSTATUS_CACHE_USED</dt>
** <dd>This parameter returns the approximate number of bytes of heap ** <dd>This parameter returns the approximate number of bytes of heap
** memory used by all pager caches associated with the database connection.)^ ** memory used by all pager caches associated with the database connection.)^
** ^The highwater mark associated with SQLITE_DBSTATUS_CACHE_USED is always 0. ** ^The highwater mark associated with SQLITE_DBSTATUS_CACHE_USED is always 0.
** </dd>
** **
** [[SQLITE_DBSTATUS_CACHE_USED_SHARED]] ** [[SQLITE_DBSTATUS_CACHE_USED_SHARED]]
** ^(<dt>SQLITE_DBSTATUS_CACHE_USED_SHARED</dt> ** ^(<dt>SQLITE_DBSTATUS_CACHE_USED_SHARED</dt>
@ -9255,10 +9256,10 @@ SQLITE_API int sqlite3_db_status(sqlite3*, int op, int *pCur, int *pHiwtr, int r
** memory used by that pager cache is divided evenly between the attached ** memory used by that pager cache is divided evenly between the attached
** connections.)^ In other words, if none of the pager caches associated ** connections.)^ In other words, if none of the pager caches associated
** with the database connection are shared, this request returns the same ** with the database connection are shared, this request returns the same
** value as DBSTATUS_CACHE_USED. Or, if one or more or the pager caches are ** value as DBSTATUS_CACHE_USED. Or, if one or more of the pager caches are
** shared, the value returned by this call will be smaller than that returned ** shared, the value returned by this call will be smaller than that returned
** by DBSTATUS_CACHE_USED. ^The highwater mark associated with ** by DBSTATUS_CACHE_USED. ^The highwater mark associated with
** SQLITE_DBSTATUS_CACHE_USED_SHARED is always 0. ** SQLITE_DBSTATUS_CACHE_USED_SHARED is always 0.</dd>
** **
** [[SQLITE_DBSTATUS_SCHEMA_USED]] ^(<dt>SQLITE_DBSTATUS_SCHEMA_USED</dt> ** [[SQLITE_DBSTATUS_SCHEMA_USED]] ^(<dt>SQLITE_DBSTATUS_SCHEMA_USED</dt>
** <dd>This parameter returns the approximate number of bytes of heap ** <dd>This parameter returns the approximate number of bytes of heap
@ -9268,6 +9269,7 @@ SQLITE_API int sqlite3_db_status(sqlite3*, int op, int *pCur, int *pHiwtr, int r
** schema memory is shared with other database connections due to ** schema memory is shared with other database connections due to
** [shared cache mode] being enabled. ** [shared cache mode] being enabled.
** ^The highwater mark associated with SQLITE_DBSTATUS_SCHEMA_USED is always 0. ** ^The highwater mark associated with SQLITE_DBSTATUS_SCHEMA_USED is always 0.
** </dd>
** **
** [[SQLITE_DBSTATUS_STMT_USED]] ^(<dt>SQLITE_DBSTATUS_STMT_USED</dt> ** [[SQLITE_DBSTATUS_STMT_USED]] ^(<dt>SQLITE_DBSTATUS_STMT_USED</dt>
** <dd>This parameter returns the approximate number of bytes of heap ** <dd>This parameter returns the approximate number of bytes of heap
@ -9304,7 +9306,7 @@ SQLITE_API int sqlite3_db_status(sqlite3*, int op, int *pCur, int *pHiwtr, int r
** been written to disk in the middle of a transaction due to the page ** been written to disk in the middle of a transaction due to the page
** cache overflowing. Transactions are more efficient if they are written ** cache overflowing. Transactions are more efficient if they are written
** to disk all at once. When pages spill mid-transaction, that introduces ** to disk all at once. When pages spill mid-transaction, that introduces
** additional overhead. This parameter can be used help identify ** additional overhead. This parameter can be used to help identify
** inefficiencies that can be resolved by increasing the cache size. ** inefficiencies that can be resolved by increasing the cache size.
** </dd> ** </dd>
** **
@ -9784,7 +9786,7 @@ typedef struct sqlite3_backup sqlite3_backup;
** external process or via a database connection other than the one being ** external process or via a database connection other than the one being
** used by the backup operation, then the backup will be automatically ** used by the backup operation, then the backup will be automatically
** restarted by the next call to sqlite3_backup_step(). ^If the source ** restarted by the next call to sqlite3_backup_step(). ^If the source
** database is modified by the using the same database connection as is used ** database is modified by using the same database connection as is used
** by the backup operation, then the backup database is automatically ** by the backup operation, then the backup database is automatically
** updated at the same time. ** updated at the same time.
** **
@ -9801,7 +9803,7 @@ typedef struct sqlite3_backup sqlite3_backup;
** and may not be used following a call to sqlite3_backup_finish(). ** and may not be used following a call to sqlite3_backup_finish().
** **
** ^The value returned by sqlite3_backup_finish is [SQLITE_OK] if no ** ^The value returned by sqlite3_backup_finish is [SQLITE_OK] if no
** sqlite3_backup_step() errors occurred, regardless or whether or not ** sqlite3_backup_step() errors occurred, regardless of whether or not
** sqlite3_backup_step() completed. ** sqlite3_backup_step() completed.
** ^If an out-of-memory condition or IO error occurred during any prior ** ^If an out-of-memory condition or IO error occurred during any prior
** sqlite3_backup_step() call on the same [sqlite3_backup] object, then ** sqlite3_backup_step() call on the same [sqlite3_backup] object, then
@ -10871,7 +10873,7 @@ SQLITE_API void sqlite3_stmt_scanstatus_reset(sqlite3_stmt*);
** METHOD: sqlite3 ** METHOD: sqlite3
** **
** ^If a write-transaction is open on [database connection] D when the ** ^If a write-transaction is open on [database connection] D when the
** [sqlite3_db_cacheflush(D)] interface invoked, any dirty ** [sqlite3_db_cacheflush(D)] interface is invoked, any dirty
** pages in the pager-cache that are not currently in use are written out ** pages in the pager-cache that are not currently in use are written out
** to disk. A dirty page may be in use if a database cursor created by an ** to disk. A dirty page may be in use if a database cursor created by an
** active SQL statement is reading from it, or if it is page 1 of a database ** active SQL statement is reading from it, or if it is page 1 of a database
@ -15442,8 +15444,8 @@ typedef INT16_TYPE LogEst;
** assuming n is a signed integer type. UMXV(n) is similar for unsigned ** assuming n is a signed integer type. UMXV(n) is similar for unsigned
** integer types. ** integer types.
*/ */
#define SMXV(n) ((((i64)1)<<(sizeof(n)-1))-1) #define SMXV(n) ((((i64)1)<<(sizeof(n)*8-1))-1)
#define UMXV(n) ((((i64)1)<<(sizeof(n)))-1) #define UMXV(n) ((((i64)1)<<(sizeof(n)*8))-1)
/* /*
** Round up a number to the next larger multiple of 8. This is used ** Round up a number to the next larger multiple of 8. This is used
@ -19254,7 +19256,7 @@ struct AggInfo {
** from source tables rather than from accumulators */ ** from source tables rather than from accumulators */
u8 useSortingIdx; /* In direct mode, reference the sorting index rather u8 useSortingIdx; /* In direct mode, reference the sorting index rather
** than the source table */ ** than the source table */
u16 nSortingColumn; /* Number of columns in the sorting index */ u32 nSortingColumn; /* Number of columns in the sorting index */
int sortingIdx; /* Cursor number of the sorting index */ int sortingIdx; /* Cursor number of the sorting index */
int sortingIdxPTab; /* Cursor number of pseudo-table */ int sortingIdxPTab; /* Cursor number of pseudo-table */
int iFirstReg; /* First register in range for aCol[] and aFunc[] */ int iFirstReg; /* First register in range for aCol[] and aFunc[] */
@ -19263,8 +19265,8 @@ struct AggInfo {
Table *pTab; /* Source table */ Table *pTab; /* Source table */
Expr *pCExpr; /* The original expression */ Expr *pCExpr; /* The original expression */
int iTable; /* Cursor number of the source table */ int iTable; /* Cursor number of the source table */
i16 iColumn; /* Column number within the source table */ int iColumn; /* Column number within the source table */
i16 iSorterColumn; /* Column number in the sorting index */ int iSorterColumn; /* Column number in the sorting index */
} *aCol; } *aCol;
int nColumn; /* Number of used entries in aCol[] */ int nColumn; /* Number of used entries in aCol[] */
int nAccumulator; /* Number of columns that show through to the output. int nAccumulator; /* Number of columns that show through to the output.
@ -54966,7 +54968,9 @@ bitvec_set_rehash:
}else{ }else{
memcpy(aiValues, p->u.aHash, sizeof(p->u.aHash)); memcpy(aiValues, p->u.aHash, sizeof(p->u.aHash));
memset(p->u.apSub, 0, sizeof(p->u.apSub)); memset(p->u.apSub, 0, sizeof(p->u.apSub));
p->iDivisor = (p->iSize + BITVEC_NPTR - 1)/BITVEC_NPTR; p->iDivisor = p->iSize/BITVEC_NPTR;
if( (p->iSize%BITVEC_NPTR)!=0 ) p->iDivisor++;
if( p->iDivisor<BITVEC_NBIT ) p->iDivisor = BITVEC_NBIT;
rc = sqlite3BitvecSet(p, i); rc = sqlite3BitvecSet(p, i);
for(j=0; j<BITVEC_NINT; j++){ for(j=0; j<BITVEC_NINT; j++){
if( aiValues[j] ) rc |= sqlite3BitvecSet(p, aiValues[j]); if( aiValues[j] ) rc |= sqlite3BitvecSet(p, aiValues[j]);
@ -69654,6 +69658,7 @@ SQLITE_PRIVATE int sqlite3WalUndo(Wal *pWal, int (*xUndo)(void *, Pgno), void *p
if( iMax!=pWal->hdr.mxFrame ) walCleanupHash(pWal); if( iMax!=pWal->hdr.mxFrame ) walCleanupHash(pWal);
} }
SEH_EXCEPT( rc = SQLITE_IOERR_IN_PAGE; ) SEH_EXCEPT( rc = SQLITE_IOERR_IN_PAGE; )
pWal->iReCksum = 0;
} }
return rc; return rc;
} }
@ -69701,6 +69706,9 @@ SQLITE_PRIVATE int sqlite3WalSavepointUndo(Wal *pWal, u32 *aWalData){
walCleanupHash(pWal); walCleanupHash(pWal);
} }
SEH_EXCEPT( rc = SQLITE_IOERR_IN_PAGE; ) SEH_EXCEPT( rc = SQLITE_IOERR_IN_PAGE; )
if( pWal->iReCksum>pWal->hdr.mxFrame ){
pWal->iReCksum = 0;
}
} }
return rc; return rc;
@ -117346,7 +117354,9 @@ static void findOrCreateAggInfoColumn(
){ ){
struct AggInfo_col *pCol; struct AggInfo_col *pCol;
int k; int k;
int mxTerm = pParse->db->aLimit[SQLITE_LIMIT_COLUMN];
assert( mxTerm <= SMXV(i16) );
assert( pAggInfo->iFirstReg==0 ); assert( pAggInfo->iFirstReg==0 );
pCol = pAggInfo->aCol; pCol = pAggInfo->aCol;
for(k=0; k<pAggInfo->nColumn; k++, pCol++){ for(k=0; k<pAggInfo->nColumn; k++, pCol++){
@ -117364,6 +117374,10 @@ static void findOrCreateAggInfoColumn(
assert( pParse->db->mallocFailed ); assert( pParse->db->mallocFailed );
return; return;
} }
if( k>mxTerm ){
sqlite3ErrorMsg(pParse, "more than %d aggregate terms", mxTerm);
k = mxTerm;
}
pCol = &pAggInfo->aCol[k]; pCol = &pAggInfo->aCol[k];
assert( ExprUseYTab(pExpr) ); assert( ExprUseYTab(pExpr) );
pCol->pTab = pExpr->y.pTab; pCol->pTab = pExpr->y.pTab;
@ -117397,6 +117411,7 @@ fix_up_expr:
if( pExpr->op==TK_COLUMN ){ if( pExpr->op==TK_COLUMN ){
pExpr->op = TK_AGG_COLUMN; pExpr->op = TK_AGG_COLUMN;
} }
assert( k <= SMXV(pExpr->iAgg) );
pExpr->iAgg = (i16)k; pExpr->iAgg = (i16)k;
} }
@ -117481,13 +117496,19 @@ static int analyzeAggregate(Walker *pWalker, Expr *pExpr){
** function that is already in the pAggInfo structure ** function that is already in the pAggInfo structure
*/ */
struct AggInfo_func *pItem = pAggInfo->aFunc; struct AggInfo_func *pItem = pAggInfo->aFunc;
int mxTerm = pParse->db->aLimit[SQLITE_LIMIT_COLUMN];
assert( mxTerm <= SMXV(i16) );
for(i=0; i<pAggInfo->nFunc; i++, pItem++){ for(i=0; i<pAggInfo->nFunc; i++, pItem++){
if( NEVER(pItem->pFExpr==pExpr) ) break; if( NEVER(pItem->pFExpr==pExpr) ) break;
if( sqlite3ExprCompare(0, pItem->pFExpr, pExpr, -1)==0 ){ if( sqlite3ExprCompare(0, pItem->pFExpr, pExpr, -1)==0 ){
break; break;
} }
} }
if( i>=pAggInfo->nFunc ){ if( i>mxTerm ){
sqlite3ErrorMsg(pParse, "more than %d aggregate terms", mxTerm);
i = mxTerm;
assert( i<pAggInfo->nFunc );
}else if( i>=pAggInfo->nFunc ){
/* pExpr is original. Make a new entry in pAggInfo->aFunc[] /* pExpr is original. Make a new entry in pAggInfo->aFunc[]
*/ */
u8 enc = ENC(pParse->db); u8 enc = ENC(pParse->db);
@ -117541,6 +117562,7 @@ static int analyzeAggregate(Walker *pWalker, Expr *pExpr){
*/ */
assert( !ExprHasProperty(pExpr, EP_TokenOnly|EP_Reduced) ); assert( !ExprHasProperty(pExpr, EP_TokenOnly|EP_Reduced) );
ExprSetVVAProperty(pExpr, EP_NoReduce); ExprSetVVAProperty(pExpr, EP_NoReduce);
assert( i <= SMXV(pExpr->iAgg) );
pExpr->iAgg = (i16)i; pExpr->iAgg = (i16)i;
pExpr->pAggInfo = pAggInfo; pExpr->pAggInfo = pAggInfo;
return WRC_Prune; return WRC_Prune;
@ -131999,7 +132021,7 @@ static void concatFuncCore(
int nSep, int nSep,
const char *zSep const char *zSep
){ ){
i64 j, k, n = 0; i64 j, n = 0;
int i; int i;
char *z; char *z;
for(i=0; i<argc; i++){ for(i=0; i<argc; i++){
@ -132013,8 +132035,8 @@ static void concatFuncCore(
} }
j = 0; j = 0;
for(i=0; i<argc; i++){ for(i=0; i<argc; i++){
k = sqlite3_value_bytes(argv[i]); if( sqlite3_value_type(argv[i])!=SQLITE_NULL ){
if( k>0 ){ int k = sqlite3_value_bytes(argv[i]);
const char *v = (const char*)sqlite3_value_text(argv[i]); const char *v = (const char*)sqlite3_value_text(argv[i]);
if( v!=0 ){ if( v!=0 ){
if( j>0 && nSep>0 ){ if( j>0 && nSep>0 ){
@ -163433,30 +163455,42 @@ static void exprAnalyzeOrTerm(
** 1. The SQLITE_Transitive optimization must be enabled ** 1. The SQLITE_Transitive optimization must be enabled
** 2. Must be either an == or an IS operator ** 2. Must be either an == or an IS operator
** 3. Not originating in the ON clause of an OUTER JOIN ** 3. Not originating in the ON clause of an OUTER JOIN
** 4. The affinities of A and B must be compatible ** 4. The operator is not IS or else the query does not contain RIGHT JOIN
** 5a. Both operands use the same collating sequence OR ** 5. The affinities of A and B must be compatible
** 5b. The overall collating sequence is BINARY ** 6a. Both operands use the same collating sequence OR
** 6b. The overall collating sequence is BINARY
** If this routine returns TRUE, that means that the RHS can be substituted ** If this routine returns TRUE, that means that the RHS can be substituted
** for the LHS anyplace else in the WHERE clause where the LHS column occurs. ** for the LHS anyplace else in the WHERE clause where the LHS column occurs.
** This is an optimization. No harm comes from returning 0. But if 1 is ** This is an optimization. No harm comes from returning 0. But if 1 is
** returned when it should not be, then incorrect answers might result. ** returned when it should not be, then incorrect answers might result.
*/ */
static int termIsEquivalence(Parse *pParse, Expr *pExpr){ static int termIsEquivalence(Parse *pParse, Expr *pExpr, SrcList *pSrc){
char aff1, aff2; char aff1, aff2;
CollSeq *pColl; CollSeq *pColl;
if( !OptimizationEnabled(pParse->db, SQLITE_Transitive) ) return 0; if( !OptimizationEnabled(pParse->db, SQLITE_Transitive) ) return 0; /* (1) */
if( pExpr->op!=TK_EQ && pExpr->op!=TK_IS ) return 0; if( pExpr->op!=TK_EQ && pExpr->op!=TK_IS ) return 0; /* (2) */
if( ExprHasProperty(pExpr, EP_OuterON) ) return 0; if( ExprHasProperty(pExpr, EP_OuterON) ) return 0; /* (3) */
assert( pSrc!=0 );
if( pExpr->op==TK_IS
&& pSrc->nSrc
&& (pSrc->a[0].fg.jointype & JT_LTORJ)!=0
){
return 0; /* (4) */
}
aff1 = sqlite3ExprAffinity(pExpr->pLeft); aff1 = sqlite3ExprAffinity(pExpr->pLeft);
aff2 = sqlite3ExprAffinity(pExpr->pRight); aff2 = sqlite3ExprAffinity(pExpr->pRight);
if( aff1!=aff2 if( aff1!=aff2
&& (!sqlite3IsNumericAffinity(aff1) || !sqlite3IsNumericAffinity(aff2)) && (!sqlite3IsNumericAffinity(aff1) || !sqlite3IsNumericAffinity(aff2))
){ ){
return 0; return 0; /* (5) */
} }
pColl = sqlite3ExprCompareCollSeq(pParse, pExpr); pColl = sqlite3ExprCompareCollSeq(pParse, pExpr);
if( sqlite3IsBinary(pColl) ) return 1; if( !sqlite3IsBinary(pColl)
return sqlite3ExprCollSeqMatch(pParse, pExpr->pLeft, pExpr->pRight); && !sqlite3ExprCollSeqMatch(pParse, pExpr->pLeft, pExpr->pRight)
){
return 0; /* (6) */
}
return 1;
} }
/* /*
@ -163721,8 +163755,8 @@ static void exprAnalyze(
if( op==TK_IS ) pNew->wtFlags |= TERM_IS; if( op==TK_IS ) pNew->wtFlags |= TERM_IS;
pTerm = &pWC->a[idxTerm]; pTerm = &pWC->a[idxTerm];
pTerm->wtFlags |= TERM_COPIED; pTerm->wtFlags |= TERM_COPIED;
assert( pWInfo->pTabList!=0 );
if( termIsEquivalence(pParse, pDup) ){ if( termIsEquivalence(pParse, pDup, pWInfo->pTabList) ){
pTerm->eOperator |= WO_EQUIV; pTerm->eOperator |= WO_EQUIV;
eExtraOp = WO_EQUIV; eExtraOp = WO_EQUIV;
} }
@ -184424,6 +184458,7 @@ SQLITE_API int sqlite3_setlk_timeout(sqlite3 *db, int ms, int flags){
#endif #endif
if( ms<-1 ) return SQLITE_RANGE; if( ms<-1 ) return SQLITE_RANGE;
#ifdef SQLITE_ENABLE_SETLK_TIMEOUT #ifdef SQLITE_ENABLE_SETLK_TIMEOUT
sqlite3_mutex_enter(db->mutex);
db->setlkTimeout = ms; db->setlkTimeout = ms;
db->setlkFlags = flags; db->setlkFlags = flags;
sqlite3BtreeEnterAll(db); sqlite3BtreeEnterAll(db);
@ -184435,6 +184470,7 @@ SQLITE_API int sqlite3_setlk_timeout(sqlite3 *db, int ms, int flags){
} }
} }
sqlite3BtreeLeaveAll(db); sqlite3BtreeLeaveAll(db);
sqlite3_mutex_leave(db->mutex);
#endif #endif
#if !defined(SQLITE_ENABLE_API_ARMOR) && !defined(SQLITE_ENABLE_SETLK_TIMEOUT) #if !defined(SQLITE_ENABLE_API_ARMOR) && !defined(SQLITE_ENABLE_SETLK_TIMEOUT)
UNUSED_PARAMETER(db); UNUSED_PARAMETER(db);
@ -257230,7 +257266,7 @@ static void fts5SourceIdFunc(
){ ){
assert( nArg==0 ); assert( nArg==0 );
UNUSED_PARAM2(nArg, apUnused); UNUSED_PARAM2(nArg, apUnused);
sqlite3_result_text(pCtx, "fts5: 2025-06-06 14:52:32 b77dc5e0f596d2140d9ac682b2893ff65d3a4140aa86067a3efebe29dc914c95", -1, SQLITE_TRANSIENT); sqlite3_result_text(pCtx, "fts5: 2025-06-28 14:00:48 2af157d77fb1304a74176eaee7fbc7c7e932d946bf25325e9c26c91db19e3079", -1, SQLITE_TRANSIENT);
} }
/* /*
@ -258045,6 +258081,7 @@ static int fts5StorageDeleteFromIndex(
for(iCol=1; rc==SQLITE_OK && iCol<=pConfig->nCol; iCol++){ for(iCol=1; rc==SQLITE_OK && iCol<=pConfig->nCol; iCol++){
if( pConfig->abUnindexed[iCol-1]==0 ){ if( pConfig->abUnindexed[iCol-1]==0 ){
sqlite3_value *pVal = 0; sqlite3_value *pVal = 0;
sqlite3_value *pFree = 0;
const char *pText = 0; const char *pText = 0;
int nText = 0; int nText = 0;
const char *pLoc = 0; const char *pLoc = 0;
@ -258061,11 +258098,22 @@ static int fts5StorageDeleteFromIndex(
if( pConfig->bLocale && sqlite3Fts5IsLocaleValue(pConfig, pVal) ){ if( pConfig->bLocale && sqlite3Fts5IsLocaleValue(pConfig, pVal) ){
rc = sqlite3Fts5DecodeLocaleValue(pVal, &pText, &nText, &pLoc, &nLoc); rc = sqlite3Fts5DecodeLocaleValue(pVal, &pText, &nText, &pLoc, &nLoc);
}else{ }else{
pText = (const char*)sqlite3_value_text(pVal); if( sqlite3_value_type(pVal)!=SQLITE_TEXT ){
nText = sqlite3_value_bytes(pVal); /* Make a copy of the value to work with. This is because the call
if( pConfig->bLocale && pSeek ){ ** to sqlite3_value_text() below forces the type of the value to
pLoc = (const char*)sqlite3_column_text(pSeek, iCol + pConfig->nCol); ** SQLITE_TEXT, and we may need to use it again later. */
nLoc = sqlite3_column_bytes(pSeek, iCol + pConfig->nCol); pFree = pVal = sqlite3_value_dup(pVal);
if( pVal==0 ){
rc = SQLITE_NOMEM;
}
}
if( rc==SQLITE_OK ){
pText = (const char*)sqlite3_value_text(pVal);
nText = sqlite3_value_bytes(pVal);
if( pConfig->bLocale && pSeek ){
pLoc = (const char*)sqlite3_column_text(pSeek, iCol+pConfig->nCol);
nLoc = sqlite3_column_bytes(pSeek, iCol + pConfig->nCol);
}
} }
} }
@ -258081,6 +258129,7 @@ static int fts5StorageDeleteFromIndex(
} }
sqlite3Fts5ClearLocale(pConfig); sqlite3Fts5ClearLocale(pConfig);
} }
sqlite3_value_free(pFree);
} }
} }
if( rc==SQLITE_OK && p->nTotalRow<1 ){ if( rc==SQLITE_OK && p->nTotalRow<1 ){

92
deps/sqlite/sqlite3.h vendored
View File

@ -146,9 +146,9 @@ extern "C" {
** [sqlite3_libversion_number()], [sqlite3_sourceid()], ** [sqlite3_libversion_number()], [sqlite3_sourceid()],
** [sqlite_version()] and [sqlite_source_id()]. ** [sqlite_version()] and [sqlite_source_id()].
*/ */
#define SQLITE_VERSION "3.50.1" #define SQLITE_VERSION "3.50.2"
#define SQLITE_VERSION_NUMBER 3050001 #define SQLITE_VERSION_NUMBER 3050002
#define SQLITE_SOURCE_ID "2025-06-06 14:52:32 b77dc5e0f596d2140d9ac682b2893ff65d3a4140aa86067a3efebe29dc914c95" #define SQLITE_SOURCE_ID "2025-06-28 14:00:48 2af157d77fb1304a74176eaee7fbc7c7e932d946bf25325e9c26c91db19e3079"
/* /*
** CAPI3REF: Run-Time Library Version Numbers ** CAPI3REF: Run-Time Library Version Numbers
@ -4079,7 +4079,7 @@ SQLITE_API sqlite3_file *sqlite3_database_file_object(const char*);
** **
** The sqlite3_create_filename(D,J,W,N,P) allocates memory to hold a version of ** The sqlite3_create_filename(D,J,W,N,P) allocates memory to hold a version of
** database filename D with corresponding journal file J and WAL file W and ** database filename D with corresponding journal file J and WAL file W and
** with N URI parameters key/values pairs in the array P. The result from ** an array P of N URI Key/Value pairs. The result from
** sqlite3_create_filename(D,J,W,N,P) is a pointer to a database filename that ** sqlite3_create_filename(D,J,W,N,P) is a pointer to a database filename that
** is safe to pass to routines like: ** is safe to pass to routines like:
** <ul> ** <ul>
@ -4760,7 +4760,7 @@ typedef struct sqlite3_context sqlite3_context;
** METHOD: sqlite3_stmt ** METHOD: sqlite3_stmt
** **
** ^(In the SQL statement text input to [sqlite3_prepare_v2()] and its variants, ** ^(In the SQL statement text input to [sqlite3_prepare_v2()] and its variants,
** literals may be replaced by a [parameter] that matches one of following ** literals may be replaced by a [parameter] that matches one of the following
** templates: ** templates:
** **
** <ul> ** <ul>
@ -4805,7 +4805,7 @@ typedef struct sqlite3_context sqlite3_context;
** **
** [[byte-order determination rules]] ^The byte-order of ** [[byte-order determination rules]] ^The byte-order of
** UTF16 input text is determined by the byte-order mark (BOM, U+FEFF) ** UTF16 input text is determined by the byte-order mark (BOM, U+FEFF)
** found in first character, which is removed, or in the absence of a BOM ** found in the first character, which is removed, or in the absence of a BOM
** the byte order is the native byte order of the host ** the byte order is the native byte order of the host
** machine for sqlite3_bind_text16() or the byte order specified in ** machine for sqlite3_bind_text16() or the byte order specified in
** the 6th parameter for sqlite3_bind_text64().)^ ** the 6th parameter for sqlite3_bind_text64().)^
@ -4825,7 +4825,7 @@ typedef struct sqlite3_context sqlite3_context;
** or sqlite3_bind_text16() or sqlite3_bind_text64() then ** or sqlite3_bind_text16() or sqlite3_bind_text64() then
** that parameter must be the byte offset ** that parameter must be the byte offset
** where the NUL terminator would occur assuming the string were NUL ** where the NUL terminator would occur assuming the string were NUL
** terminated. If any NUL characters occurs at byte offsets less than ** terminated. If any NUL characters occur at byte offsets less than
** the value of the fourth parameter then the resulting string value will ** the value of the fourth parameter then the resulting string value will
** contain embedded NULs. The result of expressions involving strings ** contain embedded NULs. The result of expressions involving strings
** with embedded NULs is undefined. ** with embedded NULs is undefined.
@ -5037,7 +5037,7 @@ SQLITE_API const void *sqlite3_column_name16(sqlite3_stmt*, int N);
** METHOD: sqlite3_stmt ** METHOD: sqlite3_stmt
** **
** ^These routines provide a means to determine the database, table, and ** ^These routines provide a means to determine the database, table, and
** table column that is the origin of a particular result column in ** table column that is the origin of a particular result column in a
** [SELECT] statement. ** [SELECT] statement.
** ^The name of the database or table or column can be returned as ** ^The name of the database or table or column can be returned as
** either a UTF-8 or UTF-16 string. ^The _database_ routines return ** either a UTF-8 or UTF-16 string. ^The _database_ routines return
@ -5606,8 +5606,8 @@ SQLITE_API int sqlite3_reset(sqlite3_stmt *pStmt);
** **
** For best security, the [SQLITE_DIRECTONLY] flag is recommended for ** For best security, the [SQLITE_DIRECTONLY] flag is recommended for
** all application-defined SQL functions that do not need to be ** all application-defined SQL functions that do not need to be
** used inside of triggers, view, CHECK constraints, or other elements of ** used inside of triggers, views, CHECK constraints, or other elements of
** the database schema. This flags is especially recommended for SQL ** the database schema. This flag is especially recommended for SQL
** functions that have side effects or reveal internal application state. ** functions that have side effects or reveal internal application state.
** Without this flag, an attacker might be able to modify the schema of ** Without this flag, an attacker might be able to modify the schema of
** a database file to include invocations of the function with parameters ** a database file to include invocations of the function with parameters
@ -5638,7 +5638,7 @@ SQLITE_API int sqlite3_reset(sqlite3_stmt *pStmt);
** [user-defined window functions|available here]. ** [user-defined window functions|available here].
** **
** ^(If the final parameter to sqlite3_create_function_v2() or ** ^(If the final parameter to sqlite3_create_function_v2() or
** sqlite3_create_window_function() is not NULL, then it is destructor for ** sqlite3_create_window_function() is not NULL, then it is the destructor for
** the application data pointer. The destructor is invoked when the function ** the application data pointer. The destructor is invoked when the function
** is deleted, either by being overloaded or when the database connection ** is deleted, either by being overloaded or when the database connection
** closes.)^ ^The destructor is also invoked if the call to ** closes.)^ ^The destructor is also invoked if the call to
@ -6038,7 +6038,7 @@ SQLITE_API unsigned int sqlite3_value_subtype(sqlite3_value*);
** METHOD: sqlite3_value ** METHOD: sqlite3_value
** **
** ^The sqlite3_value_dup(V) interface makes a copy of the [sqlite3_value] ** ^The sqlite3_value_dup(V) interface makes a copy of the [sqlite3_value]
** object D and returns a pointer to that copy. ^The [sqlite3_value] returned ** object V and returns a pointer to that copy. ^The [sqlite3_value] returned
** is a [protected sqlite3_value] object even if the input is not. ** is a [protected sqlite3_value] object even if the input is not.
** ^The sqlite3_value_dup(V) interface returns NULL if V is NULL or if a ** ^The sqlite3_value_dup(V) interface returns NULL if V is NULL or if a
** memory allocation fails. ^If V is a [pointer value], then the result ** memory allocation fails. ^If V is a [pointer value], then the result
@ -6076,7 +6076,7 @@ SQLITE_API void sqlite3_value_free(sqlite3_value*);
** allocation error occurs. ** allocation error occurs.
** **
** ^(The amount of space allocated by sqlite3_aggregate_context(C,N) is ** ^(The amount of space allocated by sqlite3_aggregate_context(C,N) is
** determined by the N parameter on first successful call. Changing the ** determined by the N parameter on the first successful call. Changing the
** value of N in any subsequent call to sqlite3_aggregate_context() within ** value of N in any subsequent call to sqlite3_aggregate_context() within
** the same aggregate function instance will not resize the memory ** the same aggregate function instance will not resize the memory
** allocation.)^ Within the xFinal callback, it is customary to set ** allocation.)^ Within the xFinal callback, it is customary to set
@ -6238,7 +6238,7 @@ SQLITE_API void sqlite3_set_auxdata(sqlite3_context*, int N, void*, void (*)(voi
** **
** Security Warning: These interfaces should not be exposed in scripting ** Security Warning: These interfaces should not be exposed in scripting
** languages or in other circumstances where it might be possible for an ** languages or in other circumstances where it might be possible for an
** an attacker to invoke them. Any agent that can invoke these interfaces ** attacker to invoke them. Any agent that can invoke these interfaces
** can probably also take control of the process. ** can probably also take control of the process.
** **
** Database connection client data is only available for SQLite ** Database connection client data is only available for SQLite
@ -6352,7 +6352,7 @@ typedef void (*sqlite3_destructor_type)(void*);
** pointed to by the 2nd parameter are taken as the application-defined ** pointed to by the 2nd parameter are taken as the application-defined
** function result. If the 3rd parameter is non-negative, then it ** function result. If the 3rd parameter is non-negative, then it
** must be the byte offset into the string where the NUL terminator would ** must be the byte offset into the string where the NUL terminator would
** appear if the string where NUL terminated. If any NUL characters occur ** appear if the string were NUL terminated. If any NUL characters occur
** in the string at a byte offset that is less than the value of the 3rd ** in the string at a byte offset that is less than the value of the 3rd
** parameter, then the resulting string will contain embedded NULs and the ** parameter, then the resulting string will contain embedded NULs and the
** result of expressions operating on strings with embedded NULs is undefined. ** result of expressions operating on strings with embedded NULs is undefined.
@ -6410,7 +6410,7 @@ typedef void (*sqlite3_destructor_type)(void*);
** string and preferably a string literal. The sqlite3_result_pointer() ** string and preferably a string literal. The sqlite3_result_pointer()
** routine is part of the [pointer passing interface] added for SQLite 3.20.0. ** routine is part of the [pointer passing interface] added for SQLite 3.20.0.
** **
** If these routines are called from within the different thread ** If these routines are called from within a different thread
** than the one containing the application-defined function that received ** than the one containing the application-defined function that received
** the [sqlite3_context] pointer, the results are undefined. ** the [sqlite3_context] pointer, the results are undefined.
*/ */
@ -6816,7 +6816,7 @@ SQLITE_API sqlite3 *sqlite3_db_handle(sqlite3_stmt*);
** METHOD: sqlite3 ** METHOD: sqlite3
** **
** ^The sqlite3_db_name(D,N) interface returns a pointer to the schema name ** ^The sqlite3_db_name(D,N) interface returns a pointer to the schema name
** for the N-th database on database connection D, or a NULL pointer of N is ** for the N-th database on database connection D, or a NULL pointer if N is
** out of range. An N value of 0 means the main database file. An N of 1 is ** out of range. An N value of 0 means the main database file. An N of 1 is
** the "temp" schema. Larger values of N correspond to various ATTACH-ed ** the "temp" schema. Larger values of N correspond to various ATTACH-ed
** databases. ** databases.
@ -6911,7 +6911,7 @@ SQLITE_API int sqlite3_txn_state(sqlite3*,const char *zSchema);
** <dd>The SQLITE_TXN_READ state means that the database is currently ** <dd>The SQLITE_TXN_READ state means that the database is currently
** in a read transaction. Content has been read from the database file ** in a read transaction. Content has been read from the database file
** but nothing in the database file has changed. The transaction state ** but nothing in the database file has changed. The transaction state
** will advanced to SQLITE_TXN_WRITE if any changes occur and there are ** will be advanced to SQLITE_TXN_WRITE if any changes occur and there are
** no other conflicting concurrent write transactions. The transaction ** no other conflicting concurrent write transactions. The transaction
** state will revert to SQLITE_TXN_NONE following a [ROLLBACK] or ** state will revert to SQLITE_TXN_NONE following a [ROLLBACK] or
** [COMMIT].</dd> ** [COMMIT].</dd>
@ -6920,7 +6920,7 @@ SQLITE_API int sqlite3_txn_state(sqlite3*,const char *zSchema);
** <dd>The SQLITE_TXN_WRITE state means that the database is currently ** <dd>The SQLITE_TXN_WRITE state means that the database is currently
** in a write transaction. Content has been written to the database file ** in a write transaction. Content has been written to the database file
** but has not yet committed. The transaction state will change to ** but has not yet committed. The transaction state will change to
** to SQLITE_TXN_NONE at the next [ROLLBACK] or [COMMIT].</dd> ** SQLITE_TXN_NONE at the next [ROLLBACK] or [COMMIT].</dd>
*/ */
#define SQLITE_TXN_NONE 0 #define SQLITE_TXN_NONE 0
#define SQLITE_TXN_READ 1 #define SQLITE_TXN_READ 1
@ -7201,7 +7201,7 @@ SQLITE_API int sqlite3_db_release_memory(sqlite3*);
** CAPI3REF: Impose A Limit On Heap Size ** CAPI3REF: Impose A Limit On Heap Size
** **
** These interfaces impose limits on the amount of heap memory that will be ** These interfaces impose limits on the amount of heap memory that will be
** by all database connections within a single process. ** used by all database connections within a single process.
** **
** ^The sqlite3_soft_heap_limit64() interface sets and/or queries the ** ^The sqlite3_soft_heap_limit64() interface sets and/or queries the
** soft limit on the amount of heap memory that may be allocated by SQLite. ** soft limit on the amount of heap memory that may be allocated by SQLite.
@ -7259,7 +7259,7 @@ SQLITE_API int sqlite3_db_release_memory(sqlite3*);
** </ul>)^ ** </ul>)^
** **
** The circumstances under which SQLite will enforce the heap limits may ** The circumstances under which SQLite will enforce the heap limits may
** changes in future releases of SQLite. ** change in future releases of SQLite.
*/ */
SQLITE_API sqlite3_int64 sqlite3_soft_heap_limit64(sqlite3_int64 N); SQLITE_API sqlite3_int64 sqlite3_soft_heap_limit64(sqlite3_int64 N);
SQLITE_API sqlite3_int64 sqlite3_hard_heap_limit64(sqlite3_int64 N); SQLITE_API sqlite3_int64 sqlite3_hard_heap_limit64(sqlite3_int64 N);
@ -7374,8 +7374,8 @@ SQLITE_API int sqlite3_table_column_metadata(
** ^The entry point is zProc. ** ^The entry point is zProc.
** ^(zProc may be 0, in which case SQLite will try to come up with an ** ^(zProc may be 0, in which case SQLite will try to come up with an
** entry point name on its own. It first tries "sqlite3_extension_init". ** entry point name on its own. It first tries "sqlite3_extension_init".
** If that does not work, it constructs a name "sqlite3_X_init" where the ** If that does not work, it constructs a name "sqlite3_X_init" where
** X is consists of the lower-case equivalent of all ASCII alphabetic ** X consists of the lower-case equivalent of all ASCII alphabetic
** characters in the filename from the last "/" to the first following ** characters in the filename from the last "/" to the first following
** "." and omitting any initial "lib".)^ ** "." and omitting any initial "lib".)^
** ^The sqlite3_load_extension() interface returns ** ^The sqlite3_load_extension() interface returns
@ -7446,7 +7446,7 @@ SQLITE_API int sqlite3_enable_load_extension(sqlite3 *db, int onoff);
** ^(Even though the function prototype shows that xEntryPoint() takes ** ^(Even though the function prototype shows that xEntryPoint() takes
** no arguments and returns void, SQLite invokes xEntryPoint() with three ** no arguments and returns void, SQLite invokes xEntryPoint() with three
** arguments and expects an integer result as if the signature of the ** arguments and expects an integer result as if the signature of the
** entry point where as follows: ** entry point were as follows:
** **
** <blockquote><pre> ** <blockquote><pre>
** &nbsp; int xEntryPoint( ** &nbsp; int xEntryPoint(
@ -7610,7 +7610,7 @@ struct sqlite3_module {
** virtual table and might not be checked again by the byte code.)^ ^(The ** virtual table and might not be checked again by the byte code.)^ ^(The
** aConstraintUsage[].omit flag is an optimization hint. When the omit flag ** aConstraintUsage[].omit flag is an optimization hint. When the omit flag
** is left in its default setting of false, the constraint will always be ** is left in its default setting of false, the constraint will always be
** checked separately in byte code. If the omit flag is change to true, then ** checked separately in byte code. If the omit flag is changed to true, then
** the constraint may or may not be checked in byte code. In other words, ** the constraint may or may not be checked in byte code. In other words,
** when the omit flag is true there is no guarantee that the constraint will ** when the omit flag is true there is no guarantee that the constraint will
** not be checked again using byte code.)^ ** not be checked again using byte code.)^
@ -7636,7 +7636,7 @@ struct sqlite3_module {
** The xBestIndex method may optionally populate the idxFlags field with a ** The xBestIndex method may optionally populate the idxFlags field with a
** mask of SQLITE_INDEX_SCAN_* flags. One such flag is ** mask of SQLITE_INDEX_SCAN_* flags. One such flag is
** [SQLITE_INDEX_SCAN_HEX], which if set causes the [EXPLAIN QUERY PLAN] ** [SQLITE_INDEX_SCAN_HEX], which if set causes the [EXPLAIN QUERY PLAN]
** output to show the idxNum has hex instead of as decimal. Another flag is ** output to show the idxNum as hex instead of as decimal. Another flag is
** SQLITE_INDEX_SCAN_UNIQUE, which if set indicates that the query plan will ** SQLITE_INDEX_SCAN_UNIQUE, which if set indicates that the query plan will
** return at most one row. ** return at most one row.
** **
@ -7777,7 +7777,7 @@ struct sqlite3_index_info {
** the implementation of the [virtual table module]. ^The fourth ** the implementation of the [virtual table module]. ^The fourth
** parameter is an arbitrary client data pointer that is passed through ** parameter is an arbitrary client data pointer that is passed through
** into the [xCreate] and [xConnect] methods of the virtual table module ** into the [xCreate] and [xConnect] methods of the virtual table module
** when a new virtual table is be being created or reinitialized. ** when a new virtual table is being created or reinitialized.
** **
** ^The sqlite3_create_module_v2() interface has a fifth parameter which ** ^The sqlite3_create_module_v2() interface has a fifth parameter which
** is a pointer to a destructor for the pClientData. ^SQLite will ** is a pointer to a destructor for the pClientData. ^SQLite will
@ -7942,7 +7942,7 @@ typedef struct sqlite3_blob sqlite3_blob;
** in *ppBlob. Otherwise an [error code] is returned and, unless the error ** in *ppBlob. Otherwise an [error code] is returned and, unless the error
** code is SQLITE_MISUSE, *ppBlob is set to NULL.)^ ^This means that, provided ** code is SQLITE_MISUSE, *ppBlob is set to NULL.)^ ^This means that, provided
** the API is not misused, it is always safe to call [sqlite3_blob_close()] ** the API is not misused, it is always safe to call [sqlite3_blob_close()]
** on *ppBlob after this function it returns. ** on *ppBlob after this function returns.
** **
** This function fails with SQLITE_ERROR if any of the following are true: ** This function fails with SQLITE_ERROR if any of the following are true:
** <ul> ** <ul>
@ -8062,7 +8062,7 @@ SQLITE_API int sqlite3_blob_close(sqlite3_blob *);
** **
** ^Returns the size in bytes of the BLOB accessible via the ** ^Returns the size in bytes of the BLOB accessible via the
** successfully opened [BLOB handle] in its only argument. ^The ** successfully opened [BLOB handle] in its only argument. ^The
** incremental blob I/O routines can only read or overwriting existing ** incremental blob I/O routines can only read or overwrite existing
** blob content; they cannot change the size of a blob. ** blob content; they cannot change the size of a blob.
** **
** This routine only works on a [BLOB handle] which has been created ** This routine only works on a [BLOB handle] which has been created
@ -8212,7 +8212,7 @@ SQLITE_API int sqlite3_vfs_unregister(sqlite3_vfs*);
** ^The sqlite3_mutex_alloc() routine allocates a new ** ^The sqlite3_mutex_alloc() routine allocates a new
** mutex and returns a pointer to it. ^The sqlite3_mutex_alloc() ** mutex and returns a pointer to it. ^The sqlite3_mutex_alloc()
** routine returns NULL if it is unable to allocate the requested ** routine returns NULL if it is unable to allocate the requested
** mutex. The argument to sqlite3_mutex_alloc() must one of these ** mutex. The argument to sqlite3_mutex_alloc() must be one of these
** integer constants: ** integer constants:
** **
** <ul> ** <ul>
@ -8445,7 +8445,7 @@ SQLITE_API int sqlite3_mutex_notheld(sqlite3_mutex*);
** CAPI3REF: Retrieve the mutex for a database connection ** CAPI3REF: Retrieve the mutex for a database connection
** METHOD: sqlite3 ** METHOD: sqlite3
** **
** ^This interface returns a pointer the [sqlite3_mutex] object that ** ^This interface returns a pointer to the [sqlite3_mutex] object that
** serializes access to the [database connection] given in the argument ** serializes access to the [database connection] given in the argument
** when the [threading mode] is Serialized. ** when the [threading mode] is Serialized.
** ^If the [threading mode] is Single-thread or Multi-thread then this ** ^If the [threading mode] is Single-thread or Multi-thread then this
@ -8568,7 +8568,7 @@ SQLITE_API int sqlite3_test_control(int op, ...);
** CAPI3REF: SQL Keyword Checking ** CAPI3REF: SQL Keyword Checking
** **
** These routines provide access to the set of SQL language keywords ** These routines provide access to the set of SQL language keywords
** recognized by SQLite. Applications can uses these routines to determine ** recognized by SQLite. Applications can use these routines to determine
** whether or not a specific identifier needs to be escaped (for example, ** whether or not a specific identifier needs to be escaped (for example,
** by enclosing in double-quotes) so as not to confuse the parser. ** by enclosing in double-quotes) so as not to confuse the parser.
** **
@ -8736,7 +8736,7 @@ SQLITE_API void sqlite3_str_reset(sqlite3_str*);
** content of the dynamic string under construction in X. The value ** content of the dynamic string under construction in X. The value
** returned by [sqlite3_str_value(X)] is managed by the sqlite3_str object X ** returned by [sqlite3_str_value(X)] is managed by the sqlite3_str object X
** and might be freed or altered by any subsequent method on the same ** and might be freed or altered by any subsequent method on the same
** [sqlite3_str] object. Applications must not used the pointer returned ** [sqlite3_str] object. Applications must not use the pointer returned by
** [sqlite3_str_value(X)] after any subsequent method call on the same ** [sqlite3_str_value(X)] after any subsequent method call on the same
** object. ^Applications may change the content of the string returned ** object. ^Applications may change the content of the string returned
** by [sqlite3_str_value(X)] as long as they do not write into any bytes ** by [sqlite3_str_value(X)] as long as they do not write into any bytes
@ -8822,7 +8822,7 @@ SQLITE_API int sqlite3_status64(
** allocation which could not be satisfied by the [SQLITE_CONFIG_PAGECACHE] ** allocation which could not be satisfied by the [SQLITE_CONFIG_PAGECACHE]
** buffer and where forced to overflow to [sqlite3_malloc()]. The ** buffer and where forced to overflow to [sqlite3_malloc()]. The
** returned value includes allocations that overflowed because they ** returned value includes allocations that overflowed because they
** where too large (they were larger than the "sz" parameter to ** were too large (they were larger than the "sz" parameter to
** [SQLITE_CONFIG_PAGECACHE]) and allocations that overflowed because ** [SQLITE_CONFIG_PAGECACHE]) and allocations that overflowed because
** no space was left in the page cache.</dd>)^ ** no space was left in the page cache.</dd>)^
** **
@ -8906,28 +8906,29 @@ SQLITE_API int sqlite3_db_status(sqlite3*, int op, int *pCur, int *pHiwtr, int r
** [[SQLITE_DBSTATUS_LOOKASIDE_HIT]] ^(<dt>SQLITE_DBSTATUS_LOOKASIDE_HIT</dt> ** [[SQLITE_DBSTATUS_LOOKASIDE_HIT]] ^(<dt>SQLITE_DBSTATUS_LOOKASIDE_HIT</dt>
** <dd>This parameter returns the number of malloc attempts that were ** <dd>This parameter returns the number of malloc attempts that were
** satisfied using lookaside memory. Only the high-water value is meaningful; ** satisfied using lookaside memory. Only the high-water value is meaningful;
** the current value is always zero.)^ ** the current value is always zero.</dd>)^
** **
** [[SQLITE_DBSTATUS_LOOKASIDE_MISS_SIZE]] ** [[SQLITE_DBSTATUS_LOOKASIDE_MISS_SIZE]]
** ^(<dt>SQLITE_DBSTATUS_LOOKASIDE_MISS_SIZE</dt> ** ^(<dt>SQLITE_DBSTATUS_LOOKASIDE_MISS_SIZE</dt>
** <dd>This parameter returns the number malloc attempts that might have ** <dd>This parameter returns the number of malloc attempts that might have
** been satisfied using lookaside memory but failed due to the amount of ** been satisfied using lookaside memory but failed due to the amount of
** memory requested being larger than the lookaside slot size. ** memory requested being larger than the lookaside slot size.
** Only the high-water value is meaningful; ** Only the high-water value is meaningful;
** the current value is always zero.)^ ** the current value is always zero.</dd>)^
** **
** [[SQLITE_DBSTATUS_LOOKASIDE_MISS_FULL]] ** [[SQLITE_DBSTATUS_LOOKASIDE_MISS_FULL]]
** ^(<dt>SQLITE_DBSTATUS_LOOKASIDE_MISS_FULL</dt> ** ^(<dt>SQLITE_DBSTATUS_LOOKASIDE_MISS_FULL</dt>
** <dd>This parameter returns the number malloc attempts that might have ** <dd>This parameter returns the number of malloc attempts that might have
** been satisfied using lookaside memory but failed due to all lookaside ** been satisfied using lookaside memory but failed due to all lookaside
** memory already being in use. ** memory already being in use.
** Only the high-water value is meaningful; ** Only the high-water value is meaningful;
** the current value is always zero.)^ ** the current value is always zero.</dd>)^
** **
** [[SQLITE_DBSTATUS_CACHE_USED]] ^(<dt>SQLITE_DBSTATUS_CACHE_USED</dt> ** [[SQLITE_DBSTATUS_CACHE_USED]] ^(<dt>SQLITE_DBSTATUS_CACHE_USED</dt>
** <dd>This parameter returns the approximate number of bytes of heap ** <dd>This parameter returns the approximate number of bytes of heap
** memory used by all pager caches associated with the database connection.)^ ** memory used by all pager caches associated with the database connection.)^
** ^The highwater mark associated with SQLITE_DBSTATUS_CACHE_USED is always 0. ** ^The highwater mark associated with SQLITE_DBSTATUS_CACHE_USED is always 0.
** </dd>
** **
** [[SQLITE_DBSTATUS_CACHE_USED_SHARED]] ** [[SQLITE_DBSTATUS_CACHE_USED_SHARED]]
** ^(<dt>SQLITE_DBSTATUS_CACHE_USED_SHARED</dt> ** ^(<dt>SQLITE_DBSTATUS_CACHE_USED_SHARED</dt>
@ -8936,10 +8937,10 @@ SQLITE_API int sqlite3_db_status(sqlite3*, int op, int *pCur, int *pHiwtr, int r
** memory used by that pager cache is divided evenly between the attached ** memory used by that pager cache is divided evenly between the attached
** connections.)^ In other words, if none of the pager caches associated ** connections.)^ In other words, if none of the pager caches associated
** with the database connection are shared, this request returns the same ** with the database connection are shared, this request returns the same
** value as DBSTATUS_CACHE_USED. Or, if one or more or the pager caches are ** value as DBSTATUS_CACHE_USED. Or, if one or more of the pager caches are
** shared, the value returned by this call will be smaller than that returned ** shared, the value returned by this call will be smaller than that returned
** by DBSTATUS_CACHE_USED. ^The highwater mark associated with ** by DBSTATUS_CACHE_USED. ^The highwater mark associated with
** SQLITE_DBSTATUS_CACHE_USED_SHARED is always 0. ** SQLITE_DBSTATUS_CACHE_USED_SHARED is always 0.</dd>
** **
** [[SQLITE_DBSTATUS_SCHEMA_USED]] ^(<dt>SQLITE_DBSTATUS_SCHEMA_USED</dt> ** [[SQLITE_DBSTATUS_SCHEMA_USED]] ^(<dt>SQLITE_DBSTATUS_SCHEMA_USED</dt>
** <dd>This parameter returns the approximate number of bytes of heap ** <dd>This parameter returns the approximate number of bytes of heap
@ -8949,6 +8950,7 @@ SQLITE_API int sqlite3_db_status(sqlite3*, int op, int *pCur, int *pHiwtr, int r
** schema memory is shared with other database connections due to ** schema memory is shared with other database connections due to
** [shared cache mode] being enabled. ** [shared cache mode] being enabled.
** ^The highwater mark associated with SQLITE_DBSTATUS_SCHEMA_USED is always 0. ** ^The highwater mark associated with SQLITE_DBSTATUS_SCHEMA_USED is always 0.
** </dd>
** **
** [[SQLITE_DBSTATUS_STMT_USED]] ^(<dt>SQLITE_DBSTATUS_STMT_USED</dt> ** [[SQLITE_DBSTATUS_STMT_USED]] ^(<dt>SQLITE_DBSTATUS_STMT_USED</dt>
** <dd>This parameter returns the approximate number of bytes of heap ** <dd>This parameter returns the approximate number of bytes of heap
@ -8985,7 +8987,7 @@ SQLITE_API int sqlite3_db_status(sqlite3*, int op, int *pCur, int *pHiwtr, int r
** been written to disk in the middle of a transaction due to the page ** been written to disk in the middle of a transaction due to the page
** cache overflowing. Transactions are more efficient if they are written ** cache overflowing. Transactions are more efficient if they are written
** to disk all at once. When pages spill mid-transaction, that introduces ** to disk all at once. When pages spill mid-transaction, that introduces
** additional overhead. This parameter can be used help identify ** additional overhead. This parameter can be used to help identify
** inefficiencies that can be resolved by increasing the cache size. ** inefficiencies that can be resolved by increasing the cache size.
** </dd> ** </dd>
** **
@ -9465,7 +9467,7 @@ typedef struct sqlite3_backup sqlite3_backup;
** external process or via a database connection other than the one being ** external process or via a database connection other than the one being
** used by the backup operation, then the backup will be automatically ** used by the backup operation, then the backup will be automatically
** restarted by the next call to sqlite3_backup_step(). ^If the source ** restarted by the next call to sqlite3_backup_step(). ^If the source
** database is modified by the using the same database connection as is used ** database is modified by using the same database connection as is used
** by the backup operation, then the backup database is automatically ** by the backup operation, then the backup database is automatically
** updated at the same time. ** updated at the same time.
** **
@ -9482,7 +9484,7 @@ typedef struct sqlite3_backup sqlite3_backup;
** and may not be used following a call to sqlite3_backup_finish(). ** and may not be used following a call to sqlite3_backup_finish().
** **
** ^The value returned by sqlite3_backup_finish is [SQLITE_OK] if no ** ^The value returned by sqlite3_backup_finish is [SQLITE_OK] if no
** sqlite3_backup_step() errors occurred, regardless or whether or not ** sqlite3_backup_step() errors occurred, regardless of whether or not
** sqlite3_backup_step() completed. ** sqlite3_backup_step() completed.
** ^If an out-of-memory condition or IO error occurred during any prior ** ^If an out-of-memory condition or IO error occurred during any prior
** sqlite3_backup_step() call on the same [sqlite3_backup] object, then ** sqlite3_backup_step() call on the same [sqlite3_backup] object, then
@ -10552,7 +10554,7 @@ SQLITE_API void sqlite3_stmt_scanstatus_reset(sqlite3_stmt*);
** METHOD: sqlite3 ** METHOD: sqlite3
** **
** ^If a write-transaction is open on [database connection] D when the ** ^If a write-transaction is open on [database connection] D when the
** [sqlite3_db_cacheflush(D)] interface invoked, any dirty ** [sqlite3_db_cacheflush(D)] interface is invoked, any dirty
** pages in the pager-cache that are not currently in use are written out ** pages in the pager-cache that are not currently in use are written out
** to disk. A dirty page may be in use if a database cursor created by an ** to disk. A dirty page may be in use if a database cursor created by an
** active SQL statement is reading from it, or if it is page 1 of a database ** active SQL statement is reading from it, or if it is page 1 of a database