1
0
Fork 0
mirror of https://github.com/DBD-SQLite/DBD-SQLite synced 2025-06-07 22:28:47 -04:00

major update bundled SQLite to 3.7.0 - WAL mode

This commit is contained in:
Darren Duncan 2010-07-22 02:26:50 +00:00
parent fb64180af4
commit 742b438309
3 changed files with 10066 additions and 3662 deletions

View file

@ -1,6 +1,7 @@
Changes for Perl extension DBD-SQLite Changes for Perl extension DBD-SQLite
1.30_04 to be released 1.30_04 to be released
- Updated to SQLite 3.7.0 (DUNCAND)
- Added support for FTS3 tokenizers written in Perl. Added tests - Added support for FTS3 tokenizers written in Perl. Added tests
and documentation on how to use FTS3. Changed compilation flag and documentation on how to use FTS3. Changed compilation flag
to use the recommanded -DSQLITE_ENABLE_FTS3_PARENTHESIS to use the recommanded -DSQLITE_ENABLE_FTS3_PARENTHESIS

13366
sqlite3.c

File diff suppressed because it is too large Load diff

347
sqlite3.h
View file

@ -107,9 +107,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.6.23.1" #define SQLITE_VERSION "3.7.0"
#define SQLITE_VERSION_NUMBER 3006023 #define SQLITE_VERSION_NUMBER 3007000
#define SQLITE_SOURCE_ID "2010-03-26 22:28:06 b078b588d617e07886ad156e9f54ade6d823568e" #define SQLITE_SOURCE_ID "2010-07-20 20:23:38 13ed106c8c279422a6159e28c6887d13a88b7b8b"
/* /*
** CAPI3REF: Run-Time Library Version Numbers ** CAPI3REF: Run-Time Library Version Numbers
@ -146,7 +146,6 @@ SQLITE_API const char *sqlite3_libversion(void);
SQLITE_API const char *sqlite3_sourceid(void); SQLITE_API const char *sqlite3_sourceid(void);
SQLITE_API int sqlite3_libversion_number(void); SQLITE_API int sqlite3_libversion_number(void);
#ifndef SQLITE_OMIT_COMPILEOPTION_DIAGS
/* /*
** CAPI3REF: Run-Time Library Compilation Options Diagnostics ** CAPI3REF: Run-Time Library Compilation Options Diagnostics
** **
@ -169,9 +168,10 @@ SQLITE_API int sqlite3_libversion_number(void);
** See also: SQL functions [sqlite_compileoption_used()] and ** See also: SQL functions [sqlite_compileoption_used()] and
** [sqlite_compileoption_get()] and the [compile_options pragma]. ** [sqlite_compileoption_get()] and the [compile_options pragma].
*/ */
#ifndef SQLITE_OMIT_COMPILEOPTION_DIAGS
SQLITE_API int sqlite3_compileoption_used(const char *zOptName); SQLITE_API int sqlite3_compileoption_used(const char *zOptName);
SQLITE_API const char *sqlite3_compileoption_get(int N); SQLITE_API const char *sqlite3_compileoption_get(int N);
#endif /* SQLITE_OMIT_COMPILEOPTION_DIAGS */ #endif
/* /*
** CAPI3REF: Test To See If The Library Is Threadsafe ** CAPI3REF: Test To See If The Library Is Threadsafe
@ -393,7 +393,7 @@ SQLITE_API int sqlite3_exec(
#define SQLITE_NOTFOUND 12 /* NOT USED. Table or record not found */ #define SQLITE_NOTFOUND 12 /* NOT USED. Table or record not found */
#define SQLITE_FULL 13 /* Insertion failed because database is full */ #define SQLITE_FULL 13 /* Insertion failed because database is full */
#define SQLITE_CANTOPEN 14 /* Unable to open the database file */ #define SQLITE_CANTOPEN 14 /* Unable to open the database file */
#define SQLITE_PROTOCOL 15 /* NOT USED. Database lock protocol error */ #define SQLITE_PROTOCOL 15 /* Database lock protocol error */
#define SQLITE_EMPTY 16 /* Database is empty */ #define SQLITE_EMPTY 16 /* Database is empty */
#define SQLITE_SCHEMA 17 /* The database schema changed */ #define SQLITE_SCHEMA 17 /* The database schema changed */
#define SQLITE_TOOBIG 18 /* String or BLOB exceeds size limit */ #define SQLITE_TOOBIG 18 /* String or BLOB exceeds size limit */
@ -449,7 +449,12 @@ SQLITE_API int sqlite3_exec(
#define SQLITE_IOERR_LOCK (SQLITE_IOERR | (15<<8)) #define SQLITE_IOERR_LOCK (SQLITE_IOERR | (15<<8))
#define SQLITE_IOERR_CLOSE (SQLITE_IOERR | (16<<8)) #define SQLITE_IOERR_CLOSE (SQLITE_IOERR | (16<<8))
#define SQLITE_IOERR_DIR_CLOSE (SQLITE_IOERR | (17<<8)) #define SQLITE_IOERR_DIR_CLOSE (SQLITE_IOERR | (17<<8))
#define SQLITE_LOCKED_SHAREDCACHE (SQLITE_LOCKED | (1<<8) ) #define SQLITE_IOERR_SHMOPEN (SQLITE_IOERR | (18<<8))
#define SQLITE_IOERR_SHMSIZE (SQLITE_IOERR | (19<<8))
#define SQLITE_IOERR_SHMLOCK (SQLITE_IOERR | (20<<8))
#define SQLITE_LOCKED_SHAREDCACHE (SQLITE_LOCKED | (1<<8))
#define SQLITE_BUSY_RECOVERY (SQLITE_BUSY | (1<<8))
#define SQLITE_CANTOPEN_NOTEMPDIR (SQLITE_CANTOPEN | (1<<8))
/* /*
** CAPI3REF: Flags For File Open Operations ** CAPI3REF: Flags For File Open Operations
@ -476,11 +481,12 @@ SQLITE_API int sqlite3_exec(
#define SQLITE_OPEN_FULLMUTEX 0x00010000 /* Ok for sqlite3_open_v2() */ #define SQLITE_OPEN_FULLMUTEX 0x00010000 /* Ok for sqlite3_open_v2() */
#define SQLITE_OPEN_SHAREDCACHE 0x00020000 /* Ok for sqlite3_open_v2() */ #define SQLITE_OPEN_SHAREDCACHE 0x00020000 /* Ok for sqlite3_open_v2() */
#define SQLITE_OPEN_PRIVATECACHE 0x00040000 /* Ok for sqlite3_open_v2() */ #define SQLITE_OPEN_PRIVATECACHE 0x00040000 /* Ok for sqlite3_open_v2() */
#define SQLITE_OPEN_WAL 0x00080000 /* VFS only */
/* /*
** CAPI3REF: Device Characteristics ** CAPI3REF: Device Characteristics
** **
** The xDeviceCapabilities method of the [sqlite3_io_methods] ** The xDeviceCharacteristics method of the [sqlite3_io_methods]
** object returns an integer which is a vector of the these ** object returns an integer which is a vector of the these
** bit values expressing I/O characteristics of the mass storage ** bit values expressing I/O characteristics of the mass storage
** device that holds the file that the [sqlite3_io_methods] ** device that holds the file that the [sqlite3_io_methods]
@ -497,17 +503,18 @@ SQLITE_API int sqlite3_exec(
** information is written to disk in the same order as calls ** information is written to disk in the same order as calls
** to xWrite(). ** to xWrite().
*/ */
#define SQLITE_IOCAP_ATOMIC 0x00000001 #define SQLITE_IOCAP_ATOMIC 0x00000001
#define SQLITE_IOCAP_ATOMIC512 0x00000002 #define SQLITE_IOCAP_ATOMIC512 0x00000002
#define SQLITE_IOCAP_ATOMIC1K 0x00000004 #define SQLITE_IOCAP_ATOMIC1K 0x00000004
#define SQLITE_IOCAP_ATOMIC2K 0x00000008 #define SQLITE_IOCAP_ATOMIC2K 0x00000008
#define SQLITE_IOCAP_ATOMIC4K 0x00000010 #define SQLITE_IOCAP_ATOMIC4K 0x00000010
#define SQLITE_IOCAP_ATOMIC8K 0x00000020 #define SQLITE_IOCAP_ATOMIC8K 0x00000020
#define SQLITE_IOCAP_ATOMIC16K 0x00000040 #define SQLITE_IOCAP_ATOMIC16K 0x00000040
#define SQLITE_IOCAP_ATOMIC32K 0x00000080 #define SQLITE_IOCAP_ATOMIC32K 0x00000080
#define SQLITE_IOCAP_ATOMIC64K 0x00000100 #define SQLITE_IOCAP_ATOMIC64K 0x00000100
#define SQLITE_IOCAP_SAFE_APPEND 0x00000200 #define SQLITE_IOCAP_SAFE_APPEND 0x00000200
#define SQLITE_IOCAP_SEQUENTIAL 0x00000400 #define SQLITE_IOCAP_SEQUENTIAL 0x00000400
#define SQLITE_IOCAP_UNDELETABLE_WHEN_OPEN 0x00000800
/* /*
** CAPI3REF: File Locking Levels ** CAPI3REF: File Locking Levels
@ -658,6 +665,12 @@ struct sqlite3_io_methods {
int (*xFileControl)(sqlite3_file*, int op, void *pArg); int (*xFileControl)(sqlite3_file*, int op, void *pArg);
int (*xSectorSize)(sqlite3_file*); int (*xSectorSize)(sqlite3_file*);
int (*xDeviceCharacteristics)(sqlite3_file*); int (*xDeviceCharacteristics)(sqlite3_file*);
/* Methods above are valid for version 1 */
int (*xShmMap)(sqlite3_file*, int iPg, int pgsz, int, void volatile**);
int (*xShmLock)(sqlite3_file*, int offset, int n, int flags);
void (*xShmBarrier)(sqlite3_file*);
int (*xShmUnmap)(sqlite3_file*, int deleteFlag);
/* Methods above are valid for version 2 */
/* Additional methods may be added in future releases */ /* Additional methods may be added in future releases */
}; };
@ -675,11 +688,19 @@ struct sqlite3_io_methods {
** into an integer that the pArg argument points to. This capability ** into an integer that the pArg argument points to. This capability
** is used during testing and only needs to be supported when SQLITE_TEST ** is used during testing and only needs to be supported when SQLITE_TEST
** is defined. ** is defined.
**
** The [SQLITE_FCNTL_SIZE_HINT] opcode is used by SQLite to give the VFS
** layer a hint of how large the database file will grow to be during the
** current transaction. This hint is not guaranteed to be accurate but it
** is often close. The underlying VFS might choose to preallocate database
** file space based on this hint in order to help writes to the database
** file run faster.
*/ */
#define SQLITE_FCNTL_LOCKSTATE 1 #define SQLITE_FCNTL_LOCKSTATE 1
#define SQLITE_GET_LOCKPROXYFILE 2 #define SQLITE_GET_LOCKPROXYFILE 2
#define SQLITE_SET_LOCKPROXYFILE 3 #define SQLITE_SET_LOCKPROXYFILE 3
#define SQLITE_LAST_ERRNO 4 #define SQLITE_LAST_ERRNO 4
#define SQLITE_FCNTL_SIZE_HINT 5
/* /*
** CAPI3REF: Mutex Handle ** CAPI3REF: Mutex Handle
@ -811,20 +832,27 @@ typedef struct sqlite3_mutex sqlite3_mutex;
** handled as a fatal error by SQLite, vfs implementations should endeavor ** handled as a fatal error by SQLite, vfs implementations should endeavor
** to prevent this by setting mxPathname to a sufficiently large value. ** to prevent this by setting mxPathname to a sufficiently large value.
** **
** The xRandomness(), xSleep(), and xCurrentTime() interfaces ** The xRandomness(), xSleep(), xCurrentTime(), and xCurrentTimeInt64()
** are not strictly a part of the filesystem, but they are ** interfaces are not strictly a part of the filesystem, but they are
** included in the VFS structure for completeness. ** included in the VFS structure for completeness.
** The xRandomness() function attempts to return nBytes bytes ** The xRandomness() function attempts to return nBytes bytes
** of good-quality randomness into zOut. The return value is ** of good-quality randomness into zOut. The return value is
** the actual number of bytes of randomness obtained. ** the actual number of bytes of randomness obtained.
** The xSleep() method causes the calling thread to sleep for at ** The xSleep() method causes the calling thread to sleep for at
** least the number of microseconds given. The xCurrentTime() ** least the number of microseconds given. The xCurrentTime()
** method returns a Julian Day Number for the current date and time. ** method returns a Julian Day Number for the current date and time as
** ** a floating point value.
** The xCurrentTimeInt64() method returns, as an integer, the Julian
** Day Number multipled by 86400000 (the number of milliseconds in
** a 24-hour day).
** ^SQLite will use the xCurrentTimeInt64() method to get the current
** date and time if that method is available (if iVersion is 2 or
** greater and the function pointer is not NULL) and will fall back
** to xCurrentTime() if xCurrentTimeInt64() is unavailable.
*/ */
typedef struct sqlite3_vfs sqlite3_vfs; typedef struct sqlite3_vfs sqlite3_vfs;
struct sqlite3_vfs { struct sqlite3_vfs {
int iVersion; /* Structure version number */ int iVersion; /* Structure version number (currently 2) */
int szOsFile; /* Size of subclassed sqlite3_file */ int szOsFile; /* Size of subclassed sqlite3_file */
int mxPathname; /* Maximum file pathname length */ int mxPathname; /* Maximum file pathname length */
sqlite3_vfs *pNext; /* Next registered VFS */ sqlite3_vfs *pNext; /* Next registered VFS */
@ -843,8 +871,16 @@ struct sqlite3_vfs {
int (*xSleep)(sqlite3_vfs*, int microseconds); int (*xSleep)(sqlite3_vfs*, int microseconds);
int (*xCurrentTime)(sqlite3_vfs*, double*); int (*xCurrentTime)(sqlite3_vfs*, double*);
int (*xGetLastError)(sqlite3_vfs*, int, char *); int (*xGetLastError)(sqlite3_vfs*, int, char *);
/* New fields may be appended in figure versions. The iVersion /*
** value will increment whenever this happens. */ ** The methods above are in version 1 of the sqlite_vfs object
** definition. Those that follow are added in version 2 or later
*/
int (*xCurrentTimeInt64)(sqlite3_vfs*, sqlite3_int64*);
/*
** The methods above are in versions 1 and 2 of the sqlite_vfs object.
** New fields may be appended in figure versions. The iVersion
** value will increment whenever this happens.
*/
}; };
/* /*
@ -856,13 +892,58 @@ struct sqlite3_vfs {
** With SQLITE_ACCESS_EXISTS, the xAccess method ** With SQLITE_ACCESS_EXISTS, the xAccess method
** simply checks whether the file exists. ** simply checks whether the file exists.
** With SQLITE_ACCESS_READWRITE, the xAccess method ** With SQLITE_ACCESS_READWRITE, the xAccess method
** checks whether the file is both readable and writable. ** checks whether the named directory is both readable and writable
** (in other words, if files can be added, removed, and renamed within
** the directory).
** The SQLITE_ACCESS_READWRITE constant is currently used only by the
** [temp_store_directory pragma], though this could change in a future
** release of SQLite.
** With SQLITE_ACCESS_READ, the xAccess method ** With SQLITE_ACCESS_READ, the xAccess method
** checks whether the file is readable. ** checks whether the file is readable. The SQLITE_ACCESS_READ constant is
** currently unused, though it might be used in a future release of
** SQLite.
*/ */
#define SQLITE_ACCESS_EXISTS 0 #define SQLITE_ACCESS_EXISTS 0
#define SQLITE_ACCESS_READWRITE 1 #define SQLITE_ACCESS_READWRITE 1 /* Used by PRAGMA temp_store_directory */
#define SQLITE_ACCESS_READ 2 #define SQLITE_ACCESS_READ 2 /* Unused */
/*
** CAPI3REF: Flags for the xShmLock VFS method
**
** These integer constants define the various locking operations
** allowed by the xShmLock method of [sqlite3_io_methods]. The
** following are the only legal combinations of flags to the
** xShmLock method:
**
** <ul>
** <li> SQLITE_SHM_LOCK | SQLITE_SHM_SHARED
** <li> SQLITE_SHM_LOCK | SQLITE_SHM_EXCLUSIVE
** <li> SQLITE_SHM_UNLOCK | SQLITE_SHM_SHARED
** <li> SQLITE_SHM_UNLOCK | SQLITE_SHM_EXCLUSIVE
** </ul>
**
** When unlocking, the same SHARED or EXCLUSIVE flag must be supplied as
** was given no the corresponding lock.
**
** The xShmLock method can transition between unlocked and SHARED or
** between unlocked and EXCLUSIVE. It cannot transition between SHARED
** and EXCLUSIVE.
*/
#define SQLITE_SHM_UNLOCK 1
#define SQLITE_SHM_LOCK 2
#define SQLITE_SHM_SHARED 4
#define SQLITE_SHM_EXCLUSIVE 8
/*
** CAPI3REF: Maximum xShmLock index
**
** The xShmLock method on [sqlite3_io_methods] may use values
** between 0 and this upper bound as its "offset" argument.
** The SQLite core will never attempt to acquire or release a
** lock outside of this range
*/
#define SQLITE_SHM_NLOCK 8
/* /*
** CAPI3REF: Initialize The SQLite Library ** CAPI3REF: Initialize The SQLite Library
@ -973,11 +1054,10 @@ SQLITE_API int sqlite3_os_end(void);
** ^If the option is unknown or SQLite is unable to set the option ** ^If the option is unknown or SQLite is unable to set the option
** then this routine returns a non-zero [error code]. ** then this routine returns a non-zero [error code].
*/ */
SQLITE_API SQLITE_EXPERIMENTAL int sqlite3_config(int, ...); SQLITE_API int sqlite3_config(int, ...);
/* /*
** CAPI3REF: Configure database connections ** CAPI3REF: Configure database connections
** EXPERIMENTAL
** **
** The sqlite3_db_config() interface is used to make configuration ** The sqlite3_db_config() interface is used to make configuration
** changes to a [database connection]. The interface is similar to ** changes to a [database connection]. The interface is similar to
@ -997,11 +1077,10 @@ SQLITE_API SQLITE_EXPERIMENTAL int sqlite3_config(int, ...);
** ^Calls to sqlite3_db_config() return SQLITE_OK if and only if ** ^Calls to sqlite3_db_config() return SQLITE_OK if and only if
** the call is considered successful. ** the call is considered successful.
*/ */
SQLITE_API SQLITE_EXPERIMENTAL int sqlite3_db_config(sqlite3*, int op, ...); SQLITE_API int sqlite3_db_config(sqlite3*, int op, ...);
/* /*
** CAPI3REF: Memory Allocation Routines ** CAPI3REF: Memory Allocation Routines
** EXPERIMENTAL
** **
** An instance of this object defines the interface between SQLite ** An instance of this object defines the interface between SQLite
** and low-level memory allocation routines. ** and low-level memory allocation routines.
@ -1083,7 +1162,6 @@ struct sqlite3_mem_methods {
/* /*
** CAPI3REF: Configuration Options ** CAPI3REF: Configuration Options
** EXPERIMENTAL
** **
** These constants are the available integer configuration options that ** These constants are the available integer configuration options that
** can be passed as the first argument to the [sqlite3_config()] interface. ** can be passed as the first argument to the [sqlite3_config()] interface.
@ -1269,6 +1347,24 @@ struct sqlite3_mem_methods {
** [sqlite3_pcache_methods] object. SQLite copies of the current ** [sqlite3_pcache_methods] object. SQLite copies of the current
** page cache implementation into that object.)^ </dd> ** page cache implementation into that object.)^ </dd>
** **
** <dt>SQLITE_CONFIG_LOG</dt>
** <dd> ^The SQLITE_CONFIG_LOG option takes two arguments: a pointer to a
** function with a call signature of void(*)(void*,int,const char*),
** and a pointer to void. ^If the function pointer is not NULL, it is
** invoked by [sqlite3_log()] to process each logging event. ^If the
** function pointer is NULL, the [sqlite3_log()] interface becomes a no-op.
** ^The void pointer that is the second argument to SQLITE_CONFIG_LOG is
** passed through as the first parameter to the application-defined logger
** function whenever that function is invoked. ^The second parameter to
** the logger function is a copy of the first parameter to the corresponding
** [sqlite3_log()] call and is intended to be a [result code] or an
** [extended result code]. ^The third parameter passed to the logger is
** log message after formatting via [sqlite3_snprintf()].
** The SQLite logging interface is not reentrant; the logger function
** supplied by the application must not invoke any SQLite interface.
** In a multi-threaded application, the application-defined logger
** function must be threadsafe. </dd>
**
** </dl> ** </dl>
*/ */
#define SQLITE_CONFIG_SINGLETHREAD 1 /* nil */ #define SQLITE_CONFIG_SINGLETHREAD 1 /* nil */
@ -1289,8 +1385,7 @@ struct sqlite3_mem_methods {
#define SQLITE_CONFIG_LOG 16 /* xFunc, void* */ #define SQLITE_CONFIG_LOG 16 /* xFunc, void* */
/* /*
** CAPI3REF: Configuration Options ** CAPI3REF: Database Connection Configuration Options
** EXPERIMENTAL
** **
** These constants are the available integer configuration options that ** These constants are the available integer configuration options that
** can be passed as the second argument to the [sqlite3_db_config()] interface. ** can be passed as the second argument to the [sqlite3_db_config()] interface.
@ -2066,7 +2161,6 @@ SQLITE_API int sqlite3_set_authorizer(
/* /*
** CAPI3REF: Tracing And Profiling Functions ** CAPI3REF: Tracing And Profiling Functions
** EXPERIMENTAL
** **
** These routines register callback functions that can be used for ** These routines register callback functions that can be used for
** tracing and profiling the execution of SQL statements. ** tracing and profiling the execution of SQL statements.
@ -2084,7 +2178,7 @@ SQLITE_API int sqlite3_set_authorizer(
** the original statement text and an estimate of wall-clock time ** the original statement text and an estimate of wall-clock time
** of how long that statement took to run. ** of how long that statement took to run.
*/ */
SQLITE_API SQLITE_EXPERIMENTAL void *sqlite3_trace(sqlite3*, void(*xTrace)(void*,const char*), void*); SQLITE_API void *sqlite3_trace(sqlite3*, void(*xTrace)(void*,const char*), void*);
SQLITE_API SQLITE_EXPERIMENTAL void *sqlite3_profile(sqlite3*, SQLITE_API SQLITE_EXPERIMENTAL void *sqlite3_profile(sqlite3*,
void(*xProfile)(void*,const char*,sqlite3_uint64), void*); void(*xProfile)(void*,const char*,sqlite3_uint64), void*);
@ -2877,6 +2971,14 @@ SQLITE_API const void *sqlite3_column_decltype16(sqlite3_stmt*,int);
** be the case that the same database connection is being used by two or ** be the case that the same database connection is being used by two or
** more threads at the same moment in time. ** more threads at the same moment in time.
** **
** For all versions of SQLite up to and including 3.6.23.1, it was required
** after sqlite3_step() returned anything other than [SQLITE_ROW] that
** [sqlite3_reset()] be called before any subsequent invocation of
** sqlite3_step(). Failure to invoke [sqlite3_reset()] in this way would
** result in an [SQLITE_MISUSE] return from sqlite3_step(). But after
** version 3.6.23.1, sqlite3_step() began calling [sqlite3_reset()]
** automatically in this circumstance rather than returning [SQLITE_MISUSE].
**
** <b>Goofy Interface Alert:</b> In the legacy interface, the sqlite3_step() ** <b>Goofy Interface Alert:</b> In the legacy interface, the sqlite3_step()
** API always returns a generic error code, [SQLITE_ERROR], following any ** API always returns a generic error code, [SQLITE_ERROR], following any
** error other than [SQLITE_BUSY] and [SQLITE_MISUSE]. You must call ** error other than [SQLITE_BUSY] and [SQLITE_MISUSE]. You must call
@ -3689,7 +3791,7 @@ SQLITE_API int sqlite3_collation_needed16(
void(*)(void*,sqlite3*,int eTextRep,const void*) void(*)(void*,sqlite3*,int eTextRep,const void*)
); );
#if SQLITE_HAS_CODEC #ifdef SQLITE_HAS_CODEC
/* /*
** Specify the key for an encrypted database. This routine should be ** Specify the key for an encrypted database. This routine should be
** called right after sqlite3_open(). ** called right after sqlite3_open().
@ -3872,8 +3974,6 @@ SQLITE_API sqlite3_stmt *sqlite3_next_stmt(sqlite3 *pDb, sqlite3_stmt *pStmt);
** an error or constraint causes an implicit rollback to occur. ** an error or constraint causes an implicit rollback to occur.
** ^The rollback callback is not invoked if a transaction is ** ^The rollback callback is not invoked if a transaction is
** automatically rolled back because the database connection is closed. ** automatically rolled back because the database connection is closed.
** ^The rollback callback is not invoked if a transaction is
** rolled back because a commit callback returned non-zero.
** **
** See also the [sqlite3_update_hook()] interface. ** See also the [sqlite3_update_hook()] interface.
*/ */
@ -4159,8 +4259,6 @@ SQLITE_API int sqlite3_auto_extension(void (*xEntryPoint)(void));
SQLITE_API void sqlite3_reset_auto_extension(void); SQLITE_API void sqlite3_reset_auto_extension(void);
/* /*
****** EXPERIMENTAL - subject to change without notice **************
**
** The interface to the virtual-table mechanism is currently considered ** The interface to the virtual-table mechanism is currently considered
** to be experimental. The interface might change in incompatible ways. ** to be experimental. The interface might change in incompatible ways.
** If this is a problem for you, do not use the interface at this time. ** If this is a problem for you, do not use the interface at this time.
@ -4180,7 +4278,6 @@ typedef struct sqlite3_module sqlite3_module;
/* /*
** CAPI3REF: Virtual Table Object ** CAPI3REF: Virtual Table Object
** KEYWORDS: sqlite3_module {virtual table module} ** KEYWORDS: sqlite3_module {virtual table module}
** EXPERIMENTAL
** **
** This structure, sometimes called a a "virtual table module", ** This structure, sometimes called a a "virtual table module",
** defines the implementation of a [virtual tables]. ** defines the implementation of a [virtual tables].
@ -4227,7 +4324,6 @@ struct sqlite3_module {
/* /*
** CAPI3REF: Virtual Table Indexing Information ** CAPI3REF: Virtual Table Indexing Information
** KEYWORDS: sqlite3_index_info ** KEYWORDS: sqlite3_index_info
** EXPERIMENTAL
** **
** The sqlite3_index_info structure and its substructures is used to ** The sqlite3_index_info structure and its substructures is used to
** pass information into and receive the reply from the [xBestIndex] ** pass information into and receive the reply from the [xBestIndex]
@ -4309,7 +4405,6 @@ struct sqlite3_index_info {
/* /*
** CAPI3REF: Register A Virtual Table Implementation ** CAPI3REF: Register A Virtual Table Implementation
** EXPERIMENTAL
** **
** ^These routines are used to register a new [virtual table module] name. ** ^These routines are used to register a new [virtual table module] name.
** ^Module names must be registered before ** ^Module names must be registered before
@ -4331,13 +4426,13 @@ struct sqlite3_index_info {
** interface is equivalent to sqlite3_create_module_v2() with a NULL ** interface is equivalent to sqlite3_create_module_v2() with a NULL
** destructor. ** destructor.
*/ */
SQLITE_API SQLITE_EXPERIMENTAL int sqlite3_create_module( SQLITE_API int sqlite3_create_module(
sqlite3 *db, /* SQLite connection to register module with */ sqlite3 *db, /* SQLite connection to register module with */
const char *zName, /* Name of the module */ const char *zName, /* Name of the module */
const sqlite3_module *p, /* Methods for the module */ const sqlite3_module *p, /* Methods for the module */
void *pClientData /* Client data for xCreate/xConnect */ void *pClientData /* Client data for xCreate/xConnect */
); );
SQLITE_API SQLITE_EXPERIMENTAL int sqlite3_create_module_v2( SQLITE_API int sqlite3_create_module_v2(
sqlite3 *db, /* SQLite connection to register module with */ sqlite3 *db, /* SQLite connection to register module with */
const char *zName, /* Name of the module */ const char *zName, /* Name of the module */
const sqlite3_module *p, /* Methods for the module */ const sqlite3_module *p, /* Methods for the module */
@ -4348,7 +4443,6 @@ SQLITE_API SQLITE_EXPERIMENTAL int sqlite3_create_module_v2(
/* /*
** CAPI3REF: Virtual Table Instance Object ** CAPI3REF: Virtual Table Instance Object
** KEYWORDS: sqlite3_vtab ** KEYWORDS: sqlite3_vtab
** EXPERIMENTAL
** **
** Every [virtual table module] implementation uses a subclass ** Every [virtual table module] implementation uses a subclass
** of this object to describe a particular instance ** of this object to describe a particular instance
@ -4374,7 +4468,6 @@ struct sqlite3_vtab {
/* /*
** CAPI3REF: Virtual Table Cursor Object ** CAPI3REF: Virtual Table Cursor Object
** KEYWORDS: sqlite3_vtab_cursor {virtual table cursor} ** KEYWORDS: sqlite3_vtab_cursor {virtual table cursor}
** EXPERIMENTAL
** **
** Every [virtual table module] implementation uses a subclass of the ** Every [virtual table module] implementation uses a subclass of the
** following structure to describe cursors that point into the ** following structure to describe cursors that point into the
@ -4396,18 +4489,16 @@ struct sqlite3_vtab_cursor {
/* /*
** CAPI3REF: Declare The Schema Of A Virtual Table ** CAPI3REF: Declare The Schema Of A Virtual Table
** EXPERIMENTAL
** **
** ^The [xCreate] and [xConnect] methods of a ** ^The [xCreate] and [xConnect] methods of a
** [virtual table module] call this interface ** [virtual table module] call this interface
** to declare the format (the names and datatypes of the columns) of ** to declare the format (the names and datatypes of the columns) of
** the virtual tables they implement. ** the virtual tables they implement.
*/ */
SQLITE_API SQLITE_EXPERIMENTAL int sqlite3_declare_vtab(sqlite3*, const char *zSQL); SQLITE_API int sqlite3_declare_vtab(sqlite3*, const char *zSQL);
/* /*
** CAPI3REF: Overload A Function For A Virtual Table ** CAPI3REF: Overload A Function For A Virtual Table
** EXPERIMENTAL
** **
** ^(Virtual tables can provide alternative implementations of functions ** ^(Virtual tables can provide alternative implementations of functions
** using the [xFindFunction] method of the [virtual table module]. ** using the [xFindFunction] method of the [virtual table module].
@ -4422,7 +4513,7 @@ SQLITE_API SQLITE_EXPERIMENTAL int sqlite3_declare_vtab(sqlite3*, const char *zS
** purpose is to be a placeholder function that can be overloaded ** purpose is to be a placeholder function that can be overloaded
** by a [virtual table]. ** by a [virtual table].
*/ */
SQLITE_API SQLITE_EXPERIMENTAL int sqlite3_overload_function(sqlite3*, const char *zFuncName, int nArg); SQLITE_API int sqlite3_overload_function(sqlite3*, const char *zFuncName, int nArg);
/* /*
** The interface to the virtual-table mechanism defined above (back up ** The interface to the virtual-table mechanism defined above (back up
@ -4432,8 +4523,6 @@ SQLITE_API SQLITE_EXPERIMENTAL int sqlite3_overload_function(sqlite3*, const cha
** **
** When the virtual-table mechanism stabilizes, we will declare the ** When the virtual-table mechanism stabilizes, we will declare the
** interface fixed, support it indefinitely, and remove this comment. ** interface fixed, support it indefinitely, and remove this comment.
**
****** EXPERIMENTAL - subject to change without notice **************
*/ */
/* /*
@ -4776,7 +4865,6 @@ SQLITE_API void sqlite3_mutex_leave(sqlite3_mutex*);
/* /*
** CAPI3REF: Mutex Methods Object ** CAPI3REF: Mutex Methods Object
** EXPERIMENTAL
** **
** An instance of this structure defines the low-level routines ** An instance of this structure defines the low-level routines
** used to allocate and use mutexes. ** used to allocate and use mutexes.
@ -4989,11 +5077,11 @@ SQLITE_API int sqlite3_test_control(int op, ...);
#define SQLITE_TESTCTRL_RESERVE 14 #define SQLITE_TESTCTRL_RESERVE 14
#define SQLITE_TESTCTRL_OPTIMIZATIONS 15 #define SQLITE_TESTCTRL_OPTIMIZATIONS 15
#define SQLITE_TESTCTRL_ISKEYWORD 16 #define SQLITE_TESTCTRL_ISKEYWORD 16
#define SQLITE_TESTCTRL_LAST 16 #define SQLITE_TESTCTRL_PGHDRSZ 17
#define SQLITE_TESTCTRL_LAST 17
/* /*
** CAPI3REF: SQLite Runtime Status ** CAPI3REF: SQLite Runtime Status
** EXPERIMENTAL
** **
** ^This interface is used to retrieve runtime status information ** ^This interface is used to retrieve runtime status information
** about the preformance of SQLite, and optionally to reset various ** about the preformance of SQLite, and optionally to reset various
@ -5021,12 +5109,11 @@ SQLITE_API int sqlite3_test_control(int op, ...);
** **
** See also: [sqlite3_db_status()] ** See also: [sqlite3_db_status()]
*/ */
SQLITE_API SQLITE_EXPERIMENTAL int sqlite3_status(int op, int *pCurrent, int *pHighwater, int resetFlag); SQLITE_API int sqlite3_status(int op, int *pCurrent, int *pHighwater, int resetFlag);
/* /*
** CAPI3REF: Status Parameters ** CAPI3REF: Status Parameters
** EXPERIMENTAL
** **
** These integer constants designate various run-time status parameters ** These integer constants designate various run-time status parameters
** that can be returned by [sqlite3_status()]. ** that can be returned by [sqlite3_status()].
@ -5113,14 +5200,15 @@ SQLITE_API SQLITE_EXPERIMENTAL int sqlite3_status(int op, int *pCurrent, int *pH
/* /*
** CAPI3REF: Database Connection Status ** CAPI3REF: Database Connection Status
** EXPERIMENTAL
** **
** ^This interface is used to retrieve runtime status information ** ^This interface is used to retrieve runtime status information
** about a single [database connection]. ^The first argument is the ** about a single [database connection]. ^The first argument is the
** database connection object to be interrogated. ^The second argument ** database connection object to be interrogated. ^The second argument
** is the parameter to interrogate. ^Currently, the only allowed value ** is an integer constant, taken from the set of
** for the second parameter is [SQLITE_DBSTATUS_LOOKASIDE_USED]. ** [SQLITE_DBSTATUS_LOOKASIDE_USED | SQLITE_DBSTATUS_*] macros, that
** Additional options will likely appear in future releases of SQLite. ** determiness the parameter to interrogate. The set of
** [SQLITE_DBSTATUS_LOOKASIDE_USED | SQLITE_DBSTATUS_*] macros is likely
** to grow in future releases of SQLite.
** **
** ^The current value of the requested parameter is written into *pCur ** ^The current value of the requested parameter is written into *pCur
** and the highest instantaneous value is written into *pHiwtr. ^If ** and the highest instantaneous value is written into *pHiwtr. ^If
@ -5129,11 +5217,10 @@ SQLITE_API SQLITE_EXPERIMENTAL int sqlite3_status(int op, int *pCurrent, int *pH
** **
** See also: [sqlite3_status()] and [sqlite3_stmt_status()]. ** See also: [sqlite3_status()] and [sqlite3_stmt_status()].
*/ */
SQLITE_API SQLITE_EXPERIMENTAL int sqlite3_db_status(sqlite3*, int op, int *pCur, int *pHiwtr, int resetFlg); SQLITE_API int sqlite3_db_status(sqlite3*, int op, int *pCur, int *pHiwtr, int resetFlg);
/* /*
** CAPI3REF: Status Parameters for database connections ** CAPI3REF: Status Parameters for database connections
** EXPERIMENTAL
** **
** These constants are the available integer "verbs" that can be passed as ** These constants are the available integer "verbs" that can be passed as
** the second argument to the [sqlite3_db_status()] interface. ** the second argument to the [sqlite3_db_status()] interface.
@ -5148,14 +5235,21 @@ SQLITE_API SQLITE_EXPERIMENTAL int sqlite3_db_status(sqlite3*, int op, int *pCur
** ^(<dt>SQLITE_DBSTATUS_LOOKASIDE_USED</dt> ** ^(<dt>SQLITE_DBSTATUS_LOOKASIDE_USED</dt>
** <dd>This parameter returns the number of lookaside memory slots currently ** <dd>This parameter returns the number of lookaside memory slots currently
** checked out.</dd>)^ ** checked out.</dd>)^
**
** <dt>SQLITE_DBSTATUS_CACHE_USED</dt>
** <dd>^This parameter returns the approximate number of of bytes of heap
** memory used by all pager caches associated with the database connection.
** ^The highwater mark associated with SQLITE_DBSTATUS_CACHE_USED is always 0.
** checked out.</dd>)^
** </dl> ** </dl>
*/ */
#define SQLITE_DBSTATUS_LOOKASIDE_USED 0 #define SQLITE_DBSTATUS_LOOKASIDE_USED 0
#define SQLITE_DBSTATUS_CACHE_USED 1
#define SQLITE_DBSTATUS_MAX 1 /* Largest defined DBSTATUS */
/* /*
** CAPI3REF: Prepared Statement Status ** CAPI3REF: Prepared Statement Status
** EXPERIMENTAL
** **
** ^(Each prepared statement maintains various ** ^(Each prepared statement maintains various
** [SQLITE_STMTSTATUS_SORT | counters] that measure the number ** [SQLITE_STMTSTATUS_SORT | counters] that measure the number
@ -5177,11 +5271,10 @@ SQLITE_API SQLITE_EXPERIMENTAL int sqlite3_db_status(sqlite3*, int op, int *pCur
** **
** See also: [sqlite3_status()] and [sqlite3_db_status()]. ** See also: [sqlite3_status()] and [sqlite3_db_status()].
*/ */
SQLITE_API SQLITE_EXPERIMENTAL int sqlite3_stmt_status(sqlite3_stmt*, int op,int resetFlg); SQLITE_API int sqlite3_stmt_status(sqlite3_stmt*, int op,int resetFlg);
/* /*
** CAPI3REF: Status Parameters for prepared statements ** CAPI3REF: Status Parameters for prepared statements
** EXPERIMENTAL
** **
** These preprocessor macros define integer codes that name counter ** These preprocessor macros define integer codes that name counter
** values associated with the [sqlite3_stmt_status()] interface. ** values associated with the [sqlite3_stmt_status()] interface.
@ -5199,14 +5292,21 @@ SQLITE_API SQLITE_EXPERIMENTAL int sqlite3_stmt_status(sqlite3_stmt*, int op,int
** A non-zero value in this counter may indicate an opportunity to ** A non-zero value in this counter may indicate an opportunity to
** improvement performance through careful use of indices.</dd> ** improvement performance through careful use of indices.</dd>
** **
** <dt>SQLITE_STMTSTATUS_AUTOINDEX</dt>
** <dd>^This is the number of rows inserted into transient indices that
** were created automatically in order to help joins run faster.
** A non-zero value in this counter may indicate an opportunity to
** improvement performance by adding permanent indices that do not
** need to be reinitialized each time the statement is run.</dd>
**
** </dl> ** </dl>
*/ */
#define SQLITE_STMTSTATUS_FULLSCAN_STEP 1 #define SQLITE_STMTSTATUS_FULLSCAN_STEP 1
#define SQLITE_STMTSTATUS_SORT 2 #define SQLITE_STMTSTATUS_SORT 2
#define SQLITE_STMTSTATUS_AUTOINDEX 3
/* /*
** CAPI3REF: Custom Page Cache Object ** CAPI3REF: Custom Page Cache Object
** EXPERIMENTAL
** **
** The sqlite3_pcache type is opaque. It is implemented by ** The sqlite3_pcache type is opaque. It is implemented by
** the pluggable module. The SQLite core has no knowledge of ** the pluggable module. The SQLite core has no knowledge of
@ -5221,7 +5321,6 @@ typedef struct sqlite3_pcache sqlite3_pcache;
/* /*
** CAPI3REF: Application Defined Page Cache. ** CAPI3REF: Application Defined Page Cache.
** KEYWORDS: {page cache} ** KEYWORDS: {page cache}
** EXPERIMENTAL
** **
** ^(The [sqlite3_config]([SQLITE_CONFIG_PCACHE], ...) interface can ** ^(The [sqlite3_config]([SQLITE_CONFIG_PCACHE], ...) interface can
** register an alternative page cache implementation by passing in an ** register an alternative page cache implementation by passing in an
@ -5363,7 +5462,6 @@ struct sqlite3_pcache_methods {
/* /*
** CAPI3REF: Online Backup Object ** CAPI3REF: Online Backup Object
** EXPERIMENTAL
** **
** The sqlite3_backup object records state information about an ongoing ** The sqlite3_backup object records state information about an ongoing
** online backup operation. ^The sqlite3_backup object is created by ** online backup operation. ^The sqlite3_backup object is created by
@ -5376,7 +5474,6 @@ typedef struct sqlite3_backup sqlite3_backup;
/* /*
** CAPI3REF: Online Backup API. ** CAPI3REF: Online Backup API.
** EXPERIMENTAL
** **
** The backup API copies the content of one database into another. ** The backup API copies the content of one database into another.
** It is useful either for creating backups of databases or ** It is useful either for creating backups of databases or
@ -5445,10 +5542,14 @@ typedef struct sqlite3_backup sqlite3_backup;
** [SQLITE_NOMEM], [SQLITE_BUSY], [SQLITE_LOCKED], or an ** [SQLITE_NOMEM], [SQLITE_BUSY], [SQLITE_LOCKED], or an
** [SQLITE_IOERR_ACCESS | SQLITE_IOERR_XXX] extended error code. ** [SQLITE_IOERR_ACCESS | SQLITE_IOERR_XXX] extended error code.
** **
** ^The sqlite3_backup_step() might return [SQLITE_READONLY] if the destination ** ^(The sqlite3_backup_step() might return [SQLITE_READONLY] if
** database was opened read-only or if ** <ol>
** the destination is an in-memory database with a different page size ** <li> the destination database was opened read-only, or
** from the source database. ** <li> the destination database is using write-ahead-log journaling
** and the destination and source page sizes differ, or
** <li> The destination database is an in-memory database and the
** destination and source page sizes differ.
** </ol>)^
** **
** ^If sqlite3_backup_step() cannot obtain a required file-system lock, then ** ^If sqlite3_backup_step() cannot obtain a required file-system lock, then
** the [sqlite3_busy_handler | busy-handler function] ** the [sqlite3_busy_handler | busy-handler function]
@ -5564,7 +5665,6 @@ SQLITE_API int sqlite3_backup_pagecount(sqlite3_backup *p);
/* /*
** CAPI3REF: Unlock Notification ** CAPI3REF: Unlock Notification
** EXPERIMENTAL
** **
** ^When running in shared-cache mode, a database operation may fail with ** ^When running in shared-cache mode, a database operation may fail with
** an [SQLITE_LOCKED] error if the required locks on the shared-cache or ** an [SQLITE_LOCKED] error if the required locks on the shared-cache or
@ -5686,7 +5786,6 @@ SQLITE_API int sqlite3_unlock_notify(
/* /*
** CAPI3REF: String Comparison ** CAPI3REF: String Comparison
** EXPERIMENTAL
** **
** ^The [sqlite3_strnicmp()] API allows applications and extensions to ** ^The [sqlite3_strnicmp()] API allows applications and extensions to
** compare the contents of two buffers containing UTF-8 strings in a ** compare the contents of two buffers containing UTF-8 strings in a
@ -5697,12 +5796,11 @@ SQLITE_API int sqlite3_strnicmp(const char *, const char *, int);
/* /*
** CAPI3REF: Error Logging Interface ** CAPI3REF: Error Logging Interface
** EXPERIMENTAL
** **
** ^The [sqlite3_log()] interface writes a message into the error log ** ^The [sqlite3_log()] interface writes a message into the error log
** established by the [SQLITE_CONFIG_LOG] option to [sqlite3_config()]. ** established by the [SQLITE_CONFIG_LOG] option to [sqlite3_config()].
** ^If logging is enabled, the zFormat string and subsequent arguments are ** ^If logging is enabled, the zFormat string and subsequent arguments are
** passed through to [sqlite3_vmprintf()] to generate the final output string. ** used with [sqlite3_snprintf()] to generate the final output string.
** **
** The sqlite3_log() interface is intended for use by extensions such as ** The sqlite3_log() interface is intended for use by extensions such as
** virtual tables, collating functions, and SQL functions. While there is ** virtual tables, collating functions, and SQL functions. While there is
@ -5719,6 +5817,89 @@ SQLITE_API int sqlite3_strnicmp(const char *, const char *, int);
*/ */
SQLITE_API void sqlite3_log(int iErrCode, const char *zFormat, ...); SQLITE_API void sqlite3_log(int iErrCode, const char *zFormat, ...);
/*
** CAPI3REF: Write-Ahead Log Commit Hook
**
** ^The [sqlite3_wal_hook()] function is used to register a callback that
** will be invoked each time a database connection commits data to a
** [write-ahead log] (i.e. whenever a transaction is committed in
** [journal_mode | journal_mode=WAL mode]).
**
** ^The callback is invoked by SQLite after the commit has taken place and
** the associated write-lock on the database released, so the implementation
** may read, write or [checkpoint] the database as required.
**
** ^The first parameter passed to the callback function when it is invoked
** is a copy of the third parameter passed to sqlite3_wal_hook() when
** registering the callback. ^The second is a copy of the database handle.
** ^The third parameter is the name of the database that was written to -
** either "main" or the name of an [ATTACH]-ed database. ^The fourth parameter
** is the number of pages currently in the write-ahead log file,
** including those that were just committed.
**
** The callback function should normally return [SQLITE_OK]. ^If an error
** code is returned, that error will propagate back up through the
** SQLite code base to cause the statement that provoked the callback
** to report an error, though the commit will have still occurred. If the
** callback returns [SQLITE_ROW] or [SQLITE_DONE], or if it returns a value
** that does not correspond to any valid SQLite error code, the results
** are undefined.
**
** A single database handle may have at most a single write-ahead log callback
** registered at one time. ^Calling [sqlite3_wal_hook()] replaces any
** previously registered write-ahead log callback. ^Note that the
** [sqlite3_wal_autocheckpoint()] interface and the
** [wal_autocheckpoint pragma] both invoke [sqlite3_wal_hook()] and will
** those overwrite any prior [sqlite3_wal_hook()] settings.
*/
SQLITE_API void *sqlite3_wal_hook(
sqlite3*,
int(*)(void *,sqlite3*,const char*,int),
void*
);
/*
** CAPI3REF: Configure an auto-checkpoint
**
** ^The [sqlite3_wal_autocheckpoint(D,N)] is a wrapper around
** [sqlite3_wal_hook()] that causes any database on [database connection] D
** to automatically [checkpoint]
** after committing a transaction if there are N or
** more frames in the [write-ahead log] file. ^Passing zero or
** a negative value as the nFrame parameter disables automatic
** checkpoints entirely.
**
** ^The callback registered by this function replaces any existing callback
** registered using [sqlite3_wal_hook()]. ^Likewise, registering a callback
** using [sqlite3_wal_hook()] disables the automatic checkpoint mechanism
** configured by this function.
**
** ^The [wal_autocheckpoint pragma] can be used to invoke this interface
** from SQL.
**
** ^Every new [database connection] defaults to having the auto-checkpoint
** enabled with a threshold of 1000 pages. The use of this interface
** is only necessary if the default setting is found to be suboptimal
** for a particular application.
*/
SQLITE_API int sqlite3_wal_autocheckpoint(sqlite3 *db, int N);
/*
** CAPI3REF: Checkpoint a database
**
** ^The [sqlite3_wal_checkpoint(D,X)] interface causes database named X
** on [database connection] D to be [checkpointed]. ^If X is NULL or an
** empty string, then a checkpoint is run on all databases of
** connection D. ^If the database connection D is not in
** [WAL | write-ahead log mode] then this interface is a harmless no-op.
**
** ^The [wal_checkpoint pragma] can be used to invoke this interface
** from SQL. ^The [sqlite3_wal_autocheckpoint()] interface and the
** [wal_autocheckpoint pragma] can be used to cause this interface to be
** run whenever the WAL reaches a certain size threshold.
*/
SQLITE_API int sqlite3_wal_checkpoint(sqlite3 *db, const char *zDb);
/* /*
** Undo the hack that converts floating point types to integer for ** Undo the hack that converts floating point types to integer for
** builds on processors without floating point support. ** builds on processors without floating point support.