williamr@4: /* williamr@4: ** 2001 September 15 williamr@4: ** williamr@4: ** The author disclaims copyright to this source code. In place of williamr@4: ** a legal notice, here is a blessing: williamr@4: ** williamr@4: ** May you do good and not evil. williamr@4: ** May you find forgiveness for yourself and forgive others. williamr@4: ** May you share freely, never taking more than you give. williamr@4: ** williamr@4: ************************************************************************* williamr@4: ** This header file defines the interface that the SQLite library williamr@4: ** presents to client programs. If a C-function, structure, datatype, williamr@4: ** or constant definition does not appear in this file, then it is williamr@4: ** not a published API of SQLite, is subject to change without williamr@4: ** notice, and should not be referenced by programs that use SQLite. williamr@4: ** williamr@4: ** Some of the definitions that are in this file are marked as williamr@4: ** "experimental". Experimental interfaces are normally new williamr@4: ** features recently added to SQLite. We do not anticipate changes williamr@4: ** to experimental interfaces but reserve to make minor changes if williamr@4: ** experience from use "in the wild" suggest such changes are prudent. williamr@4: ** williamr@4: ** The official C-language API documentation for SQLite is derived williamr@4: ** from comments in this file. This file is the authoritative source williamr@4: ** on how SQLite interfaces are suppose to operate. williamr@4: ** williamr@4: ** The name of this file under configuration management is "sqlite.h.in". williamr@4: ** The makefile makes some minor changes to this file (such as inserting williamr@4: ** the version number) and changes its name to "sqlite3.h" as williamr@4: ** part of the build process. williamr@4: ** williamr@4: ** @(#) $Id: sqlite.h.in,v 1.400 2008/10/02 14:33:57 drh Exp $ williamr@4: */ williamr@4: #ifndef _SQLITE3_H_ williamr@4: #define _SQLITE3_H_ williamr@4: #include /* Needed for the definition of va_list */ williamr@4: #include williamr@4: williamr@4: #ifdef SQLITE_DLL williamr@4: # define SQLITE_EXPORT EXPORT_C williamr@4: #else williamr@4: # define SQLITE_EXPORT williamr@4: #endif williamr@4: williamr@4: /* williamr@4: ** Make sure we can call this stuff from C++. williamr@4: */ williamr@4: #ifdef __cplusplus williamr@4: extern "C" { williamr@4: #endif williamr@4: williamr@4: williamr@4: /* williamr@4: ** Add the ability to override 'extern' williamr@4: */ williamr@4: #ifndef SQLITE_EXTERN williamr@4: # define SQLITE_EXTERN extern williamr@4: #endif williamr@4: williamr@4: /* williamr@4: ** These no-op macros are used in front of interfaces to mark those williamr@4: ** interfaces as either deprecated or experimental. New applications williamr@4: ** should not use deprecated intrfaces - they are support for backwards williamr@4: ** compatibility only. Application writers should be aware that williamr@4: ** experimental interfaces are subject to change in point releases. williamr@4: ** williamr@4: ** These macros used to resolve to various kinds of compiler magic that williamr@4: ** would generate warning messages when they were used. But that williamr@4: ** compiler magic ended up generating such a flurry of bug reports williamr@4: ** that we have taken it all out and gone back to using simple williamr@4: ** noop macros. williamr@4: */ williamr@4: #define SQLITE_DEPRECATED williamr@4: #define SQLITE_EXPERIMENTAL williamr@4: williamr@4: /* williamr@4: ** Ensure these symbols were not defined by some previous header file. williamr@4: */ williamr@4: #ifdef SQLITE_VERSION williamr@4: # undef SQLITE_VERSION williamr@4: #endif williamr@4: #ifdef SQLITE_VERSION_NUMBER williamr@4: # undef SQLITE_VERSION_NUMBER williamr@4: #endif williamr@4: williamr@4: /* williamr@4: ** CAPI3REF: Compile-Time Library Version Numbers {H10010} williamr@4: ** williamr@4: ** The SQLITE_VERSION and SQLITE_VERSION_NUMBER #defines in williamr@4: ** the sqlite3.h file specify the version of SQLite with which williamr@4: ** that header file is associated. williamr@4: ** williamr@4: ** The "version" of SQLite is a string of the form "X.Y.Z". williamr@4: ** The phrase "alpha" or "beta" might be appended after the Z. williamr@4: ** The X value is major version number always 3 in SQLite3. williamr@4: ** The X value only changes when backwards compatibility is williamr@4: ** broken and we intend to never break backwards compatibility. williamr@4: ** The Y value is the minor version number and only changes when williamr@4: ** there are major feature enhancements that are forwards compatible williamr@4: ** but not backwards compatible. williamr@4: ** The Z value is the release number and is incremented with williamr@4: ** each release but resets back to 0 whenever Y is incremented. williamr@4: ** williamr@4: ** See also: [sqlite3_libversion()] and [sqlite3_libversion_number()]. williamr@4: ** williamr@4: ** INVARIANTS: williamr@4: ** williamr@4: ** {H10011} The SQLITE_VERSION #define in the sqlite3.h header file shall williamr@4: ** evaluate to a string literal that is the SQLite version williamr@4: ** with which the header file is associated. williamr@4: ** williamr@4: ** {H10014} The SQLITE_VERSION_NUMBER #define shall resolve to an integer williamr@4: ** with the value (X*1000000 + Y*1000 + Z) where X, Y, and Z williamr@4: ** are the major version, minor version, and release number. williamr@4: */ williamr@4: #define SQLITE_VERSION "3.6.3" williamr@4: #define SQLITE_VERSION_NUMBER 3006003 williamr@4: williamr@4: /* williamr@4: ** CAPI3REF: Run-Time Library Version Numbers {H10020} williamr@4: ** KEYWORDS: sqlite3_version williamr@4: ** williamr@4: ** These features provide the same information as the [SQLITE_VERSION] williamr@4: ** and [SQLITE_VERSION_NUMBER] #defines in the header, but are associated williamr@4: ** with the library instead of the header file. Cautious programmers might williamr@4: ** include a check in their application to verify that williamr@4: ** sqlite3_libversion_number() always returns the value williamr@4: ** [SQLITE_VERSION_NUMBER]. williamr@4: ** williamr@4: ** The sqlite3_libversion() function returns the same information as is williamr@4: ** in the sqlite3_version[] string constant. The function is provided williamr@4: ** for use in DLLs since DLL users usually do not have direct access to string williamr@4: ** constants within the DLL. williamr@4: ** williamr@4: ** INVARIANTS: williamr@4: ** williamr@4: ** {H10021} The [sqlite3_libversion_number()] interface shall return williamr@4: ** an integer equal to [SQLITE_VERSION_NUMBER]. williamr@4: ** williamr@4: ** {H10022} The [sqlite3_version] string constant shall contain williamr@4: ** the text of the [SQLITE_VERSION] string. williamr@4: ** williamr@4: ** {H10023} The [sqlite3_libversion()] function shall return williamr@4: ** a pointer to the [sqlite3_version] string constant. williamr@4: */ williamr@4: SQLITE_EXTERN const char sqlite3_version[]; williamr@4: IMPORT_C const char *sqlite3_libversion(void); williamr@4: IMPORT_C int sqlite3_libversion_number(void); williamr@4: williamr@4: /* williamr@4: ** CAPI3REF: Test To See If The Library Is Threadsafe {H10100} williamr@4: ** williamr@4: ** SQLite can be compiled with or without mutexes. When williamr@4: ** the [SQLITE_THREADSAFE] C preprocessor macro 1 or 2, mutexes williamr@4: ** are enabled and SQLite is threadsafe. When the williamr@4: ** [SQLITE_THREADSAFE] macro is 0, williamr@4: ** the mutexes are omitted. Without the mutexes, it is not safe williamr@4: ** to use SQLite concurrently from more than one thread. williamr@4: ** williamr@4: ** Enabling mutexes incurs a measurable performance penalty. williamr@4: ** So if speed is of utmost importance, it makes sense to disable williamr@4: ** the mutexes. But for maximum safety, mutexes should be enabled. williamr@4: ** The default behavior is for mutexes to be enabled. williamr@4: ** williamr@4: ** This interface can be used by a program to make sure that the williamr@4: ** version of SQLite that it is linking against was compiled with williamr@4: ** the desired setting of the [SQLITE_THREADSAFE] macro. williamr@4: ** williamr@4: ** This interface only reports on the compile-time mutex setting williamr@4: ** of the [SQLITE_THREADSAFE] flag. If SQLite is compiled with williamr@4: ** SQLITE_THREADSAFE=1 then mutexes are enabled by default but williamr@4: ** can be fully or partially disabled using a call to [sqlite3_config()] williamr@4: ** with the verbs [SQLITE_CONFIG_SINGLETHREAD], [SQLITE_CONFIG_MULTITHREAD], williamr@4: ** or [SQLITE_CONFIG_MUTEX]. The return value of this function shows williamr@4: ** only the default compile-time setting, not any run-time changes williamr@4: ** to that setting. williamr@4: ** williamr@4: ** See the [threading mode] documentation for additional information. williamr@4: ** williamr@4: ** INVARIANTS: williamr@4: ** williamr@4: ** {H10101} The [sqlite3_threadsafe()] function shall return nonzero if williamr@4: ** and only if williamr@4: ** SQLite was compiled with the its mutexes enabled by default. williamr@4: ** williamr@4: ** {H10102} The value returned by the [sqlite3_threadsafe()] function williamr@4: ** shall not change when mutex setting are modified at williamr@4: ** runtime using the [sqlite3_config()] interface and williamr@4: ** especially the [SQLITE_CONFIG_SINGLETHREAD], williamr@4: ** [SQLITE_CONFIG_MULTITHREAD], [SQLITE_CONFIG_SERIALIZED], williamr@4: ** and [SQLITE_CONFIG_MUTEX] verbs. williamr@4: */ williamr@4: IMPORT_C int sqlite3_threadsafe(void); williamr@4: williamr@4: /* williamr@4: ** CAPI3REF: Database Connection Handle {H12000} williamr@4: ** KEYWORDS: {database connection} {database connections} williamr@4: ** williamr@4: ** Each open SQLite database is represented by a pointer to an instance of williamr@4: ** the opaque structure named "sqlite3". It is useful to think of an sqlite3 williamr@4: ** pointer as an object. The [sqlite3_open()], [sqlite3_open16()], and williamr@4: ** [sqlite3_open_v2()] interfaces are its constructors, and [sqlite3_close()] williamr@4: ** is its destructor. There are many other interfaces (such as williamr@4: ** [sqlite3_prepare_v2()], [sqlite3_create_function()], and williamr@4: ** [sqlite3_busy_timeout()] to name but three) that are methods on an williamr@4: ** sqlite3 object. williamr@4: */ williamr@4: typedef struct sqlite3 sqlite3; williamr@4: williamr@4: /* williamr@4: ** CAPI3REF: 64-Bit Integer Types {H10200} williamr@4: ** KEYWORDS: sqlite_int64 sqlite_uint64 williamr@4: ** williamr@4: ** Because there is no cross-platform way to specify 64-bit integer types williamr@4: ** SQLite includes typedefs for 64-bit signed and unsigned integers. williamr@4: ** williamr@4: ** The sqlite3_int64 and sqlite3_uint64 are the preferred type definitions. williamr@4: ** The sqlite_int64 and sqlite_uint64 types are supported for backwards williamr@4: ** compatibility only. williamr@4: ** williamr@4: ** INVARIANTS: williamr@4: ** williamr@4: ** {H10201} The [sqlite_int64] and [sqlite3_int64] type shall specify williamr@4: ** a 64-bit signed integer. williamr@4: ** williamr@4: ** {H10202} The [sqlite_uint64] and [sqlite3_uint64] type shall specify williamr@4: ** a 64-bit unsigned integer. williamr@4: */ williamr@4: #ifdef SQLITE_INT64_TYPE williamr@4: typedef SQLITE_INT64_TYPE sqlite_int64; williamr@4: typedef unsigned SQLITE_INT64_TYPE sqlite_uint64; williamr@4: #elif defined(_MSC_VER) || defined(__BORLANDC__) williamr@4: typedef __int64 sqlite_int64; williamr@4: typedef unsigned __int64 sqlite_uint64; williamr@4: #else williamr@4: typedef long long int sqlite_int64; williamr@4: typedef unsigned long long int sqlite_uint64; williamr@4: #endif williamr@4: typedef sqlite_int64 sqlite3_int64; williamr@4: typedef sqlite_uint64 sqlite3_uint64; williamr@4: williamr@4: /* williamr@4: ** If compiling for a processor that lacks floating point support, williamr@4: ** substitute integer for floating-point. williamr@4: */ williamr@4: #ifdef SQLITE_OMIT_FLOATING_POINT williamr@4: # define double sqlite3_int64 williamr@4: #endif williamr@4: williamr@4: /* williamr@4: ** CAPI3REF: Closing A Database Connection {H12010} williamr@4: ** williamr@4: ** This routine is the destructor for the [sqlite3] object. williamr@4: ** williamr@4: ** Applications should [sqlite3_finalize | finalize] all [prepared statements] williamr@4: ** and [sqlite3_blob_close | close] all [BLOB handles] associated with williamr@4: ** the [sqlite3] object prior to attempting to close the object. williamr@4: ** The [sqlite3_next_stmt()] interface can be used to locate all williamr@4: ** [prepared statements] associated with a [database connection] if desired. williamr@4: ** Typical code might look like this: williamr@4: ** williamr@4: **
williamr@4: ** sqlite3_stmt *pStmt;
williamr@4: ** while( (pStmt = sqlite3_next_stmt(db, 0))!=0 ){
williamr@4: **     sqlite3_finalize(pStmt);
williamr@4: ** }
williamr@4: ** 
williamr@4: ** williamr@4: ** If [sqlite3_close()] is invoked while a transaction is open, williamr@4: ** the transaction is automatically rolled back. williamr@4: ** williamr@4: ** INVARIANTS: williamr@4: ** williamr@4: ** {H12011} A successful call to [sqlite3_close(C)] shall destroy the williamr@4: ** [database connection] object C. williamr@4: ** williamr@4: ** {H12012} A successful call to [sqlite3_close(C)] shall return SQLITE_OK. williamr@4: ** williamr@4: ** {H12013} A successful call to [sqlite3_close(C)] shall release all williamr@4: ** memory and system resources associated with [database connection] williamr@4: ** C. williamr@4: ** williamr@4: ** {H12014} A call to [sqlite3_close(C)] on a [database connection] C that williamr@4: ** has one or more open [prepared statements] shall fail with williamr@4: ** an [SQLITE_BUSY] error code. williamr@4: ** williamr@4: ** {H12015} A call to [sqlite3_close(C)] where C is a NULL pointer shall williamr@4: ** return SQLITE_OK. williamr@4: ** williamr@4: ** {H12019} When [sqlite3_close(C)] is invoked on a [database connection] C williamr@4: ** that has a pending transaction, the transaction shall be williamr@4: ** rolled back. williamr@4: ** williamr@4: ** ASSUMPTIONS: williamr@4: ** williamr@4: ** {A12016} The C parameter to [sqlite3_close(C)] must be either a NULL williamr@4: ** pointer or an [sqlite3] object pointer obtained williamr@4: ** from [sqlite3_open()], [sqlite3_open16()], or williamr@4: ** [sqlite3_open_v2()], and not previously closed. williamr@4: */ williamr@4: IMPORT_C int sqlite3_close(sqlite3 *); williamr@4: williamr@4: /* williamr@4: ** The type for a callback function. williamr@4: ** This is legacy and deprecated. It is included for historical williamr@4: ** compatibility and is not documented. williamr@4: */ williamr@4: typedef int (*sqlite3_callback)(void*,int,char**, char**); williamr@4: williamr@4: /* williamr@4: ** CAPI3REF: One-Step Query Execution Interface {H12100} williamr@4: ** williamr@4: ** The sqlite3_exec() interface is a convenient way of running one or more williamr@4: ** SQL statements without having to write a lot of C code. The UTF-8 encoded williamr@4: ** SQL statements are passed in as the second parameter to sqlite3_exec(). williamr@4: ** The statements are evaluated one by one until either an error or williamr@4: ** an interrupt is encountered, or until they are all done. The 3rd parameter williamr@4: ** is an optional callback that is invoked once for each row of any query williamr@4: ** results produced by the SQL statements. The 5th parameter tells where williamr@4: ** to write any error messages. williamr@4: ** williamr@4: ** The error message passed back through the 5th parameter is held williamr@4: ** in memory obtained from [sqlite3_malloc()]. To avoid a memory leak, williamr@4: ** the calling application should call [sqlite3_free()] on any error williamr@4: ** message returned through the 5th parameter when it has finished using williamr@4: ** the error message. williamr@4: ** williamr@4: ** If the SQL statement in the 2nd parameter is NULL or an empty string williamr@4: ** or a string containing only whitespace and comments, then no SQL williamr@4: ** statements are evaluated and the database is not changed. williamr@4: ** williamr@4: ** The sqlite3_exec() interface is implemented in terms of williamr@4: ** [sqlite3_prepare_v2()], [sqlite3_step()], and [sqlite3_finalize()]. williamr@4: ** The sqlite3_exec() routine does nothing to the database that cannot be done williamr@4: ** by [sqlite3_prepare_v2()], [sqlite3_step()], and [sqlite3_finalize()]. williamr@4: ** williamr@4: ** INVARIANTS: williamr@4: ** williamr@4: ** {H12101} A successful invocation of [sqlite3_exec(D,S,C,A,E)] williamr@4: ** shall sequentially evaluate all of the UTF-8 encoded, williamr@4: ** semicolon-separated SQL statements in the zero-terminated williamr@4: ** string S within the context of the [database connection] D. williamr@4: ** williamr@4: ** {H12102} If the S parameter to [sqlite3_exec(D,S,C,A,E)] is NULL then williamr@4: ** the actions of the interface shall be the same as if the williamr@4: ** S parameter were an empty string. williamr@4: ** williamr@4: ** {H12104} The return value of [sqlite3_exec()] shall be [SQLITE_OK] if all williamr@4: ** SQL statements run successfully and to completion. williamr@4: ** williamr@4: ** {H12105} The return value of [sqlite3_exec()] shall be an appropriate williamr@4: ** non-zero [error code] if any SQL statement fails. williamr@4: ** williamr@4: ** {H12107} If one or more of the SQL statements handed to [sqlite3_exec()] williamr@4: ** return results and the 3rd parameter is not NULL, then williamr@4: ** the callback function specified by the 3rd parameter shall be williamr@4: ** invoked once for each row of result. williamr@4: ** williamr@4: ** {H12110} If the callback returns a non-zero value then [sqlite3_exec()] williamr@4: ** shall abort the SQL statement it is currently evaluating, williamr@4: ** skip all subsequent SQL statements, and return [SQLITE_ABORT]. williamr@4: ** williamr@4: ** {H12113} The [sqlite3_exec()] routine shall pass its 4th parameter through williamr@4: ** as the 1st parameter of the callback. williamr@4: ** williamr@4: ** {H12116} The [sqlite3_exec()] routine shall set the 2nd parameter of its williamr@4: ** callback to be the number of columns in the current row of williamr@4: ** result. williamr@4: ** williamr@4: ** {H12119} The [sqlite3_exec()] routine shall set the 3rd parameter of its williamr@4: ** callback to be an array of pointers to strings holding the williamr@4: ** values for each column in the current result set row as williamr@4: ** obtained from [sqlite3_column_text()]. williamr@4: ** williamr@4: ** {H12122} The [sqlite3_exec()] routine shall set the 4th parameter of its williamr@4: ** callback to be an array of pointers to strings holding the williamr@4: ** names of result columns as obtained from [sqlite3_column_name()]. williamr@4: ** williamr@4: ** {H12125} If the 3rd parameter to [sqlite3_exec()] is NULL then williamr@4: ** [sqlite3_exec()] shall silently discard query results. williamr@4: ** williamr@4: ** {H12131} If an error occurs while parsing or evaluating any of the SQL williamr@4: ** statements in the S parameter of [sqlite3_exec(D,S,C,A,E)] and if williamr@4: ** the E parameter is not NULL, then [sqlite3_exec()] shall store williamr@4: ** in *E an appropriate error message written into memory obtained williamr@4: ** from [sqlite3_malloc()]. williamr@4: ** williamr@4: ** {H12134} The [sqlite3_exec(D,S,C,A,E)] routine shall set the value of williamr@4: ** *E to NULL if E is not NULL and there are no errors. williamr@4: ** williamr@4: ** {H12137} The [sqlite3_exec(D,S,C,A,E)] function shall set the [error code] williamr@4: ** and message accessible via [sqlite3_errcode()], williamr@4: ** [sqlite3_errmsg()], and [sqlite3_errmsg16()]. williamr@4: ** williamr@4: ** {H12138} If the S parameter to [sqlite3_exec(D,S,C,A,E)] is NULL or an williamr@4: ** empty string or contains nothing other than whitespace, comments, williamr@4: ** and/or semicolons, then results of [sqlite3_errcode()], williamr@4: ** [sqlite3_errmsg()], and [sqlite3_errmsg16()] williamr@4: ** shall reset to indicate no errors. williamr@4: ** williamr@4: ** ASSUMPTIONS: williamr@4: ** williamr@4: ** {A12141} The first parameter to [sqlite3_exec()] must be an valid and open williamr@4: ** [database connection]. williamr@4: ** williamr@4: ** {A12142} The database connection must not be closed while williamr@4: ** [sqlite3_exec()] is running. williamr@4: ** williamr@4: ** {A12143} The calling function should use [sqlite3_free()] to free williamr@4: ** the memory that *errmsg is left pointing at once the error williamr@4: ** message is no longer needed. williamr@4: ** williamr@4: ** {A12145} The SQL statement text in the 2nd parameter to [sqlite3_exec()] williamr@4: ** must remain unchanged while [sqlite3_exec()] is running. williamr@4: */ williamr@4: IMPORT_C int sqlite3_exec( williamr@4: sqlite3*, /* An open database */ williamr@4: const char *sql, /* SQL to be evaluated */ williamr@4: int (*callback)(void*,int,char**,char**), /* Callback function */ williamr@4: void *, /* 1st argument to callback */ williamr@4: char **errmsg /* Error msg written here */ williamr@4: ); williamr@4: williamr@4: /* williamr@4: ** CAPI3REF: Result Codes {H10210} williamr@4: ** KEYWORDS: SQLITE_OK {error code} {error codes} williamr@4: ** KEYWORDS: {result code} {result codes} williamr@4: ** williamr@4: ** Many SQLite functions return an integer result code from the set shown williamr@4: ** here in order to indicates success or failure. williamr@4: ** williamr@4: ** New error codes may be added in future versions of SQLite. williamr@4: ** williamr@4: ** See also: [SQLITE_IOERR_READ | extended result codes] williamr@4: */ williamr@4: #define SQLITE_OK 0 /* Successful result */ williamr@4: /* beginning-of-error-codes */ williamr@4: #define SQLITE_ERROR 1 /* SQL error or missing database */ williamr@4: #define SQLITE_INTERNAL 2 /* Internal logic error in SQLite */ williamr@4: #define SQLITE_PERM 3 /* Access permission denied */ williamr@4: #define SQLITE_ABORT 4 /* Callback routine requested an abort */ williamr@4: #define SQLITE_BUSY 5 /* The database file is locked */ williamr@4: #define SQLITE_LOCKED 6 /* A table in the database is locked */ williamr@4: #define SQLITE_NOMEM 7 /* A malloc() failed */ williamr@4: #define SQLITE_READONLY 8 /* Attempt to write a readonly database */ williamr@4: #define SQLITE_INTERRUPT 9 /* Operation terminated by sqlite3_interrupt()*/ williamr@4: #define SQLITE_IOERR 10 /* Some kind of disk I/O error occurred */ williamr@4: #define SQLITE_CORRUPT 11 /* The database disk image is malformed */ williamr@4: #define SQLITE_NOTFOUND 12 /* NOT USED. Table or record not found */ williamr@4: #define SQLITE_FULL 13 /* Insertion failed because database is full */ williamr@4: #define SQLITE_CANTOPEN 14 /* Unable to open the database file */ williamr@4: #define SQLITE_PROTOCOL 15 /* NOT USED. Database lock protocol error */ williamr@4: #define SQLITE_EMPTY 16 /* Database is empty */ williamr@4: #define SQLITE_SCHEMA 17 /* The database schema changed */ williamr@4: #define SQLITE_TOOBIG 18 /* String or BLOB exceeds size limit */ williamr@4: #define SQLITE_CONSTRAINT 19 /* Abort due to constraint violation */ williamr@4: #define SQLITE_MISMATCH 20 /* Data type mismatch */ williamr@4: #define SQLITE_MISUSE 21 /* Library used incorrectly */ williamr@4: #define SQLITE_NOLFS 22 /* Uses OS features not supported on host */ williamr@4: #define SQLITE_AUTH 23 /* Authorization denied */ williamr@4: #define SQLITE_FORMAT 24 /* Auxiliary database format error */ williamr@4: #define SQLITE_RANGE 25 /* 2nd parameter to sqlite3_bind out of range */ williamr@4: #define SQLITE_NOTADB 26 /* File opened that is not a database file */ williamr@4: #define SQLITE_ROW 100 /* sqlite3_step() has another row ready */ williamr@4: #define SQLITE_DONE 101 /* sqlite3_step() has finished executing */ williamr@4: /* end-of-error-codes */ williamr@4: williamr@4: /* williamr@4: ** CAPI3REF: Extended Result Codes {H10220} williamr@4: ** KEYWORDS: {extended error code} {extended error codes} williamr@4: ** KEYWORDS: {extended result code} {extended result codes} williamr@4: ** williamr@4: ** In its default configuration, SQLite API routines return one of 26 integer williamr@4: ** [SQLITE_OK | result codes]. However, experience has shown that many of williamr@4: ** these result codes are too coarse-grained. They do not provide as williamr@4: ** much information about problems as programmers might like. In an effort to williamr@4: ** address this, newer versions of SQLite (version 3.3.8 and later) include williamr@4: ** support for additional result codes that provide more detailed information williamr@4: ** about errors. The extended result codes are enabled or disabled williamr@4: ** on a per database connection basis using the williamr@4: ** [sqlite3_extended_result_codes()] API. williamr@4: ** williamr@4: ** Some of the available extended result codes are listed here. williamr@4: ** One may expect the number of extended result codes will be expand williamr@4: ** over time. Software that uses extended result codes should expect williamr@4: ** to see new result codes in future releases of SQLite. williamr@4: ** williamr@4: ** The SQLITE_OK result code will never be extended. It will always williamr@4: ** be exactly zero. williamr@4: ** williamr@4: ** INVARIANTS: williamr@4: ** williamr@4: ** {H10223} The symbolic name for an extended result code shall contains williamr@4: ** a related primary result code as a prefix. williamr@4: ** williamr@4: ** {H10224} Primary result code names shall contain a single "_" character. williamr@4: ** williamr@4: ** {H10225} Extended result code names shall contain two or more "_" characters. williamr@4: ** williamr@4: ** {H10226} The numeric value of an extended result code shall contain the williamr@4: ** numeric value of its corresponding primary result code in williamr@4: ** its least significant 8 bits. williamr@4: */ williamr@4: #define SQLITE_IOERR_READ (SQLITE_IOERR | (1<<8)) williamr@4: #define SQLITE_IOERR_SHORT_READ (SQLITE_IOERR | (2<<8)) williamr@4: #define SQLITE_IOERR_WRITE (SQLITE_IOERR | (3<<8)) williamr@4: #define SQLITE_IOERR_FSYNC (SQLITE_IOERR | (4<<8)) williamr@4: #define SQLITE_IOERR_DIR_FSYNC (SQLITE_IOERR | (5<<8)) williamr@4: #define SQLITE_IOERR_TRUNCATE (SQLITE_IOERR | (6<<8)) williamr@4: #define SQLITE_IOERR_FSTAT (SQLITE_IOERR | (7<<8)) williamr@4: #define SQLITE_IOERR_UNLOCK (SQLITE_IOERR | (8<<8)) williamr@4: #define SQLITE_IOERR_RDLOCK (SQLITE_IOERR | (9<<8)) williamr@4: #define SQLITE_IOERR_DELETE (SQLITE_IOERR | (10<<8)) williamr@4: #define SQLITE_IOERR_BLOCKED (SQLITE_IOERR | (11<<8)) williamr@4: #define SQLITE_IOERR_NOMEM (SQLITE_IOERR | (12<<8)) williamr@4: #define SQLITE_IOERR_ACCESS (SQLITE_IOERR | (13<<8)) williamr@4: #define SQLITE_IOERR_CHECKRESERVEDLOCK (SQLITE_IOERR | (14<<8)) williamr@4: #define SQLITE_IOERR_LOCK (SQLITE_IOERR | (15<<8)) williamr@4: williamr@4: /* williamr@4: ** CAPI3REF: Flags For File Open Operations {H10230} williamr@4: ** williamr@4: ** These bit values are intended for use in the williamr@4: ** 3rd parameter to the [sqlite3_open_v2()] interface and williamr@4: ** in the 4th parameter to the xOpen method of the williamr@4: ** [sqlite3_vfs] object. williamr@4: */ williamr@4: #define SQLITE_OPEN_READONLY 0x00000001 williamr@4: #define SQLITE_OPEN_READWRITE 0x00000002 williamr@4: #define SQLITE_OPEN_CREATE 0x00000004 williamr@4: #define SQLITE_OPEN_DELETEONCLOSE 0x00000008 williamr@4: #define SQLITE_OPEN_EXCLUSIVE 0x00000010 williamr@4: #define SQLITE_OPEN_MAIN_DB 0x00000100 williamr@4: #define SQLITE_OPEN_TEMP_DB 0x00000200 williamr@4: #define SQLITE_OPEN_TRANSIENT_DB 0x00000400 williamr@4: #define SQLITE_OPEN_MAIN_JOURNAL 0x00000800 williamr@4: #define SQLITE_OPEN_TEMP_JOURNAL 0x00001000 williamr@4: #define SQLITE_OPEN_SUBJOURNAL 0x00002000 williamr@4: #define SQLITE_OPEN_MASTER_JOURNAL 0x00004000 williamr@4: #define SQLITE_OPEN_NOMUTEX 0x00008000 williamr@4: #define SQLITE_OPEN_FULLMUTEX 0x00010000 williamr@4: williamr@4: /* williamr@4: ** CAPI3REF: Device Characteristics {H10240} williamr@4: ** williamr@4: ** The xDeviceCapabilities method of the [sqlite3_io_methods] williamr@4: ** object returns an integer which is a vector of the these williamr@4: ** bit values expressing I/O characteristics of the mass storage williamr@4: ** device that holds the file that the [sqlite3_io_methods] williamr@4: ** refers to. williamr@4: ** williamr@4: ** The SQLITE_IOCAP_ATOMIC property means that all writes of williamr@4: ** any size are atomic. The SQLITE_IOCAP_ATOMICnnn values williamr@4: ** mean that writes of blocks that are nnn bytes in size and williamr@4: ** are aligned to an address which is an integer multiple of williamr@4: ** nnn are atomic. The SQLITE_IOCAP_SAFE_APPEND value means williamr@4: ** that when data is appended to a file, the data is appended williamr@4: ** first then the size of the file is extended, never the other williamr@4: ** way around. The SQLITE_IOCAP_SEQUENTIAL property means that williamr@4: ** information is written to disk in the same order as calls williamr@4: ** to xWrite(). williamr@4: */ williamr@4: #define SQLITE_IOCAP_ATOMIC 0x00000001 williamr@4: #define SQLITE_IOCAP_ATOMIC512 0x00000002 williamr@4: #define SQLITE_IOCAP_ATOMIC1K 0x00000004 williamr@4: #define SQLITE_IOCAP_ATOMIC2K 0x00000008 williamr@4: #define SQLITE_IOCAP_ATOMIC4K 0x00000010 williamr@4: #define SQLITE_IOCAP_ATOMIC8K 0x00000020 williamr@4: #define SQLITE_IOCAP_ATOMIC16K 0x00000040 williamr@4: #define SQLITE_IOCAP_ATOMIC32K 0x00000080 williamr@4: #define SQLITE_IOCAP_ATOMIC64K 0x00000100 williamr@4: #define SQLITE_IOCAP_SAFE_APPEND 0x00000200 williamr@4: #define SQLITE_IOCAP_SEQUENTIAL 0x00000400 williamr@4: williamr@4: /* williamr@4: ** CAPI3REF: File Locking Levels {H10250} williamr@4: ** williamr@4: ** SQLite uses one of these integer values as the second williamr@4: ** argument to calls it makes to the xLock() and xUnlock() methods williamr@4: ** of an [sqlite3_io_methods] object. williamr@4: */ williamr@4: #define SQLITE_LOCK_NONE 0 williamr@4: #define SQLITE_LOCK_SHARED 1 williamr@4: #define SQLITE_LOCK_RESERVED 2 williamr@4: #define SQLITE_LOCK_PENDING 3 williamr@4: #define SQLITE_LOCK_EXCLUSIVE 4 williamr@4: williamr@4: /* williamr@4: ** CAPI3REF: Synchronization Type Flags {H10260} williamr@4: ** williamr@4: ** When SQLite invokes the xSync() method of an williamr@4: ** [sqlite3_io_methods] object it uses a combination of williamr@4: ** these integer values as the second argument. williamr@4: ** williamr@4: ** When the SQLITE_SYNC_DATAONLY flag is used, it means that the williamr@4: ** sync operation only needs to flush data to mass storage. Inode williamr@4: ** information need not be flushed. The SQLITE_SYNC_NORMAL flag means williamr@4: ** to use normal fsync() semantics. The SQLITE_SYNC_FULL flag means williamr@4: ** to use Mac OS-X style fullsync instead of fsync(). williamr@4: */ williamr@4: #define SQLITE_SYNC_NORMAL 0x00002 williamr@4: #define SQLITE_SYNC_FULL 0x00003 williamr@4: #define SQLITE_SYNC_DATAONLY 0x00010 williamr@4: williamr@4: /* williamr@4: ** CAPI3REF: OS Interface Open File Handle {H11110} williamr@4: ** williamr@4: ** An [sqlite3_file] object represents an open file in the OS williamr@4: ** interface layer. Individual OS interface implementations will williamr@4: ** want to subclass this object by appending additional fields williamr@4: ** for their own use. The pMethods entry is a pointer to an williamr@4: ** [sqlite3_io_methods] object that defines methods for performing williamr@4: ** I/O operations on the open file. williamr@4: */ williamr@4: typedef struct sqlite3_file sqlite3_file; williamr@4: struct sqlite3_file { williamr@4: const struct sqlite3_io_methods *pMethods; /* Methods for an open file */ williamr@4: }; williamr@4: williamr@4: /* williamr@4: ** CAPI3REF: OS Interface File Virtual Methods Object {H11120} williamr@4: ** williamr@4: ** Every file opened by the [sqlite3_vfs] xOpen method populates an williamr@4: ** [sqlite3_file] object (or, more commonly, a subclass of the williamr@4: ** [sqlite3_file] object) with a pointer to an instance of this object. williamr@4: ** This object defines the methods used to perform various operations williamr@4: ** against the open file represented by the [sqlite3_file] object. williamr@4: ** williamr@4: ** The flags argument to xSync may be one of [SQLITE_SYNC_NORMAL] or williamr@4: ** [SQLITE_SYNC_FULL]. The first choice is the normal fsync(). williamr@4: ** The second choice is a Mac OS-X style fullsync. The [SQLITE_SYNC_DATAONLY] williamr@4: ** flag may be ORed in to indicate that only the data of the file williamr@4: ** and not its inode needs to be synced. williamr@4: ** williamr@4: ** The integer values to xLock() and xUnlock() are one of williamr@4: **
    williamr@4: **
  • [SQLITE_LOCK_NONE], williamr@4: **
  • [SQLITE_LOCK_SHARED], williamr@4: **
  • [SQLITE_LOCK_RESERVED], williamr@4: **
  • [SQLITE_LOCK_PENDING], or williamr@4: **
  • [SQLITE_LOCK_EXCLUSIVE]. williamr@4: **
williamr@4: ** xLock() increases the lock. xUnlock() decreases the lock. williamr@4: ** The xCheckReservedLock() method checks whether any database connection, williamr@4: ** either in this process or in some other process, is holding a RESERVED, williamr@4: ** PENDING, or EXCLUSIVE lock on the file. It returns true williamr@4: ** if such a lock exists and false otherwise. williamr@4: ** williamr@4: ** The xFileControl() method is a generic interface that allows custom williamr@4: ** VFS implementations to directly control an open file using the williamr@4: ** [sqlite3_file_control()] interface. The second "op" argument is an williamr@4: ** integer opcode. The third argument is a generic pointer intended to williamr@4: ** point to a structure that may contain arguments or space in which to williamr@4: ** write return values. Potential uses for xFileControl() might be williamr@4: ** functions to enable blocking locks with timeouts, to change the williamr@4: ** locking strategy (for example to use dot-file locks), to inquire williamr@4: ** about the status of a lock, or to break stale locks. The SQLite williamr@4: ** core reserves all opcodes less than 100 for its own use. williamr@4: ** A [SQLITE_FCNTL_LOCKSTATE | list of opcodes] less than 100 is available. williamr@4: ** Applications that define a custom xFileControl method should use opcodes williamr@4: ** greater than 100 to avoid conflicts. williamr@4: ** williamr@4: ** The xSectorSize() method returns the sector size of the williamr@4: ** device that underlies the file. The sector size is the williamr@4: ** minimum write that can be performed without disturbing williamr@4: ** other bytes in the file. The xDeviceCharacteristics() williamr@4: ** method returns a bit vector describing behaviors of the williamr@4: ** underlying device: williamr@4: ** williamr@4: **
    williamr@4: **
  • [SQLITE_IOCAP_ATOMIC] williamr@4: **
  • [SQLITE_IOCAP_ATOMIC512] williamr@4: **
  • [SQLITE_IOCAP_ATOMIC1K] williamr@4: **
  • [SQLITE_IOCAP_ATOMIC2K] williamr@4: **
  • [SQLITE_IOCAP_ATOMIC4K] williamr@4: **
  • [SQLITE_IOCAP_ATOMIC8K] williamr@4: **
  • [SQLITE_IOCAP_ATOMIC16K] williamr@4: **
  • [SQLITE_IOCAP_ATOMIC32K] williamr@4: **
  • [SQLITE_IOCAP_ATOMIC64K] williamr@4: **
  • [SQLITE_IOCAP_SAFE_APPEND] williamr@4: **
  • [SQLITE_IOCAP_SEQUENTIAL] williamr@4: **
williamr@4: ** williamr@4: ** The SQLITE_IOCAP_ATOMIC property means that all writes of williamr@4: ** any size are atomic. The SQLITE_IOCAP_ATOMICnnn values williamr@4: ** mean that writes of blocks that are nnn bytes in size and williamr@4: ** are aligned to an address which is an integer multiple of williamr@4: ** nnn are atomic. The SQLITE_IOCAP_SAFE_APPEND value means williamr@4: ** that when data is appended to a file, the data is appended williamr@4: ** first then the size of the file is extended, never the other williamr@4: ** way around. The SQLITE_IOCAP_SEQUENTIAL property means that williamr@4: ** information is written to disk in the same order as calls williamr@4: ** to xWrite(). williamr@4: */ williamr@4: typedef struct sqlite3_io_methods sqlite3_io_methods; williamr@4: struct sqlite3_io_methods { williamr@4: int iVersion; williamr@4: int (*xClose)(sqlite3_file*); williamr@4: int (*xRead)(sqlite3_file*, void*, int iAmt, sqlite3_int64 iOfst); williamr@4: int (*xWrite)(sqlite3_file*, const void*, int iAmt, sqlite3_int64 iOfst); williamr@4: int (*xTruncate)(sqlite3_file*, sqlite3_int64 size); williamr@4: int (*xSync)(sqlite3_file*, int flags); williamr@4: int (*xFileSize)(sqlite3_file*, sqlite3_int64 *pSize); williamr@4: int (*xLock)(sqlite3_file*, int); williamr@4: int (*xUnlock)(sqlite3_file*, int); williamr@4: int (*xCheckReservedLock)(sqlite3_file*, int *pResOut); williamr@4: int (*xFileControl)(sqlite3_file*, int op, void *pArg); williamr@4: int (*xSectorSize)(sqlite3_file*); williamr@4: int (*xDeviceCharacteristics)(sqlite3_file*); williamr@4: /* Additional methods may be added in future releases */ williamr@4: }; williamr@4: williamr@4: /* williamr@4: ** CAPI3REF: Standard File Control Opcodes {H11310} williamr@4: ** williamr@4: ** These integer constants are opcodes for the xFileControl method williamr@4: ** of the [sqlite3_io_methods] object and for the [sqlite3_file_control()] williamr@4: ** interface. williamr@4: ** williamr@4: ** The [SQLITE_FCNTL_LOCKSTATE] opcode is used for debugging. This williamr@4: ** opcode causes the xFileControl method to write the current state of williamr@4: ** the lock (one of [SQLITE_LOCK_NONE], [SQLITE_LOCK_SHARED], williamr@4: ** [SQLITE_LOCK_RESERVED], [SQLITE_LOCK_PENDING], or [SQLITE_LOCK_EXCLUSIVE]) williamr@4: ** into an integer that the pArg argument points to. This capability williamr@4: ** is used during testing and only needs to be supported when SQLITE_TEST williamr@4: ** is defined. williamr@4: */ williamr@4: #define SQLITE_FCNTL_LOCKSTATE 1 williamr@4: williamr@4: /* williamr@4: ** CAPI3REF: Mutex Handle {H17110} williamr@4: ** williamr@4: ** The mutex module within SQLite defines [sqlite3_mutex] to be an williamr@4: ** abstract type for a mutex object. The SQLite core never looks williamr@4: ** at the internal representation of an [sqlite3_mutex]. It only williamr@4: ** deals with pointers to the [sqlite3_mutex] object. williamr@4: ** williamr@4: ** Mutexes are created using [sqlite3_mutex_alloc()]. williamr@4: */ williamr@4: typedef struct sqlite3_mutex sqlite3_mutex; williamr@4: williamr@4: /* williamr@4: ** CAPI3REF: OS Interface Object {H11140} williamr@4: ** williamr@4: ** An instance of the sqlite3_vfs object defines the interface between williamr@4: ** the SQLite core and the underlying operating system. The "vfs" williamr@4: ** in the name of the object stands for "virtual file system". williamr@4: ** williamr@4: ** The value of the iVersion field is initially 1 but may be larger in williamr@4: ** future versions of SQLite. Additional fields may be appended to this williamr@4: ** object when the iVersion value is increased. Note that the structure williamr@4: ** of the sqlite3_vfs object changes in the transaction between williamr@4: ** SQLite version 3.5.9 and 3.6.0 and yet the iVersion field was not williamr@4: ** modified. williamr@4: ** williamr@4: ** The szOsFile field is the size of the subclassed [sqlite3_file] williamr@4: ** structure used by this VFS. mxPathname is the maximum length of williamr@4: ** a pathname in this VFS. williamr@4: ** williamr@4: ** Registered sqlite3_vfs objects are kept on a linked list formed by williamr@4: ** the pNext pointer. The [sqlite3_vfs_register()] williamr@4: ** and [sqlite3_vfs_unregister()] interfaces manage this list williamr@4: ** in a thread-safe way. The [sqlite3_vfs_find()] interface williamr@4: ** searches the list. Neither the application code nor the VFS williamr@4: ** implementation should use the pNext pointer. williamr@4: ** williamr@4: ** The pNext field is the only field in the sqlite3_vfs williamr@4: ** structure that SQLite will ever modify. SQLite will only access williamr@4: ** or modify this field while holding a particular static mutex. williamr@4: ** The application should never modify anything within the sqlite3_vfs williamr@4: ** object once the object has been registered. williamr@4: ** williamr@4: ** The zName field holds the name of the VFS module. The name must williamr@4: ** be unique across all VFS modules. williamr@4: ** williamr@4: ** {H11141} SQLite will guarantee that the zFilename parameter to xOpen williamr@4: ** is either a NULL pointer or string obtained williamr@4: ** from xFullPathname(). SQLite further guarantees that williamr@4: ** the string will be valid and unchanged until xClose() is williamr@4: ** called. {END} Because of the previous sentense, williamr@4: ** the [sqlite3_file] can safely store a pointer to the williamr@4: ** filename if it needs to remember the filename for some reason. williamr@4: ** If the zFilename parameter is xOpen is a NULL pointer then xOpen williamr@4: ** must invite its own temporary name for the file. Whenever the williamr@4: ** xFilename parameter is NULL it will also be the case that the williamr@4: ** flags parameter will include [SQLITE_OPEN_DELETEONCLOSE]. williamr@4: ** williamr@4: ** {H11142} The flags argument to xOpen() includes all bits set in williamr@4: ** the flags argument to [sqlite3_open_v2()]. Or if [sqlite3_open()] williamr@4: ** or [sqlite3_open16()] is used, then flags includes at least williamr@4: ** [SQLITE_OPEN_READWRITE] | [SQLITE_OPEN_CREATE]. {END} williamr@4: ** If xOpen() opens a file read-only then it sets *pOutFlags to williamr@4: ** include [SQLITE_OPEN_READONLY]. Other bits in *pOutFlags may be set. williamr@4: ** williamr@4: ** {H11143} SQLite will also add one of the following flags to the xOpen() williamr@4: ** call, depending on the object being opened: williamr@4: ** williamr@4: **
    williamr@4: **
  • [SQLITE_OPEN_MAIN_DB] williamr@4: **
  • [SQLITE_OPEN_MAIN_JOURNAL] williamr@4: **
  • [SQLITE_OPEN_TEMP_DB] williamr@4: **
  • [SQLITE_OPEN_TEMP_JOURNAL] williamr@4: **
  • [SQLITE_OPEN_TRANSIENT_DB] williamr@4: **
  • [SQLITE_OPEN_SUBJOURNAL] williamr@4: **
  • [SQLITE_OPEN_MASTER_JOURNAL] williamr@4: **
{END} williamr@4: ** williamr@4: ** The file I/O implementation can use the object type flags to williamr@4: ** change the way it deals with files. For example, an application williamr@4: ** that does not care about crash recovery or rollback might make williamr@4: ** the open of a journal file a no-op. Writes to this journal would williamr@4: ** also be no-ops, and any attempt to read the journal would return williamr@4: ** SQLITE_IOERR. Or the implementation might recognize that a database williamr@4: ** file will be doing page-aligned sector reads and writes in a random williamr@4: ** order and set up its I/O subsystem accordingly. williamr@4: ** williamr@4: ** SQLite might also add one of the following flags to the xOpen method: williamr@4: ** williamr@4: **
    williamr@4: **
  • [SQLITE_OPEN_DELETEONCLOSE] williamr@4: **
  • [SQLITE_OPEN_EXCLUSIVE] williamr@4: **
williamr@4: ** williamr@4: ** {H11145} The [SQLITE_OPEN_DELETEONCLOSE] flag means the file should be williamr@4: ** deleted when it is closed. {H11146} The [SQLITE_OPEN_DELETEONCLOSE] williamr@4: ** will be set for TEMP databases, journals and for subjournals. williamr@4: ** williamr@4: ** {H11147} The [SQLITE_OPEN_EXCLUSIVE] flag means the file should be opened williamr@4: ** for exclusive access. This flag is set for all files except williamr@4: ** for the main database file. williamr@4: ** williamr@4: ** {H11148} At least szOsFile bytes of memory are allocated by SQLite williamr@4: ** to hold the [sqlite3_file] structure passed as the third williamr@4: ** argument to xOpen. {END} The xOpen method does not have to williamr@4: ** allocate the structure; it should just fill it in. williamr@4: ** williamr@4: ** {H11149} The flags argument to xAccess() may be [SQLITE_ACCESS_EXISTS] williamr@4: ** to test for the existence of a file, or [SQLITE_ACCESS_READWRITE] to williamr@4: ** test whether a file is readable and writable, or [SQLITE_ACCESS_READ] williamr@4: ** to test whether a file is at least readable. {END} The file can be a williamr@4: ** directory. williamr@4: ** williamr@4: ** {H11150} SQLite will always allocate at least mxPathname+1 bytes for the williamr@4: ** output buffer xFullPathname. {H11151} The exact size of the output buffer williamr@4: ** is also passed as a parameter to both methods. {END} If the output buffer williamr@4: ** is not large enough, [SQLITE_CANTOPEN] should be returned. Since this is williamr@4: ** handled as a fatal error by SQLite, vfs implementations should endeavor williamr@4: ** to prevent this by setting mxPathname to a sufficiently large value. williamr@4: ** williamr@4: ** The xRandomness(), xSleep(), and xCurrentTime() interfaces williamr@4: ** are not strictly a part of the filesystem, but they are williamr@4: ** included in the VFS structure for completeness. williamr@4: ** The xRandomness() function attempts to return nBytes bytes williamr@4: ** of good-quality randomness into zOut. The return value is williamr@4: ** the actual number of bytes of randomness obtained. williamr@4: ** The xSleep() method causes the calling thread to sleep for at williamr@4: ** least the number of microseconds given. The xCurrentTime() williamr@4: ** method returns a Julian Day Number for the current date and time. williamr@4: */ williamr@4: typedef struct sqlite3_vfs sqlite3_vfs; williamr@4: struct sqlite3_vfs { williamr@4: int iVersion; /* Structure version number */ williamr@4: int szOsFile; /* Size of subclassed sqlite3_file */ williamr@4: int mxPathname; /* Maximum file pathname length */ williamr@4: sqlite3_vfs *pNext; /* Next registered VFS */ williamr@4: const char *zName; /* Name of this virtual file system */ williamr@4: void *pAppData; /* Pointer to application-specific data */ williamr@4: int (*xOpen)(sqlite3_vfs*, const char *zName, sqlite3_file*, williamr@4: int flags, int *pOutFlags); williamr@4: int (*xDelete)(sqlite3_vfs*, const char *zName, int syncDir); williamr@4: int (*xAccess)(sqlite3_vfs*, const char *zName, int flags, int *pResOut); williamr@4: int (*xFullPathname)(sqlite3_vfs*, const char *zName, int nOut, char *zOut); williamr@4: void *(*xDlOpen)(sqlite3_vfs*, const char *zFilename); williamr@4: void (*xDlError)(sqlite3_vfs*, int nByte, char *zErrMsg); williamr@4: void *(*xDlSym)(sqlite3_vfs*,void*, const char *zSymbol); williamr@4: void (*xDlClose)(sqlite3_vfs*, void*); williamr@4: int (*xRandomness)(sqlite3_vfs*, int nByte, char *zOut); williamr@4: int (*xSleep)(sqlite3_vfs*, int microseconds); williamr@4: int (*xCurrentTime)(sqlite3_vfs*, double*); williamr@4: int (*xGetLastError)(sqlite3_vfs*, int, char *); williamr@4: /* New fields may be appended in figure versions. The iVersion williamr@4: ** value will increment whenever this happens. */ williamr@4: }; williamr@4: williamr@4: /* williamr@4: ** CAPI3REF: Flags for the xAccess VFS method {H11190} williamr@4: ** williamr@4: ** {H11191} These integer constants can be used as the third parameter to williamr@4: ** the xAccess method of an [sqlite3_vfs] object. {END} They determine williamr@4: ** what kind of permissions the xAccess method is looking for. williamr@4: ** {H11192} With SQLITE_ACCESS_EXISTS, the xAccess method williamr@4: ** simply checks whether the file exists. williamr@4: ** {H11193} With SQLITE_ACCESS_READWRITE, the xAccess method williamr@4: ** checks whether the file is both readable and writable. williamr@4: ** {H11194} With SQLITE_ACCESS_READ, the xAccess method williamr@4: ** checks whether the file is readable. williamr@4: */ williamr@4: #define SQLITE_ACCESS_EXISTS 0 williamr@4: #define SQLITE_ACCESS_READWRITE 1 williamr@4: #define SQLITE_ACCESS_READ 2 williamr@4: williamr@4: /* williamr@4: ** CAPI3REF: Initialize The SQLite Library {H10130} williamr@4: ** williamr@4: ** The sqlite3_initialize() routine initializes the williamr@4: ** SQLite library. The sqlite3_shutdown() routine williamr@4: ** deallocates any resources that were allocated by sqlite3_initialize(). williamr@4: ** williamr@4: ** A call to sqlite3_initialize() is an "effective" call if it is williamr@4: ** the first time sqlite3_initialize() is invoked during the lifetime of williamr@4: ** the process, or if it is the first time sqlite3_initialize() is invoked williamr@4: ** following a call to sqlite3_shutdown(). Only an effective call williamr@4: ** of sqlite3_initialize() does any initialization. All other calls williamr@4: ** are harmless no-ops. williamr@4: ** williamr@4: ** Among other things, sqlite3_initialize() shall invoke williamr@4: ** sqlite3_os_init(). Similarly, sqlite3_shutdown() williamr@4: ** shall invoke sqlite3_os_end(). williamr@4: ** williamr@4: ** The sqlite3_initialize() routine returns SQLITE_OK on success. williamr@4: ** If for some reason, sqlite3_initialize() is unable to initialize williamr@4: ** the library (perhaps it is unable to allocate a needed resource such williamr@4: ** as a mutex) it returns an [error code] other than SQLITE_OK. williamr@4: ** williamr@4: ** The sqlite3_initialize() routine is called internally by many other williamr@4: ** SQLite interfaces so that an application usually does not need to williamr@4: ** invoke sqlite3_initialize() directly. For example, [sqlite3_open()] williamr@4: ** calls sqlite3_initialize() so the SQLite library will be automatically williamr@4: ** initialized when [sqlite3_open()] is called if it has not be initialized williamr@4: ** already. However, if SQLite is compiled with the SQLITE_OMIT_AUTOINIT williamr@4: ** compile-time option, then the automatic calls to sqlite3_initialize() williamr@4: ** are omitted and the application must call sqlite3_initialize() directly williamr@4: ** prior to using any other SQLite interface. For maximum portability, williamr@4: ** it is recommended that applications always invoke sqlite3_initialize() williamr@4: ** directly prior to using any other SQLite interface. Future releases williamr@4: ** of SQLite may require this. In other words, the behavior exhibited williamr@4: ** when SQLite is compiled with SQLITE_OMIT_AUTOINIT might become the williamr@4: ** default behavior in some future release of SQLite. williamr@4: ** williamr@4: ** The sqlite3_os_init() routine does operating-system specific williamr@4: ** initialization of the SQLite library. The sqlite3_os_end() williamr@4: ** routine undoes the effect of sqlite3_os_init(). Typical tasks williamr@4: ** performed by these routines include allocation or deallocation williamr@4: ** of static resources, initialization of global variables, williamr@4: ** setting up a default [sqlite3_vfs] module, or setting up williamr@4: ** a default configuration using [sqlite3_config()]. williamr@4: ** williamr@4: ** The application should never invoke either sqlite3_os_init() williamr@4: ** or sqlite3_os_end() directly. The application should only invoke williamr@4: ** sqlite3_initialize() and sqlite3_shutdown(). The sqlite3_os_init() williamr@4: ** interface is called automatically by sqlite3_initialize() and williamr@4: ** sqlite3_os_end() is called by sqlite3_shutdown(). Appropriate williamr@4: ** implementations for sqlite3_os_init() and sqlite3_os_end() williamr@4: ** are built into SQLite when it is compiled for unix, windows, or os/2. williamr@4: ** When built for other platforms (using the SQLITE_OS_OTHER=1 compile-time williamr@4: ** option) the application must supply a suitable implementation for williamr@4: ** sqlite3_os_init() and sqlite3_os_end(). An application-supplied williamr@4: ** implementation of sqlite3_os_init() or sqlite3_os_end() williamr@4: ** must return SQLITE_OK on success and some other [error code] upon williamr@4: ** failure. williamr@4: */ williamr@4: IMPORT_C int sqlite3_initialize(void); williamr@4: IMPORT_C int sqlite3_shutdown(void); williamr@4: IMPORT_C int sqlite3_os_init(void); williamr@4: IMPORT_C int sqlite3_os_end(void); williamr@4: williamr@4: /* williamr@4: ** CAPI3REF: Configuring The SQLite Library {H10145} williamr@4: ** EXPERIMENTAL williamr@4: ** williamr@4: ** The sqlite3_config() interface is used to make global configuration williamr@4: ** changes to SQLite in order to tune SQLite to the specific needs of williamr@4: ** the application. The default configuration is recommended for most williamr@4: ** applications and so this routine is usually not necessary. It is williamr@4: ** provided to support rare applications with unusual needs. williamr@4: ** williamr@4: ** The sqlite3_config() interface is not threadsafe. The application williamr@4: ** must insure that no other SQLite interfaces are invoked by other williamr@4: ** threads while sqlite3_config() is running. Furthermore, sqlite3_config() williamr@4: ** may only be invoked prior to library initialization using williamr@4: ** [sqlite3_initialize()] or after shutdown by [sqlite3_shutdown()]. williamr@4: ** Note, however, that sqlite3_config() can be called as part of the williamr@4: ** implementation of an application-defined [sqlite3_os_init()]. williamr@4: ** williamr@4: ** The first argument to sqlite3_config() is an integer williamr@4: ** [SQLITE_CONFIG_SINGLETHREAD | configuration option] that determines williamr@4: ** what property of SQLite is to be configured. Subsequent arguments williamr@4: ** vary depending on the [SQLITE_CONFIG_SINGLETHREAD | configuration option] williamr@4: ** in the first argument. williamr@4: ** williamr@4: ** When a configuration option is set, sqlite3_config() returns SQLITE_OK. williamr@4: ** If the option is unknown or SQLite is unable to set the option williamr@4: ** then this routine returns a non-zero [error code]. williamr@4: */ williamr@4: IMPORT_C int sqlite3_config(int, ...); williamr@4: williamr@4: /* williamr@4: ** CAPI3REF: Configure database connections {H10180} williamr@4: ** EXPERIMENTAL williamr@4: ** williamr@4: ** The sqlite3_db_config() interface is used to make configuration williamr@4: ** changes to a [database connection]. The interface is similar to williamr@4: ** [sqlite3_config()] except that the changes apply to a single williamr@4: ** [database connection] (specified in the first argument). The williamr@4: ** sqlite3_db_config() interface can only be used immediately after williamr@4: ** the database connection is created using [sqlite3_open()], williamr@4: ** [sqlite3_open16()], or [sqlite3_open_v2()]. williamr@4: ** williamr@4: ** The second argument to sqlite3_db_config(D,V,...) is the williamr@4: ** configuration verb - an integer code that indicates what williamr@4: ** aspect of the [database connection] is being configured. williamr@4: ** The only choice for this value is [SQLITE_DBCONFIG_LOOKASIDE]. williamr@4: ** New verbs are likely to be added in future releases of SQLite. williamr@4: ** Additional arguments depend on the verb. williamr@4: */ williamr@4: IMPORT_C int sqlite3_db_config(sqlite3*, int op, ...); williamr@4: williamr@4: /* williamr@4: ** CAPI3REF: Memory Allocation Routines {H10155} williamr@4: ** EXPERIMENTAL williamr@4: ** williamr@4: ** An instance of this object defines the interface between SQLite williamr@4: ** and low-level memory allocation routines. williamr@4: ** williamr@4: ** This object is used in only one place in the SQLite interface. williamr@4: ** A pointer to an instance of this object is the argument to williamr@4: ** [sqlite3_config()] when the configuration option is williamr@4: ** [SQLITE_CONFIG_MALLOC]. By creating an instance of this object williamr@4: ** and passing it to [sqlite3_config()] during configuration, an williamr@4: ** application can specify an alternative memory allocation subsystem williamr@4: ** for SQLite to use for all of its dynamic memory needs. williamr@4: ** williamr@4: ** Note that SQLite comes with a built-in memory allocator that is williamr@4: ** perfectly adequate for the overwhelming majority of applications williamr@4: ** and that this object is only useful to a tiny minority of applications williamr@4: ** with specialized memory allocation requirements. This object is williamr@4: ** also used during testing of SQLite in order to specify an alternative williamr@4: ** memory allocator that simulates memory out-of-memory conditions in williamr@4: ** order to verify that SQLite recovers gracefully from such williamr@4: ** conditions. williamr@4: ** williamr@4: ** The xMalloc, xFree, and xRealloc methods must work like the williamr@4: ** malloc(), free(), and realloc() functions from the standard library. williamr@4: ** williamr@4: ** xSize should return the allocated size of a memory allocation williamr@4: ** previously obtained from xMalloc or xRealloc. The allocated size williamr@4: ** is always at least as big as the requested size but may be larger. williamr@4: ** williamr@4: ** The xRoundup method returns what would be the allocated size of williamr@4: ** a memory allocation given a particular requested size. Most memory williamr@4: ** allocators round up memory allocations at least to the next multiple williamr@4: ** of 8. Some allocators round up to a larger multiple or to a power of 2. williamr@4: ** williamr@4: ** The xInit method initializes the memory allocator. (For example, williamr@4: ** it might allocate any require mutexes or initialize internal data williamr@4: ** structures. The xShutdown method is invoked (indirectly) by williamr@4: ** [sqlite3_shutdown()] and should deallocate any resources acquired williamr@4: ** by xInit. The pAppData pointer is used as the only parameter to williamr@4: ** xInit and xShutdown. williamr@4: */ williamr@4: typedef struct sqlite3_mem_methods sqlite3_mem_methods; williamr@4: struct sqlite3_mem_methods { williamr@4: void *(*xMalloc)(int); /* Memory allocation function */ williamr@4: void (*xFree)(void*); /* Free a prior allocation */ williamr@4: void *(*xRealloc)(void*,int); /* Resize an allocation */ williamr@4: int (*xSize)(void*); /* Return the size of an allocation */ williamr@4: int (*xRoundup)(int); /* Round up request size to allocation size */ williamr@4: int (*xInit)(void*); /* Initialize the memory allocator */ williamr@4: void (*xShutdown)(void*); /* Deinitialize the memory allocator */ williamr@4: void *pAppData; /* Argument to xInit() and xShutdown() */ williamr@4: }; williamr@4: williamr@4: /* williamr@4: ** CAPI3REF: Configuration Options {H10160} williamr@4: ** EXPERIMENTAL williamr@4: ** williamr@4: ** These constants are the available integer configuration options that williamr@4: ** can be passed as the first argument to the [sqlite3_config()] interface. williamr@4: ** williamr@4: ** New configuration options may be added in future releases of SQLite. williamr@4: ** Existing configuration options might be discontinued. Applications williamr@4: ** should check the return code from [sqlite3_config()] to make sure that williamr@4: ** the call worked. The [sqlite3_config()] interface will return a williamr@4: ** non-zero [error code] if a discontinued or unsupported configuration option williamr@4: ** is invoked. williamr@4: ** williamr@4: **
williamr@4: **
SQLITE_CONFIG_SINGLETHREAD
williamr@4: **
There are no arguments to this option. This option disables williamr@4: ** all mutexing and puts SQLite into a mode where it can only be used williamr@4: ** by a single thread.
williamr@4: ** williamr@4: **
SQLITE_CONFIG_MULTITHREAD
williamr@4: **
There are no arguments to this option. This option disables williamr@4: ** mutexing on [database connection] and [prepared statement] objects. williamr@4: ** The application is responsible for serializing access to williamr@4: ** [database connections] and [prepared statements]. But other mutexes williamr@4: ** are enabled so that SQLite will be safe to use in a multi-threaded williamr@4: ** environment as long as no two threads attempt to use the same williamr@4: ** [database connection] at the same time. See the [threading mode] williamr@4: ** documentation for additional information.
williamr@4: ** williamr@4: **
SQLITE_CONFIG_SERIALIZED
williamr@4: **
There are no arguments to this option. This option enables williamr@4: ** all mutexes including the recursive williamr@4: ** mutexes on [database connection] and [prepared statement] objects. williamr@4: ** In this mode (which is the default when SQLite is compiled with williamr@4: ** [SQLITE_THREADSAFE=1]) the SQLite library will itself serialize access williamr@4: ** to [database connections] and [prepared statements] so that the williamr@4: ** application is free to use the same [database connection] or the williamr@4: ** same [prepared statement] in different threads at the same time. williamr@4: ** See the [threading mode] documentation for additional information.
williamr@4: ** williamr@4: **
SQLITE_CONFIG_MALLOC
williamr@4: **
This option takes a single argument which is a pointer to an williamr@4: ** instance of the [sqlite3_mem_methods] structure. The argument specifies williamr@4: ** alternative low-level memory allocation routines to be used in place of williamr@4: ** the memory allocation routines built into SQLite.
williamr@4: ** williamr@4: **
SQLITE_CONFIG_GETMALLOC
williamr@4: **
This option takes a single argument which is a pointer to an williamr@4: ** instance of the [sqlite3_mem_methods] structure. The [sqlite3_mem_methods] williamr@4: ** structure is filled with the currently defined memory allocation routines. williamr@4: ** This option can be used to overload the default memory allocation williamr@4: ** routines with a wrapper that simulations memory allocation failure or williamr@4: ** tracks memory usage, for example.
williamr@4: ** williamr@4: **
SQLITE_CONFIG_MEMSTATUS
williamr@4: **
This option takes single argument of type int, interpreted as a williamr@4: ** boolean, which enables or disables the collection of memory allocation williamr@4: ** statistics. When disabled, the following SQLite interfaces become williamr@4: ** non-operational: williamr@4: **
    williamr@4: **
  • [sqlite3_memory_used()] williamr@4: **
  • [sqlite3_memory_highwater()] williamr@4: **
  • [sqlite3_soft_heap_limit()] williamr@4: **
  • [sqlite3_status()] williamr@4: **
williamr@4: **
williamr@4: ** williamr@4: **
SQLITE_CONFIG_SCRATCH
williamr@4: **
This option specifies a static memory buffer that SQLite can use for williamr@4: ** scratch memory. There are three arguments: A pointer to the memory, the williamr@4: ** size of each scratch buffer (sz), and the number of buffers (N). The sz williamr@4: ** argument must be a multiple of 16. The sz parameter should be a few bytes williamr@4: ** larger than the actual scratch space required due internal overhead. williamr@4: ** The first williamr@4: ** argument should point to an allocation of at least sz*N bytes of memory. williamr@4: ** SQLite will use no more than one scratch buffer at once per thread, so williamr@4: ** N should be set to the expected maximum number of threads. The sz williamr@4: ** parameter should be 6 times the size of the largest database page size. williamr@4: ** Scratch buffers are used as part of the btree balance operation. If williamr@4: ** The btree balancer needs additional memory beyond what is provided by williamr@4: ** scratch buffers or if no scratch buffer space is specified, then SQLite williamr@4: ** goes to [sqlite3_malloc()] to obtain the memory it needs.
williamr@4: ** williamr@4: **
SQLITE_CONFIG_PAGECACHE
williamr@4: **
This option specifies a static memory buffer that SQLite can use for williamr@4: ** the database page cache. There are three arguments: A pointer to the williamr@4: ** memory, the size of each page buffer (sz), and the number of pages (N). williamr@4: ** The sz argument must be a power of two between 512 and 32768. The first williamr@4: ** argument should point to an allocation of at least sz*N bytes of memory. williamr@4: ** SQLite will use the memory provided by the first argument to satisfy its williamr@4: ** memory needs for the first N pages that it adds to cache. If additional williamr@4: ** page cache memory is needed beyond what is provided by this option, then williamr@4: ** SQLite goes to [sqlite3_malloc()] for the additional storage space. williamr@4: ** The implementation might use one or more of the N buffers to hold williamr@4: ** memory accounting information.
williamr@4: ** williamr@4: **
SQLITE_CONFIG_HEAP
williamr@4: **
This option specifies a static memory buffer that SQLite will use williamr@4: ** for all of its dynamic memory allocation needs beyond those provided williamr@4: ** for by [SQLITE_CONFIG_SCRATCH] and [SQLITE_CONFIG_PAGECACHE]. williamr@4: ** There are three arguments: A pointer to the memory, the number of williamr@4: ** bytes in the memory buffer, and the minimum allocation size. If williamr@4: ** the first pointer (the memory pointer) is NULL, then SQLite reverts williamr@4: ** to using its default memory allocator (the system malloc() implementation), williamr@4: ** undoing any prior invocation of [SQLITE_CONFIG_MALLOC]. If the williamr@4: ** memory pointer is not NULL and either [SQLITE_ENABLE_MEMSYS3] or williamr@4: ** [SQLITE_ENABLE_MEMSYS5] are defined, then the alternative memory williamr@4: ** allocator is engaged to handle all of SQLites memory allocation needs.
williamr@4: ** williamr@4: **
SQLITE_CONFIG_MUTEX
williamr@4: **
This option takes a single argument which is a pointer to an williamr@4: ** instance of the [sqlite3_mutex_methods] structure. The argument specifies williamr@4: ** alternative low-level mutex routines to be used in place williamr@4: ** the mutex routines built into SQLite.
williamr@4: ** williamr@4: **
SQLITE_CONFIG_GETMUTEX
williamr@4: **
This option takes a single argument which is a pointer to an williamr@4: ** instance of the [sqlite3_mutex_methods] structure. The williamr@4: ** [sqlite3_mutex_methods] williamr@4: ** structure is filled with the currently defined mutex routines. williamr@4: ** This option can be used to overload the default mutex allocation williamr@4: ** routines with a wrapper used to track mutex usage for performance williamr@4: ** profiling or testing, for example.
williamr@4: ** williamr@4: **
SQLITE_CONFIG_LOOKASIDE
williamr@4: **
This option takes two arguments that determine the default williamr@4: ** memory allcation lookaside optimization. The first argument is the williamr@4: ** size of each lookaside buffer slot and the second is the number of williamr@4: ** slots allocated to each database connection.
williamr@4: ** williamr@4: **
williamr@4: */ williamr@4: #define SQLITE_CONFIG_SINGLETHREAD 1 /* nil */ williamr@4: #define SQLITE_CONFIG_MULTITHREAD 2 /* nil */ williamr@4: #define SQLITE_CONFIG_SERIALIZED 3 /* nil */ williamr@4: #define SQLITE_CONFIG_MALLOC 4 /* sqlite3_mem_methods* */ williamr@4: #define SQLITE_CONFIG_GETMALLOC 5 /* sqlite3_mem_methods* */ williamr@4: #define SQLITE_CONFIG_SCRATCH 6 /* void*, int sz, int N */ williamr@4: #define SQLITE_CONFIG_PAGECACHE 7 /* void*, int sz, int N */ williamr@4: #define SQLITE_CONFIG_HEAP 8 /* void*, int nByte, int min */ williamr@4: #define SQLITE_CONFIG_MEMSTATUS 9 /* boolean */ williamr@4: #define SQLITE_CONFIG_MUTEX 10 /* sqlite3_mutex_methods* */ williamr@4: #define SQLITE_CONFIG_GETMUTEX 11 /* sqlite3_mutex_methods* */ williamr@4: #define SQLITE_CONFIG_CHUNKALLOC 12 /* int threshold */ williamr@4: #define SQLITE_CONFIG_LOOKASIDE 13 /* int int */ williamr@4: williamr@4: /* williamr@4: ** CAPI3REF: Configuration Options {H10170} williamr@4: ** EXPERIMENTAL williamr@4: ** williamr@4: ** These constants are the available integer configuration options that williamr@4: ** can be passed as the second argument to the [sqlite3_db_config()] interface. williamr@4: ** williamr@4: ** New configuration options may be added in future releases of SQLite. williamr@4: ** Existing configuration options might be discontinued. Applications williamr@4: ** should check the return code from [sqlite3_db_config()] to make sure that williamr@4: ** the call worked. The [sqlite3_db_config()] interface will return a williamr@4: ** non-zero [error code] if a discontinued or unsupported configuration option williamr@4: ** is invoked. williamr@4: ** williamr@4: **
williamr@4: **
SQLITE_DBCONFIG_LOOKASIDE
williamr@4: **
This option takes three additional arguments that determine the williamr@4: ** [lookaside memory allocator] configuration for the [database connection]. williamr@4: ** The first argument (the third parameter to [sqlite3_db_config()] is a williamr@4: ** pointer to a memory buffer to use for lookaside memory. The first williamr@4: ** argument may be NULL in which case SQLite will allocate the lookaside williamr@4: ** buffer itself using [sqlite3_malloc()]. The second argument is the williamr@4: ** size of each lookaside buffer slot and the third argument is the number of williamr@4: ** slots. The size of the buffer in the first argument must be greater than williamr@4: ** or equal to the product of the second and third arguments.
williamr@4: ** williamr@4: **
williamr@4: */ williamr@4: #define SQLITE_DBCONFIG_LOOKASIDE 1001 /* void* int int */ williamr@4: williamr@4: williamr@4: /* williamr@4: ** CAPI3REF: Enable Or Disable Extended Result Codes {H12200} williamr@4: ** williamr@4: ** The sqlite3_extended_result_codes() routine enables or disables the williamr@4: ** [extended result codes] feature of SQLite. The extended result williamr@4: ** codes are disabled by default for historical compatibility considerations. williamr@4: ** williamr@4: ** INVARIANTS: williamr@4: ** williamr@4: ** {H12201} Each new [database connection] shall have the williamr@4: ** [extended result codes] feature disabled by default. williamr@4: ** williamr@4: ** {H12202} The [sqlite3_extended_result_codes(D,F)] interface shall enable williamr@4: ** [extended result codes] for the [database connection] D williamr@4: ** if the F parameter is true, or disable them if F is false. williamr@4: */ williamr@4: IMPORT_C int sqlite3_extended_result_codes(sqlite3*, int onoff); williamr@4: williamr@4: /* williamr@4: ** CAPI3REF: Last Insert Rowid {H12220} williamr@4: ** williamr@4: ** Each entry in an SQLite table has a unique 64-bit signed williamr@4: ** integer key called the "rowid". The rowid is always available williamr@4: ** as an undeclared column named ROWID, OID, or _ROWID_ as long as those williamr@4: ** names are not also used by explicitly declared columns. If williamr@4: ** the table has a column of type INTEGER PRIMARY KEY then that column williamr@4: ** is another alias for the rowid. williamr@4: ** williamr@4: ** This routine returns the rowid of the most recent williamr@4: ** successful INSERT into the database from the [database connection] williamr@4: ** in the first argument. If no successful INSERTs williamr@4: ** have ever occurred on that database connection, zero is returned. williamr@4: ** williamr@4: ** If an INSERT occurs within a trigger, then the rowid of the inserted williamr@4: ** row is returned by this routine as long as the trigger is running. williamr@4: ** But once the trigger terminates, the value returned by this routine williamr@4: ** reverts to the last value inserted before the trigger fired. williamr@4: ** williamr@4: ** An INSERT that fails due to a constraint violation is not a williamr@4: ** successful INSERT and does not change the value returned by this williamr@4: ** routine. Thus INSERT OR FAIL, INSERT OR IGNORE, INSERT OR ROLLBACK, williamr@4: ** and INSERT OR ABORT make no changes to the return value of this williamr@4: ** routine when their insertion fails. When INSERT OR REPLACE williamr@4: ** encounters a constraint violation, it does not fail. The williamr@4: ** INSERT continues to completion after deleting rows that caused williamr@4: ** the constraint problem so INSERT OR REPLACE will always change williamr@4: ** the return value of this interface. williamr@4: ** williamr@4: ** For the purposes of this routine, an INSERT is considered to williamr@4: ** be successful even if it is subsequently rolled back. williamr@4: ** williamr@4: ** INVARIANTS: williamr@4: ** williamr@4: ** {H12221} The [sqlite3_last_insert_rowid()] function returns the rowid williamr@4: ** of the most recent successful INSERT performed on the same williamr@4: ** [database connection] and within the same or higher level williamr@4: ** trigger context, or zero if there have been no qualifying inserts. williamr@4: ** williamr@4: ** {H12223} The [sqlite3_last_insert_rowid()] function returns the williamr@4: ** same value when called from the same trigger context williamr@4: ** immediately before and after a ROLLBACK. williamr@4: ** williamr@4: ** ASSUMPTIONS: williamr@4: ** williamr@4: ** {A12232} If a separate thread performs a new INSERT on the same williamr@4: ** database connection while the [sqlite3_last_insert_rowid()] williamr@4: ** function is running and thus changes the last insert rowid, williamr@4: ** then the value returned by [sqlite3_last_insert_rowid()] is williamr@4: ** unpredictable and might not equal either the old or the new williamr@4: ** last insert rowid. williamr@4: */ williamr@4: IMPORT_C sqlite3_int64 sqlite3_last_insert_rowid(sqlite3*); williamr@4: williamr@4: /* williamr@4: ** CAPI3REF: Count The Number Of Rows Modified {H12240} williamr@4: ** williamr@4: ** This function returns the number of database rows that were changed williamr@4: ** or inserted or deleted by the most recently completed SQL statement williamr@4: ** on the [database connection] specified by the first parameter. williamr@4: ** Only changes that are directly specified by the INSERT, UPDATE, williamr@4: ** or DELETE statement are counted. Auxiliary changes caused by williamr@4: ** triggers are not counted. Use the [sqlite3_total_changes()] function williamr@4: ** to find the total number of changes including changes caused by triggers. williamr@4: ** williamr@4: ** A "row change" is a change to a single row of a single table williamr@4: ** caused by an INSERT, DELETE, or UPDATE statement. Rows that williamr@4: ** are changed as side effects of REPLACE constraint resolution, williamr@4: ** rollback, ABORT processing, DROP TABLE, or by any other williamr@4: ** mechanisms do not count as direct row changes. williamr@4: ** williamr@4: ** A "trigger context" is a scope of execution that begins and williamr@4: ** ends with the script of a trigger. Most SQL statements are williamr@4: ** evaluated outside of any trigger. This is the "top level" williamr@4: ** trigger context. If a trigger fires from the top level, a williamr@4: ** new trigger context is entered for the duration of that one williamr@4: ** trigger. Subtriggers create subcontexts for their duration. williamr@4: ** williamr@4: ** Calling [sqlite3_exec()] or [sqlite3_step()] recursively does williamr@4: ** not create a new trigger context. williamr@4: ** williamr@4: ** This function returns the number of direct row changes in the williamr@4: ** most recent INSERT, UPDATE, or DELETE statement within the same williamr@4: ** trigger context. williamr@4: ** williamr@4: ** Thus, when called from the top level, this function returns the williamr@4: ** number of changes in the most recent INSERT, UPDATE, or DELETE williamr@4: ** that also occurred at the top level. Within the body of a trigger, williamr@4: ** the sqlite3_changes() interface can be called to find the number of williamr@4: ** changes in the most recently completed INSERT, UPDATE, or DELETE williamr@4: ** statement within the body of the same trigger. williamr@4: ** However, the number returned does not include changes williamr@4: ** caused by subtriggers since those have their own context. williamr@4: ** williamr@4: ** SQLite implements the command "DELETE FROM table" without a WHERE clause williamr@4: ** by dropping and recreating the table. (This is much faster than going williamr@4: ** through and deleting individual elements from the table.) Because of this williamr@4: ** optimization, the deletions in "DELETE FROM table" are not row changes and williamr@4: ** will not be counted by the sqlite3_changes() or [sqlite3_total_changes()] williamr@4: ** functions, regardless of the number of elements that were originally williamr@4: ** in the table. To get an accurate count of the number of rows deleted, use williamr@4: ** "DELETE FROM table WHERE 1" instead. williamr@4: ** williamr@4: ** INVARIANTS: williamr@4: ** williamr@4: ** {H12241} The [sqlite3_changes()] function shall return the number of williamr@4: ** row changes caused by the most recent INSERT, UPDATE, williamr@4: ** or DELETE statement on the same database connection and williamr@4: ** within the same or higher trigger context, or zero if there have williamr@4: ** not been any qualifying row changes. williamr@4: ** williamr@4: ** {H12243} Statements of the form "DELETE FROM tablename" with no williamr@4: ** WHERE clause shall cause subsequent calls to williamr@4: ** [sqlite3_changes()] to return zero, regardless of the williamr@4: ** number of rows originally in the table. williamr@4: ** williamr@4: ** ASSUMPTIONS: williamr@4: ** williamr@4: ** {A12252} If a separate thread makes changes on the same database connection williamr@4: ** while [sqlite3_changes()] is running then the value returned williamr@4: ** is unpredictable and not meaningful. williamr@4: */ williamr@4: IMPORT_C int sqlite3_changes(sqlite3*); williamr@4: williamr@4: /* williamr@4: ** CAPI3REF: Total Number Of Rows Modified {H12260} williamr@4: ** williamr@4: ** This function returns the number of row changes caused by INSERT, williamr@4: ** UPDATE or DELETE statements since the [database connection] was opened. williamr@4: ** The count includes all changes from all trigger contexts. However, williamr@4: ** the count does not include changes used to implement REPLACE constraints, williamr@4: ** do rollbacks or ABORT processing, or DROP table processing. williamr@4: ** The changes are counted as soon as the statement that makes them is williamr@4: ** completed (when the statement handle is passed to [sqlite3_reset()] or williamr@4: ** [sqlite3_finalize()]). williamr@4: ** williamr@4: ** SQLite implements the command "DELETE FROM table" without a WHERE clause williamr@4: ** by dropping and recreating the table. (This is much faster than going williamr@4: ** through and deleting individual elements from the table.) Because of this williamr@4: ** optimization, the deletions in "DELETE FROM table" are not row changes and williamr@4: ** will not be counted by the sqlite3_changes() or [sqlite3_total_changes()] williamr@4: ** functions, regardless of the number of elements that were originally williamr@4: ** in the table. To get an accurate count of the number of rows deleted, use williamr@4: ** "DELETE FROM table WHERE 1" instead. williamr@4: ** williamr@4: ** See also the [sqlite3_changes()] interface. williamr@4: ** williamr@4: ** INVARIANTS: williamr@4: ** williamr@4: ** {H12261} The [sqlite3_total_changes()] returns the total number williamr@4: ** of row changes caused by INSERT, UPDATE, and/or DELETE williamr@4: ** statements on the same [database connection], in any williamr@4: ** trigger context, since the database connection was created. williamr@4: ** williamr@4: ** {H12263} Statements of the form "DELETE FROM tablename" with no williamr@4: ** WHERE clause shall not change the value returned williamr@4: ** by [sqlite3_total_changes()]. williamr@4: ** williamr@4: ** ASSUMPTIONS: williamr@4: ** williamr@4: ** {A12264} If a separate thread makes changes on the same database connection williamr@4: ** while [sqlite3_total_changes()] is running then the value williamr@4: ** returned is unpredictable and not meaningful. williamr@4: */ williamr@4: IMPORT_C int sqlite3_total_changes(sqlite3*); williamr@4: williamr@4: /* williamr@4: ** CAPI3REF: Interrupt A Long-Running Query {H12270} williamr@4: ** williamr@4: ** This function causes any pending database operation to abort and williamr@4: ** return at its earliest opportunity. This routine is typically williamr@4: ** called in response to a user action such as pressing "Cancel" williamr@4: ** or Ctrl-C where the user wants a long query operation to halt williamr@4: ** immediately. williamr@4: ** williamr@4: ** It is safe to call this routine from a thread different from the williamr@4: ** thread that is currently running the database operation. But it williamr@4: ** is not safe to call this routine with a [database connection] that williamr@4: ** is closed or might close before sqlite3_interrupt() returns. williamr@4: ** williamr@4: ** If an SQL operation is very nearly finished at the time when williamr@4: ** sqlite3_interrupt() is called, then it might not have an opportunity williamr@4: ** to be interrupted and might continue to completion. williamr@4: ** williamr@4: ** An SQL operation that is interrupted will return [SQLITE_INTERRUPT]. williamr@4: ** If the interrupted SQL operation is an INSERT, UPDATE, or DELETE williamr@4: ** that is inside an explicit transaction, then the entire transaction williamr@4: ** will be rolled back automatically. williamr@4: ** williamr@4: ** A call to sqlite3_interrupt() has no effect on SQL statements williamr@4: ** that are started after sqlite3_interrupt() returns. williamr@4: ** williamr@4: ** INVARIANTS: williamr@4: ** williamr@4: ** {H12271} The [sqlite3_interrupt()] interface will force all running williamr@4: ** SQL statements associated with the same database connection williamr@4: ** to halt after processing at most one additional row of data. williamr@4: ** williamr@4: ** {H12272} Any SQL statement that is interrupted by [sqlite3_interrupt()] williamr@4: ** will return [SQLITE_INTERRUPT]. williamr@4: ** williamr@4: ** ASSUMPTIONS: williamr@4: ** williamr@4: ** {A12279} If the database connection closes while [sqlite3_interrupt()] williamr@4: ** is running then bad things will likely happen. williamr@4: */ williamr@4: IMPORT_C void sqlite3_interrupt(sqlite3*); williamr@4: williamr@4: /* williamr@4: ** CAPI3REF: Determine If An SQL Statement Is Complete {H10510} williamr@4: ** williamr@4: ** These routines are useful for command-line input to determine if the williamr@4: ** currently entered text seems to form complete a SQL statement or williamr@4: ** if additional input is needed before sending the text into williamr@4: ** SQLite for parsing. These routines return true if the input string williamr@4: ** appears to be a complete SQL statement. A statement is judged to be williamr@4: ** complete if it ends with a semicolon token and is not a fragment of a williamr@4: ** CREATE TRIGGER statement. Semicolons that are embedded within williamr@4: ** string literals or quoted identifier names or comments are not williamr@4: ** independent tokens (they are part of the token in which they are williamr@4: ** embedded) and thus do not count as a statement terminator. williamr@4: ** williamr@4: ** These routines do not parse the SQL statements thus williamr@4: ** will not detect syntactically incorrect SQL. williamr@4: ** williamr@4: ** INVARIANTS: williamr@4: ** williamr@4: ** {H10511} A successful evaluation of [sqlite3_complete()] or williamr@4: ** [sqlite3_complete16()] functions shall williamr@4: ** return a numeric 1 if and only if the last non-whitespace williamr@4: ** token in their input is a semicolon that is not in between williamr@4: ** the BEGIN and END of a CREATE TRIGGER statement. williamr@4: ** williamr@4: ** {H10512} If a memory allocation error occurs during an invocation williamr@4: ** of [sqlite3_complete()] or [sqlite3_complete16()] then the williamr@4: ** routine shall return [SQLITE_NOMEM]. williamr@4: ** williamr@4: ** ASSUMPTIONS: williamr@4: ** williamr@4: ** {A10512} The input to [sqlite3_complete()] must be a zero-terminated williamr@4: ** UTF-8 string. williamr@4: ** williamr@4: ** {A10513} The input to [sqlite3_complete16()] must be a zero-terminated williamr@4: ** UTF-16 string in native byte order. williamr@4: */ williamr@4: IMPORT_C int sqlite3_complete(const char *sql); williamr@4: IMPORT_C int sqlite3_complete16(const void *sql); williamr@4: williamr@4: /* williamr@4: ** CAPI3REF: Register A Callback To Handle SQLITE_BUSY Errors {H12310} williamr@4: ** williamr@4: ** This routine sets a callback function that might be invoked whenever williamr@4: ** an attempt is made to open a database table that another thread williamr@4: ** or process has locked. williamr@4: ** williamr@4: ** If the busy callback is NULL, then [SQLITE_BUSY] or [SQLITE_IOERR_BLOCKED] williamr@4: ** is returned immediately upon encountering the lock. If the busy callback williamr@4: ** is not NULL, then the callback will be invoked with two arguments. williamr@4: ** williamr@4: ** The first argument to the handler is a copy of the void* pointer which williamr@4: ** is the third argument to sqlite3_busy_handler(). The second argument to williamr@4: ** the handler callback is the number of times that the busy handler has williamr@4: ** been invoked for this locking event. If the williamr@4: ** busy callback returns 0, then no additional attempts are made to williamr@4: ** access the database and [SQLITE_BUSY] or [SQLITE_IOERR_BLOCKED] is returned. williamr@4: ** If the callback returns non-zero, then another attempt williamr@4: ** is made to open the database for reading and the cycle repeats. williamr@4: ** williamr@4: ** The presence of a busy handler does not guarantee that it will be invoked williamr@4: ** when there is lock contention. If SQLite determines that invoking the busy williamr@4: ** handler could result in a deadlock, it will go ahead and return [SQLITE_BUSY] williamr@4: ** or [SQLITE_IOERR_BLOCKED] instead of invoking the busy handler. williamr@4: ** Consider a scenario where one process is holding a read lock that williamr@4: ** it is trying to promote to a reserved lock and williamr@4: ** a second process is holding a reserved lock that it is trying williamr@4: ** to promote to an exclusive lock. The first process cannot proceed williamr@4: ** because it is blocked by the second and the second process cannot williamr@4: ** proceed because it is blocked by the first. If both processes williamr@4: ** invoke the busy handlers, neither will make any progress. Therefore, williamr@4: ** SQLite returns [SQLITE_BUSY] for the first process, hoping that this williamr@4: ** will induce the first process to release its read lock and allow williamr@4: ** the second process to proceed. williamr@4: ** williamr@4: ** The default busy callback is NULL. williamr@4: ** williamr@4: ** The [SQLITE_BUSY] error is converted to [SQLITE_IOERR_BLOCKED] williamr@4: ** when SQLite is in the middle of a large transaction where all the williamr@4: ** changes will not fit into the in-memory cache. SQLite will williamr@4: ** already hold a RESERVED lock on the database file, but it needs williamr@4: ** to promote this lock to EXCLUSIVE so that it can spill cache williamr@4: ** pages into the database file without harm to concurrent williamr@4: ** readers. If it is unable to promote the lock, then the in-memory williamr@4: ** cache will be left in an inconsistent state and so the error williamr@4: ** code is promoted from the relatively benign [SQLITE_BUSY] to williamr@4: ** the more severe [SQLITE_IOERR_BLOCKED]. This error code promotion williamr@4: ** forces an automatic rollback of the changes. See the williamr@4: ** williamr@4: ** CorruptionFollowingBusyError wiki page for a discussion of why williamr@4: ** this is important. williamr@4: ** williamr@4: ** There can only be a single busy handler defined for each williamr@4: ** [database connection]. Setting a new busy handler clears any williamr@4: ** previously set handler. Note that calling [sqlite3_busy_timeout()] williamr@4: ** will also set or clear the busy handler. williamr@4: ** williamr@4: ** The busy callback should not take any actions which modify the williamr@4: ** database connection that invoked the busy handler. Any such actions williamr@4: ** result in undefined behavior. williamr@4: ** williamr@4: ** INVARIANTS: williamr@4: ** williamr@4: ** {H12311} The [sqlite3_busy_handler(D,C,A)] function shall replace williamr@4: ** busy callback in the [database connection] D with a new williamr@4: ** a new busy handler C and application data pointer A. williamr@4: ** williamr@4: ** {H12312} Newly created [database connections] shall have a busy williamr@4: ** handler of NULL. williamr@4: ** williamr@4: ** {H12314} When two or more [database connections] share a williamr@4: ** [sqlite3_enable_shared_cache | common cache], williamr@4: ** the busy handler for the database connection currently using williamr@4: ** the cache shall be invoked when the cache encounters a lock. williamr@4: ** williamr@4: ** {H12316} If a busy handler callback returns zero, then the SQLite interface williamr@4: ** that provoked the locking event shall return [SQLITE_BUSY]. williamr@4: ** williamr@4: ** {H12318} SQLite shall invokes the busy handler with two arguments which williamr@4: ** are a copy of the pointer supplied by the 3rd parameter to williamr@4: ** [sqlite3_busy_handler()] and a count of the number of prior williamr@4: ** invocations of the busy handler for the same locking event. williamr@4: ** williamr@4: ** ASSUMPTIONS: williamr@4: ** williamr@4: ** {A12319} A busy handler must not close the database connection williamr@4: ** or [prepared statement] that invoked the busy handler. williamr@4: */ williamr@4: IMPORT_C int sqlite3_busy_handler(sqlite3*, int(*)(void*,int), void*); williamr@4: williamr@4: /* williamr@4: ** CAPI3REF: Set A Busy Timeout {H12340} williamr@4: ** williamr@4: ** This routine sets a [sqlite3_busy_handler | busy handler] that sleeps williamr@4: ** for a specified amount of time when a table is locked. The handler williamr@4: ** will sleep multiple times until at least "ms" milliseconds of sleeping williamr@4: ** have accumulated. {H12343} After "ms" milliseconds of sleeping, williamr@4: ** the handler returns 0 which causes [sqlite3_step()] to return williamr@4: ** [SQLITE_BUSY] or [SQLITE_IOERR_BLOCKED]. williamr@4: ** williamr@4: ** Calling this routine with an argument less than or equal to zero williamr@4: ** turns off all busy handlers. williamr@4: ** williamr@4: ** There can only be a single busy handler for a particular williamr@4: ** [database connection] any any given moment. If another busy handler williamr@4: ** was defined (using [sqlite3_busy_handler()]) prior to calling williamr@4: ** this routine, that other busy handler is cleared. williamr@4: ** williamr@4: ** INVARIANTS: williamr@4: ** williamr@4: ** {H12341} The [sqlite3_busy_timeout()] function shall override any prior williamr@4: ** [sqlite3_busy_timeout()] or [sqlite3_busy_handler()] setting williamr@4: ** on the same [database connection]. williamr@4: ** williamr@4: ** {H12343} If the 2nd parameter to [sqlite3_busy_timeout()] is less than williamr@4: ** or equal to zero, then the busy handler shall be cleared so that williamr@4: ** all subsequent locking events immediately return [SQLITE_BUSY]. williamr@4: ** williamr@4: ** {H12344} If the 2nd parameter to [sqlite3_busy_timeout()] is a positive williamr@4: ** number N, then a busy handler shall be set that repeatedly calls williamr@4: ** the xSleep() method in the [sqlite3_vfs | VFS interface] until williamr@4: ** either the lock clears or until the cumulative sleep time williamr@4: ** reported back by xSleep() exceeds N milliseconds. williamr@4: */ williamr@4: IMPORT_C int sqlite3_busy_timeout(sqlite3*, int ms); williamr@4: williamr@4: /* williamr@4: ** CAPI3REF: Convenience Routines For Running Queries {H12370} williamr@4: ** williamr@4: ** Definition: A result table is memory data structure created by the williamr@4: ** [sqlite3_get_table()] interface. A result table records the williamr@4: ** complete query results from one or more queries. williamr@4: ** williamr@4: ** The table conceptually has a number of rows and columns. But williamr@4: ** these numbers are not part of the result table itself. These williamr@4: ** numbers are obtained separately. Let N be the number of rows williamr@4: ** and M be the number of columns. williamr@4: ** williamr@4: ** A result table is an array of pointers to zero-terminated UTF-8 strings. williamr@4: ** There are (N+1)*M elements in the array. The first M pointers point williamr@4: ** to zero-terminated strings that contain the names of the columns. williamr@4: ** The remaining entries all point to query results. NULL values result williamr@4: ** in NULL pointers. All other values are in their UTF-8 zero-terminated williamr@4: ** string representation as returned by [sqlite3_column_text()]. williamr@4: ** williamr@4: ** A result table might consist of one or more memory allocations. williamr@4: ** It is not safe to pass a result table directly to [sqlite3_free()]. williamr@4: ** A result table should be deallocated using [sqlite3_free_table()]. williamr@4: ** williamr@4: ** As an example of the result table format, suppose a query result williamr@4: ** is as follows: williamr@4: ** williamr@4: **
williamr@4: **        Name        | Age
williamr@4: **        -----------------------
williamr@4: **        Alice       | 43
williamr@4: **        Bob         | 28
williamr@4: **        Cindy       | 21
williamr@4: ** 
williamr@4: ** williamr@4: ** There are two column (M==2) and three rows (N==3). Thus the williamr@4: ** result table has 8 entries. Suppose the result table is stored williamr@4: ** in an array names azResult. Then azResult holds this content: williamr@4: ** williamr@4: **
williamr@4: **        azResult[0] = "Name";
williamr@4: **        azResult[1] = "Age";
williamr@4: **        azResult[2] = "Alice";
williamr@4: **        azResult[3] = "43";
williamr@4: **        azResult[4] = "Bob";
williamr@4: **        azResult[5] = "28";
williamr@4: **        azResult[6] = "Cindy";
williamr@4: **        azResult[7] = "21";
williamr@4: ** 
williamr@4: ** williamr@4: ** The sqlite3_get_table() function evaluates one or more williamr@4: ** semicolon-separated SQL statements in the zero-terminated UTF-8 williamr@4: ** string of its 2nd parameter. It returns a result table to the williamr@4: ** pointer given in its 3rd parameter. williamr@4: ** williamr@4: ** After the calling function has finished using the result, it should williamr@4: ** pass the pointer to the result table to sqlite3_free_table() in order to williamr@4: ** release the memory that was malloced. Because of the way the williamr@4: ** [sqlite3_malloc()] happens within sqlite3_get_table(), the calling williamr@4: ** function must not try to call [sqlite3_free()] directly. Only williamr@4: ** [sqlite3_free_table()] is able to release the memory properly and safely. williamr@4: ** williamr@4: ** The sqlite3_get_table() interface is implemented as a wrapper around williamr@4: ** [sqlite3_exec()]. The sqlite3_get_table() routine does not have access williamr@4: ** to any internal data structures of SQLite. It uses only the public williamr@4: ** interface defined here. As a consequence, errors that occur in the williamr@4: ** wrapper layer outside of the internal [sqlite3_exec()] call are not williamr@4: ** reflected in subsequent calls to [sqlite3_errcode()] or [sqlite3_errmsg()]. williamr@4: ** williamr@4: ** INVARIANTS: williamr@4: ** williamr@4: ** {H12371} If a [sqlite3_get_table()] fails a memory allocation, then williamr@4: ** it shall free the result table under construction, abort the williamr@4: ** query in process, skip any subsequent queries, set the williamr@4: ** *pazResult output pointer to NULL and return [SQLITE_NOMEM]. williamr@4: ** williamr@4: ** {H12373} If the pnColumn parameter to [sqlite3_get_table()] is not NULL williamr@4: ** then a successful invocation of [sqlite3_get_table()] shall williamr@4: ** write the number of columns in the williamr@4: ** result set of the query into *pnColumn. williamr@4: ** williamr@4: ** {H12374} If the pnRow parameter to [sqlite3_get_table()] is not NULL williamr@4: ** then a successful invocation of [sqlite3_get_table()] shall williamr@4: ** writes the number of rows in the williamr@4: ** result set of the query into *pnRow. williamr@4: ** williamr@4: ** {H12376} A successful invocation of [sqlite3_get_table()] that computes williamr@4: ** N rows of result with C columns per row shall make *pazResult williamr@4: ** point to an array of pointers to (N+1)*C strings where the first williamr@4: ** C strings are column names as obtained from williamr@4: ** [sqlite3_column_name()] and the rest are column result values williamr@4: ** obtained from [sqlite3_column_text()]. williamr@4: ** williamr@4: ** {H12379} The values in the pazResult array returned by [sqlite3_get_table()] williamr@4: ** shall remain valid until cleared by [sqlite3_free_table()]. williamr@4: ** williamr@4: ** {H12382} When an error occurs during evaluation of [sqlite3_get_table()] williamr@4: ** the function shall set *pazResult to NULL, write an error message williamr@4: ** into memory obtained from [sqlite3_malloc()], make williamr@4: ** **pzErrmsg point to that error message, and return a williamr@4: ** appropriate [error code]. williamr@4: */ williamr@4: IMPORT_C int sqlite3_get_table( williamr@4: sqlite3 *db, /* An open database */ williamr@4: const char *zSql, /* SQL to be evaluated */ williamr@4: char ***pazResult, /* Results of the query */ williamr@4: int *pnRow, /* Number of result rows written here */ williamr@4: int *pnColumn, /* Number of result columns written here */ williamr@4: char **pzErrmsg /* Error msg written here */ williamr@4: ); williamr@4: IMPORT_C void sqlite3_free_table(char **result); williamr@4: williamr@4: /* williamr@4: ** CAPI3REF: Formatted String Printing Functions {H17400} williamr@4: ** williamr@4: ** These routines are workalikes of the "printf()" family of functions williamr@4: ** from the standard C library. williamr@4: ** williamr@4: ** The sqlite3_mprintf() and sqlite3_vmprintf() routines write their williamr@4: ** results into memory obtained from [sqlite3_malloc()]. williamr@4: ** The strings returned by these two routines should be williamr@4: ** released by [sqlite3_free()]. Both routines return a williamr@4: ** NULL pointer if [sqlite3_malloc()] is unable to allocate enough williamr@4: ** memory to hold the resulting string. williamr@4: ** williamr@4: ** In sqlite3_snprintf() routine is similar to "snprintf()" from williamr@4: ** the standard C library. The result is written into the williamr@4: ** buffer supplied as the second parameter whose size is given by williamr@4: ** the first parameter. Note that the order of the williamr@4: ** first two parameters is reversed from snprintf(). This is an williamr@4: ** historical accident that cannot be fixed without breaking williamr@4: ** backwards compatibility. Note also that sqlite3_snprintf() williamr@4: ** returns a pointer to its buffer instead of the number of williamr@4: ** characters actually written into the buffer. We admit that williamr@4: ** the number of characters written would be a more useful return williamr@4: ** value but we cannot change the implementation of sqlite3_snprintf() williamr@4: ** now without breaking compatibility. williamr@4: ** williamr@4: ** As long as the buffer size is greater than zero, sqlite3_snprintf() williamr@4: ** guarantees that the buffer is always zero-terminated. The first williamr@4: ** parameter "n" is the total size of the buffer, including space for williamr@4: ** the zero terminator. So the longest string that can be completely williamr@4: ** written will be n-1 characters. williamr@4: ** williamr@4: ** These routines all implement some additional formatting williamr@4: ** options that are useful for constructing SQL statements. williamr@4: ** All of the usual printf() formatting options apply. In addition, there williamr@4: ** is are "%q", "%Q", and "%z" options. williamr@4: ** williamr@4: ** The %q option works like %s in that it substitutes a null-terminated williamr@4: ** string from the argument list. But %q also doubles every '\'' character. williamr@4: ** %q is designed for use inside a string literal. By doubling each '\'' williamr@4: ** character it escapes that character and allows it to be inserted into williamr@4: ** the string. williamr@4: ** williamr@4: ** For example, assume the string variable zText contains text as follows: williamr@4: ** williamr@4: **
williamr@4: **  char *zText = "It's a happy day!";
williamr@4: ** 
williamr@4: ** williamr@4: ** One can use this text in an SQL statement as follows: williamr@4: ** williamr@4: **
williamr@4: **  char *zSQL = sqlite3_mprintf("INSERT INTO table VALUES('%q')", zText);
williamr@4: **  sqlite3_exec(db, zSQL, 0, 0, 0);
williamr@4: **  sqlite3_free(zSQL);
williamr@4: ** 
williamr@4: ** williamr@4: ** Because the %q format string is used, the '\'' character in zText williamr@4: ** is escaped and the SQL generated is as follows: williamr@4: ** williamr@4: **
williamr@4: **  INSERT INTO table1 VALUES('It''s a happy day!')
williamr@4: ** 
williamr@4: ** williamr@4: ** This is correct. Had we used %s instead of %q, the generated SQL williamr@4: ** would have looked like this: williamr@4: ** williamr@4: **
williamr@4: **  INSERT INTO table1 VALUES('It's a happy day!');
williamr@4: ** 
williamr@4: ** williamr@4: ** This second example is an SQL syntax error. As a general rule you should williamr@4: ** always use %q instead of %s when inserting text into a string literal. williamr@4: ** williamr@4: ** The %Q option works like %q except it also adds single quotes around williamr@4: ** the outside of the total string. Additionally, if the parameter in the williamr@4: ** argument list is a NULL pointer, %Q substitutes the text "NULL" (without williamr@4: ** single quotes) in place of the %Q option. So, for example, one could say: williamr@4: ** williamr@4: **
williamr@4: **  char *zSQL = sqlite3_mprintf("INSERT INTO table VALUES(%Q)", zText);
williamr@4: **  sqlite3_exec(db, zSQL, 0, 0, 0);
williamr@4: **  sqlite3_free(zSQL);
williamr@4: ** 
williamr@4: ** williamr@4: ** The code above will render a correct SQL statement in the zSQL williamr@4: ** variable even if the zText variable is a NULL pointer. williamr@4: ** williamr@4: ** The "%z" formatting option works exactly like "%s" with the williamr@4: ** addition that after the string has been read and copied into williamr@4: ** the result, [sqlite3_free()] is called on the input string. {END} williamr@4: ** williamr@4: ** INVARIANTS: williamr@4: ** williamr@4: ** {H17403} The [sqlite3_mprintf()] and [sqlite3_vmprintf()] interfaces williamr@4: ** return either pointers to zero-terminated UTF-8 strings held in williamr@4: ** memory obtained from [sqlite3_malloc()] or NULL pointers if williamr@4: ** a call to [sqlite3_malloc()] fails. williamr@4: ** williamr@4: ** {H17406} The [sqlite3_snprintf()] interface writes a zero-terminated williamr@4: ** UTF-8 string into the buffer pointed to by the second parameter williamr@4: ** provided that the first parameter is greater than zero. williamr@4: ** williamr@4: ** {H17407} The [sqlite3_snprintf()] interface does not write slots of williamr@4: ** its output buffer (the second parameter) outside the range williamr@4: ** of 0 through N-1 (where N is the first parameter) williamr@4: ** regardless of the length of the string williamr@4: ** requested by the format specification. williamr@4: */ williamr@4: IMPORT_C char *sqlite3_mprintf(const char*,...); williamr@4: IMPORT_C char *sqlite3_vmprintf(const char*, va_list); williamr@4: IMPORT_C char *sqlite3_snprintf(int,char*,const char*, ...); williamr@4: williamr@4: /* williamr@4: ** CAPI3REF: Memory Allocation Subsystem {H17300} williamr@4: ** williamr@4: ** The SQLite core uses these three routines for all of its own williamr@4: ** internal memory allocation needs. "Core" in the previous sentence williamr@4: ** does not include operating-system specific VFS implementation. The williamr@4: ** Windows VFS uses native malloc() and free() for some operations. williamr@4: ** williamr@4: ** The sqlite3_malloc() routine returns a pointer to a block williamr@4: ** of memory at least N bytes in length, where N is the parameter. williamr@4: ** If sqlite3_malloc() is unable to obtain sufficient free williamr@4: ** memory, it returns a NULL pointer. If the parameter N to williamr@4: ** sqlite3_malloc() is zero or negative then sqlite3_malloc() returns williamr@4: ** a NULL pointer. williamr@4: ** williamr@4: ** Calling sqlite3_free() with a pointer previously returned williamr@4: ** by sqlite3_malloc() or sqlite3_realloc() releases that memory so williamr@4: ** that it might be reused. The sqlite3_free() routine is williamr@4: ** a no-op if is called with a NULL pointer. Passing a NULL pointer williamr@4: ** to sqlite3_free() is harmless. After being freed, memory williamr@4: ** should neither be read nor written. Even reading previously freed williamr@4: ** memory might result in a segmentation fault or other severe error. williamr@4: ** Memory corruption, a segmentation fault, or other severe error williamr@4: ** might result if sqlite3_free() is called with a non-NULL pointer that williamr@4: ** was not obtained from sqlite3_malloc() or sqlite3_free(). williamr@4: ** williamr@4: ** The sqlite3_realloc() interface attempts to resize a williamr@4: ** prior memory allocation to be at least N bytes, where N is the williamr@4: ** second parameter. The memory allocation to be resized is the first williamr@4: ** parameter. If the first parameter to sqlite3_realloc() williamr@4: ** is a NULL pointer then its behavior is identical to calling williamr@4: ** sqlite3_malloc(N) where N is the second parameter to sqlite3_realloc(). williamr@4: ** If the second parameter to sqlite3_realloc() is zero or williamr@4: ** negative then the behavior is exactly the same as calling williamr@4: ** sqlite3_free(P) where P is the first parameter to sqlite3_realloc(). williamr@4: ** sqlite3_realloc() returns a pointer to a memory allocation williamr@4: ** of at least N bytes in size or NULL if sufficient memory is unavailable. williamr@4: ** If M is the size of the prior allocation, then min(N,M) bytes williamr@4: ** of the prior allocation are copied into the beginning of buffer returned williamr@4: ** by sqlite3_realloc() and the prior allocation is freed. williamr@4: ** If sqlite3_realloc() returns NULL, then the prior allocation williamr@4: ** is not freed. williamr@4: ** williamr@4: ** The memory returned by sqlite3_malloc() and sqlite3_realloc() williamr@4: ** is always aligned to at least an 8 byte boundary. {END} williamr@4: ** williamr@4: ** The default implementation of the memory allocation subsystem uses williamr@4: ** the malloc(), realloc() and free() provided by the standard C library. williamr@4: ** {H17382} However, if SQLite is compiled with the williamr@4: ** SQLITE_MEMORY_SIZE=NNN C preprocessor macro (where NNN williamr@4: ** is an integer), then SQLite create a static array of at least williamr@4: ** NNN bytes in size and uses that array for all of its dynamic williamr@4: ** memory allocation needs. {END} Additional memory allocator options williamr@4: ** may be added in future releases. williamr@4: ** williamr@4: ** In SQLite version 3.5.0 and 3.5.1, it was possible to define williamr@4: ** the SQLITE_OMIT_MEMORY_ALLOCATION which would cause the built-in williamr@4: ** implementation of these routines to be omitted. That capability williamr@4: ** is no longer provided. Only built-in memory allocators can be used. williamr@4: ** williamr@4: ** The Windows OS interface layer calls williamr@4: ** the system malloc() and free() directly when converting williamr@4: ** filenames between the UTF-8 encoding used by SQLite williamr@4: ** and whatever filename encoding is used by the particular Windows williamr@4: ** installation. Memory allocation errors are detected, but williamr@4: ** they are reported back as [SQLITE_CANTOPEN] or williamr@4: ** [SQLITE_IOERR] rather than [SQLITE_NOMEM]. williamr@4: ** williamr@4: ** INVARIANTS: williamr@4: ** williamr@4: ** {H17303} The [sqlite3_malloc(N)] interface returns either a pointer to williamr@4: ** a newly checked-out block of at least N bytes of memory williamr@4: ** that is 8-byte aligned, or it returns NULL if it is unable williamr@4: ** to fulfill the request. williamr@4: ** williamr@4: ** {H17304} The [sqlite3_malloc(N)] interface returns a NULL pointer if williamr@4: ** N is less than or equal to zero. williamr@4: ** williamr@4: ** {H17305} The [sqlite3_free(P)] interface releases memory previously williamr@4: ** returned from [sqlite3_malloc()] or [sqlite3_realloc()], williamr@4: ** making it available for reuse. williamr@4: ** williamr@4: ** {H17306} A call to [sqlite3_free(NULL)] is a harmless no-op. williamr@4: ** williamr@4: ** {H17310} A call to [sqlite3_realloc(0,N)] is equivalent to a call williamr@4: ** to [sqlite3_malloc(N)]. williamr@4: ** williamr@4: ** {H17312} A call to [sqlite3_realloc(P,0)] is equivalent to a call williamr@4: ** to [sqlite3_free(P)]. williamr@4: ** williamr@4: ** {H17315} The SQLite core uses [sqlite3_malloc()], [sqlite3_realloc()], williamr@4: ** and [sqlite3_free()] for all of its memory allocation and williamr@4: ** deallocation needs. williamr@4: ** williamr@4: ** {H17318} The [sqlite3_realloc(P,N)] interface returns either a pointer williamr@4: ** to a block of checked-out memory of at least N bytes in size williamr@4: ** that is 8-byte aligned, or a NULL pointer. williamr@4: ** williamr@4: ** {H17321} When [sqlite3_realloc(P,N)] returns a non-NULL pointer, it first williamr@4: ** copies the first K bytes of content from P into the newly williamr@4: ** allocated block, where K is the lesser of N and the size of williamr@4: ** the buffer P. williamr@4: ** williamr@4: ** {H17322} When [sqlite3_realloc(P,N)] returns a non-NULL pointer, it first williamr@4: ** releases the buffer P. williamr@4: ** williamr@4: ** {H17323} When [sqlite3_realloc(P,N)] returns NULL, the buffer P is williamr@4: ** not modified or released. williamr@4: ** williamr@4: ** ASSUMPTIONS: williamr@4: ** williamr@4: ** {A17350} The pointer arguments to [sqlite3_free()] and [sqlite3_realloc()] williamr@4: ** must be either NULL or else pointers obtained from a prior williamr@4: ** invocation of [sqlite3_malloc()] or [sqlite3_realloc()] that have williamr@4: ** not yet been released. williamr@4: ** williamr@4: ** {A17351} The application must not read or write any part of williamr@4: ** a block of memory after it has been released using williamr@4: ** [sqlite3_free()] or [sqlite3_realloc()]. williamr@4: */ williamr@4: IMPORT_C void *sqlite3_malloc(int); williamr@4: IMPORT_C void *sqlite3_realloc(void*, int); williamr@4: IMPORT_C void sqlite3_free(void*); williamr@4: williamr@4: /* williamr@4: ** CAPI3REF: Memory Allocator Statistics {H17370} williamr@4: ** williamr@4: ** SQLite provides these two interfaces for reporting on the status williamr@4: ** of the [sqlite3_malloc()], [sqlite3_free()], and [sqlite3_realloc()] williamr@4: ** routines, which form the built-in memory allocation subsystem. williamr@4: ** williamr@4: ** INVARIANTS: williamr@4: ** williamr@4: ** {H17371} The [sqlite3_memory_used()] routine returns the number of bytes williamr@4: ** of memory currently outstanding (malloced but not freed). williamr@4: ** williamr@4: ** {H17373} The [sqlite3_memory_highwater()] routine returns the maximum williamr@4: ** value of [sqlite3_memory_used()] since the high-water mark williamr@4: ** was last reset. williamr@4: ** williamr@4: ** {H17374} The values returned by [sqlite3_memory_used()] and williamr@4: ** [sqlite3_memory_highwater()] include any overhead williamr@4: ** added by SQLite in its implementation of [sqlite3_malloc()], williamr@4: ** but not overhead added by the any underlying system library williamr@4: ** routines that [sqlite3_malloc()] may call. williamr@4: ** williamr@4: ** {H17375} The memory high-water mark is reset to the current value of williamr@4: ** [sqlite3_memory_used()] if and only if the parameter to williamr@4: ** [sqlite3_memory_highwater()] is true. The value returned williamr@4: ** by [sqlite3_memory_highwater(1)] is the high-water mark williamr@4: ** prior to the reset. williamr@4: */ williamr@4: IMPORT_C sqlite3_int64 sqlite3_memory_used(void); williamr@4: IMPORT_C sqlite3_int64 sqlite3_memory_highwater(int resetFlag); williamr@4: williamr@4: /* williamr@4: ** CAPI3REF: Pseudo-Random Number Generator {H17390} williamr@4: ** williamr@4: ** SQLite contains a high-quality pseudo-random number generator (PRNG) used to williamr@4: ** select random ROWIDs when inserting new records into a table that williamr@4: ** already uses the largest possible ROWID. The PRNG is also used for williamr@4: ** the build-in random() and randomblob() SQL functions. This interface allows williamr@4: ** applications to access the same PRNG for other purposes. williamr@4: ** williamr@4: ** A call to this routine stores N bytes of randomness into buffer P. williamr@4: ** williamr@4: ** The first time this routine is invoked (either internally or by williamr@4: ** the application) the PRNG is seeded using randomness obtained williamr@4: ** from the xRandomness method of the default [sqlite3_vfs] object. williamr@4: ** On all subsequent invocations, the pseudo-randomness is generated williamr@4: ** internally and without recourse to the [sqlite3_vfs] xRandomness williamr@4: ** method. williamr@4: ** williamr@4: ** INVARIANTS: williamr@4: ** williamr@4: ** {H17392} The [sqlite3_randomness(N,P)] interface writes N bytes of williamr@4: ** high-quality pseudo-randomness into buffer P. williamr@4: */ williamr@4: IMPORT_C void sqlite3_randomness(int N, void *P); williamr@4: williamr@4: /* williamr@4: ** CAPI3REF: Compile-Time Authorization Callbacks {H12500} williamr@4: ** williamr@4: ** This routine registers a authorizer callback with a particular williamr@4: ** [database connection], supplied in the first argument. williamr@4: ** The authorizer callback is invoked as SQL statements are being compiled williamr@4: ** by [sqlite3_prepare()] or its variants [sqlite3_prepare_v2()], williamr@4: ** [sqlite3_prepare16()] and [sqlite3_prepare16_v2()]. At various williamr@4: ** points during the compilation process, as logic is being created williamr@4: ** to perform various actions, the authorizer callback is invoked to williamr@4: ** see if those actions are allowed. The authorizer callback should williamr@4: ** return [SQLITE_OK] to allow the action, [SQLITE_IGNORE] to disallow the williamr@4: ** specific action but allow the SQL statement to continue to be williamr@4: ** compiled, or [SQLITE_DENY] to cause the entire SQL statement to be williamr@4: ** rejected with an error. If the authorizer callback returns williamr@4: ** any value other than [SQLITE_IGNORE], [SQLITE_OK], or [SQLITE_DENY] williamr@4: ** then the [sqlite3_prepare_v2()] or equivalent call that triggered williamr@4: ** the authorizer will fail with an error message. williamr@4: ** williamr@4: ** When the callback returns [SQLITE_OK], that means the operation williamr@4: ** requested is ok. When the callback returns [SQLITE_DENY], the williamr@4: ** [sqlite3_prepare_v2()] or equivalent call that triggered the williamr@4: ** authorizer will fail with an error message explaining that williamr@4: ** access is denied. If the authorizer code is [SQLITE_READ] williamr@4: ** and the callback returns [SQLITE_IGNORE] then the williamr@4: ** [prepared statement] statement is constructed to substitute williamr@4: ** a NULL value in place of the table column that would have williamr@4: ** been read if [SQLITE_OK] had been returned. The [SQLITE_IGNORE] williamr@4: ** return can be used to deny an untrusted user access to individual williamr@4: ** columns of a table. williamr@4: ** williamr@4: ** The first parameter to the authorizer callback is a copy of the third williamr@4: ** parameter to the sqlite3_set_authorizer() interface. The second parameter williamr@4: ** to the callback is an integer [SQLITE_COPY | action code] that specifies williamr@4: ** the particular action to be authorized. The third through sixth parameters williamr@4: ** to the callback are zero-terminated strings that contain additional williamr@4: ** details about the action to be authorized. williamr@4: ** williamr@4: ** An authorizer is used when [sqlite3_prepare | preparing] williamr@4: ** SQL statements from an untrusted source, to ensure that the SQL statements williamr@4: ** do not try to access data they are not allowed to see, or that they do not williamr@4: ** try to execute malicious statements that damage the database. For williamr@4: ** example, an application may allow a user to enter arbitrary williamr@4: ** SQL queries for evaluation by a database. But the application does williamr@4: ** not want the user to be able to make arbitrary changes to the williamr@4: ** database. An authorizer could then be put in place while the williamr@4: ** user-entered SQL is being [sqlite3_prepare | prepared] that williamr@4: ** disallows everything except [SELECT] statements. williamr@4: ** williamr@4: ** Applications that need to process SQL from untrusted sources williamr@4: ** might also consider lowering resource limits using [sqlite3_limit()] williamr@4: ** and limiting database size using the [max_page_count] [PRAGMA] williamr@4: ** in addition to using an authorizer. williamr@4: ** williamr@4: ** Only a single authorizer can be in place on a database connection williamr@4: ** at a time. Each call to sqlite3_set_authorizer overrides the williamr@4: ** previous call. Disable the authorizer by installing a NULL callback. williamr@4: ** The authorizer is disabled by default. williamr@4: ** williamr@4: ** The authorizer callback must not do anything that will modify williamr@4: ** the database connection that invoked the authorizer callback. williamr@4: ** Note that [sqlite3_prepare_v2()] and [sqlite3_step()] both modify their williamr@4: ** database connections for the meaning of "modify" in this paragraph. williamr@4: ** williamr@4: ** When [sqlite3_prepare_v2()] is used to prepare a statement, the williamr@4: ** statement might be reprepared during [sqlite3_step()] due to a williamr@4: ** schema change. Hence, the application should ensure that the williamr@4: ** correct authorizer callback remains in place during the [sqlite3_step()]. williamr@4: ** williamr@4: ** Note that the authorizer callback is invoked only during williamr@4: ** [sqlite3_prepare()] or its variants. Authorization is not williamr@4: ** performed during statement evaluation in [sqlite3_step()]. williamr@4: ** williamr@4: ** INVARIANTS: williamr@4: ** williamr@4: ** {H12501} The [sqlite3_set_authorizer(D,...)] interface registers a williamr@4: ** authorizer callback with database connection D. williamr@4: ** williamr@4: ** {H12502} The authorizer callback is invoked as SQL statements are williamr@4: ** being parseed and compiled. williamr@4: ** williamr@4: ** {H12503} If the authorizer callback returns any value other than williamr@4: ** [SQLITE_IGNORE], [SQLITE_OK], or [SQLITE_DENY], then williamr@4: ** the application interface call that caused williamr@4: ** the authorizer callback to run shall fail with an williamr@4: ** [SQLITE_ERROR] error code and an appropriate error message. williamr@4: ** williamr@4: ** {H12504} When the authorizer callback returns [SQLITE_OK], the operation williamr@4: ** described is processed normally. williamr@4: ** williamr@4: ** {H12505} When the authorizer callback returns [SQLITE_DENY], the williamr@4: ** application interface call that caused the williamr@4: ** authorizer callback to run shall fail williamr@4: ** with an [SQLITE_ERROR] error code and an error message williamr@4: ** explaining that access is denied. williamr@4: ** williamr@4: ** {H12506} If the authorizer code (the 2nd parameter to the authorizer williamr@4: ** callback) is [SQLITE_READ] and the authorizer callback returns williamr@4: ** [SQLITE_IGNORE], then the prepared statement is constructed to williamr@4: ** insert a NULL value in place of the table column that would have williamr@4: ** been read if [SQLITE_OK] had been returned. williamr@4: ** williamr@4: ** {H12507} If the authorizer code (the 2nd parameter to the authorizer williamr@4: ** callback) is anything other than [SQLITE_READ], then williamr@4: ** a return of [SQLITE_IGNORE] has the same effect as [SQLITE_DENY]. williamr@4: ** williamr@4: ** {H12510} The first parameter to the authorizer callback is a copy of williamr@4: ** the third parameter to the [sqlite3_set_authorizer()] interface. williamr@4: ** williamr@4: ** {H12511} The second parameter to the callback is an integer williamr@4: ** [SQLITE_COPY | action code] that specifies the particular action williamr@4: ** to be authorized. williamr@4: ** williamr@4: ** {H12512} The third through sixth parameters to the callback are williamr@4: ** zero-terminated strings that contain williamr@4: ** additional details about the action to be authorized. williamr@4: ** williamr@4: ** {H12520} Each call to [sqlite3_set_authorizer()] overrides williamr@4: ** any previously installed authorizer. williamr@4: ** williamr@4: ** {H12521} A NULL authorizer means that no authorization williamr@4: ** callback is invoked. williamr@4: ** williamr@4: ** {H12522} The default authorizer is NULL. williamr@4: */ williamr@4: IMPORT_C int sqlite3_set_authorizer( williamr@4: sqlite3*, williamr@4: int (*xAuth)(void*,int,const char*,const char*,const char*,const char*), williamr@4: void *pUserData williamr@4: ); williamr@4: williamr@4: /* williamr@4: ** CAPI3REF: Authorizer Return Codes {H12590} williamr@4: ** williamr@4: ** The [sqlite3_set_authorizer | authorizer callback function] must williamr@4: ** return either [SQLITE_OK] or one of these two constants in order williamr@4: ** to signal SQLite whether or not the action is permitted. See the williamr@4: ** [sqlite3_set_authorizer | authorizer documentation] for additional williamr@4: ** information. williamr@4: */ williamr@4: #define SQLITE_DENY 1 /* Abort the SQL statement with an error */ williamr@4: #define SQLITE_IGNORE 2 /* Don't allow access, but don't generate an error */ williamr@4: williamr@4: /* williamr@4: ** CAPI3REF: Authorizer Action Codes {H12550} williamr@4: ** williamr@4: ** The [sqlite3_set_authorizer()] interface registers a callback function williamr@4: ** that is invoked to authorize certain SQL statement actions. The williamr@4: ** second parameter to the callback is an integer code that specifies williamr@4: ** what action is being authorized. These are the integer action codes that williamr@4: ** the authorizer callback may be passed. williamr@4: ** williamr@4: ** These action code values signify what kind of operation is to be williamr@4: ** authorized. The 3rd and 4th parameters to the authorization williamr@4: ** callback function will be parameters or NULL depending on which of these williamr@4: ** codes is used as the second parameter. The 5th parameter to the williamr@4: ** authorizer callback is the name of the database ("main", "temp", williamr@4: ** etc.) if applicable. The 6th parameter to the authorizer callback williamr@4: ** is the name of the inner-most trigger or view that is responsible for williamr@4: ** the access attempt or NULL if this access attempt is directly from williamr@4: ** top-level SQL code. williamr@4: ** williamr@4: ** INVARIANTS: williamr@4: ** williamr@4: ** {H12551} The second parameter to an williamr@4: ** [sqlite3_set_authorizer | authorizer callback] shall be an integer williamr@4: ** [SQLITE_COPY | authorizer code] that specifies what action williamr@4: ** is being authorized. williamr@4: ** williamr@4: ** {H12552} The 3rd and 4th parameters to the williamr@4: ** [sqlite3_set_authorizer | authorization callback] williamr@4: ** shall be parameters or NULL depending on which williamr@4: ** [SQLITE_COPY | authorizer code] is used as the second parameter. williamr@4: ** williamr@4: ** {H12553} The 5th parameter to the williamr@4: ** [sqlite3_set_authorizer | authorizer callback] shall be the name williamr@4: ** of the database (example: "main", "temp", etc.) if applicable. williamr@4: ** williamr@4: ** {H12554} The 6th parameter to the williamr@4: ** [sqlite3_set_authorizer | authorizer callback] shall be the name williamr@4: ** of the inner-most trigger or view that is responsible for williamr@4: ** the access attempt or NULL if this access attempt is directly from williamr@4: ** top-level SQL code. williamr@4: */ williamr@4: /******************************************* 3rd ************ 4th ***********/ williamr@4: #define SQLITE_CREATE_INDEX 1 /* Index Name Table Name */ williamr@4: #define SQLITE_CREATE_TABLE 2 /* Table Name NULL */ williamr@4: #define SQLITE_CREATE_TEMP_INDEX 3 /* Index Name Table Name */ williamr@4: #define SQLITE_CREATE_TEMP_TABLE 4 /* Table Name NULL */ williamr@4: #define SQLITE_CREATE_TEMP_TRIGGER 5 /* Trigger Name Table Name */ williamr@4: #define SQLITE_CREATE_TEMP_VIEW 6 /* View Name NULL */ williamr@4: #define SQLITE_CREATE_TRIGGER 7 /* Trigger Name Table Name */ williamr@4: #define SQLITE_CREATE_VIEW 8 /* View Name NULL */ williamr@4: #define SQLITE_DELETE 9 /* Table Name NULL */ williamr@4: #define SQLITE_DROP_INDEX 10 /* Index Name Table Name */ williamr@4: #define SQLITE_DROP_TABLE 11 /* Table Name NULL */ williamr@4: #define SQLITE_DROP_TEMP_INDEX 12 /* Index Name Table Name */ williamr@4: #define SQLITE_DROP_TEMP_TABLE 13 /* Table Name NULL */ williamr@4: #define SQLITE_DROP_TEMP_TRIGGER 14 /* Trigger Name Table Name */ williamr@4: #define SQLITE_DROP_TEMP_VIEW 15 /* View Name NULL */ williamr@4: #define SQLITE_DROP_TRIGGER 16 /* Trigger Name Table Name */ williamr@4: #define SQLITE_DROP_VIEW 17 /* View Name NULL */ williamr@4: #define SQLITE_INSERT 18 /* Table Name NULL */ williamr@4: #define SQLITE_PRAGMA 19 /* Pragma Name 1st arg or NULL */ williamr@4: #define SQLITE_READ 20 /* Table Name Column Name */ williamr@4: #define SQLITE_SELECT 21 /* NULL NULL */ williamr@4: #define SQLITE_TRANSACTION 22 /* NULL NULL */ williamr@4: #define SQLITE_UPDATE 23 /* Table Name Column Name */ williamr@4: #define SQLITE_ATTACH 24 /* Filename NULL */ williamr@4: #define SQLITE_DETACH 25 /* Database Name NULL */ williamr@4: #define SQLITE_ALTER_TABLE 26 /* Database Name Table Name */ williamr@4: #define SQLITE_REINDEX 27 /* Index Name NULL */ williamr@4: #define SQLITE_ANALYZE 28 /* Table Name NULL */ williamr@4: #define SQLITE_CREATE_VTABLE 29 /* Table Name Module Name */ williamr@4: #define SQLITE_DROP_VTABLE 30 /* Table Name Module Name */ williamr@4: #define SQLITE_FUNCTION 31 /* Function Name NULL */ williamr@4: #define SQLITE_COPY 0 /* No longer used */ williamr@4: williamr@4: /* williamr@4: ** CAPI3REF: Tracing And Profiling Functions {H12280} williamr@4: ** EXPERIMENTAL williamr@4: ** williamr@4: ** These routines register callback functions that can be used for williamr@4: ** tracing and profiling the execution of SQL statements. williamr@4: ** williamr@4: ** The callback function registered by sqlite3_trace() is invoked at williamr@4: ** various times when an SQL statement is being run by [sqlite3_step()]. williamr@4: ** The callback returns a UTF-8 rendering of the SQL statement text williamr@4: ** as the statement first begins executing. Additional callbacks occur williamr@4: ** as each triggered subprogram is entered. The callbacks for triggers williamr@4: ** contain a UTF-8 SQL comment that identifies the trigger. williamr@4: ** williamr@4: ** The callback function registered by sqlite3_profile() is invoked williamr@4: ** as each SQL statement finishes. The profile callback contains williamr@4: ** the original statement text and an estimate of wall-clock time williamr@4: ** of how long that statement took to run. williamr@4: ** williamr@4: ** INVARIANTS: williamr@4: ** williamr@4: ** {H12281} The callback function registered by [sqlite3_trace()] williamr@4: ** shall be invoked williamr@4: ** whenever an SQL statement first begins to execute and williamr@4: ** whenever a trigger subprogram first begins to run. williamr@4: ** williamr@4: ** {H12282} Each call to [sqlite3_trace()] shall override the previously williamr@4: ** registered trace callback. williamr@4: ** williamr@4: ** {H12283} A NULL trace callback shall disable tracing. williamr@4: ** williamr@4: ** {H12284} The first argument to the trace callback shall be a copy of williamr@4: ** the pointer which was the 3rd argument to [sqlite3_trace()]. williamr@4: ** williamr@4: ** {H12285} The second argument to the trace callback is a williamr@4: ** zero-terminated UTF-8 string containing the original text williamr@4: ** of the SQL statement as it was passed into [sqlite3_prepare_v2()] williamr@4: ** or the equivalent, or an SQL comment indicating the beginning williamr@4: ** of a trigger subprogram. williamr@4: ** williamr@4: ** {H12287} The callback function registered by [sqlite3_profile()] is invoked williamr@4: ** as each SQL statement finishes. williamr@4: ** williamr@4: ** {H12288} The first parameter to the profile callback is a copy of williamr@4: ** the 3rd parameter to [sqlite3_profile()]. williamr@4: ** williamr@4: ** {H12289} The second parameter to the profile callback is a williamr@4: ** zero-terminated UTF-8 string that contains the complete text of williamr@4: ** the SQL statement as it was processed by [sqlite3_prepare_v2()] williamr@4: ** or the equivalent. williamr@4: ** williamr@4: ** {H12290} The third parameter to the profile callback is an estimate williamr@4: ** of the number of nanoseconds of wall-clock time required to williamr@4: ** run the SQL statement from start to finish. williamr@4: */ williamr@4: IMPORT_C void *sqlite3_trace(sqlite3*, void(*xTrace)(void*,const char*), void*); williamr@4: IMPORT_C void *sqlite3_profile(sqlite3*, williamr@4: void(*xProfile)(void*,const char*,sqlite3_uint64), void*); williamr@4: williamr@4: /* williamr@4: ** CAPI3REF: Query Progress Callbacks {H12910} williamr@4: ** williamr@4: ** This routine configures a callback function - the williamr@4: ** progress callback - that is invoked periodically during long williamr@4: ** running calls to [sqlite3_exec()], [sqlite3_step()] and williamr@4: ** [sqlite3_get_table()]. An example use for this williamr@4: ** interface is to keep a GUI updated during a large query. williamr@4: ** williamr@4: ** If the progress callback returns non-zero, the operation is williamr@4: ** interrupted. This feature can be used to implement a williamr@4: ** "Cancel" button on a GUI progress dialog box. williamr@4: ** williamr@4: ** The progress handler must not do anything that will modify williamr@4: ** the database connection that invoked the progress handler. williamr@4: ** Note that [sqlite3_prepare_v2()] and [sqlite3_step()] both modify their williamr@4: ** database connections for the meaning of "modify" in this paragraph. williamr@4: ** williamr@4: ** INVARIANTS: williamr@4: ** williamr@4: ** {H12911} The callback function registered by sqlite3_progress_handler() williamr@4: ** is invoked periodically during long running calls to williamr@4: ** [sqlite3_step()]. williamr@4: ** williamr@4: ** {H12912} The progress callback is invoked once for every N virtual williamr@4: ** machine opcodes, where N is the second argument to williamr@4: ** the [sqlite3_progress_handler()] call that registered williamr@4: ** the callback. If N is less than 1, sqlite3_progress_handler() williamr@4: ** acts as if a NULL progress handler had been specified. williamr@4: ** williamr@4: ** {H12913} The progress callback itself is identified by the third williamr@4: ** argument to sqlite3_progress_handler(). williamr@4: ** williamr@4: ** {H12914} The fourth argument to sqlite3_progress_handler() is a williamr@4: ** void pointer passed to the progress callback williamr@4: ** function each time it is invoked. williamr@4: ** williamr@4: ** {H12915} If a call to [sqlite3_step()] results in fewer than N opcodes williamr@4: ** being executed, then the progress callback is never invoked. williamr@4: ** williamr@4: ** {H12916} Every call to [sqlite3_progress_handler()] williamr@4: ** overwrites any previously registered progress handler. williamr@4: ** williamr@4: ** {H12917} If the progress handler callback is NULL then no progress williamr@4: ** handler is invoked. williamr@4: ** williamr@4: ** {H12918} If the progress callback returns a result other than 0, then williamr@4: ** the behavior is a if [sqlite3_interrupt()] had been called. williamr@4: ** williamr@4: */ williamr@4: IMPORT_C void sqlite3_progress_handler(sqlite3*, int, int(*)(void*), void*); williamr@4: williamr@4: /* williamr@4: ** CAPI3REF: Opening A New Database Connection {H12700} williamr@4: ** williamr@4: ** These routines open an SQLite database file whose name is given by the williamr@4: ** filename argument. The filename argument is interpreted as UTF-8 for williamr@4: ** sqlite3_open() and sqlite3_open_v2() and as UTF-16 in the native byte williamr@4: ** order for sqlite3_open16(). A [database connection] handle is usually williamr@4: ** returned in *ppDb, even if an error occurs. The only exception is that williamr@4: ** if SQLite is unable to allocate memory to hold the [sqlite3] object, williamr@4: ** a NULL will be written into *ppDb instead of a pointer to the [sqlite3] williamr@4: ** object. If the database is opened (and/or created) successfully, then williamr@4: ** [SQLITE_OK] is returned. Otherwise an [error code] is returned. The williamr@4: ** [sqlite3_errmsg()] or [sqlite3_errmsg16()] routines can be used to obtain williamr@4: ** an English language description of the error. williamr@4: ** williamr@4: ** The default encoding for the database will be UTF-8 if williamr@4: ** sqlite3_open() or sqlite3_open_v2() is called and williamr@4: ** UTF-16 in the native byte order if sqlite3_open16() is used. williamr@4: ** williamr@4: ** Whether or not an error occurs when it is opened, resources williamr@4: ** associated with the [database connection] handle should be released by williamr@4: ** passing it to [sqlite3_close()] when it is no longer required. williamr@4: ** williamr@4: ** The sqlite3_open_v2() interface works like sqlite3_open() williamr@4: ** except that it accepts two additional parameters for additional control williamr@4: ** over the new database connection. The flags parameter can take one of williamr@4: ** the following three values, optionally combined with the williamr@4: ** [SQLITE_OPEN_NOMUTEX] or [SQLITE_OPEN_FULLMUTEX] flags: williamr@4: ** williamr@4: **
williamr@4: **
[SQLITE_OPEN_READONLY]
williamr@4: **
The database is opened in read-only mode. If the database does not williamr@4: ** already exist, an error is returned.
williamr@4: ** williamr@4: **
[SQLITE_OPEN_READWRITE]
williamr@4: **
The database is opened for reading and writing if possible, or reading williamr@4: ** only if the file is write protected by the operating system. In either williamr@4: ** case the database must already exist, otherwise an error is returned.
williamr@4: ** williamr@4: **
[SQLITE_OPEN_READWRITE] | [SQLITE_OPEN_CREATE]
williamr@4: **
The database is opened for reading and writing, and is creates it if williamr@4: ** it does not already exist. This is the behavior that is always used for williamr@4: ** sqlite3_open() and sqlite3_open16().
williamr@4: **
williamr@4: ** williamr@4: ** If the 3rd parameter to sqlite3_open_v2() is not one of the williamr@4: ** combinations shown above or one of the combinations shown above combined williamr@4: ** with the [SQLITE_OPEN_NOMUTEX] or [SQLITE_OPEN_FULLMUTEX] flags, williamr@4: ** then the behavior is undefined. williamr@4: ** williamr@4: ** If the [SQLITE_OPEN_NOMUTEX] flag is set, then the database connection williamr@4: ** opens in the multi-thread [threading mode] as long as the single-thread williamr@4: ** mode has not been set at compile-time or start-time. If the williamr@4: ** [SQLITE_OPEN_FULLMUTEX] flag is set then the database connection opens williamr@4: ** in the serialized [threading mode] unless single-thread was williamr@4: ** previously selected at compile-time or start-time. williamr@4: ** williamr@4: ** If the filename is ":memory:", then a private, temporary in-memory database williamr@4: ** is created for the connection. This in-memory database will vanish when williamr@4: ** the database connection is closed. Future versions of SQLite might williamr@4: ** make use of additional special filenames that begin with the ":" character. williamr@4: ** It is recommended that when a database filename actually does begin with williamr@4: ** a ":" character you should prefix the filename with a pathname such as williamr@4: ** "./" to avoid ambiguity. williamr@4: ** williamr@4: ** If the filename is an empty string, then a private, temporary williamr@4: ** on-disk database will be created. This private database will be williamr@4: ** automatically deleted as soon as the database connection is closed. williamr@4: ** williamr@4: ** The fourth parameter to sqlite3_open_v2() is the name of the williamr@4: ** [sqlite3_vfs] object that defines the operating system interface that williamr@4: ** the new database connection should use. If the fourth parameter is williamr@4: ** a NULL pointer then the default [sqlite3_vfs] object is used. williamr@4: ** williamr@4: ** Note to Windows users: The encoding used for the filename argument williamr@4: ** of sqlite3_open() and sqlite3_open_v2() must be UTF-8, not whatever williamr@4: ** codepage is currently defined. Filenames containing international williamr@4: ** characters must be converted to UTF-8 prior to passing them into williamr@4: ** sqlite3_open() or sqlite3_open_v2(). williamr@4: ** williamr@4: ** INVARIANTS: williamr@4: ** williamr@4: ** {H12701} The [sqlite3_open()], [sqlite3_open16()], and williamr@4: ** [sqlite3_open_v2()] interfaces create a new williamr@4: ** [database connection] associated with williamr@4: ** the database file given in their first parameter. williamr@4: ** williamr@4: ** {H12702} The filename argument is interpreted as UTF-8 williamr@4: ** for [sqlite3_open()] and [sqlite3_open_v2()] and as UTF-16 williamr@4: ** in the native byte order for [sqlite3_open16()]. williamr@4: ** williamr@4: ** {H12703} A successful invocation of [sqlite3_open()], [sqlite3_open16()], williamr@4: ** or [sqlite3_open_v2()] writes a pointer to a new williamr@4: ** [database connection] into *ppDb. williamr@4: ** williamr@4: ** {H12704} The [sqlite3_open()], [sqlite3_open16()], and williamr@4: ** [sqlite3_open_v2()] interfaces return [SQLITE_OK] upon success, williamr@4: ** or an appropriate [error code] on failure. williamr@4: ** williamr@4: ** {H12706} The default text encoding for a new database created using williamr@4: ** [sqlite3_open()] or [sqlite3_open_v2()] will be UTF-8. williamr@4: ** williamr@4: ** {H12707} The default text encoding for a new database created using williamr@4: ** [sqlite3_open16()] will be UTF-16. williamr@4: ** williamr@4: ** {H12709} The [sqlite3_open(F,D)] interface is equivalent to williamr@4: ** [sqlite3_open_v2(F,D,G,0)] where the G parameter is williamr@4: ** [SQLITE_OPEN_READWRITE]|[SQLITE_OPEN_CREATE]. williamr@4: ** williamr@4: ** {H12711} If the G parameter to [sqlite3_open_v2(F,D,G,V)] contains the williamr@4: ** bit value [SQLITE_OPEN_READONLY] then the database is opened williamr@4: ** for reading only. williamr@4: ** williamr@4: ** {H12712} If the G parameter to [sqlite3_open_v2(F,D,G,V)] contains the williamr@4: ** bit value [SQLITE_OPEN_READWRITE] then the database is opened williamr@4: ** reading and writing if possible, or for reading only if the williamr@4: ** file is write protected by the operating system. williamr@4: ** williamr@4: ** {H12713} If the G parameter to [sqlite3_open_v2(F,D,G,V)] omits the williamr@4: ** bit value [SQLITE_OPEN_CREATE] and the database does not williamr@4: ** previously exist, an error is returned. williamr@4: ** williamr@4: ** {H12714} If the G parameter to [sqlite3_open_v2(F,D,G,V)] contains the williamr@4: ** bit value [SQLITE_OPEN_CREATE] and the database does not williamr@4: ** previously exist, then an attempt is made to create and williamr@4: ** initialize the database. williamr@4: ** williamr@4: ** {H12717} If the filename argument to [sqlite3_open()], [sqlite3_open16()], williamr@4: ** or [sqlite3_open_v2()] is ":memory:", then an private, williamr@4: ** ephemeral, in-memory database is created for the connection. williamr@4: ** Is SQLITE_OPEN_CREATE|SQLITE_OPEN_READWRITE required williamr@4: ** in sqlite3_open_v2()? williamr@4: ** williamr@4: ** {H12719} If the filename is NULL or an empty string, then a private, williamr@4: ** ephemeral on-disk database will be created. williamr@4: ** Is SQLITE_OPEN_CREATE|SQLITE_OPEN_READWRITE required williamr@4: ** in sqlite3_open_v2()? williamr@4: ** williamr@4: ** {H12721} The [database connection] created by [sqlite3_open_v2(F,D,G,V)] williamr@4: ** will use the [sqlite3_vfs] object identified by the V parameter, williamr@4: ** or the default [sqlite3_vfs] object if V is a NULL pointer. williamr@4: ** williamr@4: ** {H12723} Two [database connections] will share a common cache if both were williamr@4: ** opened with the same VFS while [shared cache mode] was enabled and williamr@4: ** if both filenames compare equal using memcmp() after having been williamr@4: ** processed by the [sqlite3_vfs | xFullPathname] method of the VFS. williamr@4: */ williamr@4: IMPORT_C int sqlite3_open( williamr@4: const char *filename, /* Database filename (UTF-8) */ williamr@4: sqlite3 **ppDb /* OUT: SQLite db handle */ williamr@4: ); williamr@4: IMPORT_C int sqlite3_open16( williamr@4: const void *filename, /* Database filename (UTF-16) */ williamr@4: sqlite3 **ppDb /* OUT: SQLite db handle */ williamr@4: ); williamr@4: IMPORT_C int sqlite3_open_v2( williamr@4: const char *filename, /* Database filename (UTF-8) */ williamr@4: sqlite3 **ppDb, /* OUT: SQLite db handle */ williamr@4: int flags, /* Flags */ williamr@4: const char *zVfs /* Name of VFS module to use */ williamr@4: ); williamr@4: williamr@4: /* williamr@4: ** CAPI3REF: Error Codes And Messages {H12800} williamr@4: ** williamr@4: ** The sqlite3_errcode() interface returns the numeric [result code] or williamr@4: ** [extended result code] for the most recent failed sqlite3_* API call williamr@4: ** associated with a [database connection]. If a prior API call failed williamr@4: ** but the most recent API call succeeded, the return value from williamr@4: ** sqlite3_errcode() is undefined. williamr@4: ** williamr@4: ** The sqlite3_errmsg() and sqlite3_errmsg16() return English-language williamr@4: ** text that describes the error, as either UTF-8 or UTF-16 respectively. williamr@4: ** Memory to hold the error message string is managed internally. williamr@4: ** The application does not need to worry about freeing the result. williamr@4: ** However, the error string might be overwritten or deallocated by williamr@4: ** subsequent calls to other SQLite interface functions. williamr@4: ** williamr@4: ** If an interface fails with SQLITE_MISUSE, that means the interface williamr@4: ** was invoked incorrectly by the application. In that case, the williamr@4: ** error code and message may or may not be set. williamr@4: ** williamr@4: ** INVARIANTS: williamr@4: ** williamr@4: ** {H12801} The [sqlite3_errcode(D)] interface returns the numeric williamr@4: ** [result code] or [extended result code] for the most recently williamr@4: ** failed interface call associated with the [database connection] D. williamr@4: ** williamr@4: ** {H12803} The [sqlite3_errmsg(D)] and [sqlite3_errmsg16(D)] williamr@4: ** interfaces return English-language text that describes williamr@4: ** the error in the mostly recently failed interface call, williamr@4: ** encoded as either UTF-8 or UTF-16 respectively. williamr@4: ** williamr@4: ** {H12807} The strings returned by [sqlite3_errmsg()] and [sqlite3_errmsg16()] williamr@4: ** are valid until the next SQLite interface call. williamr@4: ** williamr@4: ** {H12808} Calls to API routines that do not return an error code williamr@4: ** (example: [sqlite3_data_count()]) do not williamr@4: ** change the error code or message returned by williamr@4: ** [sqlite3_errcode()], [sqlite3_errmsg()], or [sqlite3_errmsg16()]. williamr@4: ** williamr@4: ** {H12809} Interfaces that are not associated with a specific williamr@4: ** [database connection] (examples: williamr@4: ** [sqlite3_mprintf()] or [sqlite3_enable_shared_cache()] williamr@4: ** do not change the values returned by williamr@4: ** [sqlite3_errcode()], [sqlite3_errmsg()], or [sqlite3_errmsg16()]. williamr@4: */ williamr@4: IMPORT_C int sqlite3_errcode(sqlite3 *db); williamr@4: IMPORT_C const char *sqlite3_errmsg(sqlite3*); williamr@4: IMPORT_C const void *sqlite3_errmsg16(sqlite3*); williamr@4: williamr@4: /* williamr@4: ** CAPI3REF: SQL Statement Object {H13000} williamr@4: ** KEYWORDS: {prepared statement} {prepared statements} williamr@4: ** williamr@4: ** An instance of this object represents a single SQL statement. williamr@4: ** This object is variously known as a "prepared statement" or a williamr@4: ** "compiled SQL statement" or simply as a "statement". williamr@4: ** williamr@4: ** The life of a statement object goes something like this: williamr@4: ** williamr@4: **
    williamr@4: **
  1. Create the object using [sqlite3_prepare_v2()] or a related williamr@4: ** function. williamr@4: **
  2. Bind values to [host parameters] using the sqlite3_bind_*() williamr@4: ** interfaces. williamr@4: **
  3. Run the SQL by calling [sqlite3_step()] one or more times. williamr@4: **
  4. Reset the statement using [sqlite3_reset()] then go back williamr@4: ** to step 2. Do this zero or more times. williamr@4: **
  5. Destroy the object using [sqlite3_finalize()]. williamr@4: **
williamr@4: ** williamr@4: ** Refer to documentation on individual methods above for additional williamr@4: ** information. williamr@4: */ williamr@4: typedef struct sqlite3_stmt sqlite3_stmt; williamr@4: williamr@4: /* williamr@4: ** CAPI3REF: Run-time Limits {H12760} williamr@4: ** williamr@4: ** This interface allows the size of various constructs to be limited williamr@4: ** on a connection by connection basis. The first parameter is the williamr@4: ** [database connection] whose limit is to be set or queried. The williamr@4: ** second parameter is one of the [limit categories] that define a williamr@4: ** class of constructs to be size limited. The third parameter is the williamr@4: ** new limit for that construct. The function returns the old limit. williamr@4: ** williamr@4: ** If the new limit is a negative number, the limit is unchanged. williamr@4: ** For the limit category of SQLITE_LIMIT_XYZ there is a hard upper williamr@4: ** bound set by a compile-time C preprocessor macro named SQLITE_MAX_XYZ. williamr@4: ** (The "_LIMIT_" in the name is changed to "_MAX_".) williamr@4: ** Attempts to increase a limit above its hard upper bound are williamr@4: ** silently truncated to the hard upper limit. williamr@4: ** williamr@4: ** Run time limits are intended for use in applications that manage williamr@4: ** both their own internal database and also databases that are controlled williamr@4: ** by untrusted external sources. An example application might be a williamr@4: ** webbrowser that has its own databases for storing history and williamr@4: ** separate databases controlled by JavaScript applications downloaded williamr@4: ** off the Internet. The internal databases can be given the williamr@4: ** large, default limits. Databases managed by external sources can williamr@4: ** be given much smaller limits designed to prevent a denial of service williamr@4: ** attack. Developers might also want to use the [sqlite3_set_authorizer()] williamr@4: ** interface to further control untrusted SQL. The size of the database williamr@4: ** created by an untrusted script can be contained using the williamr@4: ** [max_page_count] [PRAGMA]. williamr@4: ** williamr@4: ** New run-time limit categories may be added in future releases. williamr@4: ** williamr@4: ** INVARIANTS: williamr@4: ** williamr@4: ** {H12762} A successful call to [sqlite3_limit(D,C,V)] where V is williamr@4: ** positive changes the limit on the size of construct C in the williamr@4: ** [database connection] D to the lesser of V and the hard upper williamr@4: ** bound on the size of C that is set at compile-time. williamr@4: ** williamr@4: ** {H12766} A successful call to [sqlite3_limit(D,C,V)] where V is negative williamr@4: ** leaves the state of the [database connection] D unchanged. williamr@4: ** williamr@4: ** {H12769} A successful call to [sqlite3_limit(D,C,V)] returns the williamr@4: ** value of the limit on the size of construct C in the williamr@4: ** [database connection] D as it was prior to the call. williamr@4: */ williamr@4: IMPORT_C int sqlite3_limit(sqlite3*, int id, int newVal); williamr@4: williamr@4: /* williamr@4: ** CAPI3REF: Run-Time Limit Categories {H12790} williamr@4: ** KEYWORDS: {limit category} {limit categories} williamr@4: ** williamr@4: ** These constants define various aspects of a [database connection] williamr@4: ** that can be limited in size by calls to [sqlite3_limit()]. williamr@4: ** The meanings of the various limits are as follows: williamr@4: ** williamr@4: **
williamr@4: **
SQLITE_LIMIT_LENGTH
williamr@4: **
The maximum size of any string or BLOB or table row.
williamr@4: ** williamr@4: **
SQLITE_LIMIT_SQL_LENGTH
williamr@4: **
The maximum length of an SQL statement.
williamr@4: ** williamr@4: **
SQLITE_LIMIT_COLUMN
williamr@4: **
The maximum number of columns in a table definition or in the williamr@4: ** result set of a SELECT or the maximum number of columns in an index williamr@4: ** or in an ORDER BY or GROUP BY clause.
williamr@4: ** williamr@4: **
SQLITE_LIMIT_EXPR_DEPTH
williamr@4: **
The maximum depth of the parse tree on any expression.
williamr@4: ** williamr@4: **
SQLITE_LIMIT_COMPOUND_SELECT
williamr@4: **
The maximum number of terms in a compound SELECT statement.
williamr@4: ** williamr@4: **
SQLITE_LIMIT_VDBE_OP
williamr@4: **
The maximum number of instructions in a virtual machine program williamr@4: ** used to implement an SQL statement.
williamr@4: ** williamr@4: **
SQLITE_LIMIT_FUNCTION_ARG
williamr@4: **
The maximum number of arguments on a function.
williamr@4: ** williamr@4: **
SQLITE_LIMIT_ATTACHED
williamr@4: **
The maximum number of attached databases.
williamr@4: ** williamr@4: **
SQLITE_LIMIT_LIKE_PATTERN_LENGTH
williamr@4: **
The maximum length of the pattern argument to the LIKE or williamr@4: ** GLOB operators.
williamr@4: ** williamr@4: **
SQLITE_LIMIT_VARIABLE_NUMBER
williamr@4: **
The maximum number of variables in an SQL statement that can williamr@4: ** be bound.
williamr@4: **
williamr@4: */ williamr@4: #define SQLITE_LIMIT_LENGTH 0 williamr@4: #define SQLITE_LIMIT_SQL_LENGTH 1 williamr@4: #define SQLITE_LIMIT_COLUMN 2 williamr@4: #define SQLITE_LIMIT_EXPR_DEPTH 3 williamr@4: #define SQLITE_LIMIT_COMPOUND_SELECT 4 williamr@4: #define SQLITE_LIMIT_VDBE_OP 5 williamr@4: #define SQLITE_LIMIT_FUNCTION_ARG 6 williamr@4: #define SQLITE_LIMIT_ATTACHED 7 williamr@4: #define SQLITE_LIMIT_LIKE_PATTERN_LENGTH 8 williamr@4: #define SQLITE_LIMIT_VARIABLE_NUMBER 9 williamr@4: williamr@4: /* williamr@4: ** CAPI3REF: Compiling An SQL Statement {H13010} williamr@4: ** KEYWORDS: {SQL statement compiler} williamr@4: ** williamr@4: ** To execute an SQL query, it must first be compiled into a byte-code williamr@4: ** program using one of these routines. williamr@4: ** williamr@4: ** The first argument, "db", is a [database connection] obtained from a williamr@4: ** prior call to [sqlite3_open()], [sqlite3_open_v2()] or [sqlite3_open16()]. williamr@4: ** williamr@4: ** The second argument, "zSql", is the statement to be compiled, encoded williamr@4: ** as either UTF-8 or UTF-16. The sqlite3_prepare() and sqlite3_prepare_v2() williamr@4: ** interfaces use UTF-8, and sqlite3_prepare16() and sqlite3_prepare16_v2() williamr@4: ** use UTF-16. williamr@4: ** williamr@4: ** If the nByte argument is less than zero, then zSql is read up to the williamr@4: ** first zero terminator. If nByte is non-negative, then it is the maximum williamr@4: ** number of bytes read from zSql. When nByte is non-negative, the williamr@4: ** zSql string ends at either the first '\000' or '\u0000' character or williamr@4: ** the nByte-th byte, whichever comes first. If the caller knows williamr@4: ** that the supplied string is nul-terminated, then there is a small williamr@4: ** performance advantage to be gained by passing an nByte parameter that williamr@4: ** is equal to the number of bytes in the input string including williamr@4: ** the nul-terminator bytes. williamr@4: ** williamr@4: ** *pzTail is made to point to the first byte past the end of the williamr@4: ** first SQL statement in zSql. These routines only compile the first williamr@4: ** statement in zSql, so *pzTail is left pointing to what remains williamr@4: ** uncompiled. williamr@4: ** williamr@4: ** *ppStmt is left pointing to a compiled [prepared statement] that can be williamr@4: ** executed using [sqlite3_step()]. If there is an error, *ppStmt is set williamr@4: ** to NULL. If the input text contains no SQL (if the input is an empty williamr@4: ** string or a comment) then *ppStmt is set to NULL. williamr@4: ** {A13018} The calling procedure is responsible for deleting the compiled williamr@4: ** SQL statement using [sqlite3_finalize()] after it has finished with it. williamr@4: ** williamr@4: ** On success, [SQLITE_OK] is returned, otherwise an [error code] is returned. williamr@4: ** williamr@4: ** The sqlite3_prepare_v2() and sqlite3_prepare16_v2() interfaces are williamr@4: ** recommended for all new programs. The two older interfaces are retained williamr@4: ** for backwards compatibility, but their use is discouraged. williamr@4: ** In the "v2" interfaces, the prepared statement williamr@4: ** that is returned (the [sqlite3_stmt] object) contains a copy of the williamr@4: ** original SQL text. This causes the [sqlite3_step()] interface to williamr@4: ** behave a differently in two ways: williamr@4: ** williamr@4: **
    williamr@4: **
  1. williamr@4: ** If the database schema changes, instead of returning [SQLITE_SCHEMA] as it williamr@4: ** always used to do, [sqlite3_step()] will automatically recompile the SQL williamr@4: ** statement and try to run it again. If the schema has changed in williamr@4: ** a way that makes the statement no longer valid, [sqlite3_step()] will still williamr@4: ** return [SQLITE_SCHEMA]. But unlike the legacy behavior, [SQLITE_SCHEMA] is williamr@4: ** now a fatal error. Calling [sqlite3_prepare_v2()] again will not make the williamr@4: ** error go away. Note: use [sqlite3_errmsg()] to find the text williamr@4: ** of the parsing error that results in an [SQLITE_SCHEMA] return. williamr@4: **
  2. williamr@4: ** williamr@4: **
  3. williamr@4: ** When an error occurs, [sqlite3_step()] will return one of the detailed williamr@4: ** [error codes] or [extended error codes]. The legacy behavior was that williamr@4: ** [sqlite3_step()] would only return a generic [SQLITE_ERROR] result code williamr@4: ** and you would have to make a second call to [sqlite3_reset()] in order williamr@4: ** to find the underlying cause of the problem. With the "v2" prepare williamr@4: ** interfaces, the underlying reason for the error is returned immediately. williamr@4: **
  4. williamr@4: **
williamr@4: ** williamr@4: ** INVARIANTS: williamr@4: ** williamr@4: ** {H13011} The [sqlite3_prepare(db,zSql,...)] and williamr@4: ** [sqlite3_prepare_v2(db,zSql,...)] interfaces interpret the williamr@4: ** text in their zSql parameter as UTF-8. williamr@4: ** williamr@4: ** {H13012} The [sqlite3_prepare16(db,zSql,...)] and williamr@4: ** [sqlite3_prepare16_v2(db,zSql,...)] interfaces interpret the williamr@4: ** text in their zSql parameter as UTF-16 in the native byte order. williamr@4: ** williamr@4: ** {H13013} If the nByte argument to [sqlite3_prepare_v2(db,zSql,nByte,...)] williamr@4: ** and its variants is less than zero, the SQL text is williamr@4: ** read from zSql is read up to the first zero terminator. williamr@4: ** williamr@4: ** {H13014} If the nByte argument to [sqlite3_prepare_v2(db,zSql,nByte,...)] williamr@4: ** and its variants is non-negative, then at most nBytes bytes of williamr@4: ** SQL text is read from zSql. williamr@4: ** williamr@4: ** {H13015} In [sqlite3_prepare_v2(db,zSql,N,P,pzTail)] and its variants williamr@4: ** if the zSql input text contains more than one SQL statement williamr@4: ** and pzTail is not NULL, then *pzTail is made to point to the williamr@4: ** first byte past the end of the first SQL statement in zSql. williamr@4: ** What does *pzTail point to if there is one statement? williamr@4: ** williamr@4: ** {H13016} A successful call to [sqlite3_prepare_v2(db,zSql,N,ppStmt,...)] williamr@4: ** or one of its variants writes into *ppStmt a pointer to a new williamr@4: ** [prepared statement] or a pointer to NULL if zSql contains williamr@4: ** nothing other than whitespace or comments. williamr@4: ** williamr@4: ** {H13019} The [sqlite3_prepare_v2()] interface and its variants return williamr@4: ** [SQLITE_OK] or an appropriate [error code] upon failure. williamr@4: ** williamr@4: ** {H13021} Before [sqlite3_prepare(db,zSql,nByte,ppStmt,pzTail)] or its williamr@4: ** variants returns an error (any value other than [SQLITE_OK]), williamr@4: ** they first set *ppStmt to NULL. williamr@4: */ williamr@4: IMPORT_C int sqlite3_prepare( williamr@4: sqlite3 *db, /* Database handle */ williamr@4: const char *zSql, /* SQL statement, UTF-8 encoded */ williamr@4: int nByte, /* Maximum length of zSql in bytes. */ williamr@4: sqlite3_stmt **ppStmt, /* OUT: Statement handle */ williamr@4: const char **pzTail /* OUT: Pointer to unused portion of zSql */ williamr@4: ); williamr@4: IMPORT_C int sqlite3_prepare_v2( williamr@4: sqlite3 *db, /* Database handle */ williamr@4: const char *zSql, /* SQL statement, UTF-8 encoded */ williamr@4: int nByte, /* Maximum length of zSql in bytes. */ williamr@4: sqlite3_stmt **ppStmt, /* OUT: Statement handle */ williamr@4: const char **pzTail /* OUT: Pointer to unused portion of zSql */ williamr@4: ); williamr@4: IMPORT_C int sqlite3_prepare16( williamr@4: sqlite3 *db, /* Database handle */ williamr@4: const void *zSql, /* SQL statement, UTF-16 encoded */ williamr@4: int nByte, /* Maximum length of zSql in bytes. */ williamr@4: sqlite3_stmt **ppStmt, /* OUT: Statement handle */ williamr@4: const void **pzTail /* OUT: Pointer to unused portion of zSql */ williamr@4: ); williamr@4: IMPORT_C int sqlite3_prepare16_v2( williamr@4: sqlite3 *db, /* Database handle */ williamr@4: const void *zSql, /* SQL statement, UTF-16 encoded */ williamr@4: int nByte, /* Maximum length of zSql in bytes. */ williamr@4: sqlite3_stmt **ppStmt, /* OUT: Statement handle */ williamr@4: const void **pzTail /* OUT: Pointer to unused portion of zSql */ williamr@4: ); williamr@4: williamr@4: /* williamr@4: ** CAPI3REF: Retrieving Statement SQL {H13100} williamr@4: ** williamr@4: ** This interface can be used to retrieve a saved copy of the original williamr@4: ** SQL text used to create a [prepared statement] if that statement was williamr@4: ** compiled using either [sqlite3_prepare_v2()] or [sqlite3_prepare16_v2()]. williamr@4: ** williamr@4: ** INVARIANTS: williamr@4: ** williamr@4: ** {H13101} If the [prepared statement] passed as the argument to williamr@4: ** [sqlite3_sql()] was compiled using either [sqlite3_prepare_v2()] or williamr@4: ** [sqlite3_prepare16_v2()], then [sqlite3_sql()] returns williamr@4: ** a pointer to a zero-terminated string containing a UTF-8 rendering williamr@4: ** of the original SQL statement. williamr@4: ** williamr@4: ** {H13102} If the [prepared statement] passed as the argument to williamr@4: ** [sqlite3_sql()] was compiled using either [sqlite3_prepare()] or williamr@4: ** [sqlite3_prepare16()], then [sqlite3_sql()] returns a NULL pointer. williamr@4: ** williamr@4: ** {H13103} The string returned by [sqlite3_sql(S)] is valid until the williamr@4: ** [prepared statement] S is deleted using [sqlite3_finalize(S)]. williamr@4: */ williamr@4: IMPORT_C const char *sqlite3_sql(sqlite3_stmt *pStmt); williamr@4: williamr@4: /* williamr@4: ** CAPI3REF: Dynamically Typed Value Object {H15000} williamr@4: ** KEYWORDS: {protected sqlite3_value} {unprotected sqlite3_value} williamr@4: ** williamr@4: ** SQLite uses the sqlite3_value object to represent all values williamr@4: ** that can be stored in a database table. SQLite uses dynamic typing williamr@4: ** for the values it stores. Values stored in sqlite3_value objects williamr@4: ** can be integers, floating point values, strings, BLOBs, or NULL. williamr@4: ** williamr@4: ** An sqlite3_value object may be either "protected" or "unprotected". williamr@4: ** Some interfaces require a protected sqlite3_value. Other interfaces williamr@4: ** will accept either a protected or an unprotected sqlite3_value. williamr@4: ** Every interface that accepts sqlite3_value arguments specifies williamr@4: ** whether or not it requires a protected sqlite3_value. williamr@4: ** williamr@4: ** The terms "protected" and "unprotected" refer to whether or not williamr@4: ** a mutex is held. A internal mutex is held for a protected williamr@4: ** sqlite3_value object but no mutex is held for an unprotected williamr@4: ** sqlite3_value object. If SQLite is compiled to be single-threaded williamr@4: ** (with [SQLITE_THREADSAFE=0] and with [sqlite3_threadsafe()] returning 0) williamr@4: ** or if SQLite is run in one of reduced mutex modes williamr@4: ** [SQLITE_CONFIG_SINGLETHREAD] or [SQLITE_CONFIG_MULTITHREAD] williamr@4: ** then there is no distinction between protected and unprotected williamr@4: ** sqlite3_value objects and they can be used interchangeably. However, williamr@4: ** for maximum code portability it is recommended that applications williamr@4: ** still make the distinction between between protected and unprotected williamr@4: ** sqlite3_value objects even when not strictly required. williamr@4: ** williamr@4: ** The sqlite3_value objects that are passed as parameters into the williamr@4: ** implementation of [application-defined SQL functions] are protected. williamr@4: ** The sqlite3_value object returned by williamr@4: ** [sqlite3_column_value()] is unprotected. williamr@4: ** Unprotected sqlite3_value objects may only be used with williamr@4: ** [sqlite3_result_value()] and [sqlite3_bind_value()]. williamr@4: ** The [sqlite3_value_blob | sqlite3_value_type()] family of williamr@4: ** interfaces require protected sqlite3_value objects. williamr@4: */ williamr@4: typedef struct Mem sqlite3_value; williamr@4: williamr@4: /* williamr@4: ** CAPI3REF: SQL Function Context Object {H16001} williamr@4: ** williamr@4: ** The context in which an SQL function executes is stored in an williamr@4: ** sqlite3_context object. A pointer to an sqlite3_context object williamr@4: ** is always first parameter to [application-defined SQL functions]. williamr@4: ** The application-defined SQL function implementation will pass this williamr@4: ** pointer through into calls to [sqlite3_result_int | sqlite3_result()], williamr@4: ** [sqlite3_aggregate_context()], [sqlite3_user_data()], williamr@4: ** [sqlite3_context_db_handle()], [sqlite3_get_auxdata()], williamr@4: ** and/or [sqlite3_set_auxdata()]. williamr@4: */ williamr@4: typedef struct sqlite3_context sqlite3_context; williamr@4: williamr@4: /* williamr@4: ** CAPI3REF: Binding Values To Prepared Statements {H13500} williamr@4: ** KEYWORDS: {host parameter} {host parameters} {host parameter name} williamr@4: ** KEYWORDS: {SQL parameter} {SQL parameters} {parameter binding} williamr@4: ** williamr@4: ** In the SQL strings input to [sqlite3_prepare_v2()] and its variants, williamr@4: ** literals may be replaced by a parameter in one of these forms: williamr@4: ** williamr@4: **
    williamr@4: **
  • ? williamr@4: **
  • ?NNN williamr@4: **
  • :VVV williamr@4: **
  • @VVV williamr@4: **
  • $VVV williamr@4: **
williamr@4: ** williamr@4: ** In the parameter forms shown above NNN is an integer literal, williamr@4: ** and VVV is an alpha-numeric parameter name. The values of these williamr@4: ** parameters (also called "host parameter names" or "SQL parameters") williamr@4: ** can be set using the sqlite3_bind_*() routines defined here. williamr@4: ** williamr@4: ** The first argument to the sqlite3_bind_*() routines is always williamr@4: ** a pointer to the [sqlite3_stmt] object returned from williamr@4: ** [sqlite3_prepare_v2()] or its variants. williamr@4: ** williamr@4: ** The second argument is the index of the SQL parameter to be set. williamr@4: ** The leftmost SQL parameter has an index of 1. When the same named williamr@4: ** SQL parameter is used more than once, second and subsequent williamr@4: ** occurrences have the same index as the first occurrence. williamr@4: ** The index for named parameters can be looked up using the williamr@4: ** [sqlite3_bind_parameter_index()] API if desired. The index williamr@4: ** for "?NNN" parameters is the value of NNN. williamr@4: ** The NNN value must be between 1 and the [sqlite3_limit()] williamr@4: ** parameter [SQLITE_LIMIT_VARIABLE_NUMBER] (default value: 999). williamr@4: ** williamr@4: ** The third argument is the value to bind to the parameter. williamr@4: ** williamr@4: ** In those routines that have a fourth argument, its value is the williamr@4: ** number of bytes in the parameter. To be clear: the value is the williamr@4: ** number of bytes in the value, not the number of characters. williamr@4: ** If the fourth parameter is negative, the length of the string is williamr@4: ** the number of bytes up to the first zero terminator. williamr@4: ** williamr@4: ** The fifth argument to sqlite3_bind_blob(), sqlite3_bind_text(), and williamr@4: ** sqlite3_bind_text16() is a destructor used to dispose of the BLOB or williamr@4: ** string after SQLite has finished with it. If the fifth argument is williamr@4: ** the special value [SQLITE_STATIC], then SQLite assumes that the williamr@4: ** information is in static, unmanaged space and does not need to be freed. williamr@4: ** If the fifth argument has the value [SQLITE_TRANSIENT], then williamr@4: ** SQLite makes its own private copy of the data immediately, before williamr@4: ** the sqlite3_bind_*() routine returns. williamr@4: ** williamr@4: ** The sqlite3_bind_zeroblob() routine binds a BLOB of length N that williamr@4: ** is filled with zeroes. A zeroblob uses a fixed amount of memory williamr@4: ** (just an integer to hold its size) while it is being processed. williamr@4: ** Zeroblobs are intended to serve as placeholders for BLOBs whose williamr@4: ** content is later written using williamr@4: ** [sqlite3_blob_open | incremental BLOB I/O] routines. williamr@4: ** A negative value for the zeroblob results in a zero-length BLOB. williamr@4: ** williamr@4: ** The sqlite3_bind_*() routines must be called after williamr@4: ** [sqlite3_prepare_v2()] (and its variants) or [sqlite3_reset()] and williamr@4: ** before [sqlite3_step()]. williamr@4: ** Bindings are not cleared by the [sqlite3_reset()] routine. williamr@4: ** Unbound parameters are interpreted as NULL. williamr@4: ** williamr@4: ** These routines return [SQLITE_OK] on success or an error code if williamr@4: ** anything goes wrong. [SQLITE_RANGE] is returned if the parameter williamr@4: ** index is out of range. [SQLITE_NOMEM] is returned if malloc() fails. williamr@4: ** [SQLITE_MISUSE] might be returned if these routines are called on a williamr@4: ** virtual machine that is the wrong state or which has already been finalized. williamr@4: ** Detection of misuse is unreliable. Applications should not depend williamr@4: ** on SQLITE_MISUSE returns. SQLITE_MISUSE is intended to indicate a williamr@4: ** a logic error in the application. Future versions of SQLite might williamr@4: ** panic rather than return SQLITE_MISUSE. williamr@4: ** williamr@4: ** See also: [sqlite3_bind_parameter_count()], williamr@4: ** [sqlite3_bind_parameter_name()], and [sqlite3_bind_parameter_index()]. williamr@4: ** williamr@4: ** INVARIANTS: williamr@4: ** williamr@4: ** {H13506} The [SQL statement compiler] recognizes tokens of the forms williamr@4: ** "?", "?NNN", "$VVV", ":VVV", and "@VVV" as SQL parameters, williamr@4: ** where NNN is any sequence of one or more digits williamr@4: ** and where VVV is any sequence of one or more alphanumeric williamr@4: ** characters or "::" optionally followed by a string containing williamr@4: ** no spaces and contained within parentheses. williamr@4: ** williamr@4: ** {H13509} The initial value of an SQL parameter is NULL. williamr@4: ** williamr@4: ** {H13512} The index of an "?" SQL parameter is one larger than the williamr@4: ** largest index of SQL parameter to the left, or 1 if williamr@4: ** the "?" is the leftmost SQL parameter. williamr@4: ** williamr@4: ** {H13515} The index of an "?NNN" SQL parameter is the integer NNN. williamr@4: ** williamr@4: ** {H13518} The index of an ":VVV", "$VVV", or "@VVV" SQL parameter is williamr@4: ** the same as the index of leftmost occurrences of the same williamr@4: ** parameter, or one more than the largest index over all williamr@4: ** parameters to the left if this is the first occurrence williamr@4: ** of this parameter, or 1 if this is the leftmost parameter. williamr@4: ** williamr@4: ** {H13521} The [SQL statement compiler] fails with an [SQLITE_RANGE] williamr@4: ** error if the index of an SQL parameter is less than 1 williamr@4: ** or greater than the compile-time SQLITE_MAX_VARIABLE_NUMBER williamr@4: ** parameter. williamr@4: ** williamr@4: ** {H13524} Calls to [sqlite3_bind_text | sqlite3_bind(S,N,V,...)] williamr@4: ** associate the value V with all SQL parameters having an williamr@4: ** index of N in the [prepared statement] S. williamr@4: ** williamr@4: ** {H13527} Calls to [sqlite3_bind_text | sqlite3_bind(S,N,...)] williamr@4: ** override prior calls with the same values of S and N. williamr@4: ** williamr@4: ** {H13530} Bindings established by [sqlite3_bind_text | sqlite3_bind(S,...)] williamr@4: ** persist across calls to [sqlite3_reset(S)]. williamr@4: ** williamr@4: ** {H13533} In calls to [sqlite3_bind_blob(S,N,V,L,D)], williamr@4: ** [sqlite3_bind_text(S,N,V,L,D)], or williamr@4: ** [sqlite3_bind_text16(S,N,V,L,D)] SQLite binds the first L williamr@4: ** bytes of the BLOB or string pointed to by V, when L williamr@4: ** is non-negative. williamr@4: ** williamr@4: ** {H13536} In calls to [sqlite3_bind_text(S,N,V,L,D)] or williamr@4: ** [sqlite3_bind_text16(S,N,V,L,D)] SQLite binds characters williamr@4: ** from V through the first zero character when L is negative. williamr@4: ** williamr@4: ** {H13539} In calls to [sqlite3_bind_blob(S,N,V,L,D)], williamr@4: ** [sqlite3_bind_text(S,N,V,L,D)], or williamr@4: ** [sqlite3_bind_text16(S,N,V,L,D)] when D is the special williamr@4: ** constant [SQLITE_STATIC], SQLite assumes that the value V williamr@4: ** is held in static unmanaged space that will not change williamr@4: ** during the lifetime of the binding. williamr@4: ** williamr@4: ** {H13542} In calls to [sqlite3_bind_blob(S,N,V,L,D)], williamr@4: ** [sqlite3_bind_text(S,N,V,L,D)], or williamr@4: ** [sqlite3_bind_text16(S,N,V,L,D)] when D is the special williamr@4: ** constant [SQLITE_TRANSIENT], the routine makes a williamr@4: ** private copy of the value V before it returns. williamr@4: ** williamr@4: ** {H13545} In calls to [sqlite3_bind_blob(S,N,V,L,D)], williamr@4: ** [sqlite3_bind_text(S,N,V,L,D)], or williamr@4: ** [sqlite3_bind_text16(S,N,V,L,D)] when D is a pointer to williamr@4: ** a function, SQLite invokes that function to destroy the williamr@4: ** value V after it has finished using the value V. williamr@4: ** williamr@4: ** {H13548} In calls to [sqlite3_bind_zeroblob(S,N,V,L)] the value bound williamr@4: ** is a BLOB of L bytes, or a zero-length BLOB if L is negative. williamr@4: ** williamr@4: ** {H13551} In calls to [sqlite3_bind_value(S,N,V)] the V argument may williamr@4: ** be either a [protected sqlite3_value] object or an williamr@4: ** [unprotected sqlite3_value] object. williamr@4: */ williamr@4: IMPORT_C int sqlite3_bind_blob(sqlite3_stmt*, int, const void*, int n, void(*)(void*)); williamr@4: IMPORT_C int sqlite3_bind_double(sqlite3_stmt*, int, double); williamr@4: IMPORT_C int sqlite3_bind_int(sqlite3_stmt*, int, int); williamr@4: IMPORT_C int sqlite3_bind_int64(sqlite3_stmt*, int, sqlite3_int64); williamr@4: IMPORT_C int sqlite3_bind_null(sqlite3_stmt*, int); williamr@4: IMPORT_C int sqlite3_bind_text(sqlite3_stmt*, int, const char*, int n, void(*)(void*)); williamr@4: IMPORT_C int sqlite3_bind_text16(sqlite3_stmt*, int, const void*, int, void(*)(void*)); williamr@4: IMPORT_C int sqlite3_bind_value(sqlite3_stmt*, int, const sqlite3_value*); williamr@4: IMPORT_C int sqlite3_bind_zeroblob(sqlite3_stmt*, int, int n); williamr@4: williamr@4: /* williamr@4: ** CAPI3REF: Number Of SQL Parameters {H13600} williamr@4: ** williamr@4: ** This routine can be used to find the number of [SQL parameters] williamr@4: ** in a [prepared statement]. SQL parameters are tokens of the williamr@4: ** form "?", "?NNN", ":AAA", "$AAA", or "@AAA" that serve as williamr@4: ** placeholders for values that are [sqlite3_bind_blob | bound] williamr@4: ** to the parameters at a later time. williamr@4: ** williamr@4: ** This routine actually returns the index of the largest (rightmost) williamr@4: ** parameter. For all forms except ?NNN, this will correspond to the williamr@4: ** number of unique parameters. If parameters of the ?NNN are used, williamr@4: ** there may be gaps in the list. williamr@4: ** williamr@4: ** See also: [sqlite3_bind_blob|sqlite3_bind()], williamr@4: ** [sqlite3_bind_parameter_name()], and williamr@4: ** [sqlite3_bind_parameter_index()]. williamr@4: ** williamr@4: ** INVARIANTS: williamr@4: ** williamr@4: ** {H13601} The [sqlite3_bind_parameter_count(S)] interface returns williamr@4: ** the largest index of all SQL parameters in the williamr@4: ** [prepared statement] S, or 0 if S contains no SQL parameters. williamr@4: */ williamr@4: IMPORT_C int sqlite3_bind_parameter_count(sqlite3_stmt*); williamr@4: williamr@4: /* williamr@4: ** CAPI3REF: Name Of A Host Parameter {H13620} williamr@4: ** williamr@4: ** This routine returns a pointer to the name of the n-th williamr@4: ** [SQL parameter] in a [prepared statement]. williamr@4: ** SQL parameters of the form "?NNN" or ":AAA" or "@AAA" or "$AAA" williamr@4: ** have a name which is the string "?NNN" or ":AAA" or "@AAA" or "$AAA" williamr@4: ** respectively. williamr@4: ** In other words, the initial ":" or "$" or "@" or "?" williamr@4: ** is included as part of the name. williamr@4: ** Parameters of the form "?" without a following integer have no name williamr@4: ** and are also referred to as "anonymous parameters". williamr@4: ** williamr@4: ** The first host parameter has an index of 1, not 0. williamr@4: ** williamr@4: ** If the value n is out of range or if the n-th parameter is williamr@4: ** nameless, then NULL is returned. The returned string is williamr@4: ** always in UTF-8 encoding even if the named parameter was williamr@4: ** originally specified as UTF-16 in [sqlite3_prepare16()] or williamr@4: ** [sqlite3_prepare16_v2()]. williamr@4: ** williamr@4: ** See also: [sqlite3_bind_blob|sqlite3_bind()], williamr@4: ** [sqlite3_bind_parameter_count()], and williamr@4: ** [sqlite3_bind_parameter_index()]. williamr@4: ** williamr@4: ** INVARIANTS: williamr@4: ** williamr@4: ** {H13621} The [sqlite3_bind_parameter_name(S,N)] interface returns williamr@4: ** a UTF-8 rendering of the name of the SQL parameter in williamr@4: ** the [prepared statement] S having index N, or williamr@4: ** NULL if there is no SQL parameter with index N or if the williamr@4: ** parameter with index N is an anonymous parameter "?". williamr@4: */ williamr@4: IMPORT_C const char *sqlite3_bind_parameter_name(sqlite3_stmt*, int); williamr@4: williamr@4: /* williamr@4: ** CAPI3REF: Index Of A Parameter With A Given Name {H13640} williamr@4: ** williamr@4: ** Return the index of an SQL parameter given its name. The williamr@4: ** index value returned is suitable for use as the second williamr@4: ** parameter to [sqlite3_bind_blob|sqlite3_bind()]. A zero williamr@4: ** is returned if no matching parameter is found. The parameter williamr@4: ** name must be given in UTF-8 even if the original statement williamr@4: ** was prepared from UTF-16 text using [sqlite3_prepare16_v2()]. williamr@4: ** williamr@4: ** See also: [sqlite3_bind_blob|sqlite3_bind()], williamr@4: ** [sqlite3_bind_parameter_count()], and williamr@4: ** [sqlite3_bind_parameter_index()]. williamr@4: ** williamr@4: ** INVARIANTS: williamr@4: ** williamr@4: ** {H13641} The [sqlite3_bind_parameter_index(S,N)] interface returns williamr@4: ** the index of SQL parameter in the [prepared statement] williamr@4: ** S whose name matches the UTF-8 string N, or 0 if there is williamr@4: ** no match. williamr@4: */ williamr@4: IMPORT_C int sqlite3_bind_parameter_index(sqlite3_stmt*, const char *zName); williamr@4: williamr@4: /* williamr@4: ** CAPI3REF: Reset All Bindings On A Prepared Statement {H13660} williamr@4: ** williamr@4: ** Contrary to the intuition of many, [sqlite3_reset()] does not reset williamr@4: ** the [sqlite3_bind_blob | bindings] on a [prepared statement]. williamr@4: ** Use this routine to reset all host parameters to NULL. williamr@4: ** williamr@4: ** INVARIANTS: williamr@4: ** williamr@4: ** {H13661} The [sqlite3_clear_bindings(S)] interface resets all SQL williamr@4: ** parameter bindings in the [prepared statement] S back to NULL. williamr@4: */ williamr@4: IMPORT_C int sqlite3_clear_bindings(sqlite3_stmt*); williamr@4: williamr@4: /* williamr@4: ** CAPI3REF: Number Of Columns In A Result Set {H13710} williamr@4: ** williamr@4: ** Return the number of columns in the result set returned by the williamr@4: ** [prepared statement]. This routine returns 0 if pStmt is an SQL williamr@4: ** statement that does not return data (for example an [UPDATE]). williamr@4: ** williamr@4: ** INVARIANTS: williamr@4: ** williamr@4: ** {H13711} The [sqlite3_column_count(S)] interface returns the number of williamr@4: ** columns in the result set generated by the [prepared statement] S, williamr@4: ** or 0 if S does not generate a result set. williamr@4: */ williamr@4: IMPORT_C int sqlite3_column_count(sqlite3_stmt *pStmt); williamr@4: williamr@4: /* williamr@4: ** CAPI3REF: Column Names In A Result Set {H13720} williamr@4: ** williamr@4: ** These routines return the name assigned to a particular column williamr@4: ** in the result set of a [SELECT] statement. The sqlite3_column_name() williamr@4: ** interface returns a pointer to a zero-terminated UTF-8 string williamr@4: ** and sqlite3_column_name16() returns a pointer to a zero-terminated williamr@4: ** UTF-16 string. The first parameter is the [prepared statement] williamr@4: ** that implements the [SELECT] statement. The second parameter is the williamr@4: ** column number. The leftmost column is number 0. williamr@4: ** williamr@4: ** The returned string pointer is valid until either the [prepared statement] williamr@4: ** is destroyed by [sqlite3_finalize()] or until the next call to williamr@4: ** sqlite3_column_name() or sqlite3_column_name16() on the same column. williamr@4: ** williamr@4: ** If sqlite3_malloc() fails during the processing of either routine williamr@4: ** (for example during a conversion from UTF-8 to UTF-16) then a williamr@4: ** NULL pointer is returned. williamr@4: ** williamr@4: ** The name of a result column is the value of the "AS" clause for williamr@4: ** that column, if there is an AS clause. If there is no AS clause williamr@4: ** then the name of the column is unspecified and may change from williamr@4: ** one release of SQLite to the next. williamr@4: ** williamr@4: ** INVARIANTS: williamr@4: ** williamr@4: ** {H13721} A successful invocation of the [sqlite3_column_name(S,N)] williamr@4: ** interface returns the name of the Nth column (where 0 is williamr@4: ** the leftmost column) for the result set of the williamr@4: ** [prepared statement] S as a zero-terminated UTF-8 string. williamr@4: ** williamr@4: ** {H13723} A successful invocation of the [sqlite3_column_name16(S,N)] williamr@4: ** interface returns the name of the Nth column (where 0 is williamr@4: ** the leftmost column) for the result set of the williamr@4: ** [prepared statement] S as a zero-terminated UTF-16 string williamr@4: ** in the native byte order. williamr@4: ** williamr@4: ** {H13724} The [sqlite3_column_name()] and [sqlite3_column_name16()] williamr@4: ** interfaces return a NULL pointer if they are unable to williamr@4: ** allocate memory to hold their normal return strings. williamr@4: ** williamr@4: ** {H13725} If the N parameter to [sqlite3_column_name(S,N)] or williamr@4: ** [sqlite3_column_name16(S,N)] is out of range, then the williamr@4: ** interfaces return a NULL pointer. williamr@4: ** williamr@4: ** {H13726} The strings returned by [sqlite3_column_name(S,N)] and williamr@4: ** [sqlite3_column_name16(S,N)] are valid until the next williamr@4: ** call to either routine with the same S and N parameters williamr@4: ** or until [sqlite3_finalize(S)] is called. williamr@4: ** williamr@4: ** {H13727} When a result column of a [SELECT] statement contains williamr@4: ** an AS clause, the name of that column is the identifier williamr@4: ** to the right of the AS keyword. williamr@4: */ williamr@4: IMPORT_C const char *sqlite3_column_name(sqlite3_stmt*, int N); williamr@4: IMPORT_C const void *sqlite3_column_name16(sqlite3_stmt*, int N); williamr@4: williamr@4: /* williamr@4: ** CAPI3REF: Source Of Data In A Query Result {H13740} williamr@4: ** williamr@4: ** These routines provide a means to determine what column of what williamr@4: ** table in which database a result of a [SELECT] statement comes from. williamr@4: ** The name of the database or table or column can be returned as williamr@4: ** either a UTF-8 or UTF-16 string. The _database_ routines return williamr@4: ** the database name, the _table_ routines return the table name, and williamr@4: ** the origin_ routines return the column name. williamr@4: ** The returned string is valid until the [prepared statement] is destroyed williamr@4: ** using [sqlite3_finalize()] or until the same information is requested williamr@4: ** again in a different encoding. williamr@4: ** williamr@4: ** The names returned are the original un-aliased names of the williamr@4: ** database, table, and column. williamr@4: ** williamr@4: ** The first argument to the following calls is a [prepared statement]. williamr@4: ** These functions return information about the Nth column returned by williamr@4: ** the statement, where N is the second function argument. williamr@4: ** williamr@4: ** If the Nth column returned by the statement is an expression or williamr@4: ** subquery and is not a column value, then all of these functions return williamr@4: ** NULL. These routine might also return NULL if a memory allocation error williamr@4: ** occurs. Otherwise, they return the name of the attached database, table williamr@4: ** and column that query result column was extracted from. williamr@4: ** williamr@4: ** As with all other SQLite APIs, those postfixed with "16" return williamr@4: ** UTF-16 encoded strings, the other functions return UTF-8. {END} williamr@4: ** williamr@4: ** These APIs are only available if the library was compiled with the williamr@4: ** [SQLITE_ENABLE_COLUMN_METADATA] C-preprocessor symbol defined. williamr@4: ** williamr@4: ** {A13751} williamr@4: ** If two or more threads call one or more of these routines against the same williamr@4: ** prepared statement and column at the same time then the results are williamr@4: ** undefined. williamr@4: ** williamr@4: ** INVARIANTS: williamr@4: ** williamr@4: ** {H13741} The [sqlite3_column_database_name(S,N)] interface returns either williamr@4: ** the UTF-8 zero-terminated name of the database from which the williamr@4: ** Nth result column of the [prepared statement] S is extracted, williamr@4: ** or NULL if the Nth column of S is a general expression williamr@4: ** or if unable to allocate memory to store the name. williamr@4: ** williamr@4: ** {H13742} The [sqlite3_column_database_name16(S,N)] interface returns either williamr@4: ** the UTF-16 native byte order zero-terminated name of the database williamr@4: ** from which the Nth result column of the [prepared statement] S is williamr@4: ** extracted, or NULL if the Nth column of S is a general expression williamr@4: ** or if unable to allocate memory to store the name. williamr@4: ** williamr@4: ** {H13743} The [sqlite3_column_table_name(S,N)] interface returns either williamr@4: ** the UTF-8 zero-terminated name of the table from which the williamr@4: ** Nth result column of the [prepared statement] S is extracted, williamr@4: ** or NULL if the Nth column of S is a general expression williamr@4: ** or if unable to allocate memory to store the name. williamr@4: ** williamr@4: ** {H13744} The [sqlite3_column_table_name16(S,N)] interface returns either williamr@4: ** the UTF-16 native byte order zero-terminated name of the table williamr@4: ** from which the Nth result column of the [prepared statement] S is williamr@4: ** extracted, or NULL if the Nth column of S is a general expression williamr@4: ** or if unable to allocate memory to store the name. williamr@4: ** williamr@4: ** {H13745} The [sqlite3_column_origin_name(S,N)] interface returns either williamr@4: ** the UTF-8 zero-terminated name of the table column from which the williamr@4: ** Nth result column of the [prepared statement] S is extracted, williamr@4: ** or NULL if the Nth column of S is a general expression williamr@4: ** or if unable to allocate memory to store the name. williamr@4: ** williamr@4: ** {H13746} The [sqlite3_column_origin_name16(S,N)] interface returns either williamr@4: ** the UTF-16 native byte order zero-terminated name of the table williamr@4: ** column from which the Nth result column of the williamr@4: ** [prepared statement] S is extracted, or NULL if the Nth column williamr@4: ** of S is a general expression or if unable to allocate memory williamr@4: ** to store the name. williamr@4: ** williamr@4: ** {H13748} The return values from williamr@4: ** [sqlite3_column_database_name | column metadata interfaces] williamr@4: ** are valid for the lifetime of the [prepared statement] williamr@4: ** or until the encoding is changed by another metadata williamr@4: ** interface call for the same prepared statement and column. williamr@4: ** williamr@4: ** ASSUMPTIONS: williamr@4: ** williamr@4: ** {A13751} If two or more threads call one or more williamr@4: ** [sqlite3_column_database_name | column metadata interfaces] williamr@4: ** for the same [prepared statement] and result column williamr@4: ** at the same time then the results are undefined. williamr@4: */ williamr@4: IMPORT_C const char *sqlite3_column_database_name(sqlite3_stmt*,int); williamr@4: IMPORT_C const void *sqlite3_column_database_name16(sqlite3_stmt*,int); williamr@4: IMPORT_C const char *sqlite3_column_table_name(sqlite3_stmt*,int); williamr@4: IMPORT_C const void *sqlite3_column_table_name16(sqlite3_stmt*,int); williamr@4: IMPORT_C const char *sqlite3_column_origin_name(sqlite3_stmt*,int); williamr@4: IMPORT_C const void *sqlite3_column_origin_name16(sqlite3_stmt*,int); williamr@4: williamr@4: /* williamr@4: ** CAPI3REF: Declared Datatype Of A Query Result {H13760} williamr@4: ** williamr@4: ** The first parameter is a [prepared statement]. williamr@4: ** If this statement is a [SELECT] statement and the Nth column of the williamr@4: ** returned result set of that [SELECT] is a table column (not an williamr@4: ** expression or subquery) then the declared type of the table williamr@4: ** column is returned. If the Nth column of the result set is an williamr@4: ** expression or subquery, then a NULL pointer is returned. williamr@4: ** The returned string is always UTF-8 encoded. {END} williamr@4: ** williamr@4: ** For example, given the database schema: williamr@4: ** williamr@4: ** CREATE TABLE t1(c1 VARIANT); williamr@4: ** williamr@4: ** and the following statement to be compiled: williamr@4: ** williamr@4: ** SELECT c1 + 1, c1 FROM t1; williamr@4: ** williamr@4: ** this routine would return the string "VARIANT" for the second result williamr@4: ** column (i==1), and a NULL pointer for the first result column (i==0). williamr@4: ** williamr@4: ** SQLite uses dynamic run-time typing. So just because a column williamr@4: ** is declared to contain a particular type does not mean that the williamr@4: ** data stored in that column is of the declared type. SQLite is williamr@4: ** strongly typed, but the typing is dynamic not static. Type williamr@4: ** is associated with individual values, not with the containers williamr@4: ** used to hold those values. williamr@4: ** williamr@4: ** INVARIANTS: williamr@4: ** williamr@4: ** {H13761} A successful call to [sqlite3_column_decltype(S,N)] returns a williamr@4: ** zero-terminated UTF-8 string containing the declared datatype williamr@4: ** of the table column that appears as the Nth column (numbered williamr@4: ** from 0) of the result set to the [prepared statement] S. williamr@4: ** williamr@4: ** {H13762} A successful call to [sqlite3_column_decltype16(S,N)] williamr@4: ** returns a zero-terminated UTF-16 native byte order string williamr@4: ** containing the declared datatype of the table column that appears williamr@4: ** as the Nth column (numbered from 0) of the result set to the williamr@4: ** [prepared statement] S. williamr@4: ** williamr@4: ** {H13763} If N is less than 0 or N is greater than or equal to williamr@4: ** the number of columns in the [prepared statement] S, williamr@4: ** or if the Nth column of S is an expression or subquery rather williamr@4: ** than a table column, or if a memory allocation failure williamr@4: ** occurs during encoding conversions, then williamr@4: ** calls to [sqlite3_column_decltype(S,N)] or williamr@4: ** [sqlite3_column_decltype16(S,N)] return NULL. williamr@4: */ williamr@4: IMPORT_C const char *sqlite3_column_decltype(sqlite3_stmt*,int); williamr@4: IMPORT_C const void *sqlite3_column_decltype16(sqlite3_stmt*,int); williamr@4: williamr@4: /* williamr@4: ** CAPI3REF: Evaluate An SQL Statement {H13200} williamr@4: ** williamr@4: ** After a [prepared statement] has been prepared using either williamr@4: ** [sqlite3_prepare_v2()] or [sqlite3_prepare16_v2()] or one of the legacy williamr@4: ** interfaces [sqlite3_prepare()] or [sqlite3_prepare16()], this function williamr@4: ** must be called one or more times to evaluate the statement. williamr@4: ** williamr@4: ** The details of the behavior of the sqlite3_step() interface depend williamr@4: ** on whether the statement was prepared using the newer "v2" interface williamr@4: ** [sqlite3_prepare_v2()] and [sqlite3_prepare16_v2()] or the older legacy williamr@4: ** interface [sqlite3_prepare()] and [sqlite3_prepare16()]. The use of the williamr@4: ** new "v2" interface is recommended for new applications but the legacy williamr@4: ** interface will continue to be supported. williamr@4: ** williamr@4: ** In the legacy interface, the return value will be either [SQLITE_BUSY], williamr@4: ** [SQLITE_DONE], [SQLITE_ROW], [SQLITE_ERROR], or [SQLITE_MISUSE]. williamr@4: ** With the "v2" interface, any of the other [result codes] or williamr@4: ** [extended result codes] might be returned as well. williamr@4: ** williamr@4: ** [SQLITE_BUSY] means that the database engine was unable to acquire the williamr@4: ** database locks it needs to do its job. If the statement is a [COMMIT] williamr@4: ** or occurs outside of an explicit transaction, then you can retry the williamr@4: ** statement. If the statement is not a [COMMIT] and occurs within a williamr@4: ** explicit transaction then you should rollback the transaction before williamr@4: ** continuing. williamr@4: ** williamr@4: ** [SQLITE_DONE] means that the statement has finished executing williamr@4: ** successfully. sqlite3_step() should not be called again on this virtual williamr@4: ** machine without first calling [sqlite3_reset()] to reset the virtual williamr@4: ** machine back to its initial state. williamr@4: ** williamr@4: ** If the SQL statement being executed returns any data, then [SQLITE_ROW] williamr@4: ** is returned each time a new row of data is ready for processing by the williamr@4: ** caller. The values may be accessed using the [column access functions]. williamr@4: ** sqlite3_step() is called again to retrieve the next row of data. williamr@4: ** williamr@4: ** [SQLITE_ERROR] means that a run-time error (such as a constraint williamr@4: ** violation) has occurred. sqlite3_step() should not be called again on williamr@4: ** the VM. More information may be found by calling [sqlite3_errmsg()]. williamr@4: ** With the legacy interface, a more specific error code (for example, williamr@4: ** [SQLITE_INTERRUPT], [SQLITE_SCHEMA], [SQLITE_CORRUPT], and so forth) williamr@4: ** can be obtained by calling [sqlite3_reset()] on the williamr@4: ** [prepared statement]. In the "v2" interface, williamr@4: ** the more specific error code is returned directly by sqlite3_step(). williamr@4: ** williamr@4: ** [SQLITE_MISUSE] means that the this routine was called inappropriately. williamr@4: ** Perhaps it was called on a [prepared statement] that has williamr@4: ** already been [sqlite3_finalize | finalized] or on one that had williamr@4: ** previously returned [SQLITE_ERROR] or [SQLITE_DONE]. Or it could williamr@4: ** be the case that the same database connection is being used by two or williamr@4: ** more threads at the same moment in time. williamr@4: ** williamr@4: ** Goofy Interface Alert: In the legacy interface, the sqlite3_step() williamr@4: ** API always returns a generic error code, [SQLITE_ERROR], following any williamr@4: ** error other than [SQLITE_BUSY] and [SQLITE_MISUSE]. You must call williamr@4: ** [sqlite3_reset()] or [sqlite3_finalize()] in order to find one of the williamr@4: ** specific [error codes] that better describes the error. williamr@4: ** We admit that this is a goofy design. The problem has been fixed williamr@4: ** with the "v2" interface. If you prepare all of your SQL statements williamr@4: ** using either [sqlite3_prepare_v2()] or [sqlite3_prepare16_v2()] instead williamr@4: ** of the legacy [sqlite3_prepare()] and [sqlite3_prepare16()] interfaces, williamr@4: ** then the more specific [error codes] are returned directly williamr@4: ** by sqlite3_step(). The use of the "v2" interface is recommended. williamr@4: ** williamr@4: ** INVARIANTS: williamr@4: ** williamr@4: ** {H13202} If the [prepared statement] S is ready to be run, then williamr@4: ** [sqlite3_step(S)] advances that prepared statement until williamr@4: ** completion or until it is ready to return another row of the williamr@4: ** result set, or until an [sqlite3_interrupt | interrupt] williamr@4: ** or a run-time error occurs. williamr@4: ** williamr@4: ** {H15304} When a call to [sqlite3_step(S)] causes the [prepared statement] williamr@4: ** S to run to completion, the function returns [SQLITE_DONE]. williamr@4: ** williamr@4: ** {H15306} When a call to [sqlite3_step(S)] stops because it is ready to williamr@4: ** return another row of the result set, it returns [SQLITE_ROW]. williamr@4: ** williamr@4: ** {H15308} If a call to [sqlite3_step(S)] encounters an williamr@4: ** [sqlite3_interrupt | interrupt] or a run-time error, williamr@4: ** it returns an appropriate error code that is not one of williamr@4: ** [SQLITE_OK], [SQLITE_ROW], or [SQLITE_DONE]. williamr@4: ** williamr@4: ** {H15310} If an [sqlite3_interrupt | interrupt] or a run-time error williamr@4: ** occurs during a call to [sqlite3_step(S)] williamr@4: ** for a [prepared statement] S created using williamr@4: ** legacy interfaces [sqlite3_prepare()] or williamr@4: ** [sqlite3_prepare16()], then the function returns either williamr@4: ** [SQLITE_ERROR], [SQLITE_BUSY], or [SQLITE_MISUSE]. williamr@4: */ williamr@4: IMPORT_C int sqlite3_step(sqlite3_stmt*); williamr@4: williamr@4: /* williamr@4: ** CAPI3REF: Number of columns in a result set {H13770} williamr@4: ** williamr@4: ** Returns the number of values in the current row of the result set. williamr@4: ** williamr@4: ** INVARIANTS: williamr@4: ** williamr@4: ** {H13771} After a call to [sqlite3_step(S)] that returns [SQLITE_ROW], williamr@4: ** the [sqlite3_data_count(S)] routine will return the same value williamr@4: ** as the [sqlite3_column_count(S)] function. williamr@4: ** williamr@4: ** {H13772} After [sqlite3_step(S)] has returned any value other than williamr@4: ** [SQLITE_ROW] or before [sqlite3_step(S)] has been called on the williamr@4: ** [prepared statement] for the first time since it was williamr@4: ** [sqlite3_prepare | prepared] or [sqlite3_reset | reset], williamr@4: ** the [sqlite3_data_count(S)] routine returns zero. williamr@4: */ williamr@4: IMPORT_C int sqlite3_data_count(sqlite3_stmt *pStmt); williamr@4: williamr@4: /* williamr@4: ** CAPI3REF: Fundamental Datatypes {H10265} williamr@4: ** KEYWORDS: SQLITE_TEXT williamr@4: ** williamr@4: ** {H10266} Every value in SQLite has one of five fundamental datatypes: williamr@4: ** williamr@4: **
    williamr@4: **
  • 64-bit signed integer williamr@4: **
  • 64-bit IEEE floating point number williamr@4: **
  • string williamr@4: **
  • BLOB williamr@4: **
  • NULL williamr@4: **
{END} williamr@4: ** williamr@4: ** These constants are codes for each of those types. williamr@4: ** williamr@4: ** Note that the SQLITE_TEXT constant was also used in SQLite version 2 williamr@4: ** for a completely different meaning. Software that links against both williamr@4: ** SQLite version 2 and SQLite version 3 should use SQLITE3_TEXT, not williamr@4: ** SQLITE_TEXT. williamr@4: */ williamr@4: #define SQLITE_INTEGER 1 williamr@4: #define SQLITE_FLOAT 2 williamr@4: #define SQLITE_BLOB 4 williamr@4: #define SQLITE_NULL 5 williamr@4: #ifdef SQLITE_TEXT williamr@4: # undef SQLITE_TEXT williamr@4: #else williamr@4: # define SQLITE_TEXT 3 williamr@4: #endif williamr@4: #define SQLITE3_TEXT 3 williamr@4: williamr@4: /* williamr@4: ** CAPI3REF: Result Values From A Query {H13800} williamr@4: ** KEYWORDS: {column access functions} williamr@4: ** williamr@4: ** These routines form the "result set query" interface. williamr@4: ** williamr@4: ** These routines return information about a single column of the current williamr@4: ** result row of a query. In every case the first argument is a pointer williamr@4: ** to the [prepared statement] that is being evaluated (the [sqlite3_stmt*] williamr@4: ** that was returned from [sqlite3_prepare_v2()] or one of its variants) williamr@4: ** and the second argument is the index of the column for which information williamr@4: ** should be returned. The leftmost column of the result set has the index 0. williamr@4: ** williamr@4: ** If the SQL statement does not currently point to a valid row, or if the williamr@4: ** column index is out of range, the result is undefined. williamr@4: ** These routines may only be called when the most recent call to williamr@4: ** [sqlite3_step()] has returned [SQLITE_ROW] and neither williamr@4: ** [sqlite3_reset()] nor [sqlite3_finalize()] have been called subsequently. williamr@4: ** If any of these routines are called after [sqlite3_reset()] or williamr@4: ** [sqlite3_finalize()] or after [sqlite3_step()] has returned williamr@4: ** something other than [SQLITE_ROW], the results are undefined. williamr@4: ** If [sqlite3_step()] or [sqlite3_reset()] or [sqlite3_finalize()] williamr@4: ** are called from a different thread while any of these routines williamr@4: ** are pending, then the results are undefined. williamr@4: ** williamr@4: ** The sqlite3_column_type() routine returns the williamr@4: ** [SQLITE_INTEGER | datatype code] for the initial data type williamr@4: ** of the result column. The returned value is one of [SQLITE_INTEGER], williamr@4: ** [SQLITE_FLOAT], [SQLITE_TEXT], [SQLITE_BLOB], or [SQLITE_NULL]. The value williamr@4: ** returned by sqlite3_column_type() is only meaningful if no type williamr@4: ** conversions have occurred as described below. After a type conversion, williamr@4: ** the value returned by sqlite3_column_type() is undefined. Future williamr@4: ** versions of SQLite may change the behavior of sqlite3_column_type() williamr@4: ** following a type conversion. williamr@4: ** williamr@4: ** If the result is a BLOB or UTF-8 string then the sqlite3_column_bytes() williamr@4: ** routine returns the number of bytes in that BLOB or string. williamr@4: ** If the result is a UTF-16 string, then sqlite3_column_bytes() converts williamr@4: ** the string to UTF-8 and then returns the number of bytes. williamr@4: ** If the result is a numeric value then sqlite3_column_bytes() uses williamr@4: ** [sqlite3_snprintf()] to convert that value to a UTF-8 string and returns williamr@4: ** the number of bytes in that string. williamr@4: ** The value returned does not include the zero terminator at the end williamr@4: ** of the string. For clarity: the value returned is the number of williamr@4: ** bytes in the string, not the number of characters. williamr@4: ** williamr@4: ** Strings returned by sqlite3_column_text() and sqlite3_column_text16(), williamr@4: ** even empty strings, are always zero terminated. The return williamr@4: ** value from sqlite3_column_blob() for a zero-length BLOB is an arbitrary williamr@4: ** pointer, possibly even a NULL pointer. williamr@4: ** williamr@4: ** The sqlite3_column_bytes16() routine is similar to sqlite3_column_bytes() williamr@4: ** but leaves the result in UTF-16 in native byte order instead of UTF-8. williamr@4: ** The zero terminator is not included in this count. williamr@4: ** williamr@4: ** The object returned by [sqlite3_column_value()] is an williamr@4: ** [unprotected sqlite3_value] object. An unprotected sqlite3_value object williamr@4: ** may only be used with [sqlite3_bind_value()] and [sqlite3_result_value()]. williamr@4: ** If the [unprotected sqlite3_value] object returned by williamr@4: ** [sqlite3_column_value()] is used in any other way, including calls williamr@4: ** to routines like [sqlite3_value_int()], [sqlite3_value_text()], williamr@4: ** or [sqlite3_value_bytes()], then the behavior is undefined. williamr@4: ** williamr@4: ** These routines attempt to convert the value where appropriate. For williamr@4: ** example, if the internal representation is FLOAT and a text result williamr@4: ** is requested, [sqlite3_snprintf()] is used internally to perform the williamr@4: ** conversion automatically. The following table details the conversions williamr@4: ** that are applied: williamr@4: ** williamr@4: **
williamr@4: ** williamr@4: **
Internal
Type
Requested
Type
Conversion williamr@4: ** williamr@4: **
NULL INTEGER Result is 0 williamr@4: **
NULL FLOAT Result is 0.0 williamr@4: **
NULL TEXT Result is NULL pointer williamr@4: **
NULL BLOB Result is NULL pointer williamr@4: **
INTEGER FLOAT Convert from integer to float williamr@4: **
INTEGER TEXT ASCII rendering of the integer williamr@4: **
INTEGER BLOB Same as INTEGER->TEXT williamr@4: **
FLOAT INTEGER Convert from float to integer williamr@4: **
FLOAT TEXT ASCII rendering of the float williamr@4: **
FLOAT BLOB Same as FLOAT->TEXT williamr@4: **
TEXT INTEGER Use atoi() williamr@4: **
TEXT FLOAT Use atof() williamr@4: **
TEXT BLOB No change williamr@4: **
BLOB INTEGER Convert to TEXT then use atoi() williamr@4: **
BLOB FLOAT Convert to TEXT then use atof() williamr@4: **
BLOB TEXT Add a zero terminator if needed williamr@4: **
williamr@4: **
williamr@4: ** williamr@4: ** The table above makes reference to standard C library functions atoi() williamr@4: ** and atof(). SQLite does not really use these functions. It has its williamr@4: ** own equivalent internal routines. The atoi() and atof() names are williamr@4: ** used in the table for brevity and because they are familiar to most williamr@4: ** C programmers. williamr@4: ** williamr@4: ** Note that when type conversions occur, pointers returned by prior williamr@4: ** calls to sqlite3_column_blob(), sqlite3_column_text(), and/or williamr@4: ** sqlite3_column_text16() may be invalidated. williamr@4: ** Type conversions and pointer invalidations might occur williamr@4: ** in the following cases: williamr@4: ** williamr@4: **
    williamr@4: **
  • The initial content is a BLOB and sqlite3_column_text() or williamr@4: ** sqlite3_column_text16() is called. A zero-terminator might williamr@4: ** need to be added to the string.
  • williamr@4: **
  • The initial content is UTF-8 text and sqlite3_column_bytes16() or williamr@4: ** sqlite3_column_text16() is called. The content must be converted williamr@4: ** to UTF-16.
  • williamr@4: **
  • The initial content is UTF-16 text and sqlite3_column_bytes() or williamr@4: ** sqlite3_column_text() is called. The content must be converted williamr@4: ** to UTF-8.
  • williamr@4: **
williamr@4: ** williamr@4: ** Conversions between UTF-16be and UTF-16le are always done in place and do williamr@4: ** not invalidate a prior pointer, though of course the content of the buffer williamr@4: ** that the prior pointer points to will have been modified. Other kinds williamr@4: ** of conversion are done in place when it is possible, but sometimes they williamr@4: ** are not possible and in those cases prior pointers are invalidated. williamr@4: ** williamr@4: ** The safest and easiest to remember policy is to invoke these routines williamr@4: ** in one of the following ways: williamr@4: ** williamr@4: **
    williamr@4: **
  • sqlite3_column_text() followed by sqlite3_column_bytes()
  • williamr@4: **
  • sqlite3_column_blob() followed by sqlite3_column_bytes()
  • williamr@4: **
  • sqlite3_column_text16() followed by sqlite3_column_bytes16()
  • williamr@4: **
williamr@4: ** williamr@4: ** In other words, you should call sqlite3_column_text(), williamr@4: ** sqlite3_column_blob(), or sqlite3_column_text16() first to force the result williamr@4: ** into the desired format, then invoke sqlite3_column_bytes() or williamr@4: ** sqlite3_column_bytes16() to find the size of the result. Do not mix calls williamr@4: ** to sqlite3_column_text() or sqlite3_column_blob() with calls to williamr@4: ** sqlite3_column_bytes16(), and do not mix calls to sqlite3_column_text16() williamr@4: ** with calls to sqlite3_column_bytes(). williamr@4: ** williamr@4: ** The pointers returned are valid until a type conversion occurs as williamr@4: ** described above, or until [sqlite3_step()] or [sqlite3_reset()] or williamr@4: ** [sqlite3_finalize()] is called. The memory space used to hold strings williamr@4: ** and BLOBs is freed automatically. Do not pass the pointers returned williamr@4: ** [sqlite3_column_blob()], [sqlite3_column_text()], etc. into williamr@4: ** [sqlite3_free()]. williamr@4: ** williamr@4: ** If a memory allocation error occurs during the evaluation of any williamr@4: ** of these routines, a default value is returned. The default value williamr@4: ** is either the integer 0, the floating point number 0.0, or a NULL williamr@4: ** pointer. Subsequent calls to [sqlite3_errcode()] will return williamr@4: ** [SQLITE_NOMEM]. williamr@4: ** williamr@4: ** INVARIANTS: williamr@4: ** williamr@4: ** {H13803} The [sqlite3_column_blob(S,N)] interface converts the williamr@4: ** Nth column in the current row of the result set for williamr@4: ** the [prepared statement] S into a BLOB and then returns a williamr@4: ** pointer to the converted value. williamr@4: ** williamr@4: ** {H13806} The [sqlite3_column_bytes(S,N)] interface returns the williamr@4: ** number of bytes in the BLOB or string (exclusive of the williamr@4: ** zero terminator on the string) that was returned by the williamr@4: ** most recent call to [sqlite3_column_blob(S,N)] or williamr@4: ** [sqlite3_column_text(S,N)]. williamr@4: ** williamr@4: ** {H13809} The [sqlite3_column_bytes16(S,N)] interface returns the williamr@4: ** number of bytes in the string (exclusive of the williamr@4: ** zero terminator on the string) that was returned by the williamr@4: ** most recent call to [sqlite3_column_text16(S,N)]. williamr@4: ** williamr@4: ** {H13812} The [sqlite3_column_double(S,N)] interface converts the williamr@4: ** Nth column in the current row of the result set for the williamr@4: ** [prepared statement] S into a floating point value and williamr@4: ** returns a copy of that value. williamr@4: ** williamr@4: ** {H13815} The [sqlite3_column_int(S,N)] interface converts the williamr@4: ** Nth column in the current row of the result set for the williamr@4: ** [prepared statement] S into a 64-bit signed integer and williamr@4: ** returns the lower 32 bits of that integer. williamr@4: ** williamr@4: ** {H13818} The [sqlite3_column_int64(S,N)] interface converts the williamr@4: ** Nth column in the current row of the result set for the williamr@4: ** [prepared statement] S into a 64-bit signed integer and williamr@4: ** returns a copy of that integer. williamr@4: ** williamr@4: ** {H13821} The [sqlite3_column_text(S,N)] interface converts the williamr@4: ** Nth column in the current row of the result set for williamr@4: ** the [prepared statement] S into a zero-terminated UTF-8 williamr@4: ** string and returns a pointer to that string. williamr@4: ** williamr@4: ** {H13824} The [sqlite3_column_text16(S,N)] interface converts the williamr@4: ** Nth column in the current row of the result set for the williamr@4: ** [prepared statement] S into a zero-terminated 2-byte williamr@4: ** aligned UTF-16 native byte order string and returns williamr@4: ** a pointer to that string. williamr@4: ** williamr@4: ** {H13827} The [sqlite3_column_type(S,N)] interface returns williamr@4: ** one of [SQLITE_NULL], [SQLITE_INTEGER], [SQLITE_FLOAT], williamr@4: ** [SQLITE_TEXT], or [SQLITE_BLOB] as appropriate for williamr@4: ** the Nth column in the current row of the result set for williamr@4: ** the [prepared statement] S. williamr@4: ** williamr@4: ** {H13830} The [sqlite3_column_value(S,N)] interface returns a williamr@4: ** pointer to an [unprotected sqlite3_value] object for the williamr@4: ** Nth column in the current row of the result set for williamr@4: ** the [prepared statement] S. williamr@4: */ williamr@4: IMPORT_C const void *sqlite3_column_blob(sqlite3_stmt*, int iCol); williamr@4: IMPORT_C int sqlite3_column_bytes(sqlite3_stmt*, int iCol); williamr@4: IMPORT_C int sqlite3_column_bytes16(sqlite3_stmt*, int iCol); williamr@4: IMPORT_C double sqlite3_column_double(sqlite3_stmt*, int iCol); williamr@4: IMPORT_C int sqlite3_column_int(sqlite3_stmt*, int iCol); williamr@4: IMPORT_C sqlite3_int64 sqlite3_column_int64(sqlite3_stmt*, int iCol); williamr@4: IMPORT_C const unsigned char *sqlite3_column_text(sqlite3_stmt*, int iCol); williamr@4: IMPORT_C const void *sqlite3_column_text16(sqlite3_stmt*, int iCol); williamr@4: IMPORT_C int sqlite3_column_type(sqlite3_stmt*, int iCol); williamr@4: IMPORT_C sqlite3_value *sqlite3_column_value(sqlite3_stmt*, int iCol); williamr@4: williamr@4: /* williamr@4: ** CAPI3REF: Destroy A Prepared Statement Object {H13300} williamr@4: ** williamr@4: ** The sqlite3_finalize() function is called to delete a [prepared statement]. williamr@4: ** If the statement was executed successfully or not executed at all, then williamr@4: ** SQLITE_OK is returned. If execution of the statement failed then an williamr@4: ** [error code] or [extended error code] is returned. williamr@4: ** williamr@4: ** This routine can be called at any point during the execution of the williamr@4: ** [prepared statement]. If the virtual machine has not williamr@4: ** completed execution when this routine is called, that is like williamr@4: ** encountering an error or an [sqlite3_interrupt | interrupt]. williamr@4: ** Incomplete updates may be rolled back and transactions canceled, williamr@4: ** depending on the circumstances, and the williamr@4: ** [error code] returned will be [SQLITE_ABORT]. williamr@4: ** williamr@4: ** INVARIANTS: williamr@4: ** williamr@4: ** {H11302} The [sqlite3_finalize(S)] interface destroys the williamr@4: ** [prepared statement] S and releases all williamr@4: ** memory and file resources held by that object. williamr@4: ** williamr@4: ** {H11304} If the most recent call to [sqlite3_step(S)] for the williamr@4: ** [prepared statement] S returned an error, williamr@4: ** then [sqlite3_finalize(S)] returns that same error. williamr@4: */ williamr@4: IMPORT_C int sqlite3_finalize(sqlite3_stmt *pStmt); williamr@4: williamr@4: /* williamr@4: ** CAPI3REF: Reset A Prepared Statement Object {H13330} williamr@4: ** williamr@4: ** The sqlite3_reset() function is called to reset a [prepared statement] williamr@4: ** object back to its initial state, ready to be re-executed. williamr@4: ** Any SQL statement variables that had values bound to them using williamr@4: ** the [sqlite3_bind_blob | sqlite3_bind_*() API] retain their values. williamr@4: ** Use [sqlite3_clear_bindings()] to reset the bindings. williamr@4: ** williamr@4: ** {H11332} The [sqlite3_reset(S)] interface resets the [prepared statement] S williamr@4: ** back to the beginning of its program. williamr@4: ** williamr@4: ** {H11334} If the most recent call to [sqlite3_step(S)] for the williamr@4: ** [prepared statement] S returned [SQLITE_ROW] or [SQLITE_DONE], williamr@4: ** or if [sqlite3_step(S)] has never before been called on S, williamr@4: ** then [sqlite3_reset(S)] returns [SQLITE_OK]. williamr@4: ** williamr@4: ** {H11336} If the most recent call to [sqlite3_step(S)] for the williamr@4: ** [prepared statement] S indicated an error, then williamr@4: ** [sqlite3_reset(S)] returns an appropriate [error code]. williamr@4: ** williamr@4: ** {H11338} The [sqlite3_reset(S)] interface does not change the values williamr@4: ** of any [sqlite3_bind_blob|bindings] on the [prepared statement] S. williamr@4: */ williamr@4: IMPORT_C int sqlite3_reset(sqlite3_stmt *pStmt); williamr@4: williamr@4: /* williamr@4: ** CAPI3REF: Create Or Redefine SQL Functions {H16100} williamr@4: ** KEYWORDS: {function creation routines} williamr@4: ** KEYWORDS: {application-defined SQL function} williamr@4: ** KEYWORDS: {application-defined SQL functions} williamr@4: ** williamr@4: ** These two functions (collectively known as "function creation routines") williamr@4: ** are used to add SQL functions or aggregates or to redefine the behavior williamr@4: ** of existing SQL functions or aggregates. The only difference between the williamr@4: ** two is that the second parameter, the name of the (scalar) function or williamr@4: ** aggregate, is encoded in UTF-8 for sqlite3_create_function() and UTF-16 williamr@4: ** for sqlite3_create_function16(). williamr@4: ** williamr@4: ** The first parameter is the [database connection] to which the SQL williamr@4: ** function is to be added. If a single program uses more than one database williamr@4: ** connection internally, then SQL functions must be added individually to williamr@4: ** each database connection. williamr@4: ** williamr@4: ** The second parameter is the name of the SQL function to be created or williamr@4: ** redefined. The length of the name is limited to 255 bytes, exclusive of williamr@4: ** the zero-terminator. Note that the name length limit is in bytes, not williamr@4: ** characters. Any attempt to create a function with a longer name williamr@4: ** will result in [SQLITE_ERROR] being returned. williamr@4: ** williamr@4: ** The third parameter (nArg) williamr@4: ** is the number of arguments that the SQL function or williamr@4: ** aggregate takes. If this parameter is negative, then the SQL function or williamr@4: ** aggregate may take any number of arguments. williamr@4: ** williamr@4: ** The fourth parameter, eTextRep, specifies what williamr@4: ** [SQLITE_UTF8 | text encoding] this SQL function prefers for williamr@4: ** its parameters. Any SQL function implementation should be able to work williamr@4: ** work with UTF-8, UTF-16le, or UTF-16be. But some implementations may be williamr@4: ** more efficient with one encoding than another. It is allowed to williamr@4: ** invoke sqlite3_create_function() or sqlite3_create_function16() multiple williamr@4: ** times with the same function but with different values of eTextRep. williamr@4: ** When multiple implementations of the same function are available, SQLite williamr@4: ** will pick the one that involves the least amount of data conversion. williamr@4: ** If there is only a single implementation which does not care what text williamr@4: ** encoding is used, then the fourth argument should be [SQLITE_ANY]. williamr@4: ** williamr@4: ** The fifth parameter is an arbitrary pointer. The implementation of the williamr@4: ** function can gain access to this pointer using [sqlite3_user_data()]. williamr@4: ** williamr@4: ** The seventh, eighth and ninth parameters, xFunc, xStep and xFinal, are williamr@4: ** pointers to C-language functions that implement the SQL function or williamr@4: ** aggregate. A scalar SQL function requires an implementation of the xFunc williamr@4: ** callback only, NULL pointers should be passed as the xStep and xFinal williamr@4: ** parameters. An aggregate SQL function requires an implementation of xStep williamr@4: ** and xFinal and NULL should be passed for xFunc. To delete an existing williamr@4: ** SQL function or aggregate, pass NULL for all three function callbacks. williamr@4: ** williamr@4: ** It is permitted to register multiple implementations of the same williamr@4: ** functions with the same name but with either differing numbers of williamr@4: ** arguments or differing preferred text encodings. SQLite will use williamr@4: ** the implementation most closely matches the way in which the williamr@4: ** SQL function is used. A function implementation with a non-negative williamr@4: ** nArg parameter is a better match than a function implementation with williamr@4: ** a negative nArg. A function where the preferred text encoding williamr@4: ** matches the database encoding is a better williamr@4: ** match than a function where the encoding is different. williamr@4: ** A function where the encoding difference is between UTF16le and UTF16be williamr@4: ** is a closer match than a function where the encoding difference is williamr@4: ** between UTF8 and UTF16. williamr@4: ** williamr@4: ** Built-in functions may be overloaded by new application-defined functions. williamr@4: ** The first application-defined function with a given name overrides all williamr@4: ** built-in functions in the same [database connection] with the same name. williamr@4: ** Subsequent application-defined functions of the same name only override williamr@4: ** prior application-defined functions that are an exact match for the williamr@4: ** number of parameters and preferred encoding. williamr@4: ** williamr@4: ** An application-defined function is permitted to call other williamr@4: ** SQLite interfaces. However, such calls must not williamr@4: ** close the database connection nor finalize or reset the prepared williamr@4: ** statement in which the function is running. williamr@4: ** williamr@4: ** INVARIANTS: williamr@4: ** williamr@4: ** {H16103} The [sqlite3_create_function16(D,X,...)] interface shall behave williamr@4: ** as [sqlite3_create_function(D,X,...)] in every way except that it williamr@4: ** interprets the X argument as zero-terminated UTF-16 williamr@4: ** native byte order instead of as zero-terminated UTF-8. williamr@4: ** williamr@4: ** {H16106} A successful invocation of the williamr@4: ** [sqlite3_create_function(D,X,N,E,...)] interface shall register williamr@4: ** or replaces callback functions in the [database connection] D williamr@4: ** used to implement the SQL function named X with N parameters williamr@4: ** and having a preferred text encoding of E. williamr@4: ** williamr@4: ** {H16109} A successful call to [sqlite3_create_function(D,X,N,E,P,F,S,L)] williamr@4: ** shall replace the P, F, S, and L values from any prior calls with williamr@4: ** the same D, X, N, and E values. williamr@4: ** williamr@4: ** {H16112} The [sqlite3_create_function(D,X,...)] interface shall fail williamr@4: ** if the SQL function name X is williamr@4: ** longer than 255 bytes exclusive of the zero terminator. williamr@4: ** williamr@4: ** {H16118} The [sqlite3_create_function(D,X,N,E,P,F,S,L)] interface williamr@4: ** shall fail unless either F is NULL and S and L are non-NULL or williamr@4: *** F is non-NULL and S and L are NULL. williamr@4: ** williamr@4: ** {H16121} The [sqlite3_create_function(D,...)] interface shall fails with an williamr@4: ** error code of [SQLITE_BUSY] if there exist [prepared statements] williamr@4: ** associated with the [database connection] D. williamr@4: ** williamr@4: ** {H16124} The [sqlite3_create_function(D,X,N,...)] interface shall fail with williamr@4: ** an error code of [SQLITE_ERROR] if parameter N is less williamr@4: ** than -1 or greater than 127. williamr@4: ** williamr@4: ** {H16127} When N is non-negative, the [sqlite3_create_function(D,X,N,...)] williamr@4: ** interface shall register callbacks to be invoked for the williamr@4: ** SQL function williamr@4: ** named X when the number of arguments to the SQL function is williamr@4: ** exactly N. williamr@4: ** williamr@4: ** {H16130} When N is -1, the [sqlite3_create_function(D,X,N,...)] williamr@4: ** interface shall register callbacks to be invoked for the SQL williamr@4: ** function named X with any number of arguments. williamr@4: ** williamr@4: ** {H16133} When calls to [sqlite3_create_function(D,X,N,...)] williamr@4: ** specify multiple implementations of the same function X williamr@4: ** and when one implementation has N>=0 and the other has N=(-1) williamr@4: ** the implementation with a non-zero N shall be preferred. williamr@4: ** williamr@4: ** {H16136} When calls to [sqlite3_create_function(D,X,N,E,...)] williamr@4: ** specify multiple implementations of the same function X with williamr@4: ** the same number of arguments N but with different williamr@4: ** encodings E, then the implementation where E matches the williamr@4: ** database encoding shall preferred. williamr@4: ** williamr@4: ** {H16139} For an aggregate SQL function created using williamr@4: ** [sqlite3_create_function(D,X,N,E,P,0,S,L)] the finalizer williamr@4: ** function L shall always be invoked exactly once if the williamr@4: ** step function S is called one or more times. williamr@4: ** williamr@4: ** {H16142} When SQLite invokes either the xFunc or xStep function of williamr@4: ** an application-defined SQL function or aggregate created williamr@4: ** by [sqlite3_create_function()] or [sqlite3_create_function16()], williamr@4: ** then the array of [sqlite3_value] objects passed as the williamr@4: ** third parameter shall be [protected sqlite3_value] objects. williamr@4: */ williamr@4: IMPORT_C int sqlite3_create_function( williamr@4: sqlite3 *db, williamr@4: const char *zFunctionName, williamr@4: int nArg, williamr@4: int eTextRep, williamr@4: void *pApp, williamr@4: void (*xFunc)(sqlite3_context*,int,sqlite3_value**), williamr@4: void (*xStep)(sqlite3_context*,int,sqlite3_value**), williamr@4: void (*xFinal)(sqlite3_context*) williamr@4: ); williamr@4: IMPORT_C int sqlite3_create_function16( williamr@4: sqlite3 *db, williamr@4: const void *zFunctionName, williamr@4: int nArg, williamr@4: int eTextRep, williamr@4: void *pApp, williamr@4: void (*xFunc)(sqlite3_context*,int,sqlite3_value**), williamr@4: void (*xStep)(sqlite3_context*,int,sqlite3_value**), williamr@4: void (*xFinal)(sqlite3_context*) williamr@4: ); williamr@4: williamr@4: /* williamr@4: ** CAPI3REF: Text Encodings {H10267} williamr@4: ** williamr@4: ** These constant define integer codes that represent the various williamr@4: ** text encodings supported by SQLite. williamr@4: */ williamr@4: #define SQLITE_UTF8 1 williamr@4: #define SQLITE_UTF16LE 2 williamr@4: #define SQLITE_UTF16BE 3 williamr@4: #define SQLITE_UTF16 4 /* Use native byte order */ williamr@4: #define SQLITE_ANY 5 /* sqlite3_create_function only */ williamr@4: #define SQLITE_UTF16_ALIGNED 8 /* sqlite3_create_collation only */ williamr@4: williamr@4: /* williamr@4: ** CAPI3REF: Deprecated Functions williamr@4: ** DEPRECATED williamr@4: ** williamr@4: ** These functions are [deprecated]. In order to maintain williamr@4: ** backwards compatibility with older code, these functions continue williamr@4: ** to be supported. However, new applications should avoid williamr@4: ** the use of these functions. To help encourage people to avoid williamr@4: ** using these functions, we are not going to tell you want they do. williamr@4: */ williamr@4: IMPORT_C int sqlite3_aggregate_count(sqlite3_context*); williamr@4: IMPORT_C int sqlite3_expired(sqlite3_stmt*); williamr@4: IMPORT_C int sqlite3_transfer_bindings(sqlite3_stmt*, sqlite3_stmt*); williamr@4: IMPORT_C int sqlite3_global_recover(void); williamr@4: IMPORT_C void sqlite3_thread_cleanup(void); williamr@4: IMPORT_C int sqlite3_memory_alarm(void(*)(void*,sqlite3_int64,int),void*,sqlite3_int64); williamr@4: williamr@4: /* williamr@4: ** CAPI3REF: Obtaining SQL Function Parameter Values {H15100} williamr@4: ** williamr@4: ** The C-language implementation of SQL functions and aggregates uses williamr@4: ** this set of interface routines to access the parameter values on williamr@4: ** the function or aggregate. williamr@4: ** williamr@4: ** The xFunc (for scalar functions) or xStep (for aggregates) parameters williamr@4: ** to [sqlite3_create_function()] and [sqlite3_create_function16()] williamr@4: ** define callbacks that implement the SQL functions and aggregates. williamr@4: ** The 4th parameter to these callbacks is an array of pointers to williamr@4: ** [protected sqlite3_value] objects. There is one [sqlite3_value] object for williamr@4: ** each parameter to the SQL function. These routines are used to williamr@4: ** extract values from the [sqlite3_value] objects. williamr@4: ** williamr@4: ** These routines work only with [protected sqlite3_value] objects. williamr@4: ** Any attempt to use these routines on an [unprotected sqlite3_value] williamr@4: ** object results in undefined behavior. williamr@4: ** williamr@4: ** These routines work just like the corresponding [column access functions] williamr@4: ** except that these routines take a single [protected sqlite3_value] object williamr@4: ** pointer instead of a [sqlite3_stmt*] pointer and an integer column number. williamr@4: ** williamr@4: ** The sqlite3_value_text16() interface extracts a UTF-16 string williamr@4: ** in the native byte-order of the host machine. The williamr@4: ** sqlite3_value_text16be() and sqlite3_value_text16le() interfaces williamr@4: ** extract UTF-16 strings as big-endian and little-endian respectively. williamr@4: ** williamr@4: ** The sqlite3_value_numeric_type() interface attempts to apply williamr@4: ** numeric affinity to the value. This means that an attempt is williamr@4: ** made to convert the value to an integer or floating point. If williamr@4: ** such a conversion is possible without loss of information (in other williamr@4: ** words, if the value is a string that looks like a number) williamr@4: ** then the conversion is performed. Otherwise no conversion occurs. williamr@4: ** The [SQLITE_INTEGER | datatype] after conversion is returned. williamr@4: ** williamr@4: ** Please pay particular attention to the fact that the pointer returned williamr@4: ** from [sqlite3_value_blob()], [sqlite3_value_text()], or williamr@4: ** [sqlite3_value_text16()] can be invalidated by a subsequent call to williamr@4: ** [sqlite3_value_bytes()], [sqlite3_value_bytes16()], [sqlite3_value_text()], williamr@4: ** or [sqlite3_value_text16()]. williamr@4: ** williamr@4: ** These routines must be called from the same thread as williamr@4: ** the SQL function that supplied the [sqlite3_value*] parameters. williamr@4: ** williamr@4: ** INVARIANTS: williamr@4: ** williamr@4: ** {H15103} The [sqlite3_value_blob(V)] interface converts the williamr@4: ** [protected sqlite3_value] object V into a BLOB and then williamr@4: ** returns a pointer to the converted value. williamr@4: ** williamr@4: ** {H15106} The [sqlite3_value_bytes(V)] interface returns the williamr@4: ** number of bytes in the BLOB or string (exclusive of the williamr@4: ** zero terminator on the string) that was returned by the williamr@4: ** most recent call to [sqlite3_value_blob(V)] or williamr@4: ** [sqlite3_value_text(V)]. williamr@4: ** williamr@4: ** {H15109} The [sqlite3_value_bytes16(V)] interface returns the williamr@4: ** number of bytes in the string (exclusive of the williamr@4: ** zero terminator on the string) that was returned by the williamr@4: ** most recent call to [sqlite3_value_text16(V)], williamr@4: ** [sqlite3_value_text16be(V)], or [sqlite3_value_text16le(V)]. williamr@4: ** williamr@4: ** {H15112} The [sqlite3_value_double(V)] interface converts the williamr@4: ** [protected sqlite3_value] object V into a floating point value and williamr@4: ** returns a copy of that value. williamr@4: ** williamr@4: ** {H15115} The [sqlite3_value_int(V)] interface converts the williamr@4: ** [protected sqlite3_value] object V into a 64-bit signed integer and williamr@4: ** returns the lower 32 bits of that integer. williamr@4: ** williamr@4: ** {H15118} The [sqlite3_value_int64(V)] interface converts the williamr@4: ** [protected sqlite3_value] object V into a 64-bit signed integer and williamr@4: ** returns a copy of that integer. williamr@4: ** williamr@4: ** {H15121} The [sqlite3_value_text(V)] interface converts the williamr@4: ** [protected sqlite3_value] object V into a zero-terminated UTF-8 williamr@4: ** string and returns a pointer to that string. williamr@4: ** williamr@4: ** {H15124} The [sqlite3_value_text16(V)] interface converts the williamr@4: ** [protected sqlite3_value] object V into a zero-terminated 2-byte williamr@4: ** aligned UTF-16 native byte order williamr@4: ** string and returns a pointer to that string. williamr@4: ** williamr@4: ** {H15127} The [sqlite3_value_text16be(V)] interface converts the williamr@4: ** [protected sqlite3_value] object V into a zero-terminated 2-byte williamr@4: ** aligned UTF-16 big-endian williamr@4: ** string and returns a pointer to that string. williamr@4: ** williamr@4: ** {H15130} The [sqlite3_value_text16le(V)] interface converts the williamr@4: ** [protected sqlite3_value] object V into a zero-terminated 2-byte williamr@4: ** aligned UTF-16 little-endian williamr@4: ** string and returns a pointer to that string. williamr@4: ** williamr@4: ** {H15133} The [sqlite3_value_type(V)] interface returns williamr@4: ** one of [SQLITE_NULL], [SQLITE_INTEGER], [SQLITE_FLOAT], williamr@4: ** [SQLITE_TEXT], or [SQLITE_BLOB] as appropriate for williamr@4: ** the [sqlite3_value] object V. williamr@4: ** williamr@4: ** {H15136} The [sqlite3_value_numeric_type(V)] interface converts williamr@4: ** the [protected sqlite3_value] object V into either an integer or williamr@4: ** a floating point value if it can do so without loss of williamr@4: ** information, and returns one of [SQLITE_NULL], williamr@4: ** [SQLITE_INTEGER], [SQLITE_FLOAT], [SQLITE_TEXT], or williamr@4: ** [SQLITE_BLOB] as appropriate for the williamr@4: ** [protected sqlite3_value] object V after the conversion attempt. williamr@4: */ williamr@4: IMPORT_C const void *sqlite3_value_blob(sqlite3_value*); williamr@4: IMPORT_C int sqlite3_value_bytes(sqlite3_value*); williamr@4: IMPORT_C int sqlite3_value_bytes16(sqlite3_value*); williamr@4: IMPORT_C double sqlite3_value_double(sqlite3_value*); williamr@4: IMPORT_C int sqlite3_value_int(sqlite3_value*); williamr@4: IMPORT_C sqlite3_int64 sqlite3_value_int64(sqlite3_value*); williamr@4: IMPORT_C const unsigned char *sqlite3_value_text(sqlite3_value*); williamr@4: IMPORT_C const void *sqlite3_value_text16(sqlite3_value*); williamr@4: IMPORT_C const void *sqlite3_value_text16le(sqlite3_value*); williamr@4: IMPORT_C const void *sqlite3_value_text16be(sqlite3_value*); williamr@4: IMPORT_C int sqlite3_value_type(sqlite3_value*); williamr@4: IMPORT_C int sqlite3_value_numeric_type(sqlite3_value*); williamr@4: williamr@4: /* williamr@4: ** CAPI3REF: Obtain Aggregate Function Context {H16210} williamr@4: ** williamr@4: ** The implementation of aggregate SQL functions use this routine to allocate williamr@4: ** a structure for storing their state. williamr@4: ** williamr@4: ** The first time the sqlite3_aggregate_context() routine is called for a williamr@4: ** particular aggregate, SQLite allocates nBytes of memory, zeroes out that williamr@4: ** memory, and returns a pointer to it. On second and subsequent calls to williamr@4: ** sqlite3_aggregate_context() for the same aggregate function index, williamr@4: ** the same buffer is returned. The implementation of the aggregate can use williamr@4: ** the returned buffer to accumulate data. williamr@4: ** williamr@4: ** SQLite automatically frees the allocated buffer when the aggregate williamr@4: ** query concludes. williamr@4: ** williamr@4: ** The first parameter should be a copy of the williamr@4: ** [sqlite3_context | SQL function context] that is the first parameter williamr@4: ** to the callback routine that implements the aggregate function. williamr@4: ** williamr@4: ** This routine must be called from the same thread in which williamr@4: ** the aggregate SQL function is running. williamr@4: ** williamr@4: ** INVARIANTS: williamr@4: ** williamr@4: ** {H16211} The first invocation of [sqlite3_aggregate_context(C,N)] for williamr@4: ** a particular instance of an aggregate function (for a particular williamr@4: ** context C) causes SQLite to allocate N bytes of memory, williamr@4: ** zero that memory, and return a pointer to the allocated memory. williamr@4: ** williamr@4: ** {H16213} If a memory allocation error occurs during williamr@4: ** [sqlite3_aggregate_context(C,N)] then the function returns 0. williamr@4: ** williamr@4: ** {H16215} Second and subsequent invocations of williamr@4: ** [sqlite3_aggregate_context(C,N)] for the same context pointer C williamr@4: ** ignore the N parameter and return a pointer to the same williamr@4: ** block of memory returned by the first invocation. williamr@4: ** williamr@4: ** {H16217} The memory allocated by [sqlite3_aggregate_context(C,N)] is williamr@4: ** automatically freed on the next call to [sqlite3_reset()] williamr@4: ** or [sqlite3_finalize()] for the [prepared statement] containing williamr@4: ** the aggregate function associated with context C. williamr@4: */ williamr@4: IMPORT_C void *sqlite3_aggregate_context(sqlite3_context*, int nBytes); williamr@4: williamr@4: /* williamr@4: ** CAPI3REF: User Data For Functions {H16240} williamr@4: ** williamr@4: ** The sqlite3_user_data() interface returns a copy of williamr@4: ** the pointer that was the pUserData parameter (the 5th parameter) williamr@4: ** of the [sqlite3_create_function()] williamr@4: ** and [sqlite3_create_function16()] routines that originally williamr@4: ** registered the application defined function. {END} williamr@4: ** williamr@4: ** This routine must be called from the same thread in which williamr@4: ** the application-defined function is running. williamr@4: ** williamr@4: ** INVARIANTS: williamr@4: ** williamr@4: ** {H16243} The [sqlite3_user_data(C)] interface returns a copy of the williamr@4: ** P pointer from the [sqlite3_create_function(D,X,N,E,P,F,S,L)] williamr@4: ** or [sqlite3_create_function16(D,X,N,E,P,F,S,L)] call that williamr@4: ** registered the SQL function associated with [sqlite3_context] C. williamr@4: */ williamr@4: IMPORT_C void *sqlite3_user_data(sqlite3_context*); williamr@4: williamr@4: /* williamr@4: ** CAPI3REF: Database Connection For Functions {H16250} williamr@4: ** williamr@4: ** The sqlite3_context_db_handle() interface returns a copy of williamr@4: ** the pointer to the [database connection] (the 1st parameter) williamr@4: ** of the [sqlite3_create_function()] williamr@4: ** and [sqlite3_create_function16()] routines that originally williamr@4: ** registered the application defined function. williamr@4: ** williamr@4: ** INVARIANTS: williamr@4: ** williamr@4: ** {H16253} The [sqlite3_context_db_handle(C)] interface returns a copy of the williamr@4: ** D pointer from the [sqlite3_create_function(D,X,N,E,P,F,S,L)] williamr@4: ** or [sqlite3_create_function16(D,X,N,E,P,F,S,L)] call that williamr@4: ** registered the SQL function associated with [sqlite3_context] C. williamr@4: */ williamr@4: IMPORT_C sqlite3 *sqlite3_context_db_handle(sqlite3_context*); williamr@4: williamr@4: /* williamr@4: ** CAPI3REF: Function Auxiliary Data {H16270} williamr@4: ** williamr@4: ** The following two functions may be used by scalar SQL functions to williamr@4: ** associate metadata with argument values. If the same value is passed to williamr@4: ** multiple invocations of the same SQL function during query execution, under williamr@4: ** some circumstances the associated metadata may be preserved. This may williamr@4: ** be used, for example, to add a regular-expression matching scalar williamr@4: ** function. The compiled version of the regular expression is stored as williamr@4: ** metadata associated with the SQL value passed as the regular expression williamr@4: ** pattern. The compiled regular expression can be reused on multiple williamr@4: ** invocations of the same function so that the original pattern string williamr@4: ** does not need to be recompiled on each invocation. williamr@4: ** williamr@4: ** The sqlite3_get_auxdata() interface returns a pointer to the metadata williamr@4: ** associated by the sqlite3_set_auxdata() function with the Nth argument williamr@4: ** value to the application-defined function. If no metadata has been ever williamr@4: ** been set for the Nth argument of the function, or if the corresponding williamr@4: ** function parameter has changed since the meta-data was set, williamr@4: ** then sqlite3_get_auxdata() returns a NULL pointer. williamr@4: ** williamr@4: ** The sqlite3_set_auxdata() interface saves the metadata williamr@4: ** pointed to by its 3rd parameter as the metadata for the N-th williamr@4: ** argument of the application-defined function. Subsequent williamr@4: ** calls to sqlite3_get_auxdata() might return this data, if it has williamr@4: ** not been destroyed. williamr@4: ** If it is not NULL, SQLite will invoke the destructor williamr@4: ** function given by the 4th parameter to sqlite3_set_auxdata() on williamr@4: ** the metadata when the corresponding function parameter changes williamr@4: ** or when the SQL statement completes, whichever comes first. williamr@4: ** williamr@4: ** SQLite is free to call the destructor and drop metadata on any williamr@4: ** parameter of any function at any time. The only guarantee is that williamr@4: ** the destructor will be called before the metadata is dropped. williamr@4: ** williamr@4: ** In practice, metadata is preserved between function calls for williamr@4: ** expressions that are constant at compile time. This includes literal williamr@4: ** values and SQL variables. williamr@4: ** williamr@4: ** These routines must be called from the same thread in which williamr@4: ** the SQL function is running. williamr@4: ** williamr@4: ** INVARIANTS: williamr@4: ** williamr@4: ** {H16272} The [sqlite3_get_auxdata(C,N)] interface returns a pointer williamr@4: ** to metadata associated with the Nth parameter of the SQL function williamr@4: ** whose context is C, or NULL if there is no metadata associated williamr@4: ** with that parameter. williamr@4: ** williamr@4: ** {H16274} The [sqlite3_set_auxdata(C,N,P,D)] interface assigns a metadata williamr@4: ** pointer P to the Nth parameter of the SQL function with context C. williamr@4: ** williamr@4: ** {H16276} SQLite will invoke the destructor D with a single argument williamr@4: ** which is the metadata pointer P following a call to williamr@4: ** [sqlite3_set_auxdata(C,N,P,D)] when SQLite ceases to hold williamr@4: ** the metadata. williamr@4: ** williamr@4: ** {H16277} SQLite ceases to hold metadata for an SQL function parameter williamr@4: ** when the value of that parameter changes. williamr@4: ** williamr@4: ** {H16278} When [sqlite3_set_auxdata(C,N,P,D)] is invoked, the destructor williamr@4: ** is called for any prior metadata associated with the same function williamr@4: ** context C and parameter N. williamr@4: ** williamr@4: ** {H16279} SQLite will call destructors for any metadata it is holding williamr@4: ** in a particular [prepared statement] S when either williamr@4: ** [sqlite3_reset(S)] or [sqlite3_finalize(S)] is called. williamr@4: */ williamr@4: IMPORT_C void *sqlite3_get_auxdata(sqlite3_context*, int N); williamr@4: IMPORT_C void sqlite3_set_auxdata(sqlite3_context*, int N, void*, void (*)(void*)); williamr@4: williamr@4: williamr@4: /* williamr@4: ** CAPI3REF: Constants Defining Special Destructor Behavior {H10280} williamr@4: ** williamr@4: ** These are special values for the destructor that is passed in as the williamr@4: ** final argument to routines like [sqlite3_result_blob()]. If the destructor williamr@4: ** argument is SQLITE_STATIC, it means that the content pointer is constant williamr@4: ** and will never change. It does not need to be destroyed. The williamr@4: ** SQLITE_TRANSIENT value means that the content will likely change in williamr@4: ** the near future and that SQLite should make its own private copy of williamr@4: ** the content before returning. williamr@4: ** williamr@4: ** The typedef is necessary to work around problems in certain williamr@4: ** C++ compilers. See ticket #2191. williamr@4: */ williamr@4: typedef void (*sqlite3_destructor_type)(void*); williamr@4: #define SQLITE_STATIC ((sqlite3_destructor_type)0) williamr@4: #define SQLITE_TRANSIENT ((sqlite3_destructor_type)-1) williamr@4: williamr@4: /* williamr@4: ** CAPI3REF: Setting The Result Of An SQL Function {H16400} williamr@4: ** williamr@4: ** These routines are used by the xFunc or xFinal callbacks that williamr@4: ** implement SQL functions and aggregates. See williamr@4: ** [sqlite3_create_function()] and [sqlite3_create_function16()] williamr@4: ** for additional information. williamr@4: ** williamr@4: ** These functions work very much like the [parameter binding] family of williamr@4: ** functions used to bind values to host parameters in prepared statements. williamr@4: ** Refer to the [SQL parameter] documentation for additional information. williamr@4: ** williamr@4: ** The sqlite3_result_blob() interface sets the result from williamr@4: ** an application-defined function to be the BLOB whose content is pointed williamr@4: ** to by the second parameter and which is N bytes long where N is the williamr@4: ** third parameter. williamr@4: ** williamr@4: ** The sqlite3_result_zeroblob() interfaces set the result of williamr@4: ** the application-defined function to be a BLOB containing all zero williamr@4: ** bytes and N bytes in size, where N is the value of the 2nd parameter. williamr@4: ** williamr@4: ** The sqlite3_result_double() interface sets the result from williamr@4: ** an application-defined function to be a floating point value specified williamr@4: ** by its 2nd argument. williamr@4: ** williamr@4: ** The sqlite3_result_error() and sqlite3_result_error16() functions williamr@4: ** cause the implemented SQL function to throw an exception. williamr@4: ** SQLite uses the string pointed to by the williamr@4: ** 2nd parameter of sqlite3_result_error() or sqlite3_result_error16() williamr@4: ** as the text of an error message. SQLite interprets the error williamr@4: ** message string from sqlite3_result_error() as UTF-8. SQLite williamr@4: ** interprets the string from sqlite3_result_error16() as UTF-16 in native williamr@4: ** byte order. If the third parameter to sqlite3_result_error() williamr@4: ** or sqlite3_result_error16() is negative then SQLite takes as the error williamr@4: ** message all text up through the first zero character. williamr@4: ** If the third parameter to sqlite3_result_error() or williamr@4: ** sqlite3_result_error16() is non-negative then SQLite takes that many williamr@4: ** bytes (not characters) from the 2nd parameter as the error message. williamr@4: ** The sqlite3_result_error() and sqlite3_result_error16() williamr@4: ** routines make a private copy of the error message text before williamr@4: ** they return. Hence, the calling function can deallocate or williamr@4: ** modify the text after they return without harm. williamr@4: ** The sqlite3_result_error_code() function changes the error code williamr@4: ** returned by SQLite as a result of an error in a function. By default, williamr@4: ** the error code is SQLITE_ERROR. A subsequent call to sqlite3_result_error() williamr@4: ** or sqlite3_result_error16() resets the error code to SQLITE_ERROR. williamr@4: ** williamr@4: ** The sqlite3_result_toobig() interface causes SQLite to throw an error williamr@4: ** indicating that a string or BLOB is to long to represent. williamr@4: ** williamr@4: ** The sqlite3_result_nomem() interface causes SQLite to throw an error williamr@4: ** indicating that a memory allocation failed. williamr@4: ** williamr@4: ** The sqlite3_result_int() interface sets the return value williamr@4: ** of the application-defined function to be the 32-bit signed integer williamr@4: ** value given in the 2nd argument. williamr@4: ** The sqlite3_result_int64() interface sets the return value williamr@4: ** of the application-defined function to be the 64-bit signed integer williamr@4: ** value given in the 2nd argument. williamr@4: ** williamr@4: ** The sqlite3_result_null() interface sets the return value williamr@4: ** of the application-defined function to be NULL. williamr@4: ** williamr@4: ** The sqlite3_result_text(), sqlite3_result_text16(), williamr@4: ** sqlite3_result_text16le(), and sqlite3_result_text16be() interfaces williamr@4: ** set the return value of the application-defined function to be williamr@4: ** a text string which is represented as UTF-8, UTF-16 native byte order, williamr@4: ** UTF-16 little endian, or UTF-16 big endian, respectively. williamr@4: ** SQLite takes the text result from the application from williamr@4: ** the 2nd parameter of the sqlite3_result_text* interfaces. williamr@4: ** If the 3rd parameter to the sqlite3_result_text* interfaces williamr@4: ** is negative, then SQLite takes result text from the 2nd parameter williamr@4: ** through the first zero character. williamr@4: ** If the 3rd parameter to the sqlite3_result_text* interfaces williamr@4: ** is non-negative, then as many bytes (not characters) of the text williamr@4: ** pointed to by the 2nd parameter are taken as the application-defined williamr@4: ** function result. williamr@4: ** If the 4th parameter to the sqlite3_result_text* interfaces williamr@4: ** or sqlite3_result_blob is a non-NULL pointer, then SQLite calls that williamr@4: ** function as the destructor on the text or BLOB result when it has williamr@4: ** finished using that result. williamr@4: ** If the 4th parameter to the sqlite3_result_text* interfaces or williamr@4: ** sqlite3_result_blob is the special constant SQLITE_STATIC, then SQLite williamr@4: ** assumes that the text or BLOB result is in constant space and does not williamr@4: ** copy the it or call a destructor when it has finished using that result. williamr@4: ** If the 4th parameter to the sqlite3_result_text* interfaces williamr@4: ** or sqlite3_result_blob is the special constant SQLITE_TRANSIENT williamr@4: ** then SQLite makes a copy of the result into space obtained from williamr@4: ** from [sqlite3_malloc()] before it returns. williamr@4: ** williamr@4: ** The sqlite3_result_value() interface sets the result of williamr@4: ** the application-defined function to be a copy the williamr@4: ** [unprotected sqlite3_value] object specified by the 2nd parameter. The williamr@4: ** sqlite3_result_value() interface makes a copy of the [sqlite3_value] williamr@4: ** so that the [sqlite3_value] specified in the parameter may change or williamr@4: ** be deallocated after sqlite3_result_value() returns without harm. williamr@4: ** A [protected sqlite3_value] object may always be used where an williamr@4: ** [unprotected sqlite3_value] object is required, so either williamr@4: ** kind of [sqlite3_value] object can be used with this interface. williamr@4: ** williamr@4: ** If these routines are called from within the different thread williamr@4: ** than the one containing the application-defined function that received williamr@4: ** the [sqlite3_context] pointer, the results are undefined. williamr@4: ** williamr@4: ** INVARIANTS: williamr@4: ** williamr@4: ** {H16403} The default return value from any SQL function is NULL. williamr@4: ** williamr@4: ** {H16406} The [sqlite3_result_blob(C,V,N,D)] interface changes the williamr@4: ** return value of function C to be a BLOB that is N bytes williamr@4: ** in length and with content pointed to by V. williamr@4: ** williamr@4: ** {H16409} The [sqlite3_result_double(C,V)] interface changes the williamr@4: ** return value of function C to be the floating point value V. williamr@4: ** williamr@4: ** {H16412} The [sqlite3_result_error(C,V,N)] interface changes the return williamr@4: ** value of function C to be an exception with error code williamr@4: ** [SQLITE_ERROR] and a UTF-8 error message copied from V up to the williamr@4: ** first zero byte or until N bytes are read if N is positive. williamr@4: ** williamr@4: ** {H16415} The [sqlite3_result_error16(C,V,N)] interface changes the return williamr@4: ** value of function C to be an exception with error code williamr@4: ** [SQLITE_ERROR] and a UTF-16 native byte order error message williamr@4: ** copied from V up to the first zero terminator or until N bytes williamr@4: ** are read if N is positive. williamr@4: ** williamr@4: ** {H16418} The [sqlite3_result_error_toobig(C)] interface changes the return williamr@4: ** value of the function C to be an exception with error code williamr@4: ** [SQLITE_TOOBIG] and an appropriate error message. williamr@4: ** williamr@4: ** {H16421} The [sqlite3_result_error_nomem(C)] interface changes the return williamr@4: ** value of the function C to be an exception with error code williamr@4: ** [SQLITE_NOMEM] and an appropriate error message. williamr@4: ** williamr@4: ** {H16424} The [sqlite3_result_error_code(C,E)] interface changes the return williamr@4: ** value of the function C to be an exception with error code E. williamr@4: ** The error message text is unchanged. williamr@4: ** williamr@4: ** {H16427} The [sqlite3_result_int(C,V)] interface changes the williamr@4: ** return value of function C to be the 32-bit integer value V. williamr@4: ** williamr@4: ** {H16430} The [sqlite3_result_int64(C,V)] interface changes the williamr@4: ** return value of function C to be the 64-bit integer value V. williamr@4: ** williamr@4: ** {H16433} The [sqlite3_result_null(C)] interface changes the williamr@4: ** return value of function C to be NULL. williamr@4: ** williamr@4: ** {H16436} The [sqlite3_result_text(C,V,N,D)] interface changes the williamr@4: ** return value of function C to be the UTF-8 string williamr@4: ** V up to the first zero if N is negative williamr@4: ** or the first N bytes of V if N is non-negative. williamr@4: ** williamr@4: ** {H16439} The [sqlite3_result_text16(C,V,N,D)] interface changes the williamr@4: ** return value of function C to be the UTF-16 native byte order williamr@4: ** string V up to the first zero if N is negative williamr@4: ** or the first N bytes of V if N is non-negative. williamr@4: ** williamr@4: ** {H16442} The [sqlite3_result_text16be(C,V,N,D)] interface changes the williamr@4: ** return value of function C to be the UTF-16 big-endian williamr@4: ** string V up to the first zero if N is negative williamr@4: ** or the first N bytes or V if N is non-negative. williamr@4: ** williamr@4: ** {H16445} The [sqlite3_result_text16le(C,V,N,D)] interface changes the williamr@4: ** return value of function C to be the UTF-16 little-endian williamr@4: ** string V up to the first zero if N is negative williamr@4: ** or the first N bytes of V if N is non-negative. williamr@4: ** williamr@4: ** {H16448} The [sqlite3_result_value(C,V)] interface changes the williamr@4: ** return value of function C to be the [unprotected sqlite3_value] williamr@4: ** object V. williamr@4: ** williamr@4: ** {H16451} The [sqlite3_result_zeroblob(C,N)] interface changes the williamr@4: ** return value of function C to be an N-byte BLOB of all zeros. williamr@4: ** williamr@4: ** {H16454} The [sqlite3_result_error()] and [sqlite3_result_error16()] williamr@4: ** interfaces make a copy of their error message strings before williamr@4: ** returning. williamr@4: ** williamr@4: ** {H16457} If the D destructor parameter to [sqlite3_result_blob(C,V,N,D)], williamr@4: ** [sqlite3_result_text(C,V,N,D)], [sqlite3_result_text16(C,V,N,D)], williamr@4: ** [sqlite3_result_text16be(C,V,N,D)], or williamr@4: ** [sqlite3_result_text16le(C,V,N,D)] is the constant [SQLITE_STATIC] williamr@4: ** then no destructor is ever called on the pointer V and SQLite williamr@4: ** assumes that V is immutable. williamr@4: ** williamr@4: ** {H16460} If the D destructor parameter to [sqlite3_result_blob(C,V,N,D)], williamr@4: ** [sqlite3_result_text(C,V,N,D)], [sqlite3_result_text16(C,V,N,D)], williamr@4: ** [sqlite3_result_text16be(C,V,N,D)], or williamr@4: ** [sqlite3_result_text16le(C,V,N,D)] is the constant williamr@4: ** [SQLITE_TRANSIENT] then the interfaces makes a copy of the williamr@4: ** content of V and retains the copy. williamr@4: ** williamr@4: ** {H16463} If the D destructor parameter to [sqlite3_result_blob(C,V,N,D)], williamr@4: ** [sqlite3_result_text(C,V,N,D)], [sqlite3_result_text16(C,V,N,D)], williamr@4: ** [sqlite3_result_text16be(C,V,N,D)], or williamr@4: ** [sqlite3_result_text16le(C,V,N,D)] is some value other than williamr@4: ** the constants [SQLITE_STATIC] and [SQLITE_TRANSIENT] then williamr@4: ** SQLite will invoke the destructor D with V as its only argument williamr@4: ** when it has finished with the V value. williamr@4: */ williamr@4: IMPORT_C void sqlite3_result_blob(sqlite3_context*, const void*, int, void(*)(void*)); williamr@4: IMPORT_C void sqlite3_result_double(sqlite3_context*, double); williamr@4: IMPORT_C void sqlite3_result_error(sqlite3_context*, const char*, int); williamr@4: IMPORT_C void sqlite3_result_error16(sqlite3_context*, const void*, int); williamr@4: IMPORT_C void sqlite3_result_error_toobig(sqlite3_context*); williamr@4: IMPORT_C void sqlite3_result_error_nomem(sqlite3_context*); williamr@4: IMPORT_C void sqlite3_result_error_code(sqlite3_context*, int); williamr@4: IMPORT_C void sqlite3_result_int(sqlite3_context*, int); williamr@4: IMPORT_C void sqlite3_result_int64(sqlite3_context*, sqlite3_int64); williamr@4: IMPORT_C void sqlite3_result_null(sqlite3_context*); williamr@4: IMPORT_C void sqlite3_result_text(sqlite3_context*, const char*, int, void(*)(void*)); williamr@4: IMPORT_C void sqlite3_result_text16(sqlite3_context*, const void*, int, void(*)(void*)); williamr@4: IMPORT_C void sqlite3_result_text16le(sqlite3_context*, const void*, int,void(*)(void*)); williamr@4: IMPORT_C void sqlite3_result_text16be(sqlite3_context*, const void*, int,void(*)(void*)); williamr@4: IMPORT_C void sqlite3_result_value(sqlite3_context*, sqlite3_value*); williamr@4: IMPORT_C void sqlite3_result_zeroblob(sqlite3_context*, int n); williamr@4: williamr@4: /* williamr@4: ** CAPI3REF: Define New Collating Sequences {H16600} williamr@4: ** williamr@4: ** These functions are used to add new collation sequences to the williamr@4: ** [database connection] specified as the first argument. williamr@4: ** williamr@4: ** The name of the new collation sequence is specified as a UTF-8 string williamr@4: ** for sqlite3_create_collation() and sqlite3_create_collation_v2() williamr@4: ** and a UTF-16 string for sqlite3_create_collation16(). In all cases williamr@4: ** the name is passed as the second function argument. williamr@4: ** williamr@4: ** The third argument may be one of the constants [SQLITE_UTF8], williamr@4: ** [SQLITE_UTF16LE] or [SQLITE_UTF16BE], indicating that the user-supplied williamr@4: ** routine expects to be passed pointers to strings encoded using UTF-8, williamr@4: ** UTF-16 little-endian, or UTF-16 big-endian, respectively. The williamr@4: ** third argument might also be [SQLITE_UTF16_ALIGNED] to indicate that williamr@4: ** the routine expects pointers to 16-bit word aligned strings williamr@4: ** of UTF-16 in the native byte order of the host computer. williamr@4: ** williamr@4: ** A pointer to the user supplied routine must be passed as the fifth williamr@4: ** argument. If it is NULL, this is the same as deleting the collation williamr@4: ** sequence (so that SQLite cannot call it anymore). williamr@4: ** Each time the application supplied function is invoked, it is passed williamr@4: ** as its first parameter a copy of the void* passed as the fourth argument williamr@4: ** to sqlite3_create_collation() or sqlite3_create_collation16(). williamr@4: ** williamr@4: ** The remaining arguments to the application-supplied routine are two strings, williamr@4: ** each represented by a (length, data) pair and encoded in the encoding williamr@4: ** that was passed as the third argument when the collation sequence was williamr@4: ** registered. {END} The application defined collation routine should williamr@4: ** return negative, zero or positive if the first string is less than, williamr@4: ** equal to, or greater than the second string. i.e. (STRING1 - STRING2). williamr@4: ** williamr@4: ** The sqlite3_create_collation_v2() works like sqlite3_create_collation() williamr@4: ** except that it takes an extra argument which is a destructor for williamr@4: ** the collation. The destructor is called when the collation is williamr@4: ** destroyed and is passed a copy of the fourth parameter void* pointer williamr@4: ** of the sqlite3_create_collation_v2(). williamr@4: ** Collations are destroyed when they are overridden by later calls to the williamr@4: ** collation creation functions or when the [database connection] is closed williamr@4: ** using [sqlite3_close()]. williamr@4: ** williamr@4: ** INVARIANTS: williamr@4: ** williamr@4: ** {H16603} A successful call to the williamr@4: ** [sqlite3_create_collation_v2(B,X,E,P,F,D)] interface williamr@4: ** registers function F as the comparison function used to williamr@4: ** implement collation X on the [database connection] B for williamr@4: ** databases having encoding E. williamr@4: ** williamr@4: ** {H16604} SQLite understands the X parameter to williamr@4: ** [sqlite3_create_collation_v2(B,X,E,P,F,D)] as a zero-terminated williamr@4: ** UTF-8 string in which case is ignored for ASCII characters and williamr@4: ** is significant for non-ASCII characters. williamr@4: ** williamr@4: ** {H16606} Successive calls to [sqlite3_create_collation_v2(B,X,E,P,F,D)] williamr@4: ** with the same values for B, X, and E, override prior values williamr@4: ** of P, F, and D. williamr@4: ** williamr@4: ** {H16609} If the destructor D in [sqlite3_create_collation_v2(B,X,E,P,F,D)] williamr@4: ** is not NULL then it is called with argument P when the williamr@4: ** collating function is dropped by SQLite. williamr@4: ** williamr@4: ** {H16612} A collating function is dropped when it is overloaded. williamr@4: ** williamr@4: ** {H16615} A collating function is dropped when the database connection williamr@4: ** is closed using [sqlite3_close()]. williamr@4: ** williamr@4: ** {H16618} The pointer P in [sqlite3_create_collation_v2(B,X,E,P,F,D)] williamr@4: ** is passed through as the first parameter to the comparison williamr@4: ** function F for all subsequent invocations of F. williamr@4: ** williamr@4: ** {H16621} A call to [sqlite3_create_collation(B,X,E,P,F)] is exactly williamr@4: ** the same as a call to [sqlite3_create_collation_v2()] with williamr@4: ** the same parameters and a NULL destructor. williamr@4: ** williamr@4: ** {H16624} Following a [sqlite3_create_collation_v2(B,X,E,P,F,D)], williamr@4: ** SQLite uses the comparison function F for all text comparison williamr@4: ** operations on the [database connection] B on text values that williamr@4: ** use the collating sequence named X. williamr@4: ** williamr@4: ** {H16627} The [sqlite3_create_collation16(B,X,E,P,F)] works the same williamr@4: ** as [sqlite3_create_collation(B,X,E,P,F)] except that the williamr@4: ** collation name X is understood as UTF-16 in native byte order williamr@4: ** instead of UTF-8. williamr@4: ** williamr@4: ** {H16630} When multiple comparison functions are available for the same williamr@4: ** collating sequence, SQLite chooses the one whose text encoding williamr@4: ** requires the least amount of conversion from the default williamr@4: ** text encoding of the database. williamr@4: */ williamr@4: IMPORT_C int sqlite3_create_collation( williamr@4: sqlite3*, williamr@4: const char *zName, williamr@4: int eTextRep, williamr@4: void*, williamr@4: int(*xCompare)(void*,int,const void*,int,const void*) williamr@4: ); williamr@4: IMPORT_C int sqlite3_create_collation_v2( williamr@4: sqlite3*, williamr@4: const char *zName, williamr@4: int eTextRep, williamr@4: void*, williamr@4: int(*xCompare)(void*,int,const void*,int,const void*), williamr@4: void(*xDestroy)(void*) williamr@4: ); williamr@4: IMPORT_C int sqlite3_create_collation16( williamr@4: sqlite3*, williamr@4: const void *zName, williamr@4: int eTextRep, williamr@4: void*, williamr@4: int(*xCompare)(void*,int,const void*,int,const void*) williamr@4: ); williamr@4: williamr@4: /* williamr@4: ** CAPI3REF: Collation Needed Callbacks {H16700} williamr@4: ** williamr@4: ** To avoid having to register all collation sequences before a database williamr@4: ** can be used, a single callback function may be registered with the williamr@4: ** [database connection] to be called whenever an undefined collation williamr@4: ** sequence is required. williamr@4: ** williamr@4: ** If the function is registered using the sqlite3_collation_needed() API, williamr@4: ** then it is passed the names of undefined collation sequences as strings williamr@4: ** encoded in UTF-8. {H16703} If sqlite3_collation_needed16() is used, williamr@4: ** the names are passed as UTF-16 in machine native byte order. williamr@4: ** A call to either function replaces any existing callback. williamr@4: ** williamr@4: ** When the callback is invoked, the first argument passed is a copy williamr@4: ** of the second argument to sqlite3_collation_needed() or williamr@4: ** sqlite3_collation_needed16(). The second argument is the database williamr@4: ** connection. The third argument is one of [SQLITE_UTF8], [SQLITE_UTF16BE], williamr@4: ** or [SQLITE_UTF16LE], indicating the most desirable form of the collation williamr@4: ** sequence function required. The fourth parameter is the name of the williamr@4: ** required collation sequence. williamr@4: ** williamr@4: ** The callback function should register the desired collation using williamr@4: ** [sqlite3_create_collation()], [sqlite3_create_collation16()], or williamr@4: ** [sqlite3_create_collation_v2()]. williamr@4: ** williamr@4: ** INVARIANTS: williamr@4: ** williamr@4: ** {H16702} A successful call to [sqlite3_collation_needed(D,P,F)] williamr@4: ** or [sqlite3_collation_needed16(D,P,F)] causes williamr@4: ** the [database connection] D to invoke callback F with first williamr@4: ** parameter P whenever it needs a comparison function for a williamr@4: ** collating sequence that it does not know about. williamr@4: ** williamr@4: ** {H16704} Each successful call to [sqlite3_collation_needed()] or williamr@4: ** [sqlite3_collation_needed16()] overrides the callback registered williamr@4: ** on the same [database connection] by prior calls to either williamr@4: ** interface. williamr@4: ** williamr@4: ** {H16706} The name of the requested collating function passed in the williamr@4: ** 4th parameter to the callback is in UTF-8 if the callback williamr@4: ** was registered using [sqlite3_collation_needed()] and williamr@4: ** is in UTF-16 native byte order if the callback was williamr@4: ** registered using [sqlite3_collation_needed16()]. williamr@4: */ williamr@4: IMPORT_C int sqlite3_collation_needed( williamr@4: sqlite3*, williamr@4: void*, williamr@4: void(*)(void*,sqlite3*,int eTextRep,const char*) williamr@4: ); williamr@4: IMPORT_C int sqlite3_collation_needed16( williamr@4: sqlite3*, williamr@4: void*, williamr@4: void(*)(void*,sqlite3*,int eTextRep,const void*) williamr@4: ); williamr@4: williamr@4: /* williamr@4: ** Specify the key for an encrypted database. This routine should be williamr@4: ** called right after sqlite3_open(). williamr@4: ** williamr@4: ** The code to implement this API is not available in the public release williamr@4: ** of SQLite. williamr@4: */ williamr@4: IMPORT_C int sqlite3_key( williamr@4: sqlite3 *db, /* Database to be rekeyed */ williamr@4: const void *pKey, int nKey /* The key */ williamr@4: ); williamr@4: williamr@4: /* williamr@4: ** Change the key on an open database. If the current database is not williamr@4: ** encrypted, this routine will encrypt it. If pNew==0 or nNew==0, the williamr@4: ** database is decrypted. williamr@4: ** williamr@4: ** The code to implement this API is not available in the public release williamr@4: ** of SQLite. williamr@4: */ williamr@4: IMPORT_C int sqlite3_rekey( williamr@4: sqlite3 *db, /* Database to be rekeyed */ williamr@4: const void *pKey, int nKey /* The new key */ williamr@4: ); williamr@4: williamr@4: /* williamr@4: ** CAPI3REF: Suspend Execution For A Short Time {H10530} williamr@4: ** williamr@4: ** The sqlite3_sleep() function causes the current thread to suspend execution williamr@4: ** for at least a number of milliseconds specified in its parameter. williamr@4: ** williamr@4: ** If the operating system does not support sleep requests with williamr@4: ** millisecond time resolution, then the time will be rounded up to williamr@4: ** the nearest second. The number of milliseconds of sleep actually williamr@4: ** requested from the operating system is returned. williamr@4: ** williamr@4: ** SQLite implements this interface by calling the xSleep() williamr@4: ** method of the default [sqlite3_vfs] object. williamr@4: ** williamr@4: ** INVARIANTS: williamr@4: ** williamr@4: ** {H10533} The [sqlite3_sleep(M)] interface invokes the xSleep williamr@4: ** method of the default [sqlite3_vfs|VFS] in order to williamr@4: ** suspend execution of the current thread for at least williamr@4: ** M milliseconds. williamr@4: ** williamr@4: ** {H10536} The [sqlite3_sleep(M)] interface returns the number of williamr@4: ** milliseconds of sleep actually requested of the operating williamr@4: ** system, which might be larger than the parameter M. williamr@4: */ williamr@4: IMPORT_C int sqlite3_sleep(int); williamr@4: williamr@4: /* williamr@4: ** CAPI3REF: Name Of The Folder Holding Temporary Files {H10310} williamr@4: ** williamr@4: ** If this global variable is made to point to a string which is williamr@4: ** the name of a folder (a.k.a. directory), then all temporary files williamr@4: ** created by SQLite will be placed in that directory. If this variable williamr@4: ** is a NULL pointer, then SQLite performs a search for an appropriate williamr@4: ** temporary file directory. williamr@4: ** williamr@4: ** It is not safe to modify this variable once a [database connection] williamr@4: ** has been opened. It is intended that this variable be set once williamr@4: ** as part of process initialization and before any SQLite interface williamr@4: ** routines have been call and remain unchanged thereafter. williamr@4: */ williamr@4: SQLITE_EXTERN char *sqlite3_temp_directory; williamr@4: williamr@4: /* williamr@4: ** CAPI3REF: Test For Auto-Commit Mode {H12930} williamr@4: ** KEYWORDS: {autocommit mode} williamr@4: ** williamr@4: ** The sqlite3_get_autocommit() interface returns non-zero or williamr@4: ** zero if the given database connection is or is not in autocommit mode, williamr@4: ** respectively. Autocommit mode is on by default. williamr@4: ** Autocommit mode is disabled by a [BEGIN] statement. williamr@4: ** Autocommit mode is re-enabled by a [COMMIT] or [ROLLBACK]. williamr@4: ** williamr@4: ** If certain kinds of errors occur on a statement within a multi-statement williamr@4: ** transaction (errors including [SQLITE_FULL], [SQLITE_IOERR], williamr@4: ** [SQLITE_NOMEM], [SQLITE_BUSY], and [SQLITE_INTERRUPT]) then the williamr@4: ** transaction might be rolled back automatically. The only way to williamr@4: ** find out whether SQLite automatically rolled back the transaction after williamr@4: ** an error is to use this function. williamr@4: ** williamr@4: ** INVARIANTS: williamr@4: ** williamr@4: ** {H12931} The [sqlite3_get_autocommit(D)] interface returns non-zero or williamr@4: ** zero if the [database connection] D is or is not in autocommit williamr@4: ** mode, respectively. williamr@4: ** williamr@4: ** {H12932} Autocommit mode is on by default. williamr@4: ** williamr@4: ** {H12933} Autocommit mode is disabled by a successful [BEGIN] statement. williamr@4: ** williamr@4: ** {H12934} Autocommit mode is enabled by a successful [COMMIT] or [ROLLBACK] williamr@4: ** statement. williamr@4: ** williamr@4: ** ASSUMPTIONS: williamr@4: ** williamr@4: ** {A12936} If another thread changes the autocommit status of the database williamr@4: ** connection while this routine is running, then the return value williamr@4: ** is undefined. williamr@4: */ williamr@4: IMPORT_C int sqlite3_get_autocommit(sqlite3*); williamr@4: williamr@4: /* williamr@4: ** CAPI3REF: Find The Database Handle Of A Prepared Statement {H13120} williamr@4: ** williamr@4: ** The sqlite3_db_handle interface returns the [database connection] handle williamr@4: ** to which a [prepared statement] belongs. The database handle returned by williamr@4: ** sqlite3_db_handle is the same database handle that was the first argument williamr@4: ** to the [sqlite3_prepare_v2()] call (or its variants) that was used to williamr@4: ** create the statement in the first place. williamr@4: ** williamr@4: ** INVARIANTS: williamr@4: ** williamr@4: ** {H13123} The [sqlite3_db_handle(S)] interface returns a pointer williamr@4: ** to the [database connection] associated with the williamr@4: ** [prepared statement] S. williamr@4: */ williamr@4: IMPORT_C sqlite3 *sqlite3_db_handle(sqlite3_stmt*); williamr@4: williamr@4: /* williamr@4: ** CAPI3REF: Find the next prepared statement {H13140} williamr@4: ** williamr@4: ** This interface returns a pointer to the next [prepared statement] after williamr@4: ** pStmt associated with the [database connection] pDb. If pStmt is NULL williamr@4: ** then this interface returns a pointer to the first prepared statement williamr@4: ** associated with the database connection pDb. If no prepared statement williamr@4: ** satisfies the conditions of this routine, it returns NULL. williamr@4: ** williamr@4: ** INVARIANTS: williamr@4: ** williamr@4: ** {H13143} If D is a [database connection] that holds one or more williamr@4: ** unfinalized [prepared statements] and S is a NULL pointer, williamr@4: ** then [sqlite3_next_stmt(D, S)] routine shall return a pointer williamr@4: ** to one of the prepared statements associated with D. williamr@4: ** williamr@4: ** {H13146} If D is a [database connection] that holds no unfinalized williamr@4: ** [prepared statements] and S is a NULL pointer, then williamr@4: ** [sqlite3_next_stmt(D, S)] routine shall return a NULL pointer. williamr@4: ** williamr@4: ** {H13149} If S is a [prepared statement] in the [database connection] D williamr@4: ** and S is not the last prepared statement in D, then williamr@4: ** [sqlite3_next_stmt(D, S)] routine shall return a pointer williamr@4: ** to the next prepared statement in D after S. williamr@4: ** williamr@4: ** {H13152} If S is the last [prepared statement] in the williamr@4: ** [database connection] D then the [sqlite3_next_stmt(D, S)] williamr@4: ** routine shall return a NULL pointer. williamr@4: ** williamr@4: ** ASSUMPTIONS: williamr@4: ** williamr@4: ** {A13154} The [database connection] pointer D in a call to williamr@4: ** [sqlite3_next_stmt(D,S)] must refer to an open database williamr@4: ** connection and in particular must not be a NULL pointer. williamr@4: */ williamr@4: IMPORT_C sqlite3_stmt *sqlite3_next_stmt(sqlite3 *pDb, sqlite3_stmt *pStmt); williamr@4: williamr@4: /* williamr@4: ** CAPI3REF: Commit And Rollback Notification Callbacks {H12950} williamr@4: ** williamr@4: ** The sqlite3_commit_hook() interface registers a callback williamr@4: ** function to be invoked whenever a transaction is committed. williamr@4: ** Any callback set by a previous call to sqlite3_commit_hook() williamr@4: ** for the same database connection is overridden. williamr@4: ** The sqlite3_rollback_hook() interface registers a callback williamr@4: ** function to be invoked whenever a transaction is committed. williamr@4: ** Any callback set by a previous call to sqlite3_commit_hook() williamr@4: ** for the same database connection is overridden. williamr@4: ** The pArg argument is passed through to the callback. williamr@4: ** If the callback on a commit hook function returns non-zero, williamr@4: ** then the commit is converted into a rollback. williamr@4: ** williamr@4: ** If another function was previously registered, its williamr@4: ** pArg value is returned. Otherwise NULL is returned. williamr@4: ** williamr@4: ** The callback implementation must not do anything that will modify williamr@4: ** the database connection that invoked the callback. Any actions williamr@4: ** to modify the database connection must be deferred until after the williamr@4: ** completion of the [sqlite3_step()] call that triggered the commit williamr@4: ** or rollback hook in the first place. williamr@4: ** Note that [sqlite3_prepare_v2()] and [sqlite3_step()] both modify their williamr@4: ** database connections for the meaning of "modify" in this paragraph. williamr@4: ** williamr@4: ** Registering a NULL function disables the callback. williamr@4: ** williamr@4: ** For the purposes of this API, a transaction is said to have been williamr@4: ** rolled back if an explicit "ROLLBACK" statement is executed, or williamr@4: ** an error or constraint causes an implicit rollback to occur. williamr@4: ** The rollback callback is not invoked if a transaction is williamr@4: ** automatically rolled back because the database connection is closed. williamr@4: ** The rollback callback is not invoked if a transaction is williamr@4: ** rolled back because a commit callback returned non-zero. williamr@4: ** Check on this williamr@4: ** williamr@4: ** INVARIANTS: williamr@4: ** williamr@4: ** {H12951} The [sqlite3_commit_hook(D,F,P)] interface registers the williamr@4: ** callback function F to be invoked with argument P whenever williamr@4: ** a transaction commits on the [database connection] D. williamr@4: ** williamr@4: ** {H12952} The [sqlite3_commit_hook(D,F,P)] interface returns the P argument williamr@4: ** from the previous call with the same [database connection] D, williamr@4: ** or NULL on the first call for a particular database connection D. williamr@4: ** williamr@4: ** {H12953} Each call to [sqlite3_commit_hook()] overwrites the callback williamr@4: ** registered by prior calls. williamr@4: ** williamr@4: ** {H12954} If the F argument to [sqlite3_commit_hook(D,F,P)] is NULL williamr@4: ** then the commit hook callback is canceled and no callback williamr@4: ** is invoked when a transaction commits. williamr@4: ** williamr@4: ** {H12955} If the commit callback returns non-zero then the commit is williamr@4: ** converted into a rollback. williamr@4: ** williamr@4: ** {H12961} The [sqlite3_rollback_hook(D,F,P)] interface registers the williamr@4: ** callback function F to be invoked with argument P whenever williamr@4: ** a transaction rolls back on the [database connection] D. williamr@4: ** williamr@4: ** {H12962} The [sqlite3_rollback_hook(D,F,P)] interface returns the P williamr@4: ** argument from the previous call with the same williamr@4: ** [database connection] D, or NULL on the first call williamr@4: ** for a particular database connection D. williamr@4: ** williamr@4: ** {H12963} Each call to [sqlite3_rollback_hook()] overwrites the callback williamr@4: ** registered by prior calls. williamr@4: ** williamr@4: ** {H12964} If the F argument to [sqlite3_rollback_hook(D,F,P)] is NULL williamr@4: ** then the rollback hook callback is canceled and no callback williamr@4: ** is invoked when a transaction rolls back. williamr@4: */ williamr@4: IMPORT_C void *sqlite3_commit_hook(sqlite3*, int(*)(void*), void*); williamr@4: IMPORT_C void *sqlite3_rollback_hook(sqlite3*, void(*)(void *), void*); williamr@4: williamr@4: /* williamr@4: ** CAPI3REF: Data Change Notification Callbacks {H12970} williamr@4: ** williamr@4: ** The sqlite3_update_hook() interface registers a callback function williamr@4: ** with the [database connection] identified by the first argument williamr@4: ** to be invoked whenever a row is updated, inserted or deleted. williamr@4: ** Any callback set by a previous call to this function williamr@4: ** for the same database connection is overridden. williamr@4: ** williamr@4: ** The second argument is a pointer to the function to invoke when a williamr@4: ** row is updated, inserted or deleted. williamr@4: ** The first argument to the callback is a copy of the third argument williamr@4: ** to sqlite3_update_hook(). williamr@4: ** The second callback argument is one of [SQLITE_INSERT], [SQLITE_DELETE], williamr@4: ** or [SQLITE_UPDATE], depending on the operation that caused the callback williamr@4: ** to be invoked. williamr@4: ** The third and fourth arguments to the callback contain pointers to the williamr@4: ** database and table name containing the affected row. williamr@4: ** The final callback parameter is the rowid of the row. In the case of williamr@4: ** an update, this is the rowid after the update takes place. williamr@4: ** williamr@4: ** The update hook is not invoked when internal system tables are williamr@4: ** modified (i.e. sqlite_master and sqlite_sequence). williamr@4: ** williamr@4: ** The update hook implementation must not do anything that will modify williamr@4: ** the database connection that invoked the update hook. Any actions williamr@4: ** to modify the database connection must be deferred until after the williamr@4: ** completion of the [sqlite3_step()] call that triggered the update hook. williamr@4: ** Note that [sqlite3_prepare_v2()] and [sqlite3_step()] both modify their williamr@4: ** database connections for the meaning of "modify" in this paragraph. williamr@4: ** williamr@4: ** If another function was previously registered, its pArg value williamr@4: ** is returned. Otherwise NULL is returned. williamr@4: ** williamr@4: ** INVARIANTS: williamr@4: ** williamr@4: ** {H12971} The [sqlite3_update_hook(D,F,P)] interface causes the callback williamr@4: ** function F to be invoked with first parameter P whenever williamr@4: ** a table row is modified, inserted, or deleted on williamr@4: ** the [database connection] D. williamr@4: ** williamr@4: ** {H12973} The [sqlite3_update_hook(D,F,P)] interface returns the value williamr@4: ** of P for the previous call on the same [database connection] D, williamr@4: ** or NULL for the first call. williamr@4: ** williamr@4: ** {H12975} If the update hook callback F in [sqlite3_update_hook(D,F,P)] williamr@4: ** is NULL then the no update callbacks are made. williamr@4: ** williamr@4: ** {H12977} Each call to [sqlite3_update_hook(D,F,P)] overrides prior calls williamr@4: ** to the same interface on the same [database connection] D. williamr@4: ** williamr@4: ** {H12979} The update hook callback is not invoked when internal system williamr@4: ** tables such as sqlite_master and sqlite_sequence are modified. williamr@4: ** williamr@4: ** {H12981} The second parameter to the update callback williamr@4: ** is one of [SQLITE_INSERT], [SQLITE_DELETE] or [SQLITE_UPDATE], williamr@4: ** depending on the operation that caused the callback to be invoked. williamr@4: ** williamr@4: ** {H12983} The third and fourth arguments to the callback contain pointers williamr@4: ** to zero-terminated UTF-8 strings which are the names of the williamr@4: ** database and table that is being updated. williamr@4: williamr@4: ** {H12985} The final callback parameter is the rowid of the row after williamr@4: ** the change occurs. williamr@4: */ williamr@4: IMPORT_C void *sqlite3_update_hook( williamr@4: sqlite3*, williamr@4: void(*)(void *,int ,char const *,char const *,sqlite3_int64), williamr@4: void* williamr@4: ); williamr@4: williamr@4: /* williamr@4: ** CAPI3REF: Enable Or Disable Shared Pager Cache {H10330} williamr@4: ** KEYWORDS: {shared cache} {shared cache mode} williamr@4: ** williamr@4: ** This routine enables or disables the sharing of the database cache williamr@4: ** and schema data structures between [database connection | connections] williamr@4: ** to the same database. Sharing is enabled if the argument is true williamr@4: ** and disabled if the argument is false. williamr@4: ** williamr@4: ** Cache sharing is enabled and disabled for an entire process. {END} williamr@4: ** This is a change as of SQLite version 3.5.0. In prior versions of SQLite, williamr@4: ** sharing was enabled or disabled for each thread separately. williamr@4: ** williamr@4: ** The cache sharing mode set by this interface effects all subsequent williamr@4: ** calls to [sqlite3_open()], [sqlite3_open_v2()], and [sqlite3_open16()]. williamr@4: ** Existing database connections continue use the sharing mode williamr@4: ** that was in effect at the time they were opened. williamr@4: ** williamr@4: ** Virtual tables cannot be used with a shared cache. When shared williamr@4: ** cache is enabled, the [sqlite3_create_module()] API used to register williamr@4: ** virtual tables will always return an error. williamr@4: ** williamr@4: ** This routine returns [SQLITE_OK] if shared cache was enabled or disabled williamr@4: ** successfully. An [error code] is returned otherwise. williamr@4: ** williamr@4: ** Shared cache is disabled by default. But this might change in williamr@4: ** future releases of SQLite. Applications that care about shared williamr@4: ** cache setting should set it explicitly. williamr@4: ** williamr@4: ** INVARIANTS: williamr@4: ** williamr@4: ** {H10331} A successful invocation of [sqlite3_enable_shared_cache(B)] williamr@4: ** will enable or disable shared cache mode for any subsequently williamr@4: ** created [database connection] in the same process. williamr@4: ** williamr@4: ** {H10336} When shared cache is enabled, the [sqlite3_create_module()] williamr@4: ** interface will always return an error. williamr@4: ** williamr@4: ** {H10337} The [sqlite3_enable_shared_cache(B)] interface returns williamr@4: ** [SQLITE_OK] if shared cache was enabled or disabled successfully. williamr@4: ** williamr@4: ** {H10339} Shared cache is disabled by default. williamr@4: */ williamr@4: IMPORT_C int sqlite3_enable_shared_cache(int); williamr@4: williamr@4: /* williamr@4: ** CAPI3REF: Attempt To Free Heap Memory {H17340} williamr@4: ** williamr@4: ** The sqlite3_release_memory() interface attempts to free N bytes williamr@4: ** of heap memory by deallocating non-essential memory allocations williamr@4: ** held by the database library. {END} Memory used to cache database williamr@4: ** pages to improve performance is an example of non-essential memory. williamr@4: ** sqlite3_release_memory() returns the number of bytes actually freed, williamr@4: ** which might be more or less than the amount requested. williamr@4: ** williamr@4: ** INVARIANTS: williamr@4: ** williamr@4: ** {H17341} The [sqlite3_release_memory(N)] interface attempts to williamr@4: ** free N bytes of heap memory by deallocating non-essential williamr@4: ** memory allocations held by the database library. williamr@4: ** williamr@4: ** {H16342} The [sqlite3_release_memory(N)] returns the number williamr@4: ** of bytes actually freed, which might be more or less williamr@4: ** than the amount requested. williamr@4: */ williamr@4: IMPORT_C int sqlite3_release_memory(int); williamr@4: williamr@4: /* williamr@4: ** CAPI3REF: Impose A Limit On Heap Size {H17350} williamr@4: ** williamr@4: ** The sqlite3_soft_heap_limit() interface places a "soft" limit williamr@4: ** on the amount of heap memory that may be allocated by SQLite. williamr@4: ** If an internal allocation is requested that would exceed the williamr@4: ** soft heap limit, [sqlite3_release_memory()] is invoked one or williamr@4: ** more times to free up some space before the allocation is performed. williamr@4: ** williamr@4: ** The limit is called "soft", because if [sqlite3_release_memory()] williamr@4: ** cannot free sufficient memory to prevent the limit from being exceeded, williamr@4: ** the memory is allocated anyway and the current operation proceeds. williamr@4: ** williamr@4: ** A negative or zero value for N means that there is no soft heap limit and williamr@4: ** [sqlite3_release_memory()] will only be called when memory is exhausted. williamr@4: ** The default value for the soft heap limit is zero. williamr@4: ** williamr@4: ** SQLite makes a best effort to honor the soft heap limit. williamr@4: ** But if the soft heap limit cannot be honored, execution will williamr@4: ** continue without error or notification. This is why the limit is williamr@4: ** called a "soft" limit. It is advisory only. williamr@4: ** williamr@4: ** Prior to SQLite version 3.5.0, this routine only constrained the memory williamr@4: ** allocated by a single thread - the same thread in which this routine williamr@4: ** runs. Beginning with SQLite version 3.5.0, the soft heap limit is williamr@4: ** applied to all threads. The value specified for the soft heap limit williamr@4: ** is an upper bound on the total memory allocation for all threads. In williamr@4: ** version 3.5.0 there is no mechanism for limiting the heap usage for williamr@4: ** individual threads. williamr@4: ** williamr@4: ** INVARIANTS: williamr@4: ** williamr@4: ** {H16351} The [sqlite3_soft_heap_limit(N)] interface places a soft limit williamr@4: ** of N bytes on the amount of heap memory that may be allocated williamr@4: ** using [sqlite3_malloc()] or [sqlite3_realloc()] at any point williamr@4: ** in time. williamr@4: ** williamr@4: ** {H16352} If a call to [sqlite3_malloc()] or [sqlite3_realloc()] would williamr@4: ** cause the total amount of allocated memory to exceed the williamr@4: ** soft heap limit, then [sqlite3_release_memory()] is invoked williamr@4: ** in an attempt to reduce the memory usage prior to proceeding williamr@4: ** with the memory allocation attempt. williamr@4: ** williamr@4: ** {H16353} Calls to [sqlite3_malloc()] or [sqlite3_realloc()] that trigger williamr@4: ** attempts to reduce memory usage through the soft heap limit williamr@4: ** mechanism continue even if the attempt to reduce memory williamr@4: ** usage is unsuccessful. williamr@4: ** williamr@4: ** {H16354} A negative or zero value for N in a call to williamr@4: ** [sqlite3_soft_heap_limit(N)] means that there is no soft williamr@4: ** heap limit and [sqlite3_release_memory()] will only be williamr@4: ** called when memory is completely exhausted. williamr@4: ** williamr@4: ** {H16355} The default value for the soft heap limit is zero. williamr@4: ** williamr@4: ** {H16358} Each call to [sqlite3_soft_heap_limit(N)] overrides the williamr@4: ** values set by all prior calls. williamr@4: */ williamr@4: IMPORT_C void sqlite3_soft_heap_limit(int); williamr@4: williamr@4: /* williamr@4: ** CAPI3REF: Extract Metadata About A Column Of A Table {H12850} williamr@4: ** williamr@4: ** This routine returns metadata about a specific column of a specific williamr@4: ** database table accessible using the [database connection] handle williamr@4: ** passed as the first function argument. williamr@4: ** williamr@4: ** The column is identified by the second, third and fourth parameters to williamr@4: ** this function. The second parameter is either the name of the database williamr@4: ** (i.e. "main", "temp" or an attached database) containing the specified williamr@4: ** table or NULL. If it is NULL, then all attached databases are searched williamr@4: ** for the table using the same algorithm used by the database engine to williamr@4: ** resolve unqualified table references. williamr@4: ** williamr@4: ** The third and fourth parameters to this function are the table and column williamr@4: ** name of the desired column, respectively. Neither of these parameters williamr@4: ** may be NULL. williamr@4: ** williamr@4: ** Metadata is returned by writing to the memory locations passed as the 5th williamr@4: ** and subsequent parameters to this function. Any of these arguments may be williamr@4: ** NULL, in which case the corresponding element of metadata is omitted. williamr@4: ** williamr@4: **
williamr@4: ** williamr@4: **
Parameter Output
Type
Description williamr@4: ** williamr@4: **
5th const char* Data type williamr@4: **
6th const char* Name of default collation sequence williamr@4: **
7th int True if column has a NOT NULL constraint williamr@4: **
8th int True if column is part of the PRIMARY KEY williamr@4: **
9th int True if column is AUTOINCREMENT williamr@4: **
williamr@4: **
williamr@4: ** williamr@4: ** The memory pointed to by the character pointers returned for the williamr@4: ** declaration type and collation sequence is valid only until the next williamr@4: ** call to any SQLite API function. williamr@4: ** williamr@4: ** If the specified table is actually a view, an [error code] is returned. williamr@4: ** williamr@4: ** If the specified column is "rowid", "oid" or "_rowid_" and an williamr@4: ** INTEGER PRIMARY KEY column has been explicitly declared, then the output williamr@4: ** parameters are set for the explicitly declared column. If there is no williamr@4: ** explicitly declared INTEGER PRIMARY KEY column, then the output williamr@4: ** parameters are set as follows: williamr@4: ** williamr@4: **
williamr@4: **     data type: "INTEGER"
williamr@4: **     collation sequence: "BINARY"
williamr@4: **     not null: 0
williamr@4: **     primary key: 1
williamr@4: **     auto increment: 0
williamr@4: ** 
williamr@4: ** williamr@4: ** This function may load one or more schemas from database files. If an williamr@4: ** error occurs during this process, or if the requested table or column williamr@4: ** cannot be found, an [error code] is returned and an error message left williamr@4: ** in the [database connection] (to be retrieved using sqlite3_errmsg()). williamr@4: ** williamr@4: ** This API is only available if the library was compiled with the williamr@4: ** [SQLITE_ENABLE_COLUMN_METADATA] C-preprocessor symbol defined. williamr@4: */ williamr@4: IMPORT_C int sqlite3_table_column_metadata( williamr@4: sqlite3 *db, /* Connection handle */ williamr@4: const char *zDbName, /* Database name or NULL */ williamr@4: const char *zTableName, /* Table name */ williamr@4: const char *zColumnName, /* Column name */ williamr@4: char const **pzDataType, /* OUTPUT: Declared data type */ williamr@4: char const **pzCollSeq, /* OUTPUT: Collation sequence name */ williamr@4: int *pNotNull, /* OUTPUT: True if NOT NULL constraint exists */ williamr@4: int *pPrimaryKey, /* OUTPUT: True if column part of PK */ williamr@4: int *pAutoinc /* OUTPUT: True if column is auto-increment */ williamr@4: ); williamr@4: williamr@4: /* williamr@4: ** CAPI3REF: Load An Extension {H12600} williamr@4: ** williamr@4: ** This interface loads an SQLite extension library from the named file. williamr@4: ** williamr@4: ** {H12601} The sqlite3_load_extension() interface attempts to load an williamr@4: ** SQLite extension library contained in the file zFile. williamr@4: ** williamr@4: ** {H12602} The entry point is zProc. williamr@4: ** williamr@4: ** {H12603} zProc may be 0, in which case the name of the entry point williamr@4: ** defaults to "sqlite3_extension_init". williamr@4: ** williamr@4: ** {H12604} The sqlite3_load_extension() interface shall return williamr@4: ** [SQLITE_OK] on success and [SQLITE_ERROR] if something goes wrong. williamr@4: ** williamr@4: ** {H12605} If an error occurs and pzErrMsg is not 0, then the williamr@4: ** [sqlite3_load_extension()] interface shall attempt to williamr@4: ** fill *pzErrMsg with error message text stored in memory williamr@4: ** obtained from [sqlite3_malloc()]. {END} The calling function williamr@4: ** should free this memory by calling [sqlite3_free()]. williamr@4: ** williamr@4: ** {H12606} Extension loading must be enabled using williamr@4: ** [sqlite3_enable_load_extension()] prior to calling this API, williamr@4: ** otherwise an error will be returned. williamr@4: */ williamr@4: IMPORT_C int sqlite3_load_extension( williamr@4: sqlite3 *db, /* Load the extension into this database connection */ williamr@4: const char *zFile, /* Name of the shared library containing extension */ williamr@4: const char *zProc, /* Entry point. Derived from zFile if 0 */ williamr@4: char **pzErrMsg /* Put error message here if not 0 */ williamr@4: ); williamr@4: williamr@4: /* williamr@4: ** CAPI3REF: Enable Or Disable Extension Loading {H12620} williamr@4: ** williamr@4: ** So as not to open security holes in older applications that are williamr@4: ** unprepared to deal with extension loading, and as a means of disabling williamr@4: ** extension loading while evaluating user-entered SQL, the following API williamr@4: ** is provided to turn the [sqlite3_load_extension()] mechanism on and off. williamr@4: ** williamr@4: ** Extension loading is off by default. See ticket #1863. williamr@4: ** williamr@4: ** {H12621} Call the sqlite3_enable_load_extension() routine with onoff==1 williamr@4: ** to turn extension loading on and call it with onoff==0 to turn williamr@4: ** it back off again. williamr@4: ** williamr@4: ** {H12622} Extension loading is off by default. williamr@4: */ williamr@4: IMPORT_C int sqlite3_enable_load_extension(sqlite3 *db, int onoff); williamr@4: williamr@4: /* williamr@4: ** CAPI3REF: Automatically Load An Extensions {H12640} williamr@4: ** williamr@4: ** This API can be invoked at program startup in order to register williamr@4: ** one or more statically linked extensions that will be available williamr@4: ** to all new [database connections]. {END} williamr@4: ** williamr@4: ** This routine stores a pointer to the extension in an array that is williamr@4: ** obtained from [sqlite3_malloc()]. If you run a memory leak checker williamr@4: ** on your program and it reports a leak because of this array, invoke williamr@4: ** [sqlite3_reset_auto_extension()] prior to shutdown to free the memory. williamr@4: ** williamr@4: ** {H12641} This function registers an extension entry point that is williamr@4: ** automatically invoked whenever a new [database connection] williamr@4: ** is opened using [sqlite3_open()], [sqlite3_open16()], williamr@4: ** or [sqlite3_open_v2()]. williamr@4: ** williamr@4: ** {H12642} Duplicate extensions are detected so calling this routine williamr@4: ** multiple times with the same extension is harmless. williamr@4: ** williamr@4: ** {H12643} This routine stores a pointer to the extension in an array williamr@4: ** that is obtained from [sqlite3_malloc()]. williamr@4: ** williamr@4: ** {H12644} Automatic extensions apply across all threads. williamr@4: */ williamr@4: IMPORT_C int sqlite3_auto_extension(void *xEntryPoint); williamr@4: williamr@4: /* williamr@4: ** CAPI3REF: Reset Automatic Extension Loading {H12660} williamr@4: ** williamr@4: ** This function disables all previously registered automatic williamr@4: ** extensions. {END} It undoes the effect of all prior williamr@4: ** [sqlite3_auto_extension()] calls. williamr@4: ** williamr@4: ** {H12661} This function disables all previously registered williamr@4: ** automatic extensions. williamr@4: ** williamr@4: ** {H12662} This function disables automatic extensions in all threads. williamr@4: */ williamr@4: IMPORT_C void sqlite3_reset_auto_extension(void); williamr@4: williamr@4: /* williamr@4: ****** EXPERIMENTAL - subject to change without notice ************** williamr@4: ** williamr@4: ** The interface to the virtual-table mechanism is currently considered williamr@4: ** to be experimental. The interface might change in incompatible ways. williamr@4: ** If this is a problem for you, do not use the interface at this time. williamr@4: ** williamr@4: ** When the virtual-table mechanism stabilizes, we will declare the williamr@4: ** interface fixed, support it indefinitely, and remove this comment. williamr@4: */ williamr@4: williamr@4: /* williamr@4: ** Structures used by the virtual table interface williamr@4: */ williamr@4: typedef struct sqlite3_vtab sqlite3_vtab; williamr@4: typedef struct sqlite3_index_info sqlite3_index_info; williamr@4: typedef struct sqlite3_vtab_cursor sqlite3_vtab_cursor; williamr@4: typedef struct sqlite3_module sqlite3_module; williamr@4: williamr@4: /* williamr@4: ** CAPI3REF: Virtual Table Object {H18000} williamr@4: ** KEYWORDS: sqlite3_module williamr@4: ** EXPERIMENTAL williamr@4: ** williamr@4: ** A module is a class of virtual tables. Each module is defined williamr@4: ** by an instance of the following structure. This structure consists williamr@4: ** mostly of methods for the module. williamr@4: ** williamr@4: ** This interface is experimental and is subject to change or williamr@4: ** removal in future releases of SQLite. williamr@4: */ williamr@4: struct sqlite3_module { williamr@4: int iVersion; williamr@4: int (*xCreate)(sqlite3*, void *pAux, williamr@4: int argc, const char *const*argv, williamr@4: sqlite3_vtab **ppVTab, char**); williamr@4: int (*xConnect)(sqlite3*, void *pAux, williamr@4: int argc, const char *const*argv, williamr@4: sqlite3_vtab **ppVTab, char**); williamr@4: int (*xBestIndex)(sqlite3_vtab *pVTab, sqlite3_index_info*); williamr@4: int (*xDisconnect)(sqlite3_vtab *pVTab); williamr@4: int (*xDestroy)(sqlite3_vtab *pVTab); williamr@4: int (*xOpen)(sqlite3_vtab *pVTab, sqlite3_vtab_cursor **ppCursor); williamr@4: int (*xClose)(sqlite3_vtab_cursor*); williamr@4: int (*xFilter)(sqlite3_vtab_cursor*, int idxNum, const char *idxStr, williamr@4: int argc, sqlite3_value **argv); williamr@4: int (*xNext)(sqlite3_vtab_cursor*); williamr@4: int (*xEof)(sqlite3_vtab_cursor*); williamr@4: int (*xColumn)(sqlite3_vtab_cursor*, sqlite3_context*, int); williamr@4: int (*xRowid)(sqlite3_vtab_cursor*, sqlite3_int64 *pRowid); williamr@4: int (*xUpdate)(sqlite3_vtab *, int, sqlite3_value **, sqlite3_int64 *); williamr@4: int (*xBegin)(sqlite3_vtab *pVTab); williamr@4: int (*xSync)(sqlite3_vtab *pVTab); williamr@4: int (*xCommit)(sqlite3_vtab *pVTab); williamr@4: int (*xRollback)(sqlite3_vtab *pVTab); williamr@4: int (*xFindFunction)(sqlite3_vtab *pVtab, int nArg, const char *zName, williamr@4: void (**pxFunc)(sqlite3_context*,int,sqlite3_value**), williamr@4: void **ppArg); williamr@4: int (*xRename)(sqlite3_vtab *pVtab, const char *zNew); williamr@4: }; williamr@4: williamr@4: /* williamr@4: ** CAPI3REF: Virtual Table Indexing Information {H18100} williamr@4: ** KEYWORDS: sqlite3_index_info williamr@4: ** EXPERIMENTAL williamr@4: ** williamr@4: ** The sqlite3_index_info structure and its substructures is used to williamr@4: ** pass information into and receive the reply from the xBestIndex williamr@4: ** method of an sqlite3_module. The fields under **Inputs** are the williamr@4: ** inputs to xBestIndex and are read-only. xBestIndex inserts its williamr@4: ** results into the **Outputs** fields. williamr@4: ** williamr@4: ** The aConstraint[] array records WHERE clause constraints of the form: williamr@4: ** williamr@4: **
column OP expr
williamr@4: ** williamr@4: ** where OP is =, <, <=, >, or >=. The particular operator is williamr@4: ** stored in aConstraint[].op. The index of the column is stored in williamr@4: ** aConstraint[].iColumn. aConstraint[].usable is TRUE if the williamr@4: ** expr on the right-hand side can be evaluated (and thus the constraint williamr@4: ** is usable) and false if it cannot. williamr@4: ** williamr@4: ** The optimizer automatically inverts terms of the form "expr OP column" williamr@4: ** and makes other simplifications to the WHERE clause in an attempt to williamr@4: ** get as many WHERE clause terms into the form shown above as possible. williamr@4: ** The aConstraint[] array only reports WHERE clause terms in the correct williamr@4: ** form that refer to the particular virtual table being queried. williamr@4: ** williamr@4: ** Information about the ORDER BY clause is stored in aOrderBy[]. williamr@4: ** Each term of aOrderBy records a column of the ORDER BY clause. williamr@4: ** williamr@4: ** The xBestIndex method must fill aConstraintUsage[] with information williamr@4: ** about what parameters to pass to xFilter. If argvIndex>0 then williamr@4: ** the right-hand side of the corresponding aConstraint[] is evaluated williamr@4: ** and becomes the argvIndex-th entry in argv. If aConstraintUsage[].omit williamr@4: ** is true, then the constraint is assumed to be fully handled by the williamr@4: ** virtual table and is not checked again by SQLite. williamr@4: ** williamr@4: ** The idxNum and idxPtr values are recorded and passed into xFilter. williamr@4: ** sqlite3_free() is used to free idxPtr if needToFreeIdxPtr is true. williamr@4: ** williamr@4: ** The orderByConsumed means that output from xFilter will occur in williamr@4: ** the correct order to satisfy the ORDER BY clause so that no separate williamr@4: ** sorting step is required. williamr@4: ** williamr@4: ** The estimatedCost value is an estimate of the cost of doing the williamr@4: ** particular lookup. A full scan of a table with N entries should have williamr@4: ** a cost of N. A binary search of a table of N entries should have a williamr@4: ** cost of approximately log(N). williamr@4: ** williamr@4: ** This interface is experimental and is subject to change or williamr@4: ** removal in future releases of SQLite. williamr@4: */ williamr@4: struct sqlite3_index_info { williamr@4: /* Inputs */ williamr@4: int nConstraint; /* Number of entries in aConstraint */ williamr@4: struct sqlite3_index_constraint { williamr@4: int iColumn; /* Column on left-hand side of constraint */ williamr@4: unsigned char op; /* Constraint operator */ williamr@4: unsigned char usable; /* True if this constraint is usable */ williamr@4: int iTermOffset; /* Used internally - xBestIndex should ignore */ williamr@4: } *aConstraint; /* Table of WHERE clause constraints */ williamr@4: int nOrderBy; /* Number of terms in the ORDER BY clause */ williamr@4: struct sqlite3_index_orderby { williamr@4: int iColumn; /* Column number */ williamr@4: unsigned char desc; /* True for DESC. False for ASC. */ williamr@4: } *aOrderBy; /* The ORDER BY clause */ williamr@4: /* Outputs */ williamr@4: struct sqlite3_index_constraint_usage { williamr@4: int argvIndex; /* if >0, constraint is part of argv to xFilter */ williamr@4: unsigned char omit; /* Do not code a test for this constraint */ williamr@4: } *aConstraintUsage; williamr@4: int idxNum; /* Number used to identify the index */ williamr@4: char *idxStr; /* String, possibly obtained from sqlite3_malloc */ williamr@4: int needToFreeIdxStr; /* Free idxStr using sqlite3_free() if true */ williamr@4: int orderByConsumed; /* True if output is already ordered */ williamr@4: double estimatedCost; /* Estimated cost of using this index */ williamr@4: }; williamr@4: #define SQLITE_INDEX_CONSTRAINT_EQ 2 williamr@4: #define SQLITE_INDEX_CONSTRAINT_GT 4 williamr@4: #define SQLITE_INDEX_CONSTRAINT_LE 8 williamr@4: #define SQLITE_INDEX_CONSTRAINT_LT 16 williamr@4: #define SQLITE_INDEX_CONSTRAINT_GE 32 williamr@4: #define SQLITE_INDEX_CONSTRAINT_MATCH 64 williamr@4: williamr@4: /* williamr@4: ** CAPI3REF: Register A Virtual Table Implementation {H18200} williamr@4: ** EXPERIMENTAL williamr@4: ** williamr@4: ** This routine is used to register a new module name with a williamr@4: ** [database connection]. Module names must be registered before williamr@4: ** creating new virtual tables on the module, or before using williamr@4: ** preexisting virtual tables of the module. williamr@4: ** williamr@4: ** This interface is experimental and is subject to change or williamr@4: ** removal in future releases of SQLite. williamr@4: */ williamr@4: IMPORT_C int sqlite3_create_module( williamr@4: sqlite3 *db, /* SQLite connection to register module with */ williamr@4: const char *zName, /* Name of the module */ williamr@4: const sqlite3_module *, /* Methods for the module */ williamr@4: void * /* Client data for xCreate/xConnect */ williamr@4: ); williamr@4: williamr@4: /* williamr@4: ** CAPI3REF: Register A Virtual Table Implementation {H18210} williamr@4: ** EXPERIMENTAL williamr@4: ** williamr@4: ** This routine is identical to the [sqlite3_create_module()] method above, williamr@4: ** except that it allows a destructor function to be specified. It is williamr@4: ** even more experimental than the rest of the virtual tables API. williamr@4: */ williamr@4: IMPORT_C int sqlite3_create_module_v2( williamr@4: sqlite3 *db, /* SQLite connection to register module with */ williamr@4: const char *zName, /* Name of the module */ williamr@4: const sqlite3_module *, /* Methods for the module */ williamr@4: void *, /* Client data for xCreate/xConnect */ williamr@4: void(*xDestroy)(void*) /* Module destructor function */ williamr@4: ); williamr@4: williamr@4: /* williamr@4: ** CAPI3REF: Virtual Table Instance Object {H18010} williamr@4: ** KEYWORDS: sqlite3_vtab williamr@4: ** EXPERIMENTAL williamr@4: ** williamr@4: ** Every module implementation uses a subclass of the following structure williamr@4: ** to describe a particular instance of the module. Each subclass will williamr@4: ** be tailored to the specific needs of the module implementation. williamr@4: ** The purpose of this superclass is to define certain fields that are williamr@4: ** common to all module implementations. williamr@4: ** williamr@4: ** Virtual tables methods can set an error message by assigning a williamr@4: ** string obtained from [sqlite3_mprintf()] to zErrMsg. The method should williamr@4: ** take care that any prior string is freed by a call to [sqlite3_free()] williamr@4: ** prior to assigning a new string to zErrMsg. After the error message williamr@4: ** is delivered up to the client application, the string will be automatically williamr@4: ** freed by sqlite3_free() and the zErrMsg field will be zeroed. Note williamr@4: ** that sqlite3_mprintf() and sqlite3_free() are used on the zErrMsg field williamr@4: ** since virtual tables are commonly implemented in loadable extensions which williamr@4: ** do not have access to sqlite3MPrintf() or sqlite3Free(). williamr@4: ** williamr@4: ** This interface is experimental and is subject to change or williamr@4: ** removal in future releases of SQLite. williamr@4: */ williamr@4: struct sqlite3_vtab { williamr@4: const sqlite3_module *pModule; /* The module for this virtual table */ williamr@4: int nRef; /* Used internally */ williamr@4: char *zErrMsg; /* Error message from sqlite3_mprintf() */ williamr@4: /* Virtual table implementations will typically add additional fields */ williamr@4: }; williamr@4: williamr@4: /* williamr@4: ** CAPI3REF: Virtual Table Cursor Object {H18020} williamr@4: ** KEYWORDS: sqlite3_vtab_cursor williamr@4: ** EXPERIMENTAL williamr@4: ** williamr@4: ** Every module implementation uses a subclass of the following structure williamr@4: ** to describe cursors that point into the virtual table and are used williamr@4: ** to loop through the virtual table. Cursors are created using the williamr@4: ** xOpen method of the module. Each module implementation will define williamr@4: ** the content of a cursor structure to suit its own needs. williamr@4: ** williamr@4: ** This superclass exists in order to define fields of the cursor that williamr@4: ** are common to all implementations. williamr@4: ** williamr@4: ** This interface is experimental and is subject to change or williamr@4: ** removal in future releases of SQLite. williamr@4: */ williamr@4: struct sqlite3_vtab_cursor { williamr@4: sqlite3_vtab *pVtab; /* Virtual table of this cursor */ williamr@4: /* Virtual table implementations will typically add additional fields */ williamr@4: }; williamr@4: williamr@4: /* williamr@4: ** CAPI3REF: Declare The Schema Of A Virtual Table {H18280} williamr@4: ** EXPERIMENTAL williamr@4: ** williamr@4: ** The xCreate and xConnect methods of a module use the following API williamr@4: ** to declare the format (the names and datatypes of the columns) of williamr@4: ** the virtual tables they implement. williamr@4: ** williamr@4: ** This interface is experimental and is subject to change or williamr@4: ** removal in future releases of SQLite. williamr@4: */ williamr@4: IMPORT_C int sqlite3_declare_vtab(sqlite3*, const char *zCreateTable); williamr@4: williamr@4: /* williamr@4: ** CAPI3REF: Overload A Function For A Virtual Table {H18300} williamr@4: ** EXPERIMENTAL williamr@4: ** williamr@4: ** Virtual tables can provide alternative implementations of functions williamr@4: ** using the xFindFunction method. But global versions of those functions williamr@4: ** must exist in order to be overloaded. williamr@4: ** williamr@4: ** This API makes sure a global version of a function with a particular williamr@4: ** name and number of parameters exists. If no such function exists williamr@4: ** before this API is called, a new function is created. The implementation williamr@4: ** of the new function always causes an exception to be thrown. So williamr@4: ** the new function is not good for anything by itself. Its only williamr@4: ** purpose is to be a placeholder function that can be overloaded williamr@4: ** by virtual tables. williamr@4: ** williamr@4: ** This API should be considered part of the virtual table interface, williamr@4: ** which is experimental and subject to change. williamr@4: */ williamr@4: IMPORT_C int sqlite3_overload_function(sqlite3*, const char *zFuncName, int nArg); williamr@4: williamr@4: /* williamr@4: ** The interface to the virtual-table mechanism defined above (back up williamr@4: ** to a comment remarkably similar to this one) is currently considered williamr@4: ** to be experimental. The interface might change in incompatible ways. williamr@4: ** If this is a problem for you, do not use the interface at this time. williamr@4: ** williamr@4: ** When the virtual-table mechanism stabilizes, we will declare the williamr@4: ** interface fixed, support it indefinitely, and remove this comment. williamr@4: ** williamr@4: ****** EXPERIMENTAL - subject to change without notice ************** williamr@4: */ williamr@4: williamr@4: /* williamr@4: ** CAPI3REF: A Handle To An Open BLOB {H17800} williamr@4: ** KEYWORDS: {BLOB handle} {BLOB handles} williamr@4: ** williamr@4: ** An instance of this object represents an open BLOB on which williamr@4: ** [sqlite3_blob_open | incremental BLOB I/O] can be performed. williamr@4: ** Objects of this type are created by [sqlite3_blob_open()] williamr@4: ** and destroyed by [sqlite3_blob_close()]. williamr@4: ** The [sqlite3_blob_read()] and [sqlite3_blob_write()] interfaces williamr@4: ** can be used to read or write small subsections of the BLOB. williamr@4: ** The [sqlite3_blob_bytes()] interface returns the size of the BLOB in bytes. williamr@4: */ williamr@4: typedef struct sqlite3_blob sqlite3_blob; williamr@4: williamr@4: /* williamr@4: ** CAPI3REF: Open A BLOB For Incremental I/O {H17810} williamr@4: ** williamr@4: ** This interfaces opens a [BLOB handle | handle] to the BLOB located williamr@4: ** in row iRow, column zColumn, table zTable in database zDb; williamr@4: ** in other words, the same BLOB that would be selected by: williamr@4: ** williamr@4: **
williamr@4: **     SELECT zColumn FROM zDb.zTable WHERE rowid = iRow;
williamr@4: ** 
{END} williamr@4: ** williamr@4: ** If the flags parameter is non-zero, the the BLOB is opened for read williamr@4: ** and write access. If it is zero, the BLOB is opened for read access. williamr@4: ** williamr@4: ** Note that the database name is not the filename that contains williamr@4: ** the database but rather the symbolic name of the database that williamr@4: ** is assigned when the database is connected using [ATTACH]. williamr@4: ** For the main database file, the database name is "main". williamr@4: ** For TEMP tables, the database name is "temp". williamr@4: ** williamr@4: ** On success, [SQLITE_OK] is returned and the new [BLOB handle] is written williamr@4: ** to *ppBlob. Otherwise an [error code] is returned and any value written williamr@4: ** to *ppBlob should not be used by the caller. williamr@4: ** This function sets the [database connection] error code and message williamr@4: ** accessible via [sqlite3_errcode()] and [sqlite3_errmsg()]. williamr@4: ** williamr@4: ** If the row that a BLOB handle points to is modified by an williamr@4: ** [UPDATE], [DELETE], or by [ON CONFLICT] side-effects williamr@4: ** then the BLOB handle is marked as "expired". williamr@4: ** This is true if any column of the row is changed, even a column williamr@4: ** other than the one the BLOB handle is open on. williamr@4: ** Calls to [sqlite3_blob_read()] and [sqlite3_blob_write()] for williamr@4: ** a expired BLOB handle fail with an return code of [SQLITE_ABORT]. williamr@4: ** Changes written into a BLOB prior to the BLOB expiring are not williamr@4: ** rollback by the expiration of the BLOB. Such changes will eventually williamr@4: ** commit if the transaction continues to completion. williamr@4: ** williamr@4: ** INVARIANTS: williamr@4: ** williamr@4: ** {H17813} A successful invocation of the [sqlite3_blob_open(D,B,T,C,R,F,P)] williamr@4: ** interface shall open an [sqlite3_blob] object P on the BLOB williamr@4: ** in column C of the table T in the database B on williamr@4: ** the [database connection] D. williamr@4: ** williamr@4: ** {H17814} A successful invocation of [sqlite3_blob_open(D,...)] shall start williamr@4: ** a new transaction on the [database connection] D if that williamr@4: ** connection is not already in a transaction. williamr@4: ** williamr@4: ** {H17816} The [sqlite3_blob_open(D,B,T,C,R,F,P)] interface shall open williamr@4: ** the BLOB for read and write access if and only if the F williamr@4: ** parameter is non-zero. williamr@4: ** williamr@4: ** {H17819} The [sqlite3_blob_open()] interface shall return [SQLITE_OK] on williamr@4: ** success and an appropriate [error code] on failure. williamr@4: ** williamr@4: ** {H17821} If an error occurs during evaluation of [sqlite3_blob_open(D,...)] williamr@4: ** then subsequent calls to [sqlite3_errcode(D)], williamr@4: ** [sqlite3_errmsg(D)], and [sqlite3_errmsg16(D)] shall return williamr@4: ** information appropriate for that error. williamr@4: ** williamr@4: ** {H17824} If any column in the row that a [sqlite3_blob] has open is williamr@4: ** changed by a separate [UPDATE] or [DELETE] statement or by williamr@4: ** an [ON CONFLICT] side effect, then the [sqlite3_blob] shall williamr@4: ** be marked as invalid. williamr@4: */ williamr@4: IMPORT_C int sqlite3_blob_open( williamr@4: sqlite3*, williamr@4: const char *zDb, williamr@4: const char *zTable, williamr@4: const char *zColumn, williamr@4: sqlite3_int64 iRow, williamr@4: int flags, williamr@4: sqlite3_blob **ppBlob williamr@4: ); williamr@4: williamr@4: /* williamr@4: ** CAPI3REF: Close A BLOB Handle {H17830} williamr@4: ** williamr@4: ** Closes an open [BLOB handle]. williamr@4: ** williamr@4: ** Closing a BLOB shall cause the current transaction to commit williamr@4: ** if there are no other BLOBs, no pending prepared statements, and the williamr@4: ** database connection is in [autocommit mode]. williamr@4: ** If any writes were made to the BLOB, they might be held in cache williamr@4: ** until the close operation if they will fit. {END} williamr@4: ** williamr@4: ** Closing the BLOB often forces the changes williamr@4: ** out to disk and so if any I/O errors occur, they will likely occur williamr@4: ** at the time when the BLOB is closed. {H17833} Any errors that occur during williamr@4: ** closing are reported as a non-zero return value. williamr@4: ** williamr@4: ** The BLOB is closed unconditionally. Even if this routine returns williamr@4: ** an error code, the BLOB is still closed. williamr@4: ** williamr@4: ** INVARIANTS: williamr@4: ** williamr@4: ** {H17833} The [sqlite3_blob_close(P)] interface closes an [sqlite3_blob] williamr@4: ** object P previously opened using [sqlite3_blob_open()]. williamr@4: ** williamr@4: ** {H17836} Closing an [sqlite3_blob] object using williamr@4: ** [sqlite3_blob_close()] shall cause the current transaction to williamr@4: ** commit if there are no other open [sqlite3_blob] objects williamr@4: ** or [prepared statements] on the same [database connection] and williamr@4: ** the database connection is in [autocommit mode]. williamr@4: ** williamr@4: ** {H17839} The [sqlite3_blob_close(P)] interfaces shall close the williamr@4: ** [sqlite3_blob] object P unconditionally, even if williamr@4: ** [sqlite3_blob_close(P)] returns something other than [SQLITE_OK]. williamr@4: */ williamr@4: IMPORT_C int sqlite3_blob_close(sqlite3_blob *); williamr@4: williamr@4: /* williamr@4: ** CAPI3REF: Return The Size Of An Open BLOB {H17840} williamr@4: ** williamr@4: ** Returns the size in bytes of the BLOB accessible via the open williamr@4: ** []BLOB handle] in its only argument. williamr@4: ** williamr@4: ** INVARIANTS: williamr@4: ** williamr@4: ** {H17843} The [sqlite3_blob_bytes(P)] interface returns the size williamr@4: ** in bytes of the BLOB that the [sqlite3_blob] object P williamr@4: ** refers to. williamr@4: */ williamr@4: IMPORT_C int sqlite3_blob_bytes(sqlite3_blob *); williamr@4: williamr@4: /* williamr@4: ** CAPI3REF: Read Data From A BLOB Incrementally {H17850} williamr@4: ** williamr@4: ** This function is used to read data from an open [BLOB handle] into a williamr@4: ** caller-supplied buffer. N bytes of data are copied into buffer Z williamr@4: ** from the open BLOB, starting at offset iOffset. williamr@4: ** williamr@4: ** If offset iOffset is less than N bytes from the end of the BLOB, williamr@4: ** [SQLITE_ERROR] is returned and no data is read. If N or iOffset is williamr@4: ** less than zero, [SQLITE_ERROR] is returned and no data is read. williamr@4: ** williamr@4: ** An attempt to read from an expired [BLOB handle] fails with an williamr@4: ** error code of [SQLITE_ABORT]. williamr@4: ** williamr@4: ** On success, SQLITE_OK is returned. williamr@4: ** Otherwise, an [error code] or an [extended error code] is returned. williamr@4: ** williamr@4: ** INVARIANTS: williamr@4: ** williamr@4: ** {H17853} A successful invocation of [sqlite3_blob_read(P,Z,N,X)] williamr@4: ** shall reads N bytes of data out of the BLOB referenced by williamr@4: ** [BLOB handle] P beginning at offset X and store those bytes williamr@4: ** into buffer Z. williamr@4: ** williamr@4: ** {H17856} In [sqlite3_blob_read(P,Z,N,X)] if the size of the BLOB williamr@4: ** is less than N+X bytes, then the function shall leave the williamr@4: ** Z buffer unchanged and return [SQLITE_ERROR]. williamr@4: ** williamr@4: ** {H17859} In [sqlite3_blob_read(P,Z,N,X)] if X or N is less than zero williamr@4: ** then the function shall leave the Z buffer unchanged williamr@4: ** and return [SQLITE_ERROR]. williamr@4: ** williamr@4: ** {H17862} The [sqlite3_blob_read(P,Z,N,X)] interface shall return [SQLITE_OK] williamr@4: ** if N bytes are successfully read into buffer Z. williamr@4: ** williamr@4: ** {H17863} If the [BLOB handle] P is expired and X and N are within bounds williamr@4: ** then [sqlite3_blob_read(P,Z,N,X)] shall leave the Z buffer williamr@4: ** unchanged and return [SQLITE_ABORT]. williamr@4: ** williamr@4: ** {H17865} If the requested read could not be completed, williamr@4: ** the [sqlite3_blob_read(P,Z,N,X)] interface shall return an williamr@4: ** appropriate [error code] or [extended error code]. williamr@4: ** williamr@4: ** {H17868} If an error occurs during evaluation of [sqlite3_blob_read(P,...)] williamr@4: ** then subsequent calls to [sqlite3_errcode(D)], williamr@4: ** [sqlite3_errmsg(D)], and [sqlite3_errmsg16(D)] shall return williamr@4: ** information appropriate for that error, where D is the williamr@4: ** [database connection] that was used to open the [BLOB handle] P. williamr@4: */ williamr@4: IMPORT_C int sqlite3_blob_read(sqlite3_blob *, void *Z, int N, int iOffset); williamr@4: williamr@4: /* williamr@4: ** CAPI3REF: Write Data Into A BLOB Incrementally {H17870} williamr@4: ** williamr@4: ** This function is used to write data into an open [BLOB handle] from a williamr@4: ** caller-supplied buffer. N bytes of data are copied from the buffer Z williamr@4: ** into the open BLOB, starting at offset iOffset. williamr@4: ** williamr@4: ** If the [BLOB handle] passed as the first argument was not opened for williamr@4: ** writing (the flags parameter to [sqlite3_blob_open()] was zero), williamr@4: ** this function returns [SQLITE_READONLY]. williamr@4: ** williamr@4: ** This function may only modify the contents of the BLOB; it is williamr@4: ** not possible to increase the size of a BLOB using this API. williamr@4: ** If offset iOffset is less than N bytes from the end of the BLOB, williamr@4: ** [SQLITE_ERROR] is returned and no data is written. If N is williamr@4: ** less than zero [SQLITE_ERROR] is returned and no data is written. williamr@4: ** williamr@4: ** An attempt to write to an expired [BLOB handle] fails with an williamr@4: ** error code of [SQLITE_ABORT]. Writes to the BLOB that occurred williamr@4: ** before the [BLOB handle] expired are not rolled back by the williamr@4: ** expiration of the handle, though of course those changes might williamr@4: ** have been overwritten by the statement that expired the BLOB handle williamr@4: ** or by other independent statements. williamr@4: ** williamr@4: ** On success, SQLITE_OK is returned. williamr@4: ** Otherwise, an [error code] or an [extended error code] is returned. williamr@4: ** williamr@4: ** INVARIANTS: williamr@4: ** williamr@4: ** {H17873} A successful invocation of [sqlite3_blob_write(P,Z,N,X)] williamr@4: ** shall write N bytes of data from buffer Z into the BLOB williamr@4: ** referenced by [BLOB handle] P beginning at offset X into williamr@4: ** the BLOB. williamr@4: ** williamr@4: ** {H17874} In the absence of other overridding changes, the changes williamr@4: ** written to a BLOB by [sqlite3_blob_write()] shall williamr@4: ** remain in effect after the associated [BLOB handle] expires. williamr@4: ** williamr@4: ** {H17875} If the [BLOB handle] P was opened for reading only then williamr@4: ** an invocation of [sqlite3_blob_write(P,Z,N,X)] shall leave williamr@4: ** the referenced BLOB unchanged and return [SQLITE_READONLY]. williamr@4: ** williamr@4: ** {H17876} If the size of the BLOB referenced by [BLOB handle] P is williamr@4: ** less than N+X bytes then [sqlite3_blob_write(P,Z,N,X)] shall williamr@4: ** leave the BLOB unchanged and return [SQLITE_ERROR]. williamr@4: ** williamr@4: ** {H17877} If the [BLOB handle] P is expired and X and N are within bounds williamr@4: ** then [sqlite3_blob_read(P,Z,N,X)] shall leave the BLOB williamr@4: ** unchanged and return [SQLITE_ABORT]. williamr@4: ** williamr@4: ** {H17879} If X or N are less than zero then [sqlite3_blob_write(P,Z,N,X)] williamr@4: ** shall leave the BLOB referenced by [BLOB handle] P unchanged williamr@4: ** and return [SQLITE_ERROR]. williamr@4: ** williamr@4: ** {H17882} The [sqlite3_blob_write(P,Z,N,X)] interface shall return williamr@4: ** [SQLITE_OK] if N bytes where successfully written into the BLOB. williamr@4: ** williamr@4: ** {H17885} If the requested write could not be completed, williamr@4: ** the [sqlite3_blob_write(P,Z,N,X)] interface shall return an williamr@4: ** appropriate [error code] or [extended error code]. williamr@4: ** williamr@4: ** {H17888} If an error occurs during evaluation of [sqlite3_blob_write(D,...)] williamr@4: ** then subsequent calls to [sqlite3_errcode(D)], williamr@4: ** [sqlite3_errmsg(D)], and [sqlite3_errmsg16(D)] shall return williamr@4: ** information appropriate for that error. williamr@4: */ williamr@4: IMPORT_C int sqlite3_blob_write(sqlite3_blob *, const void *z, int n, int iOffset); williamr@4: williamr@4: /* williamr@4: ** CAPI3REF: Virtual File System Objects {H11200} williamr@4: ** williamr@4: ** A virtual filesystem (VFS) is an [sqlite3_vfs] object williamr@4: ** that SQLite uses to interact williamr@4: ** with the underlying operating system. Most SQLite builds come with a williamr@4: ** single default VFS that is appropriate for the host computer. williamr@4: ** New VFSes can be registered and existing VFSes can be unregistered. williamr@4: ** The following interfaces are provided. williamr@4: ** williamr@4: ** The sqlite3_vfs_find() interface returns a pointer to a VFS given its name. williamr@4: ** Names are case sensitive. williamr@4: ** Names are zero-terminated UTF-8 strings. williamr@4: ** If there is no match, a NULL pointer is returned. williamr@4: ** If zVfsName is NULL then the default VFS is returned. williamr@4: ** williamr@4: ** New VFSes are registered with sqlite3_vfs_register(). williamr@4: ** Each new VFS becomes the default VFS if the makeDflt flag is set. williamr@4: ** The same VFS can be registered multiple times without injury. williamr@4: ** To make an existing VFS into the default VFS, register it again williamr@4: ** with the makeDflt flag set. If two different VFSes with the williamr@4: ** same name are registered, the behavior is undefined. If a williamr@4: ** VFS is registered with a name that is NULL or an empty string, williamr@4: ** then the behavior is undefined. williamr@4: ** williamr@4: ** Unregister a VFS with the sqlite3_vfs_unregister() interface. williamr@4: ** If the default VFS is unregistered, another VFS is chosen as williamr@4: ** the default. The choice for the new VFS is arbitrary. williamr@4: ** williamr@4: ** INVARIANTS: williamr@4: ** williamr@4: ** {H11203} The [sqlite3_vfs_find(N)] interface returns a pointer to the williamr@4: ** registered [sqlite3_vfs] object whose name exactly matches williamr@4: ** the zero-terminated UTF-8 string N, or it returns NULL if williamr@4: ** there is no match. williamr@4: ** williamr@4: ** {H11206} If the N parameter to [sqlite3_vfs_find(N)] is NULL then williamr@4: ** the function returns a pointer to the default [sqlite3_vfs] williamr@4: ** object if there is one, or NULL if there is no default williamr@4: ** [sqlite3_vfs] object. williamr@4: ** williamr@4: ** {H11209} The [sqlite3_vfs_register(P,F)] interface registers the williamr@4: ** well-formed [sqlite3_vfs] object P using the name given williamr@4: ** by the zName field of the object. williamr@4: ** williamr@4: ** {H11212} Using the [sqlite3_vfs_register(P,F)] interface to register williamr@4: ** the same [sqlite3_vfs] object multiple times is a harmless no-op. williamr@4: ** williamr@4: ** {H11215} The [sqlite3_vfs_register(P,F)] interface makes the [sqlite3_vfs] williamr@4: ** object P the default [sqlite3_vfs] object if F is non-zero. williamr@4: ** williamr@4: ** {H11218} The [sqlite3_vfs_unregister(P)] interface unregisters the williamr@4: ** [sqlite3_vfs] object P so that it is no longer returned by williamr@4: ** subsequent calls to [sqlite3_vfs_find()]. williamr@4: */ williamr@4: IMPORT_C sqlite3_vfs *sqlite3_vfs_find(const char *zVfsName); williamr@4: IMPORT_C int sqlite3_vfs_register(sqlite3_vfs*, int makeDflt); williamr@4: IMPORT_C int sqlite3_vfs_unregister(sqlite3_vfs*); williamr@4: williamr@4: /* williamr@4: ** CAPI3REF: Mutexes {H17000} williamr@4: ** williamr@4: ** The SQLite core uses these routines for thread williamr@4: ** synchronization. Though they are intended for internal williamr@4: ** use by SQLite, code that links against SQLite is williamr@4: ** permitted to use any of these routines. williamr@4: ** williamr@4: ** The SQLite source code contains multiple implementations williamr@4: ** of these mutex routines. An appropriate implementation williamr@4: ** is selected automatically at compile-time. The following williamr@4: ** implementations are available in the SQLite core: williamr@4: ** williamr@4: **
    williamr@4: **
  • SQLITE_MUTEX_OS2 williamr@4: **
  • SQLITE_MUTEX_PTHREAD williamr@4: **
  • SQLITE_MUTEX_W32 williamr@4: **
  • SQLITE_MUTEX_NOOP williamr@4: **
williamr@4: ** williamr@4: ** The SQLITE_MUTEX_NOOP implementation is a set of routines williamr@4: ** that does no real locking and is appropriate for use in williamr@4: ** a single-threaded application. The SQLITE_MUTEX_OS2, williamr@4: ** SQLITE_MUTEX_PTHREAD, and SQLITE_MUTEX_W32 implementations williamr@4: ** are appropriate for use on OS/2, Unix, and Windows. williamr@4: ** williamr@4: ** If SQLite is compiled with the SQLITE_MUTEX_APPDEF preprocessor williamr@4: ** macro defined (with "-DSQLITE_MUTEX_APPDEF=1"), then no mutex williamr@4: ** implementation is included with the library. In this case the williamr@4: ** application must supply a custom mutex implementation using the williamr@4: ** [SQLITE_CONFIG_MUTEX] option of the sqlite3_config() function williamr@4: ** before calling sqlite3_initialize() or any other public sqlite3_ williamr@4: ** function that calls sqlite3_initialize(). williamr@4: ** williamr@4: ** {H17011} The sqlite3_mutex_alloc() routine allocates a new williamr@4: ** mutex and returns a pointer to it. {H17012} If it returns NULL williamr@4: ** that means that a mutex could not be allocated. {H17013} SQLite williamr@4: ** will unwind its stack and return an error. {H17014} The argument williamr@4: ** to sqlite3_mutex_alloc() is one of these integer constants: williamr@4: ** williamr@4: **
    williamr@4: **
  • SQLITE_MUTEX_FAST williamr@4: **
  • SQLITE_MUTEX_RECURSIVE williamr@4: **
  • SQLITE_MUTEX_STATIC_MASTER williamr@4: **
  • SQLITE_MUTEX_STATIC_MEM williamr@4: **
  • SQLITE_MUTEX_STATIC_MEM2 williamr@4: **
  • SQLITE_MUTEX_STATIC_PRNG williamr@4: **
  • SQLITE_MUTEX_STATIC_LRU williamr@4: **
  • SQLITE_MUTEX_STATIC_LRU2 williamr@4: **
williamr@4: ** williamr@4: ** {H17015} The first two constants cause sqlite3_mutex_alloc() to create williamr@4: ** a new mutex. The new mutex is recursive when SQLITE_MUTEX_RECURSIVE williamr@4: ** is used but not necessarily so when SQLITE_MUTEX_FAST is used. {END} williamr@4: ** The mutex implementation does not need to make a distinction williamr@4: ** between SQLITE_MUTEX_RECURSIVE and SQLITE_MUTEX_FAST if it does williamr@4: ** not want to. {H17016} But SQLite will only request a recursive mutex in williamr@4: ** cases where it really needs one. {END} If a faster non-recursive mutex williamr@4: ** implementation is available on the host platform, the mutex subsystem williamr@4: ** might return such a mutex in response to SQLITE_MUTEX_FAST. williamr@4: ** williamr@4: ** {H17017} The other allowed parameters to sqlite3_mutex_alloc() each return williamr@4: ** a pointer to a static preexisting mutex. {END} Four static mutexes are williamr@4: ** used by the current version of SQLite. Future versions of SQLite williamr@4: ** may add additional static mutexes. Static mutexes are for internal williamr@4: ** use by SQLite only. Applications that use SQLite mutexes should williamr@4: ** use only the dynamic mutexes returned by SQLITE_MUTEX_FAST or williamr@4: ** SQLITE_MUTEX_RECURSIVE. williamr@4: ** williamr@4: ** {H17018} Note that if one of the dynamic mutex parameters (SQLITE_MUTEX_FAST williamr@4: ** or SQLITE_MUTEX_RECURSIVE) is used then sqlite3_mutex_alloc() williamr@4: ** returns a different mutex on every call. {H17034} But for the static williamr@4: ** mutex types, the same mutex is returned on every call that has williamr@4: ** the same type number. williamr@4: ** williamr@4: ** {H17019} The sqlite3_mutex_free() routine deallocates a previously williamr@4: ** allocated dynamic mutex. {H17020} SQLite is careful to deallocate every williamr@4: ** dynamic mutex that it allocates. {A17021} The dynamic mutexes must not be in williamr@4: ** use when they are deallocated. {A17022} Attempting to deallocate a static williamr@4: ** mutex results in undefined behavior. {H17023} SQLite never deallocates williamr@4: ** a static mutex. {END} williamr@4: ** williamr@4: ** The sqlite3_mutex_enter() and sqlite3_mutex_try() routines attempt williamr@4: ** to enter a mutex. {H17024} If another thread is already within the mutex, williamr@4: ** sqlite3_mutex_enter() will block and sqlite3_mutex_try() will return williamr@4: ** SQLITE_BUSY. {H17025} The sqlite3_mutex_try() interface returns [SQLITE_OK] williamr@4: ** upon successful entry. {H17026} Mutexes created using williamr@4: ** SQLITE_MUTEX_RECURSIVE can be entered multiple times by the same thread. williamr@4: ** {H17027} In such cases the, williamr@4: ** mutex must be exited an equal number of times before another thread williamr@4: ** can enter. {A17028} If the same thread tries to enter any other williamr@4: ** kind of mutex more than once, the behavior is undefined. williamr@4: ** {H17029} SQLite will never exhibit williamr@4: ** such behavior in its own use of mutexes. williamr@4: ** williamr@4: ** Some systems (for example, Windows 95) do not support the operation williamr@4: ** implemented by sqlite3_mutex_try(). On those systems, sqlite3_mutex_try() williamr@4: ** will always return SQLITE_BUSY. {H17030} The SQLite core only ever uses williamr@4: ** sqlite3_mutex_try() as an optimization so this is acceptable behavior. williamr@4: ** williamr@4: ** {H17031} The sqlite3_mutex_leave() routine exits a mutex that was williamr@4: ** previously entered by the same thread. {A17032} The behavior williamr@4: ** is undefined if the mutex is not currently entered by the williamr@4: ** calling thread or is not currently allocated. {H17033} SQLite will williamr@4: ** never do either. {END} williamr@4: ** williamr@4: ** If the argument to sqlite3_mutex_enter(), sqlite3_mutex_try(), or williamr@4: ** sqlite3_mutex_leave() is a NULL pointer, then all three routines williamr@4: ** behave as no-ops. williamr@4: ** williamr@4: ** See also: [sqlite3_mutex_held()] and [sqlite3_mutex_notheld()]. williamr@4: */ williamr@4: IMPORT_C sqlite3_mutex *sqlite3_mutex_alloc(int); williamr@4: IMPORT_C void sqlite3_mutex_free(sqlite3_mutex*); williamr@4: IMPORT_C void sqlite3_mutex_enter(sqlite3_mutex*); williamr@4: IMPORT_C int sqlite3_mutex_try(sqlite3_mutex*); williamr@4: IMPORT_C void sqlite3_mutex_leave(sqlite3_mutex*); williamr@4: williamr@4: /* williamr@4: ** CAPI3REF: Mutex Methods Object {H17120} williamr@4: ** EXPERIMENTAL williamr@4: ** williamr@4: ** An instance of this structure defines the low-level routines williamr@4: ** used to allocate and use mutexes. williamr@4: ** williamr@4: ** Usually, the default mutex implementations provided by SQLite are williamr@4: ** sufficient, however the user has the option of substituting a custom williamr@4: ** implementation for specialized deployments or systems for which SQLite williamr@4: ** does not provide a suitable implementation. In this case, the user williamr@4: ** creates and populates an instance of this structure to pass williamr@4: ** to sqlite3_config() along with the [SQLITE_CONFIG_MUTEX] option. williamr@4: ** Additionally, an instance of this structure can be used as an williamr@4: ** output variable when querying the system for the current mutex williamr@4: ** implementation, using the [SQLITE_CONFIG_GETMUTEX] option. williamr@4: ** williamr@4: ** The xMutexInit method defined by this structure is invoked as williamr@4: ** part of system initialization by the sqlite3_initialize() function. williamr@4: ** {H17001} The xMutexInit routine shall be called by SQLite once for each williamr@4: ** effective call to [sqlite3_initialize()]. williamr@4: ** williamr@4: ** The xMutexEnd method defined by this structure is invoked as williamr@4: ** part of system shutdown by the sqlite3_shutdown() function. The williamr@4: ** implementation of this method is expected to release all outstanding williamr@4: ** resources obtained by the mutex methods implementation, especially williamr@4: ** those obtained by the xMutexInit method. {H17003} The xMutexEnd() williamr@4: ** interface shall be invoked once for each call to [sqlite3_shutdown()]. williamr@4: ** williamr@4: ** The remaining seven methods defined by this structure (xMutexAlloc, williamr@4: ** xMutexFree, xMutexEnter, xMutexTry, xMutexLeave, xMutexHeld and williamr@4: ** xMutexNotheld) implement the following interfaces (respectively): williamr@4: ** williamr@4: **
    williamr@4: **
  • [sqlite3_mutex_alloc()]
  • williamr@4: **
  • [sqlite3_mutex_free()]
  • williamr@4: **
  • [sqlite3_mutex_enter()]
  • williamr@4: **
  • [sqlite3_mutex_try()]
  • williamr@4: **
  • [sqlite3_mutex_leave()]
  • williamr@4: **
  • [sqlite3_mutex_held()]
  • williamr@4: **
  • [sqlite3_mutex_notheld()]
  • williamr@4: **
williamr@4: ** williamr@4: ** The only difference is that the public sqlite3_XXX functions enumerated williamr@4: ** above silently ignore any invocations that pass a NULL pointer instead williamr@4: ** of a valid mutex handle. The implementations of the methods defined williamr@4: ** by this structure are not required to handle this case, the results williamr@4: ** of passing a NULL pointer instead of a valid mutex handle are undefined williamr@4: ** (i.e. it is acceptable to provide an implementation that segfaults if williamr@4: ** it is passed a NULL pointer). williamr@4: */ williamr@4: typedef struct sqlite3_mutex_methods sqlite3_mutex_methods; williamr@4: struct sqlite3_mutex_methods { williamr@4: int (*xMutexInit)(void); williamr@4: int (*xMutexEnd)(void); williamr@4: sqlite3_mutex *(*xMutexAlloc)(int); williamr@4: void (*xMutexFree)(sqlite3_mutex *); williamr@4: void (*xMutexEnter)(sqlite3_mutex *); williamr@4: int (*xMutexTry)(sqlite3_mutex *); williamr@4: void (*xMutexLeave)(sqlite3_mutex *); williamr@4: int (*xMutexHeld)(sqlite3_mutex *); williamr@4: int (*xMutexNotheld)(sqlite3_mutex *); williamr@4: }; williamr@4: williamr@4: /* williamr@4: ** CAPI3REF: Mutex Verification Routines {H17080} williamr@4: ** williamr@4: ** The sqlite3_mutex_held() and sqlite3_mutex_notheld() routines williamr@4: ** are intended for use inside assert() statements. {H17081} The SQLite core williamr@4: ** never uses these routines except inside an assert() and applications williamr@4: ** are advised to follow the lead of the core. {H17082} The core only williamr@4: ** provides implementations for these routines when it is compiled williamr@4: ** with the SQLITE_DEBUG flag. {A17087} External mutex implementations williamr@4: ** are only required to provide these routines if SQLITE_DEBUG is williamr@4: ** defined and if NDEBUG is not defined. williamr@4: ** williamr@4: ** {H17083} These routines should return true if the mutex in their argument williamr@4: ** is held or not held, respectively, by the calling thread. williamr@4: ** williamr@4: ** {X17084} The implementation is not required to provided versions of these williamr@4: ** routines that actually work. If the implementation does not provide working williamr@4: ** versions of these routines, it should at least provide stubs that always williamr@4: ** return true so that one does not get spurious assertion failures. williamr@4: ** williamr@4: ** {H17085} If the argument to sqlite3_mutex_held() is a NULL pointer then williamr@4: ** the routine should return 1. {END} This seems counter-intuitive since williamr@4: ** clearly the mutex cannot be held if it does not exist. But the williamr@4: ** the reason the mutex does not exist is because the build is not williamr@4: ** using mutexes. And we do not want the assert() containing the williamr@4: ** call to sqlite3_mutex_held() to fail, so a non-zero return is williamr@4: ** the appropriate thing to do. {H17086} The sqlite3_mutex_notheld() williamr@4: ** interface should also return 1 when given a NULL pointer. williamr@4: */ williamr@4: IMPORT_C int sqlite3_mutex_held(sqlite3_mutex*); williamr@4: IMPORT_C int sqlite3_mutex_notheld(sqlite3_mutex*); williamr@4: williamr@4: /* williamr@4: ** CAPI3REF: Mutex Types {H17001} williamr@4: ** williamr@4: ** The [sqlite3_mutex_alloc()] interface takes a single argument williamr@4: ** which is one of these integer constants. williamr@4: ** williamr@4: ** The set of static mutexes may change from one SQLite release to the williamr@4: ** next. Applications that override the built-in mutex logic must be williamr@4: ** prepared to accommodate additional static mutexes. williamr@4: */ williamr@4: #define SQLITE_MUTEX_FAST 0 williamr@4: #define SQLITE_MUTEX_RECURSIVE 1 williamr@4: #define SQLITE_MUTEX_STATIC_MASTER 2 williamr@4: #define SQLITE_MUTEX_STATIC_MEM 3 /* sqlite3_malloc() */ williamr@4: #define SQLITE_MUTEX_STATIC_MEM2 4 /* sqlite3_release_memory() */ williamr@4: #define SQLITE_MUTEX_STATIC_PRNG 5 /* sqlite3_random() */ williamr@4: #define SQLITE_MUTEX_STATIC_LRU 6 /* lru page list */ williamr@4: #define SQLITE_MUTEX_STATIC_LRU2 7 /* lru page list */ williamr@4: williamr@4: /* williamr@4: ** CAPI3REF: Low-Level Control Of Database Files {H11300} williamr@4: ** williamr@4: ** {H11301} The [sqlite3_file_control()] interface makes a direct call to the williamr@4: ** xFileControl method for the [sqlite3_io_methods] object associated williamr@4: ** with a particular database identified by the second argument. {H11302} The williamr@4: ** name of the database is the name assigned to the database by the williamr@4: ** ATTACH SQL command that opened the williamr@4: ** database. {H11303} To control the main database file, use the name "main" williamr@4: ** or a NULL pointer. {H11304} The third and fourth parameters to this routine williamr@4: ** are passed directly through to the second and third parameters of williamr@4: ** the xFileControl method. {H11305} The return value of the xFileControl williamr@4: ** method becomes the return value of this routine. williamr@4: ** williamr@4: ** {H11306} If the second parameter (zDbName) does not match the name of any williamr@4: ** open database file, then SQLITE_ERROR is returned. {H11307} This error williamr@4: ** code is not remembered and will not be recalled by [sqlite3_errcode()] williamr@4: ** or [sqlite3_errmsg()]. {A11308} The underlying xFileControl method might williamr@4: ** also return SQLITE_ERROR. {A11309} There is no way to distinguish between williamr@4: ** an incorrect zDbName and an SQLITE_ERROR return from the underlying williamr@4: ** xFileControl method. {END} williamr@4: ** williamr@4: ** See also: [SQLITE_FCNTL_LOCKSTATE] williamr@4: */ williamr@4: IMPORT_C int sqlite3_file_control(sqlite3*, const char *zDbName, int op, void*); williamr@4: williamr@4: /* williamr@4: ** CAPI3REF: Testing Interface {H11400} williamr@4: ** williamr@4: ** The sqlite3_test_control() interface is used to read out internal williamr@4: ** state of SQLite and to inject faults into SQLite for testing williamr@4: ** purposes. The first parameter is an operation code that determines williamr@4: ** the number, meaning, and operation of all subsequent parameters. williamr@4: ** williamr@4: ** This interface is not for use by applications. It exists solely williamr@4: ** for verifying the correct operation of the SQLite library. Depending williamr@4: ** on how the SQLite library is compiled, this interface might not exist. williamr@4: ** williamr@4: ** The details of the operation codes, their meanings, the parameters williamr@4: ** they take, and what they do are all subject to change without notice. williamr@4: ** Unlike most of the SQLite API, this function is not guaranteed to williamr@4: ** operate consistently from one release to the next. williamr@4: */ williamr@4: IMPORT_C int sqlite3_test_control(int op, ...); williamr@4: williamr@4: /* williamr@4: ** CAPI3REF: Testing Interface Operation Codes {H11410} williamr@4: ** williamr@4: ** These constants are the valid operation code parameters used williamr@4: ** as the first argument to [sqlite3_test_control()]. williamr@4: ** williamr@4: ** These parameters and their meanings are subject to change williamr@4: ** without notice. These values are for testing purposes only. williamr@4: ** Applications should not use any of these parameters or the williamr@4: ** [sqlite3_test_control()] interface. williamr@4: */ williamr@4: #define SQLITE_TESTCTRL_PRNG_SAVE 5 williamr@4: #define SQLITE_TESTCTRL_PRNG_RESTORE 6 williamr@4: #define SQLITE_TESTCTRL_PRNG_RESET 7 williamr@4: #define SQLITE_TESTCTRL_BITVEC_TEST 8 williamr@4: #define SQLITE_TESTCTRL_FAULT_INSTALL 9 williamr@4: #define SQLITE_TESTCTRL_BENIGN_MALLOC_HOOKS 10 williamr@4: williamr@4: /* williamr@4: ** CAPI3REF: SQLite Runtime Status {H17200} williamr@4: ** EXPERIMENTAL williamr@4: ** williamr@4: ** This interface is used to retrieve runtime status information williamr@4: ** about the preformance of SQLite, and optionally to reset various williamr@4: ** highwater marks. The first argument is an integer code for williamr@4: ** the specific parameter to measure. Recognized integer codes williamr@4: ** are of the form [SQLITE_STATUS_MEMORY_USED | SQLITE_STATUS_...]. williamr@4: ** The current value of the parameter is returned into *pCurrent. williamr@4: ** The highest recorded value is returned in *pHighwater. If the williamr@4: ** resetFlag is true, then the highest record value is reset after williamr@4: ** *pHighwater is written. Some parameters do not record the highest williamr@4: ** value. For those parameters williamr@4: ** nothing is written into *pHighwater and the resetFlag is ignored. williamr@4: ** Other parameters record only the highwater mark and not the current williamr@4: ** value. For these latter parameters nothing is written into *pCurrent. williamr@4: ** williamr@4: ** This routine returns SQLITE_OK on success and a non-zero williamr@4: ** [error code] on failure. williamr@4: ** williamr@4: ** This routine is threadsafe but is not atomic. This routine can williamr@4: ** called while other threads are running the same or different SQLite williamr@4: ** interfaces. However the values returned in *pCurrent and williamr@4: ** *pHighwater reflect the status of SQLite at different points in time williamr@4: ** and it is possible that another thread might change the parameter williamr@4: ** in between the times when *pCurrent and *pHighwater are written. williamr@4: ** williamr@4: ** See also: [sqlite3_db_status()] williamr@4: */ williamr@4: IMPORT_C int sqlite3_status(int op, int *pCurrent, int *pHighwater, int resetFlag); williamr@4: williamr@4: /* williamr@4: ** CAPI3REF: Database Connection Status {H17201} williamr@4: ** EXPERIMENTAL williamr@4: ** williamr@4: ** This interface is used to retrieve runtime status information williamr@4: ** about a single [database connection]. The first argument is the williamr@4: ** database connection object to be interrogated. The second argument williamr@4: ** is the parameter to interrogate. Currently, the only allowed value williamr@4: ** for the second parameter is [SQLITE_DBSTATUS_LOOKASIDE_USED]. williamr@4: ** Additional options will likely appear in future releases of SQLite. williamr@4: ** williamr@4: ** The current value of the request parameter is written into *pCur williamr@4: ** and the highest instantaneous value is written into *pHiwtr. If williamr@4: ** the resetFlg is true, then the highest instantaneous value is williamr@4: ** reset back down to the current value. williamr@4: ** williamr@4: ** See also: [sqlite3_status()]. williamr@4: */ williamr@4: IMPORT_C int sqlite3_db_status(sqlite3*, int op, int *pCur, int *pHiwtr, int resetFlg); williamr@4: williamr@4: williamr@4: int sqlite3_wsd_init(int N, int J); williamr@4: void *sqlite3_wsd_find(void *K, int L); williamr@4: williamr@4: /* williamr@4: ** CAPI3REF: Status Parameters {H17250} williamr@4: ** EXPERIMENTAL williamr@4: ** williamr@4: ** These integer constants designate various run-time status parameters williamr@4: ** that can be returned by [sqlite3_status()]. williamr@4: ** williamr@4: **
williamr@4: **
SQLITE_STATUS_MEMORY_USED
williamr@4: **
This parameter is the current amount of memory checked out williamr@4: ** using [sqlite3_malloc()], either directly or indirectly. The williamr@4: ** figure includes calls made to [sqlite3_malloc()] by the application williamr@4: ** and internal memory usage by the SQLite library. Scratch memory williamr@4: ** controlled by [SQLITE_CONFIG_SCRATCH] and auxiliary page-cache williamr@4: ** memory controlled by [SQLITE_CONFIG_PAGECACHE] is not included in williamr@4: ** this parameter. The amount returned is the sum of the allocation williamr@4: ** sizes as reported by the xSize method in [sqlite3_mem_methods].
williamr@4: ** williamr@4: **
SQLITE_STATUS_MALLOC_SIZE
williamr@4: **
This parameter records the largest memory allocation request williamr@4: ** handed to [sqlite3_malloc()] or [sqlite3_realloc()] (or their williamr@4: ** internal equivalents). Only the value returned in the williamr@4: ** *pHighwater parameter to [sqlite3_status()] is of interest. williamr@4: ** The value written into the *pCurrent parameter is undefined.
williamr@4: ** williamr@4: **
SQLITE_STATUS_PAGECACHE_USED
williamr@4: **
This parameter returns the number of pages used out of the williamr@4: ** [pagecache memory allocator] that was configured using williamr@4: ** [SQLITE_CONFIG_PAGECACHE]. The williamr@4: ** value returned is in pages, not in bytes.
williamr@4: ** williamr@4: **
SQLITE_STATUS_PAGECACHE_OVERFLOW
williamr@4: **
This parameter returns the number of bytes of page cache williamr@4: ** allocation which could not be statisfied by the [SQLITE_CONFIG_PAGECACHE] williamr@4: ** buffer and where forced to overflow to [sqlite3_malloc()]. The williamr@4: ** returned value includes allocations that overflowed because they williamr@4: ** where too large (they were larger than the "sz" parameter to williamr@4: ** [SQLITE_CONFIG_PAGECACHE]) and allocations that overflowed because williamr@4: ** no space was left in the page cache.
williamr@4: ** williamr@4: **
SQLITE_STATUS_PAGECACHE_SIZE
williamr@4: **
This parameter records the largest memory allocation request williamr@4: ** handed to [pagecache memory allocator]. Only the value returned in the williamr@4: ** *pHighwater parameter to [sqlite3_status()] is of interest. williamr@4: ** The value written into the *pCurrent parameter is undefined.
williamr@4: ** williamr@4: **
SQLITE_STATUS_SCRATCH_USED
williamr@4: **
This parameter returns the number of allocations used out of the williamr@4: ** [scratch memory allocator] configured using williamr@4: ** [SQLITE_CONFIG_SCRATCH]. The value returned is in allocations, not williamr@4: ** in bytes. Since a single thread may only have one scratch allocation williamr@4: ** outstanding at time, this parameter also reports the number of threads williamr@4: ** using scratch memory at the same time.
williamr@4: ** williamr@4: **
SQLITE_STATUS_SCRATCH_OVERFLOW
williamr@4: **
This parameter returns the number of bytes of scratch memory williamr@4: ** allocation which could not be statisfied by the [SQLITE_CONFIG_SCRATCH] williamr@4: ** buffer and where forced to overflow to [sqlite3_malloc()]. The values williamr@4: ** returned include overflows because the requested allocation was too williamr@4: ** larger (that is, because the requested allocation was larger than the williamr@4: ** "sz" parameter to [SQLITE_CONFIG_SCRATCH]) and because no scratch buffer williamr@4: ** slots were available. williamr@4: **
williamr@4: ** williamr@4: **
SQLITE_STATUS_SCRATCH_SIZE
williamr@4: **
This parameter records the largest memory allocation request williamr@4: ** handed to [scratch memory allocator]. Only the value returned in the williamr@4: ** *pHighwater parameter to [sqlite3_status()] is of interest. williamr@4: ** The value written into the *pCurrent parameter is undefined.
williamr@4: ** williamr@4: **
SQLITE_STATUS_PARSER_STACK
williamr@4: **
This parameter records the deepest parser stack. It is only williamr@4: ** meaningful if SQLite is compiled with [YYTRACKMAXSTACKDEPTH].
williamr@4: **
williamr@4: ** williamr@4: ** New status parameters may be added from time to time. williamr@4: */ williamr@4: #define SQLITE_STATUS_MEMORY_USED 0 williamr@4: #define SQLITE_STATUS_PAGECACHE_USED 1 williamr@4: #define SQLITE_STATUS_PAGECACHE_OVERFLOW 2 williamr@4: #define SQLITE_STATUS_SCRATCH_USED 3 williamr@4: #define SQLITE_STATUS_SCRATCH_OVERFLOW 4 williamr@4: #define SQLITE_STATUS_MALLOC_SIZE 5 williamr@4: #define SQLITE_STATUS_PARSER_STACK 6 williamr@4: #define SQLITE_STATUS_PAGECACHE_SIZE 7 williamr@4: #define SQLITE_STATUS_SCRATCH_SIZE 8 williamr@4: williamr@4: /* williamr@4: ** CAPI3REF: Status Parameters for database connections {H17275} williamr@4: ** EXPERIMENTAL williamr@4: ** williamr@4: ** Status verbs for [sqlite3_db_status()]. williamr@4: ** williamr@4: **
williamr@4: **
SQLITE_DBSTATUS_LOOKASIDE_USED
williamr@4: **
This parameter returns the number of lookaside memory slots currently williamr@4: ** checked out.
williamr@4: **
williamr@4: */ williamr@4: #define SQLITE_DBSTATUS_LOOKASIDE_USED 0 williamr@4: williamr@4: /* williamr@4: ** Undo the hack that converts floating point types to integer for williamr@4: ** builds on processors without floating point support. williamr@4: */ williamr@4: #ifdef SQLITE_OMIT_FLOATING_POINT williamr@4: # undef double williamr@4: #endif williamr@4: williamr@4: #ifdef __cplusplus williamr@4: } /* End of the 'extern "C"' block */ williamr@4: #endif williamr@4: #endif