1*a3141fd3SAndroid Build Coastguard Worker /* 2*a3141fd3SAndroid Build Coastguard Worker ** 2001-09-15 3*a3141fd3SAndroid Build Coastguard Worker ** 4*a3141fd3SAndroid Build Coastguard Worker ** The author disclaims copyright to this source code. In place of 5*a3141fd3SAndroid Build Coastguard Worker ** a legal notice, here is a blessing: 6*a3141fd3SAndroid Build Coastguard Worker ** 7*a3141fd3SAndroid Build Coastguard Worker ** May you do good and not evil. 8*a3141fd3SAndroid Build Coastguard Worker ** May you find forgiveness for yourself and forgive others. 9*a3141fd3SAndroid Build Coastguard Worker ** May you share freely, never taking more than you give. 10*a3141fd3SAndroid Build Coastguard Worker ** 11*a3141fd3SAndroid Build Coastguard Worker ************************************************************************* 12*a3141fd3SAndroid Build Coastguard Worker ** This header file defines the interface that the SQLite library 13*a3141fd3SAndroid Build Coastguard Worker ** presents to client programs. If a C-function, structure, datatype, 14*a3141fd3SAndroid Build Coastguard Worker ** or constant definition does not appear in this file, then it is 15*a3141fd3SAndroid Build Coastguard Worker ** not a published API of SQLite, is subject to change without 16*a3141fd3SAndroid Build Coastguard Worker ** notice, and should not be referenced by programs that use SQLite. 17*a3141fd3SAndroid Build Coastguard Worker ** 18*a3141fd3SAndroid Build Coastguard Worker ** Some of the definitions that are in this file are marked as 19*a3141fd3SAndroid Build Coastguard Worker ** "experimental". Experimental interfaces are normally new 20*a3141fd3SAndroid Build Coastguard Worker ** features recently added to SQLite. We do not anticipate changes 21*a3141fd3SAndroid Build Coastguard Worker ** to experimental interfaces but reserve the right to make minor changes 22*a3141fd3SAndroid Build Coastguard Worker ** if experience from use "in the wild" suggest such changes are prudent. 23*a3141fd3SAndroid Build Coastguard Worker ** 24*a3141fd3SAndroid Build Coastguard Worker ** The official C-language API documentation for SQLite is derived 25*a3141fd3SAndroid Build Coastguard Worker ** from comments in this file. This file is the authoritative source 26*a3141fd3SAndroid Build Coastguard Worker ** on how SQLite interfaces are supposed to operate. 27*a3141fd3SAndroid Build Coastguard Worker ** 28*a3141fd3SAndroid Build Coastguard Worker ** The name of this file under configuration management is "sqlite.h.in". 29*a3141fd3SAndroid Build Coastguard Worker ** The makefile makes some minor changes to this file (such as inserting 30*a3141fd3SAndroid Build Coastguard Worker ** the version number) and changes its name to "sqlite3.h" as 31*a3141fd3SAndroid Build Coastguard Worker ** part of the build process. 32*a3141fd3SAndroid Build Coastguard Worker */ 33*a3141fd3SAndroid Build Coastguard Worker #ifndef SQLITE3_H 34*a3141fd3SAndroid Build Coastguard Worker #define SQLITE3_H 35*a3141fd3SAndroid Build Coastguard Worker #include <stdarg.h> /* Needed for the definition of va_list */ 36*a3141fd3SAndroid Build Coastguard Worker 37*a3141fd3SAndroid Build Coastguard Worker /* 38*a3141fd3SAndroid Build Coastguard Worker ** Make sure we can call this stuff from C++. 39*a3141fd3SAndroid Build Coastguard Worker */ 40*a3141fd3SAndroid Build Coastguard Worker #ifdef __cplusplus 41*a3141fd3SAndroid Build Coastguard Worker extern "C" { 42*a3141fd3SAndroid Build Coastguard Worker #endif 43*a3141fd3SAndroid Build Coastguard Worker 44*a3141fd3SAndroid Build Coastguard Worker 45*a3141fd3SAndroid Build Coastguard Worker /* 46*a3141fd3SAndroid Build Coastguard Worker ** Facilitate override of interface linkage and calling conventions. 47*a3141fd3SAndroid Build Coastguard Worker ** Be aware that these macros may not be used within this particular 48*a3141fd3SAndroid Build Coastguard Worker ** translation of the amalgamation and its associated header file. 49*a3141fd3SAndroid Build Coastguard Worker ** 50*a3141fd3SAndroid Build Coastguard Worker ** The SQLITE_EXTERN and SQLITE_API macros are used to instruct the 51*a3141fd3SAndroid Build Coastguard Worker ** compiler that the target identifier should have external linkage. 52*a3141fd3SAndroid Build Coastguard Worker ** 53*a3141fd3SAndroid Build Coastguard Worker ** The SQLITE_CDECL macro is used to set the calling convention for 54*a3141fd3SAndroid Build Coastguard Worker ** public functions that accept a variable number of arguments. 55*a3141fd3SAndroid Build Coastguard Worker ** 56*a3141fd3SAndroid Build Coastguard Worker ** The SQLITE_APICALL macro is used to set the calling convention for 57*a3141fd3SAndroid Build Coastguard Worker ** public functions that accept a fixed number of arguments. 58*a3141fd3SAndroid Build Coastguard Worker ** 59*a3141fd3SAndroid Build Coastguard Worker ** The SQLITE_STDCALL macro is no longer used and is now deprecated. 60*a3141fd3SAndroid Build Coastguard Worker ** 61*a3141fd3SAndroid Build Coastguard Worker ** The SQLITE_CALLBACK macro is used to set the calling convention for 62*a3141fd3SAndroid Build Coastguard Worker ** function pointers. 63*a3141fd3SAndroid Build Coastguard Worker ** 64*a3141fd3SAndroid Build Coastguard Worker ** The SQLITE_SYSAPI macro is used to set the calling convention for 65*a3141fd3SAndroid Build Coastguard Worker ** functions provided by the operating system. 66*a3141fd3SAndroid Build Coastguard Worker ** 67*a3141fd3SAndroid Build Coastguard Worker ** Currently, the SQLITE_CDECL, SQLITE_APICALL, SQLITE_CALLBACK, and 68*a3141fd3SAndroid Build Coastguard Worker ** SQLITE_SYSAPI macros are used only when building for environments 69*a3141fd3SAndroid Build Coastguard Worker ** that require non-default calling conventions. 70*a3141fd3SAndroid Build Coastguard Worker */ 71*a3141fd3SAndroid Build Coastguard Worker #ifndef SQLITE_EXTERN 72*a3141fd3SAndroid Build Coastguard Worker # define SQLITE_EXTERN extern 73*a3141fd3SAndroid Build Coastguard Worker #endif 74*a3141fd3SAndroid Build Coastguard Worker #ifndef SQLITE_API 75*a3141fd3SAndroid Build Coastguard Worker # define SQLITE_API 76*a3141fd3SAndroid Build Coastguard Worker #endif 77*a3141fd3SAndroid Build Coastguard Worker #ifndef SQLITE_CDECL 78*a3141fd3SAndroid Build Coastguard Worker # define SQLITE_CDECL 79*a3141fd3SAndroid Build Coastguard Worker #endif 80*a3141fd3SAndroid Build Coastguard Worker #ifndef SQLITE_APICALL 81*a3141fd3SAndroid Build Coastguard Worker # define SQLITE_APICALL 82*a3141fd3SAndroid Build Coastguard Worker #endif 83*a3141fd3SAndroid Build Coastguard Worker #ifndef SQLITE_STDCALL 84*a3141fd3SAndroid Build Coastguard Worker # define SQLITE_STDCALL SQLITE_APICALL 85*a3141fd3SAndroid Build Coastguard Worker #endif 86*a3141fd3SAndroid Build Coastguard Worker #ifndef SQLITE_CALLBACK 87*a3141fd3SAndroid Build Coastguard Worker # define SQLITE_CALLBACK 88*a3141fd3SAndroid Build Coastguard Worker #endif 89*a3141fd3SAndroid Build Coastguard Worker #ifndef SQLITE_SYSAPI 90*a3141fd3SAndroid Build Coastguard Worker # define SQLITE_SYSAPI 91*a3141fd3SAndroid Build Coastguard Worker #endif 92*a3141fd3SAndroid Build Coastguard Worker 93*a3141fd3SAndroid Build Coastguard Worker /* 94*a3141fd3SAndroid Build Coastguard Worker ** These no-op macros are used in front of interfaces to mark those 95*a3141fd3SAndroid Build Coastguard Worker ** interfaces as either deprecated or experimental. New applications 96*a3141fd3SAndroid Build Coastguard Worker ** should not use deprecated interfaces - they are supported for backwards 97*a3141fd3SAndroid Build Coastguard Worker ** compatibility only. Application writers should be aware that 98*a3141fd3SAndroid Build Coastguard Worker ** experimental interfaces are subject to change in point releases. 99*a3141fd3SAndroid Build Coastguard Worker ** 100*a3141fd3SAndroid Build Coastguard Worker ** These macros used to resolve to various kinds of compiler magic that 101*a3141fd3SAndroid Build Coastguard Worker ** would generate warning messages when they were used. But that 102*a3141fd3SAndroid Build Coastguard Worker ** compiler magic ended up generating such a flurry of bug reports 103*a3141fd3SAndroid Build Coastguard Worker ** that we have taken it all out and gone back to using simple 104*a3141fd3SAndroid Build Coastguard Worker ** noop macros. 105*a3141fd3SAndroid Build Coastguard Worker */ 106*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_DEPRECATED 107*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_EXPERIMENTAL 108*a3141fd3SAndroid Build Coastguard Worker 109*a3141fd3SAndroid Build Coastguard Worker /* 110*a3141fd3SAndroid Build Coastguard Worker ** Ensure these symbols were not defined by some previous header file. 111*a3141fd3SAndroid Build Coastguard Worker */ 112*a3141fd3SAndroid Build Coastguard Worker #ifdef SQLITE_VERSION 113*a3141fd3SAndroid Build Coastguard Worker # undef SQLITE_VERSION 114*a3141fd3SAndroid Build Coastguard Worker #endif 115*a3141fd3SAndroid Build Coastguard Worker #ifdef SQLITE_VERSION_NUMBER 116*a3141fd3SAndroid Build Coastguard Worker # undef SQLITE_VERSION_NUMBER 117*a3141fd3SAndroid Build Coastguard Worker #endif 118*a3141fd3SAndroid Build Coastguard Worker 119*a3141fd3SAndroid Build Coastguard Worker /* 120*a3141fd3SAndroid Build Coastguard Worker ** CAPI3REF: Compile-Time Library Version Numbers 121*a3141fd3SAndroid Build Coastguard Worker ** 122*a3141fd3SAndroid Build Coastguard Worker ** ^(The [SQLITE_VERSION] C preprocessor macro in the sqlite3.h header 123*a3141fd3SAndroid Build Coastguard Worker ** evaluates to a string literal that is the SQLite version in the 124*a3141fd3SAndroid Build Coastguard Worker ** format "X.Y.Z" where X is the major version number (always 3 for 125*a3141fd3SAndroid Build Coastguard Worker ** SQLite3) and Y is the minor version number and Z is the release number.)^ 126*a3141fd3SAndroid Build Coastguard Worker ** ^(The [SQLITE_VERSION_NUMBER] C preprocessor macro resolves to an integer 127*a3141fd3SAndroid Build Coastguard Worker ** with the value (X*1000000 + Y*1000 + Z) where X, Y, and Z are the same 128*a3141fd3SAndroid Build Coastguard Worker ** numbers used in [SQLITE_VERSION].)^ 129*a3141fd3SAndroid Build Coastguard Worker ** The SQLITE_VERSION_NUMBER for any given release of SQLite will also 130*a3141fd3SAndroid Build Coastguard Worker ** be larger than the release from which it is derived. Either Y will 131*a3141fd3SAndroid Build Coastguard Worker ** be held constant and Z will be incremented or else Y will be incremented 132*a3141fd3SAndroid Build Coastguard Worker ** and Z will be reset to zero. 133*a3141fd3SAndroid Build Coastguard Worker ** 134*a3141fd3SAndroid Build Coastguard Worker ** Since [version 3.6.18] ([dateof:3.6.18]), 135*a3141fd3SAndroid Build Coastguard Worker ** SQLite source code has been stored in the 136*a3141fd3SAndroid Build Coastguard Worker ** <a href="http://www.fossil-scm.org/">Fossil configuration management 137*a3141fd3SAndroid Build Coastguard Worker ** system</a>. ^The SQLITE_SOURCE_ID macro evaluates to 138*a3141fd3SAndroid Build Coastguard Worker ** a string which identifies a particular check-in of SQLite 139*a3141fd3SAndroid Build Coastguard Worker ** within its configuration management system. ^The SQLITE_SOURCE_ID 140*a3141fd3SAndroid Build Coastguard Worker ** string contains the date and time of the check-in (UTC) and a SHA1 141*a3141fd3SAndroid Build Coastguard Worker ** or SHA3-256 hash of the entire source tree. If the source code has 142*a3141fd3SAndroid Build Coastguard Worker ** been edited in any way since it was last checked in, then the last 143*a3141fd3SAndroid Build Coastguard Worker ** four hexadecimal digits of the hash may be modified. 144*a3141fd3SAndroid Build Coastguard Worker ** 145*a3141fd3SAndroid Build Coastguard Worker ** See also: [sqlite3_libversion()], 146*a3141fd3SAndroid Build Coastguard Worker ** [sqlite3_libversion_number()], [sqlite3_sourceid()], 147*a3141fd3SAndroid Build Coastguard Worker ** [sqlite_version()] and [sqlite_source_id()]. 148*a3141fd3SAndroid Build Coastguard Worker */ 149*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_VERSION "3.44.3" 150*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_VERSION_NUMBER 3044003 151*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_SOURCE_ID "2024-03-24 21:15:01 d68fb8b5dbb8305e00d2dd14d8fe6b3d9f67e2459102ff160d956a6b75ddc18e" 152*a3141fd3SAndroid Build Coastguard Worker 153*a3141fd3SAndroid Build Coastguard Worker /* 154*a3141fd3SAndroid Build Coastguard Worker ** CAPI3REF: Run-Time Library Version Numbers 155*a3141fd3SAndroid Build Coastguard Worker ** KEYWORDS: sqlite3_version sqlite3_sourceid 156*a3141fd3SAndroid Build Coastguard Worker ** 157*a3141fd3SAndroid Build Coastguard Worker ** These interfaces provide the same information as the [SQLITE_VERSION], 158*a3141fd3SAndroid Build Coastguard Worker ** [SQLITE_VERSION_NUMBER], and [SQLITE_SOURCE_ID] C preprocessor macros 159*a3141fd3SAndroid Build Coastguard Worker ** but are associated with the library instead of the header file. ^(Cautious 160*a3141fd3SAndroid Build Coastguard Worker ** programmers might include assert() statements in their application to 161*a3141fd3SAndroid Build Coastguard Worker ** verify that values returned by these interfaces match the macros in 162*a3141fd3SAndroid Build Coastguard Worker ** the header, and thus ensure that the application is 163*a3141fd3SAndroid Build Coastguard Worker ** compiled with matching library and header files. 164*a3141fd3SAndroid Build Coastguard Worker ** 165*a3141fd3SAndroid Build Coastguard Worker ** <blockquote><pre> 166*a3141fd3SAndroid Build Coastguard Worker ** assert( sqlite3_libversion_number()==SQLITE_VERSION_NUMBER ); 167*a3141fd3SAndroid Build Coastguard Worker ** assert( strncmp(sqlite3_sourceid(),SQLITE_SOURCE_ID,80)==0 ); 168*a3141fd3SAndroid Build Coastguard Worker ** assert( strcmp(sqlite3_libversion(),SQLITE_VERSION)==0 ); 169*a3141fd3SAndroid Build Coastguard Worker ** </pre></blockquote>)^ 170*a3141fd3SAndroid Build Coastguard Worker ** 171*a3141fd3SAndroid Build Coastguard Worker ** ^The sqlite3_version[] string constant contains the text of [SQLITE_VERSION] 172*a3141fd3SAndroid Build Coastguard Worker ** macro. ^The sqlite3_libversion() function returns a pointer to the 173*a3141fd3SAndroid Build Coastguard Worker ** to the sqlite3_version[] string constant. The sqlite3_libversion() 174*a3141fd3SAndroid Build Coastguard Worker ** function is provided for use in DLLs since DLL users usually do not have 175*a3141fd3SAndroid Build Coastguard Worker ** direct access to string constants within the DLL. ^The 176*a3141fd3SAndroid Build Coastguard Worker ** sqlite3_libversion_number() function returns an integer equal to 177*a3141fd3SAndroid Build Coastguard Worker ** [SQLITE_VERSION_NUMBER]. ^(The sqlite3_sourceid() function returns 178*a3141fd3SAndroid Build Coastguard Worker ** a pointer to a string constant whose value is the same as the 179*a3141fd3SAndroid Build Coastguard Worker ** [SQLITE_SOURCE_ID] C preprocessor macro. Except if SQLite is built 180*a3141fd3SAndroid Build Coastguard Worker ** using an edited copy of [the amalgamation], then the last four characters 181*a3141fd3SAndroid Build Coastguard Worker ** of the hash might be different from [SQLITE_SOURCE_ID].)^ 182*a3141fd3SAndroid Build Coastguard Worker ** 183*a3141fd3SAndroid Build Coastguard Worker ** See also: [sqlite_version()] and [sqlite_source_id()]. 184*a3141fd3SAndroid Build Coastguard Worker */ 185*a3141fd3SAndroid Build Coastguard Worker SQLITE_API SQLITE_EXTERN const char sqlite3_version[]; 186*a3141fd3SAndroid Build Coastguard Worker SQLITE_API const char *sqlite3_libversion(void); 187*a3141fd3SAndroid Build Coastguard Worker SQLITE_API const char *sqlite3_sourceid(void); 188*a3141fd3SAndroid Build Coastguard Worker SQLITE_API int sqlite3_libversion_number(void); 189*a3141fd3SAndroid Build Coastguard Worker 190*a3141fd3SAndroid Build Coastguard Worker /* 191*a3141fd3SAndroid Build Coastguard Worker ** CAPI3REF: Run-Time Library Compilation Options Diagnostics 192*a3141fd3SAndroid Build Coastguard Worker ** 193*a3141fd3SAndroid Build Coastguard Worker ** ^The sqlite3_compileoption_used() function returns 0 or 1 194*a3141fd3SAndroid Build Coastguard Worker ** indicating whether the specified option was defined at 195*a3141fd3SAndroid Build Coastguard Worker ** compile time. ^The SQLITE_ prefix may be omitted from the 196*a3141fd3SAndroid Build Coastguard Worker ** option name passed to sqlite3_compileoption_used(). 197*a3141fd3SAndroid Build Coastguard Worker ** 198*a3141fd3SAndroid Build Coastguard Worker ** ^The sqlite3_compileoption_get() function allows iterating 199*a3141fd3SAndroid Build Coastguard Worker ** over the list of options that were defined at compile time by 200*a3141fd3SAndroid Build Coastguard Worker ** returning the N-th compile time option string. ^If N is out of range, 201*a3141fd3SAndroid Build Coastguard Worker ** sqlite3_compileoption_get() returns a NULL pointer. ^The SQLITE_ 202*a3141fd3SAndroid Build Coastguard Worker ** prefix is omitted from any strings returned by 203*a3141fd3SAndroid Build Coastguard Worker ** sqlite3_compileoption_get(). 204*a3141fd3SAndroid Build Coastguard Worker ** 205*a3141fd3SAndroid Build Coastguard Worker ** ^Support for the diagnostic functions sqlite3_compileoption_used() 206*a3141fd3SAndroid Build Coastguard Worker ** and sqlite3_compileoption_get() may be omitted by specifying the 207*a3141fd3SAndroid Build Coastguard Worker ** [SQLITE_OMIT_COMPILEOPTION_DIAGS] option at compile time. 208*a3141fd3SAndroid Build Coastguard Worker ** 209*a3141fd3SAndroid Build Coastguard Worker ** See also: SQL functions [sqlite_compileoption_used()] and 210*a3141fd3SAndroid Build Coastguard Worker ** [sqlite_compileoption_get()] and the [compile_options pragma]. 211*a3141fd3SAndroid Build Coastguard Worker */ 212*a3141fd3SAndroid Build Coastguard Worker #ifndef SQLITE_OMIT_COMPILEOPTION_DIAGS 213*a3141fd3SAndroid Build Coastguard Worker SQLITE_API int sqlite3_compileoption_used(const char *zOptName); 214*a3141fd3SAndroid Build Coastguard Worker SQLITE_API const char *sqlite3_compileoption_get(int N); 215*a3141fd3SAndroid Build Coastguard Worker #else 216*a3141fd3SAndroid Build Coastguard Worker # define sqlite3_compileoption_used(X) 0 217*a3141fd3SAndroid Build Coastguard Worker # define sqlite3_compileoption_get(X) ((void*)0) 218*a3141fd3SAndroid Build Coastguard Worker #endif 219*a3141fd3SAndroid Build Coastguard Worker 220*a3141fd3SAndroid Build Coastguard Worker /* 221*a3141fd3SAndroid Build Coastguard Worker ** CAPI3REF: Test To See If The Library Is Threadsafe 222*a3141fd3SAndroid Build Coastguard Worker ** 223*a3141fd3SAndroid Build Coastguard Worker ** ^The sqlite3_threadsafe() function returns zero if and only if 224*a3141fd3SAndroid Build Coastguard Worker ** SQLite was compiled with mutexing code omitted due to the 225*a3141fd3SAndroid Build Coastguard Worker ** [SQLITE_THREADSAFE] compile-time option being set to 0. 226*a3141fd3SAndroid Build Coastguard Worker ** 227*a3141fd3SAndroid Build Coastguard Worker ** SQLite can be compiled with or without mutexes. When 228*a3141fd3SAndroid Build Coastguard Worker ** the [SQLITE_THREADSAFE] C preprocessor macro is 1 or 2, mutexes 229*a3141fd3SAndroid Build Coastguard Worker ** are enabled and SQLite is threadsafe. When the 230*a3141fd3SAndroid Build Coastguard Worker ** [SQLITE_THREADSAFE] macro is 0, 231*a3141fd3SAndroid Build Coastguard Worker ** the mutexes are omitted. Without the mutexes, it is not safe 232*a3141fd3SAndroid Build Coastguard Worker ** to use SQLite concurrently from more than one thread. 233*a3141fd3SAndroid Build Coastguard Worker ** 234*a3141fd3SAndroid Build Coastguard Worker ** Enabling mutexes incurs a measurable performance penalty. 235*a3141fd3SAndroid Build Coastguard Worker ** So if speed is of utmost importance, it makes sense to disable 236*a3141fd3SAndroid Build Coastguard Worker ** the mutexes. But for maximum safety, mutexes should be enabled. 237*a3141fd3SAndroid Build Coastguard Worker ** ^The default behavior is for mutexes to be enabled. 238*a3141fd3SAndroid Build Coastguard Worker ** 239*a3141fd3SAndroid Build Coastguard Worker ** This interface can be used by an application to make sure that the 240*a3141fd3SAndroid Build Coastguard Worker ** version of SQLite that it is linking against was compiled with 241*a3141fd3SAndroid Build Coastguard Worker ** the desired setting of the [SQLITE_THREADSAFE] macro. 242*a3141fd3SAndroid Build Coastguard Worker ** 243*a3141fd3SAndroid Build Coastguard Worker ** This interface only reports on the compile-time mutex setting 244*a3141fd3SAndroid Build Coastguard Worker ** of the [SQLITE_THREADSAFE] flag. If SQLite is compiled with 245*a3141fd3SAndroid Build Coastguard Worker ** SQLITE_THREADSAFE=1 or =2 then mutexes are enabled by default but 246*a3141fd3SAndroid Build Coastguard Worker ** can be fully or partially disabled using a call to [sqlite3_config()] 247*a3141fd3SAndroid Build Coastguard Worker ** with the verbs [SQLITE_CONFIG_SINGLETHREAD], [SQLITE_CONFIG_MULTITHREAD], 248*a3141fd3SAndroid Build Coastguard Worker ** or [SQLITE_CONFIG_SERIALIZED]. ^(The return value of the 249*a3141fd3SAndroid Build Coastguard Worker ** sqlite3_threadsafe() function shows only the compile-time setting of 250*a3141fd3SAndroid Build Coastguard Worker ** thread safety, not any run-time changes to that setting made by 251*a3141fd3SAndroid Build Coastguard Worker ** sqlite3_config(). In other words, the return value from sqlite3_threadsafe() 252*a3141fd3SAndroid Build Coastguard Worker ** is unchanged by calls to sqlite3_config().)^ 253*a3141fd3SAndroid Build Coastguard Worker ** 254*a3141fd3SAndroid Build Coastguard Worker ** See the [threading mode] documentation for additional information. 255*a3141fd3SAndroid Build Coastguard Worker */ 256*a3141fd3SAndroid Build Coastguard Worker SQLITE_API int sqlite3_threadsafe(void); 257*a3141fd3SAndroid Build Coastguard Worker 258*a3141fd3SAndroid Build Coastguard Worker /* 259*a3141fd3SAndroid Build Coastguard Worker ** CAPI3REF: Database Connection Handle 260*a3141fd3SAndroid Build Coastguard Worker ** KEYWORDS: {database connection} {database connections} 261*a3141fd3SAndroid Build Coastguard Worker ** 262*a3141fd3SAndroid Build Coastguard Worker ** Each open SQLite database is represented by a pointer to an instance of 263*a3141fd3SAndroid Build Coastguard Worker ** the opaque structure named "sqlite3". It is useful to think of an sqlite3 264*a3141fd3SAndroid Build Coastguard Worker ** pointer as an object. The [sqlite3_open()], [sqlite3_open16()], and 265*a3141fd3SAndroid Build Coastguard Worker ** [sqlite3_open_v2()] interfaces are its constructors, and [sqlite3_close()] 266*a3141fd3SAndroid Build Coastguard Worker ** and [sqlite3_close_v2()] are its destructors. There are many other 267*a3141fd3SAndroid Build Coastguard Worker ** interfaces (such as 268*a3141fd3SAndroid Build Coastguard Worker ** [sqlite3_prepare_v2()], [sqlite3_create_function()], and 269*a3141fd3SAndroid Build Coastguard Worker ** [sqlite3_busy_timeout()] to name but three) that are methods on an 270*a3141fd3SAndroid Build Coastguard Worker ** sqlite3 object. 271*a3141fd3SAndroid Build Coastguard Worker */ 272*a3141fd3SAndroid Build Coastguard Worker typedef struct sqlite3 sqlite3; 273*a3141fd3SAndroid Build Coastguard Worker 274*a3141fd3SAndroid Build Coastguard Worker /* 275*a3141fd3SAndroid Build Coastguard Worker ** CAPI3REF: 64-Bit Integer Types 276*a3141fd3SAndroid Build Coastguard Worker ** KEYWORDS: sqlite_int64 sqlite_uint64 277*a3141fd3SAndroid Build Coastguard Worker ** 278*a3141fd3SAndroid Build Coastguard Worker ** Because there is no cross-platform way to specify 64-bit integer types 279*a3141fd3SAndroid Build Coastguard Worker ** SQLite includes typedefs for 64-bit signed and unsigned integers. 280*a3141fd3SAndroid Build Coastguard Worker ** 281*a3141fd3SAndroid Build Coastguard Worker ** The sqlite3_int64 and sqlite3_uint64 are the preferred type definitions. 282*a3141fd3SAndroid Build Coastguard Worker ** The sqlite_int64 and sqlite_uint64 types are supported for backwards 283*a3141fd3SAndroid Build Coastguard Worker ** compatibility only. 284*a3141fd3SAndroid Build Coastguard Worker ** 285*a3141fd3SAndroid Build Coastguard Worker ** ^The sqlite3_int64 and sqlite_int64 types can store integer values 286*a3141fd3SAndroid Build Coastguard Worker ** between -9223372036854775808 and +9223372036854775807 inclusive. ^The 287*a3141fd3SAndroid Build Coastguard Worker ** sqlite3_uint64 and sqlite_uint64 types can store integer values 288*a3141fd3SAndroid Build Coastguard Worker ** between 0 and +18446744073709551615 inclusive. 289*a3141fd3SAndroid Build Coastguard Worker */ 290*a3141fd3SAndroid Build Coastguard Worker #ifdef SQLITE_INT64_TYPE 291*a3141fd3SAndroid Build Coastguard Worker typedef SQLITE_INT64_TYPE sqlite_int64; 292*a3141fd3SAndroid Build Coastguard Worker # ifdef SQLITE_UINT64_TYPE 293*a3141fd3SAndroid Build Coastguard Worker typedef SQLITE_UINT64_TYPE sqlite_uint64; 294*a3141fd3SAndroid Build Coastguard Worker # else 295*a3141fd3SAndroid Build Coastguard Worker typedef unsigned SQLITE_INT64_TYPE sqlite_uint64; 296*a3141fd3SAndroid Build Coastguard Worker # endif 297*a3141fd3SAndroid Build Coastguard Worker #elif defined(_MSC_VER) || defined(__BORLANDC__) 298*a3141fd3SAndroid Build Coastguard Worker typedef __int64 sqlite_int64; 299*a3141fd3SAndroid Build Coastguard Worker typedef unsigned __int64 sqlite_uint64; 300*a3141fd3SAndroid Build Coastguard Worker #else 301*a3141fd3SAndroid Build Coastguard Worker typedef long long int sqlite_int64; 302*a3141fd3SAndroid Build Coastguard Worker typedef unsigned long long int sqlite_uint64; 303*a3141fd3SAndroid Build Coastguard Worker #endif 304*a3141fd3SAndroid Build Coastguard Worker typedef sqlite_int64 sqlite3_int64; 305*a3141fd3SAndroid Build Coastguard Worker typedef sqlite_uint64 sqlite3_uint64; 306*a3141fd3SAndroid Build Coastguard Worker 307*a3141fd3SAndroid Build Coastguard Worker /* 308*a3141fd3SAndroid Build Coastguard Worker ** If compiling for a processor that lacks floating point support, 309*a3141fd3SAndroid Build Coastguard Worker ** substitute integer for floating-point. 310*a3141fd3SAndroid Build Coastguard Worker */ 311*a3141fd3SAndroid Build Coastguard Worker #ifdef SQLITE_OMIT_FLOATING_POINT 312*a3141fd3SAndroid Build Coastguard Worker # define double sqlite3_int64 313*a3141fd3SAndroid Build Coastguard Worker #endif 314*a3141fd3SAndroid Build Coastguard Worker 315*a3141fd3SAndroid Build Coastguard Worker /* 316*a3141fd3SAndroid Build Coastguard Worker ** CAPI3REF: Closing A Database Connection 317*a3141fd3SAndroid Build Coastguard Worker ** DESTRUCTOR: sqlite3 318*a3141fd3SAndroid Build Coastguard Worker ** 319*a3141fd3SAndroid Build Coastguard Worker ** ^The sqlite3_close() and sqlite3_close_v2() routines are destructors 320*a3141fd3SAndroid Build Coastguard Worker ** for the [sqlite3] object. 321*a3141fd3SAndroid Build Coastguard Worker ** ^Calls to sqlite3_close() and sqlite3_close_v2() return [SQLITE_OK] if 322*a3141fd3SAndroid Build Coastguard Worker ** the [sqlite3] object is successfully destroyed and all associated 323*a3141fd3SAndroid Build Coastguard Worker ** resources are deallocated. 324*a3141fd3SAndroid Build Coastguard Worker ** 325*a3141fd3SAndroid Build Coastguard Worker ** Ideally, applications should [sqlite3_finalize | finalize] all 326*a3141fd3SAndroid Build Coastguard Worker ** [prepared statements], [sqlite3_blob_close | close] all [BLOB handles], and 327*a3141fd3SAndroid Build Coastguard Worker ** [sqlite3_backup_finish | finish] all [sqlite3_backup] objects associated 328*a3141fd3SAndroid Build Coastguard Worker ** with the [sqlite3] object prior to attempting to close the object. 329*a3141fd3SAndroid Build Coastguard Worker ** ^If the database connection is associated with unfinalized prepared 330*a3141fd3SAndroid Build Coastguard Worker ** statements, BLOB handlers, and/or unfinished sqlite3_backup objects then 331*a3141fd3SAndroid Build Coastguard Worker ** sqlite3_close() will leave the database connection open and return 332*a3141fd3SAndroid Build Coastguard Worker ** [SQLITE_BUSY]. ^If sqlite3_close_v2() is called with unfinalized prepared 333*a3141fd3SAndroid Build Coastguard Worker ** statements, unclosed BLOB handlers, and/or unfinished sqlite3_backups, 334*a3141fd3SAndroid Build Coastguard Worker ** it returns [SQLITE_OK] regardless, but instead of deallocating the database 335*a3141fd3SAndroid Build Coastguard Worker ** connection immediately, it marks the database connection as an unusable 336*a3141fd3SAndroid Build Coastguard Worker ** "zombie" and makes arrangements to automatically deallocate the database 337*a3141fd3SAndroid Build Coastguard Worker ** connection after all prepared statements are finalized, all BLOB handles 338*a3141fd3SAndroid Build Coastguard Worker ** are closed, and all backups have finished. The sqlite3_close_v2() interface 339*a3141fd3SAndroid Build Coastguard Worker ** is intended for use with host languages that are garbage collected, and 340*a3141fd3SAndroid Build Coastguard Worker ** where the order in which destructors are called is arbitrary. 341*a3141fd3SAndroid Build Coastguard Worker ** 342*a3141fd3SAndroid Build Coastguard Worker ** ^If an [sqlite3] object is destroyed while a transaction is open, 343*a3141fd3SAndroid Build Coastguard Worker ** the transaction is automatically rolled back. 344*a3141fd3SAndroid Build Coastguard Worker ** 345*a3141fd3SAndroid Build Coastguard Worker ** The C parameter to [sqlite3_close(C)] and [sqlite3_close_v2(C)] 346*a3141fd3SAndroid Build Coastguard Worker ** must be either a NULL 347*a3141fd3SAndroid Build Coastguard Worker ** pointer or an [sqlite3] object pointer obtained 348*a3141fd3SAndroid Build Coastguard Worker ** from [sqlite3_open()], [sqlite3_open16()], or 349*a3141fd3SAndroid Build Coastguard Worker ** [sqlite3_open_v2()], and not previously closed. 350*a3141fd3SAndroid Build Coastguard Worker ** ^Calling sqlite3_close() or sqlite3_close_v2() with a NULL pointer 351*a3141fd3SAndroid Build Coastguard Worker ** argument is a harmless no-op. 352*a3141fd3SAndroid Build Coastguard Worker */ 353*a3141fd3SAndroid Build Coastguard Worker SQLITE_API int sqlite3_close(sqlite3*); 354*a3141fd3SAndroid Build Coastguard Worker SQLITE_API int sqlite3_close_v2(sqlite3*); 355*a3141fd3SAndroid Build Coastguard Worker 356*a3141fd3SAndroid Build Coastguard Worker /* 357*a3141fd3SAndroid Build Coastguard Worker ** The type for a callback function. 358*a3141fd3SAndroid Build Coastguard Worker ** This is legacy and deprecated. It is included for historical 359*a3141fd3SAndroid Build Coastguard Worker ** compatibility and is not documented. 360*a3141fd3SAndroid Build Coastguard Worker */ 361*a3141fd3SAndroid Build Coastguard Worker typedef int (*sqlite3_callback)(void*,int,char**, char**); 362*a3141fd3SAndroid Build Coastguard Worker 363*a3141fd3SAndroid Build Coastguard Worker /* 364*a3141fd3SAndroid Build Coastguard Worker ** CAPI3REF: One-Step Query Execution Interface 365*a3141fd3SAndroid Build Coastguard Worker ** METHOD: sqlite3 366*a3141fd3SAndroid Build Coastguard Worker ** 367*a3141fd3SAndroid Build Coastguard Worker ** The sqlite3_exec() interface is a convenience wrapper around 368*a3141fd3SAndroid Build Coastguard Worker ** [sqlite3_prepare_v2()], [sqlite3_step()], and [sqlite3_finalize()], 369*a3141fd3SAndroid Build Coastguard Worker ** that allows an application to run multiple statements of SQL 370*a3141fd3SAndroid Build Coastguard Worker ** without having to use a lot of C code. 371*a3141fd3SAndroid Build Coastguard Worker ** 372*a3141fd3SAndroid Build Coastguard Worker ** ^The sqlite3_exec() interface runs zero or more UTF-8 encoded, 373*a3141fd3SAndroid Build Coastguard Worker ** semicolon-separate SQL statements passed into its 2nd argument, 374*a3141fd3SAndroid Build Coastguard Worker ** in the context of the [database connection] passed in as its 1st 375*a3141fd3SAndroid Build Coastguard Worker ** argument. ^If the callback function of the 3rd argument to 376*a3141fd3SAndroid Build Coastguard Worker ** sqlite3_exec() is not NULL, then it is invoked for each result row 377*a3141fd3SAndroid Build Coastguard Worker ** coming out of the evaluated SQL statements. ^The 4th argument to 378*a3141fd3SAndroid Build Coastguard Worker ** sqlite3_exec() is relayed through to the 1st argument of each 379*a3141fd3SAndroid Build Coastguard Worker ** callback invocation. ^If the callback pointer to sqlite3_exec() 380*a3141fd3SAndroid Build Coastguard Worker ** is NULL, then no callback is ever invoked and result rows are 381*a3141fd3SAndroid Build Coastguard Worker ** ignored. 382*a3141fd3SAndroid Build Coastguard Worker ** 383*a3141fd3SAndroid Build Coastguard Worker ** ^If an error occurs while evaluating the SQL statements passed into 384*a3141fd3SAndroid Build Coastguard Worker ** sqlite3_exec(), then execution of the current statement stops and 385*a3141fd3SAndroid Build Coastguard Worker ** subsequent statements are skipped. ^If the 5th parameter to sqlite3_exec() 386*a3141fd3SAndroid Build Coastguard Worker ** is not NULL then any error message is written into memory obtained 387*a3141fd3SAndroid Build Coastguard Worker ** from [sqlite3_malloc()] and passed back through the 5th parameter. 388*a3141fd3SAndroid Build Coastguard Worker ** To avoid memory leaks, the application should invoke [sqlite3_free()] 389*a3141fd3SAndroid Build Coastguard Worker ** on error message strings returned through the 5th parameter of 390*a3141fd3SAndroid Build Coastguard Worker ** sqlite3_exec() after the error message string is no longer needed. 391*a3141fd3SAndroid Build Coastguard Worker ** ^If the 5th parameter to sqlite3_exec() is not NULL and no errors 392*a3141fd3SAndroid Build Coastguard Worker ** occur, then sqlite3_exec() sets the pointer in its 5th parameter to 393*a3141fd3SAndroid Build Coastguard Worker ** NULL before returning. 394*a3141fd3SAndroid Build Coastguard Worker ** 395*a3141fd3SAndroid Build Coastguard Worker ** ^If an sqlite3_exec() callback returns non-zero, the sqlite3_exec() 396*a3141fd3SAndroid Build Coastguard Worker ** routine returns SQLITE_ABORT without invoking the callback again and 397*a3141fd3SAndroid Build Coastguard Worker ** without running any subsequent SQL statements. 398*a3141fd3SAndroid Build Coastguard Worker ** 399*a3141fd3SAndroid Build Coastguard Worker ** ^The 2nd argument to the sqlite3_exec() callback function is the 400*a3141fd3SAndroid Build Coastguard Worker ** number of columns in the result. ^The 3rd argument to the sqlite3_exec() 401*a3141fd3SAndroid Build Coastguard Worker ** callback is an array of pointers to strings obtained as if from 402*a3141fd3SAndroid Build Coastguard Worker ** [sqlite3_column_text()], one for each column. ^If an element of a 403*a3141fd3SAndroid Build Coastguard Worker ** result row is NULL then the corresponding string pointer for the 404*a3141fd3SAndroid Build Coastguard Worker ** sqlite3_exec() callback is a NULL pointer. ^The 4th argument to the 405*a3141fd3SAndroid Build Coastguard Worker ** sqlite3_exec() callback is an array of pointers to strings where each 406*a3141fd3SAndroid Build Coastguard Worker ** entry represents the name of corresponding result column as obtained 407*a3141fd3SAndroid Build Coastguard Worker ** from [sqlite3_column_name()]. 408*a3141fd3SAndroid Build Coastguard Worker ** 409*a3141fd3SAndroid Build Coastguard Worker ** ^If the 2nd parameter to sqlite3_exec() is a NULL pointer, a pointer 410*a3141fd3SAndroid Build Coastguard Worker ** to an empty string, or a pointer that contains only whitespace and/or 411*a3141fd3SAndroid Build Coastguard Worker ** SQL comments, then no SQL statements are evaluated and the database 412*a3141fd3SAndroid Build Coastguard Worker ** is not changed. 413*a3141fd3SAndroid Build Coastguard Worker ** 414*a3141fd3SAndroid Build Coastguard Worker ** Restrictions: 415*a3141fd3SAndroid Build Coastguard Worker ** 416*a3141fd3SAndroid Build Coastguard Worker ** <ul> 417*a3141fd3SAndroid Build Coastguard Worker ** <li> The application must ensure that the 1st parameter to sqlite3_exec() 418*a3141fd3SAndroid Build Coastguard Worker ** is a valid and open [database connection]. 419*a3141fd3SAndroid Build Coastguard Worker ** <li> The application must not close the [database connection] specified by 420*a3141fd3SAndroid Build Coastguard Worker ** the 1st parameter to sqlite3_exec() while sqlite3_exec() is running. 421*a3141fd3SAndroid Build Coastguard Worker ** <li> The application must not modify the SQL statement text passed into 422*a3141fd3SAndroid Build Coastguard Worker ** the 2nd parameter of sqlite3_exec() while sqlite3_exec() is running. 423*a3141fd3SAndroid Build Coastguard Worker ** </ul> 424*a3141fd3SAndroid Build Coastguard Worker */ 425*a3141fd3SAndroid Build Coastguard Worker SQLITE_API int sqlite3_exec( 426*a3141fd3SAndroid Build Coastguard Worker sqlite3*, /* An open database */ 427*a3141fd3SAndroid Build Coastguard Worker const char *sql, /* SQL to be evaluated */ 428*a3141fd3SAndroid Build Coastguard Worker int (*callback)(void*,int,char**,char**), /* Callback function */ 429*a3141fd3SAndroid Build Coastguard Worker void *, /* 1st argument to callback */ 430*a3141fd3SAndroid Build Coastguard Worker char **errmsg /* Error msg written here */ 431*a3141fd3SAndroid Build Coastguard Worker ); 432*a3141fd3SAndroid Build Coastguard Worker 433*a3141fd3SAndroid Build Coastguard Worker /* 434*a3141fd3SAndroid Build Coastguard Worker ** CAPI3REF: Result Codes 435*a3141fd3SAndroid Build Coastguard Worker ** KEYWORDS: {result code definitions} 436*a3141fd3SAndroid Build Coastguard Worker ** 437*a3141fd3SAndroid Build Coastguard Worker ** Many SQLite functions return an integer result code from the set shown 438*a3141fd3SAndroid Build Coastguard Worker ** here in order to indicate success or failure. 439*a3141fd3SAndroid Build Coastguard Worker ** 440*a3141fd3SAndroid Build Coastguard Worker ** New error codes may be added in future versions of SQLite. 441*a3141fd3SAndroid Build Coastguard Worker ** 442*a3141fd3SAndroid Build Coastguard Worker ** See also: [extended result code definitions] 443*a3141fd3SAndroid Build Coastguard Worker */ 444*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_OK 0 /* Successful result */ 445*a3141fd3SAndroid Build Coastguard Worker /* beginning-of-error-codes */ 446*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_ERROR 1 /* Generic error */ 447*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_INTERNAL 2 /* Internal logic error in SQLite */ 448*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_PERM 3 /* Access permission denied */ 449*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_ABORT 4 /* Callback routine requested an abort */ 450*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_BUSY 5 /* The database file is locked */ 451*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_LOCKED 6 /* A table in the database is locked */ 452*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_NOMEM 7 /* A malloc() failed */ 453*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_READONLY 8 /* Attempt to write a readonly database */ 454*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_INTERRUPT 9 /* Operation terminated by sqlite3_interrupt()*/ 455*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_IOERR 10 /* Some kind of disk I/O error occurred */ 456*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_CORRUPT 11 /* The database disk image is malformed */ 457*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_NOTFOUND 12 /* Unknown opcode in sqlite3_file_control() */ 458*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_FULL 13 /* Insertion failed because database is full */ 459*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_CANTOPEN 14 /* Unable to open the database file */ 460*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_PROTOCOL 15 /* Database lock protocol error */ 461*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_EMPTY 16 /* Internal use only */ 462*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_SCHEMA 17 /* The database schema changed */ 463*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_TOOBIG 18 /* String or BLOB exceeds size limit */ 464*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_CONSTRAINT 19 /* Abort due to constraint violation */ 465*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_MISMATCH 20 /* Data type mismatch */ 466*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_MISUSE 21 /* Library used incorrectly */ 467*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_NOLFS 22 /* Uses OS features not supported on host */ 468*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_AUTH 23 /* Authorization denied */ 469*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_FORMAT 24 /* Not used */ 470*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_RANGE 25 /* 2nd parameter to sqlite3_bind out of range */ 471*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_NOTADB 26 /* File opened that is not a database file */ 472*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_NOTICE 27 /* Notifications from sqlite3_log() */ 473*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_WARNING 28 /* Warnings from sqlite3_log() */ 474*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_ROW 100 /* sqlite3_step() has another row ready */ 475*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_DONE 101 /* sqlite3_step() has finished executing */ 476*a3141fd3SAndroid Build Coastguard Worker /* end-of-error-codes */ 477*a3141fd3SAndroid Build Coastguard Worker 478*a3141fd3SAndroid Build Coastguard Worker /* 479*a3141fd3SAndroid Build Coastguard Worker ** CAPI3REF: Extended Result Codes 480*a3141fd3SAndroid Build Coastguard Worker ** KEYWORDS: {extended result code definitions} 481*a3141fd3SAndroid Build Coastguard Worker ** 482*a3141fd3SAndroid Build Coastguard Worker ** In its default configuration, SQLite API routines return one of 30 integer 483*a3141fd3SAndroid Build Coastguard Worker ** [result codes]. However, experience has shown that many of 484*a3141fd3SAndroid Build Coastguard Worker ** these result codes are too coarse-grained. They do not provide as 485*a3141fd3SAndroid Build Coastguard Worker ** much information about problems as programmers might like. In an effort to 486*a3141fd3SAndroid Build Coastguard Worker ** address this, newer versions of SQLite (version 3.3.8 [dateof:3.3.8] 487*a3141fd3SAndroid Build Coastguard Worker ** and later) include 488*a3141fd3SAndroid Build Coastguard Worker ** support for additional result codes that provide more detailed information 489*a3141fd3SAndroid Build Coastguard Worker ** about errors. These [extended result codes] are enabled or disabled 490*a3141fd3SAndroid Build Coastguard Worker ** on a per database connection basis using the 491*a3141fd3SAndroid Build Coastguard Worker ** [sqlite3_extended_result_codes()] API. Or, the extended code for 492*a3141fd3SAndroid Build Coastguard Worker ** the most recent error can be obtained using 493*a3141fd3SAndroid Build Coastguard Worker ** [sqlite3_extended_errcode()]. 494*a3141fd3SAndroid Build Coastguard Worker */ 495*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_ERROR_MISSING_COLLSEQ (SQLITE_ERROR | (1<<8)) 496*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_ERROR_RETRY (SQLITE_ERROR | (2<<8)) 497*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_ERROR_SNAPSHOT (SQLITE_ERROR | (3<<8)) 498*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_IOERR_READ (SQLITE_IOERR | (1<<8)) 499*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_IOERR_SHORT_READ (SQLITE_IOERR | (2<<8)) 500*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_IOERR_WRITE (SQLITE_IOERR | (3<<8)) 501*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_IOERR_FSYNC (SQLITE_IOERR | (4<<8)) 502*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_IOERR_DIR_FSYNC (SQLITE_IOERR | (5<<8)) 503*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_IOERR_TRUNCATE (SQLITE_IOERR | (6<<8)) 504*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_IOERR_FSTAT (SQLITE_IOERR | (7<<8)) 505*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_IOERR_UNLOCK (SQLITE_IOERR | (8<<8)) 506*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_IOERR_RDLOCK (SQLITE_IOERR | (9<<8)) 507*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_IOERR_DELETE (SQLITE_IOERR | (10<<8)) 508*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_IOERR_BLOCKED (SQLITE_IOERR | (11<<8)) 509*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_IOERR_NOMEM (SQLITE_IOERR | (12<<8)) 510*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_IOERR_ACCESS (SQLITE_IOERR | (13<<8)) 511*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_IOERR_CHECKRESERVEDLOCK (SQLITE_IOERR | (14<<8)) 512*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_IOERR_LOCK (SQLITE_IOERR | (15<<8)) 513*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_IOERR_CLOSE (SQLITE_IOERR | (16<<8)) 514*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_IOERR_DIR_CLOSE (SQLITE_IOERR | (17<<8)) 515*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_IOERR_SHMOPEN (SQLITE_IOERR | (18<<8)) 516*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_IOERR_SHMSIZE (SQLITE_IOERR | (19<<8)) 517*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_IOERR_SHMLOCK (SQLITE_IOERR | (20<<8)) 518*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_IOERR_SHMMAP (SQLITE_IOERR | (21<<8)) 519*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_IOERR_SEEK (SQLITE_IOERR | (22<<8)) 520*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_IOERR_DELETE_NOENT (SQLITE_IOERR | (23<<8)) 521*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_IOERR_MMAP (SQLITE_IOERR | (24<<8)) 522*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_IOERR_GETTEMPPATH (SQLITE_IOERR | (25<<8)) 523*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_IOERR_CONVPATH (SQLITE_IOERR | (26<<8)) 524*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_IOERR_VNODE (SQLITE_IOERR | (27<<8)) 525*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_IOERR_AUTH (SQLITE_IOERR | (28<<8)) 526*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_IOERR_BEGIN_ATOMIC (SQLITE_IOERR | (29<<8)) 527*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_IOERR_COMMIT_ATOMIC (SQLITE_IOERR | (30<<8)) 528*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_IOERR_ROLLBACK_ATOMIC (SQLITE_IOERR | (31<<8)) 529*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_IOERR_DATA (SQLITE_IOERR | (32<<8)) 530*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_IOERR_CORRUPTFS (SQLITE_IOERR | (33<<8)) 531*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_IOERR_IN_PAGE (SQLITE_IOERR | (34<<8)) 532*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_LOCKED_SHAREDCACHE (SQLITE_LOCKED | (1<<8)) 533*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_LOCKED_VTAB (SQLITE_LOCKED | (2<<8)) 534*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_BUSY_RECOVERY (SQLITE_BUSY | (1<<8)) 535*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_BUSY_SNAPSHOT (SQLITE_BUSY | (2<<8)) 536*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_BUSY_TIMEOUT (SQLITE_BUSY | (3<<8)) 537*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_CANTOPEN_NOTEMPDIR (SQLITE_CANTOPEN | (1<<8)) 538*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_CANTOPEN_ISDIR (SQLITE_CANTOPEN | (2<<8)) 539*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_CANTOPEN_FULLPATH (SQLITE_CANTOPEN | (3<<8)) 540*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_CANTOPEN_CONVPATH (SQLITE_CANTOPEN | (4<<8)) 541*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_CANTOPEN_DIRTYWAL (SQLITE_CANTOPEN | (5<<8)) /* Not Used */ 542*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_CANTOPEN_SYMLINK (SQLITE_CANTOPEN | (6<<8)) 543*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_CORRUPT_VTAB (SQLITE_CORRUPT | (1<<8)) 544*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_CORRUPT_SEQUENCE (SQLITE_CORRUPT | (2<<8)) 545*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_CORRUPT_INDEX (SQLITE_CORRUPT | (3<<8)) 546*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_READONLY_RECOVERY (SQLITE_READONLY | (1<<8)) 547*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_READONLY_CANTLOCK (SQLITE_READONLY | (2<<8)) 548*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_READONLY_ROLLBACK (SQLITE_READONLY | (3<<8)) 549*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_READONLY_DBMOVED (SQLITE_READONLY | (4<<8)) 550*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_READONLY_CANTINIT (SQLITE_READONLY | (5<<8)) 551*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_READONLY_DIRECTORY (SQLITE_READONLY | (6<<8)) 552*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_ABORT_ROLLBACK (SQLITE_ABORT | (2<<8)) 553*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_CONSTRAINT_CHECK (SQLITE_CONSTRAINT | (1<<8)) 554*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_CONSTRAINT_COMMITHOOK (SQLITE_CONSTRAINT | (2<<8)) 555*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_CONSTRAINT_FOREIGNKEY (SQLITE_CONSTRAINT | (3<<8)) 556*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_CONSTRAINT_FUNCTION (SQLITE_CONSTRAINT | (4<<8)) 557*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_CONSTRAINT_NOTNULL (SQLITE_CONSTRAINT | (5<<8)) 558*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_CONSTRAINT_PRIMARYKEY (SQLITE_CONSTRAINT | (6<<8)) 559*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_CONSTRAINT_TRIGGER (SQLITE_CONSTRAINT | (7<<8)) 560*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_CONSTRAINT_UNIQUE (SQLITE_CONSTRAINT | (8<<8)) 561*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_CONSTRAINT_VTAB (SQLITE_CONSTRAINT | (9<<8)) 562*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_CONSTRAINT_ROWID (SQLITE_CONSTRAINT |(10<<8)) 563*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_CONSTRAINT_PINNED (SQLITE_CONSTRAINT |(11<<8)) 564*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_CONSTRAINT_DATATYPE (SQLITE_CONSTRAINT |(12<<8)) 565*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_NOTICE_RECOVER_WAL (SQLITE_NOTICE | (1<<8)) 566*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_NOTICE_RECOVER_ROLLBACK (SQLITE_NOTICE | (2<<8)) 567*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_NOTICE_RBU (SQLITE_NOTICE | (3<<8)) 568*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_WARNING_AUTOINDEX (SQLITE_WARNING | (1<<8)) 569*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_AUTH_USER (SQLITE_AUTH | (1<<8)) 570*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_OK_LOAD_PERMANENTLY (SQLITE_OK | (1<<8)) 571*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_OK_SYMLINK (SQLITE_OK | (2<<8)) /* internal use only */ 572*a3141fd3SAndroid Build Coastguard Worker 573*a3141fd3SAndroid Build Coastguard Worker /* 574*a3141fd3SAndroid Build Coastguard Worker ** CAPI3REF: Flags For File Open Operations 575*a3141fd3SAndroid Build Coastguard Worker ** 576*a3141fd3SAndroid Build Coastguard Worker ** These bit values are intended for use in the 577*a3141fd3SAndroid Build Coastguard Worker ** 3rd parameter to the [sqlite3_open_v2()] interface and 578*a3141fd3SAndroid Build Coastguard Worker ** in the 4th parameter to the [sqlite3_vfs.xOpen] method. 579*a3141fd3SAndroid Build Coastguard Worker ** 580*a3141fd3SAndroid Build Coastguard Worker ** Only those flags marked as "Ok for sqlite3_open_v2()" may be 581*a3141fd3SAndroid Build Coastguard Worker ** used as the third argument to the [sqlite3_open_v2()] interface. 582*a3141fd3SAndroid Build Coastguard Worker ** The other flags have historically been ignored by sqlite3_open_v2(), 583*a3141fd3SAndroid Build Coastguard Worker ** though future versions of SQLite might change so that an error is 584*a3141fd3SAndroid Build Coastguard Worker ** raised if any of the disallowed bits are passed into sqlite3_open_v2(). 585*a3141fd3SAndroid Build Coastguard Worker ** Applications should not depend on the historical behavior. 586*a3141fd3SAndroid Build Coastguard Worker ** 587*a3141fd3SAndroid Build Coastguard Worker ** Note in particular that passing the SQLITE_OPEN_EXCLUSIVE flag into 588*a3141fd3SAndroid Build Coastguard Worker ** [sqlite3_open_v2()] does *not* cause the underlying database file 589*a3141fd3SAndroid Build Coastguard Worker ** to be opened using O_EXCL. Passing SQLITE_OPEN_EXCLUSIVE into 590*a3141fd3SAndroid Build Coastguard Worker ** [sqlite3_open_v2()] has historically be a no-op and might become an 591*a3141fd3SAndroid Build Coastguard Worker ** error in future versions of SQLite. 592*a3141fd3SAndroid Build Coastguard Worker */ 593*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_OPEN_READONLY 0x00000001 /* Ok for sqlite3_open_v2() */ 594*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_OPEN_READWRITE 0x00000002 /* Ok for sqlite3_open_v2() */ 595*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_OPEN_CREATE 0x00000004 /* Ok for sqlite3_open_v2() */ 596*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_OPEN_DELETEONCLOSE 0x00000008 /* VFS only */ 597*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_OPEN_EXCLUSIVE 0x00000010 /* VFS only */ 598*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_OPEN_AUTOPROXY 0x00000020 /* VFS only */ 599*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_OPEN_URI 0x00000040 /* Ok for sqlite3_open_v2() */ 600*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_OPEN_MEMORY 0x00000080 /* Ok for sqlite3_open_v2() */ 601*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_OPEN_MAIN_DB 0x00000100 /* VFS only */ 602*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_OPEN_TEMP_DB 0x00000200 /* VFS only */ 603*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_OPEN_TRANSIENT_DB 0x00000400 /* VFS only */ 604*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_OPEN_MAIN_JOURNAL 0x00000800 /* VFS only */ 605*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_OPEN_TEMP_JOURNAL 0x00001000 /* VFS only */ 606*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_OPEN_SUBJOURNAL 0x00002000 /* VFS only */ 607*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_OPEN_SUPER_JOURNAL 0x00004000 /* VFS only */ 608*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_OPEN_NOMUTEX 0x00008000 /* Ok for sqlite3_open_v2() */ 609*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_OPEN_FULLMUTEX 0x00010000 /* Ok for sqlite3_open_v2() */ 610*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_OPEN_SHAREDCACHE 0x00020000 /* Ok for sqlite3_open_v2() */ 611*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_OPEN_PRIVATECACHE 0x00040000 /* Ok for sqlite3_open_v2() */ 612*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_OPEN_WAL 0x00080000 /* VFS only */ 613*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_OPEN_NOFOLLOW 0x01000000 /* Ok for sqlite3_open_v2() */ 614*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_OPEN_EXRESCODE 0x02000000 /* Extended result codes */ 615*a3141fd3SAndroid Build Coastguard Worker 616*a3141fd3SAndroid Build Coastguard Worker /* Reserved: 0x00F00000 */ 617*a3141fd3SAndroid Build Coastguard Worker /* Legacy compatibility: */ 618*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_OPEN_MASTER_JOURNAL 0x00004000 /* VFS only */ 619*a3141fd3SAndroid Build Coastguard Worker 620*a3141fd3SAndroid Build Coastguard Worker 621*a3141fd3SAndroid Build Coastguard Worker /* 622*a3141fd3SAndroid Build Coastguard Worker ** CAPI3REF: Device Characteristics 623*a3141fd3SAndroid Build Coastguard Worker ** 624*a3141fd3SAndroid Build Coastguard Worker ** The xDeviceCharacteristics method of the [sqlite3_io_methods] 625*a3141fd3SAndroid Build Coastguard Worker ** object returns an integer which is a vector of these 626*a3141fd3SAndroid Build Coastguard Worker ** bit values expressing I/O characteristics of the mass storage 627*a3141fd3SAndroid Build Coastguard Worker ** device that holds the file that the [sqlite3_io_methods] 628*a3141fd3SAndroid Build Coastguard Worker ** refers to. 629*a3141fd3SAndroid Build Coastguard Worker ** 630*a3141fd3SAndroid Build Coastguard Worker ** The SQLITE_IOCAP_ATOMIC property means that all writes of 631*a3141fd3SAndroid Build Coastguard Worker ** any size are atomic. The SQLITE_IOCAP_ATOMICnnn values 632*a3141fd3SAndroid Build Coastguard Worker ** mean that writes of blocks that are nnn bytes in size and 633*a3141fd3SAndroid Build Coastguard Worker ** are aligned to an address which is an integer multiple of 634*a3141fd3SAndroid Build Coastguard Worker ** nnn are atomic. The SQLITE_IOCAP_SAFE_APPEND value means 635*a3141fd3SAndroid Build Coastguard Worker ** that when data is appended to a file, the data is appended 636*a3141fd3SAndroid Build Coastguard Worker ** first then the size of the file is extended, never the other 637*a3141fd3SAndroid Build Coastguard Worker ** way around. The SQLITE_IOCAP_SEQUENTIAL property means that 638*a3141fd3SAndroid Build Coastguard Worker ** information is written to disk in the same order as calls 639*a3141fd3SAndroid Build Coastguard Worker ** to xWrite(). The SQLITE_IOCAP_POWERSAFE_OVERWRITE property means that 640*a3141fd3SAndroid Build Coastguard Worker ** after reboot following a crash or power loss, the only bytes in a 641*a3141fd3SAndroid Build Coastguard Worker ** file that were written at the application level might have changed 642*a3141fd3SAndroid Build Coastguard Worker ** and that adjacent bytes, even bytes within the same sector are 643*a3141fd3SAndroid Build Coastguard Worker ** guaranteed to be unchanged. The SQLITE_IOCAP_UNDELETABLE_WHEN_OPEN 644*a3141fd3SAndroid Build Coastguard Worker ** flag indicates that a file cannot be deleted when open. The 645*a3141fd3SAndroid Build Coastguard Worker ** SQLITE_IOCAP_IMMUTABLE flag indicates that the file is on 646*a3141fd3SAndroid Build Coastguard Worker ** read-only media and cannot be changed even by processes with 647*a3141fd3SAndroid Build Coastguard Worker ** elevated privileges. 648*a3141fd3SAndroid Build Coastguard Worker ** 649*a3141fd3SAndroid Build Coastguard Worker ** The SQLITE_IOCAP_BATCH_ATOMIC property means that the underlying 650*a3141fd3SAndroid Build Coastguard Worker ** filesystem supports doing multiple write operations atomically when those 651*a3141fd3SAndroid Build Coastguard Worker ** write operations are bracketed by [SQLITE_FCNTL_BEGIN_ATOMIC_WRITE] and 652*a3141fd3SAndroid Build Coastguard Worker ** [SQLITE_FCNTL_COMMIT_ATOMIC_WRITE]. 653*a3141fd3SAndroid Build Coastguard Worker */ 654*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_IOCAP_ATOMIC 0x00000001 655*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_IOCAP_ATOMIC512 0x00000002 656*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_IOCAP_ATOMIC1K 0x00000004 657*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_IOCAP_ATOMIC2K 0x00000008 658*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_IOCAP_ATOMIC4K 0x00000010 659*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_IOCAP_ATOMIC8K 0x00000020 660*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_IOCAP_ATOMIC16K 0x00000040 661*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_IOCAP_ATOMIC32K 0x00000080 662*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_IOCAP_ATOMIC64K 0x00000100 663*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_IOCAP_SAFE_APPEND 0x00000200 664*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_IOCAP_SEQUENTIAL 0x00000400 665*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_IOCAP_UNDELETABLE_WHEN_OPEN 0x00000800 666*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_IOCAP_POWERSAFE_OVERWRITE 0x00001000 667*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_IOCAP_IMMUTABLE 0x00002000 668*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_IOCAP_BATCH_ATOMIC 0x00004000 669*a3141fd3SAndroid Build Coastguard Worker 670*a3141fd3SAndroid Build Coastguard Worker /* 671*a3141fd3SAndroid Build Coastguard Worker ** CAPI3REF: File Locking Levels 672*a3141fd3SAndroid Build Coastguard Worker ** 673*a3141fd3SAndroid Build Coastguard Worker ** SQLite uses one of these integer values as the second 674*a3141fd3SAndroid Build Coastguard Worker ** argument to calls it makes to the xLock() and xUnlock() methods 675*a3141fd3SAndroid Build Coastguard Worker ** of an [sqlite3_io_methods] object. These values are ordered from 676*a3141fd3SAndroid Build Coastguard Worker ** lest restrictive to most restrictive. 677*a3141fd3SAndroid Build Coastguard Worker ** 678*a3141fd3SAndroid Build Coastguard Worker ** The argument to xLock() is always SHARED or higher. The argument to 679*a3141fd3SAndroid Build Coastguard Worker ** xUnlock is either SHARED or NONE. 680*a3141fd3SAndroid Build Coastguard Worker */ 681*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_LOCK_NONE 0 /* xUnlock() only */ 682*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_LOCK_SHARED 1 /* xLock() or xUnlock() */ 683*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_LOCK_RESERVED 2 /* xLock() only */ 684*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_LOCK_PENDING 3 /* xLock() only */ 685*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_LOCK_EXCLUSIVE 4 /* xLock() only */ 686*a3141fd3SAndroid Build Coastguard Worker 687*a3141fd3SAndroid Build Coastguard Worker /* 688*a3141fd3SAndroid Build Coastguard Worker ** CAPI3REF: Synchronization Type Flags 689*a3141fd3SAndroid Build Coastguard Worker ** 690*a3141fd3SAndroid Build Coastguard Worker ** When SQLite invokes the xSync() method of an 691*a3141fd3SAndroid Build Coastguard Worker ** [sqlite3_io_methods] object it uses a combination of 692*a3141fd3SAndroid Build Coastguard Worker ** these integer values as the second argument. 693*a3141fd3SAndroid Build Coastguard Worker ** 694*a3141fd3SAndroid Build Coastguard Worker ** When the SQLITE_SYNC_DATAONLY flag is used, it means that the 695*a3141fd3SAndroid Build Coastguard Worker ** sync operation only needs to flush data to mass storage. Inode 696*a3141fd3SAndroid Build Coastguard Worker ** information need not be flushed. If the lower four bits of the flag 697*a3141fd3SAndroid Build Coastguard Worker ** equal SQLITE_SYNC_NORMAL, that means to use normal fsync() semantics. 698*a3141fd3SAndroid Build Coastguard Worker ** If the lower four bits equal SQLITE_SYNC_FULL, that means 699*a3141fd3SAndroid Build Coastguard Worker ** to use Mac OS X style fullsync instead of fsync(). 700*a3141fd3SAndroid Build Coastguard Worker ** 701*a3141fd3SAndroid Build Coastguard Worker ** Do not confuse the SQLITE_SYNC_NORMAL and SQLITE_SYNC_FULL flags 702*a3141fd3SAndroid Build Coastguard Worker ** with the [PRAGMA synchronous]=NORMAL and [PRAGMA synchronous]=FULL 703*a3141fd3SAndroid Build Coastguard Worker ** settings. The [synchronous pragma] determines when calls to the 704*a3141fd3SAndroid Build Coastguard Worker ** xSync VFS method occur and applies uniformly across all platforms. 705*a3141fd3SAndroid Build Coastguard Worker ** The SQLITE_SYNC_NORMAL and SQLITE_SYNC_FULL flags determine how 706*a3141fd3SAndroid Build Coastguard Worker ** energetic or rigorous or forceful the sync operations are and 707*a3141fd3SAndroid Build Coastguard Worker ** only make a difference on Mac OSX for the default SQLite code. 708*a3141fd3SAndroid Build Coastguard Worker ** (Third-party VFS implementations might also make the distinction 709*a3141fd3SAndroid Build Coastguard Worker ** between SQLITE_SYNC_NORMAL and SQLITE_SYNC_FULL, but among the 710*a3141fd3SAndroid Build Coastguard Worker ** operating systems natively supported by SQLite, only Mac OSX 711*a3141fd3SAndroid Build Coastguard Worker ** cares about the difference.) 712*a3141fd3SAndroid Build Coastguard Worker */ 713*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_SYNC_NORMAL 0x00002 714*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_SYNC_FULL 0x00003 715*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_SYNC_DATAONLY 0x00010 716*a3141fd3SAndroid Build Coastguard Worker 717*a3141fd3SAndroid Build Coastguard Worker /* 718*a3141fd3SAndroid Build Coastguard Worker ** CAPI3REF: OS Interface Open File Handle 719*a3141fd3SAndroid Build Coastguard Worker ** 720*a3141fd3SAndroid Build Coastguard Worker ** An [sqlite3_file] object represents an open file in the 721*a3141fd3SAndroid Build Coastguard Worker ** [sqlite3_vfs | OS interface layer]. Individual OS interface 722*a3141fd3SAndroid Build Coastguard Worker ** implementations will 723*a3141fd3SAndroid Build Coastguard Worker ** want to subclass this object by appending additional fields 724*a3141fd3SAndroid Build Coastguard Worker ** for their own use. The pMethods entry is a pointer to an 725*a3141fd3SAndroid Build Coastguard Worker ** [sqlite3_io_methods] object that defines methods for performing 726*a3141fd3SAndroid Build Coastguard Worker ** I/O operations on the open file. 727*a3141fd3SAndroid Build Coastguard Worker */ 728*a3141fd3SAndroid Build Coastguard Worker typedef struct sqlite3_file sqlite3_file; 729*a3141fd3SAndroid Build Coastguard Worker struct sqlite3_file { 730*a3141fd3SAndroid Build Coastguard Worker const struct sqlite3_io_methods *pMethods; /* Methods for an open file */ 731*a3141fd3SAndroid Build Coastguard Worker }; 732*a3141fd3SAndroid Build Coastguard Worker 733*a3141fd3SAndroid Build Coastguard Worker /* 734*a3141fd3SAndroid Build Coastguard Worker ** CAPI3REF: OS Interface File Virtual Methods Object 735*a3141fd3SAndroid Build Coastguard Worker ** 736*a3141fd3SAndroid Build Coastguard Worker ** Every file opened by the [sqlite3_vfs.xOpen] method populates an 737*a3141fd3SAndroid Build Coastguard Worker ** [sqlite3_file] object (or, more commonly, a subclass of the 738*a3141fd3SAndroid Build Coastguard Worker ** [sqlite3_file] object) with a pointer to an instance of this object. 739*a3141fd3SAndroid Build Coastguard Worker ** This object defines the methods used to perform various operations 740*a3141fd3SAndroid Build Coastguard Worker ** against the open file represented by the [sqlite3_file] object. 741*a3141fd3SAndroid Build Coastguard Worker ** 742*a3141fd3SAndroid Build Coastguard Worker ** If the [sqlite3_vfs.xOpen] method sets the sqlite3_file.pMethods element 743*a3141fd3SAndroid Build Coastguard Worker ** to a non-NULL pointer, then the sqlite3_io_methods.xClose method 744*a3141fd3SAndroid Build Coastguard Worker ** may be invoked even if the [sqlite3_vfs.xOpen] reported that it failed. The 745*a3141fd3SAndroid Build Coastguard Worker ** only way to prevent a call to xClose following a failed [sqlite3_vfs.xOpen] 746*a3141fd3SAndroid Build Coastguard Worker ** is for the [sqlite3_vfs.xOpen] to set the sqlite3_file.pMethods element 747*a3141fd3SAndroid Build Coastguard Worker ** to NULL. 748*a3141fd3SAndroid Build Coastguard Worker ** 749*a3141fd3SAndroid Build Coastguard Worker ** The flags argument to xSync may be one of [SQLITE_SYNC_NORMAL] or 750*a3141fd3SAndroid Build Coastguard Worker ** [SQLITE_SYNC_FULL]. The first choice is the normal fsync(). 751*a3141fd3SAndroid Build Coastguard Worker ** The second choice is a Mac OS X style fullsync. The [SQLITE_SYNC_DATAONLY] 752*a3141fd3SAndroid Build Coastguard Worker ** flag may be ORed in to indicate that only the data of the file 753*a3141fd3SAndroid Build Coastguard Worker ** and not its inode needs to be synced. 754*a3141fd3SAndroid Build Coastguard Worker ** 755*a3141fd3SAndroid Build Coastguard Worker ** The integer values to xLock() and xUnlock() are one of 756*a3141fd3SAndroid Build Coastguard Worker ** <ul> 757*a3141fd3SAndroid Build Coastguard Worker ** <li> [SQLITE_LOCK_NONE], 758*a3141fd3SAndroid Build Coastguard Worker ** <li> [SQLITE_LOCK_SHARED], 759*a3141fd3SAndroid Build Coastguard Worker ** <li> [SQLITE_LOCK_RESERVED], 760*a3141fd3SAndroid Build Coastguard Worker ** <li> [SQLITE_LOCK_PENDING], or 761*a3141fd3SAndroid Build Coastguard Worker ** <li> [SQLITE_LOCK_EXCLUSIVE]. 762*a3141fd3SAndroid Build Coastguard Worker ** </ul> 763*a3141fd3SAndroid Build Coastguard Worker ** xLock() upgrades the database file lock. In other words, xLock() moves the 764*a3141fd3SAndroid Build Coastguard Worker ** database file lock in the direction NONE toward EXCLUSIVE. The argument to 765*a3141fd3SAndroid Build Coastguard Worker ** xLock() is always on of SHARED, RESERVED, PENDING, or EXCLUSIVE, never 766*a3141fd3SAndroid Build Coastguard Worker ** SQLITE_LOCK_NONE. If the database file lock is already at or above the 767*a3141fd3SAndroid Build Coastguard Worker ** requested lock, then the call to xLock() is a no-op. 768*a3141fd3SAndroid Build Coastguard Worker ** xUnlock() downgrades the database file lock to either SHARED or NONE. 769*a3141fd3SAndroid Build Coastguard Worker * If the lock is already at or below the requested lock state, then the call 770*a3141fd3SAndroid Build Coastguard Worker ** to xUnlock() is a no-op. 771*a3141fd3SAndroid Build Coastguard Worker ** The xCheckReservedLock() method checks whether any database connection, 772*a3141fd3SAndroid Build Coastguard Worker ** either in this process or in some other process, is holding a RESERVED, 773*a3141fd3SAndroid Build Coastguard Worker ** PENDING, or EXCLUSIVE lock on the file. It returns true 774*a3141fd3SAndroid Build Coastguard Worker ** if such a lock exists and false otherwise. 775*a3141fd3SAndroid Build Coastguard Worker ** 776*a3141fd3SAndroid Build Coastguard Worker ** The xFileControl() method is a generic interface that allows custom 777*a3141fd3SAndroid Build Coastguard Worker ** VFS implementations to directly control an open file using the 778*a3141fd3SAndroid Build Coastguard Worker ** [sqlite3_file_control()] interface. The second "op" argument is an 779*a3141fd3SAndroid Build Coastguard Worker ** integer opcode. The third argument is a generic pointer intended to 780*a3141fd3SAndroid Build Coastguard Worker ** point to a structure that may contain arguments or space in which to 781*a3141fd3SAndroid Build Coastguard Worker ** write return values. Potential uses for xFileControl() might be 782*a3141fd3SAndroid Build Coastguard Worker ** functions to enable blocking locks with timeouts, to change the 783*a3141fd3SAndroid Build Coastguard Worker ** locking strategy (for example to use dot-file locks), to inquire 784*a3141fd3SAndroid Build Coastguard Worker ** about the status of a lock, or to break stale locks. The SQLite 785*a3141fd3SAndroid Build Coastguard Worker ** core reserves all opcodes less than 100 for its own use. 786*a3141fd3SAndroid Build Coastguard Worker ** A [file control opcodes | list of opcodes] less than 100 is available. 787*a3141fd3SAndroid Build Coastguard Worker ** Applications that define a custom xFileControl method should use opcodes 788*a3141fd3SAndroid Build Coastguard Worker ** greater than 100 to avoid conflicts. VFS implementations should 789*a3141fd3SAndroid Build Coastguard Worker ** return [SQLITE_NOTFOUND] for file control opcodes that they do not 790*a3141fd3SAndroid Build Coastguard Worker ** recognize. 791*a3141fd3SAndroid Build Coastguard Worker ** 792*a3141fd3SAndroid Build Coastguard Worker ** The xSectorSize() method returns the sector size of the 793*a3141fd3SAndroid Build Coastguard Worker ** device that underlies the file. The sector size is the 794*a3141fd3SAndroid Build Coastguard Worker ** minimum write that can be performed without disturbing 795*a3141fd3SAndroid Build Coastguard Worker ** other bytes in the file. The xDeviceCharacteristics() 796*a3141fd3SAndroid Build Coastguard Worker ** method returns a bit vector describing behaviors of the 797*a3141fd3SAndroid Build Coastguard Worker ** underlying device: 798*a3141fd3SAndroid Build Coastguard Worker ** 799*a3141fd3SAndroid Build Coastguard Worker ** <ul> 800*a3141fd3SAndroid Build Coastguard Worker ** <li> [SQLITE_IOCAP_ATOMIC] 801*a3141fd3SAndroid Build Coastguard Worker ** <li> [SQLITE_IOCAP_ATOMIC512] 802*a3141fd3SAndroid Build Coastguard Worker ** <li> [SQLITE_IOCAP_ATOMIC1K] 803*a3141fd3SAndroid Build Coastguard Worker ** <li> [SQLITE_IOCAP_ATOMIC2K] 804*a3141fd3SAndroid Build Coastguard Worker ** <li> [SQLITE_IOCAP_ATOMIC4K] 805*a3141fd3SAndroid Build Coastguard Worker ** <li> [SQLITE_IOCAP_ATOMIC8K] 806*a3141fd3SAndroid Build Coastguard Worker ** <li> [SQLITE_IOCAP_ATOMIC16K] 807*a3141fd3SAndroid Build Coastguard Worker ** <li> [SQLITE_IOCAP_ATOMIC32K] 808*a3141fd3SAndroid Build Coastguard Worker ** <li> [SQLITE_IOCAP_ATOMIC64K] 809*a3141fd3SAndroid Build Coastguard Worker ** <li> [SQLITE_IOCAP_SAFE_APPEND] 810*a3141fd3SAndroid Build Coastguard Worker ** <li> [SQLITE_IOCAP_SEQUENTIAL] 811*a3141fd3SAndroid Build Coastguard Worker ** <li> [SQLITE_IOCAP_UNDELETABLE_WHEN_OPEN] 812*a3141fd3SAndroid Build Coastguard Worker ** <li> [SQLITE_IOCAP_POWERSAFE_OVERWRITE] 813*a3141fd3SAndroid Build Coastguard Worker ** <li> [SQLITE_IOCAP_IMMUTABLE] 814*a3141fd3SAndroid Build Coastguard Worker ** <li> [SQLITE_IOCAP_BATCH_ATOMIC] 815*a3141fd3SAndroid Build Coastguard Worker ** </ul> 816*a3141fd3SAndroid Build Coastguard Worker ** 817*a3141fd3SAndroid Build Coastguard Worker ** The SQLITE_IOCAP_ATOMIC property means that all writes of 818*a3141fd3SAndroid Build Coastguard Worker ** any size are atomic. The SQLITE_IOCAP_ATOMICnnn values 819*a3141fd3SAndroid Build Coastguard Worker ** mean that writes of blocks that are nnn bytes in size and 820*a3141fd3SAndroid Build Coastguard Worker ** are aligned to an address which is an integer multiple of 821*a3141fd3SAndroid Build Coastguard Worker ** nnn are atomic. The SQLITE_IOCAP_SAFE_APPEND value means 822*a3141fd3SAndroid Build Coastguard Worker ** that when data is appended to a file, the data is appended 823*a3141fd3SAndroid Build Coastguard Worker ** first then the size of the file is extended, never the other 824*a3141fd3SAndroid Build Coastguard Worker ** way around. The SQLITE_IOCAP_SEQUENTIAL property means that 825*a3141fd3SAndroid Build Coastguard Worker ** information is written to disk in the same order as calls 826*a3141fd3SAndroid Build Coastguard Worker ** to xWrite(). 827*a3141fd3SAndroid Build Coastguard Worker ** 828*a3141fd3SAndroid Build Coastguard Worker ** If xRead() returns SQLITE_IOERR_SHORT_READ it must also fill 829*a3141fd3SAndroid Build Coastguard Worker ** in the unread portions of the buffer with zeros. A VFS that 830*a3141fd3SAndroid Build Coastguard Worker ** fails to zero-fill short reads might seem to work. However, 831*a3141fd3SAndroid Build Coastguard Worker ** failure to zero-fill short reads will eventually lead to 832*a3141fd3SAndroid Build Coastguard Worker ** database corruption. 833*a3141fd3SAndroid Build Coastguard Worker */ 834*a3141fd3SAndroid Build Coastguard Worker typedef struct sqlite3_io_methods sqlite3_io_methods; 835*a3141fd3SAndroid Build Coastguard Worker struct sqlite3_io_methods { 836*a3141fd3SAndroid Build Coastguard Worker int iVersion; 837*a3141fd3SAndroid Build Coastguard Worker int (*xClose)(sqlite3_file*); 838*a3141fd3SAndroid Build Coastguard Worker int (*xRead)(sqlite3_file*, void*, int iAmt, sqlite3_int64 iOfst); 839*a3141fd3SAndroid Build Coastguard Worker int (*xWrite)(sqlite3_file*, const void*, int iAmt, sqlite3_int64 iOfst); 840*a3141fd3SAndroid Build Coastguard Worker int (*xTruncate)(sqlite3_file*, sqlite3_int64 size); 841*a3141fd3SAndroid Build Coastguard Worker int (*xSync)(sqlite3_file*, int flags); 842*a3141fd3SAndroid Build Coastguard Worker int (*xFileSize)(sqlite3_file*, sqlite3_int64 *pSize); 843*a3141fd3SAndroid Build Coastguard Worker int (*xLock)(sqlite3_file*, int); 844*a3141fd3SAndroid Build Coastguard Worker int (*xUnlock)(sqlite3_file*, int); 845*a3141fd3SAndroid Build Coastguard Worker int (*xCheckReservedLock)(sqlite3_file*, int *pResOut); 846*a3141fd3SAndroid Build Coastguard Worker int (*xFileControl)(sqlite3_file*, int op, void *pArg); 847*a3141fd3SAndroid Build Coastguard Worker int (*xSectorSize)(sqlite3_file*); 848*a3141fd3SAndroid Build Coastguard Worker int (*xDeviceCharacteristics)(sqlite3_file*); 849*a3141fd3SAndroid Build Coastguard Worker /* Methods above are valid for version 1 */ 850*a3141fd3SAndroid Build Coastguard Worker int (*xShmMap)(sqlite3_file*, int iPg, int pgsz, int, void volatile**); 851*a3141fd3SAndroid Build Coastguard Worker int (*xShmLock)(sqlite3_file*, int offset, int n, int flags); 852*a3141fd3SAndroid Build Coastguard Worker void (*xShmBarrier)(sqlite3_file*); 853*a3141fd3SAndroid Build Coastguard Worker int (*xShmUnmap)(sqlite3_file*, int deleteFlag); 854*a3141fd3SAndroid Build Coastguard Worker /* Methods above are valid for version 2 */ 855*a3141fd3SAndroid Build Coastguard Worker int (*xFetch)(sqlite3_file*, sqlite3_int64 iOfst, int iAmt, void **pp); 856*a3141fd3SAndroid Build Coastguard Worker int (*xUnfetch)(sqlite3_file*, sqlite3_int64 iOfst, void *p); 857*a3141fd3SAndroid Build Coastguard Worker /* Methods above are valid for version 3 */ 858*a3141fd3SAndroid Build Coastguard Worker /* Additional methods may be added in future releases */ 859*a3141fd3SAndroid Build Coastguard Worker }; 860*a3141fd3SAndroid Build Coastguard Worker 861*a3141fd3SAndroid Build Coastguard Worker /* 862*a3141fd3SAndroid Build Coastguard Worker ** CAPI3REF: Standard File Control Opcodes 863*a3141fd3SAndroid Build Coastguard Worker ** KEYWORDS: {file control opcodes} {file control opcode} 864*a3141fd3SAndroid Build Coastguard Worker ** 865*a3141fd3SAndroid Build Coastguard Worker ** These integer constants are opcodes for the xFileControl method 866*a3141fd3SAndroid Build Coastguard Worker ** of the [sqlite3_io_methods] object and for the [sqlite3_file_control()] 867*a3141fd3SAndroid Build Coastguard Worker ** interface. 868*a3141fd3SAndroid Build Coastguard Worker ** 869*a3141fd3SAndroid Build Coastguard Worker ** <ul> 870*a3141fd3SAndroid Build Coastguard Worker ** <li>[[SQLITE_FCNTL_LOCKSTATE]] 871*a3141fd3SAndroid Build Coastguard Worker ** The [SQLITE_FCNTL_LOCKSTATE] opcode is used for debugging. This 872*a3141fd3SAndroid Build Coastguard Worker ** opcode causes the xFileControl method to write the current state of 873*a3141fd3SAndroid Build Coastguard Worker ** the lock (one of [SQLITE_LOCK_NONE], [SQLITE_LOCK_SHARED], 874*a3141fd3SAndroid Build Coastguard Worker ** [SQLITE_LOCK_RESERVED], [SQLITE_LOCK_PENDING], or [SQLITE_LOCK_EXCLUSIVE]) 875*a3141fd3SAndroid Build Coastguard Worker ** into an integer that the pArg argument points to. 876*a3141fd3SAndroid Build Coastguard Worker ** This capability is only available if SQLite is compiled with [SQLITE_DEBUG]. 877*a3141fd3SAndroid Build Coastguard Worker ** 878*a3141fd3SAndroid Build Coastguard Worker ** <li>[[SQLITE_FCNTL_SIZE_HINT]] 879*a3141fd3SAndroid Build Coastguard Worker ** The [SQLITE_FCNTL_SIZE_HINT] opcode is used by SQLite to give the VFS 880*a3141fd3SAndroid Build Coastguard Worker ** layer a hint of how large the database file will grow to be during the 881*a3141fd3SAndroid Build Coastguard Worker ** current transaction. This hint is not guaranteed to be accurate but it 882*a3141fd3SAndroid Build Coastguard Worker ** is often close. The underlying VFS might choose to preallocate database 883*a3141fd3SAndroid Build Coastguard Worker ** file space based on this hint in order to help writes to the database 884*a3141fd3SAndroid Build Coastguard Worker ** file run faster. 885*a3141fd3SAndroid Build Coastguard Worker ** 886*a3141fd3SAndroid Build Coastguard Worker ** <li>[[SQLITE_FCNTL_SIZE_LIMIT]] 887*a3141fd3SAndroid Build Coastguard Worker ** The [SQLITE_FCNTL_SIZE_LIMIT] opcode is used by in-memory VFS that 888*a3141fd3SAndroid Build Coastguard Worker ** implements [sqlite3_deserialize()] to set an upper bound on the size 889*a3141fd3SAndroid Build Coastguard Worker ** of the in-memory database. The argument is a pointer to a [sqlite3_int64]. 890*a3141fd3SAndroid Build Coastguard Worker ** If the integer pointed to is negative, then it is filled in with the 891*a3141fd3SAndroid Build Coastguard Worker ** current limit. Otherwise the limit is set to the larger of the value 892*a3141fd3SAndroid Build Coastguard Worker ** of the integer pointed to and the current database size. The integer 893*a3141fd3SAndroid Build Coastguard Worker ** pointed to is set to the new limit. 894*a3141fd3SAndroid Build Coastguard Worker ** 895*a3141fd3SAndroid Build Coastguard Worker ** <li>[[SQLITE_FCNTL_CHUNK_SIZE]] 896*a3141fd3SAndroid Build Coastguard Worker ** The [SQLITE_FCNTL_CHUNK_SIZE] opcode is used to request that the VFS 897*a3141fd3SAndroid Build Coastguard Worker ** extends and truncates the database file in chunks of a size specified 898*a3141fd3SAndroid Build Coastguard Worker ** by the user. The fourth argument to [sqlite3_file_control()] should 899*a3141fd3SAndroid Build Coastguard Worker ** point to an integer (type int) containing the new chunk-size to use 900*a3141fd3SAndroid Build Coastguard Worker ** for the nominated database. Allocating database file space in large 901*a3141fd3SAndroid Build Coastguard Worker ** chunks (say 1MB at a time), may reduce file-system fragmentation and 902*a3141fd3SAndroid Build Coastguard Worker ** improve performance on some systems. 903*a3141fd3SAndroid Build Coastguard Worker ** 904*a3141fd3SAndroid Build Coastguard Worker ** <li>[[SQLITE_FCNTL_FILE_POINTER]] 905*a3141fd3SAndroid Build Coastguard Worker ** The [SQLITE_FCNTL_FILE_POINTER] opcode is used to obtain a pointer 906*a3141fd3SAndroid Build Coastguard Worker ** to the [sqlite3_file] object associated with a particular database 907*a3141fd3SAndroid Build Coastguard Worker ** connection. See also [SQLITE_FCNTL_JOURNAL_POINTER]. 908*a3141fd3SAndroid Build Coastguard Worker ** 909*a3141fd3SAndroid Build Coastguard Worker ** <li>[[SQLITE_FCNTL_JOURNAL_POINTER]] 910*a3141fd3SAndroid Build Coastguard Worker ** The [SQLITE_FCNTL_JOURNAL_POINTER] opcode is used to obtain a pointer 911*a3141fd3SAndroid Build Coastguard Worker ** to the [sqlite3_file] object associated with the journal file (either 912*a3141fd3SAndroid Build Coastguard Worker ** the [rollback journal] or the [write-ahead log]) for a particular database 913*a3141fd3SAndroid Build Coastguard Worker ** connection. See also [SQLITE_FCNTL_FILE_POINTER]. 914*a3141fd3SAndroid Build Coastguard Worker ** 915*a3141fd3SAndroid Build Coastguard Worker ** <li>[[SQLITE_FCNTL_SYNC_OMITTED]] 916*a3141fd3SAndroid Build Coastguard Worker ** No longer in use. 917*a3141fd3SAndroid Build Coastguard Worker ** 918*a3141fd3SAndroid Build Coastguard Worker ** <li>[[SQLITE_FCNTL_SYNC]] 919*a3141fd3SAndroid Build Coastguard Worker ** The [SQLITE_FCNTL_SYNC] opcode is generated internally by SQLite and 920*a3141fd3SAndroid Build Coastguard Worker ** sent to the VFS immediately before the xSync method is invoked on a 921*a3141fd3SAndroid Build Coastguard Worker ** database file descriptor. Or, if the xSync method is not invoked 922*a3141fd3SAndroid Build Coastguard Worker ** because the user has configured SQLite with 923*a3141fd3SAndroid Build Coastguard Worker ** [PRAGMA synchronous | PRAGMA synchronous=OFF] it is invoked in place 924*a3141fd3SAndroid Build Coastguard Worker ** of the xSync method. In most cases, the pointer argument passed with 925*a3141fd3SAndroid Build Coastguard Worker ** this file-control is NULL. However, if the database file is being synced 926*a3141fd3SAndroid Build Coastguard Worker ** as part of a multi-database commit, the argument points to a nul-terminated 927*a3141fd3SAndroid Build Coastguard Worker ** string containing the transactions super-journal file name. VFSes that 928*a3141fd3SAndroid Build Coastguard Worker ** do not need this signal should silently ignore this opcode. Applications 929*a3141fd3SAndroid Build Coastguard Worker ** should not call [sqlite3_file_control()] with this opcode as doing so may 930*a3141fd3SAndroid Build Coastguard Worker ** disrupt the operation of the specialized VFSes that do require it. 931*a3141fd3SAndroid Build Coastguard Worker ** 932*a3141fd3SAndroid Build Coastguard Worker ** <li>[[SQLITE_FCNTL_COMMIT_PHASETWO]] 933*a3141fd3SAndroid Build Coastguard Worker ** The [SQLITE_FCNTL_COMMIT_PHASETWO] opcode is generated internally by SQLite 934*a3141fd3SAndroid Build Coastguard Worker ** and sent to the VFS after a transaction has been committed immediately 935*a3141fd3SAndroid Build Coastguard Worker ** but before the database is unlocked. VFSes that do not need this signal 936*a3141fd3SAndroid Build Coastguard Worker ** should silently ignore this opcode. Applications should not call 937*a3141fd3SAndroid Build Coastguard Worker ** [sqlite3_file_control()] with this opcode as doing so may disrupt the 938*a3141fd3SAndroid Build Coastguard Worker ** operation of the specialized VFSes that do require it. 939*a3141fd3SAndroid Build Coastguard Worker ** 940*a3141fd3SAndroid Build Coastguard Worker ** <li>[[SQLITE_FCNTL_WIN32_AV_RETRY]] 941*a3141fd3SAndroid Build Coastguard Worker ** ^The [SQLITE_FCNTL_WIN32_AV_RETRY] opcode is used to configure automatic 942*a3141fd3SAndroid Build Coastguard Worker ** retry counts and intervals for certain disk I/O operations for the 943*a3141fd3SAndroid Build Coastguard Worker ** windows [VFS] in order to provide robustness in the presence of 944*a3141fd3SAndroid Build Coastguard Worker ** anti-virus programs. By default, the windows VFS will retry file read, 945*a3141fd3SAndroid Build Coastguard Worker ** file write, and file delete operations up to 10 times, with a delay 946*a3141fd3SAndroid Build Coastguard Worker ** of 25 milliseconds before the first retry and with the delay increasing 947*a3141fd3SAndroid Build Coastguard Worker ** by an additional 25 milliseconds with each subsequent retry. This 948*a3141fd3SAndroid Build Coastguard Worker ** opcode allows these two values (10 retries and 25 milliseconds of delay) 949*a3141fd3SAndroid Build Coastguard Worker ** to be adjusted. The values are changed for all database connections 950*a3141fd3SAndroid Build Coastguard Worker ** within the same process. The argument is a pointer to an array of two 951*a3141fd3SAndroid Build Coastguard Worker ** integers where the first integer is the new retry count and the second 952*a3141fd3SAndroid Build Coastguard Worker ** integer is the delay. If either integer is negative, then the setting 953*a3141fd3SAndroid Build Coastguard Worker ** is not changed but instead the prior value of that setting is written 954*a3141fd3SAndroid Build Coastguard Worker ** into the array entry, allowing the current retry settings to be 955*a3141fd3SAndroid Build Coastguard Worker ** interrogated. The zDbName parameter is ignored. 956*a3141fd3SAndroid Build Coastguard Worker ** 957*a3141fd3SAndroid Build Coastguard Worker ** <li>[[SQLITE_FCNTL_PERSIST_WAL]] 958*a3141fd3SAndroid Build Coastguard Worker ** ^The [SQLITE_FCNTL_PERSIST_WAL] opcode is used to set or query the 959*a3141fd3SAndroid Build Coastguard Worker ** persistent [WAL | Write Ahead Log] setting. By default, the auxiliary 960*a3141fd3SAndroid Build Coastguard Worker ** write ahead log ([WAL file]) and shared memory 961*a3141fd3SAndroid Build Coastguard Worker ** files used for transaction control 962*a3141fd3SAndroid Build Coastguard Worker ** are automatically deleted when the latest connection to the database 963*a3141fd3SAndroid Build Coastguard Worker ** closes. Setting persistent WAL mode causes those files to persist after 964*a3141fd3SAndroid Build Coastguard Worker ** close. Persisting the files is useful when other processes that do not 965*a3141fd3SAndroid Build Coastguard Worker ** have write permission on the directory containing the database file want 966*a3141fd3SAndroid Build Coastguard Worker ** to read the database file, as the WAL and shared memory files must exist 967*a3141fd3SAndroid Build Coastguard Worker ** in order for the database to be readable. The fourth parameter to 968*a3141fd3SAndroid Build Coastguard Worker ** [sqlite3_file_control()] for this opcode should be a pointer to an integer. 969*a3141fd3SAndroid Build Coastguard Worker ** That integer is 0 to disable persistent WAL mode or 1 to enable persistent 970*a3141fd3SAndroid Build Coastguard Worker ** WAL mode. If the integer is -1, then it is overwritten with the current 971*a3141fd3SAndroid Build Coastguard Worker ** WAL persistence setting. 972*a3141fd3SAndroid Build Coastguard Worker ** 973*a3141fd3SAndroid Build Coastguard Worker ** <li>[[SQLITE_FCNTL_POWERSAFE_OVERWRITE]] 974*a3141fd3SAndroid Build Coastguard Worker ** ^The [SQLITE_FCNTL_POWERSAFE_OVERWRITE] opcode is used to set or query the 975*a3141fd3SAndroid Build Coastguard Worker ** persistent "powersafe-overwrite" or "PSOW" setting. The PSOW setting 976*a3141fd3SAndroid Build Coastguard Worker ** determines the [SQLITE_IOCAP_POWERSAFE_OVERWRITE] bit of the 977*a3141fd3SAndroid Build Coastguard Worker ** xDeviceCharacteristics methods. The fourth parameter to 978*a3141fd3SAndroid Build Coastguard Worker ** [sqlite3_file_control()] for this opcode should be a pointer to an integer. 979*a3141fd3SAndroid Build Coastguard Worker ** That integer is 0 to disable zero-damage mode or 1 to enable zero-damage 980*a3141fd3SAndroid Build Coastguard Worker ** mode. If the integer is -1, then it is overwritten with the current 981*a3141fd3SAndroid Build Coastguard Worker ** zero-damage mode setting. 982*a3141fd3SAndroid Build Coastguard Worker ** 983*a3141fd3SAndroid Build Coastguard Worker ** <li>[[SQLITE_FCNTL_OVERWRITE]] 984*a3141fd3SAndroid Build Coastguard Worker ** ^The [SQLITE_FCNTL_OVERWRITE] opcode is invoked by SQLite after opening 985*a3141fd3SAndroid Build Coastguard Worker ** a write transaction to indicate that, unless it is rolled back for some 986*a3141fd3SAndroid Build Coastguard Worker ** reason, the entire database file will be overwritten by the current 987*a3141fd3SAndroid Build Coastguard Worker ** transaction. This is used by VACUUM operations. 988*a3141fd3SAndroid Build Coastguard Worker ** 989*a3141fd3SAndroid Build Coastguard Worker ** <li>[[SQLITE_FCNTL_VFSNAME]] 990*a3141fd3SAndroid Build Coastguard Worker ** ^The [SQLITE_FCNTL_VFSNAME] opcode can be used to obtain the names of 991*a3141fd3SAndroid Build Coastguard Worker ** all [VFSes] in the VFS stack. The names are of all VFS shims and the 992*a3141fd3SAndroid Build Coastguard Worker ** final bottom-level VFS are written into memory obtained from 993*a3141fd3SAndroid Build Coastguard Worker ** [sqlite3_malloc()] and the result is stored in the char* variable 994*a3141fd3SAndroid Build Coastguard Worker ** that the fourth parameter of [sqlite3_file_control()] points to. 995*a3141fd3SAndroid Build Coastguard Worker ** The caller is responsible for freeing the memory when done. As with 996*a3141fd3SAndroid Build Coastguard Worker ** all file-control actions, there is no guarantee that this will actually 997*a3141fd3SAndroid Build Coastguard Worker ** do anything. Callers should initialize the char* variable to a NULL 998*a3141fd3SAndroid Build Coastguard Worker ** pointer in case this file-control is not implemented. This file-control 999*a3141fd3SAndroid Build Coastguard Worker ** is intended for diagnostic use only. 1000*a3141fd3SAndroid Build Coastguard Worker ** 1001*a3141fd3SAndroid Build Coastguard Worker ** <li>[[SQLITE_FCNTL_VFS_POINTER]] 1002*a3141fd3SAndroid Build Coastguard Worker ** ^The [SQLITE_FCNTL_VFS_POINTER] opcode finds a pointer to the top-level 1003*a3141fd3SAndroid Build Coastguard Worker ** [VFSes] currently in use. ^(The argument X in 1004*a3141fd3SAndroid Build Coastguard Worker ** sqlite3_file_control(db,SQLITE_FCNTL_VFS_POINTER,X) must be 1005*a3141fd3SAndroid Build Coastguard Worker ** of type "[sqlite3_vfs] **". This opcodes will set *X 1006*a3141fd3SAndroid Build Coastguard Worker ** to a pointer to the top-level VFS.)^ 1007*a3141fd3SAndroid Build Coastguard Worker ** ^When there are multiple VFS shims in the stack, this opcode finds the 1008*a3141fd3SAndroid Build Coastguard Worker ** upper-most shim only. 1009*a3141fd3SAndroid Build Coastguard Worker ** 1010*a3141fd3SAndroid Build Coastguard Worker ** <li>[[SQLITE_FCNTL_PRAGMA]] 1011*a3141fd3SAndroid Build Coastguard Worker ** ^Whenever a [PRAGMA] statement is parsed, an [SQLITE_FCNTL_PRAGMA] 1012*a3141fd3SAndroid Build Coastguard Worker ** file control is sent to the open [sqlite3_file] object corresponding 1013*a3141fd3SAndroid Build Coastguard Worker ** to the database file to which the pragma statement refers. ^The argument 1014*a3141fd3SAndroid Build Coastguard Worker ** to the [SQLITE_FCNTL_PRAGMA] file control is an array of 1015*a3141fd3SAndroid Build Coastguard Worker ** pointers to strings (char**) in which the second element of the array 1016*a3141fd3SAndroid Build Coastguard Worker ** is the name of the pragma and the third element is the argument to the 1017*a3141fd3SAndroid Build Coastguard Worker ** pragma or NULL if the pragma has no argument. ^The handler for an 1018*a3141fd3SAndroid Build Coastguard Worker ** [SQLITE_FCNTL_PRAGMA] file control can optionally make the first element 1019*a3141fd3SAndroid Build Coastguard Worker ** of the char** argument point to a string obtained from [sqlite3_mprintf()] 1020*a3141fd3SAndroid Build Coastguard Worker ** or the equivalent and that string will become the result of the pragma or 1021*a3141fd3SAndroid Build Coastguard Worker ** the error message if the pragma fails. ^If the 1022*a3141fd3SAndroid Build Coastguard Worker ** [SQLITE_FCNTL_PRAGMA] file control returns [SQLITE_NOTFOUND], then normal 1023*a3141fd3SAndroid Build Coastguard Worker ** [PRAGMA] processing continues. ^If the [SQLITE_FCNTL_PRAGMA] 1024*a3141fd3SAndroid Build Coastguard Worker ** file control returns [SQLITE_OK], then the parser assumes that the 1025*a3141fd3SAndroid Build Coastguard Worker ** VFS has handled the PRAGMA itself and the parser generates a no-op 1026*a3141fd3SAndroid Build Coastguard Worker ** prepared statement if result string is NULL, or that returns a copy 1027*a3141fd3SAndroid Build Coastguard Worker ** of the result string if the string is non-NULL. 1028*a3141fd3SAndroid Build Coastguard Worker ** ^If the [SQLITE_FCNTL_PRAGMA] file control returns 1029*a3141fd3SAndroid Build Coastguard Worker ** any result code other than [SQLITE_OK] or [SQLITE_NOTFOUND], that means 1030*a3141fd3SAndroid Build Coastguard Worker ** that the VFS encountered an error while handling the [PRAGMA] and the 1031*a3141fd3SAndroid Build Coastguard Worker ** compilation of the PRAGMA fails with an error. ^The [SQLITE_FCNTL_PRAGMA] 1032*a3141fd3SAndroid Build Coastguard Worker ** file control occurs at the beginning of pragma statement analysis and so 1033*a3141fd3SAndroid Build Coastguard Worker ** it is able to override built-in [PRAGMA] statements. 1034*a3141fd3SAndroid Build Coastguard Worker ** 1035*a3141fd3SAndroid Build Coastguard Worker ** <li>[[SQLITE_FCNTL_BUSYHANDLER]] 1036*a3141fd3SAndroid Build Coastguard Worker ** ^The [SQLITE_FCNTL_BUSYHANDLER] 1037*a3141fd3SAndroid Build Coastguard Worker ** file-control may be invoked by SQLite on the database file handle 1038*a3141fd3SAndroid Build Coastguard Worker ** shortly after it is opened in order to provide a custom VFS with access 1039*a3141fd3SAndroid Build Coastguard Worker ** to the connection's busy-handler callback. The argument is of type (void**) 1040*a3141fd3SAndroid Build Coastguard Worker ** - an array of two (void *) values. The first (void *) actually points 1041*a3141fd3SAndroid Build Coastguard Worker ** to a function of type (int (*)(void *)). In order to invoke the connection's 1042*a3141fd3SAndroid Build Coastguard Worker ** busy-handler, this function should be invoked with the second (void *) in 1043*a3141fd3SAndroid Build Coastguard Worker ** the array as the only argument. If it returns non-zero, then the operation 1044*a3141fd3SAndroid Build Coastguard Worker ** should be retried. If it returns zero, the custom VFS should abandon the 1045*a3141fd3SAndroid Build Coastguard Worker ** current operation. 1046*a3141fd3SAndroid Build Coastguard Worker ** 1047*a3141fd3SAndroid Build Coastguard Worker ** <li>[[SQLITE_FCNTL_TEMPFILENAME]] 1048*a3141fd3SAndroid Build Coastguard Worker ** ^Applications can invoke the [SQLITE_FCNTL_TEMPFILENAME] file-control 1049*a3141fd3SAndroid Build Coastguard Worker ** to have SQLite generate a 1050*a3141fd3SAndroid Build Coastguard Worker ** temporary filename using the same algorithm that is followed to generate 1051*a3141fd3SAndroid Build Coastguard Worker ** temporary filenames for TEMP tables and other internal uses. The 1052*a3141fd3SAndroid Build Coastguard Worker ** argument should be a char** which will be filled with the filename 1053*a3141fd3SAndroid Build Coastguard Worker ** written into memory obtained from [sqlite3_malloc()]. The caller should 1054*a3141fd3SAndroid Build Coastguard Worker ** invoke [sqlite3_free()] on the result to avoid a memory leak. 1055*a3141fd3SAndroid Build Coastguard Worker ** 1056*a3141fd3SAndroid Build Coastguard Worker ** <li>[[SQLITE_FCNTL_MMAP_SIZE]] 1057*a3141fd3SAndroid Build Coastguard Worker ** The [SQLITE_FCNTL_MMAP_SIZE] file control is used to query or set the 1058*a3141fd3SAndroid Build Coastguard Worker ** maximum number of bytes that will be used for memory-mapped I/O. 1059*a3141fd3SAndroid Build Coastguard Worker ** The argument is a pointer to a value of type sqlite3_int64 that 1060*a3141fd3SAndroid Build Coastguard Worker ** is an advisory maximum number of bytes in the file to memory map. The 1061*a3141fd3SAndroid Build Coastguard Worker ** pointer is overwritten with the old value. The limit is not changed if 1062*a3141fd3SAndroid Build Coastguard Worker ** the value originally pointed to is negative, and so the current limit 1063*a3141fd3SAndroid Build Coastguard Worker ** can be queried by passing in a pointer to a negative number. This 1064*a3141fd3SAndroid Build Coastguard Worker ** file-control is used internally to implement [PRAGMA mmap_size]. 1065*a3141fd3SAndroid Build Coastguard Worker ** 1066*a3141fd3SAndroid Build Coastguard Worker ** <li>[[SQLITE_FCNTL_TRACE]] 1067*a3141fd3SAndroid Build Coastguard Worker ** The [SQLITE_FCNTL_TRACE] file control provides advisory information 1068*a3141fd3SAndroid Build Coastguard Worker ** to the VFS about what the higher layers of the SQLite stack are doing. 1069*a3141fd3SAndroid Build Coastguard Worker ** This file control is used by some VFS activity tracing [shims]. 1070*a3141fd3SAndroid Build Coastguard Worker ** The argument is a zero-terminated string. Higher layers in the 1071*a3141fd3SAndroid Build Coastguard Worker ** SQLite stack may generate instances of this file control if 1072*a3141fd3SAndroid Build Coastguard Worker ** the [SQLITE_USE_FCNTL_TRACE] compile-time option is enabled. 1073*a3141fd3SAndroid Build Coastguard Worker ** 1074*a3141fd3SAndroid Build Coastguard Worker ** <li>[[SQLITE_FCNTL_HAS_MOVED]] 1075*a3141fd3SAndroid Build Coastguard Worker ** The [SQLITE_FCNTL_HAS_MOVED] file control interprets its argument as a 1076*a3141fd3SAndroid Build Coastguard Worker ** pointer to an integer and it writes a boolean into that integer depending 1077*a3141fd3SAndroid Build Coastguard Worker ** on whether or not the file has been renamed, moved, or deleted since it 1078*a3141fd3SAndroid Build Coastguard Worker ** was first opened. 1079*a3141fd3SAndroid Build Coastguard Worker ** 1080*a3141fd3SAndroid Build Coastguard Worker ** <li>[[SQLITE_FCNTL_WIN32_GET_HANDLE]] 1081*a3141fd3SAndroid Build Coastguard Worker ** The [SQLITE_FCNTL_WIN32_GET_HANDLE] opcode can be used to obtain the 1082*a3141fd3SAndroid Build Coastguard Worker ** underlying native file handle associated with a file handle. This file 1083*a3141fd3SAndroid Build Coastguard Worker ** control interprets its argument as a pointer to a native file handle and 1084*a3141fd3SAndroid Build Coastguard Worker ** writes the resulting value there. 1085*a3141fd3SAndroid Build Coastguard Worker ** 1086*a3141fd3SAndroid Build Coastguard Worker ** <li>[[SQLITE_FCNTL_WIN32_SET_HANDLE]] 1087*a3141fd3SAndroid Build Coastguard Worker ** The [SQLITE_FCNTL_WIN32_SET_HANDLE] opcode is used for debugging. This 1088*a3141fd3SAndroid Build Coastguard Worker ** opcode causes the xFileControl method to swap the file handle with the one 1089*a3141fd3SAndroid Build Coastguard Worker ** pointed to by the pArg argument. This capability is used during testing 1090*a3141fd3SAndroid Build Coastguard Worker ** and only needs to be supported when SQLITE_TEST is defined. 1091*a3141fd3SAndroid Build Coastguard Worker ** 1092*a3141fd3SAndroid Build Coastguard Worker ** <li>[[SQLITE_FCNTL_WAL_BLOCK]] 1093*a3141fd3SAndroid Build Coastguard Worker ** The [SQLITE_FCNTL_WAL_BLOCK] is a signal to the VFS layer that it might 1094*a3141fd3SAndroid Build Coastguard Worker ** be advantageous to block on the next WAL lock if the lock is not immediately 1095*a3141fd3SAndroid Build Coastguard Worker ** available. The WAL subsystem issues this signal during rare 1096*a3141fd3SAndroid Build Coastguard Worker ** circumstances in order to fix a problem with priority inversion. 1097*a3141fd3SAndroid Build Coastguard Worker ** Applications should <em>not</em> use this file-control. 1098*a3141fd3SAndroid Build Coastguard Worker ** 1099*a3141fd3SAndroid Build Coastguard Worker ** <li>[[SQLITE_FCNTL_ZIPVFS]] 1100*a3141fd3SAndroid Build Coastguard Worker ** The [SQLITE_FCNTL_ZIPVFS] opcode is implemented by zipvfs only. All other 1101*a3141fd3SAndroid Build Coastguard Worker ** VFS should return SQLITE_NOTFOUND for this opcode. 1102*a3141fd3SAndroid Build Coastguard Worker ** 1103*a3141fd3SAndroid Build Coastguard Worker ** <li>[[SQLITE_FCNTL_RBU]] 1104*a3141fd3SAndroid Build Coastguard Worker ** The [SQLITE_FCNTL_RBU] opcode is implemented by the special VFS used by 1105*a3141fd3SAndroid Build Coastguard Worker ** the RBU extension only. All other VFS should return SQLITE_NOTFOUND for 1106*a3141fd3SAndroid Build Coastguard Worker ** this opcode. 1107*a3141fd3SAndroid Build Coastguard Worker ** 1108*a3141fd3SAndroid Build Coastguard Worker ** <li>[[SQLITE_FCNTL_BEGIN_ATOMIC_WRITE]] 1109*a3141fd3SAndroid Build Coastguard Worker ** If the [SQLITE_FCNTL_BEGIN_ATOMIC_WRITE] opcode returns SQLITE_OK, then 1110*a3141fd3SAndroid Build Coastguard Worker ** the file descriptor is placed in "batch write mode", which 1111*a3141fd3SAndroid Build Coastguard Worker ** means all subsequent write operations will be deferred and done 1112*a3141fd3SAndroid Build Coastguard Worker ** atomically at the next [SQLITE_FCNTL_COMMIT_ATOMIC_WRITE]. Systems 1113*a3141fd3SAndroid Build Coastguard Worker ** that do not support batch atomic writes will return SQLITE_NOTFOUND. 1114*a3141fd3SAndroid Build Coastguard Worker ** ^Following a successful SQLITE_FCNTL_BEGIN_ATOMIC_WRITE and prior to 1115*a3141fd3SAndroid Build Coastguard Worker ** the closing [SQLITE_FCNTL_COMMIT_ATOMIC_WRITE] or 1116*a3141fd3SAndroid Build Coastguard Worker ** [SQLITE_FCNTL_ROLLBACK_ATOMIC_WRITE], SQLite will make 1117*a3141fd3SAndroid Build Coastguard Worker ** no VFS interface calls on the same [sqlite3_file] file descriptor 1118*a3141fd3SAndroid Build Coastguard Worker ** except for calls to the xWrite method and the xFileControl method 1119*a3141fd3SAndroid Build Coastguard Worker ** with [SQLITE_FCNTL_SIZE_HINT]. 1120*a3141fd3SAndroid Build Coastguard Worker ** 1121*a3141fd3SAndroid Build Coastguard Worker ** <li>[[SQLITE_FCNTL_COMMIT_ATOMIC_WRITE]] 1122*a3141fd3SAndroid Build Coastguard Worker ** The [SQLITE_FCNTL_COMMIT_ATOMIC_WRITE] opcode causes all write 1123*a3141fd3SAndroid Build Coastguard Worker ** operations since the previous successful call to 1124*a3141fd3SAndroid Build Coastguard Worker ** [SQLITE_FCNTL_BEGIN_ATOMIC_WRITE] to be performed atomically. 1125*a3141fd3SAndroid Build Coastguard Worker ** This file control returns [SQLITE_OK] if and only if the writes were 1126*a3141fd3SAndroid Build Coastguard Worker ** all performed successfully and have been committed to persistent storage. 1127*a3141fd3SAndroid Build Coastguard Worker ** ^Regardless of whether or not it is successful, this file control takes 1128*a3141fd3SAndroid Build Coastguard Worker ** the file descriptor out of batch write mode so that all subsequent 1129*a3141fd3SAndroid Build Coastguard Worker ** write operations are independent. 1130*a3141fd3SAndroid Build Coastguard Worker ** ^SQLite will never invoke SQLITE_FCNTL_COMMIT_ATOMIC_WRITE without 1131*a3141fd3SAndroid Build Coastguard Worker ** a prior successful call to [SQLITE_FCNTL_BEGIN_ATOMIC_WRITE]. 1132*a3141fd3SAndroid Build Coastguard Worker ** 1133*a3141fd3SAndroid Build Coastguard Worker ** <li>[[SQLITE_FCNTL_ROLLBACK_ATOMIC_WRITE]] 1134*a3141fd3SAndroid Build Coastguard Worker ** The [SQLITE_FCNTL_ROLLBACK_ATOMIC_WRITE] opcode causes all write 1135*a3141fd3SAndroid Build Coastguard Worker ** operations since the previous successful call to 1136*a3141fd3SAndroid Build Coastguard Worker ** [SQLITE_FCNTL_BEGIN_ATOMIC_WRITE] to be rolled back. 1137*a3141fd3SAndroid Build Coastguard Worker ** ^This file control takes the file descriptor out of batch write mode 1138*a3141fd3SAndroid Build Coastguard Worker ** so that all subsequent write operations are independent. 1139*a3141fd3SAndroid Build Coastguard Worker ** ^SQLite will never invoke SQLITE_FCNTL_ROLLBACK_ATOMIC_WRITE without 1140*a3141fd3SAndroid Build Coastguard Worker ** a prior successful call to [SQLITE_FCNTL_BEGIN_ATOMIC_WRITE]. 1141*a3141fd3SAndroid Build Coastguard Worker ** 1142*a3141fd3SAndroid Build Coastguard Worker ** <li>[[SQLITE_FCNTL_LOCK_TIMEOUT]] 1143*a3141fd3SAndroid Build Coastguard Worker ** The [SQLITE_FCNTL_LOCK_TIMEOUT] opcode is used to configure a VFS 1144*a3141fd3SAndroid Build Coastguard Worker ** to block for up to M milliseconds before failing when attempting to 1145*a3141fd3SAndroid Build Coastguard Worker ** obtain a file lock using the xLock or xShmLock methods of the VFS. 1146*a3141fd3SAndroid Build Coastguard Worker ** The parameter is a pointer to a 32-bit signed integer that contains 1147*a3141fd3SAndroid Build Coastguard Worker ** the value that M is to be set to. Before returning, the 32-bit signed 1148*a3141fd3SAndroid Build Coastguard Worker ** integer is overwritten with the previous value of M. 1149*a3141fd3SAndroid Build Coastguard Worker ** 1150*a3141fd3SAndroid Build Coastguard Worker ** <li>[[SQLITE_FCNTL_DATA_VERSION]] 1151*a3141fd3SAndroid Build Coastguard Worker ** The [SQLITE_FCNTL_DATA_VERSION] opcode is used to detect changes to 1152*a3141fd3SAndroid Build Coastguard Worker ** a database file. The argument is a pointer to a 32-bit unsigned integer. 1153*a3141fd3SAndroid Build Coastguard Worker ** The "data version" for the pager is written into the pointer. The 1154*a3141fd3SAndroid Build Coastguard Worker ** "data version" changes whenever any change occurs to the corresponding 1155*a3141fd3SAndroid Build Coastguard Worker ** database file, either through SQL statements on the same database 1156*a3141fd3SAndroid Build Coastguard Worker ** connection or through transactions committed by separate database 1157*a3141fd3SAndroid Build Coastguard Worker ** connections possibly in other processes. The [sqlite3_total_changes()] 1158*a3141fd3SAndroid Build Coastguard Worker ** interface can be used to find if any database on the connection has changed, 1159*a3141fd3SAndroid Build Coastguard Worker ** but that interface responds to changes on TEMP as well as MAIN and does 1160*a3141fd3SAndroid Build Coastguard Worker ** not provide a mechanism to detect changes to MAIN only. Also, the 1161*a3141fd3SAndroid Build Coastguard Worker ** [sqlite3_total_changes()] interface responds to internal changes only and 1162*a3141fd3SAndroid Build Coastguard Worker ** omits changes made by other database connections. The 1163*a3141fd3SAndroid Build Coastguard Worker ** [PRAGMA data_version] command provides a mechanism to detect changes to 1164*a3141fd3SAndroid Build Coastguard Worker ** a single attached database that occur due to other database connections, 1165*a3141fd3SAndroid Build Coastguard Worker ** but omits changes implemented by the database connection on which it is 1166*a3141fd3SAndroid Build Coastguard Worker ** called. This file control is the only mechanism to detect changes that 1167*a3141fd3SAndroid Build Coastguard Worker ** happen either internally or externally and that are associated with 1168*a3141fd3SAndroid Build Coastguard Worker ** a particular attached database. 1169*a3141fd3SAndroid Build Coastguard Worker ** 1170*a3141fd3SAndroid Build Coastguard Worker ** <li>[[SQLITE_FCNTL_CKPT_START]] 1171*a3141fd3SAndroid Build Coastguard Worker ** The [SQLITE_FCNTL_CKPT_START] opcode is invoked from within a checkpoint 1172*a3141fd3SAndroid Build Coastguard Worker ** in wal mode before the client starts to copy pages from the wal 1173*a3141fd3SAndroid Build Coastguard Worker ** file to the database file. 1174*a3141fd3SAndroid Build Coastguard Worker ** 1175*a3141fd3SAndroid Build Coastguard Worker ** <li>[[SQLITE_FCNTL_CKPT_DONE]] 1176*a3141fd3SAndroid Build Coastguard Worker ** The [SQLITE_FCNTL_CKPT_DONE] opcode is invoked from within a checkpoint 1177*a3141fd3SAndroid Build Coastguard Worker ** in wal mode after the client has finished copying pages from the wal 1178*a3141fd3SAndroid Build Coastguard Worker ** file to the database file, but before the *-shm file is updated to 1179*a3141fd3SAndroid Build Coastguard Worker ** record the fact that the pages have been checkpointed. 1180*a3141fd3SAndroid Build Coastguard Worker ** 1181*a3141fd3SAndroid Build Coastguard Worker ** <li>[[SQLITE_FCNTL_EXTERNAL_READER]] 1182*a3141fd3SAndroid Build Coastguard Worker ** The EXPERIMENTAL [SQLITE_FCNTL_EXTERNAL_READER] opcode is used to detect 1183*a3141fd3SAndroid Build Coastguard Worker ** whether or not there is a database client in another process with a wal-mode 1184*a3141fd3SAndroid Build Coastguard Worker ** transaction open on the database or not. It is only available on unix.The 1185*a3141fd3SAndroid Build Coastguard Worker ** (void*) argument passed with this file-control should be a pointer to a 1186*a3141fd3SAndroid Build Coastguard Worker ** value of type (int). The integer value is set to 1 if the database is a wal 1187*a3141fd3SAndroid Build Coastguard Worker ** mode database and there exists at least one client in another process that 1188*a3141fd3SAndroid Build Coastguard Worker ** currently has an SQL transaction open on the database. It is set to 0 if 1189*a3141fd3SAndroid Build Coastguard Worker ** the database is not a wal-mode db, or if there is no such connection in any 1190*a3141fd3SAndroid Build Coastguard Worker ** other process. This opcode cannot be used to detect transactions opened 1191*a3141fd3SAndroid Build Coastguard Worker ** by clients within the current process, only within other processes. 1192*a3141fd3SAndroid Build Coastguard Worker ** 1193*a3141fd3SAndroid Build Coastguard Worker ** <li>[[SQLITE_FCNTL_CKSM_FILE]] 1194*a3141fd3SAndroid Build Coastguard Worker ** The [SQLITE_FCNTL_CKSM_FILE] opcode is for use internally by the 1195*a3141fd3SAndroid Build Coastguard Worker ** [checksum VFS shim] only. 1196*a3141fd3SAndroid Build Coastguard Worker ** 1197*a3141fd3SAndroid Build Coastguard Worker ** <li>[[SQLITE_FCNTL_RESET_CACHE]] 1198*a3141fd3SAndroid Build Coastguard Worker ** If there is currently no transaction open on the database, and the 1199*a3141fd3SAndroid Build Coastguard Worker ** database is not a temp db, then the [SQLITE_FCNTL_RESET_CACHE] file-control 1200*a3141fd3SAndroid Build Coastguard Worker ** purges the contents of the in-memory page cache. If there is an open 1201*a3141fd3SAndroid Build Coastguard Worker ** transaction, or if the db is a temp-db, this opcode is a no-op, not an error. 1202*a3141fd3SAndroid Build Coastguard Worker ** </ul> 1203*a3141fd3SAndroid Build Coastguard Worker */ 1204*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_FCNTL_LOCKSTATE 1 1205*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_FCNTL_GET_LOCKPROXYFILE 2 1206*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_FCNTL_SET_LOCKPROXYFILE 3 1207*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_FCNTL_LAST_ERRNO 4 1208*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_FCNTL_SIZE_HINT 5 1209*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_FCNTL_CHUNK_SIZE 6 1210*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_FCNTL_FILE_POINTER 7 1211*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_FCNTL_SYNC_OMITTED 8 1212*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_FCNTL_WIN32_AV_RETRY 9 1213*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_FCNTL_PERSIST_WAL 10 1214*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_FCNTL_OVERWRITE 11 1215*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_FCNTL_VFSNAME 12 1216*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_FCNTL_POWERSAFE_OVERWRITE 13 1217*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_FCNTL_PRAGMA 14 1218*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_FCNTL_BUSYHANDLER 15 1219*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_FCNTL_TEMPFILENAME 16 1220*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_FCNTL_MMAP_SIZE 18 1221*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_FCNTL_TRACE 19 1222*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_FCNTL_HAS_MOVED 20 1223*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_FCNTL_SYNC 21 1224*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_FCNTL_COMMIT_PHASETWO 22 1225*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_FCNTL_WIN32_SET_HANDLE 23 1226*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_FCNTL_WAL_BLOCK 24 1227*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_FCNTL_ZIPVFS 25 1228*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_FCNTL_RBU 26 1229*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_FCNTL_VFS_POINTER 27 1230*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_FCNTL_JOURNAL_POINTER 28 1231*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_FCNTL_WIN32_GET_HANDLE 29 1232*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_FCNTL_PDB 30 1233*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_FCNTL_BEGIN_ATOMIC_WRITE 31 1234*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_FCNTL_COMMIT_ATOMIC_WRITE 32 1235*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_FCNTL_ROLLBACK_ATOMIC_WRITE 33 1236*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_FCNTL_LOCK_TIMEOUT 34 1237*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_FCNTL_DATA_VERSION 35 1238*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_FCNTL_SIZE_LIMIT 36 1239*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_FCNTL_CKPT_DONE 37 1240*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_FCNTL_RESERVE_BYTES 38 1241*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_FCNTL_CKPT_START 39 1242*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_FCNTL_EXTERNAL_READER 40 1243*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_FCNTL_CKSM_FILE 41 1244*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_FCNTL_RESET_CACHE 42 1245*a3141fd3SAndroid Build Coastguard Worker 1246*a3141fd3SAndroid Build Coastguard Worker /* deprecated names */ 1247*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_GET_LOCKPROXYFILE SQLITE_FCNTL_GET_LOCKPROXYFILE 1248*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_SET_LOCKPROXYFILE SQLITE_FCNTL_SET_LOCKPROXYFILE 1249*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_LAST_ERRNO SQLITE_FCNTL_LAST_ERRNO 1250*a3141fd3SAndroid Build Coastguard Worker 1251*a3141fd3SAndroid Build Coastguard Worker 1252*a3141fd3SAndroid Build Coastguard Worker /* 1253*a3141fd3SAndroid Build Coastguard Worker ** CAPI3REF: Mutex Handle 1254*a3141fd3SAndroid Build Coastguard Worker ** 1255*a3141fd3SAndroid Build Coastguard Worker ** The mutex module within SQLite defines [sqlite3_mutex] to be an 1256*a3141fd3SAndroid Build Coastguard Worker ** abstract type for a mutex object. The SQLite core never looks 1257*a3141fd3SAndroid Build Coastguard Worker ** at the internal representation of an [sqlite3_mutex]. It only 1258*a3141fd3SAndroid Build Coastguard Worker ** deals with pointers to the [sqlite3_mutex] object. 1259*a3141fd3SAndroid Build Coastguard Worker ** 1260*a3141fd3SAndroid Build Coastguard Worker ** Mutexes are created using [sqlite3_mutex_alloc()]. 1261*a3141fd3SAndroid Build Coastguard Worker */ 1262*a3141fd3SAndroid Build Coastguard Worker typedef struct sqlite3_mutex sqlite3_mutex; 1263*a3141fd3SAndroid Build Coastguard Worker 1264*a3141fd3SAndroid Build Coastguard Worker /* 1265*a3141fd3SAndroid Build Coastguard Worker ** CAPI3REF: Loadable Extension Thunk 1266*a3141fd3SAndroid Build Coastguard Worker ** 1267*a3141fd3SAndroid Build Coastguard Worker ** A pointer to the opaque sqlite3_api_routines structure is passed as 1268*a3141fd3SAndroid Build Coastguard Worker ** the third parameter to entry points of [loadable extensions]. This 1269*a3141fd3SAndroid Build Coastguard Worker ** structure must be typedefed in order to work around compiler warnings 1270*a3141fd3SAndroid Build Coastguard Worker ** on some platforms. 1271*a3141fd3SAndroid Build Coastguard Worker */ 1272*a3141fd3SAndroid Build Coastguard Worker typedef struct sqlite3_api_routines sqlite3_api_routines; 1273*a3141fd3SAndroid Build Coastguard Worker 1274*a3141fd3SAndroid Build Coastguard Worker /* 1275*a3141fd3SAndroid Build Coastguard Worker ** CAPI3REF: File Name 1276*a3141fd3SAndroid Build Coastguard Worker ** 1277*a3141fd3SAndroid Build Coastguard Worker ** Type [sqlite3_filename] is used by SQLite to pass filenames to the 1278*a3141fd3SAndroid Build Coastguard Worker ** xOpen method of a [VFS]. It may be cast to (const char*) and treated 1279*a3141fd3SAndroid Build Coastguard Worker ** as a normal, nul-terminated, UTF-8 buffer containing the filename, but 1280*a3141fd3SAndroid Build Coastguard Worker ** may also be passed to special APIs such as: 1281*a3141fd3SAndroid Build Coastguard Worker ** 1282*a3141fd3SAndroid Build Coastguard Worker ** <ul> 1283*a3141fd3SAndroid Build Coastguard Worker ** <li> sqlite3_filename_database() 1284*a3141fd3SAndroid Build Coastguard Worker ** <li> sqlite3_filename_journal() 1285*a3141fd3SAndroid Build Coastguard Worker ** <li> sqlite3_filename_wal() 1286*a3141fd3SAndroid Build Coastguard Worker ** <li> sqlite3_uri_parameter() 1287*a3141fd3SAndroid Build Coastguard Worker ** <li> sqlite3_uri_boolean() 1288*a3141fd3SAndroid Build Coastguard Worker ** <li> sqlite3_uri_int64() 1289*a3141fd3SAndroid Build Coastguard Worker ** <li> sqlite3_uri_key() 1290*a3141fd3SAndroid Build Coastguard Worker ** </ul> 1291*a3141fd3SAndroid Build Coastguard Worker */ 1292*a3141fd3SAndroid Build Coastguard Worker typedef const char *sqlite3_filename; 1293*a3141fd3SAndroid Build Coastguard Worker 1294*a3141fd3SAndroid Build Coastguard Worker /* 1295*a3141fd3SAndroid Build Coastguard Worker ** CAPI3REF: OS Interface Object 1296*a3141fd3SAndroid Build Coastguard Worker ** 1297*a3141fd3SAndroid Build Coastguard Worker ** An instance of the sqlite3_vfs object defines the interface between 1298*a3141fd3SAndroid Build Coastguard Worker ** the SQLite core and the underlying operating system. The "vfs" 1299*a3141fd3SAndroid Build Coastguard Worker ** in the name of the object stands for "virtual file system". See 1300*a3141fd3SAndroid Build Coastguard Worker ** the [VFS | VFS documentation] for further information. 1301*a3141fd3SAndroid Build Coastguard Worker ** 1302*a3141fd3SAndroid Build Coastguard Worker ** The VFS interface is sometimes extended by adding new methods onto 1303*a3141fd3SAndroid Build Coastguard Worker ** the end. Each time such an extension occurs, the iVersion field 1304*a3141fd3SAndroid Build Coastguard Worker ** is incremented. The iVersion value started out as 1 in 1305*a3141fd3SAndroid Build Coastguard Worker ** SQLite [version 3.5.0] on [dateof:3.5.0], then increased to 2 1306*a3141fd3SAndroid Build Coastguard Worker ** with SQLite [version 3.7.0] on [dateof:3.7.0], and then increased 1307*a3141fd3SAndroid Build Coastguard Worker ** to 3 with SQLite [version 3.7.6] on [dateof:3.7.6]. Additional fields 1308*a3141fd3SAndroid Build Coastguard Worker ** may be appended to the sqlite3_vfs object and the iVersion value 1309*a3141fd3SAndroid Build Coastguard Worker ** may increase again in future versions of SQLite. 1310*a3141fd3SAndroid Build Coastguard Worker ** Note that due to an oversight, the structure 1311*a3141fd3SAndroid Build Coastguard Worker ** of the sqlite3_vfs object changed in the transition from 1312*a3141fd3SAndroid Build Coastguard Worker ** SQLite [version 3.5.9] to [version 3.6.0] on [dateof:3.6.0] 1313*a3141fd3SAndroid Build Coastguard Worker ** and yet the iVersion field was not increased. 1314*a3141fd3SAndroid Build Coastguard Worker ** 1315*a3141fd3SAndroid Build Coastguard Worker ** The szOsFile field is the size of the subclassed [sqlite3_file] 1316*a3141fd3SAndroid Build Coastguard Worker ** structure used by this VFS. mxPathname is the maximum length of 1317*a3141fd3SAndroid Build Coastguard Worker ** a pathname in this VFS. 1318*a3141fd3SAndroid Build Coastguard Worker ** 1319*a3141fd3SAndroid Build Coastguard Worker ** Registered sqlite3_vfs objects are kept on a linked list formed by 1320*a3141fd3SAndroid Build Coastguard Worker ** the pNext pointer. The [sqlite3_vfs_register()] 1321*a3141fd3SAndroid Build Coastguard Worker ** and [sqlite3_vfs_unregister()] interfaces manage this list 1322*a3141fd3SAndroid Build Coastguard Worker ** in a thread-safe way. The [sqlite3_vfs_find()] interface 1323*a3141fd3SAndroid Build Coastguard Worker ** searches the list. Neither the application code nor the VFS 1324*a3141fd3SAndroid Build Coastguard Worker ** implementation should use the pNext pointer. 1325*a3141fd3SAndroid Build Coastguard Worker ** 1326*a3141fd3SAndroid Build Coastguard Worker ** The pNext field is the only field in the sqlite3_vfs 1327*a3141fd3SAndroid Build Coastguard Worker ** structure that SQLite will ever modify. SQLite will only access 1328*a3141fd3SAndroid Build Coastguard Worker ** or modify this field while holding a particular static mutex. 1329*a3141fd3SAndroid Build Coastguard Worker ** The application should never modify anything within the sqlite3_vfs 1330*a3141fd3SAndroid Build Coastguard Worker ** object once the object has been registered. 1331*a3141fd3SAndroid Build Coastguard Worker ** 1332*a3141fd3SAndroid Build Coastguard Worker ** The zName field holds the name of the VFS module. The name must 1333*a3141fd3SAndroid Build Coastguard Worker ** be unique across all VFS modules. 1334*a3141fd3SAndroid Build Coastguard Worker ** 1335*a3141fd3SAndroid Build Coastguard Worker ** [[sqlite3_vfs.xOpen]] 1336*a3141fd3SAndroid Build Coastguard Worker ** ^SQLite guarantees that the zFilename parameter to xOpen 1337*a3141fd3SAndroid Build Coastguard Worker ** is either a NULL pointer or string obtained 1338*a3141fd3SAndroid Build Coastguard Worker ** from xFullPathname() with an optional suffix added. 1339*a3141fd3SAndroid Build Coastguard Worker ** ^If a suffix is added to the zFilename parameter, it will 1340*a3141fd3SAndroid Build Coastguard Worker ** consist of a single "-" character followed by no more than 1341*a3141fd3SAndroid Build Coastguard Worker ** 11 alphanumeric and/or "-" characters. 1342*a3141fd3SAndroid Build Coastguard Worker ** ^SQLite further guarantees that 1343*a3141fd3SAndroid Build Coastguard Worker ** the string will be valid and unchanged until xClose() is 1344*a3141fd3SAndroid Build Coastguard Worker ** called. Because of the previous sentence, 1345*a3141fd3SAndroid Build Coastguard Worker ** the [sqlite3_file] can safely store a pointer to the 1346*a3141fd3SAndroid Build Coastguard Worker ** filename if it needs to remember the filename for some reason. 1347*a3141fd3SAndroid Build Coastguard Worker ** If the zFilename parameter to xOpen is a NULL pointer then xOpen 1348*a3141fd3SAndroid Build Coastguard Worker ** must invent its own temporary name for the file. ^Whenever the 1349*a3141fd3SAndroid Build Coastguard Worker ** xFilename parameter is NULL it will also be the case that the 1350*a3141fd3SAndroid Build Coastguard Worker ** flags parameter will include [SQLITE_OPEN_DELETEONCLOSE]. 1351*a3141fd3SAndroid Build Coastguard Worker ** 1352*a3141fd3SAndroid Build Coastguard Worker ** The flags argument to xOpen() includes all bits set in 1353*a3141fd3SAndroid Build Coastguard Worker ** the flags argument to [sqlite3_open_v2()]. Or if [sqlite3_open()] 1354*a3141fd3SAndroid Build Coastguard Worker ** or [sqlite3_open16()] is used, then flags includes at least 1355*a3141fd3SAndroid Build Coastguard Worker ** [SQLITE_OPEN_READWRITE] | [SQLITE_OPEN_CREATE]. 1356*a3141fd3SAndroid Build Coastguard Worker ** If xOpen() opens a file read-only then it sets *pOutFlags to 1357*a3141fd3SAndroid Build Coastguard Worker ** include [SQLITE_OPEN_READONLY]. Other bits in *pOutFlags may be set. 1358*a3141fd3SAndroid Build Coastguard Worker ** 1359*a3141fd3SAndroid Build Coastguard Worker ** ^(SQLite will also add one of the following flags to the xOpen() 1360*a3141fd3SAndroid Build Coastguard Worker ** call, depending on the object being opened: 1361*a3141fd3SAndroid Build Coastguard Worker ** 1362*a3141fd3SAndroid Build Coastguard Worker ** <ul> 1363*a3141fd3SAndroid Build Coastguard Worker ** <li> [SQLITE_OPEN_MAIN_DB] 1364*a3141fd3SAndroid Build Coastguard Worker ** <li> [SQLITE_OPEN_MAIN_JOURNAL] 1365*a3141fd3SAndroid Build Coastguard Worker ** <li> [SQLITE_OPEN_TEMP_DB] 1366*a3141fd3SAndroid Build Coastguard Worker ** <li> [SQLITE_OPEN_TEMP_JOURNAL] 1367*a3141fd3SAndroid Build Coastguard Worker ** <li> [SQLITE_OPEN_TRANSIENT_DB] 1368*a3141fd3SAndroid Build Coastguard Worker ** <li> [SQLITE_OPEN_SUBJOURNAL] 1369*a3141fd3SAndroid Build Coastguard Worker ** <li> [SQLITE_OPEN_SUPER_JOURNAL] 1370*a3141fd3SAndroid Build Coastguard Worker ** <li> [SQLITE_OPEN_WAL] 1371*a3141fd3SAndroid Build Coastguard Worker ** </ul>)^ 1372*a3141fd3SAndroid Build Coastguard Worker ** 1373*a3141fd3SAndroid Build Coastguard Worker ** The file I/O implementation can use the object type flags to 1374*a3141fd3SAndroid Build Coastguard Worker ** change the way it deals with files. For example, an application 1375*a3141fd3SAndroid Build Coastguard Worker ** that does not care about crash recovery or rollback might make 1376*a3141fd3SAndroid Build Coastguard Worker ** the open of a journal file a no-op. Writes to this journal would 1377*a3141fd3SAndroid Build Coastguard Worker ** also be no-ops, and any attempt to read the journal would return 1378*a3141fd3SAndroid Build Coastguard Worker ** SQLITE_IOERR. Or the implementation might recognize that a database 1379*a3141fd3SAndroid Build Coastguard Worker ** file will be doing page-aligned sector reads and writes in a random 1380*a3141fd3SAndroid Build Coastguard Worker ** order and set up its I/O subsystem accordingly. 1381*a3141fd3SAndroid Build Coastguard Worker ** 1382*a3141fd3SAndroid Build Coastguard Worker ** SQLite might also add one of the following flags to the xOpen method: 1383*a3141fd3SAndroid Build Coastguard Worker ** 1384*a3141fd3SAndroid Build Coastguard Worker ** <ul> 1385*a3141fd3SAndroid Build Coastguard Worker ** <li> [SQLITE_OPEN_DELETEONCLOSE] 1386*a3141fd3SAndroid Build Coastguard Worker ** <li> [SQLITE_OPEN_EXCLUSIVE] 1387*a3141fd3SAndroid Build Coastguard Worker ** </ul> 1388*a3141fd3SAndroid Build Coastguard Worker ** 1389*a3141fd3SAndroid Build Coastguard Worker ** The [SQLITE_OPEN_DELETEONCLOSE] flag means the file should be 1390*a3141fd3SAndroid Build Coastguard Worker ** deleted when it is closed. ^The [SQLITE_OPEN_DELETEONCLOSE] 1391*a3141fd3SAndroid Build Coastguard Worker ** will be set for TEMP databases and their journals, transient 1392*a3141fd3SAndroid Build Coastguard Worker ** databases, and subjournals. 1393*a3141fd3SAndroid Build Coastguard Worker ** 1394*a3141fd3SAndroid Build Coastguard Worker ** ^The [SQLITE_OPEN_EXCLUSIVE] flag is always used in conjunction 1395*a3141fd3SAndroid Build Coastguard Worker ** with the [SQLITE_OPEN_CREATE] flag, which are both directly 1396*a3141fd3SAndroid Build Coastguard Worker ** analogous to the O_EXCL and O_CREAT flags of the POSIX open() 1397*a3141fd3SAndroid Build Coastguard Worker ** API. The SQLITE_OPEN_EXCLUSIVE flag, when paired with the 1398*a3141fd3SAndroid Build Coastguard Worker ** SQLITE_OPEN_CREATE, is used to indicate that file should always 1399*a3141fd3SAndroid Build Coastguard Worker ** be created, and that it is an error if it already exists. 1400*a3141fd3SAndroid Build Coastguard Worker ** It is <i>not</i> used to indicate the file should be opened 1401*a3141fd3SAndroid Build Coastguard Worker ** for exclusive access. 1402*a3141fd3SAndroid Build Coastguard Worker ** 1403*a3141fd3SAndroid Build Coastguard Worker ** ^At least szOsFile bytes of memory are allocated by SQLite 1404*a3141fd3SAndroid Build Coastguard Worker ** to hold the [sqlite3_file] structure passed as the third 1405*a3141fd3SAndroid Build Coastguard Worker ** argument to xOpen. The xOpen method does not have to 1406*a3141fd3SAndroid Build Coastguard Worker ** allocate the structure; it should just fill it in. Note that 1407*a3141fd3SAndroid Build Coastguard Worker ** the xOpen method must set the sqlite3_file.pMethods to either 1408*a3141fd3SAndroid Build Coastguard Worker ** a valid [sqlite3_io_methods] object or to NULL. xOpen must do 1409*a3141fd3SAndroid Build Coastguard Worker ** this even if the open fails. SQLite expects that the sqlite3_file.pMethods 1410*a3141fd3SAndroid Build Coastguard Worker ** element will be valid after xOpen returns regardless of the success 1411*a3141fd3SAndroid Build Coastguard Worker ** or failure of the xOpen call. 1412*a3141fd3SAndroid Build Coastguard Worker ** 1413*a3141fd3SAndroid Build Coastguard Worker ** [[sqlite3_vfs.xAccess]] 1414*a3141fd3SAndroid Build Coastguard Worker ** ^The flags argument to xAccess() may be [SQLITE_ACCESS_EXISTS] 1415*a3141fd3SAndroid Build Coastguard Worker ** to test for the existence of a file, or [SQLITE_ACCESS_READWRITE] to 1416*a3141fd3SAndroid Build Coastguard Worker ** test whether a file is readable and writable, or [SQLITE_ACCESS_READ] 1417*a3141fd3SAndroid Build Coastguard Worker ** to test whether a file is at least readable. The SQLITE_ACCESS_READ 1418*a3141fd3SAndroid Build Coastguard Worker ** flag is never actually used and is not implemented in the built-in 1419*a3141fd3SAndroid Build Coastguard Worker ** VFSes of SQLite. The file is named by the second argument and can be a 1420*a3141fd3SAndroid Build Coastguard Worker ** directory. The xAccess method returns [SQLITE_OK] on success or some 1421*a3141fd3SAndroid Build Coastguard Worker ** non-zero error code if there is an I/O error or if the name of 1422*a3141fd3SAndroid Build Coastguard Worker ** the file given in the second argument is illegal. If SQLITE_OK 1423*a3141fd3SAndroid Build Coastguard Worker ** is returned, then non-zero or zero is written into *pResOut to indicate 1424*a3141fd3SAndroid Build Coastguard Worker ** whether or not the file is accessible. 1425*a3141fd3SAndroid Build Coastguard Worker ** 1426*a3141fd3SAndroid Build Coastguard Worker ** ^SQLite will always allocate at least mxPathname+1 bytes for the 1427*a3141fd3SAndroid Build Coastguard Worker ** output buffer xFullPathname. The exact size of the output buffer 1428*a3141fd3SAndroid Build Coastguard Worker ** is also passed as a parameter to both methods. If the output buffer 1429*a3141fd3SAndroid Build Coastguard Worker ** is not large enough, [SQLITE_CANTOPEN] should be returned. Since this is 1430*a3141fd3SAndroid Build Coastguard Worker ** handled as a fatal error by SQLite, vfs implementations should endeavor 1431*a3141fd3SAndroid Build Coastguard Worker ** to prevent this by setting mxPathname to a sufficiently large value. 1432*a3141fd3SAndroid Build Coastguard Worker ** 1433*a3141fd3SAndroid Build Coastguard Worker ** The xRandomness(), xSleep(), xCurrentTime(), and xCurrentTimeInt64() 1434*a3141fd3SAndroid Build Coastguard Worker ** interfaces are not strictly a part of the filesystem, but they are 1435*a3141fd3SAndroid Build Coastguard Worker ** included in the VFS structure for completeness. 1436*a3141fd3SAndroid Build Coastguard Worker ** The xRandomness() function attempts to return nBytes bytes 1437*a3141fd3SAndroid Build Coastguard Worker ** of good-quality randomness into zOut. The return value is 1438*a3141fd3SAndroid Build Coastguard Worker ** the actual number of bytes of randomness obtained. 1439*a3141fd3SAndroid Build Coastguard Worker ** The xSleep() method causes the calling thread to sleep for at 1440*a3141fd3SAndroid Build Coastguard Worker ** least the number of microseconds given. ^The xCurrentTime() 1441*a3141fd3SAndroid Build Coastguard Worker ** method returns a Julian Day Number for the current date and time as 1442*a3141fd3SAndroid Build Coastguard Worker ** a floating point value. 1443*a3141fd3SAndroid Build Coastguard Worker ** ^The xCurrentTimeInt64() method returns, as an integer, the Julian 1444*a3141fd3SAndroid Build Coastguard Worker ** Day Number multiplied by 86400000 (the number of milliseconds in 1445*a3141fd3SAndroid Build Coastguard Worker ** a 24-hour day). 1446*a3141fd3SAndroid Build Coastguard Worker ** ^SQLite will use the xCurrentTimeInt64() method to get the current 1447*a3141fd3SAndroid Build Coastguard Worker ** date and time if that method is available (if iVersion is 2 or 1448*a3141fd3SAndroid Build Coastguard Worker ** greater and the function pointer is not NULL) and will fall back 1449*a3141fd3SAndroid Build Coastguard Worker ** to xCurrentTime() if xCurrentTimeInt64() is unavailable. 1450*a3141fd3SAndroid Build Coastguard Worker ** 1451*a3141fd3SAndroid Build Coastguard Worker ** ^The xSetSystemCall(), xGetSystemCall(), and xNestSystemCall() interfaces 1452*a3141fd3SAndroid Build Coastguard Worker ** are not used by the SQLite core. These optional interfaces are provided 1453*a3141fd3SAndroid Build Coastguard Worker ** by some VFSes to facilitate testing of the VFS code. By overriding 1454*a3141fd3SAndroid Build Coastguard Worker ** system calls with functions under its control, a test program can 1455*a3141fd3SAndroid Build Coastguard Worker ** simulate faults and error conditions that would otherwise be difficult 1456*a3141fd3SAndroid Build Coastguard Worker ** or impossible to induce. The set of system calls that can be overridden 1457*a3141fd3SAndroid Build Coastguard Worker ** varies from one VFS to another, and from one version of the same VFS to the 1458*a3141fd3SAndroid Build Coastguard Worker ** next. Applications that use these interfaces must be prepared for any 1459*a3141fd3SAndroid Build Coastguard Worker ** or all of these interfaces to be NULL or for their behavior to change 1460*a3141fd3SAndroid Build Coastguard Worker ** from one release to the next. Applications must not attempt to access 1461*a3141fd3SAndroid Build Coastguard Worker ** any of these methods if the iVersion of the VFS is less than 3. 1462*a3141fd3SAndroid Build Coastguard Worker */ 1463*a3141fd3SAndroid Build Coastguard Worker typedef struct sqlite3_vfs sqlite3_vfs; 1464*a3141fd3SAndroid Build Coastguard Worker typedef void (*sqlite3_syscall_ptr)(void); 1465*a3141fd3SAndroid Build Coastguard Worker struct sqlite3_vfs { 1466*a3141fd3SAndroid Build Coastguard Worker int iVersion; /* Structure version number (currently 3) */ 1467*a3141fd3SAndroid Build Coastguard Worker int szOsFile; /* Size of subclassed sqlite3_file */ 1468*a3141fd3SAndroid Build Coastguard Worker int mxPathname; /* Maximum file pathname length */ 1469*a3141fd3SAndroid Build Coastguard Worker sqlite3_vfs *pNext; /* Next registered VFS */ 1470*a3141fd3SAndroid Build Coastguard Worker const char *zName; /* Name of this virtual file system */ 1471*a3141fd3SAndroid Build Coastguard Worker void *pAppData; /* Pointer to application-specific data */ 1472*a3141fd3SAndroid Build Coastguard Worker int (*xOpen)(sqlite3_vfs*, sqlite3_filename zName, sqlite3_file*, 1473*a3141fd3SAndroid Build Coastguard Worker int flags, int *pOutFlags); 1474*a3141fd3SAndroid Build Coastguard Worker int (*xDelete)(sqlite3_vfs*, const char *zName, int syncDir); 1475*a3141fd3SAndroid Build Coastguard Worker int (*xAccess)(sqlite3_vfs*, const char *zName, int flags, int *pResOut); 1476*a3141fd3SAndroid Build Coastguard Worker int (*xFullPathname)(sqlite3_vfs*, const char *zName, int nOut, char *zOut); 1477*a3141fd3SAndroid Build Coastguard Worker void *(*xDlOpen)(sqlite3_vfs*, const char *zFilename); 1478*a3141fd3SAndroid Build Coastguard Worker void (*xDlError)(sqlite3_vfs*, int nByte, char *zErrMsg); 1479*a3141fd3SAndroid Build Coastguard Worker void (*(*xDlSym)(sqlite3_vfs*,void*, const char *zSymbol))(void); 1480*a3141fd3SAndroid Build Coastguard Worker void (*xDlClose)(sqlite3_vfs*, void*); 1481*a3141fd3SAndroid Build Coastguard Worker int (*xRandomness)(sqlite3_vfs*, int nByte, char *zOut); 1482*a3141fd3SAndroid Build Coastguard Worker int (*xSleep)(sqlite3_vfs*, int microseconds); 1483*a3141fd3SAndroid Build Coastguard Worker int (*xCurrentTime)(sqlite3_vfs*, double*); 1484*a3141fd3SAndroid Build Coastguard Worker int (*xGetLastError)(sqlite3_vfs*, int, char *); 1485*a3141fd3SAndroid Build Coastguard Worker /* 1486*a3141fd3SAndroid Build Coastguard Worker ** The methods above are in version 1 of the sqlite_vfs object 1487*a3141fd3SAndroid Build Coastguard Worker ** definition. Those that follow are added in version 2 or later 1488*a3141fd3SAndroid Build Coastguard Worker */ 1489*a3141fd3SAndroid Build Coastguard Worker int (*xCurrentTimeInt64)(sqlite3_vfs*, sqlite3_int64*); 1490*a3141fd3SAndroid Build Coastguard Worker /* 1491*a3141fd3SAndroid Build Coastguard Worker ** The methods above are in versions 1 and 2 of the sqlite_vfs object. 1492*a3141fd3SAndroid Build Coastguard Worker ** Those below are for version 3 and greater. 1493*a3141fd3SAndroid Build Coastguard Worker */ 1494*a3141fd3SAndroid Build Coastguard Worker int (*xSetSystemCall)(sqlite3_vfs*, const char *zName, sqlite3_syscall_ptr); 1495*a3141fd3SAndroid Build Coastguard Worker sqlite3_syscall_ptr (*xGetSystemCall)(sqlite3_vfs*, const char *zName); 1496*a3141fd3SAndroid Build Coastguard Worker const char *(*xNextSystemCall)(sqlite3_vfs*, const char *zName); 1497*a3141fd3SAndroid Build Coastguard Worker /* 1498*a3141fd3SAndroid Build Coastguard Worker ** The methods above are in versions 1 through 3 of the sqlite_vfs object. 1499*a3141fd3SAndroid Build Coastguard Worker ** New fields may be appended in future versions. The iVersion 1500*a3141fd3SAndroid Build Coastguard Worker ** value will increment whenever this happens. 1501*a3141fd3SAndroid Build Coastguard Worker */ 1502*a3141fd3SAndroid Build Coastguard Worker }; 1503*a3141fd3SAndroid Build Coastguard Worker 1504*a3141fd3SAndroid Build Coastguard Worker /* 1505*a3141fd3SAndroid Build Coastguard Worker ** CAPI3REF: Flags for the xAccess VFS method 1506*a3141fd3SAndroid Build Coastguard Worker ** 1507*a3141fd3SAndroid Build Coastguard Worker ** These integer constants can be used as the third parameter to 1508*a3141fd3SAndroid Build Coastguard Worker ** the xAccess method of an [sqlite3_vfs] object. They determine 1509*a3141fd3SAndroid Build Coastguard Worker ** what kind of permissions the xAccess method is looking for. 1510*a3141fd3SAndroid Build Coastguard Worker ** With SQLITE_ACCESS_EXISTS, the xAccess method 1511*a3141fd3SAndroid Build Coastguard Worker ** simply checks whether the file exists. 1512*a3141fd3SAndroid Build Coastguard Worker ** With SQLITE_ACCESS_READWRITE, the xAccess method 1513*a3141fd3SAndroid Build Coastguard Worker ** checks whether the named directory is both readable and writable 1514*a3141fd3SAndroid Build Coastguard Worker ** (in other words, if files can be added, removed, and renamed within 1515*a3141fd3SAndroid Build Coastguard Worker ** the directory). 1516*a3141fd3SAndroid Build Coastguard Worker ** The SQLITE_ACCESS_READWRITE constant is currently used only by the 1517*a3141fd3SAndroid Build Coastguard Worker ** [temp_store_directory pragma], though this could change in a future 1518*a3141fd3SAndroid Build Coastguard Worker ** release of SQLite. 1519*a3141fd3SAndroid Build Coastguard Worker ** With SQLITE_ACCESS_READ, the xAccess method 1520*a3141fd3SAndroid Build Coastguard Worker ** checks whether the file is readable. The SQLITE_ACCESS_READ constant is 1521*a3141fd3SAndroid Build Coastguard Worker ** currently unused, though it might be used in a future release of 1522*a3141fd3SAndroid Build Coastguard Worker ** SQLite. 1523*a3141fd3SAndroid Build Coastguard Worker */ 1524*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_ACCESS_EXISTS 0 1525*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_ACCESS_READWRITE 1 /* Used by PRAGMA temp_store_directory */ 1526*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_ACCESS_READ 2 /* Unused */ 1527*a3141fd3SAndroid Build Coastguard Worker 1528*a3141fd3SAndroid Build Coastguard Worker /* 1529*a3141fd3SAndroid Build Coastguard Worker ** CAPI3REF: Flags for the xShmLock VFS method 1530*a3141fd3SAndroid Build Coastguard Worker ** 1531*a3141fd3SAndroid Build Coastguard Worker ** These integer constants define the various locking operations 1532*a3141fd3SAndroid Build Coastguard Worker ** allowed by the xShmLock method of [sqlite3_io_methods]. The 1533*a3141fd3SAndroid Build Coastguard Worker ** following are the only legal combinations of flags to the 1534*a3141fd3SAndroid Build Coastguard Worker ** xShmLock method: 1535*a3141fd3SAndroid Build Coastguard Worker ** 1536*a3141fd3SAndroid Build Coastguard Worker ** <ul> 1537*a3141fd3SAndroid Build Coastguard Worker ** <li> SQLITE_SHM_LOCK | SQLITE_SHM_SHARED 1538*a3141fd3SAndroid Build Coastguard Worker ** <li> SQLITE_SHM_LOCK | SQLITE_SHM_EXCLUSIVE 1539*a3141fd3SAndroid Build Coastguard Worker ** <li> SQLITE_SHM_UNLOCK | SQLITE_SHM_SHARED 1540*a3141fd3SAndroid Build Coastguard Worker ** <li> SQLITE_SHM_UNLOCK | SQLITE_SHM_EXCLUSIVE 1541*a3141fd3SAndroid Build Coastguard Worker ** </ul> 1542*a3141fd3SAndroid Build Coastguard Worker ** 1543*a3141fd3SAndroid Build Coastguard Worker ** When unlocking, the same SHARED or EXCLUSIVE flag must be supplied as 1544*a3141fd3SAndroid Build Coastguard Worker ** was given on the corresponding lock. 1545*a3141fd3SAndroid Build Coastguard Worker ** 1546*a3141fd3SAndroid Build Coastguard Worker ** The xShmLock method can transition between unlocked and SHARED or 1547*a3141fd3SAndroid Build Coastguard Worker ** between unlocked and EXCLUSIVE. It cannot transition between SHARED 1548*a3141fd3SAndroid Build Coastguard Worker ** and EXCLUSIVE. 1549*a3141fd3SAndroid Build Coastguard Worker */ 1550*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_SHM_UNLOCK 1 1551*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_SHM_LOCK 2 1552*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_SHM_SHARED 4 1553*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_SHM_EXCLUSIVE 8 1554*a3141fd3SAndroid Build Coastguard Worker 1555*a3141fd3SAndroid Build Coastguard Worker /* 1556*a3141fd3SAndroid Build Coastguard Worker ** CAPI3REF: Maximum xShmLock index 1557*a3141fd3SAndroid Build Coastguard Worker ** 1558*a3141fd3SAndroid Build Coastguard Worker ** The xShmLock method on [sqlite3_io_methods] may use values 1559*a3141fd3SAndroid Build Coastguard Worker ** between 0 and this upper bound as its "offset" argument. 1560*a3141fd3SAndroid Build Coastguard Worker ** The SQLite core will never attempt to acquire or release a 1561*a3141fd3SAndroid Build Coastguard Worker ** lock outside of this range 1562*a3141fd3SAndroid Build Coastguard Worker */ 1563*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_SHM_NLOCK 8 1564*a3141fd3SAndroid Build Coastguard Worker 1565*a3141fd3SAndroid Build Coastguard Worker 1566*a3141fd3SAndroid Build Coastguard Worker /* 1567*a3141fd3SAndroid Build Coastguard Worker ** CAPI3REF: Initialize The SQLite Library 1568*a3141fd3SAndroid Build Coastguard Worker ** 1569*a3141fd3SAndroid Build Coastguard Worker ** ^The sqlite3_initialize() routine initializes the 1570*a3141fd3SAndroid Build Coastguard Worker ** SQLite library. ^The sqlite3_shutdown() routine 1571*a3141fd3SAndroid Build Coastguard Worker ** deallocates any resources that were allocated by sqlite3_initialize(). 1572*a3141fd3SAndroid Build Coastguard Worker ** These routines are designed to aid in process initialization and 1573*a3141fd3SAndroid Build Coastguard Worker ** shutdown on embedded systems. Workstation applications using 1574*a3141fd3SAndroid Build Coastguard Worker ** SQLite normally do not need to invoke either of these routines. 1575*a3141fd3SAndroid Build Coastguard Worker ** 1576*a3141fd3SAndroid Build Coastguard Worker ** A call to sqlite3_initialize() is an "effective" call if it is 1577*a3141fd3SAndroid Build Coastguard Worker ** the first time sqlite3_initialize() is invoked during the lifetime of 1578*a3141fd3SAndroid Build Coastguard Worker ** the process, or if it is the first time sqlite3_initialize() is invoked 1579*a3141fd3SAndroid Build Coastguard Worker ** following a call to sqlite3_shutdown(). ^(Only an effective call 1580*a3141fd3SAndroid Build Coastguard Worker ** of sqlite3_initialize() does any initialization. All other calls 1581*a3141fd3SAndroid Build Coastguard Worker ** are harmless no-ops.)^ 1582*a3141fd3SAndroid Build Coastguard Worker ** 1583*a3141fd3SAndroid Build Coastguard Worker ** A call to sqlite3_shutdown() is an "effective" call if it is the first 1584*a3141fd3SAndroid Build Coastguard Worker ** call to sqlite3_shutdown() since the last sqlite3_initialize(). ^(Only 1585*a3141fd3SAndroid Build Coastguard Worker ** an effective call to sqlite3_shutdown() does any deinitialization. 1586*a3141fd3SAndroid Build Coastguard Worker ** All other valid calls to sqlite3_shutdown() are harmless no-ops.)^ 1587*a3141fd3SAndroid Build Coastguard Worker ** 1588*a3141fd3SAndroid Build Coastguard Worker ** The sqlite3_initialize() interface is threadsafe, but sqlite3_shutdown() 1589*a3141fd3SAndroid Build Coastguard Worker ** is not. The sqlite3_shutdown() interface must only be called from a 1590*a3141fd3SAndroid Build Coastguard Worker ** single thread. All open [database connections] must be closed and all 1591*a3141fd3SAndroid Build Coastguard Worker ** other SQLite resources must be deallocated prior to invoking 1592*a3141fd3SAndroid Build Coastguard Worker ** sqlite3_shutdown(). 1593*a3141fd3SAndroid Build Coastguard Worker ** 1594*a3141fd3SAndroid Build Coastguard Worker ** Among other things, ^sqlite3_initialize() will invoke 1595*a3141fd3SAndroid Build Coastguard Worker ** sqlite3_os_init(). Similarly, ^sqlite3_shutdown() 1596*a3141fd3SAndroid Build Coastguard Worker ** will invoke sqlite3_os_end(). 1597*a3141fd3SAndroid Build Coastguard Worker ** 1598*a3141fd3SAndroid Build Coastguard Worker ** ^The sqlite3_initialize() routine returns [SQLITE_OK] on success. 1599*a3141fd3SAndroid Build Coastguard Worker ** ^If for some reason, sqlite3_initialize() is unable to initialize 1600*a3141fd3SAndroid Build Coastguard Worker ** the library (perhaps it is unable to allocate a needed resource such 1601*a3141fd3SAndroid Build Coastguard Worker ** as a mutex) it returns an [error code] other than [SQLITE_OK]. 1602*a3141fd3SAndroid Build Coastguard Worker ** 1603*a3141fd3SAndroid Build Coastguard Worker ** ^The sqlite3_initialize() routine is called internally by many other 1604*a3141fd3SAndroid Build Coastguard Worker ** SQLite interfaces so that an application usually does not need to 1605*a3141fd3SAndroid Build Coastguard Worker ** invoke sqlite3_initialize() directly. For example, [sqlite3_open()] 1606*a3141fd3SAndroid Build Coastguard Worker ** calls sqlite3_initialize() so the SQLite library will be automatically 1607*a3141fd3SAndroid Build Coastguard Worker ** initialized when [sqlite3_open()] is called if it has not be initialized 1608*a3141fd3SAndroid Build Coastguard Worker ** already. ^However, if SQLite is compiled with the [SQLITE_OMIT_AUTOINIT] 1609*a3141fd3SAndroid Build Coastguard Worker ** compile-time option, then the automatic calls to sqlite3_initialize() 1610*a3141fd3SAndroid Build Coastguard Worker ** are omitted and the application must call sqlite3_initialize() directly 1611*a3141fd3SAndroid Build Coastguard Worker ** prior to using any other SQLite interface. For maximum portability, 1612*a3141fd3SAndroid Build Coastguard Worker ** it is recommended that applications always invoke sqlite3_initialize() 1613*a3141fd3SAndroid Build Coastguard Worker ** directly prior to using any other SQLite interface. Future releases 1614*a3141fd3SAndroid Build Coastguard Worker ** of SQLite may require this. In other words, the behavior exhibited 1615*a3141fd3SAndroid Build Coastguard Worker ** when SQLite is compiled with [SQLITE_OMIT_AUTOINIT] might become the 1616*a3141fd3SAndroid Build Coastguard Worker ** default behavior in some future release of SQLite. 1617*a3141fd3SAndroid Build Coastguard Worker ** 1618*a3141fd3SAndroid Build Coastguard Worker ** The sqlite3_os_init() routine does operating-system specific 1619*a3141fd3SAndroid Build Coastguard Worker ** initialization of the SQLite library. The sqlite3_os_end() 1620*a3141fd3SAndroid Build Coastguard Worker ** routine undoes the effect of sqlite3_os_init(). Typical tasks 1621*a3141fd3SAndroid Build Coastguard Worker ** performed by these routines include allocation or deallocation 1622*a3141fd3SAndroid Build Coastguard Worker ** of static resources, initialization of global variables, 1623*a3141fd3SAndroid Build Coastguard Worker ** setting up a default [sqlite3_vfs] module, or setting up 1624*a3141fd3SAndroid Build Coastguard Worker ** a default configuration using [sqlite3_config()]. 1625*a3141fd3SAndroid Build Coastguard Worker ** 1626*a3141fd3SAndroid Build Coastguard Worker ** The application should never invoke either sqlite3_os_init() 1627*a3141fd3SAndroid Build Coastguard Worker ** or sqlite3_os_end() directly. The application should only invoke 1628*a3141fd3SAndroid Build Coastguard Worker ** sqlite3_initialize() and sqlite3_shutdown(). The sqlite3_os_init() 1629*a3141fd3SAndroid Build Coastguard Worker ** interface is called automatically by sqlite3_initialize() and 1630*a3141fd3SAndroid Build Coastguard Worker ** sqlite3_os_end() is called by sqlite3_shutdown(). Appropriate 1631*a3141fd3SAndroid Build Coastguard Worker ** implementations for sqlite3_os_init() and sqlite3_os_end() 1632*a3141fd3SAndroid Build Coastguard Worker ** are built into SQLite when it is compiled for Unix, Windows, or OS/2. 1633*a3141fd3SAndroid Build Coastguard Worker ** When [custom builds | built for other platforms] 1634*a3141fd3SAndroid Build Coastguard Worker ** (using the [SQLITE_OS_OTHER=1] compile-time 1635*a3141fd3SAndroid Build Coastguard Worker ** option) the application must supply a suitable implementation for 1636*a3141fd3SAndroid Build Coastguard Worker ** sqlite3_os_init() and sqlite3_os_end(). An application-supplied 1637*a3141fd3SAndroid Build Coastguard Worker ** implementation of sqlite3_os_init() or sqlite3_os_end() 1638*a3141fd3SAndroid Build Coastguard Worker ** must return [SQLITE_OK] on success and some other [error code] upon 1639*a3141fd3SAndroid Build Coastguard Worker ** failure. 1640*a3141fd3SAndroid Build Coastguard Worker */ 1641*a3141fd3SAndroid Build Coastguard Worker SQLITE_API int sqlite3_initialize(void); 1642*a3141fd3SAndroid Build Coastguard Worker SQLITE_API int sqlite3_shutdown(void); 1643*a3141fd3SAndroid Build Coastguard Worker SQLITE_API int sqlite3_os_init(void); 1644*a3141fd3SAndroid Build Coastguard Worker SQLITE_API int sqlite3_os_end(void); 1645*a3141fd3SAndroid Build Coastguard Worker 1646*a3141fd3SAndroid Build Coastguard Worker /* 1647*a3141fd3SAndroid Build Coastguard Worker ** CAPI3REF: Configuring The SQLite Library 1648*a3141fd3SAndroid Build Coastguard Worker ** 1649*a3141fd3SAndroid Build Coastguard Worker ** The sqlite3_config() interface is used to make global configuration 1650*a3141fd3SAndroid Build Coastguard Worker ** changes to SQLite in order to tune SQLite to the specific needs of 1651*a3141fd3SAndroid Build Coastguard Worker ** the application. The default configuration is recommended for most 1652*a3141fd3SAndroid Build Coastguard Worker ** applications and so this routine is usually not necessary. It is 1653*a3141fd3SAndroid Build Coastguard Worker ** provided to support rare applications with unusual needs. 1654*a3141fd3SAndroid Build Coastguard Worker ** 1655*a3141fd3SAndroid Build Coastguard Worker ** <b>The sqlite3_config() interface is not threadsafe. The application 1656*a3141fd3SAndroid Build Coastguard Worker ** must ensure that no other SQLite interfaces are invoked by other 1657*a3141fd3SAndroid Build Coastguard Worker ** threads while sqlite3_config() is running.</b> 1658*a3141fd3SAndroid Build Coastguard Worker ** 1659*a3141fd3SAndroid Build Coastguard Worker ** The first argument to sqlite3_config() is an integer 1660*a3141fd3SAndroid Build Coastguard Worker ** [configuration option] that determines 1661*a3141fd3SAndroid Build Coastguard Worker ** what property of SQLite is to be configured. Subsequent arguments 1662*a3141fd3SAndroid Build Coastguard Worker ** vary depending on the [configuration option] 1663*a3141fd3SAndroid Build Coastguard Worker ** in the first argument. 1664*a3141fd3SAndroid Build Coastguard Worker ** 1665*a3141fd3SAndroid Build Coastguard Worker ** For most configuration options, the sqlite3_config() interface 1666*a3141fd3SAndroid Build Coastguard Worker ** may only be invoked prior to library initialization using 1667*a3141fd3SAndroid Build Coastguard Worker ** [sqlite3_initialize()] or after shutdown by [sqlite3_shutdown()]. 1668*a3141fd3SAndroid Build Coastguard Worker ** The exceptional configuration options that may be invoked at any time 1669*a3141fd3SAndroid Build Coastguard Worker ** are called "anytime configuration options". 1670*a3141fd3SAndroid Build Coastguard Worker ** ^If sqlite3_config() is called after [sqlite3_initialize()] and before 1671*a3141fd3SAndroid Build Coastguard Worker ** [sqlite3_shutdown()] with a first argument that is not an anytime 1672*a3141fd3SAndroid Build Coastguard Worker ** configuration option, then the sqlite3_config() call will return SQLITE_MISUSE. 1673*a3141fd3SAndroid Build Coastguard Worker ** Note, however, that ^sqlite3_config() can be called as part of the 1674*a3141fd3SAndroid Build Coastguard Worker ** implementation of an application-defined [sqlite3_os_init()]. 1675*a3141fd3SAndroid Build Coastguard Worker ** 1676*a3141fd3SAndroid Build Coastguard Worker ** ^When a configuration option is set, sqlite3_config() returns [SQLITE_OK]. 1677*a3141fd3SAndroid Build Coastguard Worker ** ^If the option is unknown or SQLite is unable to set the option 1678*a3141fd3SAndroid Build Coastguard Worker ** then this routine returns a non-zero [error code]. 1679*a3141fd3SAndroid Build Coastguard Worker */ 1680*a3141fd3SAndroid Build Coastguard Worker SQLITE_API int sqlite3_config(int, ...); 1681*a3141fd3SAndroid Build Coastguard Worker 1682*a3141fd3SAndroid Build Coastguard Worker /* 1683*a3141fd3SAndroid Build Coastguard Worker ** CAPI3REF: Configure database connections 1684*a3141fd3SAndroid Build Coastguard Worker ** METHOD: sqlite3 1685*a3141fd3SAndroid Build Coastguard Worker ** 1686*a3141fd3SAndroid Build Coastguard Worker ** The sqlite3_db_config() interface is used to make configuration 1687*a3141fd3SAndroid Build Coastguard Worker ** changes to a [database connection]. The interface is similar to 1688*a3141fd3SAndroid Build Coastguard Worker ** [sqlite3_config()] except that the changes apply to a single 1689*a3141fd3SAndroid Build Coastguard Worker ** [database connection] (specified in the first argument). 1690*a3141fd3SAndroid Build Coastguard Worker ** 1691*a3141fd3SAndroid Build Coastguard Worker ** The second argument to sqlite3_db_config(D,V,...) is the 1692*a3141fd3SAndroid Build Coastguard Worker ** [SQLITE_DBCONFIG_LOOKASIDE | configuration verb] - an integer code 1693*a3141fd3SAndroid Build Coastguard Worker ** that indicates what aspect of the [database connection] is being configured. 1694*a3141fd3SAndroid Build Coastguard Worker ** Subsequent arguments vary depending on the configuration verb. 1695*a3141fd3SAndroid Build Coastguard Worker ** 1696*a3141fd3SAndroid Build Coastguard Worker ** ^Calls to sqlite3_db_config() return SQLITE_OK if and only if 1697*a3141fd3SAndroid Build Coastguard Worker ** the call is considered successful. 1698*a3141fd3SAndroid Build Coastguard Worker */ 1699*a3141fd3SAndroid Build Coastguard Worker SQLITE_API int sqlite3_db_config(sqlite3*, int op, ...); 1700*a3141fd3SAndroid Build Coastguard Worker 1701*a3141fd3SAndroid Build Coastguard Worker /* 1702*a3141fd3SAndroid Build Coastguard Worker ** CAPI3REF: Memory Allocation Routines 1703*a3141fd3SAndroid Build Coastguard Worker ** 1704*a3141fd3SAndroid Build Coastguard Worker ** An instance of this object defines the interface between SQLite 1705*a3141fd3SAndroid Build Coastguard Worker ** and low-level memory allocation routines. 1706*a3141fd3SAndroid Build Coastguard Worker ** 1707*a3141fd3SAndroid Build Coastguard Worker ** This object is used in only one place in the SQLite interface. 1708*a3141fd3SAndroid Build Coastguard Worker ** A pointer to an instance of this object is the argument to 1709*a3141fd3SAndroid Build Coastguard Worker ** [sqlite3_config()] when the configuration option is 1710*a3141fd3SAndroid Build Coastguard Worker ** [SQLITE_CONFIG_MALLOC] or [SQLITE_CONFIG_GETMALLOC]. 1711*a3141fd3SAndroid Build Coastguard Worker ** By creating an instance of this object 1712*a3141fd3SAndroid Build Coastguard Worker ** and passing it to [sqlite3_config]([SQLITE_CONFIG_MALLOC]) 1713*a3141fd3SAndroid Build Coastguard Worker ** during configuration, an application can specify an alternative 1714*a3141fd3SAndroid Build Coastguard Worker ** memory allocation subsystem for SQLite to use for all of its 1715*a3141fd3SAndroid Build Coastguard Worker ** dynamic memory needs. 1716*a3141fd3SAndroid Build Coastguard Worker ** 1717*a3141fd3SAndroid Build Coastguard Worker ** Note that SQLite comes with several [built-in memory allocators] 1718*a3141fd3SAndroid Build Coastguard Worker ** that are perfectly adequate for the overwhelming majority of applications 1719*a3141fd3SAndroid Build Coastguard Worker ** and that this object is only useful to a tiny minority of applications 1720*a3141fd3SAndroid Build Coastguard Worker ** with specialized memory allocation requirements. This object is 1721*a3141fd3SAndroid Build Coastguard Worker ** also used during testing of SQLite in order to specify an alternative 1722*a3141fd3SAndroid Build Coastguard Worker ** memory allocator that simulates memory out-of-memory conditions in 1723*a3141fd3SAndroid Build Coastguard Worker ** order to verify that SQLite recovers gracefully from such 1724*a3141fd3SAndroid Build Coastguard Worker ** conditions. 1725*a3141fd3SAndroid Build Coastguard Worker ** 1726*a3141fd3SAndroid Build Coastguard Worker ** The xMalloc, xRealloc, and xFree methods must work like the 1727*a3141fd3SAndroid Build Coastguard Worker ** malloc(), realloc() and free() functions from the standard C library. 1728*a3141fd3SAndroid Build Coastguard Worker ** ^SQLite guarantees that the second argument to 1729*a3141fd3SAndroid Build Coastguard Worker ** xRealloc is always a value returned by a prior call to xRoundup. 1730*a3141fd3SAndroid Build Coastguard Worker ** 1731*a3141fd3SAndroid Build Coastguard Worker ** xSize should return the allocated size of a memory allocation 1732*a3141fd3SAndroid Build Coastguard Worker ** previously obtained from xMalloc or xRealloc. The allocated size 1733*a3141fd3SAndroid Build Coastguard Worker ** is always at least as big as the requested size but may be larger. 1734*a3141fd3SAndroid Build Coastguard Worker ** 1735*a3141fd3SAndroid Build Coastguard Worker ** The xRoundup method returns what would be the allocated size of 1736*a3141fd3SAndroid Build Coastguard Worker ** a memory allocation given a particular requested size. Most memory 1737*a3141fd3SAndroid Build Coastguard Worker ** allocators round up memory allocations at least to the next multiple 1738*a3141fd3SAndroid Build Coastguard Worker ** of 8. Some allocators round up to a larger multiple or to a power of 2. 1739*a3141fd3SAndroid Build Coastguard Worker ** Every memory allocation request coming in through [sqlite3_malloc()] 1740*a3141fd3SAndroid Build Coastguard Worker ** or [sqlite3_realloc()] first calls xRoundup. If xRoundup returns 0, 1741*a3141fd3SAndroid Build Coastguard Worker ** that causes the corresponding memory allocation to fail. 1742*a3141fd3SAndroid Build Coastguard Worker ** 1743*a3141fd3SAndroid Build Coastguard Worker ** The xInit method initializes the memory allocator. For example, 1744*a3141fd3SAndroid Build Coastguard Worker ** it might allocate any required mutexes or initialize internal data 1745*a3141fd3SAndroid Build Coastguard Worker ** structures. The xShutdown method is invoked (indirectly) by 1746*a3141fd3SAndroid Build Coastguard Worker ** [sqlite3_shutdown()] and should deallocate any resources acquired 1747*a3141fd3SAndroid Build Coastguard Worker ** by xInit. The pAppData pointer is used as the only parameter to 1748*a3141fd3SAndroid Build Coastguard Worker ** xInit and xShutdown. 1749*a3141fd3SAndroid Build Coastguard Worker ** 1750*a3141fd3SAndroid Build Coastguard Worker ** SQLite holds the [SQLITE_MUTEX_STATIC_MAIN] mutex when it invokes 1751*a3141fd3SAndroid Build Coastguard Worker ** the xInit method, so the xInit method need not be threadsafe. The 1752*a3141fd3SAndroid Build Coastguard Worker ** xShutdown method is only called from [sqlite3_shutdown()] so it does 1753*a3141fd3SAndroid Build Coastguard Worker ** not need to be threadsafe either. For all other methods, SQLite 1754*a3141fd3SAndroid Build Coastguard Worker ** holds the [SQLITE_MUTEX_STATIC_MEM] mutex as long as the 1755*a3141fd3SAndroid Build Coastguard Worker ** [SQLITE_CONFIG_MEMSTATUS] configuration option is turned on (which 1756*a3141fd3SAndroid Build Coastguard Worker ** it is by default) and so the methods are automatically serialized. 1757*a3141fd3SAndroid Build Coastguard Worker ** However, if [SQLITE_CONFIG_MEMSTATUS] is disabled, then the other 1758*a3141fd3SAndroid Build Coastguard Worker ** methods must be threadsafe or else make their own arrangements for 1759*a3141fd3SAndroid Build Coastguard Worker ** serialization. 1760*a3141fd3SAndroid Build Coastguard Worker ** 1761*a3141fd3SAndroid Build Coastguard Worker ** SQLite will never invoke xInit() more than once without an intervening 1762*a3141fd3SAndroid Build Coastguard Worker ** call to xShutdown(). 1763*a3141fd3SAndroid Build Coastguard Worker */ 1764*a3141fd3SAndroid Build Coastguard Worker typedef struct sqlite3_mem_methods sqlite3_mem_methods; 1765*a3141fd3SAndroid Build Coastguard Worker struct sqlite3_mem_methods { 1766*a3141fd3SAndroid Build Coastguard Worker void *(*xMalloc)(int); /* Memory allocation function */ 1767*a3141fd3SAndroid Build Coastguard Worker void (*xFree)(void*); /* Free a prior allocation */ 1768*a3141fd3SAndroid Build Coastguard Worker void *(*xRealloc)(void*,int); /* Resize an allocation */ 1769*a3141fd3SAndroid Build Coastguard Worker int (*xSize)(void*); /* Return the size of an allocation */ 1770*a3141fd3SAndroid Build Coastguard Worker int (*xRoundup)(int); /* Round up request size to allocation size */ 1771*a3141fd3SAndroid Build Coastguard Worker int (*xInit)(void*); /* Initialize the memory allocator */ 1772*a3141fd3SAndroid Build Coastguard Worker void (*xShutdown)(void*); /* Deinitialize the memory allocator */ 1773*a3141fd3SAndroid Build Coastguard Worker void *pAppData; /* Argument to xInit() and xShutdown() */ 1774*a3141fd3SAndroid Build Coastguard Worker }; 1775*a3141fd3SAndroid Build Coastguard Worker 1776*a3141fd3SAndroid Build Coastguard Worker /* 1777*a3141fd3SAndroid Build Coastguard Worker ** CAPI3REF: Configuration Options 1778*a3141fd3SAndroid Build Coastguard Worker ** KEYWORDS: {configuration option} 1779*a3141fd3SAndroid Build Coastguard Worker ** 1780*a3141fd3SAndroid Build Coastguard Worker ** These constants are the available integer configuration options that 1781*a3141fd3SAndroid Build Coastguard Worker ** can be passed as the first argument to the [sqlite3_config()] interface. 1782*a3141fd3SAndroid Build Coastguard Worker ** 1783*a3141fd3SAndroid Build Coastguard Worker ** Most of the configuration options for sqlite3_config() 1784*a3141fd3SAndroid Build Coastguard Worker ** will only work if invoked prior to [sqlite3_initialize()] or after 1785*a3141fd3SAndroid Build Coastguard Worker ** [sqlite3_shutdown()]. The few exceptions to this rule are called 1786*a3141fd3SAndroid Build Coastguard Worker ** "anytime configuration options". 1787*a3141fd3SAndroid Build Coastguard Worker ** ^Calling [sqlite3_config()] with a first argument that is not an 1788*a3141fd3SAndroid Build Coastguard Worker ** anytime configuration option in between calls to [sqlite3_initialize()] and 1789*a3141fd3SAndroid Build Coastguard Worker ** [sqlite3_shutdown()] is a no-op that returns SQLITE_MISUSE. 1790*a3141fd3SAndroid Build Coastguard Worker ** 1791*a3141fd3SAndroid Build Coastguard Worker ** The set of anytime configuration options can change (by insertions 1792*a3141fd3SAndroid Build Coastguard Worker ** and/or deletions) from one release of SQLite to the next. 1793*a3141fd3SAndroid Build Coastguard Worker ** As of SQLite version 3.42.0, the complete set of anytime configuration 1794*a3141fd3SAndroid Build Coastguard Worker ** options is: 1795*a3141fd3SAndroid Build Coastguard Worker ** <ul> 1796*a3141fd3SAndroid Build Coastguard Worker ** <li> SQLITE_CONFIG_LOG 1797*a3141fd3SAndroid Build Coastguard Worker ** <li> SQLITE_CONFIG_PCACHE_HDRSZ 1798*a3141fd3SAndroid Build Coastguard Worker ** </ul> 1799*a3141fd3SAndroid Build Coastguard Worker ** 1800*a3141fd3SAndroid Build Coastguard Worker ** New configuration options may be added in future releases of SQLite. 1801*a3141fd3SAndroid Build Coastguard Worker ** Existing configuration options might be discontinued. Applications 1802*a3141fd3SAndroid Build Coastguard Worker ** should check the return code from [sqlite3_config()] to make sure that 1803*a3141fd3SAndroid Build Coastguard Worker ** the call worked. The [sqlite3_config()] interface will return a 1804*a3141fd3SAndroid Build Coastguard Worker ** non-zero [error code] if a discontinued or unsupported configuration option 1805*a3141fd3SAndroid Build Coastguard Worker ** is invoked. 1806*a3141fd3SAndroid Build Coastguard Worker ** 1807*a3141fd3SAndroid Build Coastguard Worker ** <dl> 1808*a3141fd3SAndroid Build Coastguard Worker ** [[SQLITE_CONFIG_SINGLETHREAD]] <dt>SQLITE_CONFIG_SINGLETHREAD</dt> 1809*a3141fd3SAndroid Build Coastguard Worker ** <dd>There are no arguments to this option. ^This option sets the 1810*a3141fd3SAndroid Build Coastguard Worker ** [threading mode] to Single-thread. In other words, it disables 1811*a3141fd3SAndroid Build Coastguard Worker ** all mutexing and puts SQLite into a mode where it can only be used 1812*a3141fd3SAndroid Build Coastguard Worker ** by a single thread. ^If SQLite is compiled with 1813*a3141fd3SAndroid Build Coastguard Worker ** the [SQLITE_THREADSAFE | SQLITE_THREADSAFE=0] compile-time option then 1814*a3141fd3SAndroid Build Coastguard Worker ** it is not possible to change the [threading mode] from its default 1815*a3141fd3SAndroid Build Coastguard Worker ** value of Single-thread and so [sqlite3_config()] will return 1816*a3141fd3SAndroid Build Coastguard Worker ** [SQLITE_ERROR] if called with the SQLITE_CONFIG_SINGLETHREAD 1817*a3141fd3SAndroid Build Coastguard Worker ** configuration option.</dd> 1818*a3141fd3SAndroid Build Coastguard Worker ** 1819*a3141fd3SAndroid Build Coastguard Worker ** [[SQLITE_CONFIG_MULTITHREAD]] <dt>SQLITE_CONFIG_MULTITHREAD</dt> 1820*a3141fd3SAndroid Build Coastguard Worker ** <dd>There are no arguments to this option. ^This option sets the 1821*a3141fd3SAndroid Build Coastguard Worker ** [threading mode] to Multi-thread. In other words, it disables 1822*a3141fd3SAndroid Build Coastguard Worker ** mutexing on [database connection] and [prepared statement] objects. 1823*a3141fd3SAndroid Build Coastguard Worker ** The application is responsible for serializing access to 1824*a3141fd3SAndroid Build Coastguard Worker ** [database connections] and [prepared statements]. But other mutexes 1825*a3141fd3SAndroid Build Coastguard Worker ** are enabled so that SQLite will be safe to use in a multi-threaded 1826*a3141fd3SAndroid Build Coastguard Worker ** environment as long as no two threads attempt to use the same 1827*a3141fd3SAndroid Build Coastguard Worker ** [database connection] at the same time. ^If SQLite is compiled with 1828*a3141fd3SAndroid Build Coastguard Worker ** the [SQLITE_THREADSAFE | SQLITE_THREADSAFE=0] compile-time option then 1829*a3141fd3SAndroid Build Coastguard Worker ** it is not possible to set the Multi-thread [threading mode] and 1830*a3141fd3SAndroid Build Coastguard Worker ** [sqlite3_config()] will return [SQLITE_ERROR] if called with the 1831*a3141fd3SAndroid Build Coastguard Worker ** SQLITE_CONFIG_MULTITHREAD configuration option.</dd> 1832*a3141fd3SAndroid Build Coastguard Worker ** 1833*a3141fd3SAndroid Build Coastguard Worker ** [[SQLITE_CONFIG_SERIALIZED]] <dt>SQLITE_CONFIG_SERIALIZED</dt> 1834*a3141fd3SAndroid Build Coastguard Worker ** <dd>There are no arguments to this option. ^This option sets the 1835*a3141fd3SAndroid Build Coastguard Worker ** [threading mode] to Serialized. In other words, this option enables 1836*a3141fd3SAndroid Build Coastguard Worker ** all mutexes including the recursive 1837*a3141fd3SAndroid Build Coastguard Worker ** mutexes on [database connection] and [prepared statement] objects. 1838*a3141fd3SAndroid Build Coastguard Worker ** In this mode (which is the default when SQLite is compiled with 1839*a3141fd3SAndroid Build Coastguard Worker ** [SQLITE_THREADSAFE=1]) the SQLite library will itself serialize access 1840*a3141fd3SAndroid Build Coastguard Worker ** to [database connections] and [prepared statements] so that the 1841*a3141fd3SAndroid Build Coastguard Worker ** application is free to use the same [database connection] or the 1842*a3141fd3SAndroid Build Coastguard Worker ** same [prepared statement] in different threads at the same time. 1843*a3141fd3SAndroid Build Coastguard Worker ** ^If SQLite is compiled with 1844*a3141fd3SAndroid Build Coastguard Worker ** the [SQLITE_THREADSAFE | SQLITE_THREADSAFE=0] compile-time option then 1845*a3141fd3SAndroid Build Coastguard Worker ** it is not possible to set the Serialized [threading mode] and 1846*a3141fd3SAndroid Build Coastguard Worker ** [sqlite3_config()] will return [SQLITE_ERROR] if called with the 1847*a3141fd3SAndroid Build Coastguard Worker ** SQLITE_CONFIG_SERIALIZED configuration option.</dd> 1848*a3141fd3SAndroid Build Coastguard Worker ** 1849*a3141fd3SAndroid Build Coastguard Worker ** [[SQLITE_CONFIG_MALLOC]] <dt>SQLITE_CONFIG_MALLOC</dt> 1850*a3141fd3SAndroid Build Coastguard Worker ** <dd> ^(The SQLITE_CONFIG_MALLOC option takes a single argument which is 1851*a3141fd3SAndroid Build Coastguard Worker ** a pointer to an instance of the [sqlite3_mem_methods] structure. 1852*a3141fd3SAndroid Build Coastguard Worker ** The argument specifies 1853*a3141fd3SAndroid Build Coastguard Worker ** alternative low-level memory allocation routines to be used in place of 1854*a3141fd3SAndroid Build Coastguard Worker ** the memory allocation routines built into SQLite.)^ ^SQLite makes 1855*a3141fd3SAndroid Build Coastguard Worker ** its own private copy of the content of the [sqlite3_mem_methods] structure 1856*a3141fd3SAndroid Build Coastguard Worker ** before the [sqlite3_config()] call returns.</dd> 1857*a3141fd3SAndroid Build Coastguard Worker ** 1858*a3141fd3SAndroid Build Coastguard Worker ** [[SQLITE_CONFIG_GETMALLOC]] <dt>SQLITE_CONFIG_GETMALLOC</dt> 1859*a3141fd3SAndroid Build Coastguard Worker ** <dd> ^(The SQLITE_CONFIG_GETMALLOC option takes a single argument which 1860*a3141fd3SAndroid Build Coastguard Worker ** is a pointer to an instance of the [sqlite3_mem_methods] structure. 1861*a3141fd3SAndroid Build Coastguard Worker ** The [sqlite3_mem_methods] 1862*a3141fd3SAndroid Build Coastguard Worker ** structure is filled with the currently defined memory allocation routines.)^ 1863*a3141fd3SAndroid Build Coastguard Worker ** This option can be used to overload the default memory allocation 1864*a3141fd3SAndroid Build Coastguard Worker ** routines with a wrapper that simulations memory allocation failure or 1865*a3141fd3SAndroid Build Coastguard Worker ** tracks memory usage, for example. </dd> 1866*a3141fd3SAndroid Build Coastguard Worker ** 1867*a3141fd3SAndroid Build Coastguard Worker ** [[SQLITE_CONFIG_SMALL_MALLOC]] <dt>SQLITE_CONFIG_SMALL_MALLOC</dt> 1868*a3141fd3SAndroid Build Coastguard Worker ** <dd> ^The SQLITE_CONFIG_SMALL_MALLOC option takes single argument of 1869*a3141fd3SAndroid Build Coastguard Worker ** type int, interpreted as a boolean, which if true provides a hint to 1870*a3141fd3SAndroid Build Coastguard Worker ** SQLite that it should avoid large memory allocations if possible. 1871*a3141fd3SAndroid Build Coastguard Worker ** SQLite will run faster if it is free to make large memory allocations, 1872*a3141fd3SAndroid Build Coastguard Worker ** but some application might prefer to run slower in exchange for 1873*a3141fd3SAndroid Build Coastguard Worker ** guarantees about memory fragmentation that are possible if large 1874*a3141fd3SAndroid Build Coastguard Worker ** allocations are avoided. This hint is normally off. 1875*a3141fd3SAndroid Build Coastguard Worker ** </dd> 1876*a3141fd3SAndroid Build Coastguard Worker ** 1877*a3141fd3SAndroid Build Coastguard Worker ** [[SQLITE_CONFIG_MEMSTATUS]] <dt>SQLITE_CONFIG_MEMSTATUS</dt> 1878*a3141fd3SAndroid Build Coastguard Worker ** <dd> ^The SQLITE_CONFIG_MEMSTATUS option takes single argument of type int, 1879*a3141fd3SAndroid Build Coastguard Worker ** interpreted as a boolean, which enables or disables the collection of 1880*a3141fd3SAndroid Build Coastguard Worker ** memory allocation statistics. ^(When memory allocation statistics are 1881*a3141fd3SAndroid Build Coastguard Worker ** disabled, the following SQLite interfaces become non-operational: 1882*a3141fd3SAndroid Build Coastguard Worker ** <ul> 1883*a3141fd3SAndroid Build Coastguard Worker ** <li> [sqlite3_hard_heap_limit64()] 1884*a3141fd3SAndroid Build Coastguard Worker ** <li> [sqlite3_memory_used()] 1885*a3141fd3SAndroid Build Coastguard Worker ** <li> [sqlite3_memory_highwater()] 1886*a3141fd3SAndroid Build Coastguard Worker ** <li> [sqlite3_soft_heap_limit64()] 1887*a3141fd3SAndroid Build Coastguard Worker ** <li> [sqlite3_status64()] 1888*a3141fd3SAndroid Build Coastguard Worker ** </ul>)^ 1889*a3141fd3SAndroid Build Coastguard Worker ** ^Memory allocation statistics are enabled by default unless SQLite is 1890*a3141fd3SAndroid Build Coastguard Worker ** compiled with [SQLITE_DEFAULT_MEMSTATUS]=0 in which case memory 1891*a3141fd3SAndroid Build Coastguard Worker ** allocation statistics are disabled by default. 1892*a3141fd3SAndroid Build Coastguard Worker ** </dd> 1893*a3141fd3SAndroid Build Coastguard Worker ** 1894*a3141fd3SAndroid Build Coastguard Worker ** [[SQLITE_CONFIG_SCRATCH]] <dt>SQLITE_CONFIG_SCRATCH</dt> 1895*a3141fd3SAndroid Build Coastguard Worker ** <dd> The SQLITE_CONFIG_SCRATCH option is no longer used. 1896*a3141fd3SAndroid Build Coastguard Worker ** </dd> 1897*a3141fd3SAndroid Build Coastguard Worker ** 1898*a3141fd3SAndroid Build Coastguard Worker ** [[SQLITE_CONFIG_PAGECACHE]] <dt>SQLITE_CONFIG_PAGECACHE</dt> 1899*a3141fd3SAndroid Build Coastguard Worker ** <dd> ^The SQLITE_CONFIG_PAGECACHE option specifies a memory pool 1900*a3141fd3SAndroid Build Coastguard Worker ** that SQLite can use for the database page cache with the default page 1901*a3141fd3SAndroid Build Coastguard Worker ** cache implementation. 1902*a3141fd3SAndroid Build Coastguard Worker ** This configuration option is a no-op if an application-defined page 1903*a3141fd3SAndroid Build Coastguard Worker ** cache implementation is loaded using the [SQLITE_CONFIG_PCACHE2]. 1904*a3141fd3SAndroid Build Coastguard Worker ** ^There are three arguments to SQLITE_CONFIG_PAGECACHE: A pointer to 1905*a3141fd3SAndroid Build Coastguard Worker ** 8-byte aligned memory (pMem), the size of each page cache line (sz), 1906*a3141fd3SAndroid Build Coastguard Worker ** and the number of cache lines (N). 1907*a3141fd3SAndroid Build Coastguard Worker ** The sz argument should be the size of the largest database page 1908*a3141fd3SAndroid Build Coastguard Worker ** (a power of two between 512 and 65536) plus some extra bytes for each 1909*a3141fd3SAndroid Build Coastguard Worker ** page header. ^The number of extra bytes needed by the page header 1910*a3141fd3SAndroid Build Coastguard Worker ** can be determined using [SQLITE_CONFIG_PCACHE_HDRSZ]. 1911*a3141fd3SAndroid Build Coastguard Worker ** ^It is harmless, apart from the wasted memory, 1912*a3141fd3SAndroid Build Coastguard Worker ** for the sz parameter to be larger than necessary. The pMem 1913*a3141fd3SAndroid Build Coastguard Worker ** argument must be either a NULL pointer or a pointer to an 8-byte 1914*a3141fd3SAndroid Build Coastguard Worker ** aligned block of memory of at least sz*N bytes, otherwise 1915*a3141fd3SAndroid Build Coastguard Worker ** subsequent behavior is undefined. 1916*a3141fd3SAndroid Build Coastguard Worker ** ^When pMem is not NULL, SQLite will strive to use the memory provided 1917*a3141fd3SAndroid Build Coastguard Worker ** to satisfy page cache needs, falling back to [sqlite3_malloc()] if 1918*a3141fd3SAndroid Build Coastguard Worker ** a page cache line is larger than sz bytes or if all of the pMem buffer 1919*a3141fd3SAndroid Build Coastguard Worker ** is exhausted. 1920*a3141fd3SAndroid Build Coastguard Worker ** ^If pMem is NULL and N is non-zero, then each database connection 1921*a3141fd3SAndroid Build Coastguard Worker ** does an initial bulk allocation for page cache memory 1922*a3141fd3SAndroid Build Coastguard Worker ** from [sqlite3_malloc()] sufficient for N cache lines if N is positive or 1923*a3141fd3SAndroid Build Coastguard Worker ** of -1024*N bytes if N is negative, . ^If additional 1924*a3141fd3SAndroid Build Coastguard Worker ** page cache memory is needed beyond what is provided by the initial 1925*a3141fd3SAndroid Build Coastguard Worker ** allocation, then SQLite goes to [sqlite3_malloc()] separately for each 1926*a3141fd3SAndroid Build Coastguard Worker ** additional cache line. </dd> 1927*a3141fd3SAndroid Build Coastguard Worker ** 1928*a3141fd3SAndroid Build Coastguard Worker ** [[SQLITE_CONFIG_HEAP]] <dt>SQLITE_CONFIG_HEAP</dt> 1929*a3141fd3SAndroid Build Coastguard Worker ** <dd> ^The SQLITE_CONFIG_HEAP option specifies a static memory buffer 1930*a3141fd3SAndroid Build Coastguard Worker ** that SQLite will use for all of its dynamic memory allocation needs 1931*a3141fd3SAndroid Build Coastguard Worker ** beyond those provided for by [SQLITE_CONFIG_PAGECACHE]. 1932*a3141fd3SAndroid Build Coastguard Worker ** ^The SQLITE_CONFIG_HEAP option is only available if SQLite is compiled 1933*a3141fd3SAndroid Build Coastguard Worker ** with either [SQLITE_ENABLE_MEMSYS3] or [SQLITE_ENABLE_MEMSYS5] and returns 1934*a3141fd3SAndroid Build Coastguard Worker ** [SQLITE_ERROR] if invoked otherwise. 1935*a3141fd3SAndroid Build Coastguard Worker ** ^There are three arguments to SQLITE_CONFIG_HEAP: 1936*a3141fd3SAndroid Build Coastguard Worker ** An 8-byte aligned pointer to the memory, 1937*a3141fd3SAndroid Build Coastguard Worker ** the number of bytes in the memory buffer, and the minimum allocation size. 1938*a3141fd3SAndroid Build Coastguard Worker ** ^If the first pointer (the memory pointer) is NULL, then SQLite reverts 1939*a3141fd3SAndroid Build Coastguard Worker ** to using its default memory allocator (the system malloc() implementation), 1940*a3141fd3SAndroid Build Coastguard Worker ** undoing any prior invocation of [SQLITE_CONFIG_MALLOC]. ^If the 1941*a3141fd3SAndroid Build Coastguard Worker ** memory pointer is not NULL then the alternative memory 1942*a3141fd3SAndroid Build Coastguard Worker ** allocator is engaged to handle all of SQLites memory allocation needs. 1943*a3141fd3SAndroid Build Coastguard Worker ** The first pointer (the memory pointer) must be aligned to an 8-byte 1944*a3141fd3SAndroid Build Coastguard Worker ** boundary or subsequent behavior of SQLite will be undefined. 1945*a3141fd3SAndroid Build Coastguard Worker ** The minimum allocation size is capped at 2**12. Reasonable values 1946*a3141fd3SAndroid Build Coastguard Worker ** for the minimum allocation size are 2**5 through 2**8.</dd> 1947*a3141fd3SAndroid Build Coastguard Worker ** 1948*a3141fd3SAndroid Build Coastguard Worker ** [[SQLITE_CONFIG_MUTEX]] <dt>SQLITE_CONFIG_MUTEX</dt> 1949*a3141fd3SAndroid Build Coastguard Worker ** <dd> ^(The SQLITE_CONFIG_MUTEX option takes a single argument which is a 1950*a3141fd3SAndroid Build Coastguard Worker ** pointer to an instance of the [sqlite3_mutex_methods] structure. 1951*a3141fd3SAndroid Build Coastguard Worker ** The argument specifies alternative low-level mutex routines to be used 1952*a3141fd3SAndroid Build Coastguard Worker ** in place the mutex routines built into SQLite.)^ ^SQLite makes a copy of 1953*a3141fd3SAndroid Build Coastguard Worker ** the content of the [sqlite3_mutex_methods] structure before the call to 1954*a3141fd3SAndroid Build Coastguard Worker ** [sqlite3_config()] returns. ^If SQLite is compiled with 1955*a3141fd3SAndroid Build Coastguard Worker ** the [SQLITE_THREADSAFE | SQLITE_THREADSAFE=0] compile-time option then 1956*a3141fd3SAndroid Build Coastguard Worker ** the entire mutexing subsystem is omitted from the build and hence calls to 1957*a3141fd3SAndroid Build Coastguard Worker ** [sqlite3_config()] with the SQLITE_CONFIG_MUTEX configuration option will 1958*a3141fd3SAndroid Build Coastguard Worker ** return [SQLITE_ERROR].</dd> 1959*a3141fd3SAndroid Build Coastguard Worker ** 1960*a3141fd3SAndroid Build Coastguard Worker ** [[SQLITE_CONFIG_GETMUTEX]] <dt>SQLITE_CONFIG_GETMUTEX</dt> 1961*a3141fd3SAndroid Build Coastguard Worker ** <dd> ^(The SQLITE_CONFIG_GETMUTEX option takes a single argument which 1962*a3141fd3SAndroid Build Coastguard Worker ** is a pointer to an instance of the [sqlite3_mutex_methods] structure. The 1963*a3141fd3SAndroid Build Coastguard Worker ** [sqlite3_mutex_methods] 1964*a3141fd3SAndroid Build Coastguard Worker ** structure is filled with the currently defined mutex routines.)^ 1965*a3141fd3SAndroid Build Coastguard Worker ** This option can be used to overload the default mutex allocation 1966*a3141fd3SAndroid Build Coastguard Worker ** routines with a wrapper used to track mutex usage for performance 1967*a3141fd3SAndroid Build Coastguard Worker ** profiling or testing, for example. ^If SQLite is compiled with 1968*a3141fd3SAndroid Build Coastguard Worker ** the [SQLITE_THREADSAFE | SQLITE_THREADSAFE=0] compile-time option then 1969*a3141fd3SAndroid Build Coastguard Worker ** the entire mutexing subsystem is omitted from the build and hence calls to 1970*a3141fd3SAndroid Build Coastguard Worker ** [sqlite3_config()] with the SQLITE_CONFIG_GETMUTEX configuration option will 1971*a3141fd3SAndroid Build Coastguard Worker ** return [SQLITE_ERROR].</dd> 1972*a3141fd3SAndroid Build Coastguard Worker ** 1973*a3141fd3SAndroid Build Coastguard Worker ** [[SQLITE_CONFIG_LOOKASIDE]] <dt>SQLITE_CONFIG_LOOKASIDE</dt> 1974*a3141fd3SAndroid Build Coastguard Worker ** <dd> ^(The SQLITE_CONFIG_LOOKASIDE option takes two arguments that determine 1975*a3141fd3SAndroid Build Coastguard Worker ** the default size of lookaside memory on each [database connection]. 1976*a3141fd3SAndroid Build Coastguard Worker ** The first argument is the 1977*a3141fd3SAndroid Build Coastguard Worker ** size of each lookaside buffer slot and the second is the number of 1978*a3141fd3SAndroid Build Coastguard Worker ** slots allocated to each database connection.)^ ^(SQLITE_CONFIG_LOOKASIDE 1979*a3141fd3SAndroid Build Coastguard Worker ** sets the <i>default</i> lookaside size. The [SQLITE_DBCONFIG_LOOKASIDE] 1980*a3141fd3SAndroid Build Coastguard Worker ** option to [sqlite3_db_config()] can be used to change the lookaside 1981*a3141fd3SAndroid Build Coastguard Worker ** configuration on individual connections.)^ </dd> 1982*a3141fd3SAndroid Build Coastguard Worker ** 1983*a3141fd3SAndroid Build Coastguard Worker ** [[SQLITE_CONFIG_PCACHE2]] <dt>SQLITE_CONFIG_PCACHE2</dt> 1984*a3141fd3SAndroid Build Coastguard Worker ** <dd> ^(The SQLITE_CONFIG_PCACHE2 option takes a single argument which is 1985*a3141fd3SAndroid Build Coastguard Worker ** a pointer to an [sqlite3_pcache_methods2] object. This object specifies 1986*a3141fd3SAndroid Build Coastguard Worker ** the interface to a custom page cache implementation.)^ 1987*a3141fd3SAndroid Build Coastguard Worker ** ^SQLite makes a copy of the [sqlite3_pcache_methods2] object.</dd> 1988*a3141fd3SAndroid Build Coastguard Worker ** 1989*a3141fd3SAndroid Build Coastguard Worker ** [[SQLITE_CONFIG_GETPCACHE2]] <dt>SQLITE_CONFIG_GETPCACHE2</dt> 1990*a3141fd3SAndroid Build Coastguard Worker ** <dd> ^(The SQLITE_CONFIG_GETPCACHE2 option takes a single argument which 1991*a3141fd3SAndroid Build Coastguard Worker ** is a pointer to an [sqlite3_pcache_methods2] object. SQLite copies of 1992*a3141fd3SAndroid Build Coastguard Worker ** the current page cache implementation into that object.)^ </dd> 1993*a3141fd3SAndroid Build Coastguard Worker ** 1994*a3141fd3SAndroid Build Coastguard Worker ** [[SQLITE_CONFIG_LOG]] <dt>SQLITE_CONFIG_LOG</dt> 1995*a3141fd3SAndroid Build Coastguard Worker ** <dd> The SQLITE_CONFIG_LOG option is used to configure the SQLite 1996*a3141fd3SAndroid Build Coastguard Worker ** global [error log]. 1997*a3141fd3SAndroid Build Coastguard Worker ** (^The SQLITE_CONFIG_LOG option takes two arguments: a pointer to a 1998*a3141fd3SAndroid Build Coastguard Worker ** function with a call signature of void(*)(void*,int,const char*), 1999*a3141fd3SAndroid Build Coastguard Worker ** and a pointer to void. ^If the function pointer is not NULL, it is 2000*a3141fd3SAndroid Build Coastguard Worker ** invoked by [sqlite3_log()] to process each logging event. ^If the 2001*a3141fd3SAndroid Build Coastguard Worker ** function pointer is NULL, the [sqlite3_log()] interface becomes a no-op. 2002*a3141fd3SAndroid Build Coastguard Worker ** ^The void pointer that is the second argument to SQLITE_CONFIG_LOG is 2003*a3141fd3SAndroid Build Coastguard Worker ** passed through as the first parameter to the application-defined logger 2004*a3141fd3SAndroid Build Coastguard Worker ** function whenever that function is invoked. ^The second parameter to 2005*a3141fd3SAndroid Build Coastguard Worker ** the logger function is a copy of the first parameter to the corresponding 2006*a3141fd3SAndroid Build Coastguard Worker ** [sqlite3_log()] call and is intended to be a [result code] or an 2007*a3141fd3SAndroid Build Coastguard Worker ** [extended result code]. ^The third parameter passed to the logger is 2008*a3141fd3SAndroid Build Coastguard Worker ** log message after formatting via [sqlite3_snprintf()]. 2009*a3141fd3SAndroid Build Coastguard Worker ** The SQLite logging interface is not reentrant; the logger function 2010*a3141fd3SAndroid Build Coastguard Worker ** supplied by the application must not invoke any SQLite interface. 2011*a3141fd3SAndroid Build Coastguard Worker ** In a multi-threaded application, the application-defined logger 2012*a3141fd3SAndroid Build Coastguard Worker ** function must be threadsafe. </dd> 2013*a3141fd3SAndroid Build Coastguard Worker ** 2014*a3141fd3SAndroid Build Coastguard Worker ** [[SQLITE_CONFIG_URI]] <dt>SQLITE_CONFIG_URI 2015*a3141fd3SAndroid Build Coastguard Worker ** <dd>^(The SQLITE_CONFIG_URI option takes a single argument of type int. 2016*a3141fd3SAndroid Build Coastguard Worker ** If non-zero, then URI handling is globally enabled. If the parameter is zero, 2017*a3141fd3SAndroid Build Coastguard Worker ** then URI handling is globally disabled.)^ ^If URI handling is globally 2018*a3141fd3SAndroid Build Coastguard Worker ** enabled, all filenames passed to [sqlite3_open()], [sqlite3_open_v2()], 2019*a3141fd3SAndroid Build Coastguard Worker ** [sqlite3_open16()] or 2020*a3141fd3SAndroid Build Coastguard Worker ** specified as part of [ATTACH] commands are interpreted as URIs, regardless 2021*a3141fd3SAndroid Build Coastguard Worker ** of whether or not the [SQLITE_OPEN_URI] flag is set when the database 2022*a3141fd3SAndroid Build Coastguard Worker ** connection is opened. ^If it is globally disabled, filenames are 2023*a3141fd3SAndroid Build Coastguard Worker ** only interpreted as URIs if the SQLITE_OPEN_URI flag is set when the 2024*a3141fd3SAndroid Build Coastguard Worker ** database connection is opened. ^(By default, URI handling is globally 2025*a3141fd3SAndroid Build Coastguard Worker ** disabled. The default value may be changed by compiling with the 2026*a3141fd3SAndroid Build Coastguard Worker ** [SQLITE_USE_URI] symbol defined.)^ 2027*a3141fd3SAndroid Build Coastguard Worker ** 2028*a3141fd3SAndroid Build Coastguard Worker ** [[SQLITE_CONFIG_COVERING_INDEX_SCAN]] <dt>SQLITE_CONFIG_COVERING_INDEX_SCAN 2029*a3141fd3SAndroid Build Coastguard Worker ** <dd>^The SQLITE_CONFIG_COVERING_INDEX_SCAN option takes a single integer 2030*a3141fd3SAndroid Build Coastguard Worker ** argument which is interpreted as a boolean in order to enable or disable 2031*a3141fd3SAndroid Build Coastguard Worker ** the use of covering indices for full table scans in the query optimizer. 2032*a3141fd3SAndroid Build Coastguard Worker ** ^The default setting is determined 2033*a3141fd3SAndroid Build Coastguard Worker ** by the [SQLITE_ALLOW_COVERING_INDEX_SCAN] compile-time option, or is "on" 2034*a3141fd3SAndroid Build Coastguard Worker ** if that compile-time option is omitted. 2035*a3141fd3SAndroid Build Coastguard Worker ** The ability to disable the use of covering indices for full table scans 2036*a3141fd3SAndroid Build Coastguard Worker ** is because some incorrectly coded legacy applications might malfunction 2037*a3141fd3SAndroid Build Coastguard Worker ** when the optimization is enabled. Providing the ability to 2038*a3141fd3SAndroid Build Coastguard Worker ** disable the optimization allows the older, buggy application code to work 2039*a3141fd3SAndroid Build Coastguard Worker ** without change even with newer versions of SQLite. 2040*a3141fd3SAndroid Build Coastguard Worker ** 2041*a3141fd3SAndroid Build Coastguard Worker ** [[SQLITE_CONFIG_PCACHE]] [[SQLITE_CONFIG_GETPCACHE]] 2042*a3141fd3SAndroid Build Coastguard Worker ** <dt>SQLITE_CONFIG_PCACHE and SQLITE_CONFIG_GETPCACHE 2043*a3141fd3SAndroid Build Coastguard Worker ** <dd> These options are obsolete and should not be used by new code. 2044*a3141fd3SAndroid Build Coastguard Worker ** They are retained for backwards compatibility but are now no-ops. 2045*a3141fd3SAndroid Build Coastguard Worker ** </dd> 2046*a3141fd3SAndroid Build Coastguard Worker ** 2047*a3141fd3SAndroid Build Coastguard Worker ** [[SQLITE_CONFIG_SQLLOG]] 2048*a3141fd3SAndroid Build Coastguard Worker ** <dt>SQLITE_CONFIG_SQLLOG 2049*a3141fd3SAndroid Build Coastguard Worker ** <dd>This option is only available if sqlite is compiled with the 2050*a3141fd3SAndroid Build Coastguard Worker ** [SQLITE_ENABLE_SQLLOG] pre-processor macro defined. The first argument should 2051*a3141fd3SAndroid Build Coastguard Worker ** be a pointer to a function of type void(*)(void*,sqlite3*,const char*, int). 2052*a3141fd3SAndroid Build Coastguard Worker ** The second should be of type (void*). The callback is invoked by the library 2053*a3141fd3SAndroid Build Coastguard Worker ** in three separate circumstances, identified by the value passed as the 2054*a3141fd3SAndroid Build Coastguard Worker ** fourth parameter. If the fourth parameter is 0, then the database connection 2055*a3141fd3SAndroid Build Coastguard Worker ** passed as the second argument has just been opened. The third argument 2056*a3141fd3SAndroid Build Coastguard Worker ** points to a buffer containing the name of the main database file. If the 2057*a3141fd3SAndroid Build Coastguard Worker ** fourth parameter is 1, then the SQL statement that the third parameter 2058*a3141fd3SAndroid Build Coastguard Worker ** points to has just been executed. Or, if the fourth parameter is 2, then 2059*a3141fd3SAndroid Build Coastguard Worker ** the connection being passed as the second parameter is being closed. The 2060*a3141fd3SAndroid Build Coastguard Worker ** third parameter is passed NULL In this case. An example of using this 2061*a3141fd3SAndroid Build Coastguard Worker ** configuration option can be seen in the "test_sqllog.c" source file in 2062*a3141fd3SAndroid Build Coastguard Worker ** the canonical SQLite source tree.</dd> 2063*a3141fd3SAndroid Build Coastguard Worker ** 2064*a3141fd3SAndroid Build Coastguard Worker ** [[SQLITE_CONFIG_MMAP_SIZE]] 2065*a3141fd3SAndroid Build Coastguard Worker ** <dt>SQLITE_CONFIG_MMAP_SIZE 2066*a3141fd3SAndroid Build Coastguard Worker ** <dd>^SQLITE_CONFIG_MMAP_SIZE takes two 64-bit integer (sqlite3_int64) values 2067*a3141fd3SAndroid Build Coastguard Worker ** that are the default mmap size limit (the default setting for 2068*a3141fd3SAndroid Build Coastguard Worker ** [PRAGMA mmap_size]) and the maximum allowed mmap size limit. 2069*a3141fd3SAndroid Build Coastguard Worker ** ^The default setting can be overridden by each database connection using 2070*a3141fd3SAndroid Build Coastguard Worker ** either the [PRAGMA mmap_size] command, or by using the 2071*a3141fd3SAndroid Build Coastguard Worker ** [SQLITE_FCNTL_MMAP_SIZE] file control. ^(The maximum allowed mmap size 2072*a3141fd3SAndroid Build Coastguard Worker ** will be silently truncated if necessary so that it does not exceed the 2073*a3141fd3SAndroid Build Coastguard Worker ** compile-time maximum mmap size set by the 2074*a3141fd3SAndroid Build Coastguard Worker ** [SQLITE_MAX_MMAP_SIZE] compile-time option.)^ 2075*a3141fd3SAndroid Build Coastguard Worker ** ^If either argument to this option is negative, then that argument is 2076*a3141fd3SAndroid Build Coastguard Worker ** changed to its compile-time default. 2077*a3141fd3SAndroid Build Coastguard Worker ** 2078*a3141fd3SAndroid Build Coastguard Worker ** [[SQLITE_CONFIG_WIN32_HEAPSIZE]] 2079*a3141fd3SAndroid Build Coastguard Worker ** <dt>SQLITE_CONFIG_WIN32_HEAPSIZE 2080*a3141fd3SAndroid Build Coastguard Worker ** <dd>^The SQLITE_CONFIG_WIN32_HEAPSIZE option is only available if SQLite is 2081*a3141fd3SAndroid Build Coastguard Worker ** compiled for Windows with the [SQLITE_WIN32_MALLOC] pre-processor macro 2082*a3141fd3SAndroid Build Coastguard Worker ** defined. ^SQLITE_CONFIG_WIN32_HEAPSIZE takes a 32-bit unsigned integer value 2083*a3141fd3SAndroid Build Coastguard Worker ** that specifies the maximum size of the created heap. 2084*a3141fd3SAndroid Build Coastguard Worker ** 2085*a3141fd3SAndroid Build Coastguard Worker ** [[SQLITE_CONFIG_PCACHE_HDRSZ]] 2086*a3141fd3SAndroid Build Coastguard Worker ** <dt>SQLITE_CONFIG_PCACHE_HDRSZ 2087*a3141fd3SAndroid Build Coastguard Worker ** <dd>^The SQLITE_CONFIG_PCACHE_HDRSZ option takes a single parameter which 2088*a3141fd3SAndroid Build Coastguard Worker ** is a pointer to an integer and writes into that integer the number of extra 2089*a3141fd3SAndroid Build Coastguard Worker ** bytes per page required for each page in [SQLITE_CONFIG_PAGECACHE]. 2090*a3141fd3SAndroid Build Coastguard Worker ** The amount of extra space required can change depending on the compiler, 2091*a3141fd3SAndroid Build Coastguard Worker ** target platform, and SQLite version. 2092*a3141fd3SAndroid Build Coastguard Worker ** 2093*a3141fd3SAndroid Build Coastguard Worker ** [[SQLITE_CONFIG_PMASZ]] 2094*a3141fd3SAndroid Build Coastguard Worker ** <dt>SQLITE_CONFIG_PMASZ 2095*a3141fd3SAndroid Build Coastguard Worker ** <dd>^The SQLITE_CONFIG_PMASZ option takes a single parameter which 2096*a3141fd3SAndroid Build Coastguard Worker ** is an unsigned integer and sets the "Minimum PMA Size" for the multithreaded 2097*a3141fd3SAndroid Build Coastguard Worker ** sorter to that integer. The default minimum PMA Size is set by the 2098*a3141fd3SAndroid Build Coastguard Worker ** [SQLITE_SORTER_PMASZ] compile-time option. New threads are launched 2099*a3141fd3SAndroid Build Coastguard Worker ** to help with sort operations when multithreaded sorting 2100*a3141fd3SAndroid Build Coastguard Worker ** is enabled (using the [PRAGMA threads] command) and the amount of content 2101*a3141fd3SAndroid Build Coastguard Worker ** to be sorted exceeds the page size times the minimum of the 2102*a3141fd3SAndroid Build Coastguard Worker ** [PRAGMA cache_size] setting and this value. 2103*a3141fd3SAndroid Build Coastguard Worker ** 2104*a3141fd3SAndroid Build Coastguard Worker ** [[SQLITE_CONFIG_STMTJRNL_SPILL]] 2105*a3141fd3SAndroid Build Coastguard Worker ** <dt>SQLITE_CONFIG_STMTJRNL_SPILL 2106*a3141fd3SAndroid Build Coastguard Worker ** <dd>^The SQLITE_CONFIG_STMTJRNL_SPILL option takes a single parameter which 2107*a3141fd3SAndroid Build Coastguard Worker ** becomes the [statement journal] spill-to-disk threshold. 2108*a3141fd3SAndroid Build Coastguard Worker ** [Statement journals] are held in memory until their size (in bytes) 2109*a3141fd3SAndroid Build Coastguard Worker ** exceeds this threshold, at which point they are written to disk. 2110*a3141fd3SAndroid Build Coastguard Worker ** Or if the threshold is -1, statement journals are always held 2111*a3141fd3SAndroid Build Coastguard Worker ** exclusively in memory. 2112*a3141fd3SAndroid Build Coastguard Worker ** Since many statement journals never become large, setting the spill 2113*a3141fd3SAndroid Build Coastguard Worker ** threshold to a value such as 64KiB can greatly reduce the amount of 2114*a3141fd3SAndroid Build Coastguard Worker ** I/O required to support statement rollback. 2115*a3141fd3SAndroid Build Coastguard Worker ** The default value for this setting is controlled by the 2116*a3141fd3SAndroid Build Coastguard Worker ** [SQLITE_STMTJRNL_SPILL] compile-time option. 2117*a3141fd3SAndroid Build Coastguard Worker ** 2118*a3141fd3SAndroid Build Coastguard Worker ** [[SQLITE_CONFIG_SORTERREF_SIZE]] 2119*a3141fd3SAndroid Build Coastguard Worker ** <dt>SQLITE_CONFIG_SORTERREF_SIZE 2120*a3141fd3SAndroid Build Coastguard Worker ** <dd>The SQLITE_CONFIG_SORTERREF_SIZE option accepts a single parameter 2121*a3141fd3SAndroid Build Coastguard Worker ** of type (int) - the new value of the sorter-reference size threshold. 2122*a3141fd3SAndroid Build Coastguard Worker ** Usually, when SQLite uses an external sort to order records according 2123*a3141fd3SAndroid Build Coastguard Worker ** to an ORDER BY clause, all fields required by the caller are present in the 2124*a3141fd3SAndroid Build Coastguard Worker ** sorted records. However, if SQLite determines based on the declared type 2125*a3141fd3SAndroid Build Coastguard Worker ** of a table column that its values are likely to be very large - larger 2126*a3141fd3SAndroid Build Coastguard Worker ** than the configured sorter-reference size threshold - then a reference 2127*a3141fd3SAndroid Build Coastguard Worker ** is stored in each sorted record and the required column values loaded 2128*a3141fd3SAndroid Build Coastguard Worker ** from the database as records are returned in sorted order. The default 2129*a3141fd3SAndroid Build Coastguard Worker ** value for this option is to never use this optimization. Specifying a 2130*a3141fd3SAndroid Build Coastguard Worker ** negative value for this option restores the default behavior. 2131*a3141fd3SAndroid Build Coastguard Worker ** This option is only available if SQLite is compiled with the 2132*a3141fd3SAndroid Build Coastguard Worker ** [SQLITE_ENABLE_SORTER_REFERENCES] compile-time option. 2133*a3141fd3SAndroid Build Coastguard Worker ** 2134*a3141fd3SAndroid Build Coastguard Worker ** [[SQLITE_CONFIG_MEMDB_MAXSIZE]] 2135*a3141fd3SAndroid Build Coastguard Worker ** <dt>SQLITE_CONFIG_MEMDB_MAXSIZE 2136*a3141fd3SAndroid Build Coastguard Worker ** <dd>The SQLITE_CONFIG_MEMDB_MAXSIZE option accepts a single parameter 2137*a3141fd3SAndroid Build Coastguard Worker ** [sqlite3_int64] parameter which is the default maximum size for an in-memory 2138*a3141fd3SAndroid Build Coastguard Worker ** database created using [sqlite3_deserialize()]. This default maximum 2139*a3141fd3SAndroid Build Coastguard Worker ** size can be adjusted up or down for individual databases using the 2140*a3141fd3SAndroid Build Coastguard Worker ** [SQLITE_FCNTL_SIZE_LIMIT] [sqlite3_file_control|file-control]. If this 2141*a3141fd3SAndroid Build Coastguard Worker ** configuration setting is never used, then the default maximum is determined 2142*a3141fd3SAndroid Build Coastguard Worker ** by the [SQLITE_MEMDB_DEFAULT_MAXSIZE] compile-time option. If that 2143*a3141fd3SAndroid Build Coastguard Worker ** compile-time option is not set, then the default maximum is 1073741824. 2144*a3141fd3SAndroid Build Coastguard Worker ** 2145*a3141fd3SAndroid Build Coastguard Worker ** [[SQLITE_CONFIG_ROWID_IN_VIEW]] 2146*a3141fd3SAndroid Build Coastguard Worker ** <dt>SQLITE_CONFIG_ROWID_IN_VIEW 2147*a3141fd3SAndroid Build Coastguard Worker ** <dd>The SQLITE_CONFIG_ROWID_IN_VIEW option enables or disables the ability 2148*a3141fd3SAndroid Build Coastguard Worker ** for VIEWs to have a ROWID. The capability can only be enabled if SQLite is 2149*a3141fd3SAndroid Build Coastguard Worker ** compiled with -DSQLITE_ALLOW_ROWID_IN_VIEW, in which case the capability 2150*a3141fd3SAndroid Build Coastguard Worker ** defaults to on. This configuration option queries the current setting or 2151*a3141fd3SAndroid Build Coastguard Worker ** changes the setting to off or on. The argument is a pointer to an integer. 2152*a3141fd3SAndroid Build Coastguard Worker ** If that integer initially holds a value of 1, then the ability for VIEWs to 2153*a3141fd3SAndroid Build Coastguard Worker ** have ROWIDs is activated. If the integer initially holds zero, then the 2154*a3141fd3SAndroid Build Coastguard Worker ** ability is deactivated. Any other initial value for the integer leaves the 2155*a3141fd3SAndroid Build Coastguard Worker ** setting unchanged. After changes, if any, the integer is written with 2156*a3141fd3SAndroid Build Coastguard Worker ** a 1 or 0, if the ability for VIEWs to have ROWIDs is on or off. If SQLite 2157*a3141fd3SAndroid Build Coastguard Worker ** is compiled without -DSQLITE_ALLOW_ROWID_IN_VIEW (which is the usual and 2158*a3141fd3SAndroid Build Coastguard Worker ** recommended case) then the integer is always filled with zero, regardless 2159*a3141fd3SAndroid Build Coastguard Worker ** if its initial value. 2160*a3141fd3SAndroid Build Coastguard Worker ** </dl> 2161*a3141fd3SAndroid Build Coastguard Worker */ 2162*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_CONFIG_SINGLETHREAD 1 /* nil */ 2163*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_CONFIG_MULTITHREAD 2 /* nil */ 2164*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_CONFIG_SERIALIZED 3 /* nil */ 2165*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_CONFIG_MALLOC 4 /* sqlite3_mem_methods* */ 2166*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_CONFIG_GETMALLOC 5 /* sqlite3_mem_methods* */ 2167*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_CONFIG_SCRATCH 6 /* No longer used */ 2168*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_CONFIG_PAGECACHE 7 /* void*, int sz, int N */ 2169*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_CONFIG_HEAP 8 /* void*, int nByte, int min */ 2170*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_CONFIG_MEMSTATUS 9 /* boolean */ 2171*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_CONFIG_MUTEX 10 /* sqlite3_mutex_methods* */ 2172*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_CONFIG_GETMUTEX 11 /* sqlite3_mutex_methods* */ 2173*a3141fd3SAndroid Build Coastguard Worker /* previously SQLITE_CONFIG_CHUNKALLOC 12 which is now unused. */ 2174*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_CONFIG_LOOKASIDE 13 /* int int */ 2175*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_CONFIG_PCACHE 14 /* no-op */ 2176*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_CONFIG_GETPCACHE 15 /* no-op */ 2177*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_CONFIG_LOG 16 /* xFunc, void* */ 2178*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_CONFIG_URI 17 /* int */ 2179*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_CONFIG_PCACHE2 18 /* sqlite3_pcache_methods2* */ 2180*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_CONFIG_GETPCACHE2 19 /* sqlite3_pcache_methods2* */ 2181*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_CONFIG_COVERING_INDEX_SCAN 20 /* int */ 2182*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_CONFIG_SQLLOG 21 /* xSqllog, void* */ 2183*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_CONFIG_MMAP_SIZE 22 /* sqlite3_int64, sqlite3_int64 */ 2184*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_CONFIG_WIN32_HEAPSIZE 23 /* int nByte */ 2185*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_CONFIG_PCACHE_HDRSZ 24 /* int *psz */ 2186*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_CONFIG_PMASZ 25 /* unsigned int szPma */ 2187*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_CONFIG_STMTJRNL_SPILL 26 /* int nByte */ 2188*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_CONFIG_SMALL_MALLOC 27 /* boolean */ 2189*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_CONFIG_SORTERREF_SIZE 28 /* int nByte */ 2190*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_CONFIG_MEMDB_MAXSIZE 29 /* sqlite3_int64 */ 2191*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_CONFIG_ROWID_IN_VIEW 30 /* int* */ 2192*a3141fd3SAndroid Build Coastguard Worker 2193*a3141fd3SAndroid Build Coastguard Worker /* 2194*a3141fd3SAndroid Build Coastguard Worker ** CAPI3REF: Database Connection Configuration Options 2195*a3141fd3SAndroid Build Coastguard Worker ** 2196*a3141fd3SAndroid Build Coastguard Worker ** These constants are the available integer configuration options that 2197*a3141fd3SAndroid Build Coastguard Worker ** can be passed as the second argument to the [sqlite3_db_config()] interface. 2198*a3141fd3SAndroid Build Coastguard Worker ** 2199*a3141fd3SAndroid Build Coastguard Worker ** New configuration options may be added in future releases of SQLite. 2200*a3141fd3SAndroid Build Coastguard Worker ** Existing configuration options might be discontinued. Applications 2201*a3141fd3SAndroid Build Coastguard Worker ** should check the return code from [sqlite3_db_config()] to make sure that 2202*a3141fd3SAndroid Build Coastguard Worker ** the call worked. ^The [sqlite3_db_config()] interface will return a 2203*a3141fd3SAndroid Build Coastguard Worker ** non-zero [error code] if a discontinued or unsupported configuration option 2204*a3141fd3SAndroid Build Coastguard Worker ** is invoked. 2205*a3141fd3SAndroid Build Coastguard Worker ** 2206*a3141fd3SAndroid Build Coastguard Worker ** <dl> 2207*a3141fd3SAndroid Build Coastguard Worker ** [[SQLITE_DBCONFIG_LOOKASIDE]] 2208*a3141fd3SAndroid Build Coastguard Worker ** <dt>SQLITE_DBCONFIG_LOOKASIDE</dt> 2209*a3141fd3SAndroid Build Coastguard Worker ** <dd> ^This option takes three additional arguments that determine the 2210*a3141fd3SAndroid Build Coastguard Worker ** [lookaside memory allocator] configuration for the [database connection]. 2211*a3141fd3SAndroid Build Coastguard Worker ** ^The first argument (the third parameter to [sqlite3_db_config()] is a 2212*a3141fd3SAndroid Build Coastguard Worker ** pointer to a memory buffer to use for lookaside memory. 2213*a3141fd3SAndroid Build Coastguard Worker ** ^The first argument after the SQLITE_DBCONFIG_LOOKASIDE verb 2214*a3141fd3SAndroid Build Coastguard Worker ** may be NULL in which case SQLite will allocate the 2215*a3141fd3SAndroid Build Coastguard Worker ** lookaside buffer itself using [sqlite3_malloc()]. ^The second argument is the 2216*a3141fd3SAndroid Build Coastguard Worker ** size of each lookaside buffer slot. ^The third argument is the number of 2217*a3141fd3SAndroid Build Coastguard Worker ** slots. The size of the buffer in the first argument must be greater than 2218*a3141fd3SAndroid Build Coastguard Worker ** or equal to the product of the second and third arguments. The buffer 2219*a3141fd3SAndroid Build Coastguard Worker ** must be aligned to an 8-byte boundary. ^If the second argument to 2220*a3141fd3SAndroid Build Coastguard Worker ** SQLITE_DBCONFIG_LOOKASIDE is not a multiple of 8, it is internally 2221*a3141fd3SAndroid Build Coastguard Worker ** rounded down to the next smaller multiple of 8. ^(The lookaside memory 2222*a3141fd3SAndroid Build Coastguard Worker ** configuration for a database connection can only be changed when that 2223*a3141fd3SAndroid Build Coastguard Worker ** connection is not currently using lookaside memory, or in other words 2224*a3141fd3SAndroid Build Coastguard Worker ** when the "current value" returned by 2225*a3141fd3SAndroid Build Coastguard Worker ** [sqlite3_db_status](D,[SQLITE_DBSTATUS_LOOKASIDE_USED],...) is zero. 2226*a3141fd3SAndroid Build Coastguard Worker ** Any attempt to change the lookaside memory configuration when lookaside 2227*a3141fd3SAndroid Build Coastguard Worker ** memory is in use leaves the configuration unchanged and returns 2228*a3141fd3SAndroid Build Coastguard Worker ** [SQLITE_BUSY].)^</dd> 2229*a3141fd3SAndroid Build Coastguard Worker ** 2230*a3141fd3SAndroid Build Coastguard Worker ** [[SQLITE_DBCONFIG_ENABLE_FKEY]] 2231*a3141fd3SAndroid Build Coastguard Worker ** <dt>SQLITE_DBCONFIG_ENABLE_FKEY</dt> 2232*a3141fd3SAndroid Build Coastguard Worker ** <dd> ^This option is used to enable or disable the enforcement of 2233*a3141fd3SAndroid Build Coastguard Worker ** [foreign key constraints]. There should be two additional arguments. 2234*a3141fd3SAndroid Build Coastguard Worker ** The first argument is an integer which is 0 to disable FK enforcement, 2235*a3141fd3SAndroid Build Coastguard Worker ** positive to enable FK enforcement or negative to leave FK enforcement 2236*a3141fd3SAndroid Build Coastguard Worker ** unchanged. The second parameter is a pointer to an integer into which 2237*a3141fd3SAndroid Build Coastguard Worker ** is written 0 or 1 to indicate whether FK enforcement is off or on 2238*a3141fd3SAndroid Build Coastguard Worker ** following this call. The second parameter may be a NULL pointer, in 2239*a3141fd3SAndroid Build Coastguard Worker ** which case the FK enforcement setting is not reported back. </dd> 2240*a3141fd3SAndroid Build Coastguard Worker ** 2241*a3141fd3SAndroid Build Coastguard Worker ** [[SQLITE_DBCONFIG_ENABLE_TRIGGER]] 2242*a3141fd3SAndroid Build Coastguard Worker ** <dt>SQLITE_DBCONFIG_ENABLE_TRIGGER</dt> 2243*a3141fd3SAndroid Build Coastguard Worker ** <dd> ^This option is used to enable or disable [CREATE TRIGGER | triggers]. 2244*a3141fd3SAndroid Build Coastguard Worker ** There should be two additional arguments. 2245*a3141fd3SAndroid Build Coastguard Worker ** The first argument is an integer which is 0 to disable triggers, 2246*a3141fd3SAndroid Build Coastguard Worker ** positive to enable triggers or negative to leave the setting unchanged. 2247*a3141fd3SAndroid Build Coastguard Worker ** The second parameter is a pointer to an integer into which 2248*a3141fd3SAndroid Build Coastguard Worker ** is written 0 or 1 to indicate whether triggers are disabled or enabled 2249*a3141fd3SAndroid Build Coastguard Worker ** following this call. The second parameter may be a NULL pointer, in 2250*a3141fd3SAndroid Build Coastguard Worker ** which case the trigger setting is not reported back. 2251*a3141fd3SAndroid Build Coastguard Worker ** 2252*a3141fd3SAndroid Build Coastguard Worker ** <p>Originally this option disabled all triggers. ^(However, since 2253*a3141fd3SAndroid Build Coastguard Worker ** SQLite version 3.35.0, TEMP triggers are still allowed even if 2254*a3141fd3SAndroid Build Coastguard Worker ** this option is off. So, in other words, this option now only disables 2255*a3141fd3SAndroid Build Coastguard Worker ** triggers in the main database schema or in the schemas of ATTACH-ed 2256*a3141fd3SAndroid Build Coastguard Worker ** databases.)^ </dd> 2257*a3141fd3SAndroid Build Coastguard Worker ** 2258*a3141fd3SAndroid Build Coastguard Worker ** [[SQLITE_DBCONFIG_ENABLE_VIEW]] 2259*a3141fd3SAndroid Build Coastguard Worker ** <dt>SQLITE_DBCONFIG_ENABLE_VIEW</dt> 2260*a3141fd3SAndroid Build Coastguard Worker ** <dd> ^This option is used to enable or disable [CREATE VIEW | views]. 2261*a3141fd3SAndroid Build Coastguard Worker ** There should be two additional arguments. 2262*a3141fd3SAndroid Build Coastguard Worker ** The first argument is an integer which is 0 to disable views, 2263*a3141fd3SAndroid Build Coastguard Worker ** positive to enable views or negative to leave the setting unchanged. 2264*a3141fd3SAndroid Build Coastguard Worker ** The second parameter is a pointer to an integer into which 2265*a3141fd3SAndroid Build Coastguard Worker ** is written 0 or 1 to indicate whether views are disabled or enabled 2266*a3141fd3SAndroid Build Coastguard Worker ** following this call. The second parameter may be a NULL pointer, in 2267*a3141fd3SAndroid Build Coastguard Worker ** which case the view setting is not reported back. 2268*a3141fd3SAndroid Build Coastguard Worker ** 2269*a3141fd3SAndroid Build Coastguard Worker ** <p>Originally this option disabled all views. ^(However, since 2270*a3141fd3SAndroid Build Coastguard Worker ** SQLite version 3.35.0, TEMP views are still allowed even if 2271*a3141fd3SAndroid Build Coastguard Worker ** this option is off. So, in other words, this option now only disables 2272*a3141fd3SAndroid Build Coastguard Worker ** views in the main database schema or in the schemas of ATTACH-ed 2273*a3141fd3SAndroid Build Coastguard Worker ** databases.)^ </dd> 2274*a3141fd3SAndroid Build Coastguard Worker ** 2275*a3141fd3SAndroid Build Coastguard Worker ** [[SQLITE_DBCONFIG_ENABLE_FTS3_TOKENIZER]] 2276*a3141fd3SAndroid Build Coastguard Worker ** <dt>SQLITE_DBCONFIG_ENABLE_FTS3_TOKENIZER</dt> 2277*a3141fd3SAndroid Build Coastguard Worker ** <dd> ^This option is used to enable or disable the 2278*a3141fd3SAndroid Build Coastguard Worker ** [fts3_tokenizer()] function which is part of the 2279*a3141fd3SAndroid Build Coastguard Worker ** [FTS3] full-text search engine extension. 2280*a3141fd3SAndroid Build Coastguard Worker ** There should be two additional arguments. 2281*a3141fd3SAndroid Build Coastguard Worker ** The first argument is an integer which is 0 to disable fts3_tokenizer() or 2282*a3141fd3SAndroid Build Coastguard Worker ** positive to enable fts3_tokenizer() or negative to leave the setting 2283*a3141fd3SAndroid Build Coastguard Worker ** unchanged. 2284*a3141fd3SAndroid Build Coastguard Worker ** The second parameter is a pointer to an integer into which 2285*a3141fd3SAndroid Build Coastguard Worker ** is written 0 or 1 to indicate whether fts3_tokenizer is disabled or enabled 2286*a3141fd3SAndroid Build Coastguard Worker ** following this call. The second parameter may be a NULL pointer, in 2287*a3141fd3SAndroid Build Coastguard Worker ** which case the new setting is not reported back. </dd> 2288*a3141fd3SAndroid Build Coastguard Worker ** 2289*a3141fd3SAndroid Build Coastguard Worker ** [[SQLITE_DBCONFIG_ENABLE_LOAD_EXTENSION]] 2290*a3141fd3SAndroid Build Coastguard Worker ** <dt>SQLITE_DBCONFIG_ENABLE_LOAD_EXTENSION</dt> 2291*a3141fd3SAndroid Build Coastguard Worker ** <dd> ^This option is used to enable or disable the [sqlite3_load_extension()] 2292*a3141fd3SAndroid Build Coastguard Worker ** interface independently of the [load_extension()] SQL function. 2293*a3141fd3SAndroid Build Coastguard Worker ** The [sqlite3_enable_load_extension()] API enables or disables both the 2294*a3141fd3SAndroid Build Coastguard Worker ** C-API [sqlite3_load_extension()] and the SQL function [load_extension()]. 2295*a3141fd3SAndroid Build Coastguard Worker ** There should be two additional arguments. 2296*a3141fd3SAndroid Build Coastguard Worker ** When the first argument to this interface is 1, then only the C-API is 2297*a3141fd3SAndroid Build Coastguard Worker ** enabled and the SQL function remains disabled. If the first argument to 2298*a3141fd3SAndroid Build Coastguard Worker ** this interface is 0, then both the C-API and the SQL function are disabled. 2299*a3141fd3SAndroid Build Coastguard Worker ** If the first argument is -1, then no changes are made to state of either the 2300*a3141fd3SAndroid Build Coastguard Worker ** C-API or the SQL function. 2301*a3141fd3SAndroid Build Coastguard Worker ** The second parameter is a pointer to an integer into which 2302*a3141fd3SAndroid Build Coastguard Worker ** is written 0 or 1 to indicate whether [sqlite3_load_extension()] interface 2303*a3141fd3SAndroid Build Coastguard Worker ** is disabled or enabled following this call. The second parameter may 2304*a3141fd3SAndroid Build Coastguard Worker ** be a NULL pointer, in which case the new setting is not reported back. 2305*a3141fd3SAndroid Build Coastguard Worker ** </dd> 2306*a3141fd3SAndroid Build Coastguard Worker ** 2307*a3141fd3SAndroid Build Coastguard Worker ** [[SQLITE_DBCONFIG_MAINDBNAME]] <dt>SQLITE_DBCONFIG_MAINDBNAME</dt> 2308*a3141fd3SAndroid Build Coastguard Worker ** <dd> ^This option is used to change the name of the "main" database 2309*a3141fd3SAndroid Build Coastguard Worker ** schema. ^The sole argument is a pointer to a constant UTF8 string 2310*a3141fd3SAndroid Build Coastguard Worker ** which will become the new schema name in place of "main". ^SQLite 2311*a3141fd3SAndroid Build Coastguard Worker ** does not make a copy of the new main schema name string, so the application 2312*a3141fd3SAndroid Build Coastguard Worker ** must ensure that the argument passed into this DBCONFIG option is unchanged 2313*a3141fd3SAndroid Build Coastguard Worker ** until after the database connection closes. 2314*a3141fd3SAndroid Build Coastguard Worker ** </dd> 2315*a3141fd3SAndroid Build Coastguard Worker ** 2316*a3141fd3SAndroid Build Coastguard Worker ** [[SQLITE_DBCONFIG_NO_CKPT_ON_CLOSE]] 2317*a3141fd3SAndroid Build Coastguard Worker ** <dt>SQLITE_DBCONFIG_NO_CKPT_ON_CLOSE</dt> 2318*a3141fd3SAndroid Build Coastguard Worker ** <dd> Usually, when a database in wal mode is closed or detached from a 2319*a3141fd3SAndroid Build Coastguard Worker ** database handle, SQLite checks if this will mean that there are now no 2320*a3141fd3SAndroid Build Coastguard Worker ** connections at all to the database. If so, it performs a checkpoint 2321*a3141fd3SAndroid Build Coastguard Worker ** operation before closing the connection. This option may be used to 2322*a3141fd3SAndroid Build Coastguard Worker ** override this behavior. The first parameter passed to this operation 2323*a3141fd3SAndroid Build Coastguard Worker ** is an integer - positive to disable checkpoints-on-close, or zero (the 2324*a3141fd3SAndroid Build Coastguard Worker ** default) to enable them, and negative to leave the setting unchanged. 2325*a3141fd3SAndroid Build Coastguard Worker ** The second parameter is a pointer to an integer 2326*a3141fd3SAndroid Build Coastguard Worker ** into which is written 0 or 1 to indicate whether checkpoints-on-close 2327*a3141fd3SAndroid Build Coastguard Worker ** have been disabled - 0 if they are not disabled, 1 if they are. 2328*a3141fd3SAndroid Build Coastguard Worker ** </dd> 2329*a3141fd3SAndroid Build Coastguard Worker ** 2330*a3141fd3SAndroid Build Coastguard Worker ** [[SQLITE_DBCONFIG_ENABLE_QPSG]] <dt>SQLITE_DBCONFIG_ENABLE_QPSG</dt> 2331*a3141fd3SAndroid Build Coastguard Worker ** <dd>^(The SQLITE_DBCONFIG_ENABLE_QPSG option activates or deactivates 2332*a3141fd3SAndroid Build Coastguard Worker ** the [query planner stability guarantee] (QPSG). When the QPSG is active, 2333*a3141fd3SAndroid Build Coastguard Worker ** a single SQL query statement will always use the same algorithm regardless 2334*a3141fd3SAndroid Build Coastguard Worker ** of values of [bound parameters].)^ The QPSG disables some query optimizations 2335*a3141fd3SAndroid Build Coastguard Worker ** that look at the values of bound parameters, which can make some queries 2336*a3141fd3SAndroid Build Coastguard Worker ** slower. But the QPSG has the advantage of more predictable behavior. With 2337*a3141fd3SAndroid Build Coastguard Worker ** the QPSG active, SQLite will always use the same query plan in the field as 2338*a3141fd3SAndroid Build Coastguard Worker ** was used during testing in the lab. 2339*a3141fd3SAndroid Build Coastguard Worker ** The first argument to this setting is an integer which is 0 to disable 2340*a3141fd3SAndroid Build Coastguard Worker ** the QPSG, positive to enable QPSG, or negative to leave the setting 2341*a3141fd3SAndroid Build Coastguard Worker ** unchanged. The second parameter is a pointer to an integer into which 2342*a3141fd3SAndroid Build Coastguard Worker ** is written 0 or 1 to indicate whether the QPSG is disabled or enabled 2343*a3141fd3SAndroid Build Coastguard Worker ** following this call. 2344*a3141fd3SAndroid Build Coastguard Worker ** </dd> 2345*a3141fd3SAndroid Build Coastguard Worker ** 2346*a3141fd3SAndroid Build Coastguard Worker ** [[SQLITE_DBCONFIG_TRIGGER_EQP]] <dt>SQLITE_DBCONFIG_TRIGGER_EQP</dt> 2347*a3141fd3SAndroid Build Coastguard Worker ** <dd> By default, the output of EXPLAIN QUERY PLAN commands does not 2348*a3141fd3SAndroid Build Coastguard Worker ** include output for any operations performed by trigger programs. This 2349*a3141fd3SAndroid Build Coastguard Worker ** option is used to set or clear (the default) a flag that governs this 2350*a3141fd3SAndroid Build Coastguard Worker ** behavior. The first parameter passed to this operation is an integer - 2351*a3141fd3SAndroid Build Coastguard Worker ** positive to enable output for trigger programs, or zero to disable it, 2352*a3141fd3SAndroid Build Coastguard Worker ** or negative to leave the setting unchanged. 2353*a3141fd3SAndroid Build Coastguard Worker ** The second parameter is a pointer to an integer into which is written 2354*a3141fd3SAndroid Build Coastguard Worker ** 0 or 1 to indicate whether output-for-triggers has been disabled - 0 if 2355*a3141fd3SAndroid Build Coastguard Worker ** it is not disabled, 1 if it is. 2356*a3141fd3SAndroid Build Coastguard Worker ** </dd> 2357*a3141fd3SAndroid Build Coastguard Worker ** 2358*a3141fd3SAndroid Build Coastguard Worker ** [[SQLITE_DBCONFIG_RESET_DATABASE]] <dt>SQLITE_DBCONFIG_RESET_DATABASE</dt> 2359*a3141fd3SAndroid Build Coastguard Worker ** <dd> Set the SQLITE_DBCONFIG_RESET_DATABASE flag and then run 2360*a3141fd3SAndroid Build Coastguard Worker ** [VACUUM] in order to reset a database back to an empty database 2361*a3141fd3SAndroid Build Coastguard Worker ** with no schema and no content. The following process works even for 2362*a3141fd3SAndroid Build Coastguard Worker ** a badly corrupted database file: 2363*a3141fd3SAndroid Build Coastguard Worker ** <ol> 2364*a3141fd3SAndroid Build Coastguard Worker ** <li> If the database connection is newly opened, make sure it has read the 2365*a3141fd3SAndroid Build Coastguard Worker ** database schema by preparing then discarding some query against the 2366*a3141fd3SAndroid Build Coastguard Worker ** database, or calling sqlite3_table_column_metadata(), ignoring any 2367*a3141fd3SAndroid Build Coastguard Worker ** errors. This step is only necessary if the application desires to keep 2368*a3141fd3SAndroid Build Coastguard Worker ** the database in WAL mode after the reset if it was in WAL mode before 2369*a3141fd3SAndroid Build Coastguard Worker ** the reset. 2370*a3141fd3SAndroid Build Coastguard Worker ** <li> sqlite3_db_config(db, SQLITE_DBCONFIG_RESET_DATABASE, 1, 0); 2371*a3141fd3SAndroid Build Coastguard Worker ** <li> [sqlite3_exec](db, "[VACUUM]", 0, 0, 0); 2372*a3141fd3SAndroid Build Coastguard Worker ** <li> sqlite3_db_config(db, SQLITE_DBCONFIG_RESET_DATABASE, 0, 0); 2373*a3141fd3SAndroid Build Coastguard Worker ** </ol> 2374*a3141fd3SAndroid Build Coastguard Worker ** Because resetting a database is destructive and irreversible, the 2375*a3141fd3SAndroid Build Coastguard Worker ** process requires the use of this obscure API and multiple steps to 2376*a3141fd3SAndroid Build Coastguard Worker ** help ensure that it does not happen by accident. Because this 2377*a3141fd3SAndroid Build Coastguard Worker ** feature must be capable of resetting corrupt databases, and 2378*a3141fd3SAndroid Build Coastguard Worker ** shutting down virtual tables may require access to that corrupt 2379*a3141fd3SAndroid Build Coastguard Worker ** storage, the library must abandon any installed virtual tables 2380*a3141fd3SAndroid Build Coastguard Worker ** without calling their xDestroy() methods. 2381*a3141fd3SAndroid Build Coastguard Worker ** 2382*a3141fd3SAndroid Build Coastguard Worker ** [[SQLITE_DBCONFIG_DEFENSIVE]] <dt>SQLITE_DBCONFIG_DEFENSIVE</dt> 2383*a3141fd3SAndroid Build Coastguard Worker ** <dd>The SQLITE_DBCONFIG_DEFENSIVE option activates or deactivates the 2384*a3141fd3SAndroid Build Coastguard Worker ** "defensive" flag for a database connection. When the defensive 2385*a3141fd3SAndroid Build Coastguard Worker ** flag is enabled, language features that allow ordinary SQL to 2386*a3141fd3SAndroid Build Coastguard Worker ** deliberately corrupt the database file are disabled. The disabled 2387*a3141fd3SAndroid Build Coastguard Worker ** features include but are not limited to the following: 2388*a3141fd3SAndroid Build Coastguard Worker ** <ul> 2389*a3141fd3SAndroid Build Coastguard Worker ** <li> The [PRAGMA writable_schema=ON] statement. 2390*a3141fd3SAndroid Build Coastguard Worker ** <li> The [PRAGMA journal_mode=OFF] statement. 2391*a3141fd3SAndroid Build Coastguard Worker ** <li> The [PRAGMA schema_version=N] statement. 2392*a3141fd3SAndroid Build Coastguard Worker ** <li> Writes to the [sqlite_dbpage] virtual table. 2393*a3141fd3SAndroid Build Coastguard Worker ** <li> Direct writes to [shadow tables]. 2394*a3141fd3SAndroid Build Coastguard Worker ** </ul> 2395*a3141fd3SAndroid Build Coastguard Worker ** </dd> 2396*a3141fd3SAndroid Build Coastguard Worker ** 2397*a3141fd3SAndroid Build Coastguard Worker ** [[SQLITE_DBCONFIG_WRITABLE_SCHEMA]] <dt>SQLITE_DBCONFIG_WRITABLE_SCHEMA</dt> 2398*a3141fd3SAndroid Build Coastguard Worker ** <dd>The SQLITE_DBCONFIG_WRITABLE_SCHEMA option activates or deactivates the 2399*a3141fd3SAndroid Build Coastguard Worker ** "writable_schema" flag. This has the same effect and is logically equivalent 2400*a3141fd3SAndroid Build Coastguard Worker ** to setting [PRAGMA writable_schema=ON] or [PRAGMA writable_schema=OFF]. 2401*a3141fd3SAndroid Build Coastguard Worker ** The first argument to this setting is an integer which is 0 to disable 2402*a3141fd3SAndroid Build Coastguard Worker ** the writable_schema, positive to enable writable_schema, or negative to 2403*a3141fd3SAndroid Build Coastguard Worker ** leave the setting unchanged. The second parameter is a pointer to an 2404*a3141fd3SAndroid Build Coastguard Worker ** integer into which is written 0 or 1 to indicate whether the writable_schema 2405*a3141fd3SAndroid Build Coastguard Worker ** is enabled or disabled following this call. 2406*a3141fd3SAndroid Build Coastguard Worker ** </dd> 2407*a3141fd3SAndroid Build Coastguard Worker ** 2408*a3141fd3SAndroid Build Coastguard Worker ** [[SQLITE_DBCONFIG_LEGACY_ALTER_TABLE]] 2409*a3141fd3SAndroid Build Coastguard Worker ** <dt>SQLITE_DBCONFIG_LEGACY_ALTER_TABLE</dt> 2410*a3141fd3SAndroid Build Coastguard Worker ** <dd>The SQLITE_DBCONFIG_LEGACY_ALTER_TABLE option activates or deactivates 2411*a3141fd3SAndroid Build Coastguard Worker ** the legacy behavior of the [ALTER TABLE RENAME] command such it 2412*a3141fd3SAndroid Build Coastguard Worker ** behaves as it did prior to [version 3.24.0] (2018-06-04). See the 2413*a3141fd3SAndroid Build Coastguard Worker ** "Compatibility Notice" on the [ALTER TABLE RENAME documentation] for 2414*a3141fd3SAndroid Build Coastguard Worker ** additional information. This feature can also be turned on and off 2415*a3141fd3SAndroid Build Coastguard Worker ** using the [PRAGMA legacy_alter_table] statement. 2416*a3141fd3SAndroid Build Coastguard Worker ** </dd> 2417*a3141fd3SAndroid Build Coastguard Worker ** 2418*a3141fd3SAndroid Build Coastguard Worker ** [[SQLITE_DBCONFIG_DQS_DML]] 2419*a3141fd3SAndroid Build Coastguard Worker ** <dt>SQLITE_DBCONFIG_DQS_DML</dt> 2420*a3141fd3SAndroid Build Coastguard Worker ** <dd>The SQLITE_DBCONFIG_DQS_DML option activates or deactivates 2421*a3141fd3SAndroid Build Coastguard Worker ** the legacy [double-quoted string literal] misfeature for DML statements 2422*a3141fd3SAndroid Build Coastguard Worker ** only, that is DELETE, INSERT, SELECT, and UPDATE statements. The 2423*a3141fd3SAndroid Build Coastguard Worker ** default value of this setting is determined by the [-DSQLITE_DQS] 2424*a3141fd3SAndroid Build Coastguard Worker ** compile-time option. 2425*a3141fd3SAndroid Build Coastguard Worker ** </dd> 2426*a3141fd3SAndroid Build Coastguard Worker ** 2427*a3141fd3SAndroid Build Coastguard Worker ** [[SQLITE_DBCONFIG_DQS_DDL]] 2428*a3141fd3SAndroid Build Coastguard Worker ** <dt>SQLITE_DBCONFIG_DQS_DDL</dt> 2429*a3141fd3SAndroid Build Coastguard Worker ** <dd>The SQLITE_DBCONFIG_DQS option activates or deactivates 2430*a3141fd3SAndroid Build Coastguard Worker ** the legacy [double-quoted string literal] misfeature for DDL statements, 2431*a3141fd3SAndroid Build Coastguard Worker ** such as CREATE TABLE and CREATE INDEX. The 2432*a3141fd3SAndroid Build Coastguard Worker ** default value of this setting is determined by the [-DSQLITE_DQS] 2433*a3141fd3SAndroid Build Coastguard Worker ** compile-time option. 2434*a3141fd3SAndroid Build Coastguard Worker ** </dd> 2435*a3141fd3SAndroid Build Coastguard Worker ** 2436*a3141fd3SAndroid Build Coastguard Worker ** [[SQLITE_DBCONFIG_TRUSTED_SCHEMA]] 2437*a3141fd3SAndroid Build Coastguard Worker ** <dt>SQLITE_DBCONFIG_TRUSTED_SCHEMA</dt> 2438*a3141fd3SAndroid Build Coastguard Worker ** <dd>The SQLITE_DBCONFIG_TRUSTED_SCHEMA option tells SQLite to 2439*a3141fd3SAndroid Build Coastguard Worker ** assume that database schemas are untainted by malicious content. 2440*a3141fd3SAndroid Build Coastguard Worker ** When the SQLITE_DBCONFIG_TRUSTED_SCHEMA option is disabled, SQLite 2441*a3141fd3SAndroid Build Coastguard Worker ** takes additional defensive steps to protect the application from harm 2442*a3141fd3SAndroid Build Coastguard Worker ** including: 2443*a3141fd3SAndroid Build Coastguard Worker ** <ul> 2444*a3141fd3SAndroid Build Coastguard Worker ** <li> Prohibit the use of SQL functions inside triggers, views, 2445*a3141fd3SAndroid Build Coastguard Worker ** CHECK constraints, DEFAULT clauses, expression indexes, 2446*a3141fd3SAndroid Build Coastguard Worker ** partial indexes, or generated columns 2447*a3141fd3SAndroid Build Coastguard Worker ** unless those functions are tagged with [SQLITE_INNOCUOUS]. 2448*a3141fd3SAndroid Build Coastguard Worker ** <li> Prohibit the use of virtual tables inside of triggers or views 2449*a3141fd3SAndroid Build Coastguard Worker ** unless those virtual tables are tagged with [SQLITE_VTAB_INNOCUOUS]. 2450*a3141fd3SAndroid Build Coastguard Worker ** </ul> 2451*a3141fd3SAndroid Build Coastguard Worker ** This setting defaults to "on" for legacy compatibility, however 2452*a3141fd3SAndroid Build Coastguard Worker ** all applications are advised to turn it off if possible. This setting 2453*a3141fd3SAndroid Build Coastguard Worker ** can also be controlled using the [PRAGMA trusted_schema] statement. 2454*a3141fd3SAndroid Build Coastguard Worker ** </dd> 2455*a3141fd3SAndroid Build Coastguard Worker ** 2456*a3141fd3SAndroid Build Coastguard Worker ** [[SQLITE_DBCONFIG_LEGACY_FILE_FORMAT]] 2457*a3141fd3SAndroid Build Coastguard Worker ** <dt>SQLITE_DBCONFIG_LEGACY_FILE_FORMAT</dt> 2458*a3141fd3SAndroid Build Coastguard Worker ** <dd>The SQLITE_DBCONFIG_LEGACY_FILE_FORMAT option activates or deactivates 2459*a3141fd3SAndroid Build Coastguard Worker ** the legacy file format flag. When activated, this flag causes all newly 2460*a3141fd3SAndroid Build Coastguard Worker ** created database file to have a schema format version number (the 4-byte 2461*a3141fd3SAndroid Build Coastguard Worker ** integer found at offset 44 into the database header) of 1. This in turn 2462*a3141fd3SAndroid Build Coastguard Worker ** means that the resulting database file will be readable and writable by 2463*a3141fd3SAndroid Build Coastguard Worker ** any SQLite version back to 3.0.0 ([dateof:3.0.0]). Without this setting, 2464*a3141fd3SAndroid Build Coastguard Worker ** newly created databases are generally not understandable by SQLite versions 2465*a3141fd3SAndroid Build Coastguard Worker ** prior to 3.3.0 ([dateof:3.3.0]). As these words are written, there 2466*a3141fd3SAndroid Build Coastguard Worker ** is now scarcely any need to generate database files that are compatible 2467*a3141fd3SAndroid Build Coastguard Worker ** all the way back to version 3.0.0, and so this setting is of little 2468*a3141fd3SAndroid Build Coastguard Worker ** practical use, but is provided so that SQLite can continue to claim the 2469*a3141fd3SAndroid Build Coastguard Worker ** ability to generate new database files that are compatible with version 2470*a3141fd3SAndroid Build Coastguard Worker ** 3.0.0. 2471*a3141fd3SAndroid Build Coastguard Worker ** <p>Note that when the SQLITE_DBCONFIG_LEGACY_FILE_FORMAT setting is on, 2472*a3141fd3SAndroid Build Coastguard Worker ** the [VACUUM] command will fail with an obscure error when attempting to 2473*a3141fd3SAndroid Build Coastguard Worker ** process a table with generated columns and a descending index. This is 2474*a3141fd3SAndroid Build Coastguard Worker ** not considered a bug since SQLite versions 3.3.0 and earlier do not support 2475*a3141fd3SAndroid Build Coastguard Worker ** either generated columns or descending indexes. 2476*a3141fd3SAndroid Build Coastguard Worker ** </dd> 2477*a3141fd3SAndroid Build Coastguard Worker ** 2478*a3141fd3SAndroid Build Coastguard Worker ** [[SQLITE_DBCONFIG_STMT_SCANSTATUS]] 2479*a3141fd3SAndroid Build Coastguard Worker ** <dt>SQLITE_DBCONFIG_STMT_SCANSTATUS</dt> 2480*a3141fd3SAndroid Build Coastguard Worker ** <dd>The SQLITE_DBCONFIG_STMT_SCANSTATUS option is only useful in 2481*a3141fd3SAndroid Build Coastguard Worker ** SQLITE_ENABLE_STMT_SCANSTATUS builds. In this case, it sets or clears 2482*a3141fd3SAndroid Build Coastguard Worker ** a flag that enables collection of the sqlite3_stmt_scanstatus_v2() 2483*a3141fd3SAndroid Build Coastguard Worker ** statistics. For statistics to be collected, the flag must be set on 2484*a3141fd3SAndroid Build Coastguard Worker ** the database handle both when the SQL statement is prepared and when it 2485*a3141fd3SAndroid Build Coastguard Worker ** is stepped. The flag is set (collection of statistics is enabled) 2486*a3141fd3SAndroid Build Coastguard Worker ** by default. This option takes two arguments: an integer and a pointer to 2487*a3141fd3SAndroid Build Coastguard Worker ** an integer.. The first argument is 1, 0, or -1 to enable, disable, or 2488*a3141fd3SAndroid Build Coastguard Worker ** leave unchanged the statement scanstatus option. If the second argument 2489*a3141fd3SAndroid Build Coastguard Worker ** is not NULL, then the value of the statement scanstatus setting after 2490*a3141fd3SAndroid Build Coastguard Worker ** processing the first argument is written into the integer that the second 2491*a3141fd3SAndroid Build Coastguard Worker ** argument points to. 2492*a3141fd3SAndroid Build Coastguard Worker ** </dd> 2493*a3141fd3SAndroid Build Coastguard Worker ** 2494*a3141fd3SAndroid Build Coastguard Worker ** [[SQLITE_DBCONFIG_REVERSE_SCANORDER]] 2495*a3141fd3SAndroid Build Coastguard Worker ** <dt>SQLITE_DBCONFIG_REVERSE_SCANORDER</dt> 2496*a3141fd3SAndroid Build Coastguard Worker ** <dd>The SQLITE_DBCONFIG_REVERSE_SCANORDER option changes the default order 2497*a3141fd3SAndroid Build Coastguard Worker ** in which tables and indexes are scanned so that the scans start at the end 2498*a3141fd3SAndroid Build Coastguard Worker ** and work toward the beginning rather than starting at the beginning and 2499*a3141fd3SAndroid Build Coastguard Worker ** working toward the end. Setting SQLITE_DBCONFIG_REVERSE_SCANORDER is the 2500*a3141fd3SAndroid Build Coastguard Worker ** same as setting [PRAGMA reverse_unordered_selects]. This option takes 2501*a3141fd3SAndroid Build Coastguard Worker ** two arguments which are an integer and a pointer to an integer. The first 2502*a3141fd3SAndroid Build Coastguard Worker ** argument is 1, 0, or -1 to enable, disable, or leave unchanged the 2503*a3141fd3SAndroid Build Coastguard Worker ** reverse scan order flag, respectively. If the second argument is not NULL, 2504*a3141fd3SAndroid Build Coastguard Worker ** then 0 or 1 is written into the integer that the second argument points to 2505*a3141fd3SAndroid Build Coastguard Worker ** depending on if the reverse scan order flag is set after processing the 2506*a3141fd3SAndroid Build Coastguard Worker ** first argument. 2507*a3141fd3SAndroid Build Coastguard Worker ** </dd> 2508*a3141fd3SAndroid Build Coastguard Worker ** 2509*a3141fd3SAndroid Build Coastguard Worker ** </dl> 2510*a3141fd3SAndroid Build Coastguard Worker */ 2511*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_DBCONFIG_MAINDBNAME 1000 /* const char* */ 2512*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_DBCONFIG_LOOKASIDE 1001 /* void* int int */ 2513*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_DBCONFIG_ENABLE_FKEY 1002 /* int int* */ 2514*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_DBCONFIG_ENABLE_TRIGGER 1003 /* int int* */ 2515*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_DBCONFIG_ENABLE_FTS3_TOKENIZER 1004 /* int int* */ 2516*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_DBCONFIG_ENABLE_LOAD_EXTENSION 1005 /* int int* */ 2517*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_DBCONFIG_NO_CKPT_ON_CLOSE 1006 /* int int* */ 2518*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_DBCONFIG_ENABLE_QPSG 1007 /* int int* */ 2519*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_DBCONFIG_TRIGGER_EQP 1008 /* int int* */ 2520*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_DBCONFIG_RESET_DATABASE 1009 /* int int* */ 2521*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_DBCONFIG_DEFENSIVE 1010 /* int int* */ 2522*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_DBCONFIG_WRITABLE_SCHEMA 1011 /* int int* */ 2523*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_DBCONFIG_LEGACY_ALTER_TABLE 1012 /* int int* */ 2524*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_DBCONFIG_DQS_DML 1013 /* int int* */ 2525*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_DBCONFIG_DQS_DDL 1014 /* int int* */ 2526*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_DBCONFIG_ENABLE_VIEW 1015 /* int int* */ 2527*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_DBCONFIG_LEGACY_FILE_FORMAT 1016 /* int int* */ 2528*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_DBCONFIG_TRUSTED_SCHEMA 1017 /* int int* */ 2529*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_DBCONFIG_STMT_SCANSTATUS 1018 /* int int* */ 2530*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_DBCONFIG_REVERSE_SCANORDER 1019 /* int int* */ 2531*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_DBCONFIG_MAX 1019 /* Largest DBCONFIG */ 2532*a3141fd3SAndroid Build Coastguard Worker 2533*a3141fd3SAndroid Build Coastguard Worker /* 2534*a3141fd3SAndroid Build Coastguard Worker ** CAPI3REF: Enable Or Disable Extended Result Codes 2535*a3141fd3SAndroid Build Coastguard Worker ** METHOD: sqlite3 2536*a3141fd3SAndroid Build Coastguard Worker ** 2537*a3141fd3SAndroid Build Coastguard Worker ** ^The sqlite3_extended_result_codes() routine enables or disables the 2538*a3141fd3SAndroid Build Coastguard Worker ** [extended result codes] feature of SQLite. ^The extended result 2539*a3141fd3SAndroid Build Coastguard Worker ** codes are disabled by default for historical compatibility. 2540*a3141fd3SAndroid Build Coastguard Worker */ 2541*a3141fd3SAndroid Build Coastguard Worker SQLITE_API int sqlite3_extended_result_codes(sqlite3*, int onoff); 2542*a3141fd3SAndroid Build Coastguard Worker 2543*a3141fd3SAndroid Build Coastguard Worker /* 2544*a3141fd3SAndroid Build Coastguard Worker ** CAPI3REF: Last Insert Rowid 2545*a3141fd3SAndroid Build Coastguard Worker ** METHOD: sqlite3 2546*a3141fd3SAndroid Build Coastguard Worker ** 2547*a3141fd3SAndroid Build Coastguard Worker ** ^Each entry in most SQLite tables (except for [WITHOUT ROWID] tables) 2548*a3141fd3SAndroid Build Coastguard Worker ** has a unique 64-bit signed 2549*a3141fd3SAndroid Build Coastguard Worker ** integer key called the [ROWID | "rowid"]. ^The rowid is always available 2550*a3141fd3SAndroid Build Coastguard Worker ** as an undeclared column named ROWID, OID, or _ROWID_ as long as those 2551*a3141fd3SAndroid Build Coastguard Worker ** names are not also used by explicitly declared columns. ^If 2552*a3141fd3SAndroid Build Coastguard Worker ** the table has a column of type [INTEGER PRIMARY KEY] then that column 2553*a3141fd3SAndroid Build Coastguard Worker ** is another alias for the rowid. 2554*a3141fd3SAndroid Build Coastguard Worker ** 2555*a3141fd3SAndroid Build Coastguard Worker ** ^The sqlite3_last_insert_rowid(D) interface usually returns the [rowid] of 2556*a3141fd3SAndroid Build Coastguard Worker ** the most recent successful [INSERT] into a rowid table or [virtual table] 2557*a3141fd3SAndroid Build Coastguard Worker ** on database connection D. ^Inserts into [WITHOUT ROWID] tables are not 2558*a3141fd3SAndroid Build Coastguard Worker ** recorded. ^If no successful [INSERT]s into rowid tables have ever occurred 2559*a3141fd3SAndroid Build Coastguard Worker ** on the database connection D, then sqlite3_last_insert_rowid(D) returns 2560*a3141fd3SAndroid Build Coastguard Worker ** zero. 2561*a3141fd3SAndroid Build Coastguard Worker ** 2562*a3141fd3SAndroid Build Coastguard Worker ** As well as being set automatically as rows are inserted into database 2563*a3141fd3SAndroid Build Coastguard Worker ** tables, the value returned by this function may be set explicitly by 2564*a3141fd3SAndroid Build Coastguard Worker ** [sqlite3_set_last_insert_rowid()] 2565*a3141fd3SAndroid Build Coastguard Worker ** 2566*a3141fd3SAndroid Build Coastguard Worker ** Some virtual table implementations may INSERT rows into rowid tables as 2567*a3141fd3SAndroid Build Coastguard Worker ** part of committing a transaction (e.g. to flush data accumulated in memory 2568*a3141fd3SAndroid Build Coastguard Worker ** to disk). In this case subsequent calls to this function return the rowid 2569*a3141fd3SAndroid Build Coastguard Worker ** associated with these internal INSERT operations, which leads to 2570*a3141fd3SAndroid Build Coastguard Worker ** unintuitive results. Virtual table implementations that do write to rowid 2571*a3141fd3SAndroid Build Coastguard Worker ** tables in this way can avoid this problem by restoring the original 2572*a3141fd3SAndroid Build Coastguard Worker ** rowid value using [sqlite3_set_last_insert_rowid()] before returning 2573*a3141fd3SAndroid Build Coastguard Worker ** control to the user. 2574*a3141fd3SAndroid Build Coastguard Worker ** 2575*a3141fd3SAndroid Build Coastguard Worker ** ^(If an [INSERT] occurs within a trigger then this routine will 2576*a3141fd3SAndroid Build Coastguard Worker ** return the [rowid] of the inserted row as long as the trigger is 2577*a3141fd3SAndroid Build Coastguard Worker ** running. Once the trigger program ends, the value returned 2578*a3141fd3SAndroid Build Coastguard Worker ** by this routine reverts to what it was before the trigger was fired.)^ 2579*a3141fd3SAndroid Build Coastguard Worker ** 2580*a3141fd3SAndroid Build Coastguard Worker ** ^An [INSERT] that fails due to a constraint violation is not a 2581*a3141fd3SAndroid Build Coastguard Worker ** successful [INSERT] and does not change the value returned by this 2582*a3141fd3SAndroid Build Coastguard Worker ** routine. ^Thus INSERT OR FAIL, INSERT OR IGNORE, INSERT OR ROLLBACK, 2583*a3141fd3SAndroid Build Coastguard Worker ** and INSERT OR ABORT make no changes to the return value of this 2584*a3141fd3SAndroid Build Coastguard Worker ** routine when their insertion fails. ^(When INSERT OR REPLACE 2585*a3141fd3SAndroid Build Coastguard Worker ** encounters a constraint violation, it does not fail. The 2586*a3141fd3SAndroid Build Coastguard Worker ** INSERT continues to completion after deleting rows that caused 2587*a3141fd3SAndroid Build Coastguard Worker ** the constraint problem so INSERT OR REPLACE will always change 2588*a3141fd3SAndroid Build Coastguard Worker ** the return value of this interface.)^ 2589*a3141fd3SAndroid Build Coastguard Worker ** 2590*a3141fd3SAndroid Build Coastguard Worker ** ^For the purposes of this routine, an [INSERT] is considered to 2591*a3141fd3SAndroid Build Coastguard Worker ** be successful even if it is subsequently rolled back. 2592*a3141fd3SAndroid Build Coastguard Worker ** 2593*a3141fd3SAndroid Build Coastguard Worker ** This function is accessible to SQL statements via the 2594*a3141fd3SAndroid Build Coastguard Worker ** [last_insert_rowid() SQL function]. 2595*a3141fd3SAndroid Build Coastguard Worker ** 2596*a3141fd3SAndroid Build Coastguard Worker ** If a separate thread performs a new [INSERT] on the same 2597*a3141fd3SAndroid Build Coastguard Worker ** database connection while the [sqlite3_last_insert_rowid()] 2598*a3141fd3SAndroid Build Coastguard Worker ** function is running and thus changes the last insert [rowid], 2599*a3141fd3SAndroid Build Coastguard Worker ** then the value returned by [sqlite3_last_insert_rowid()] is 2600*a3141fd3SAndroid Build Coastguard Worker ** unpredictable and might not equal either the old or the new 2601*a3141fd3SAndroid Build Coastguard Worker ** last insert [rowid]. 2602*a3141fd3SAndroid Build Coastguard Worker */ 2603*a3141fd3SAndroid Build Coastguard Worker SQLITE_API sqlite3_int64 sqlite3_last_insert_rowid(sqlite3*); 2604*a3141fd3SAndroid Build Coastguard Worker 2605*a3141fd3SAndroid Build Coastguard Worker /* 2606*a3141fd3SAndroid Build Coastguard Worker ** CAPI3REF: Set the Last Insert Rowid value. 2607*a3141fd3SAndroid Build Coastguard Worker ** METHOD: sqlite3 2608*a3141fd3SAndroid Build Coastguard Worker ** 2609*a3141fd3SAndroid Build Coastguard Worker ** The sqlite3_set_last_insert_rowid(D, R) method allows the application to 2610*a3141fd3SAndroid Build Coastguard Worker ** set the value returned by calling sqlite3_last_insert_rowid(D) to R 2611*a3141fd3SAndroid Build Coastguard Worker ** without inserting a row into the database. 2612*a3141fd3SAndroid Build Coastguard Worker */ 2613*a3141fd3SAndroid Build Coastguard Worker SQLITE_API void sqlite3_set_last_insert_rowid(sqlite3*,sqlite3_int64); 2614*a3141fd3SAndroid Build Coastguard Worker 2615*a3141fd3SAndroid Build Coastguard Worker /* 2616*a3141fd3SAndroid Build Coastguard Worker ** CAPI3REF: Count The Number Of Rows Modified 2617*a3141fd3SAndroid Build Coastguard Worker ** METHOD: sqlite3 2618*a3141fd3SAndroid Build Coastguard Worker ** 2619*a3141fd3SAndroid Build Coastguard Worker ** ^These functions return the number of rows modified, inserted or 2620*a3141fd3SAndroid Build Coastguard Worker ** deleted by the most recently completed INSERT, UPDATE or DELETE 2621*a3141fd3SAndroid Build Coastguard Worker ** statement on the database connection specified by the only parameter. 2622*a3141fd3SAndroid Build Coastguard Worker ** The two functions are identical except for the type of the return value 2623*a3141fd3SAndroid Build Coastguard Worker ** and that if the number of rows modified by the most recent INSERT, UPDATE 2624*a3141fd3SAndroid Build Coastguard Worker ** or DELETE is greater than the maximum value supported by type "int", then 2625*a3141fd3SAndroid Build Coastguard Worker ** the return value of sqlite3_changes() is undefined. ^Executing any other 2626*a3141fd3SAndroid Build Coastguard Worker ** type of SQL statement does not modify the value returned by these functions. 2627*a3141fd3SAndroid Build Coastguard Worker ** 2628*a3141fd3SAndroid Build Coastguard Worker ** ^Only changes made directly by the INSERT, UPDATE or DELETE statement are 2629*a3141fd3SAndroid Build Coastguard Worker ** considered - auxiliary changes caused by [CREATE TRIGGER | triggers], 2630*a3141fd3SAndroid Build Coastguard Worker ** [foreign key actions] or [REPLACE] constraint resolution are not counted. 2631*a3141fd3SAndroid Build Coastguard Worker ** 2632*a3141fd3SAndroid Build Coastguard Worker ** Changes to a view that are intercepted by 2633*a3141fd3SAndroid Build Coastguard Worker ** [INSTEAD OF trigger | INSTEAD OF triggers] are not counted. ^The value 2634*a3141fd3SAndroid Build Coastguard Worker ** returned by sqlite3_changes() immediately after an INSERT, UPDATE or 2635*a3141fd3SAndroid Build Coastguard Worker ** DELETE statement run on a view is always zero. Only changes made to real 2636*a3141fd3SAndroid Build Coastguard Worker ** tables are counted. 2637*a3141fd3SAndroid Build Coastguard Worker ** 2638*a3141fd3SAndroid Build Coastguard Worker ** Things are more complicated if the sqlite3_changes() function is 2639*a3141fd3SAndroid Build Coastguard Worker ** executed while a trigger program is running. This may happen if the 2640*a3141fd3SAndroid Build Coastguard Worker ** program uses the [changes() SQL function], or if some other callback 2641*a3141fd3SAndroid Build Coastguard Worker ** function invokes sqlite3_changes() directly. Essentially: 2642*a3141fd3SAndroid Build Coastguard Worker ** 2643*a3141fd3SAndroid Build Coastguard Worker ** <ul> 2644*a3141fd3SAndroid Build Coastguard Worker ** <li> ^(Before entering a trigger program the value returned by 2645*a3141fd3SAndroid Build Coastguard Worker ** sqlite3_changes() function is saved. After the trigger program 2646*a3141fd3SAndroid Build Coastguard Worker ** has finished, the original value is restored.)^ 2647*a3141fd3SAndroid Build Coastguard Worker ** 2648*a3141fd3SAndroid Build Coastguard Worker ** <li> ^(Within a trigger program each INSERT, UPDATE and DELETE 2649*a3141fd3SAndroid Build Coastguard Worker ** statement sets the value returned by sqlite3_changes() 2650*a3141fd3SAndroid Build Coastguard Worker ** upon completion as normal. Of course, this value will not include 2651*a3141fd3SAndroid Build Coastguard Worker ** any changes performed by sub-triggers, as the sqlite3_changes() 2652*a3141fd3SAndroid Build Coastguard Worker ** value will be saved and restored after each sub-trigger has run.)^ 2653*a3141fd3SAndroid Build Coastguard Worker ** </ul> 2654*a3141fd3SAndroid Build Coastguard Worker ** 2655*a3141fd3SAndroid Build Coastguard Worker ** ^This means that if the changes() SQL function (or similar) is used 2656*a3141fd3SAndroid Build Coastguard Worker ** by the first INSERT, UPDATE or DELETE statement within a trigger, it 2657*a3141fd3SAndroid Build Coastguard Worker ** returns the value as set when the calling statement began executing. 2658*a3141fd3SAndroid Build Coastguard Worker ** ^If it is used by the second or subsequent such statement within a trigger 2659*a3141fd3SAndroid Build Coastguard Worker ** program, the value returned reflects the number of rows modified by the 2660*a3141fd3SAndroid Build Coastguard Worker ** previous INSERT, UPDATE or DELETE statement within the same trigger. 2661*a3141fd3SAndroid Build Coastguard Worker ** 2662*a3141fd3SAndroid Build Coastguard Worker ** If a separate thread makes changes on the same database connection 2663*a3141fd3SAndroid Build Coastguard Worker ** while [sqlite3_changes()] is running then the value returned 2664*a3141fd3SAndroid Build Coastguard Worker ** is unpredictable and not meaningful. 2665*a3141fd3SAndroid Build Coastguard Worker ** 2666*a3141fd3SAndroid Build Coastguard Worker ** See also: 2667*a3141fd3SAndroid Build Coastguard Worker ** <ul> 2668*a3141fd3SAndroid Build Coastguard Worker ** <li> the [sqlite3_total_changes()] interface 2669*a3141fd3SAndroid Build Coastguard Worker ** <li> the [count_changes pragma] 2670*a3141fd3SAndroid Build Coastguard Worker ** <li> the [changes() SQL function] 2671*a3141fd3SAndroid Build Coastguard Worker ** <li> the [data_version pragma] 2672*a3141fd3SAndroid Build Coastguard Worker ** </ul> 2673*a3141fd3SAndroid Build Coastguard Worker */ 2674*a3141fd3SAndroid Build Coastguard Worker SQLITE_API int sqlite3_changes(sqlite3*); 2675*a3141fd3SAndroid Build Coastguard Worker SQLITE_API sqlite3_int64 sqlite3_changes64(sqlite3*); 2676*a3141fd3SAndroid Build Coastguard Worker 2677*a3141fd3SAndroid Build Coastguard Worker /* 2678*a3141fd3SAndroid Build Coastguard Worker ** CAPI3REF: Total Number Of Rows Modified 2679*a3141fd3SAndroid Build Coastguard Worker ** METHOD: sqlite3 2680*a3141fd3SAndroid Build Coastguard Worker ** 2681*a3141fd3SAndroid Build Coastguard Worker ** ^These functions return the total number of rows inserted, modified or 2682*a3141fd3SAndroid Build Coastguard Worker ** deleted by all [INSERT], [UPDATE] or [DELETE] statements completed 2683*a3141fd3SAndroid Build Coastguard Worker ** since the database connection was opened, including those executed as 2684*a3141fd3SAndroid Build Coastguard Worker ** part of trigger programs. The two functions are identical except for the 2685*a3141fd3SAndroid Build Coastguard Worker ** type of the return value and that if the number of rows modified by the 2686*a3141fd3SAndroid Build Coastguard Worker ** connection exceeds the maximum value supported by type "int", then 2687*a3141fd3SAndroid Build Coastguard Worker ** the return value of sqlite3_total_changes() is undefined. ^Executing 2688*a3141fd3SAndroid Build Coastguard Worker ** any other type of SQL statement does not affect the value returned by 2689*a3141fd3SAndroid Build Coastguard Worker ** sqlite3_total_changes(). 2690*a3141fd3SAndroid Build Coastguard Worker ** 2691*a3141fd3SAndroid Build Coastguard Worker ** ^Changes made as part of [foreign key actions] are included in the 2692*a3141fd3SAndroid Build Coastguard Worker ** count, but those made as part of REPLACE constraint resolution are 2693*a3141fd3SAndroid Build Coastguard Worker ** not. ^Changes to a view that are intercepted by INSTEAD OF triggers 2694*a3141fd3SAndroid Build Coastguard Worker ** are not counted. 2695*a3141fd3SAndroid Build Coastguard Worker ** 2696*a3141fd3SAndroid Build Coastguard Worker ** The [sqlite3_total_changes(D)] interface only reports the number 2697*a3141fd3SAndroid Build Coastguard Worker ** of rows that changed due to SQL statement run against database 2698*a3141fd3SAndroid Build Coastguard Worker ** connection D. Any changes by other database connections are ignored. 2699*a3141fd3SAndroid Build Coastguard Worker ** To detect changes against a database file from other database 2700*a3141fd3SAndroid Build Coastguard Worker ** connections use the [PRAGMA data_version] command or the 2701*a3141fd3SAndroid Build Coastguard Worker ** [SQLITE_FCNTL_DATA_VERSION] [file control]. 2702*a3141fd3SAndroid Build Coastguard Worker ** 2703*a3141fd3SAndroid Build Coastguard Worker ** If a separate thread makes changes on the same database connection 2704*a3141fd3SAndroid Build Coastguard Worker ** while [sqlite3_total_changes()] is running then the value 2705*a3141fd3SAndroid Build Coastguard Worker ** returned is unpredictable and not meaningful. 2706*a3141fd3SAndroid Build Coastguard Worker ** 2707*a3141fd3SAndroid Build Coastguard Worker ** See also: 2708*a3141fd3SAndroid Build Coastguard Worker ** <ul> 2709*a3141fd3SAndroid Build Coastguard Worker ** <li> the [sqlite3_changes()] interface 2710*a3141fd3SAndroid Build Coastguard Worker ** <li> the [count_changes pragma] 2711*a3141fd3SAndroid Build Coastguard Worker ** <li> the [changes() SQL function] 2712*a3141fd3SAndroid Build Coastguard Worker ** <li> the [data_version pragma] 2713*a3141fd3SAndroid Build Coastguard Worker ** <li> the [SQLITE_FCNTL_DATA_VERSION] [file control] 2714*a3141fd3SAndroid Build Coastguard Worker ** </ul> 2715*a3141fd3SAndroid Build Coastguard Worker */ 2716*a3141fd3SAndroid Build Coastguard Worker SQLITE_API int sqlite3_total_changes(sqlite3*); 2717*a3141fd3SAndroid Build Coastguard Worker SQLITE_API sqlite3_int64 sqlite3_total_changes64(sqlite3*); 2718*a3141fd3SAndroid Build Coastguard Worker 2719*a3141fd3SAndroid Build Coastguard Worker /* 2720*a3141fd3SAndroid Build Coastguard Worker ** CAPI3REF: Interrupt A Long-Running Query 2721*a3141fd3SAndroid Build Coastguard Worker ** METHOD: sqlite3 2722*a3141fd3SAndroid Build Coastguard Worker ** 2723*a3141fd3SAndroid Build Coastguard Worker ** ^This function causes any pending database operation to abort and 2724*a3141fd3SAndroid Build Coastguard Worker ** return at its earliest opportunity. This routine is typically 2725*a3141fd3SAndroid Build Coastguard Worker ** called in response to a user action such as pressing "Cancel" 2726*a3141fd3SAndroid Build Coastguard Worker ** or Ctrl-C where the user wants a long query operation to halt 2727*a3141fd3SAndroid Build Coastguard Worker ** immediately. 2728*a3141fd3SAndroid Build Coastguard Worker ** 2729*a3141fd3SAndroid Build Coastguard Worker ** ^It is safe to call this routine from a thread different from the 2730*a3141fd3SAndroid Build Coastguard Worker ** thread that is currently running the database operation. But it 2731*a3141fd3SAndroid Build Coastguard Worker ** is not safe to call this routine with a [database connection] that 2732*a3141fd3SAndroid Build Coastguard Worker ** is closed or might close before sqlite3_interrupt() returns. 2733*a3141fd3SAndroid Build Coastguard Worker ** 2734*a3141fd3SAndroid Build Coastguard Worker ** ^If an SQL operation is very nearly finished at the time when 2735*a3141fd3SAndroid Build Coastguard Worker ** sqlite3_interrupt() is called, then it might not have an opportunity 2736*a3141fd3SAndroid Build Coastguard Worker ** to be interrupted and might continue to completion. 2737*a3141fd3SAndroid Build Coastguard Worker ** 2738*a3141fd3SAndroid Build Coastguard Worker ** ^An SQL operation that is interrupted will return [SQLITE_INTERRUPT]. 2739*a3141fd3SAndroid Build Coastguard Worker ** ^If the interrupted SQL operation is an INSERT, UPDATE, or DELETE 2740*a3141fd3SAndroid Build Coastguard Worker ** that is inside an explicit transaction, then the entire transaction 2741*a3141fd3SAndroid Build Coastguard Worker ** will be rolled back automatically. 2742*a3141fd3SAndroid Build Coastguard Worker ** 2743*a3141fd3SAndroid Build Coastguard Worker ** ^The sqlite3_interrupt(D) call is in effect until all currently running 2744*a3141fd3SAndroid Build Coastguard Worker ** SQL statements on [database connection] D complete. ^Any new SQL statements 2745*a3141fd3SAndroid Build Coastguard Worker ** that are started after the sqlite3_interrupt() call and before the 2746*a3141fd3SAndroid Build Coastguard Worker ** running statement count reaches zero are interrupted as if they had been 2747*a3141fd3SAndroid Build Coastguard Worker ** running prior to the sqlite3_interrupt() call. ^New SQL statements 2748*a3141fd3SAndroid Build Coastguard Worker ** that are started after the running statement count reaches zero are 2749*a3141fd3SAndroid Build Coastguard Worker ** not effected by the sqlite3_interrupt(). 2750*a3141fd3SAndroid Build Coastguard Worker ** ^A call to sqlite3_interrupt(D) that occurs when there are no running 2751*a3141fd3SAndroid Build Coastguard Worker ** SQL statements is a no-op and has no effect on SQL statements 2752*a3141fd3SAndroid Build Coastguard Worker ** that are started after the sqlite3_interrupt() call returns. 2753*a3141fd3SAndroid Build Coastguard Worker ** 2754*a3141fd3SAndroid Build Coastguard Worker ** ^The [sqlite3_is_interrupted(D)] interface can be used to determine whether 2755*a3141fd3SAndroid Build Coastguard Worker ** or not an interrupt is currently in effect for [database connection] D. 2756*a3141fd3SAndroid Build Coastguard Worker ** It returns 1 if an interrupt is currently in effect, or 0 otherwise. 2757*a3141fd3SAndroid Build Coastguard Worker */ 2758*a3141fd3SAndroid Build Coastguard Worker SQLITE_API void sqlite3_interrupt(sqlite3*); 2759*a3141fd3SAndroid Build Coastguard Worker SQLITE_API int sqlite3_is_interrupted(sqlite3*); 2760*a3141fd3SAndroid Build Coastguard Worker 2761*a3141fd3SAndroid Build Coastguard Worker /* 2762*a3141fd3SAndroid Build Coastguard Worker ** CAPI3REF: Determine If An SQL Statement Is Complete 2763*a3141fd3SAndroid Build Coastguard Worker ** 2764*a3141fd3SAndroid Build Coastguard Worker ** These routines are useful during command-line input to determine if the 2765*a3141fd3SAndroid Build Coastguard Worker ** currently entered text seems to form a complete SQL statement or 2766*a3141fd3SAndroid Build Coastguard Worker ** if additional input is needed before sending the text into 2767*a3141fd3SAndroid Build Coastguard Worker ** SQLite for parsing. ^These routines return 1 if the input string 2768*a3141fd3SAndroid Build Coastguard Worker ** appears to be a complete SQL statement. ^A statement is judged to be 2769*a3141fd3SAndroid Build Coastguard Worker ** complete if it ends with a semicolon token and is not a prefix of a 2770*a3141fd3SAndroid Build Coastguard Worker ** well-formed CREATE TRIGGER statement. ^Semicolons that are embedded within 2771*a3141fd3SAndroid Build Coastguard Worker ** string literals or quoted identifier names or comments are not 2772*a3141fd3SAndroid Build Coastguard Worker ** independent tokens (they are part of the token in which they are 2773*a3141fd3SAndroid Build Coastguard Worker ** embedded) and thus do not count as a statement terminator. ^Whitespace 2774*a3141fd3SAndroid Build Coastguard Worker ** and comments that follow the final semicolon are ignored. 2775*a3141fd3SAndroid Build Coastguard Worker ** 2776*a3141fd3SAndroid Build Coastguard Worker ** ^These routines return 0 if the statement is incomplete. ^If a 2777*a3141fd3SAndroid Build Coastguard Worker ** memory allocation fails, then SQLITE_NOMEM is returned. 2778*a3141fd3SAndroid Build Coastguard Worker ** 2779*a3141fd3SAndroid Build Coastguard Worker ** ^These routines do not parse the SQL statements thus 2780*a3141fd3SAndroid Build Coastguard Worker ** will not detect syntactically incorrect SQL. 2781*a3141fd3SAndroid Build Coastguard Worker ** 2782*a3141fd3SAndroid Build Coastguard Worker ** ^(If SQLite has not been initialized using [sqlite3_initialize()] prior 2783*a3141fd3SAndroid Build Coastguard Worker ** to invoking sqlite3_complete16() then sqlite3_initialize() is invoked 2784*a3141fd3SAndroid Build Coastguard Worker ** automatically by sqlite3_complete16(). If that initialization fails, 2785*a3141fd3SAndroid Build Coastguard Worker ** then the return value from sqlite3_complete16() will be non-zero 2786*a3141fd3SAndroid Build Coastguard Worker ** regardless of whether or not the input SQL is complete.)^ 2787*a3141fd3SAndroid Build Coastguard Worker ** 2788*a3141fd3SAndroid Build Coastguard Worker ** The input to [sqlite3_complete()] must be a zero-terminated 2789*a3141fd3SAndroid Build Coastguard Worker ** UTF-8 string. 2790*a3141fd3SAndroid Build Coastguard Worker ** 2791*a3141fd3SAndroid Build Coastguard Worker ** The input to [sqlite3_complete16()] must be a zero-terminated 2792*a3141fd3SAndroid Build Coastguard Worker ** UTF-16 string in native byte order. 2793*a3141fd3SAndroid Build Coastguard Worker */ 2794*a3141fd3SAndroid Build Coastguard Worker SQLITE_API int sqlite3_complete(const char *sql); 2795*a3141fd3SAndroid Build Coastguard Worker SQLITE_API int sqlite3_complete16(const void *sql); 2796*a3141fd3SAndroid Build Coastguard Worker 2797*a3141fd3SAndroid Build Coastguard Worker /* 2798*a3141fd3SAndroid Build Coastguard Worker ** CAPI3REF: Register A Callback To Handle SQLITE_BUSY Errors 2799*a3141fd3SAndroid Build Coastguard Worker ** KEYWORDS: {busy-handler callback} {busy handler} 2800*a3141fd3SAndroid Build Coastguard Worker ** METHOD: sqlite3 2801*a3141fd3SAndroid Build Coastguard Worker ** 2802*a3141fd3SAndroid Build Coastguard Worker ** ^The sqlite3_busy_handler(D,X,P) routine sets a callback function X 2803*a3141fd3SAndroid Build Coastguard Worker ** that might be invoked with argument P whenever 2804*a3141fd3SAndroid Build Coastguard Worker ** an attempt is made to access a database table associated with 2805*a3141fd3SAndroid Build Coastguard Worker ** [database connection] D when another thread 2806*a3141fd3SAndroid Build Coastguard Worker ** or process has the table locked. 2807*a3141fd3SAndroid Build Coastguard Worker ** The sqlite3_busy_handler() interface is used to implement 2808*a3141fd3SAndroid Build Coastguard Worker ** [sqlite3_busy_timeout()] and [PRAGMA busy_timeout]. 2809*a3141fd3SAndroid Build Coastguard Worker ** 2810*a3141fd3SAndroid Build Coastguard Worker ** ^If the busy callback is NULL, then [SQLITE_BUSY] 2811*a3141fd3SAndroid Build Coastguard Worker ** is returned immediately upon encountering the lock. ^If the busy callback 2812*a3141fd3SAndroid Build Coastguard Worker ** is not NULL, then the callback might be invoked with two arguments. 2813*a3141fd3SAndroid Build Coastguard Worker ** 2814*a3141fd3SAndroid Build Coastguard Worker ** ^The first argument to the busy handler is a copy of the void* pointer which 2815*a3141fd3SAndroid Build Coastguard Worker ** is the third argument to sqlite3_busy_handler(). ^The second argument to 2816*a3141fd3SAndroid Build Coastguard Worker ** the busy handler callback is the number of times that the busy handler has 2817*a3141fd3SAndroid Build Coastguard Worker ** been invoked previously for the same locking event. ^If the 2818*a3141fd3SAndroid Build Coastguard Worker ** busy callback returns 0, then no additional attempts are made to 2819*a3141fd3SAndroid Build Coastguard Worker ** access the database and [SQLITE_BUSY] is returned 2820*a3141fd3SAndroid Build Coastguard Worker ** to the application. 2821*a3141fd3SAndroid Build Coastguard Worker ** ^If the callback returns non-zero, then another attempt 2822*a3141fd3SAndroid Build Coastguard Worker ** is made to access the database and the cycle repeats. 2823*a3141fd3SAndroid Build Coastguard Worker ** 2824*a3141fd3SAndroid Build Coastguard Worker ** The presence of a busy handler does not guarantee that it will be invoked 2825*a3141fd3SAndroid Build Coastguard Worker ** when there is lock contention. ^If SQLite determines that invoking the busy 2826*a3141fd3SAndroid Build Coastguard Worker ** handler could result in a deadlock, it will go ahead and return [SQLITE_BUSY] 2827*a3141fd3SAndroid Build Coastguard Worker ** to the application instead of invoking the 2828*a3141fd3SAndroid Build Coastguard Worker ** busy handler. 2829*a3141fd3SAndroid Build Coastguard Worker ** Consider a scenario where one process is holding a read lock that 2830*a3141fd3SAndroid Build Coastguard Worker ** it is trying to promote to a reserved lock and 2831*a3141fd3SAndroid Build Coastguard Worker ** a second process is holding a reserved lock that it is trying 2832*a3141fd3SAndroid Build Coastguard Worker ** to promote to an exclusive lock. The first process cannot proceed 2833*a3141fd3SAndroid Build Coastguard Worker ** because it is blocked by the second and the second process cannot 2834*a3141fd3SAndroid Build Coastguard Worker ** proceed because it is blocked by the first. If both processes 2835*a3141fd3SAndroid Build Coastguard Worker ** invoke the busy handlers, neither will make any progress. Therefore, 2836*a3141fd3SAndroid Build Coastguard Worker ** SQLite returns [SQLITE_BUSY] for the first process, hoping that this 2837*a3141fd3SAndroid Build Coastguard Worker ** will induce the first process to release its read lock and allow 2838*a3141fd3SAndroid Build Coastguard Worker ** the second process to proceed. 2839*a3141fd3SAndroid Build Coastguard Worker ** 2840*a3141fd3SAndroid Build Coastguard Worker ** ^The default busy callback is NULL. 2841*a3141fd3SAndroid Build Coastguard Worker ** 2842*a3141fd3SAndroid Build Coastguard Worker ** ^(There can only be a single busy handler defined for each 2843*a3141fd3SAndroid Build Coastguard Worker ** [database connection]. Setting a new busy handler clears any 2844*a3141fd3SAndroid Build Coastguard Worker ** previously set handler.)^ ^Note that calling [sqlite3_busy_timeout()] 2845*a3141fd3SAndroid Build Coastguard Worker ** or evaluating [PRAGMA busy_timeout=N] will change the 2846*a3141fd3SAndroid Build Coastguard Worker ** busy handler and thus clear any previously set busy handler. 2847*a3141fd3SAndroid Build Coastguard Worker ** 2848*a3141fd3SAndroid Build Coastguard Worker ** The busy callback should not take any actions which modify the 2849*a3141fd3SAndroid Build Coastguard Worker ** database connection that invoked the busy handler. In other words, 2850*a3141fd3SAndroid Build Coastguard Worker ** the busy handler is not reentrant. Any such actions 2851*a3141fd3SAndroid Build Coastguard Worker ** result in undefined behavior. 2852*a3141fd3SAndroid Build Coastguard Worker ** 2853*a3141fd3SAndroid Build Coastguard Worker ** A busy handler must not close the database connection 2854*a3141fd3SAndroid Build Coastguard Worker ** or [prepared statement] that invoked the busy handler. 2855*a3141fd3SAndroid Build Coastguard Worker */ 2856*a3141fd3SAndroid Build Coastguard Worker SQLITE_API int sqlite3_busy_handler(sqlite3*,int(*)(void*,int),void*); 2857*a3141fd3SAndroid Build Coastguard Worker 2858*a3141fd3SAndroid Build Coastguard Worker /* 2859*a3141fd3SAndroid Build Coastguard Worker ** CAPI3REF: Set A Busy Timeout 2860*a3141fd3SAndroid Build Coastguard Worker ** METHOD: sqlite3 2861*a3141fd3SAndroid Build Coastguard Worker ** 2862*a3141fd3SAndroid Build Coastguard Worker ** ^This routine sets a [sqlite3_busy_handler | busy handler] that sleeps 2863*a3141fd3SAndroid Build Coastguard Worker ** for a specified amount of time when a table is locked. ^The handler 2864*a3141fd3SAndroid Build Coastguard Worker ** will sleep multiple times until at least "ms" milliseconds of sleeping 2865*a3141fd3SAndroid Build Coastguard Worker ** have accumulated. ^After at least "ms" milliseconds of sleeping, 2866*a3141fd3SAndroid Build Coastguard Worker ** the handler returns 0 which causes [sqlite3_step()] to return 2867*a3141fd3SAndroid Build Coastguard Worker ** [SQLITE_BUSY]. 2868*a3141fd3SAndroid Build Coastguard Worker ** 2869*a3141fd3SAndroid Build Coastguard Worker ** ^Calling this routine with an argument less than or equal to zero 2870*a3141fd3SAndroid Build Coastguard Worker ** turns off all busy handlers. 2871*a3141fd3SAndroid Build Coastguard Worker ** 2872*a3141fd3SAndroid Build Coastguard Worker ** ^(There can only be a single busy handler for a particular 2873*a3141fd3SAndroid Build Coastguard Worker ** [database connection] at any given moment. If another busy handler 2874*a3141fd3SAndroid Build Coastguard Worker ** was defined (using [sqlite3_busy_handler()]) prior to calling 2875*a3141fd3SAndroid Build Coastguard Worker ** this routine, that other busy handler is cleared.)^ 2876*a3141fd3SAndroid Build Coastguard Worker ** 2877*a3141fd3SAndroid Build Coastguard Worker ** See also: [PRAGMA busy_timeout] 2878*a3141fd3SAndroid Build Coastguard Worker */ 2879*a3141fd3SAndroid Build Coastguard Worker SQLITE_API int sqlite3_busy_timeout(sqlite3*, int ms); 2880*a3141fd3SAndroid Build Coastguard Worker 2881*a3141fd3SAndroid Build Coastguard Worker /* 2882*a3141fd3SAndroid Build Coastguard Worker ** CAPI3REF: Convenience Routines For Running Queries 2883*a3141fd3SAndroid Build Coastguard Worker ** METHOD: sqlite3 2884*a3141fd3SAndroid Build Coastguard Worker ** 2885*a3141fd3SAndroid Build Coastguard Worker ** This is a legacy interface that is preserved for backwards compatibility. 2886*a3141fd3SAndroid Build Coastguard Worker ** Use of this interface is not recommended. 2887*a3141fd3SAndroid Build Coastguard Worker ** 2888*a3141fd3SAndroid Build Coastguard Worker ** Definition: A <b>result table</b> is memory data structure created by the 2889*a3141fd3SAndroid Build Coastguard Worker ** [sqlite3_get_table()] interface. A result table records the 2890*a3141fd3SAndroid Build Coastguard Worker ** complete query results from one or more queries. 2891*a3141fd3SAndroid Build Coastguard Worker ** 2892*a3141fd3SAndroid Build Coastguard Worker ** The table conceptually has a number of rows and columns. But 2893*a3141fd3SAndroid Build Coastguard Worker ** these numbers are not part of the result table itself. These 2894*a3141fd3SAndroid Build Coastguard Worker ** numbers are obtained separately. Let N be the number of rows 2895*a3141fd3SAndroid Build Coastguard Worker ** and M be the number of columns. 2896*a3141fd3SAndroid Build Coastguard Worker ** 2897*a3141fd3SAndroid Build Coastguard Worker ** A result table is an array of pointers to zero-terminated UTF-8 strings. 2898*a3141fd3SAndroid Build Coastguard Worker ** There are (N+1)*M elements in the array. The first M pointers point 2899*a3141fd3SAndroid Build Coastguard Worker ** to zero-terminated strings that contain the names of the columns. 2900*a3141fd3SAndroid Build Coastguard Worker ** The remaining entries all point to query results. NULL values result 2901*a3141fd3SAndroid Build Coastguard Worker ** in NULL pointers. All other values are in their UTF-8 zero-terminated 2902*a3141fd3SAndroid Build Coastguard Worker ** string representation as returned by [sqlite3_column_text()]. 2903*a3141fd3SAndroid Build Coastguard Worker ** 2904*a3141fd3SAndroid Build Coastguard Worker ** A result table might consist of one or more memory allocations. 2905*a3141fd3SAndroid Build Coastguard Worker ** It is not safe to pass a result table directly to [sqlite3_free()]. 2906*a3141fd3SAndroid Build Coastguard Worker ** A result table should be deallocated using [sqlite3_free_table()]. 2907*a3141fd3SAndroid Build Coastguard Worker ** 2908*a3141fd3SAndroid Build Coastguard Worker ** ^(As an example of the result table format, suppose a query result 2909*a3141fd3SAndroid Build Coastguard Worker ** is as follows: 2910*a3141fd3SAndroid Build Coastguard Worker ** 2911*a3141fd3SAndroid Build Coastguard Worker ** <blockquote><pre> 2912*a3141fd3SAndroid Build Coastguard Worker ** Name | Age 2913*a3141fd3SAndroid Build Coastguard Worker ** ----------------------- 2914*a3141fd3SAndroid Build Coastguard Worker ** Alice | 43 2915*a3141fd3SAndroid Build Coastguard Worker ** Bob | 28 2916*a3141fd3SAndroid Build Coastguard Worker ** Cindy | 21 2917*a3141fd3SAndroid Build Coastguard Worker ** </pre></blockquote> 2918*a3141fd3SAndroid Build Coastguard Worker ** 2919*a3141fd3SAndroid Build Coastguard Worker ** There are two columns (M==2) and three rows (N==3). Thus the 2920*a3141fd3SAndroid Build Coastguard Worker ** result table has 8 entries. Suppose the result table is stored 2921*a3141fd3SAndroid Build Coastguard Worker ** in an array named azResult. Then azResult holds this content: 2922*a3141fd3SAndroid Build Coastguard Worker ** 2923*a3141fd3SAndroid Build Coastguard Worker ** <blockquote><pre> 2924*a3141fd3SAndroid Build Coastguard Worker ** azResult[0] = "Name"; 2925*a3141fd3SAndroid Build Coastguard Worker ** azResult[1] = "Age"; 2926*a3141fd3SAndroid Build Coastguard Worker ** azResult[2] = "Alice"; 2927*a3141fd3SAndroid Build Coastguard Worker ** azResult[3] = "43"; 2928*a3141fd3SAndroid Build Coastguard Worker ** azResult[4] = "Bob"; 2929*a3141fd3SAndroid Build Coastguard Worker ** azResult[5] = "28"; 2930*a3141fd3SAndroid Build Coastguard Worker ** azResult[6] = "Cindy"; 2931*a3141fd3SAndroid Build Coastguard Worker ** azResult[7] = "21"; 2932*a3141fd3SAndroid Build Coastguard Worker ** </pre></blockquote>)^ 2933*a3141fd3SAndroid Build Coastguard Worker ** 2934*a3141fd3SAndroid Build Coastguard Worker ** ^The sqlite3_get_table() function evaluates one or more 2935*a3141fd3SAndroid Build Coastguard Worker ** semicolon-separated SQL statements in the zero-terminated UTF-8 2936*a3141fd3SAndroid Build Coastguard Worker ** string of its 2nd parameter and returns a result table to the 2937*a3141fd3SAndroid Build Coastguard Worker ** pointer given in its 3rd parameter. 2938*a3141fd3SAndroid Build Coastguard Worker ** 2939*a3141fd3SAndroid Build Coastguard Worker ** After the application has finished with the result from sqlite3_get_table(), 2940*a3141fd3SAndroid Build Coastguard Worker ** it must pass the result table pointer to sqlite3_free_table() in order to 2941*a3141fd3SAndroid Build Coastguard Worker ** release the memory that was malloced. Because of the way the 2942*a3141fd3SAndroid Build Coastguard Worker ** [sqlite3_malloc()] happens within sqlite3_get_table(), the calling 2943*a3141fd3SAndroid Build Coastguard Worker ** function must not try to call [sqlite3_free()] directly. Only 2944*a3141fd3SAndroid Build Coastguard Worker ** [sqlite3_free_table()] is able to release the memory properly and safely. 2945*a3141fd3SAndroid Build Coastguard Worker ** 2946*a3141fd3SAndroid Build Coastguard Worker ** The sqlite3_get_table() interface is implemented as a wrapper around 2947*a3141fd3SAndroid Build Coastguard Worker ** [sqlite3_exec()]. The sqlite3_get_table() routine does not have access 2948*a3141fd3SAndroid Build Coastguard Worker ** to any internal data structures of SQLite. It uses only the public 2949*a3141fd3SAndroid Build Coastguard Worker ** interface defined here. As a consequence, errors that occur in the 2950*a3141fd3SAndroid Build Coastguard Worker ** wrapper layer outside of the internal [sqlite3_exec()] call are not 2951*a3141fd3SAndroid Build Coastguard Worker ** reflected in subsequent calls to [sqlite3_errcode()] or 2952*a3141fd3SAndroid Build Coastguard Worker ** [sqlite3_errmsg()]. 2953*a3141fd3SAndroid Build Coastguard Worker */ 2954*a3141fd3SAndroid Build Coastguard Worker SQLITE_API int sqlite3_get_table( 2955*a3141fd3SAndroid Build Coastguard Worker sqlite3 *db, /* An open database */ 2956*a3141fd3SAndroid Build Coastguard Worker const char *zSql, /* SQL to be evaluated */ 2957*a3141fd3SAndroid Build Coastguard Worker char ***pazResult, /* Results of the query */ 2958*a3141fd3SAndroid Build Coastguard Worker int *pnRow, /* Number of result rows written here */ 2959*a3141fd3SAndroid Build Coastguard Worker int *pnColumn, /* Number of result columns written here */ 2960*a3141fd3SAndroid Build Coastguard Worker char **pzErrmsg /* Error msg written here */ 2961*a3141fd3SAndroid Build Coastguard Worker ); 2962*a3141fd3SAndroid Build Coastguard Worker SQLITE_API void sqlite3_free_table(char **result); 2963*a3141fd3SAndroid Build Coastguard Worker 2964*a3141fd3SAndroid Build Coastguard Worker /* 2965*a3141fd3SAndroid Build Coastguard Worker ** CAPI3REF: Formatted String Printing Functions 2966*a3141fd3SAndroid Build Coastguard Worker ** 2967*a3141fd3SAndroid Build Coastguard Worker ** These routines are work-alikes of the "printf()" family of functions 2968*a3141fd3SAndroid Build Coastguard Worker ** from the standard C library. 2969*a3141fd3SAndroid Build Coastguard Worker ** These routines understand most of the common formatting options from 2970*a3141fd3SAndroid Build Coastguard Worker ** the standard library printf() 2971*a3141fd3SAndroid Build Coastguard Worker ** plus some additional non-standard formats ([%q], [%Q], [%w], and [%z]). 2972*a3141fd3SAndroid Build Coastguard Worker ** See the [built-in printf()] documentation for details. 2973*a3141fd3SAndroid Build Coastguard Worker ** 2974*a3141fd3SAndroid Build Coastguard Worker ** ^The sqlite3_mprintf() and sqlite3_vmprintf() routines write their 2975*a3141fd3SAndroid Build Coastguard Worker ** results into memory obtained from [sqlite3_malloc64()]. 2976*a3141fd3SAndroid Build Coastguard Worker ** The strings returned by these two routines should be 2977*a3141fd3SAndroid Build Coastguard Worker ** released by [sqlite3_free()]. ^Both routines return a 2978*a3141fd3SAndroid Build Coastguard Worker ** NULL pointer if [sqlite3_malloc64()] is unable to allocate enough 2979*a3141fd3SAndroid Build Coastguard Worker ** memory to hold the resulting string. 2980*a3141fd3SAndroid Build Coastguard Worker ** 2981*a3141fd3SAndroid Build Coastguard Worker ** ^(The sqlite3_snprintf() routine is similar to "snprintf()" from 2982*a3141fd3SAndroid Build Coastguard Worker ** the standard C library. The result is written into the 2983*a3141fd3SAndroid Build Coastguard Worker ** buffer supplied as the second parameter whose size is given by 2984*a3141fd3SAndroid Build Coastguard Worker ** the first parameter. Note that the order of the 2985*a3141fd3SAndroid Build Coastguard Worker ** first two parameters is reversed from snprintf().)^ This is an 2986*a3141fd3SAndroid Build Coastguard Worker ** historical accident that cannot be fixed without breaking 2987*a3141fd3SAndroid Build Coastguard Worker ** backwards compatibility. ^(Note also that sqlite3_snprintf() 2988*a3141fd3SAndroid Build Coastguard Worker ** returns a pointer to its buffer instead of the number of 2989*a3141fd3SAndroid Build Coastguard Worker ** characters actually written into the buffer.)^ We admit that 2990*a3141fd3SAndroid Build Coastguard Worker ** the number of characters written would be a more useful return 2991*a3141fd3SAndroid Build Coastguard Worker ** value but we cannot change the implementation of sqlite3_snprintf() 2992*a3141fd3SAndroid Build Coastguard Worker ** now without breaking compatibility. 2993*a3141fd3SAndroid Build Coastguard Worker ** 2994*a3141fd3SAndroid Build Coastguard Worker ** ^As long as the buffer size is greater than zero, sqlite3_snprintf() 2995*a3141fd3SAndroid Build Coastguard Worker ** guarantees that the buffer is always zero-terminated. ^The first 2996*a3141fd3SAndroid Build Coastguard Worker ** parameter "n" is the total size of the buffer, including space for 2997*a3141fd3SAndroid Build Coastguard Worker ** the zero terminator. So the longest string that can be completely 2998*a3141fd3SAndroid Build Coastguard Worker ** written will be n-1 characters. 2999*a3141fd3SAndroid Build Coastguard Worker ** 3000*a3141fd3SAndroid Build Coastguard Worker ** ^The sqlite3_vsnprintf() routine is a varargs version of sqlite3_snprintf(). 3001*a3141fd3SAndroid Build Coastguard Worker ** 3002*a3141fd3SAndroid Build Coastguard Worker ** See also: [built-in printf()], [printf() SQL function] 3003*a3141fd3SAndroid Build Coastguard Worker */ 3004*a3141fd3SAndroid Build Coastguard Worker SQLITE_API char *sqlite3_mprintf(const char*,...); 3005*a3141fd3SAndroid Build Coastguard Worker SQLITE_API char *sqlite3_vmprintf(const char*, va_list); 3006*a3141fd3SAndroid Build Coastguard Worker SQLITE_API char *sqlite3_snprintf(int,char*,const char*, ...); 3007*a3141fd3SAndroid Build Coastguard Worker SQLITE_API char *sqlite3_vsnprintf(int,char*,const char*, va_list); 3008*a3141fd3SAndroid Build Coastguard Worker 3009*a3141fd3SAndroid Build Coastguard Worker /* 3010*a3141fd3SAndroid Build Coastguard Worker ** CAPI3REF: Memory Allocation Subsystem 3011*a3141fd3SAndroid Build Coastguard Worker ** 3012*a3141fd3SAndroid Build Coastguard Worker ** The SQLite core uses these three routines for all of its own 3013*a3141fd3SAndroid Build Coastguard Worker ** internal memory allocation needs. "Core" in the previous sentence 3014*a3141fd3SAndroid Build Coastguard Worker ** does not include operating-system specific [VFS] implementation. The 3015*a3141fd3SAndroid Build Coastguard Worker ** Windows VFS uses native malloc() and free() for some operations. 3016*a3141fd3SAndroid Build Coastguard Worker ** 3017*a3141fd3SAndroid Build Coastguard Worker ** ^The sqlite3_malloc() routine returns a pointer to a block 3018*a3141fd3SAndroid Build Coastguard Worker ** of memory at least N bytes in length, where N is the parameter. 3019*a3141fd3SAndroid Build Coastguard Worker ** ^If sqlite3_malloc() is unable to obtain sufficient free 3020*a3141fd3SAndroid Build Coastguard Worker ** memory, it returns a NULL pointer. ^If the parameter N to 3021*a3141fd3SAndroid Build Coastguard Worker ** sqlite3_malloc() is zero or negative then sqlite3_malloc() returns 3022*a3141fd3SAndroid Build Coastguard Worker ** a NULL pointer. 3023*a3141fd3SAndroid Build Coastguard Worker ** 3024*a3141fd3SAndroid Build Coastguard Worker ** ^The sqlite3_malloc64(N) routine works just like 3025*a3141fd3SAndroid Build Coastguard Worker ** sqlite3_malloc(N) except that N is an unsigned 64-bit integer instead 3026*a3141fd3SAndroid Build Coastguard Worker ** of a signed 32-bit integer. 3027*a3141fd3SAndroid Build Coastguard Worker ** 3028*a3141fd3SAndroid Build Coastguard Worker ** ^Calling sqlite3_free() with a pointer previously returned 3029*a3141fd3SAndroid Build Coastguard Worker ** by sqlite3_malloc() or sqlite3_realloc() releases that memory so 3030*a3141fd3SAndroid Build Coastguard Worker ** that it might be reused. ^The sqlite3_free() routine is 3031*a3141fd3SAndroid Build Coastguard Worker ** a no-op if is called with a NULL pointer. Passing a NULL pointer 3032*a3141fd3SAndroid Build Coastguard Worker ** to sqlite3_free() is harmless. After being freed, memory 3033*a3141fd3SAndroid Build Coastguard Worker ** should neither be read nor written. Even reading previously freed 3034*a3141fd3SAndroid Build Coastguard Worker ** memory might result in a segmentation fault or other severe error. 3035*a3141fd3SAndroid Build Coastguard Worker ** Memory corruption, a segmentation fault, or other severe error 3036*a3141fd3SAndroid Build Coastguard Worker ** might result if sqlite3_free() is called with a non-NULL pointer that 3037*a3141fd3SAndroid Build Coastguard Worker ** was not obtained from sqlite3_malloc() or sqlite3_realloc(). 3038*a3141fd3SAndroid Build Coastguard Worker ** 3039*a3141fd3SAndroid Build Coastguard Worker ** ^The sqlite3_realloc(X,N) interface attempts to resize a 3040*a3141fd3SAndroid Build Coastguard Worker ** prior memory allocation X to be at least N bytes. 3041*a3141fd3SAndroid Build Coastguard Worker ** ^If the X parameter to sqlite3_realloc(X,N) 3042*a3141fd3SAndroid Build Coastguard Worker ** is a NULL pointer then its behavior is identical to calling 3043*a3141fd3SAndroid Build Coastguard Worker ** sqlite3_malloc(N). 3044*a3141fd3SAndroid Build Coastguard Worker ** ^If the N parameter to sqlite3_realloc(X,N) is zero or 3045*a3141fd3SAndroid Build Coastguard Worker ** negative then the behavior is exactly the same as calling 3046*a3141fd3SAndroid Build Coastguard Worker ** sqlite3_free(X). 3047*a3141fd3SAndroid Build Coastguard Worker ** ^sqlite3_realloc(X,N) returns a pointer to a memory allocation 3048*a3141fd3SAndroid Build Coastguard Worker ** of at least N bytes in size or NULL if insufficient memory is available. 3049*a3141fd3SAndroid Build Coastguard Worker ** ^If M is the size of the prior allocation, then min(N,M) bytes 3050*a3141fd3SAndroid Build Coastguard Worker ** of the prior allocation are copied into the beginning of buffer returned 3051*a3141fd3SAndroid Build Coastguard Worker ** by sqlite3_realloc(X,N) and the prior allocation is freed. 3052*a3141fd3SAndroid Build Coastguard Worker ** ^If sqlite3_realloc(X,N) returns NULL and N is positive, then the 3053*a3141fd3SAndroid Build Coastguard Worker ** prior allocation is not freed. 3054*a3141fd3SAndroid Build Coastguard Worker ** 3055*a3141fd3SAndroid Build Coastguard Worker ** ^The sqlite3_realloc64(X,N) interfaces works the same as 3056*a3141fd3SAndroid Build Coastguard Worker ** sqlite3_realloc(X,N) except that N is a 64-bit unsigned integer instead 3057*a3141fd3SAndroid Build Coastguard Worker ** of a 32-bit signed integer. 3058*a3141fd3SAndroid Build Coastguard Worker ** 3059*a3141fd3SAndroid Build Coastguard Worker ** ^If X is a memory allocation previously obtained from sqlite3_malloc(), 3060*a3141fd3SAndroid Build Coastguard Worker ** sqlite3_malloc64(), sqlite3_realloc(), or sqlite3_realloc64(), then 3061*a3141fd3SAndroid Build Coastguard Worker ** sqlite3_msize(X) returns the size of that memory allocation in bytes. 3062*a3141fd3SAndroid Build Coastguard Worker ** ^The value returned by sqlite3_msize(X) might be larger than the number 3063*a3141fd3SAndroid Build Coastguard Worker ** of bytes requested when X was allocated. ^If X is a NULL pointer then 3064*a3141fd3SAndroid Build Coastguard Worker ** sqlite3_msize(X) returns zero. If X points to something that is not 3065*a3141fd3SAndroid Build Coastguard Worker ** the beginning of memory allocation, or if it points to a formerly 3066*a3141fd3SAndroid Build Coastguard Worker ** valid memory allocation that has now been freed, then the behavior 3067*a3141fd3SAndroid Build Coastguard Worker ** of sqlite3_msize(X) is undefined and possibly harmful. 3068*a3141fd3SAndroid Build Coastguard Worker ** 3069*a3141fd3SAndroid Build Coastguard Worker ** ^The memory returned by sqlite3_malloc(), sqlite3_realloc(), 3070*a3141fd3SAndroid Build Coastguard Worker ** sqlite3_malloc64(), and sqlite3_realloc64() 3071*a3141fd3SAndroid Build Coastguard Worker ** is always aligned to at least an 8 byte boundary, or to a 3072*a3141fd3SAndroid Build Coastguard Worker ** 4 byte boundary if the [SQLITE_4_BYTE_ALIGNED_MALLOC] compile-time 3073*a3141fd3SAndroid Build Coastguard Worker ** option is used. 3074*a3141fd3SAndroid Build Coastguard Worker ** 3075*a3141fd3SAndroid Build Coastguard Worker ** The pointer arguments to [sqlite3_free()] and [sqlite3_realloc()] 3076*a3141fd3SAndroid Build Coastguard Worker ** must be either NULL or else pointers obtained from a prior 3077*a3141fd3SAndroid Build Coastguard Worker ** invocation of [sqlite3_malloc()] or [sqlite3_realloc()] that have 3078*a3141fd3SAndroid Build Coastguard Worker ** not yet been released. 3079*a3141fd3SAndroid Build Coastguard Worker ** 3080*a3141fd3SAndroid Build Coastguard Worker ** The application must not read or write any part of 3081*a3141fd3SAndroid Build Coastguard Worker ** a block of memory after it has been released using 3082*a3141fd3SAndroid Build Coastguard Worker ** [sqlite3_free()] or [sqlite3_realloc()]. 3083*a3141fd3SAndroid Build Coastguard Worker */ 3084*a3141fd3SAndroid Build Coastguard Worker SQLITE_API void *sqlite3_malloc(int); 3085*a3141fd3SAndroid Build Coastguard Worker SQLITE_API void *sqlite3_malloc64(sqlite3_uint64); 3086*a3141fd3SAndroid Build Coastguard Worker SQLITE_API void *sqlite3_realloc(void*, int); 3087*a3141fd3SAndroid Build Coastguard Worker SQLITE_API void *sqlite3_realloc64(void*, sqlite3_uint64); 3088*a3141fd3SAndroid Build Coastguard Worker SQLITE_API void sqlite3_free(void*); 3089*a3141fd3SAndroid Build Coastguard Worker SQLITE_API sqlite3_uint64 sqlite3_msize(void*); 3090*a3141fd3SAndroid Build Coastguard Worker 3091*a3141fd3SAndroid Build Coastguard Worker /* 3092*a3141fd3SAndroid Build Coastguard Worker ** CAPI3REF: Memory Allocator Statistics 3093*a3141fd3SAndroid Build Coastguard Worker ** 3094*a3141fd3SAndroid Build Coastguard Worker ** SQLite provides these two interfaces for reporting on the status 3095*a3141fd3SAndroid Build Coastguard Worker ** of the [sqlite3_malloc()], [sqlite3_free()], and [sqlite3_realloc()] 3096*a3141fd3SAndroid Build Coastguard Worker ** routines, which form the built-in memory allocation subsystem. 3097*a3141fd3SAndroid Build Coastguard Worker ** 3098*a3141fd3SAndroid Build Coastguard Worker ** ^The [sqlite3_memory_used()] routine returns the number of bytes 3099*a3141fd3SAndroid Build Coastguard Worker ** of memory currently outstanding (malloced but not freed). 3100*a3141fd3SAndroid Build Coastguard Worker ** ^The [sqlite3_memory_highwater()] routine returns the maximum 3101*a3141fd3SAndroid Build Coastguard Worker ** value of [sqlite3_memory_used()] since the high-water mark 3102*a3141fd3SAndroid Build Coastguard Worker ** was last reset. ^The values returned by [sqlite3_memory_used()] and 3103*a3141fd3SAndroid Build Coastguard Worker ** [sqlite3_memory_highwater()] include any overhead 3104*a3141fd3SAndroid Build Coastguard Worker ** added by SQLite in its implementation of [sqlite3_malloc()], 3105*a3141fd3SAndroid Build Coastguard Worker ** but not overhead added by the any underlying system library 3106*a3141fd3SAndroid Build Coastguard Worker ** routines that [sqlite3_malloc()] may call. 3107*a3141fd3SAndroid Build Coastguard Worker ** 3108*a3141fd3SAndroid Build Coastguard Worker ** ^The memory high-water mark is reset to the current value of 3109*a3141fd3SAndroid Build Coastguard Worker ** [sqlite3_memory_used()] if and only if the parameter to 3110*a3141fd3SAndroid Build Coastguard Worker ** [sqlite3_memory_highwater()] is true. ^The value returned 3111*a3141fd3SAndroid Build Coastguard Worker ** by [sqlite3_memory_highwater(1)] is the high-water mark 3112*a3141fd3SAndroid Build Coastguard Worker ** prior to the reset. 3113*a3141fd3SAndroid Build Coastguard Worker */ 3114*a3141fd3SAndroid Build Coastguard Worker SQLITE_API sqlite3_int64 sqlite3_memory_used(void); 3115*a3141fd3SAndroid Build Coastguard Worker SQLITE_API sqlite3_int64 sqlite3_memory_highwater(int resetFlag); 3116*a3141fd3SAndroid Build Coastguard Worker 3117*a3141fd3SAndroid Build Coastguard Worker /* 3118*a3141fd3SAndroid Build Coastguard Worker ** CAPI3REF: Pseudo-Random Number Generator 3119*a3141fd3SAndroid Build Coastguard Worker ** 3120*a3141fd3SAndroid Build Coastguard Worker ** SQLite contains a high-quality pseudo-random number generator (PRNG) used to 3121*a3141fd3SAndroid Build Coastguard Worker ** select random [ROWID | ROWIDs] when inserting new records into a table that 3122*a3141fd3SAndroid Build Coastguard Worker ** already uses the largest possible [ROWID]. The PRNG is also used for 3123*a3141fd3SAndroid Build Coastguard Worker ** the built-in random() and randomblob() SQL functions. This interface allows 3124*a3141fd3SAndroid Build Coastguard Worker ** applications to access the same PRNG for other purposes. 3125*a3141fd3SAndroid Build Coastguard Worker ** 3126*a3141fd3SAndroid Build Coastguard Worker ** ^A call to this routine stores N bytes of randomness into buffer P. 3127*a3141fd3SAndroid Build Coastguard Worker ** ^The P parameter can be a NULL pointer. 3128*a3141fd3SAndroid Build Coastguard Worker ** 3129*a3141fd3SAndroid Build Coastguard Worker ** ^If this routine has not been previously called or if the previous 3130*a3141fd3SAndroid Build Coastguard Worker ** call had N less than one or a NULL pointer for P, then the PRNG is 3131*a3141fd3SAndroid Build Coastguard Worker ** seeded using randomness obtained from the xRandomness method of 3132*a3141fd3SAndroid Build Coastguard Worker ** the default [sqlite3_vfs] object. 3133*a3141fd3SAndroid Build Coastguard Worker ** ^If the previous call to this routine had an N of 1 or more and a 3134*a3141fd3SAndroid Build Coastguard Worker ** non-NULL P then the pseudo-randomness is generated 3135*a3141fd3SAndroid Build Coastguard Worker ** internally and without recourse to the [sqlite3_vfs] xRandomness 3136*a3141fd3SAndroid Build Coastguard Worker ** method. 3137*a3141fd3SAndroid Build Coastguard Worker */ 3138*a3141fd3SAndroid Build Coastguard Worker SQLITE_API void sqlite3_randomness(int N, void *P); 3139*a3141fd3SAndroid Build Coastguard Worker 3140*a3141fd3SAndroid Build Coastguard Worker /* 3141*a3141fd3SAndroid Build Coastguard Worker ** CAPI3REF: Compile-Time Authorization Callbacks 3142*a3141fd3SAndroid Build Coastguard Worker ** METHOD: sqlite3 3143*a3141fd3SAndroid Build Coastguard Worker ** KEYWORDS: {authorizer callback} 3144*a3141fd3SAndroid Build Coastguard Worker ** 3145*a3141fd3SAndroid Build Coastguard Worker ** ^This routine registers an authorizer callback with a particular 3146*a3141fd3SAndroid Build Coastguard Worker ** [database connection], supplied in the first argument. 3147*a3141fd3SAndroid Build Coastguard Worker ** ^The authorizer callback is invoked as SQL statements are being compiled 3148*a3141fd3SAndroid Build Coastguard Worker ** by [sqlite3_prepare()] or its variants [sqlite3_prepare_v2()], 3149*a3141fd3SAndroid Build Coastguard Worker ** [sqlite3_prepare_v3()], [sqlite3_prepare16()], [sqlite3_prepare16_v2()], 3150*a3141fd3SAndroid Build Coastguard Worker ** and [sqlite3_prepare16_v3()]. ^At various 3151*a3141fd3SAndroid Build Coastguard Worker ** points during the compilation process, as logic is being created 3152*a3141fd3SAndroid Build Coastguard Worker ** to perform various actions, the authorizer callback is invoked to 3153*a3141fd3SAndroid Build Coastguard Worker ** see if those actions are allowed. ^The authorizer callback should 3154*a3141fd3SAndroid Build Coastguard Worker ** return [SQLITE_OK] to allow the action, [SQLITE_IGNORE] to disallow the 3155*a3141fd3SAndroid Build Coastguard Worker ** specific action but allow the SQL statement to continue to be 3156*a3141fd3SAndroid Build Coastguard Worker ** compiled, or [SQLITE_DENY] to cause the entire SQL statement to be 3157*a3141fd3SAndroid Build Coastguard Worker ** rejected with an error. ^If the authorizer callback returns 3158*a3141fd3SAndroid Build Coastguard Worker ** any value other than [SQLITE_IGNORE], [SQLITE_OK], or [SQLITE_DENY] 3159*a3141fd3SAndroid Build Coastguard Worker ** then the [sqlite3_prepare_v2()] or equivalent call that triggered 3160*a3141fd3SAndroid Build Coastguard Worker ** the authorizer will fail with an error message. 3161*a3141fd3SAndroid Build Coastguard Worker ** 3162*a3141fd3SAndroid Build Coastguard Worker ** When the callback returns [SQLITE_OK], that means the operation 3163*a3141fd3SAndroid Build Coastguard Worker ** requested is ok. ^When the callback returns [SQLITE_DENY], the 3164*a3141fd3SAndroid Build Coastguard Worker ** [sqlite3_prepare_v2()] or equivalent call that triggered the 3165*a3141fd3SAndroid Build Coastguard Worker ** authorizer will fail with an error message explaining that 3166*a3141fd3SAndroid Build Coastguard Worker ** access is denied. 3167*a3141fd3SAndroid Build Coastguard Worker ** 3168*a3141fd3SAndroid Build Coastguard Worker ** ^The first parameter to the authorizer callback is a copy of the third 3169*a3141fd3SAndroid Build Coastguard Worker ** parameter to the sqlite3_set_authorizer() interface. ^The second parameter 3170*a3141fd3SAndroid Build Coastguard Worker ** to the callback is an integer [SQLITE_COPY | action code] that specifies 3171*a3141fd3SAndroid Build Coastguard Worker ** the particular action to be authorized. ^The third through sixth parameters 3172*a3141fd3SAndroid Build Coastguard Worker ** to the callback are either NULL pointers or zero-terminated strings 3173*a3141fd3SAndroid Build Coastguard Worker ** that contain additional details about the action to be authorized. 3174*a3141fd3SAndroid Build Coastguard Worker ** Applications must always be prepared to encounter a NULL pointer in any 3175*a3141fd3SAndroid Build Coastguard Worker ** of the third through the sixth parameters of the authorization callback. 3176*a3141fd3SAndroid Build Coastguard Worker ** 3177*a3141fd3SAndroid Build Coastguard Worker ** ^If the action code is [SQLITE_READ] 3178*a3141fd3SAndroid Build Coastguard Worker ** and the callback returns [SQLITE_IGNORE] then the 3179*a3141fd3SAndroid Build Coastguard Worker ** [prepared statement] statement is constructed to substitute 3180*a3141fd3SAndroid Build Coastguard Worker ** a NULL value in place of the table column that would have 3181*a3141fd3SAndroid Build Coastguard Worker ** been read if [SQLITE_OK] had been returned. The [SQLITE_IGNORE] 3182*a3141fd3SAndroid Build Coastguard Worker ** return can be used to deny an untrusted user access to individual 3183*a3141fd3SAndroid Build Coastguard Worker ** columns of a table. 3184*a3141fd3SAndroid Build Coastguard Worker ** ^When a table is referenced by a [SELECT] but no column values are 3185*a3141fd3SAndroid Build Coastguard Worker ** extracted from that table (for example in a query like 3186*a3141fd3SAndroid Build Coastguard Worker ** "SELECT count(*) FROM tab") then the [SQLITE_READ] authorizer callback 3187*a3141fd3SAndroid Build Coastguard Worker ** is invoked once for that table with a column name that is an empty string. 3188*a3141fd3SAndroid Build Coastguard Worker ** ^If the action code is [SQLITE_DELETE] and the callback returns 3189*a3141fd3SAndroid Build Coastguard Worker ** [SQLITE_IGNORE] then the [DELETE] operation proceeds but the 3190*a3141fd3SAndroid Build Coastguard Worker ** [truncate optimization] is disabled and all rows are deleted individually. 3191*a3141fd3SAndroid Build Coastguard Worker ** 3192*a3141fd3SAndroid Build Coastguard Worker ** An authorizer is used when [sqlite3_prepare | preparing] 3193*a3141fd3SAndroid Build Coastguard Worker ** SQL statements from an untrusted source, to ensure that the SQL statements 3194*a3141fd3SAndroid Build Coastguard Worker ** do not try to access data they are not allowed to see, or that they do not 3195*a3141fd3SAndroid Build Coastguard Worker ** try to execute malicious statements that damage the database. For 3196*a3141fd3SAndroid Build Coastguard Worker ** example, an application may allow a user to enter arbitrary 3197*a3141fd3SAndroid Build Coastguard Worker ** SQL queries for evaluation by a database. But the application does 3198*a3141fd3SAndroid Build Coastguard Worker ** not want the user to be able to make arbitrary changes to the 3199*a3141fd3SAndroid Build Coastguard Worker ** database. An authorizer could then be put in place while the 3200*a3141fd3SAndroid Build Coastguard Worker ** user-entered SQL is being [sqlite3_prepare | prepared] that 3201*a3141fd3SAndroid Build Coastguard Worker ** disallows everything except [SELECT] statements. 3202*a3141fd3SAndroid Build Coastguard Worker ** 3203*a3141fd3SAndroid Build Coastguard Worker ** Applications that need to process SQL from untrusted sources 3204*a3141fd3SAndroid Build Coastguard Worker ** might also consider lowering resource limits using [sqlite3_limit()] 3205*a3141fd3SAndroid Build Coastguard Worker ** and limiting database size using the [max_page_count] [PRAGMA] 3206*a3141fd3SAndroid Build Coastguard Worker ** in addition to using an authorizer. 3207*a3141fd3SAndroid Build Coastguard Worker ** 3208*a3141fd3SAndroid Build Coastguard Worker ** ^(Only a single authorizer can be in place on a database connection 3209*a3141fd3SAndroid Build Coastguard Worker ** at a time. Each call to sqlite3_set_authorizer overrides the 3210*a3141fd3SAndroid Build Coastguard Worker ** previous call.)^ ^Disable the authorizer by installing a NULL callback. 3211*a3141fd3SAndroid Build Coastguard Worker ** The authorizer is disabled by default. 3212*a3141fd3SAndroid Build Coastguard Worker ** 3213*a3141fd3SAndroid Build Coastguard Worker ** The authorizer callback must not do anything that will modify 3214*a3141fd3SAndroid Build Coastguard Worker ** the database connection that invoked the authorizer callback. 3215*a3141fd3SAndroid Build Coastguard Worker ** Note that [sqlite3_prepare_v2()] and [sqlite3_step()] both modify their 3216*a3141fd3SAndroid Build Coastguard Worker ** database connections for the meaning of "modify" in this paragraph. 3217*a3141fd3SAndroid Build Coastguard Worker ** 3218*a3141fd3SAndroid Build Coastguard Worker ** ^When [sqlite3_prepare_v2()] is used to prepare a statement, the 3219*a3141fd3SAndroid Build Coastguard Worker ** statement might be re-prepared during [sqlite3_step()] due to a 3220*a3141fd3SAndroid Build Coastguard Worker ** schema change. Hence, the application should ensure that the 3221*a3141fd3SAndroid Build Coastguard Worker ** correct authorizer callback remains in place during the [sqlite3_step()]. 3222*a3141fd3SAndroid Build Coastguard Worker ** 3223*a3141fd3SAndroid Build Coastguard Worker ** ^Note that the authorizer callback is invoked only during 3224*a3141fd3SAndroid Build Coastguard Worker ** [sqlite3_prepare()] or its variants. Authorization is not 3225*a3141fd3SAndroid Build Coastguard Worker ** performed during statement evaluation in [sqlite3_step()], unless 3226*a3141fd3SAndroid Build Coastguard Worker ** as stated in the previous paragraph, sqlite3_step() invokes 3227*a3141fd3SAndroid Build Coastguard Worker ** sqlite3_prepare_v2() to reprepare a statement after a schema change. 3228*a3141fd3SAndroid Build Coastguard Worker */ 3229*a3141fd3SAndroid Build Coastguard Worker SQLITE_API int sqlite3_set_authorizer( 3230*a3141fd3SAndroid Build Coastguard Worker sqlite3*, 3231*a3141fd3SAndroid Build Coastguard Worker int (*xAuth)(void*,int,const char*,const char*,const char*,const char*), 3232*a3141fd3SAndroid Build Coastguard Worker void *pUserData 3233*a3141fd3SAndroid Build Coastguard Worker ); 3234*a3141fd3SAndroid Build Coastguard Worker 3235*a3141fd3SAndroid Build Coastguard Worker /* 3236*a3141fd3SAndroid Build Coastguard Worker ** CAPI3REF: Authorizer Return Codes 3237*a3141fd3SAndroid Build Coastguard Worker ** 3238*a3141fd3SAndroid Build Coastguard Worker ** The [sqlite3_set_authorizer | authorizer callback function] must 3239*a3141fd3SAndroid Build Coastguard Worker ** return either [SQLITE_OK] or one of these two constants in order 3240*a3141fd3SAndroid Build Coastguard Worker ** to signal SQLite whether or not the action is permitted. See the 3241*a3141fd3SAndroid Build Coastguard Worker ** [sqlite3_set_authorizer | authorizer documentation] for additional 3242*a3141fd3SAndroid Build Coastguard Worker ** information. 3243*a3141fd3SAndroid Build Coastguard Worker ** 3244*a3141fd3SAndroid Build Coastguard Worker ** Note that SQLITE_IGNORE is also used as a [conflict resolution mode] 3245*a3141fd3SAndroid Build Coastguard Worker ** returned from the [sqlite3_vtab_on_conflict()] interface. 3246*a3141fd3SAndroid Build Coastguard Worker */ 3247*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_DENY 1 /* Abort the SQL statement with an error */ 3248*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_IGNORE 2 /* Don't allow access, but don't generate an error */ 3249*a3141fd3SAndroid Build Coastguard Worker 3250*a3141fd3SAndroid Build Coastguard Worker /* 3251*a3141fd3SAndroid Build Coastguard Worker ** CAPI3REF: Authorizer Action Codes 3252*a3141fd3SAndroid Build Coastguard Worker ** 3253*a3141fd3SAndroid Build Coastguard Worker ** The [sqlite3_set_authorizer()] interface registers a callback function 3254*a3141fd3SAndroid Build Coastguard Worker ** that is invoked to authorize certain SQL statement actions. The 3255*a3141fd3SAndroid Build Coastguard Worker ** second parameter to the callback is an integer code that specifies 3256*a3141fd3SAndroid Build Coastguard Worker ** what action is being authorized. These are the integer action codes that 3257*a3141fd3SAndroid Build Coastguard Worker ** the authorizer callback may be passed. 3258*a3141fd3SAndroid Build Coastguard Worker ** 3259*a3141fd3SAndroid Build Coastguard Worker ** These action code values signify what kind of operation is to be 3260*a3141fd3SAndroid Build Coastguard Worker ** authorized. The 3rd and 4th parameters to the authorization 3261*a3141fd3SAndroid Build Coastguard Worker ** callback function will be parameters or NULL depending on which of these 3262*a3141fd3SAndroid Build Coastguard Worker ** codes is used as the second parameter. ^(The 5th parameter to the 3263*a3141fd3SAndroid Build Coastguard Worker ** authorizer callback is the name of the database ("main", "temp", 3264*a3141fd3SAndroid Build Coastguard Worker ** etc.) if applicable.)^ ^The 6th parameter to the authorizer callback 3265*a3141fd3SAndroid Build Coastguard Worker ** is the name of the inner-most trigger or view that is responsible for 3266*a3141fd3SAndroid Build Coastguard Worker ** the access attempt or NULL if this access attempt is directly from 3267*a3141fd3SAndroid Build Coastguard Worker ** top-level SQL code. 3268*a3141fd3SAndroid Build Coastguard Worker */ 3269*a3141fd3SAndroid Build Coastguard Worker /******************************************* 3rd ************ 4th ***********/ 3270*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_CREATE_INDEX 1 /* Index Name Table Name */ 3271*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_CREATE_TABLE 2 /* Table Name NULL */ 3272*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_CREATE_TEMP_INDEX 3 /* Index Name Table Name */ 3273*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_CREATE_TEMP_TABLE 4 /* Table Name NULL */ 3274*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_CREATE_TEMP_TRIGGER 5 /* Trigger Name Table Name */ 3275*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_CREATE_TEMP_VIEW 6 /* View Name NULL */ 3276*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_CREATE_TRIGGER 7 /* Trigger Name Table Name */ 3277*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_CREATE_VIEW 8 /* View Name NULL */ 3278*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_DELETE 9 /* Table Name NULL */ 3279*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_DROP_INDEX 10 /* Index Name Table Name */ 3280*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_DROP_TABLE 11 /* Table Name NULL */ 3281*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_DROP_TEMP_INDEX 12 /* Index Name Table Name */ 3282*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_DROP_TEMP_TABLE 13 /* Table Name NULL */ 3283*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_DROP_TEMP_TRIGGER 14 /* Trigger Name Table Name */ 3284*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_DROP_TEMP_VIEW 15 /* View Name NULL */ 3285*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_DROP_TRIGGER 16 /* Trigger Name Table Name */ 3286*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_DROP_VIEW 17 /* View Name NULL */ 3287*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_INSERT 18 /* Table Name NULL */ 3288*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_PRAGMA 19 /* Pragma Name 1st arg or NULL */ 3289*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_READ 20 /* Table Name Column Name */ 3290*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_SELECT 21 /* NULL NULL */ 3291*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_TRANSACTION 22 /* Operation NULL */ 3292*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_UPDATE 23 /* Table Name Column Name */ 3293*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_ATTACH 24 /* Filename NULL */ 3294*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_DETACH 25 /* Database Name NULL */ 3295*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_ALTER_TABLE 26 /* Database Name Table Name */ 3296*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_REINDEX 27 /* Index Name NULL */ 3297*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_ANALYZE 28 /* Table Name NULL */ 3298*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_CREATE_VTABLE 29 /* Table Name Module Name */ 3299*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_DROP_VTABLE 30 /* Table Name Module Name */ 3300*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_FUNCTION 31 /* NULL Function Name */ 3301*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_SAVEPOINT 32 /* Operation Savepoint Name */ 3302*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_COPY 0 /* No longer used */ 3303*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_RECURSIVE 33 /* NULL NULL */ 3304*a3141fd3SAndroid Build Coastguard Worker 3305*a3141fd3SAndroid Build Coastguard Worker /* 3306*a3141fd3SAndroid Build Coastguard Worker ** CAPI3REF: Tracing And Profiling Functions 3307*a3141fd3SAndroid Build Coastguard Worker ** METHOD: sqlite3 3308*a3141fd3SAndroid Build Coastguard Worker ** 3309*a3141fd3SAndroid Build Coastguard Worker ** These routines are deprecated. Use the [sqlite3_trace_v2()] interface 3310*a3141fd3SAndroid Build Coastguard Worker ** instead of the routines described here. 3311*a3141fd3SAndroid Build Coastguard Worker ** 3312*a3141fd3SAndroid Build Coastguard Worker ** These routines register callback functions that can be used for 3313*a3141fd3SAndroid Build Coastguard Worker ** tracing and profiling the execution of SQL statements. 3314*a3141fd3SAndroid Build Coastguard Worker ** 3315*a3141fd3SAndroid Build Coastguard Worker ** ^The callback function registered by sqlite3_trace() is invoked at 3316*a3141fd3SAndroid Build Coastguard Worker ** various times when an SQL statement is being run by [sqlite3_step()]. 3317*a3141fd3SAndroid Build Coastguard Worker ** ^The sqlite3_trace() callback is invoked with a UTF-8 rendering of the 3318*a3141fd3SAndroid Build Coastguard Worker ** SQL statement text as the statement first begins executing. 3319*a3141fd3SAndroid Build Coastguard Worker ** ^(Additional sqlite3_trace() callbacks might occur 3320*a3141fd3SAndroid Build Coastguard Worker ** as each triggered subprogram is entered. The callbacks for triggers 3321*a3141fd3SAndroid Build Coastguard Worker ** contain a UTF-8 SQL comment that identifies the trigger.)^ 3322*a3141fd3SAndroid Build Coastguard Worker ** 3323*a3141fd3SAndroid Build Coastguard Worker ** The [SQLITE_TRACE_SIZE_LIMIT] compile-time option can be used to limit 3324*a3141fd3SAndroid Build Coastguard Worker ** the length of [bound parameter] expansion in the output of sqlite3_trace(). 3325*a3141fd3SAndroid Build Coastguard Worker ** 3326*a3141fd3SAndroid Build Coastguard Worker ** ^The callback function registered by sqlite3_profile() is invoked 3327*a3141fd3SAndroid Build Coastguard Worker ** as each SQL statement finishes. ^The profile callback contains 3328*a3141fd3SAndroid Build Coastguard Worker ** the original statement text and an estimate of wall-clock time 3329*a3141fd3SAndroid Build Coastguard Worker ** of how long that statement took to run. ^The profile callback 3330*a3141fd3SAndroid Build Coastguard Worker ** time is in units of nanoseconds, however the current implementation 3331*a3141fd3SAndroid Build Coastguard Worker ** is only capable of millisecond resolution so the six least significant 3332*a3141fd3SAndroid Build Coastguard Worker ** digits in the time are meaningless. Future versions of SQLite 3333*a3141fd3SAndroid Build Coastguard Worker ** might provide greater resolution on the profiler callback. Invoking 3334*a3141fd3SAndroid Build Coastguard Worker ** either [sqlite3_trace()] or [sqlite3_trace_v2()] will cancel the 3335*a3141fd3SAndroid Build Coastguard Worker ** profile callback. 3336*a3141fd3SAndroid Build Coastguard Worker */ 3337*a3141fd3SAndroid Build Coastguard Worker SQLITE_API SQLITE_DEPRECATED void *sqlite3_trace(sqlite3*, 3338*a3141fd3SAndroid Build Coastguard Worker void(*xTrace)(void*,const char*), void*); 3339*a3141fd3SAndroid Build Coastguard Worker SQLITE_API SQLITE_DEPRECATED void *sqlite3_profile(sqlite3*, 3340*a3141fd3SAndroid Build Coastguard Worker void(*xProfile)(void*,const char*,sqlite3_uint64), void*); 3341*a3141fd3SAndroid Build Coastguard Worker 3342*a3141fd3SAndroid Build Coastguard Worker /* 3343*a3141fd3SAndroid Build Coastguard Worker ** CAPI3REF: SQL Trace Event Codes 3344*a3141fd3SAndroid Build Coastguard Worker ** KEYWORDS: SQLITE_TRACE 3345*a3141fd3SAndroid Build Coastguard Worker ** 3346*a3141fd3SAndroid Build Coastguard Worker ** These constants identify classes of events that can be monitored 3347*a3141fd3SAndroid Build Coastguard Worker ** using the [sqlite3_trace_v2()] tracing logic. The M argument 3348*a3141fd3SAndroid Build Coastguard Worker ** to [sqlite3_trace_v2(D,M,X,P)] is an OR-ed combination of one or more of 3349*a3141fd3SAndroid Build Coastguard Worker ** the following constants. ^The first argument to the trace callback 3350*a3141fd3SAndroid Build Coastguard Worker ** is one of the following constants. 3351*a3141fd3SAndroid Build Coastguard Worker ** 3352*a3141fd3SAndroid Build Coastguard Worker ** New tracing constants may be added in future releases. 3353*a3141fd3SAndroid Build Coastguard Worker ** 3354*a3141fd3SAndroid Build Coastguard Worker ** ^A trace callback has four arguments: xCallback(T,C,P,X). 3355*a3141fd3SAndroid Build Coastguard Worker ** ^The T argument is one of the integer type codes above. 3356*a3141fd3SAndroid Build Coastguard Worker ** ^The C argument is a copy of the context pointer passed in as the 3357*a3141fd3SAndroid Build Coastguard Worker ** fourth argument to [sqlite3_trace_v2()]. 3358*a3141fd3SAndroid Build Coastguard Worker ** The P and X arguments are pointers whose meanings depend on T. 3359*a3141fd3SAndroid Build Coastguard Worker ** 3360*a3141fd3SAndroid Build Coastguard Worker ** <dl> 3361*a3141fd3SAndroid Build Coastguard Worker ** [[SQLITE_TRACE_STMT]] <dt>SQLITE_TRACE_STMT</dt> 3362*a3141fd3SAndroid Build Coastguard Worker ** <dd>^An SQLITE_TRACE_STMT callback is invoked when a prepared statement 3363*a3141fd3SAndroid Build Coastguard Worker ** first begins running and possibly at other times during the 3364*a3141fd3SAndroid Build Coastguard Worker ** execution of the prepared statement, such as at the start of each 3365*a3141fd3SAndroid Build Coastguard Worker ** trigger subprogram. ^The P argument is a pointer to the 3366*a3141fd3SAndroid Build Coastguard Worker ** [prepared statement]. ^The X argument is a pointer to a string which 3367*a3141fd3SAndroid Build Coastguard Worker ** is the unexpanded SQL text of the prepared statement or an SQL comment 3368*a3141fd3SAndroid Build Coastguard Worker ** that indicates the invocation of a trigger. ^The callback can compute 3369*a3141fd3SAndroid Build Coastguard Worker ** the same text that would have been returned by the legacy [sqlite3_trace()] 3370*a3141fd3SAndroid Build Coastguard Worker ** interface by using the X argument when X begins with "--" and invoking 3371*a3141fd3SAndroid Build Coastguard Worker ** [sqlite3_expanded_sql(P)] otherwise. 3372*a3141fd3SAndroid Build Coastguard Worker ** 3373*a3141fd3SAndroid Build Coastguard Worker ** [[SQLITE_TRACE_PROFILE]] <dt>SQLITE_TRACE_PROFILE</dt> 3374*a3141fd3SAndroid Build Coastguard Worker ** <dd>^An SQLITE_TRACE_PROFILE callback provides approximately the same 3375*a3141fd3SAndroid Build Coastguard Worker ** information as is provided by the [sqlite3_profile()] callback. 3376*a3141fd3SAndroid Build Coastguard Worker ** ^The P argument is a pointer to the [prepared statement] and the 3377*a3141fd3SAndroid Build Coastguard Worker ** X argument points to a 64-bit integer which is approximately 3378*a3141fd3SAndroid Build Coastguard Worker ** the number of nanoseconds that the prepared statement took to run. 3379*a3141fd3SAndroid Build Coastguard Worker ** ^The SQLITE_TRACE_PROFILE callback is invoked when the statement finishes. 3380*a3141fd3SAndroid Build Coastguard Worker ** 3381*a3141fd3SAndroid Build Coastguard Worker ** [[SQLITE_TRACE_ROW]] <dt>SQLITE_TRACE_ROW</dt> 3382*a3141fd3SAndroid Build Coastguard Worker ** <dd>^An SQLITE_TRACE_ROW callback is invoked whenever a prepared 3383*a3141fd3SAndroid Build Coastguard Worker ** statement generates a single row of result. 3384*a3141fd3SAndroid Build Coastguard Worker ** ^The P argument is a pointer to the [prepared statement] and the 3385*a3141fd3SAndroid Build Coastguard Worker ** X argument is unused. 3386*a3141fd3SAndroid Build Coastguard Worker ** 3387*a3141fd3SAndroid Build Coastguard Worker ** [[SQLITE_TRACE_CLOSE]] <dt>SQLITE_TRACE_CLOSE</dt> 3388*a3141fd3SAndroid Build Coastguard Worker ** <dd>^An SQLITE_TRACE_CLOSE callback is invoked when a database 3389*a3141fd3SAndroid Build Coastguard Worker ** connection closes. 3390*a3141fd3SAndroid Build Coastguard Worker ** ^The P argument is a pointer to the [database connection] object 3391*a3141fd3SAndroid Build Coastguard Worker ** and the X argument is unused. 3392*a3141fd3SAndroid Build Coastguard Worker ** </dl> 3393*a3141fd3SAndroid Build Coastguard Worker */ 3394*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_TRACE_STMT 0x01 3395*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_TRACE_PROFILE 0x02 3396*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_TRACE_ROW 0x04 3397*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_TRACE_CLOSE 0x08 3398*a3141fd3SAndroid Build Coastguard Worker 3399*a3141fd3SAndroid Build Coastguard Worker /* 3400*a3141fd3SAndroid Build Coastguard Worker ** CAPI3REF: SQL Trace Hook 3401*a3141fd3SAndroid Build Coastguard Worker ** METHOD: sqlite3 3402*a3141fd3SAndroid Build Coastguard Worker ** 3403*a3141fd3SAndroid Build Coastguard Worker ** ^The sqlite3_trace_v2(D,M,X,P) interface registers a trace callback 3404*a3141fd3SAndroid Build Coastguard Worker ** function X against [database connection] D, using property mask M 3405*a3141fd3SAndroid Build Coastguard Worker ** and context pointer P. ^If the X callback is 3406*a3141fd3SAndroid Build Coastguard Worker ** NULL or if the M mask is zero, then tracing is disabled. The 3407*a3141fd3SAndroid Build Coastguard Worker ** M argument should be the bitwise OR-ed combination of 3408*a3141fd3SAndroid Build Coastguard Worker ** zero or more [SQLITE_TRACE] constants. 3409*a3141fd3SAndroid Build Coastguard Worker ** 3410*a3141fd3SAndroid Build Coastguard Worker ** ^Each call to either sqlite3_trace(D,X,P) or sqlite3_trace_v2(D,M,X,P) 3411*a3141fd3SAndroid Build Coastguard Worker ** overrides (cancels) all prior calls to sqlite3_trace(D,X,P) or 3412*a3141fd3SAndroid Build Coastguard Worker ** sqlite3_trace_v2(D,M,X,P) for the [database connection] D. Each 3413*a3141fd3SAndroid Build Coastguard Worker ** database connection may have at most one trace callback. 3414*a3141fd3SAndroid Build Coastguard Worker ** 3415*a3141fd3SAndroid Build Coastguard Worker ** ^The X callback is invoked whenever any of the events identified by 3416*a3141fd3SAndroid Build Coastguard Worker ** mask M occur. ^The integer return value from the callback is currently 3417*a3141fd3SAndroid Build Coastguard Worker ** ignored, though this may change in future releases. Callback 3418*a3141fd3SAndroid Build Coastguard Worker ** implementations should return zero to ensure future compatibility. 3419*a3141fd3SAndroid Build Coastguard Worker ** 3420*a3141fd3SAndroid Build Coastguard Worker ** ^A trace callback is invoked with four arguments: callback(T,C,P,X). 3421*a3141fd3SAndroid Build Coastguard Worker ** ^The T argument is one of the [SQLITE_TRACE] 3422*a3141fd3SAndroid Build Coastguard Worker ** constants to indicate why the callback was invoked. 3423*a3141fd3SAndroid Build Coastguard Worker ** ^The C argument is a copy of the context pointer. 3424*a3141fd3SAndroid Build Coastguard Worker ** The P and X arguments are pointers whose meanings depend on T. 3425*a3141fd3SAndroid Build Coastguard Worker ** 3426*a3141fd3SAndroid Build Coastguard Worker ** The sqlite3_trace_v2() interface is intended to replace the legacy 3427*a3141fd3SAndroid Build Coastguard Worker ** interfaces [sqlite3_trace()] and [sqlite3_profile()], both of which 3428*a3141fd3SAndroid Build Coastguard Worker ** are deprecated. 3429*a3141fd3SAndroid Build Coastguard Worker */ 3430*a3141fd3SAndroid Build Coastguard Worker SQLITE_API int sqlite3_trace_v2( 3431*a3141fd3SAndroid Build Coastguard Worker sqlite3*, 3432*a3141fd3SAndroid Build Coastguard Worker unsigned uMask, 3433*a3141fd3SAndroid Build Coastguard Worker int(*xCallback)(unsigned,void*,void*,void*), 3434*a3141fd3SAndroid Build Coastguard Worker void *pCtx 3435*a3141fd3SAndroid Build Coastguard Worker ); 3436*a3141fd3SAndroid Build Coastguard Worker 3437*a3141fd3SAndroid Build Coastguard Worker /* 3438*a3141fd3SAndroid Build Coastguard Worker ** CAPI3REF: Query Progress Callbacks 3439*a3141fd3SAndroid Build Coastguard Worker ** METHOD: sqlite3 3440*a3141fd3SAndroid Build Coastguard Worker ** 3441*a3141fd3SAndroid Build Coastguard Worker ** ^The sqlite3_progress_handler(D,N,X,P) interface causes the callback 3442*a3141fd3SAndroid Build Coastguard Worker ** function X to be invoked periodically during long running calls to 3443*a3141fd3SAndroid Build Coastguard Worker ** [sqlite3_step()] and [sqlite3_prepare()] and similar for 3444*a3141fd3SAndroid Build Coastguard Worker ** database connection D. An example use for this 3445*a3141fd3SAndroid Build Coastguard Worker ** interface is to keep a GUI updated during a large query. 3446*a3141fd3SAndroid Build Coastguard Worker ** 3447*a3141fd3SAndroid Build Coastguard Worker ** ^The parameter P is passed through as the only parameter to the 3448*a3141fd3SAndroid Build Coastguard Worker ** callback function X. ^The parameter N is the approximate number of 3449*a3141fd3SAndroid Build Coastguard Worker ** [virtual machine instructions] that are evaluated between successive 3450*a3141fd3SAndroid Build Coastguard Worker ** invocations of the callback X. ^If N is less than one then the progress 3451*a3141fd3SAndroid Build Coastguard Worker ** handler is disabled. 3452*a3141fd3SAndroid Build Coastguard Worker ** 3453*a3141fd3SAndroid Build Coastguard Worker ** ^Only a single progress handler may be defined at one time per 3454*a3141fd3SAndroid Build Coastguard Worker ** [database connection]; setting a new progress handler cancels the 3455*a3141fd3SAndroid Build Coastguard Worker ** old one. ^Setting parameter X to NULL disables the progress handler. 3456*a3141fd3SAndroid Build Coastguard Worker ** ^The progress handler is also disabled by setting N to a value less 3457*a3141fd3SAndroid Build Coastguard Worker ** than 1. 3458*a3141fd3SAndroid Build Coastguard Worker ** 3459*a3141fd3SAndroid Build Coastguard Worker ** ^If the progress callback returns non-zero, the operation is 3460*a3141fd3SAndroid Build Coastguard Worker ** interrupted. This feature can be used to implement a 3461*a3141fd3SAndroid Build Coastguard Worker ** "Cancel" button on a GUI progress dialog box. 3462*a3141fd3SAndroid Build Coastguard Worker ** 3463*a3141fd3SAndroid Build Coastguard Worker ** The progress handler callback must not do anything that will modify 3464*a3141fd3SAndroid Build Coastguard Worker ** the database connection that invoked the progress handler. 3465*a3141fd3SAndroid Build Coastguard Worker ** Note that [sqlite3_prepare_v2()] and [sqlite3_step()] both modify their 3466*a3141fd3SAndroid Build Coastguard Worker ** database connections for the meaning of "modify" in this paragraph. 3467*a3141fd3SAndroid Build Coastguard Worker ** 3468*a3141fd3SAndroid Build Coastguard Worker ** The progress handler callback would originally only be invoked from the 3469*a3141fd3SAndroid Build Coastguard Worker ** bytecode engine. It still might be invoked during [sqlite3_prepare()] 3470*a3141fd3SAndroid Build Coastguard Worker ** and similar because those routines might force a reparse of the schema 3471*a3141fd3SAndroid Build Coastguard Worker ** which involves running the bytecode engine. However, beginning with 3472*a3141fd3SAndroid Build Coastguard Worker ** SQLite version 3.41.0, the progress handler callback might also be 3473*a3141fd3SAndroid Build Coastguard Worker ** invoked directly from [sqlite3_prepare()] while analyzing and generating 3474*a3141fd3SAndroid Build Coastguard Worker ** code for complex queries. 3475*a3141fd3SAndroid Build Coastguard Worker */ 3476*a3141fd3SAndroid Build Coastguard Worker SQLITE_API void sqlite3_progress_handler(sqlite3*, int, int(*)(void*), void*); 3477*a3141fd3SAndroid Build Coastguard Worker 3478*a3141fd3SAndroid Build Coastguard Worker /* 3479*a3141fd3SAndroid Build Coastguard Worker ** CAPI3REF: Opening A New Database Connection 3480*a3141fd3SAndroid Build Coastguard Worker ** CONSTRUCTOR: sqlite3 3481*a3141fd3SAndroid Build Coastguard Worker ** 3482*a3141fd3SAndroid Build Coastguard Worker ** ^These routines open an SQLite database file as specified by the 3483*a3141fd3SAndroid Build Coastguard Worker ** filename argument. ^The filename argument is interpreted as UTF-8 for 3484*a3141fd3SAndroid Build Coastguard Worker ** sqlite3_open() and sqlite3_open_v2() and as UTF-16 in the native byte 3485*a3141fd3SAndroid Build Coastguard Worker ** order for sqlite3_open16(). ^(A [database connection] handle is usually 3486*a3141fd3SAndroid Build Coastguard Worker ** returned in *ppDb, even if an error occurs. The only exception is that 3487*a3141fd3SAndroid Build Coastguard Worker ** if SQLite is unable to allocate memory to hold the [sqlite3] object, 3488*a3141fd3SAndroid Build Coastguard Worker ** a NULL will be written into *ppDb instead of a pointer to the [sqlite3] 3489*a3141fd3SAndroid Build Coastguard Worker ** object.)^ ^(If the database is opened (and/or created) successfully, then 3490*a3141fd3SAndroid Build Coastguard Worker ** [SQLITE_OK] is returned. Otherwise an [error code] is returned.)^ ^The 3491*a3141fd3SAndroid Build Coastguard Worker ** [sqlite3_errmsg()] or [sqlite3_errmsg16()] routines can be used to obtain 3492*a3141fd3SAndroid Build Coastguard Worker ** an English language description of the error following a failure of any 3493*a3141fd3SAndroid Build Coastguard Worker ** of the sqlite3_open() routines. 3494*a3141fd3SAndroid Build Coastguard Worker ** 3495*a3141fd3SAndroid Build Coastguard Worker ** ^The default encoding will be UTF-8 for databases created using 3496*a3141fd3SAndroid Build Coastguard Worker ** sqlite3_open() or sqlite3_open_v2(). ^The default encoding for databases 3497*a3141fd3SAndroid Build Coastguard Worker ** created using sqlite3_open16() will be UTF-16 in the native byte order. 3498*a3141fd3SAndroid Build Coastguard Worker ** 3499*a3141fd3SAndroid Build Coastguard Worker ** Whether or not an error occurs when it is opened, resources 3500*a3141fd3SAndroid Build Coastguard Worker ** associated with the [database connection] handle should be released by 3501*a3141fd3SAndroid Build Coastguard Worker ** passing it to [sqlite3_close()] when it is no longer required. 3502*a3141fd3SAndroid Build Coastguard Worker ** 3503*a3141fd3SAndroid Build Coastguard Worker ** The sqlite3_open_v2() interface works like sqlite3_open() 3504*a3141fd3SAndroid Build Coastguard Worker ** except that it accepts two additional parameters for additional control 3505*a3141fd3SAndroid Build Coastguard Worker ** over the new database connection. ^(The flags parameter to 3506*a3141fd3SAndroid Build Coastguard Worker ** sqlite3_open_v2() must include, at a minimum, one of the following 3507*a3141fd3SAndroid Build Coastguard Worker ** three flag combinations:)^ 3508*a3141fd3SAndroid Build Coastguard Worker ** 3509*a3141fd3SAndroid Build Coastguard Worker ** <dl> 3510*a3141fd3SAndroid Build Coastguard Worker ** ^(<dt>[SQLITE_OPEN_READONLY]</dt> 3511*a3141fd3SAndroid Build Coastguard Worker ** <dd>The database is opened in read-only mode. If the database does 3512*a3141fd3SAndroid Build Coastguard Worker ** not already exist, an error is returned.</dd>)^ 3513*a3141fd3SAndroid Build Coastguard Worker ** 3514*a3141fd3SAndroid Build Coastguard Worker ** ^(<dt>[SQLITE_OPEN_READWRITE]</dt> 3515*a3141fd3SAndroid Build Coastguard Worker ** <dd>The database is opened for reading and writing if possible, or 3516*a3141fd3SAndroid Build Coastguard Worker ** reading only if the file is write protected by the operating 3517*a3141fd3SAndroid Build Coastguard Worker ** system. In either case the database must already exist, otherwise 3518*a3141fd3SAndroid Build Coastguard Worker ** an error is returned. For historical reasons, if opening in 3519*a3141fd3SAndroid Build Coastguard Worker ** read-write mode fails due to OS-level permissions, an attempt is 3520*a3141fd3SAndroid Build Coastguard Worker ** made to open it in read-only mode. [sqlite3_db_readonly()] can be 3521*a3141fd3SAndroid Build Coastguard Worker ** used to determine whether the database is actually 3522*a3141fd3SAndroid Build Coastguard Worker ** read-write.</dd>)^ 3523*a3141fd3SAndroid Build Coastguard Worker ** 3524*a3141fd3SAndroid Build Coastguard Worker ** ^(<dt>[SQLITE_OPEN_READWRITE] | [SQLITE_OPEN_CREATE]</dt> 3525*a3141fd3SAndroid Build Coastguard Worker ** <dd>The database is opened for reading and writing, and is created if 3526*a3141fd3SAndroid Build Coastguard Worker ** it does not already exist. This is the behavior that is always used for 3527*a3141fd3SAndroid Build Coastguard Worker ** sqlite3_open() and sqlite3_open16().</dd>)^ 3528*a3141fd3SAndroid Build Coastguard Worker ** </dl> 3529*a3141fd3SAndroid Build Coastguard Worker ** 3530*a3141fd3SAndroid Build Coastguard Worker ** In addition to the required flags, the following optional flags are 3531*a3141fd3SAndroid Build Coastguard Worker ** also supported: 3532*a3141fd3SAndroid Build Coastguard Worker ** 3533*a3141fd3SAndroid Build Coastguard Worker ** <dl> 3534*a3141fd3SAndroid Build Coastguard Worker ** ^(<dt>[SQLITE_OPEN_URI]</dt> 3535*a3141fd3SAndroid Build Coastguard Worker ** <dd>The filename can be interpreted as a URI if this flag is set.</dd>)^ 3536*a3141fd3SAndroid Build Coastguard Worker ** 3537*a3141fd3SAndroid Build Coastguard Worker ** ^(<dt>[SQLITE_OPEN_MEMORY]</dt> 3538*a3141fd3SAndroid Build Coastguard Worker ** <dd>The database will be opened as an in-memory database. The database 3539*a3141fd3SAndroid Build Coastguard Worker ** is named by the "filename" argument for the purposes of cache-sharing, 3540*a3141fd3SAndroid Build Coastguard Worker ** if shared cache mode is enabled, but the "filename" is otherwise ignored. 3541*a3141fd3SAndroid Build Coastguard Worker ** </dd>)^ 3542*a3141fd3SAndroid Build Coastguard Worker ** 3543*a3141fd3SAndroid Build Coastguard Worker ** ^(<dt>[SQLITE_OPEN_NOMUTEX]</dt> 3544*a3141fd3SAndroid Build Coastguard Worker ** <dd>The new database connection will use the "multi-thread" 3545*a3141fd3SAndroid Build Coastguard Worker ** [threading mode].)^ This means that separate threads are allowed 3546*a3141fd3SAndroid Build Coastguard Worker ** to use SQLite at the same time, as long as each thread is using 3547*a3141fd3SAndroid Build Coastguard Worker ** a different [database connection]. 3548*a3141fd3SAndroid Build Coastguard Worker ** 3549*a3141fd3SAndroid Build Coastguard Worker ** ^(<dt>[SQLITE_OPEN_FULLMUTEX]</dt> 3550*a3141fd3SAndroid Build Coastguard Worker ** <dd>The new database connection will use the "serialized" 3551*a3141fd3SAndroid Build Coastguard Worker ** [threading mode].)^ This means the multiple threads can safely 3552*a3141fd3SAndroid Build Coastguard Worker ** attempt to use the same database connection at the same time. 3553*a3141fd3SAndroid Build Coastguard Worker ** (Mutexes will block any actual concurrency, but in this mode 3554*a3141fd3SAndroid Build Coastguard Worker ** there is no harm in trying.) 3555*a3141fd3SAndroid Build Coastguard Worker ** 3556*a3141fd3SAndroid Build Coastguard Worker ** ^(<dt>[SQLITE_OPEN_SHAREDCACHE]</dt> 3557*a3141fd3SAndroid Build Coastguard Worker ** <dd>The database is opened [shared cache] enabled, overriding 3558*a3141fd3SAndroid Build Coastguard Worker ** the default shared cache setting provided by 3559*a3141fd3SAndroid Build Coastguard Worker ** [sqlite3_enable_shared_cache()].)^ 3560*a3141fd3SAndroid Build Coastguard Worker ** The [use of shared cache mode is discouraged] and hence shared cache 3561*a3141fd3SAndroid Build Coastguard Worker ** capabilities may be omitted from many builds of SQLite. In such cases, 3562*a3141fd3SAndroid Build Coastguard Worker ** this option is a no-op. 3563*a3141fd3SAndroid Build Coastguard Worker ** 3564*a3141fd3SAndroid Build Coastguard Worker ** ^(<dt>[SQLITE_OPEN_PRIVATECACHE]</dt> 3565*a3141fd3SAndroid Build Coastguard Worker ** <dd>The database is opened [shared cache] disabled, overriding 3566*a3141fd3SAndroid Build Coastguard Worker ** the default shared cache setting provided by 3567*a3141fd3SAndroid Build Coastguard Worker ** [sqlite3_enable_shared_cache()].)^ 3568*a3141fd3SAndroid Build Coastguard Worker ** 3569*a3141fd3SAndroid Build Coastguard Worker ** [[OPEN_EXRESCODE]] ^(<dt>[SQLITE_OPEN_EXRESCODE]</dt> 3570*a3141fd3SAndroid Build Coastguard Worker ** <dd>The database connection comes up in "extended result code mode". 3571*a3141fd3SAndroid Build Coastguard Worker ** In other words, the database behaves has if 3572*a3141fd3SAndroid Build Coastguard Worker ** [sqlite3_extended_result_codes(db,1)] where called on the database 3573*a3141fd3SAndroid Build Coastguard Worker ** connection as soon as the connection is created. In addition to setting 3574*a3141fd3SAndroid Build Coastguard Worker ** the extended result code mode, this flag also causes [sqlite3_open_v2()] 3575*a3141fd3SAndroid Build Coastguard Worker ** to return an extended result code.</dd> 3576*a3141fd3SAndroid Build Coastguard Worker ** 3577*a3141fd3SAndroid Build Coastguard Worker ** [[OPEN_NOFOLLOW]] ^(<dt>[SQLITE_OPEN_NOFOLLOW]</dt> 3578*a3141fd3SAndroid Build Coastguard Worker ** <dd>The database filename is not allowed to contain a symbolic link</dd> 3579*a3141fd3SAndroid Build Coastguard Worker ** </dl>)^ 3580*a3141fd3SAndroid Build Coastguard Worker ** 3581*a3141fd3SAndroid Build Coastguard Worker ** If the 3rd parameter to sqlite3_open_v2() is not one of the 3582*a3141fd3SAndroid Build Coastguard Worker ** required combinations shown above optionally combined with other 3583*a3141fd3SAndroid Build Coastguard Worker ** [SQLITE_OPEN_READONLY | SQLITE_OPEN_* bits] 3584*a3141fd3SAndroid Build Coastguard Worker ** then the behavior is undefined. Historic versions of SQLite 3585*a3141fd3SAndroid Build Coastguard Worker ** have silently ignored surplus bits in the flags parameter to 3586*a3141fd3SAndroid Build Coastguard Worker ** sqlite3_open_v2(), however that behavior might not be carried through 3587*a3141fd3SAndroid Build Coastguard Worker ** into future versions of SQLite and so applications should not rely 3588*a3141fd3SAndroid Build Coastguard Worker ** upon it. Note in particular that the SQLITE_OPEN_EXCLUSIVE flag is a no-op 3589*a3141fd3SAndroid Build Coastguard Worker ** for sqlite3_open_v2(). The SQLITE_OPEN_EXCLUSIVE does *not* cause 3590*a3141fd3SAndroid Build Coastguard Worker ** the open to fail if the database already exists. The SQLITE_OPEN_EXCLUSIVE 3591*a3141fd3SAndroid Build Coastguard Worker ** flag is intended for use by the [sqlite3_vfs|VFS interface] only, and not 3592*a3141fd3SAndroid Build Coastguard Worker ** by sqlite3_open_v2(). 3593*a3141fd3SAndroid Build Coastguard Worker ** 3594*a3141fd3SAndroid Build Coastguard Worker ** ^The fourth parameter to sqlite3_open_v2() is the name of the 3595*a3141fd3SAndroid Build Coastguard Worker ** [sqlite3_vfs] object that defines the operating system interface that 3596*a3141fd3SAndroid Build Coastguard Worker ** the new database connection should use. ^If the fourth parameter is 3597*a3141fd3SAndroid Build Coastguard Worker ** a NULL pointer then the default [sqlite3_vfs] object is used. 3598*a3141fd3SAndroid Build Coastguard Worker ** 3599*a3141fd3SAndroid Build Coastguard Worker ** ^If the filename is ":memory:", then a private, temporary in-memory database 3600*a3141fd3SAndroid Build Coastguard Worker ** is created for the connection. ^This in-memory database will vanish when 3601*a3141fd3SAndroid Build Coastguard Worker ** the database connection is closed. Future versions of SQLite might 3602*a3141fd3SAndroid Build Coastguard Worker ** make use of additional special filenames that begin with the ":" character. 3603*a3141fd3SAndroid Build Coastguard Worker ** It is recommended that when a database filename actually does begin with 3604*a3141fd3SAndroid Build Coastguard Worker ** a ":" character you should prefix the filename with a pathname such as 3605*a3141fd3SAndroid Build Coastguard Worker ** "./" to avoid ambiguity. 3606*a3141fd3SAndroid Build Coastguard Worker ** 3607*a3141fd3SAndroid Build Coastguard Worker ** ^If the filename is an empty string, then a private, temporary 3608*a3141fd3SAndroid Build Coastguard Worker ** on-disk database will be created. ^This private database will be 3609*a3141fd3SAndroid Build Coastguard Worker ** automatically deleted as soon as the database connection is closed. 3610*a3141fd3SAndroid Build Coastguard Worker ** 3611*a3141fd3SAndroid Build Coastguard Worker ** [[URI filenames in sqlite3_open()]] <h3>URI Filenames</h3> 3612*a3141fd3SAndroid Build Coastguard Worker ** 3613*a3141fd3SAndroid Build Coastguard Worker ** ^If [URI filename] interpretation is enabled, and the filename argument 3614*a3141fd3SAndroid Build Coastguard Worker ** begins with "file:", then the filename is interpreted as a URI. ^URI 3615*a3141fd3SAndroid Build Coastguard Worker ** filename interpretation is enabled if the [SQLITE_OPEN_URI] flag is 3616*a3141fd3SAndroid Build Coastguard Worker ** set in the third argument to sqlite3_open_v2(), or if it has 3617*a3141fd3SAndroid Build Coastguard Worker ** been enabled globally using the [SQLITE_CONFIG_URI] option with the 3618*a3141fd3SAndroid Build Coastguard Worker ** [sqlite3_config()] method or by the [SQLITE_USE_URI] compile-time option. 3619*a3141fd3SAndroid Build Coastguard Worker ** URI filename interpretation is turned off 3620*a3141fd3SAndroid Build Coastguard Worker ** by default, but future releases of SQLite might enable URI filename 3621*a3141fd3SAndroid Build Coastguard Worker ** interpretation by default. See "[URI filenames]" for additional 3622*a3141fd3SAndroid Build Coastguard Worker ** information. 3623*a3141fd3SAndroid Build Coastguard Worker ** 3624*a3141fd3SAndroid Build Coastguard Worker ** URI filenames are parsed according to RFC 3986. ^If the URI contains an 3625*a3141fd3SAndroid Build Coastguard Worker ** authority, then it must be either an empty string or the string 3626*a3141fd3SAndroid Build Coastguard Worker ** "localhost". ^If the authority is not an empty string or "localhost", an 3627*a3141fd3SAndroid Build Coastguard Worker ** error is returned to the caller. ^The fragment component of a URI, if 3628*a3141fd3SAndroid Build Coastguard Worker ** present, is ignored. 3629*a3141fd3SAndroid Build Coastguard Worker ** 3630*a3141fd3SAndroid Build Coastguard Worker ** ^SQLite uses the path component of the URI as the name of the disk file 3631*a3141fd3SAndroid Build Coastguard Worker ** which contains the database. ^If the path begins with a '/' character, 3632*a3141fd3SAndroid Build Coastguard Worker ** then it is interpreted as an absolute path. ^If the path does not begin 3633*a3141fd3SAndroid Build Coastguard Worker ** with a '/' (meaning that the authority section is omitted from the URI) 3634*a3141fd3SAndroid Build Coastguard Worker ** then the path is interpreted as a relative path. 3635*a3141fd3SAndroid Build Coastguard Worker ** ^(On windows, the first component of an absolute path 3636*a3141fd3SAndroid Build Coastguard Worker ** is a drive specification (e.g. "C:").)^ 3637*a3141fd3SAndroid Build Coastguard Worker ** 3638*a3141fd3SAndroid Build Coastguard Worker ** [[core URI query parameters]] 3639*a3141fd3SAndroid Build Coastguard Worker ** The query component of a URI may contain parameters that are interpreted 3640*a3141fd3SAndroid Build Coastguard Worker ** either by SQLite itself, or by a [VFS | custom VFS implementation]. 3641*a3141fd3SAndroid Build Coastguard Worker ** SQLite and its built-in [VFSes] interpret the 3642*a3141fd3SAndroid Build Coastguard Worker ** following query parameters: 3643*a3141fd3SAndroid Build Coastguard Worker ** 3644*a3141fd3SAndroid Build Coastguard Worker ** <ul> 3645*a3141fd3SAndroid Build Coastguard Worker ** <li> <b>vfs</b>: ^The "vfs" parameter may be used to specify the name of 3646*a3141fd3SAndroid Build Coastguard Worker ** a VFS object that provides the operating system interface that should 3647*a3141fd3SAndroid Build Coastguard Worker ** be used to access the database file on disk. ^If this option is set to 3648*a3141fd3SAndroid Build Coastguard Worker ** an empty string the default VFS object is used. ^Specifying an unknown 3649*a3141fd3SAndroid Build Coastguard Worker ** VFS is an error. ^If sqlite3_open_v2() is used and the vfs option is 3650*a3141fd3SAndroid Build Coastguard Worker ** present, then the VFS specified by the option takes precedence over 3651*a3141fd3SAndroid Build Coastguard Worker ** the value passed as the fourth parameter to sqlite3_open_v2(). 3652*a3141fd3SAndroid Build Coastguard Worker ** 3653*a3141fd3SAndroid Build Coastguard Worker ** <li> <b>mode</b>: ^(The mode parameter may be set to either "ro", "rw", 3654*a3141fd3SAndroid Build Coastguard Worker ** "rwc", or "memory". Attempting to set it to any other value is 3655*a3141fd3SAndroid Build Coastguard Worker ** an error)^. 3656*a3141fd3SAndroid Build Coastguard Worker ** ^If "ro" is specified, then the database is opened for read-only 3657*a3141fd3SAndroid Build Coastguard Worker ** access, just as if the [SQLITE_OPEN_READONLY] flag had been set in the 3658*a3141fd3SAndroid Build Coastguard Worker ** third argument to sqlite3_open_v2(). ^If the mode option is set to 3659*a3141fd3SAndroid Build Coastguard Worker ** "rw", then the database is opened for read-write (but not create) 3660*a3141fd3SAndroid Build Coastguard Worker ** access, as if SQLITE_OPEN_READWRITE (but not SQLITE_OPEN_CREATE) had 3661*a3141fd3SAndroid Build Coastguard Worker ** been set. ^Value "rwc" is equivalent to setting both 3662*a3141fd3SAndroid Build Coastguard Worker ** SQLITE_OPEN_READWRITE and SQLITE_OPEN_CREATE. ^If the mode option is 3663*a3141fd3SAndroid Build Coastguard Worker ** set to "memory" then a pure [in-memory database] that never reads 3664*a3141fd3SAndroid Build Coastguard Worker ** or writes from disk is used. ^It is an error to specify a value for 3665*a3141fd3SAndroid Build Coastguard Worker ** the mode parameter that is less restrictive than that specified by 3666*a3141fd3SAndroid Build Coastguard Worker ** the flags passed in the third parameter to sqlite3_open_v2(). 3667*a3141fd3SAndroid Build Coastguard Worker ** 3668*a3141fd3SAndroid Build Coastguard Worker ** <li> <b>cache</b>: ^The cache parameter may be set to either "shared" or 3669*a3141fd3SAndroid Build Coastguard Worker ** "private". ^Setting it to "shared" is equivalent to setting the 3670*a3141fd3SAndroid Build Coastguard Worker ** SQLITE_OPEN_SHAREDCACHE bit in the flags argument passed to 3671*a3141fd3SAndroid Build Coastguard Worker ** sqlite3_open_v2(). ^Setting the cache parameter to "private" is 3672*a3141fd3SAndroid Build Coastguard Worker ** equivalent to setting the SQLITE_OPEN_PRIVATECACHE bit. 3673*a3141fd3SAndroid Build Coastguard Worker ** ^If sqlite3_open_v2() is used and the "cache" parameter is present in 3674*a3141fd3SAndroid Build Coastguard Worker ** a URI filename, its value overrides any behavior requested by setting 3675*a3141fd3SAndroid Build Coastguard Worker ** SQLITE_OPEN_PRIVATECACHE or SQLITE_OPEN_SHAREDCACHE flag. 3676*a3141fd3SAndroid Build Coastguard Worker ** 3677*a3141fd3SAndroid Build Coastguard Worker ** <li> <b>psow</b>: ^The psow parameter indicates whether or not the 3678*a3141fd3SAndroid Build Coastguard Worker ** [powersafe overwrite] property does or does not apply to the 3679*a3141fd3SAndroid Build Coastguard Worker ** storage media on which the database file resides. 3680*a3141fd3SAndroid Build Coastguard Worker ** 3681*a3141fd3SAndroid Build Coastguard Worker ** <li> <b>nolock</b>: ^The nolock parameter is a boolean query parameter 3682*a3141fd3SAndroid Build Coastguard Worker ** which if set disables file locking in rollback journal modes. This 3683*a3141fd3SAndroid Build Coastguard Worker ** is useful for accessing a database on a filesystem that does not 3684*a3141fd3SAndroid Build Coastguard Worker ** support locking. Caution: Database corruption might result if two 3685*a3141fd3SAndroid Build Coastguard Worker ** or more processes write to the same database and any one of those 3686*a3141fd3SAndroid Build Coastguard Worker ** processes uses nolock=1. 3687*a3141fd3SAndroid Build Coastguard Worker ** 3688*a3141fd3SAndroid Build Coastguard Worker ** <li> <b>immutable</b>: ^The immutable parameter is a boolean query 3689*a3141fd3SAndroid Build Coastguard Worker ** parameter that indicates that the database file is stored on 3690*a3141fd3SAndroid Build Coastguard Worker ** read-only media. ^When immutable is set, SQLite assumes that the 3691*a3141fd3SAndroid Build Coastguard Worker ** database file cannot be changed, even by a process with higher 3692*a3141fd3SAndroid Build Coastguard Worker ** privilege, and so the database is opened read-only and all locking 3693*a3141fd3SAndroid Build Coastguard Worker ** and change detection is disabled. Caution: Setting the immutable 3694*a3141fd3SAndroid Build Coastguard Worker ** property on a database file that does in fact change can result 3695*a3141fd3SAndroid Build Coastguard Worker ** in incorrect query results and/or [SQLITE_CORRUPT] errors. 3696*a3141fd3SAndroid Build Coastguard Worker ** See also: [SQLITE_IOCAP_IMMUTABLE]. 3697*a3141fd3SAndroid Build Coastguard Worker ** 3698*a3141fd3SAndroid Build Coastguard Worker ** </ul> 3699*a3141fd3SAndroid Build Coastguard Worker ** 3700*a3141fd3SAndroid Build Coastguard Worker ** ^Specifying an unknown parameter in the query component of a URI is not an 3701*a3141fd3SAndroid Build Coastguard Worker ** error. Future versions of SQLite might understand additional query 3702*a3141fd3SAndroid Build Coastguard Worker ** parameters. See "[query parameters with special meaning to SQLite]" for 3703*a3141fd3SAndroid Build Coastguard Worker ** additional information. 3704*a3141fd3SAndroid Build Coastguard Worker ** 3705*a3141fd3SAndroid Build Coastguard Worker ** [[URI filename examples]] <h3>URI filename examples</h3> 3706*a3141fd3SAndroid Build Coastguard Worker ** 3707*a3141fd3SAndroid Build Coastguard Worker ** <table border="1" align=center cellpadding=5> 3708*a3141fd3SAndroid Build Coastguard Worker ** <tr><th> URI filenames <th> Results 3709*a3141fd3SAndroid Build Coastguard Worker ** <tr><td> file:data.db <td> 3710*a3141fd3SAndroid Build Coastguard Worker ** Open the file "data.db" in the current directory. 3711*a3141fd3SAndroid Build Coastguard Worker ** <tr><td> file:/home/fred/data.db<br> 3712*a3141fd3SAndroid Build Coastguard Worker ** file:///home/fred/data.db <br> 3713*a3141fd3SAndroid Build Coastguard Worker ** file://localhost/home/fred/data.db <br> <td> 3714*a3141fd3SAndroid Build Coastguard Worker ** Open the database file "/home/fred/data.db". 3715*a3141fd3SAndroid Build Coastguard Worker ** <tr><td> file://darkstar/home/fred/data.db <td> 3716*a3141fd3SAndroid Build Coastguard Worker ** An error. "darkstar" is not a recognized authority. 3717*a3141fd3SAndroid Build Coastguard Worker ** <tr><td style="white-space:nowrap"> 3718*a3141fd3SAndroid Build Coastguard Worker ** file:///C:/Documents%20and%20Settings/fred/Desktop/data.db 3719*a3141fd3SAndroid Build Coastguard Worker ** <td> Windows only: Open the file "data.db" on fred's desktop on drive 3720*a3141fd3SAndroid Build Coastguard Worker ** C:. Note that the %20 escaping in this example is not strictly 3721*a3141fd3SAndroid Build Coastguard Worker ** necessary - space characters can be used literally 3722*a3141fd3SAndroid Build Coastguard Worker ** in URI filenames. 3723*a3141fd3SAndroid Build Coastguard Worker ** <tr><td> file:data.db?mode=ro&cache=private <td> 3724*a3141fd3SAndroid Build Coastguard Worker ** Open file "data.db" in the current directory for read-only access. 3725*a3141fd3SAndroid Build Coastguard Worker ** Regardless of whether or not shared-cache mode is enabled by 3726*a3141fd3SAndroid Build Coastguard Worker ** default, use a private cache. 3727*a3141fd3SAndroid Build Coastguard Worker ** <tr><td> file:/home/fred/data.db?vfs=unix-dotfile <td> 3728*a3141fd3SAndroid Build Coastguard Worker ** Open file "/home/fred/data.db". Use the special VFS "unix-dotfile" 3729*a3141fd3SAndroid Build Coastguard Worker ** that uses dot-files in place of posix advisory locking. 3730*a3141fd3SAndroid Build Coastguard Worker ** <tr><td> file:data.db?mode=readonly <td> 3731*a3141fd3SAndroid Build Coastguard Worker ** An error. "readonly" is not a valid option for the "mode" parameter. 3732*a3141fd3SAndroid Build Coastguard Worker ** Use "ro" instead: "file:data.db?mode=ro". 3733*a3141fd3SAndroid Build Coastguard Worker ** </table> 3734*a3141fd3SAndroid Build Coastguard Worker ** 3735*a3141fd3SAndroid Build Coastguard Worker ** ^URI hexadecimal escape sequences (%HH) are supported within the path and 3736*a3141fd3SAndroid Build Coastguard Worker ** query components of a URI. A hexadecimal escape sequence consists of a 3737*a3141fd3SAndroid Build Coastguard Worker ** percent sign - "%" - followed by exactly two hexadecimal digits 3738*a3141fd3SAndroid Build Coastguard Worker ** specifying an octet value. ^Before the path or query components of a 3739*a3141fd3SAndroid Build Coastguard Worker ** URI filename are interpreted, they are encoded using UTF-8 and all 3740*a3141fd3SAndroid Build Coastguard Worker ** hexadecimal escape sequences replaced by a single byte containing the 3741*a3141fd3SAndroid Build Coastguard Worker ** corresponding octet. If this process generates an invalid UTF-8 encoding, 3742*a3141fd3SAndroid Build Coastguard Worker ** the results are undefined. 3743*a3141fd3SAndroid Build Coastguard Worker ** 3744*a3141fd3SAndroid Build Coastguard Worker ** <b>Note to Windows users:</b> The encoding used for the filename argument 3745*a3141fd3SAndroid Build Coastguard Worker ** of sqlite3_open() and sqlite3_open_v2() must be UTF-8, not whatever 3746*a3141fd3SAndroid Build Coastguard Worker ** codepage is currently defined. Filenames containing international 3747*a3141fd3SAndroid Build Coastguard Worker ** characters must be converted to UTF-8 prior to passing them into 3748*a3141fd3SAndroid Build Coastguard Worker ** sqlite3_open() or sqlite3_open_v2(). 3749*a3141fd3SAndroid Build Coastguard Worker ** 3750*a3141fd3SAndroid Build Coastguard Worker ** <b>Note to Windows Runtime users:</b> The temporary directory must be set 3751*a3141fd3SAndroid Build Coastguard Worker ** prior to calling sqlite3_open() or sqlite3_open_v2(). Otherwise, various 3752*a3141fd3SAndroid Build Coastguard Worker ** features that require the use of temporary files may fail. 3753*a3141fd3SAndroid Build Coastguard Worker ** 3754*a3141fd3SAndroid Build Coastguard Worker ** See also: [sqlite3_temp_directory] 3755*a3141fd3SAndroid Build Coastguard Worker */ 3756*a3141fd3SAndroid Build Coastguard Worker SQLITE_API int sqlite3_open( 3757*a3141fd3SAndroid Build Coastguard Worker const char *filename, /* Database filename (UTF-8) */ 3758*a3141fd3SAndroid Build Coastguard Worker sqlite3 **ppDb /* OUT: SQLite db handle */ 3759*a3141fd3SAndroid Build Coastguard Worker ); 3760*a3141fd3SAndroid Build Coastguard Worker SQLITE_API int sqlite3_open16( 3761*a3141fd3SAndroid Build Coastguard Worker const void *filename, /* Database filename (UTF-16) */ 3762*a3141fd3SAndroid Build Coastguard Worker sqlite3 **ppDb /* OUT: SQLite db handle */ 3763*a3141fd3SAndroid Build Coastguard Worker ); 3764*a3141fd3SAndroid Build Coastguard Worker SQLITE_API int sqlite3_open_v2( 3765*a3141fd3SAndroid Build Coastguard Worker const char *filename, /* Database filename (UTF-8) */ 3766*a3141fd3SAndroid Build Coastguard Worker sqlite3 **ppDb, /* OUT: SQLite db handle */ 3767*a3141fd3SAndroid Build Coastguard Worker int flags, /* Flags */ 3768*a3141fd3SAndroid Build Coastguard Worker const char *zVfs /* Name of VFS module to use */ 3769*a3141fd3SAndroid Build Coastguard Worker ); 3770*a3141fd3SAndroid Build Coastguard Worker 3771*a3141fd3SAndroid Build Coastguard Worker /* 3772*a3141fd3SAndroid Build Coastguard Worker ** CAPI3REF: Obtain Values For URI Parameters 3773*a3141fd3SAndroid Build Coastguard Worker ** 3774*a3141fd3SAndroid Build Coastguard Worker ** These are utility routines, useful to [VFS|custom VFS implementations], 3775*a3141fd3SAndroid Build Coastguard Worker ** that check if a database file was a URI that contained a specific query 3776*a3141fd3SAndroid Build Coastguard Worker ** parameter, and if so obtains the value of that query parameter. 3777*a3141fd3SAndroid Build Coastguard Worker ** 3778*a3141fd3SAndroid Build Coastguard Worker ** The first parameter to these interfaces (hereafter referred to 3779*a3141fd3SAndroid Build Coastguard Worker ** as F) must be one of: 3780*a3141fd3SAndroid Build Coastguard Worker ** <ul> 3781*a3141fd3SAndroid Build Coastguard Worker ** <li> A database filename pointer created by the SQLite core and 3782*a3141fd3SAndroid Build Coastguard Worker ** passed into the xOpen() method of a VFS implementation, or 3783*a3141fd3SAndroid Build Coastguard Worker ** <li> A filename obtained from [sqlite3_db_filename()], or 3784*a3141fd3SAndroid Build Coastguard Worker ** <li> A new filename constructed using [sqlite3_create_filename()]. 3785*a3141fd3SAndroid Build Coastguard Worker ** </ul> 3786*a3141fd3SAndroid Build Coastguard Worker ** If the F parameter is not one of the above, then the behavior is 3787*a3141fd3SAndroid Build Coastguard Worker ** undefined and probably undesirable. Older versions of SQLite were 3788*a3141fd3SAndroid Build Coastguard Worker ** more tolerant of invalid F parameters than newer versions. 3789*a3141fd3SAndroid Build Coastguard Worker ** 3790*a3141fd3SAndroid Build Coastguard Worker ** If F is a suitable filename (as described in the previous paragraph) 3791*a3141fd3SAndroid Build Coastguard Worker ** and if P is the name of the query parameter, then 3792*a3141fd3SAndroid Build Coastguard Worker ** sqlite3_uri_parameter(F,P) returns the value of the P 3793*a3141fd3SAndroid Build Coastguard Worker ** parameter if it exists or a NULL pointer if P does not appear as a 3794*a3141fd3SAndroid Build Coastguard Worker ** query parameter on F. If P is a query parameter of F and it 3795*a3141fd3SAndroid Build Coastguard Worker ** has no explicit value, then sqlite3_uri_parameter(F,P) returns 3796*a3141fd3SAndroid Build Coastguard Worker ** a pointer to an empty string. 3797*a3141fd3SAndroid Build Coastguard Worker ** 3798*a3141fd3SAndroid Build Coastguard Worker ** The sqlite3_uri_boolean(F,P,B) routine assumes that P is a boolean 3799*a3141fd3SAndroid Build Coastguard Worker ** parameter and returns true (1) or false (0) according to the value 3800*a3141fd3SAndroid Build Coastguard Worker ** of P. The sqlite3_uri_boolean(F,P,B) routine returns true (1) if the 3801*a3141fd3SAndroid Build Coastguard Worker ** value of query parameter P is one of "yes", "true", or "on" in any 3802*a3141fd3SAndroid Build Coastguard Worker ** case or if the value begins with a non-zero number. The 3803*a3141fd3SAndroid Build Coastguard Worker ** sqlite3_uri_boolean(F,P,B) routines returns false (0) if the value of 3804*a3141fd3SAndroid Build Coastguard Worker ** query parameter P is one of "no", "false", or "off" in any case or 3805*a3141fd3SAndroid Build Coastguard Worker ** if the value begins with a numeric zero. If P is not a query 3806*a3141fd3SAndroid Build Coastguard Worker ** parameter on F or if the value of P does not match any of the 3807*a3141fd3SAndroid Build Coastguard Worker ** above, then sqlite3_uri_boolean(F,P,B) returns (B!=0). 3808*a3141fd3SAndroid Build Coastguard Worker ** 3809*a3141fd3SAndroid Build Coastguard Worker ** The sqlite3_uri_int64(F,P,D) routine converts the value of P into a 3810*a3141fd3SAndroid Build Coastguard Worker ** 64-bit signed integer and returns that integer, or D if P does not 3811*a3141fd3SAndroid Build Coastguard Worker ** exist. If the value of P is something other than an integer, then 3812*a3141fd3SAndroid Build Coastguard Worker ** zero is returned. 3813*a3141fd3SAndroid Build Coastguard Worker ** 3814*a3141fd3SAndroid Build Coastguard Worker ** The sqlite3_uri_key(F,N) returns a pointer to the name (not 3815*a3141fd3SAndroid Build Coastguard Worker ** the value) of the N-th query parameter for filename F, or a NULL 3816*a3141fd3SAndroid Build Coastguard Worker ** pointer if N is less than zero or greater than the number of query 3817*a3141fd3SAndroid Build Coastguard Worker ** parameters minus 1. The N value is zero-based so N should be 0 to obtain 3818*a3141fd3SAndroid Build Coastguard Worker ** the name of the first query parameter, 1 for the second parameter, and 3819*a3141fd3SAndroid Build Coastguard Worker ** so forth. 3820*a3141fd3SAndroid Build Coastguard Worker ** 3821*a3141fd3SAndroid Build Coastguard Worker ** If F is a NULL pointer, then sqlite3_uri_parameter(F,P) returns NULL and 3822*a3141fd3SAndroid Build Coastguard Worker ** sqlite3_uri_boolean(F,P,B) returns B. If F is not a NULL pointer and 3823*a3141fd3SAndroid Build Coastguard Worker ** is not a database file pathname pointer that the SQLite core passed 3824*a3141fd3SAndroid Build Coastguard Worker ** into the xOpen VFS method, then the behavior of this routine is undefined 3825*a3141fd3SAndroid Build Coastguard Worker ** and probably undesirable. 3826*a3141fd3SAndroid Build Coastguard Worker ** 3827*a3141fd3SAndroid Build Coastguard Worker ** Beginning with SQLite [version 3.31.0] ([dateof:3.31.0]) the input F 3828*a3141fd3SAndroid Build Coastguard Worker ** parameter can also be the name of a rollback journal file or WAL file 3829*a3141fd3SAndroid Build Coastguard Worker ** in addition to the main database file. Prior to version 3.31.0, these 3830*a3141fd3SAndroid Build Coastguard Worker ** routines would only work if F was the name of the main database file. 3831*a3141fd3SAndroid Build Coastguard Worker ** When the F parameter is the name of the rollback journal or WAL file, 3832*a3141fd3SAndroid Build Coastguard Worker ** it has access to all the same query parameters as were found on the 3833*a3141fd3SAndroid Build Coastguard Worker ** main database file. 3834*a3141fd3SAndroid Build Coastguard Worker ** 3835*a3141fd3SAndroid Build Coastguard Worker ** See the [URI filename] documentation for additional information. 3836*a3141fd3SAndroid Build Coastguard Worker */ 3837*a3141fd3SAndroid Build Coastguard Worker SQLITE_API const char *sqlite3_uri_parameter(sqlite3_filename z, const char *zParam); 3838*a3141fd3SAndroid Build Coastguard Worker SQLITE_API int sqlite3_uri_boolean(sqlite3_filename z, const char *zParam, int bDefault); 3839*a3141fd3SAndroid Build Coastguard Worker SQLITE_API sqlite3_int64 sqlite3_uri_int64(sqlite3_filename, const char*, sqlite3_int64); 3840*a3141fd3SAndroid Build Coastguard Worker SQLITE_API const char *sqlite3_uri_key(sqlite3_filename z, int N); 3841*a3141fd3SAndroid Build Coastguard Worker 3842*a3141fd3SAndroid Build Coastguard Worker /* 3843*a3141fd3SAndroid Build Coastguard Worker ** CAPI3REF: Translate filenames 3844*a3141fd3SAndroid Build Coastguard Worker ** 3845*a3141fd3SAndroid Build Coastguard Worker ** These routines are available to [VFS|custom VFS implementations] for 3846*a3141fd3SAndroid Build Coastguard Worker ** translating filenames between the main database file, the journal file, 3847*a3141fd3SAndroid Build Coastguard Worker ** and the WAL file. 3848*a3141fd3SAndroid Build Coastguard Worker ** 3849*a3141fd3SAndroid Build Coastguard Worker ** If F is the name of an sqlite database file, journal file, or WAL file 3850*a3141fd3SAndroid Build Coastguard Worker ** passed by the SQLite core into the VFS, then sqlite3_filename_database(F) 3851*a3141fd3SAndroid Build Coastguard Worker ** returns the name of the corresponding database file. 3852*a3141fd3SAndroid Build Coastguard Worker ** 3853*a3141fd3SAndroid Build Coastguard Worker ** If F is the name of an sqlite database file, journal file, or WAL file 3854*a3141fd3SAndroid Build Coastguard Worker ** passed by the SQLite core into the VFS, or if F is a database filename 3855*a3141fd3SAndroid Build Coastguard Worker ** obtained from [sqlite3_db_filename()], then sqlite3_filename_journal(F) 3856*a3141fd3SAndroid Build Coastguard Worker ** returns the name of the corresponding rollback journal file. 3857*a3141fd3SAndroid Build Coastguard Worker ** 3858*a3141fd3SAndroid Build Coastguard Worker ** If F is the name of an sqlite database file, journal file, or WAL file 3859*a3141fd3SAndroid Build Coastguard Worker ** that was passed by the SQLite core into the VFS, or if F is a database 3860*a3141fd3SAndroid Build Coastguard Worker ** filename obtained from [sqlite3_db_filename()], then 3861*a3141fd3SAndroid Build Coastguard Worker ** sqlite3_filename_wal(F) returns the name of the corresponding 3862*a3141fd3SAndroid Build Coastguard Worker ** WAL file. 3863*a3141fd3SAndroid Build Coastguard Worker ** 3864*a3141fd3SAndroid Build Coastguard Worker ** In all of the above, if F is not the name of a database, journal or WAL 3865*a3141fd3SAndroid Build Coastguard Worker ** filename passed into the VFS from the SQLite core and F is not the 3866*a3141fd3SAndroid Build Coastguard Worker ** return value from [sqlite3_db_filename()], then the result is 3867*a3141fd3SAndroid Build Coastguard Worker ** undefined and is likely a memory access violation. 3868*a3141fd3SAndroid Build Coastguard Worker */ 3869*a3141fd3SAndroid Build Coastguard Worker SQLITE_API const char *sqlite3_filename_database(sqlite3_filename); 3870*a3141fd3SAndroid Build Coastguard Worker SQLITE_API const char *sqlite3_filename_journal(sqlite3_filename); 3871*a3141fd3SAndroid Build Coastguard Worker SQLITE_API const char *sqlite3_filename_wal(sqlite3_filename); 3872*a3141fd3SAndroid Build Coastguard Worker 3873*a3141fd3SAndroid Build Coastguard Worker /* 3874*a3141fd3SAndroid Build Coastguard Worker ** CAPI3REF: Database File Corresponding To A Journal 3875*a3141fd3SAndroid Build Coastguard Worker ** 3876*a3141fd3SAndroid Build Coastguard Worker ** ^If X is the name of a rollback or WAL-mode journal file that is 3877*a3141fd3SAndroid Build Coastguard Worker ** passed into the xOpen method of [sqlite3_vfs], then 3878*a3141fd3SAndroid Build Coastguard Worker ** sqlite3_database_file_object(X) returns a pointer to the [sqlite3_file] 3879*a3141fd3SAndroid Build Coastguard Worker ** object that represents the main database file. 3880*a3141fd3SAndroid Build Coastguard Worker ** 3881*a3141fd3SAndroid Build Coastguard Worker ** This routine is intended for use in custom [VFS] implementations 3882*a3141fd3SAndroid Build Coastguard Worker ** only. It is not a general-purpose interface. 3883*a3141fd3SAndroid Build Coastguard Worker ** The argument sqlite3_file_object(X) must be a filename pointer that 3884*a3141fd3SAndroid Build Coastguard Worker ** has been passed into [sqlite3_vfs].xOpen method where the 3885*a3141fd3SAndroid Build Coastguard Worker ** flags parameter to xOpen contains one of the bits 3886*a3141fd3SAndroid Build Coastguard Worker ** [SQLITE_OPEN_MAIN_JOURNAL] or [SQLITE_OPEN_WAL]. Any other use 3887*a3141fd3SAndroid Build Coastguard Worker ** of this routine results in undefined and probably undesirable 3888*a3141fd3SAndroid Build Coastguard Worker ** behavior. 3889*a3141fd3SAndroid Build Coastguard Worker */ 3890*a3141fd3SAndroid Build Coastguard Worker SQLITE_API sqlite3_file *sqlite3_database_file_object(const char*); 3891*a3141fd3SAndroid Build Coastguard Worker 3892*a3141fd3SAndroid Build Coastguard Worker /* 3893*a3141fd3SAndroid Build Coastguard Worker ** CAPI3REF: Create and Destroy VFS Filenames 3894*a3141fd3SAndroid Build Coastguard Worker ** 3895*a3141fd3SAndroid Build Coastguard Worker ** These interfaces are provided for use by [VFS shim] implementations and 3896*a3141fd3SAndroid Build Coastguard Worker ** are not useful outside of that context. 3897*a3141fd3SAndroid Build Coastguard Worker ** 3898*a3141fd3SAndroid Build Coastguard Worker ** The sqlite3_create_filename(D,J,W,N,P) allocates memory to hold a version of 3899*a3141fd3SAndroid Build Coastguard Worker ** database filename D with corresponding journal file J and WAL file W and 3900*a3141fd3SAndroid Build Coastguard Worker ** with N URI parameters key/values pairs in the array P. The result from 3901*a3141fd3SAndroid Build Coastguard Worker ** sqlite3_create_filename(D,J,W,N,P) is a pointer to a database filename that 3902*a3141fd3SAndroid Build Coastguard Worker ** is safe to pass to routines like: 3903*a3141fd3SAndroid Build Coastguard Worker ** <ul> 3904*a3141fd3SAndroid Build Coastguard Worker ** <li> [sqlite3_uri_parameter()], 3905*a3141fd3SAndroid Build Coastguard Worker ** <li> [sqlite3_uri_boolean()], 3906*a3141fd3SAndroid Build Coastguard Worker ** <li> [sqlite3_uri_int64()], 3907*a3141fd3SAndroid Build Coastguard Worker ** <li> [sqlite3_uri_key()], 3908*a3141fd3SAndroid Build Coastguard Worker ** <li> [sqlite3_filename_database()], 3909*a3141fd3SAndroid Build Coastguard Worker ** <li> [sqlite3_filename_journal()], or 3910*a3141fd3SAndroid Build Coastguard Worker ** <li> [sqlite3_filename_wal()]. 3911*a3141fd3SAndroid Build Coastguard Worker ** </ul> 3912*a3141fd3SAndroid Build Coastguard Worker ** If a memory allocation error occurs, sqlite3_create_filename() might 3913*a3141fd3SAndroid Build Coastguard Worker ** return a NULL pointer. The memory obtained from sqlite3_create_filename(X) 3914*a3141fd3SAndroid Build Coastguard Worker ** must be released by a corresponding call to sqlite3_free_filename(Y). 3915*a3141fd3SAndroid Build Coastguard Worker ** 3916*a3141fd3SAndroid Build Coastguard Worker ** The P parameter in sqlite3_create_filename(D,J,W,N,P) should be an array 3917*a3141fd3SAndroid Build Coastguard Worker ** of 2*N pointers to strings. Each pair of pointers in this array corresponds 3918*a3141fd3SAndroid Build Coastguard Worker ** to a key and value for a query parameter. The P parameter may be a NULL 3919*a3141fd3SAndroid Build Coastguard Worker ** pointer if N is zero. None of the 2*N pointers in the P array may be 3920*a3141fd3SAndroid Build Coastguard Worker ** NULL pointers and key pointers should not be empty strings. 3921*a3141fd3SAndroid Build Coastguard Worker ** None of the D, J, or W parameters to sqlite3_create_filename(D,J,W,N,P) may 3922*a3141fd3SAndroid Build Coastguard Worker ** be NULL pointers, though they can be empty strings. 3923*a3141fd3SAndroid Build Coastguard Worker ** 3924*a3141fd3SAndroid Build Coastguard Worker ** The sqlite3_free_filename(Y) routine releases a memory allocation 3925*a3141fd3SAndroid Build Coastguard Worker ** previously obtained from sqlite3_create_filename(). Invoking 3926*a3141fd3SAndroid Build Coastguard Worker ** sqlite3_free_filename(Y) where Y is a NULL pointer is a harmless no-op. 3927*a3141fd3SAndroid Build Coastguard Worker ** 3928*a3141fd3SAndroid Build Coastguard Worker ** If the Y parameter to sqlite3_free_filename(Y) is anything other 3929*a3141fd3SAndroid Build Coastguard Worker ** than a NULL pointer or a pointer previously acquired from 3930*a3141fd3SAndroid Build Coastguard Worker ** sqlite3_create_filename(), then bad things such as heap 3931*a3141fd3SAndroid Build Coastguard Worker ** corruption or segfaults may occur. The value Y should not be 3932*a3141fd3SAndroid Build Coastguard Worker ** used again after sqlite3_free_filename(Y) has been called. This means 3933*a3141fd3SAndroid Build Coastguard Worker ** that if the [sqlite3_vfs.xOpen()] method of a VFS has been called using Y, 3934*a3141fd3SAndroid Build Coastguard Worker ** then the corresponding [sqlite3_module.xClose() method should also be 3935*a3141fd3SAndroid Build Coastguard Worker ** invoked prior to calling sqlite3_free_filename(Y). 3936*a3141fd3SAndroid Build Coastguard Worker */ 3937*a3141fd3SAndroid Build Coastguard Worker SQLITE_API sqlite3_filename sqlite3_create_filename( 3938*a3141fd3SAndroid Build Coastguard Worker const char *zDatabase, 3939*a3141fd3SAndroid Build Coastguard Worker const char *zJournal, 3940*a3141fd3SAndroid Build Coastguard Worker const char *zWal, 3941*a3141fd3SAndroid Build Coastguard Worker int nParam, 3942*a3141fd3SAndroid Build Coastguard Worker const char **azParam 3943*a3141fd3SAndroid Build Coastguard Worker ); 3944*a3141fd3SAndroid Build Coastguard Worker SQLITE_API void sqlite3_free_filename(sqlite3_filename); 3945*a3141fd3SAndroid Build Coastguard Worker 3946*a3141fd3SAndroid Build Coastguard Worker /* 3947*a3141fd3SAndroid Build Coastguard Worker ** CAPI3REF: Error Codes And Messages 3948*a3141fd3SAndroid Build Coastguard Worker ** METHOD: sqlite3 3949*a3141fd3SAndroid Build Coastguard Worker ** 3950*a3141fd3SAndroid Build Coastguard Worker ** ^If the most recent sqlite3_* API call associated with 3951*a3141fd3SAndroid Build Coastguard Worker ** [database connection] D failed, then the sqlite3_errcode(D) interface 3952*a3141fd3SAndroid Build Coastguard Worker ** returns the numeric [result code] or [extended result code] for that 3953*a3141fd3SAndroid Build Coastguard Worker ** API call. 3954*a3141fd3SAndroid Build Coastguard Worker ** ^The sqlite3_extended_errcode() 3955*a3141fd3SAndroid Build Coastguard Worker ** interface is the same except that it always returns the 3956*a3141fd3SAndroid Build Coastguard Worker ** [extended result code] even when extended result codes are 3957*a3141fd3SAndroid Build Coastguard Worker ** disabled. 3958*a3141fd3SAndroid Build Coastguard Worker ** 3959*a3141fd3SAndroid Build Coastguard Worker ** The values returned by sqlite3_errcode() and/or 3960*a3141fd3SAndroid Build Coastguard Worker ** sqlite3_extended_errcode() might change with each API call. 3961*a3141fd3SAndroid Build Coastguard Worker ** Except, there are some interfaces that are guaranteed to never 3962*a3141fd3SAndroid Build Coastguard Worker ** change the value of the error code. The error-code preserving 3963*a3141fd3SAndroid Build Coastguard Worker ** interfaces include the following: 3964*a3141fd3SAndroid Build Coastguard Worker ** 3965*a3141fd3SAndroid Build Coastguard Worker ** <ul> 3966*a3141fd3SAndroid Build Coastguard Worker ** <li> sqlite3_errcode() 3967*a3141fd3SAndroid Build Coastguard Worker ** <li> sqlite3_extended_errcode() 3968*a3141fd3SAndroid Build Coastguard Worker ** <li> sqlite3_errmsg() 3969*a3141fd3SAndroid Build Coastguard Worker ** <li> sqlite3_errmsg16() 3970*a3141fd3SAndroid Build Coastguard Worker ** <li> sqlite3_error_offset() 3971*a3141fd3SAndroid Build Coastguard Worker ** </ul> 3972*a3141fd3SAndroid Build Coastguard Worker ** 3973*a3141fd3SAndroid Build Coastguard Worker ** ^The sqlite3_errmsg() and sqlite3_errmsg16() return English-language 3974*a3141fd3SAndroid Build Coastguard Worker ** text that describes the error, as either UTF-8 or UTF-16 respectively. 3975*a3141fd3SAndroid Build Coastguard Worker ** (See how SQLite handles [invalid UTF] for exceptions to this rule.) 3976*a3141fd3SAndroid Build Coastguard Worker ** ^(Memory to hold the error message string is managed internally. 3977*a3141fd3SAndroid Build Coastguard Worker ** The application does not need to worry about freeing the result. 3978*a3141fd3SAndroid Build Coastguard Worker ** However, the error string might be overwritten or deallocated by 3979*a3141fd3SAndroid Build Coastguard Worker ** subsequent calls to other SQLite interface functions.)^ 3980*a3141fd3SAndroid Build Coastguard Worker ** 3981*a3141fd3SAndroid Build Coastguard Worker ** ^The sqlite3_errstr() interface returns the English-language text 3982*a3141fd3SAndroid Build Coastguard Worker ** that describes the [result code], as UTF-8. 3983*a3141fd3SAndroid Build Coastguard Worker ** ^(Memory to hold the error message string is managed internally 3984*a3141fd3SAndroid Build Coastguard Worker ** and must not be freed by the application)^. 3985*a3141fd3SAndroid Build Coastguard Worker ** 3986*a3141fd3SAndroid Build Coastguard Worker ** ^If the most recent error references a specific token in the input 3987*a3141fd3SAndroid Build Coastguard Worker ** SQL, the sqlite3_error_offset() interface returns the byte offset 3988*a3141fd3SAndroid Build Coastguard Worker ** of the start of that token. ^The byte offset returned by 3989*a3141fd3SAndroid Build Coastguard Worker ** sqlite3_error_offset() assumes that the input SQL is UTF8. 3990*a3141fd3SAndroid Build Coastguard Worker ** ^If the most recent error does not reference a specific token in the input 3991*a3141fd3SAndroid Build Coastguard Worker ** SQL, then the sqlite3_error_offset() function returns -1. 3992*a3141fd3SAndroid Build Coastguard Worker ** 3993*a3141fd3SAndroid Build Coastguard Worker ** When the serialized [threading mode] is in use, it might be the 3994*a3141fd3SAndroid Build Coastguard Worker ** case that a second error occurs on a separate thread in between 3995*a3141fd3SAndroid Build Coastguard Worker ** the time of the first error and the call to these interfaces. 3996*a3141fd3SAndroid Build Coastguard Worker ** When that happens, the second error will be reported since these 3997*a3141fd3SAndroid Build Coastguard Worker ** interfaces always report the most recent result. To avoid 3998*a3141fd3SAndroid Build Coastguard Worker ** this, each thread can obtain exclusive use of the [database connection] D 3999*a3141fd3SAndroid Build Coastguard Worker ** by invoking [sqlite3_mutex_enter]([sqlite3_db_mutex](D)) before beginning 4000*a3141fd3SAndroid Build Coastguard Worker ** to use D and invoking [sqlite3_mutex_leave]([sqlite3_db_mutex](D)) after 4001*a3141fd3SAndroid Build Coastguard Worker ** all calls to the interfaces listed here are completed. 4002*a3141fd3SAndroid Build Coastguard Worker ** 4003*a3141fd3SAndroid Build Coastguard Worker ** If an interface fails with SQLITE_MISUSE, that means the interface 4004*a3141fd3SAndroid Build Coastguard Worker ** was invoked incorrectly by the application. In that case, the 4005*a3141fd3SAndroid Build Coastguard Worker ** error code and message may or may not be set. 4006*a3141fd3SAndroid Build Coastguard Worker */ 4007*a3141fd3SAndroid Build Coastguard Worker SQLITE_API int sqlite3_errcode(sqlite3 *db); 4008*a3141fd3SAndroid Build Coastguard Worker SQLITE_API int sqlite3_extended_errcode(sqlite3 *db); 4009*a3141fd3SAndroid Build Coastguard Worker SQLITE_API const char *sqlite3_errmsg(sqlite3*); 4010*a3141fd3SAndroid Build Coastguard Worker SQLITE_API const void *sqlite3_errmsg16(sqlite3*); 4011*a3141fd3SAndroid Build Coastguard Worker SQLITE_API const char *sqlite3_errstr(int); 4012*a3141fd3SAndroid Build Coastguard Worker SQLITE_API int sqlite3_error_offset(sqlite3 *db); 4013*a3141fd3SAndroid Build Coastguard Worker 4014*a3141fd3SAndroid Build Coastguard Worker /* 4015*a3141fd3SAndroid Build Coastguard Worker ** CAPI3REF: Prepared Statement Object 4016*a3141fd3SAndroid Build Coastguard Worker ** KEYWORDS: {prepared statement} {prepared statements} 4017*a3141fd3SAndroid Build Coastguard Worker ** 4018*a3141fd3SAndroid Build Coastguard Worker ** An instance of this object represents a single SQL statement that 4019*a3141fd3SAndroid Build Coastguard Worker ** has been compiled into binary form and is ready to be evaluated. 4020*a3141fd3SAndroid Build Coastguard Worker ** 4021*a3141fd3SAndroid Build Coastguard Worker ** Think of each SQL statement as a separate computer program. The 4022*a3141fd3SAndroid Build Coastguard Worker ** original SQL text is source code. A prepared statement object 4023*a3141fd3SAndroid Build Coastguard Worker ** is the compiled object code. All SQL must be converted into a 4024*a3141fd3SAndroid Build Coastguard Worker ** prepared statement before it can be run. 4025*a3141fd3SAndroid Build Coastguard Worker ** 4026*a3141fd3SAndroid Build Coastguard Worker ** The life-cycle of a prepared statement object usually goes like this: 4027*a3141fd3SAndroid Build Coastguard Worker ** 4028*a3141fd3SAndroid Build Coastguard Worker ** <ol> 4029*a3141fd3SAndroid Build Coastguard Worker ** <li> Create the prepared statement object using [sqlite3_prepare_v2()]. 4030*a3141fd3SAndroid Build Coastguard Worker ** <li> Bind values to [parameters] using the sqlite3_bind_*() 4031*a3141fd3SAndroid Build Coastguard Worker ** interfaces. 4032*a3141fd3SAndroid Build Coastguard Worker ** <li> Run the SQL by calling [sqlite3_step()] one or more times. 4033*a3141fd3SAndroid Build Coastguard Worker ** <li> Reset the prepared statement using [sqlite3_reset()] then go back 4034*a3141fd3SAndroid Build Coastguard Worker ** to step 2. Do this zero or more times. 4035*a3141fd3SAndroid Build Coastguard Worker ** <li> Destroy the object using [sqlite3_finalize()]. 4036*a3141fd3SAndroid Build Coastguard Worker ** </ol> 4037*a3141fd3SAndroid Build Coastguard Worker */ 4038*a3141fd3SAndroid Build Coastguard Worker typedef struct sqlite3_stmt sqlite3_stmt; 4039*a3141fd3SAndroid Build Coastguard Worker 4040*a3141fd3SAndroid Build Coastguard Worker /* 4041*a3141fd3SAndroid Build Coastguard Worker ** CAPI3REF: Run-time Limits 4042*a3141fd3SAndroid Build Coastguard Worker ** METHOD: sqlite3 4043*a3141fd3SAndroid Build Coastguard Worker ** 4044*a3141fd3SAndroid Build Coastguard Worker ** ^(This interface allows the size of various constructs to be limited 4045*a3141fd3SAndroid Build Coastguard Worker ** on a connection by connection basis. The first parameter is the 4046*a3141fd3SAndroid Build Coastguard Worker ** [database connection] whose limit is to be set or queried. The 4047*a3141fd3SAndroid Build Coastguard Worker ** second parameter is one of the [limit categories] that define a 4048*a3141fd3SAndroid Build Coastguard Worker ** class of constructs to be size limited. The third parameter is the 4049*a3141fd3SAndroid Build Coastguard Worker ** new limit for that construct.)^ 4050*a3141fd3SAndroid Build Coastguard Worker ** 4051*a3141fd3SAndroid Build Coastguard Worker ** ^If the new limit is a negative number, the limit is unchanged. 4052*a3141fd3SAndroid Build Coastguard Worker ** ^(For each limit category SQLITE_LIMIT_<i>NAME</i> there is a 4053*a3141fd3SAndroid Build Coastguard Worker ** [limits | hard upper bound] 4054*a3141fd3SAndroid Build Coastguard Worker ** set at compile-time by a C preprocessor macro called 4055*a3141fd3SAndroid Build Coastguard Worker ** [limits | SQLITE_MAX_<i>NAME</i>]. 4056*a3141fd3SAndroid Build Coastguard Worker ** (The "_LIMIT_" in the name is changed to "_MAX_".))^ 4057*a3141fd3SAndroid Build Coastguard Worker ** ^Attempts to increase a limit above its hard upper bound are 4058*a3141fd3SAndroid Build Coastguard Worker ** silently truncated to the hard upper bound. 4059*a3141fd3SAndroid Build Coastguard Worker ** 4060*a3141fd3SAndroid Build Coastguard Worker ** ^Regardless of whether or not the limit was changed, the 4061*a3141fd3SAndroid Build Coastguard Worker ** [sqlite3_limit()] interface returns the prior value of the limit. 4062*a3141fd3SAndroid Build Coastguard Worker ** ^Hence, to find the current value of a limit without changing it, 4063*a3141fd3SAndroid Build Coastguard Worker ** simply invoke this interface with the third parameter set to -1. 4064*a3141fd3SAndroid Build Coastguard Worker ** 4065*a3141fd3SAndroid Build Coastguard Worker ** Run-time limits are intended for use in applications that manage 4066*a3141fd3SAndroid Build Coastguard Worker ** both their own internal database and also databases that are controlled 4067*a3141fd3SAndroid Build Coastguard Worker ** by untrusted external sources. An example application might be a 4068*a3141fd3SAndroid Build Coastguard Worker ** web browser that has its own databases for storing history and 4069*a3141fd3SAndroid Build Coastguard Worker ** separate databases controlled by JavaScript applications downloaded 4070*a3141fd3SAndroid Build Coastguard Worker ** off the Internet. The internal databases can be given the 4071*a3141fd3SAndroid Build Coastguard Worker ** large, default limits. Databases managed by external sources can 4072*a3141fd3SAndroid Build Coastguard Worker ** be given much smaller limits designed to prevent a denial of service 4073*a3141fd3SAndroid Build Coastguard Worker ** attack. Developers might also want to use the [sqlite3_set_authorizer()] 4074*a3141fd3SAndroid Build Coastguard Worker ** interface to further control untrusted SQL. The size of the database 4075*a3141fd3SAndroid Build Coastguard Worker ** created by an untrusted script can be contained using the 4076*a3141fd3SAndroid Build Coastguard Worker ** [max_page_count] [PRAGMA]. 4077*a3141fd3SAndroid Build Coastguard Worker ** 4078*a3141fd3SAndroid Build Coastguard Worker ** New run-time limit categories may be added in future releases. 4079*a3141fd3SAndroid Build Coastguard Worker */ 4080*a3141fd3SAndroid Build Coastguard Worker SQLITE_API int sqlite3_limit(sqlite3*, int id, int newVal); 4081*a3141fd3SAndroid Build Coastguard Worker 4082*a3141fd3SAndroid Build Coastguard Worker /* 4083*a3141fd3SAndroid Build Coastguard Worker ** CAPI3REF: Run-Time Limit Categories 4084*a3141fd3SAndroid Build Coastguard Worker ** KEYWORDS: {limit category} {*limit categories} 4085*a3141fd3SAndroid Build Coastguard Worker ** 4086*a3141fd3SAndroid Build Coastguard Worker ** These constants define various performance limits 4087*a3141fd3SAndroid Build Coastguard Worker ** that can be lowered at run-time using [sqlite3_limit()]. 4088*a3141fd3SAndroid Build Coastguard Worker ** The synopsis of the meanings of the various limits is shown below. 4089*a3141fd3SAndroid Build Coastguard Worker ** Additional information is available at [limits | Limits in SQLite]. 4090*a3141fd3SAndroid Build Coastguard Worker ** 4091*a3141fd3SAndroid Build Coastguard Worker ** <dl> 4092*a3141fd3SAndroid Build Coastguard Worker ** [[SQLITE_LIMIT_LENGTH]] ^(<dt>SQLITE_LIMIT_LENGTH</dt> 4093*a3141fd3SAndroid Build Coastguard Worker ** <dd>The maximum size of any string or BLOB or table row, in bytes.<dd>)^ 4094*a3141fd3SAndroid Build Coastguard Worker ** 4095*a3141fd3SAndroid Build Coastguard Worker ** [[SQLITE_LIMIT_SQL_LENGTH]] ^(<dt>SQLITE_LIMIT_SQL_LENGTH</dt> 4096*a3141fd3SAndroid Build Coastguard Worker ** <dd>The maximum length of an SQL statement, in bytes.</dd>)^ 4097*a3141fd3SAndroid Build Coastguard Worker ** 4098*a3141fd3SAndroid Build Coastguard Worker ** [[SQLITE_LIMIT_COLUMN]] ^(<dt>SQLITE_LIMIT_COLUMN</dt> 4099*a3141fd3SAndroid Build Coastguard Worker ** <dd>The maximum number of columns in a table definition or in the 4100*a3141fd3SAndroid Build Coastguard Worker ** result set of a [SELECT] or the maximum number of columns in an index 4101*a3141fd3SAndroid Build Coastguard Worker ** or in an ORDER BY or GROUP BY clause.</dd>)^ 4102*a3141fd3SAndroid Build Coastguard Worker ** 4103*a3141fd3SAndroid Build Coastguard Worker ** [[SQLITE_LIMIT_EXPR_DEPTH]] ^(<dt>SQLITE_LIMIT_EXPR_DEPTH</dt> 4104*a3141fd3SAndroid Build Coastguard Worker ** <dd>The maximum depth of the parse tree on any expression.</dd>)^ 4105*a3141fd3SAndroid Build Coastguard Worker ** 4106*a3141fd3SAndroid Build Coastguard Worker ** [[SQLITE_LIMIT_COMPOUND_SELECT]] ^(<dt>SQLITE_LIMIT_COMPOUND_SELECT</dt> 4107*a3141fd3SAndroid Build Coastguard Worker ** <dd>The maximum number of terms in a compound SELECT statement.</dd>)^ 4108*a3141fd3SAndroid Build Coastguard Worker ** 4109*a3141fd3SAndroid Build Coastguard Worker ** [[SQLITE_LIMIT_VDBE_OP]] ^(<dt>SQLITE_LIMIT_VDBE_OP</dt> 4110*a3141fd3SAndroid Build Coastguard Worker ** <dd>The maximum number of instructions in a virtual machine program 4111*a3141fd3SAndroid Build Coastguard Worker ** used to implement an SQL statement. If [sqlite3_prepare_v2()] or 4112*a3141fd3SAndroid Build Coastguard Worker ** the equivalent tries to allocate space for more than this many opcodes 4113*a3141fd3SAndroid Build Coastguard Worker ** in a single prepared statement, an SQLITE_NOMEM error is returned.</dd>)^ 4114*a3141fd3SAndroid Build Coastguard Worker ** 4115*a3141fd3SAndroid Build Coastguard Worker ** [[SQLITE_LIMIT_FUNCTION_ARG]] ^(<dt>SQLITE_LIMIT_FUNCTION_ARG</dt> 4116*a3141fd3SAndroid Build Coastguard Worker ** <dd>The maximum number of arguments on a function.</dd>)^ 4117*a3141fd3SAndroid Build Coastguard Worker ** 4118*a3141fd3SAndroid Build Coastguard Worker ** [[SQLITE_LIMIT_ATTACHED]] ^(<dt>SQLITE_LIMIT_ATTACHED</dt> 4119*a3141fd3SAndroid Build Coastguard Worker ** <dd>The maximum number of [ATTACH | attached databases].)^</dd> 4120*a3141fd3SAndroid Build Coastguard Worker ** 4121*a3141fd3SAndroid Build Coastguard Worker ** [[SQLITE_LIMIT_LIKE_PATTERN_LENGTH]] 4122*a3141fd3SAndroid Build Coastguard Worker ** ^(<dt>SQLITE_LIMIT_LIKE_PATTERN_LENGTH</dt> 4123*a3141fd3SAndroid Build Coastguard Worker ** <dd>The maximum length of the pattern argument to the [LIKE] or 4124*a3141fd3SAndroid Build Coastguard Worker ** [GLOB] operators.</dd>)^ 4125*a3141fd3SAndroid Build Coastguard Worker ** 4126*a3141fd3SAndroid Build Coastguard Worker ** [[SQLITE_LIMIT_VARIABLE_NUMBER]] 4127*a3141fd3SAndroid Build Coastguard Worker ** ^(<dt>SQLITE_LIMIT_VARIABLE_NUMBER</dt> 4128*a3141fd3SAndroid Build Coastguard Worker ** <dd>The maximum index number of any [parameter] in an SQL statement.)^ 4129*a3141fd3SAndroid Build Coastguard Worker ** 4130*a3141fd3SAndroid Build Coastguard Worker ** [[SQLITE_LIMIT_TRIGGER_DEPTH]] ^(<dt>SQLITE_LIMIT_TRIGGER_DEPTH</dt> 4131*a3141fd3SAndroid Build Coastguard Worker ** <dd>The maximum depth of recursion for triggers.</dd>)^ 4132*a3141fd3SAndroid Build Coastguard Worker ** 4133*a3141fd3SAndroid Build Coastguard Worker ** [[SQLITE_LIMIT_WORKER_THREADS]] ^(<dt>SQLITE_LIMIT_WORKER_THREADS</dt> 4134*a3141fd3SAndroid Build Coastguard Worker ** <dd>The maximum number of auxiliary worker threads that a single 4135*a3141fd3SAndroid Build Coastguard Worker ** [prepared statement] may start.</dd>)^ 4136*a3141fd3SAndroid Build Coastguard Worker ** </dl> 4137*a3141fd3SAndroid Build Coastguard Worker */ 4138*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_LIMIT_LENGTH 0 4139*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_LIMIT_SQL_LENGTH 1 4140*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_LIMIT_COLUMN 2 4141*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_LIMIT_EXPR_DEPTH 3 4142*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_LIMIT_COMPOUND_SELECT 4 4143*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_LIMIT_VDBE_OP 5 4144*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_LIMIT_FUNCTION_ARG 6 4145*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_LIMIT_ATTACHED 7 4146*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_LIMIT_LIKE_PATTERN_LENGTH 8 4147*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_LIMIT_VARIABLE_NUMBER 9 4148*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_LIMIT_TRIGGER_DEPTH 10 4149*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_LIMIT_WORKER_THREADS 11 4150*a3141fd3SAndroid Build Coastguard Worker 4151*a3141fd3SAndroid Build Coastguard Worker /* 4152*a3141fd3SAndroid Build Coastguard Worker ** CAPI3REF: Prepare Flags 4153*a3141fd3SAndroid Build Coastguard Worker ** 4154*a3141fd3SAndroid Build Coastguard Worker ** These constants define various flags that can be passed into 4155*a3141fd3SAndroid Build Coastguard Worker ** "prepFlags" parameter of the [sqlite3_prepare_v3()] and 4156*a3141fd3SAndroid Build Coastguard Worker ** [sqlite3_prepare16_v3()] interfaces. 4157*a3141fd3SAndroid Build Coastguard Worker ** 4158*a3141fd3SAndroid Build Coastguard Worker ** New flags may be added in future releases of SQLite. 4159*a3141fd3SAndroid Build Coastguard Worker ** 4160*a3141fd3SAndroid Build Coastguard Worker ** <dl> 4161*a3141fd3SAndroid Build Coastguard Worker ** [[SQLITE_PREPARE_PERSISTENT]] ^(<dt>SQLITE_PREPARE_PERSISTENT</dt> 4162*a3141fd3SAndroid Build Coastguard Worker ** <dd>The SQLITE_PREPARE_PERSISTENT flag is a hint to the query planner 4163*a3141fd3SAndroid Build Coastguard Worker ** that the prepared statement will be retained for a long time and 4164*a3141fd3SAndroid Build Coastguard Worker ** probably reused many times.)^ ^Without this flag, [sqlite3_prepare_v3()] 4165*a3141fd3SAndroid Build Coastguard Worker ** and [sqlite3_prepare16_v3()] assume that the prepared statement will 4166*a3141fd3SAndroid Build Coastguard Worker ** be used just once or at most a few times and then destroyed using 4167*a3141fd3SAndroid Build Coastguard Worker ** [sqlite3_finalize()] relatively soon. The current implementation acts 4168*a3141fd3SAndroid Build Coastguard Worker ** on this hint by avoiding the use of [lookaside memory] so as not to 4169*a3141fd3SAndroid Build Coastguard Worker ** deplete the limited store of lookaside memory. Future versions of 4170*a3141fd3SAndroid Build Coastguard Worker ** SQLite may act on this hint differently. 4171*a3141fd3SAndroid Build Coastguard Worker ** 4172*a3141fd3SAndroid Build Coastguard Worker ** [[SQLITE_PREPARE_NORMALIZE]] <dt>SQLITE_PREPARE_NORMALIZE</dt> 4173*a3141fd3SAndroid Build Coastguard Worker ** <dd>The SQLITE_PREPARE_NORMALIZE flag is a no-op. This flag used 4174*a3141fd3SAndroid Build Coastguard Worker ** to be required for any prepared statement that wanted to use the 4175*a3141fd3SAndroid Build Coastguard Worker ** [sqlite3_normalized_sql()] interface. However, the 4176*a3141fd3SAndroid Build Coastguard Worker ** [sqlite3_normalized_sql()] interface is now available to all 4177*a3141fd3SAndroid Build Coastguard Worker ** prepared statements, regardless of whether or not they use this 4178*a3141fd3SAndroid Build Coastguard Worker ** flag. 4179*a3141fd3SAndroid Build Coastguard Worker ** 4180*a3141fd3SAndroid Build Coastguard Worker ** [[SQLITE_PREPARE_NO_VTAB]] <dt>SQLITE_PREPARE_NO_VTAB</dt> 4181*a3141fd3SAndroid Build Coastguard Worker ** <dd>The SQLITE_PREPARE_NO_VTAB flag causes the SQL compiler 4182*a3141fd3SAndroid Build Coastguard Worker ** to return an error (error code SQLITE_ERROR) if the statement uses 4183*a3141fd3SAndroid Build Coastguard Worker ** any virtual tables. 4184*a3141fd3SAndroid Build Coastguard Worker ** </dl> 4185*a3141fd3SAndroid Build Coastguard Worker */ 4186*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_PREPARE_PERSISTENT 0x01 4187*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_PREPARE_NORMALIZE 0x02 4188*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_PREPARE_NO_VTAB 0x04 4189*a3141fd3SAndroid Build Coastguard Worker 4190*a3141fd3SAndroid Build Coastguard Worker /* 4191*a3141fd3SAndroid Build Coastguard Worker ** CAPI3REF: Compiling An SQL Statement 4192*a3141fd3SAndroid Build Coastguard Worker ** KEYWORDS: {SQL statement compiler} 4193*a3141fd3SAndroid Build Coastguard Worker ** METHOD: sqlite3 4194*a3141fd3SAndroid Build Coastguard Worker ** CONSTRUCTOR: sqlite3_stmt 4195*a3141fd3SAndroid Build Coastguard Worker ** 4196*a3141fd3SAndroid Build Coastguard Worker ** To execute an SQL statement, it must first be compiled into a byte-code 4197*a3141fd3SAndroid Build Coastguard Worker ** program using one of these routines. Or, in other words, these routines 4198*a3141fd3SAndroid Build Coastguard Worker ** are constructors for the [prepared statement] object. 4199*a3141fd3SAndroid Build Coastguard Worker ** 4200*a3141fd3SAndroid Build Coastguard Worker ** The preferred routine to use is [sqlite3_prepare_v2()]. The 4201*a3141fd3SAndroid Build Coastguard Worker ** [sqlite3_prepare()] interface is legacy and should be avoided. 4202*a3141fd3SAndroid Build Coastguard Worker ** [sqlite3_prepare_v3()] has an extra "prepFlags" option that is used 4203*a3141fd3SAndroid Build Coastguard Worker ** for special purposes. 4204*a3141fd3SAndroid Build Coastguard Worker ** 4205*a3141fd3SAndroid Build Coastguard Worker ** The use of the UTF-8 interfaces is preferred, as SQLite currently 4206*a3141fd3SAndroid Build Coastguard Worker ** does all parsing using UTF-8. The UTF-16 interfaces are provided 4207*a3141fd3SAndroid Build Coastguard Worker ** as a convenience. The UTF-16 interfaces work by converting the 4208*a3141fd3SAndroid Build Coastguard Worker ** input text into UTF-8, then invoking the corresponding UTF-8 interface. 4209*a3141fd3SAndroid Build Coastguard Worker ** 4210*a3141fd3SAndroid Build Coastguard Worker ** The first argument, "db", is a [database connection] obtained from a 4211*a3141fd3SAndroid Build Coastguard Worker ** prior successful call to [sqlite3_open()], [sqlite3_open_v2()] or 4212*a3141fd3SAndroid Build Coastguard Worker ** [sqlite3_open16()]. The database connection must not have been closed. 4213*a3141fd3SAndroid Build Coastguard Worker ** 4214*a3141fd3SAndroid Build Coastguard Worker ** The second argument, "zSql", is the statement to be compiled, encoded 4215*a3141fd3SAndroid Build Coastguard Worker ** as either UTF-8 or UTF-16. The sqlite3_prepare(), sqlite3_prepare_v2(), 4216*a3141fd3SAndroid Build Coastguard Worker ** and sqlite3_prepare_v3() 4217*a3141fd3SAndroid Build Coastguard Worker ** interfaces use UTF-8, and sqlite3_prepare16(), sqlite3_prepare16_v2(), 4218*a3141fd3SAndroid Build Coastguard Worker ** and sqlite3_prepare16_v3() use UTF-16. 4219*a3141fd3SAndroid Build Coastguard Worker ** 4220*a3141fd3SAndroid Build Coastguard Worker ** ^If the nByte argument is negative, then zSql is read up to the 4221*a3141fd3SAndroid Build Coastguard Worker ** first zero terminator. ^If nByte is positive, then it is the 4222*a3141fd3SAndroid Build Coastguard Worker ** number of bytes read from zSql. ^If nByte is zero, then no prepared 4223*a3141fd3SAndroid Build Coastguard Worker ** statement is generated. 4224*a3141fd3SAndroid Build Coastguard Worker ** If the caller knows that the supplied string is nul-terminated, then 4225*a3141fd3SAndroid Build Coastguard Worker ** there is a small performance advantage to passing an nByte parameter that 4226*a3141fd3SAndroid Build Coastguard Worker ** is the number of bytes in the input string <i>including</i> 4227*a3141fd3SAndroid Build Coastguard Worker ** the nul-terminator. 4228*a3141fd3SAndroid Build Coastguard Worker ** 4229*a3141fd3SAndroid Build Coastguard Worker ** ^If pzTail is not NULL then *pzTail is made to point to the first byte 4230*a3141fd3SAndroid Build Coastguard Worker ** past the end of the first SQL statement in zSql. These routines only 4231*a3141fd3SAndroid Build Coastguard Worker ** compile the first statement in zSql, so *pzTail is left pointing to 4232*a3141fd3SAndroid Build Coastguard Worker ** what remains uncompiled. 4233*a3141fd3SAndroid Build Coastguard Worker ** 4234*a3141fd3SAndroid Build Coastguard Worker ** ^*ppStmt is left pointing to a compiled [prepared statement] that can be 4235*a3141fd3SAndroid Build Coastguard Worker ** executed using [sqlite3_step()]. ^If there is an error, *ppStmt is set 4236*a3141fd3SAndroid Build Coastguard Worker ** to NULL. ^If the input text contains no SQL (if the input is an empty 4237*a3141fd3SAndroid Build Coastguard Worker ** string or a comment) then *ppStmt is set to NULL. 4238*a3141fd3SAndroid Build Coastguard Worker ** The calling procedure is responsible for deleting the compiled 4239*a3141fd3SAndroid Build Coastguard Worker ** SQL statement using [sqlite3_finalize()] after it has finished with it. 4240*a3141fd3SAndroid Build Coastguard Worker ** ppStmt may not be NULL. 4241*a3141fd3SAndroid Build Coastguard Worker ** 4242*a3141fd3SAndroid Build Coastguard Worker ** ^On success, the sqlite3_prepare() family of routines return [SQLITE_OK]; 4243*a3141fd3SAndroid Build Coastguard Worker ** otherwise an [error code] is returned. 4244*a3141fd3SAndroid Build Coastguard Worker ** 4245*a3141fd3SAndroid Build Coastguard Worker ** The sqlite3_prepare_v2(), sqlite3_prepare_v3(), sqlite3_prepare16_v2(), 4246*a3141fd3SAndroid Build Coastguard Worker ** and sqlite3_prepare16_v3() interfaces are recommended for all new programs. 4247*a3141fd3SAndroid Build Coastguard Worker ** The older interfaces (sqlite3_prepare() and sqlite3_prepare16()) 4248*a3141fd3SAndroid Build Coastguard Worker ** are retained for backwards compatibility, but their use is discouraged. 4249*a3141fd3SAndroid Build Coastguard Worker ** ^In the "vX" interfaces, the prepared statement 4250*a3141fd3SAndroid Build Coastguard Worker ** that is returned (the [sqlite3_stmt] object) contains a copy of the 4251*a3141fd3SAndroid Build Coastguard Worker ** original SQL text. This causes the [sqlite3_step()] interface to 4252*a3141fd3SAndroid Build Coastguard Worker ** behave differently in three ways: 4253*a3141fd3SAndroid Build Coastguard Worker ** 4254*a3141fd3SAndroid Build Coastguard Worker ** <ol> 4255*a3141fd3SAndroid Build Coastguard Worker ** <li> 4256*a3141fd3SAndroid Build Coastguard Worker ** ^If the database schema changes, instead of returning [SQLITE_SCHEMA] as it 4257*a3141fd3SAndroid Build Coastguard Worker ** always used to do, [sqlite3_step()] will automatically recompile the SQL 4258*a3141fd3SAndroid Build Coastguard Worker ** statement and try to run it again. As many as [SQLITE_MAX_SCHEMA_RETRY] 4259*a3141fd3SAndroid Build Coastguard Worker ** retries will occur before sqlite3_step() gives up and returns an error. 4260*a3141fd3SAndroid Build Coastguard Worker ** </li> 4261*a3141fd3SAndroid Build Coastguard Worker ** 4262*a3141fd3SAndroid Build Coastguard Worker ** <li> 4263*a3141fd3SAndroid Build Coastguard Worker ** ^When an error occurs, [sqlite3_step()] will return one of the detailed 4264*a3141fd3SAndroid Build Coastguard Worker ** [error codes] or [extended error codes]. ^The legacy behavior was that 4265*a3141fd3SAndroid Build Coastguard Worker ** [sqlite3_step()] would only return a generic [SQLITE_ERROR] result code 4266*a3141fd3SAndroid Build Coastguard Worker ** and the application would have to make a second call to [sqlite3_reset()] 4267*a3141fd3SAndroid Build Coastguard Worker ** in order to find the underlying cause of the problem. With the "v2" prepare 4268*a3141fd3SAndroid Build Coastguard Worker ** interfaces, the underlying reason for the error is returned immediately. 4269*a3141fd3SAndroid Build Coastguard Worker ** </li> 4270*a3141fd3SAndroid Build Coastguard Worker ** 4271*a3141fd3SAndroid Build Coastguard Worker ** <li> 4272*a3141fd3SAndroid Build Coastguard Worker ** ^If the specific value bound to a [parameter | host parameter] in the 4273*a3141fd3SAndroid Build Coastguard Worker ** WHERE clause might influence the choice of query plan for a statement, 4274*a3141fd3SAndroid Build Coastguard Worker ** then the statement will be automatically recompiled, as if there had been 4275*a3141fd3SAndroid Build Coastguard Worker ** a schema change, on the first [sqlite3_step()] call following any change 4276*a3141fd3SAndroid Build Coastguard Worker ** to the [sqlite3_bind_text | bindings] of that [parameter]. 4277*a3141fd3SAndroid Build Coastguard Worker ** ^The specific value of a WHERE-clause [parameter] might influence the 4278*a3141fd3SAndroid Build Coastguard Worker ** choice of query plan if the parameter is the left-hand side of a [LIKE] 4279*a3141fd3SAndroid Build Coastguard Worker ** or [GLOB] operator or if the parameter is compared to an indexed column 4280*a3141fd3SAndroid Build Coastguard Worker ** and the [SQLITE_ENABLE_STAT4] compile-time option is enabled. 4281*a3141fd3SAndroid Build Coastguard Worker ** </li> 4282*a3141fd3SAndroid Build Coastguard Worker ** </ol> 4283*a3141fd3SAndroid Build Coastguard Worker ** 4284*a3141fd3SAndroid Build Coastguard Worker ** <p>^sqlite3_prepare_v3() differs from sqlite3_prepare_v2() only in having 4285*a3141fd3SAndroid Build Coastguard Worker ** the extra prepFlags parameter, which is a bit array consisting of zero or 4286*a3141fd3SAndroid Build Coastguard Worker ** more of the [SQLITE_PREPARE_PERSISTENT|SQLITE_PREPARE_*] flags. ^The 4287*a3141fd3SAndroid Build Coastguard Worker ** sqlite3_prepare_v2() interface works exactly the same as 4288*a3141fd3SAndroid Build Coastguard Worker ** sqlite3_prepare_v3() with a zero prepFlags parameter. 4289*a3141fd3SAndroid Build Coastguard Worker */ 4290*a3141fd3SAndroid Build Coastguard Worker SQLITE_API int sqlite3_prepare( 4291*a3141fd3SAndroid Build Coastguard Worker sqlite3 *db, /* Database handle */ 4292*a3141fd3SAndroid Build Coastguard Worker const char *zSql, /* SQL statement, UTF-8 encoded */ 4293*a3141fd3SAndroid Build Coastguard Worker int nByte, /* Maximum length of zSql in bytes. */ 4294*a3141fd3SAndroid Build Coastguard Worker sqlite3_stmt **ppStmt, /* OUT: Statement handle */ 4295*a3141fd3SAndroid Build Coastguard Worker const char **pzTail /* OUT: Pointer to unused portion of zSql */ 4296*a3141fd3SAndroid Build Coastguard Worker ); 4297*a3141fd3SAndroid Build Coastguard Worker SQLITE_API int sqlite3_prepare_v2( 4298*a3141fd3SAndroid Build Coastguard Worker sqlite3 *db, /* Database handle */ 4299*a3141fd3SAndroid Build Coastguard Worker const char *zSql, /* SQL statement, UTF-8 encoded */ 4300*a3141fd3SAndroid Build Coastguard Worker int nByte, /* Maximum length of zSql in bytes. */ 4301*a3141fd3SAndroid Build Coastguard Worker sqlite3_stmt **ppStmt, /* OUT: Statement handle */ 4302*a3141fd3SAndroid Build Coastguard Worker const char **pzTail /* OUT: Pointer to unused portion of zSql */ 4303*a3141fd3SAndroid Build Coastguard Worker ); 4304*a3141fd3SAndroid Build Coastguard Worker SQLITE_API int sqlite3_prepare_v3( 4305*a3141fd3SAndroid Build Coastguard Worker sqlite3 *db, /* Database handle */ 4306*a3141fd3SAndroid Build Coastguard Worker const char *zSql, /* SQL statement, UTF-8 encoded */ 4307*a3141fd3SAndroid Build Coastguard Worker int nByte, /* Maximum length of zSql in bytes. */ 4308*a3141fd3SAndroid Build Coastguard Worker unsigned int prepFlags, /* Zero or more SQLITE_PREPARE_ flags */ 4309*a3141fd3SAndroid Build Coastguard Worker sqlite3_stmt **ppStmt, /* OUT: Statement handle */ 4310*a3141fd3SAndroid Build Coastguard Worker const char **pzTail /* OUT: Pointer to unused portion of zSql */ 4311*a3141fd3SAndroid Build Coastguard Worker ); 4312*a3141fd3SAndroid Build Coastguard Worker SQLITE_API int sqlite3_prepare16( 4313*a3141fd3SAndroid Build Coastguard Worker sqlite3 *db, /* Database handle */ 4314*a3141fd3SAndroid Build Coastguard Worker const void *zSql, /* SQL statement, UTF-16 encoded */ 4315*a3141fd3SAndroid Build Coastguard Worker int nByte, /* Maximum length of zSql in bytes. */ 4316*a3141fd3SAndroid Build Coastguard Worker sqlite3_stmt **ppStmt, /* OUT: Statement handle */ 4317*a3141fd3SAndroid Build Coastguard Worker const void **pzTail /* OUT: Pointer to unused portion of zSql */ 4318*a3141fd3SAndroid Build Coastguard Worker ); 4319*a3141fd3SAndroid Build Coastguard Worker SQLITE_API int sqlite3_prepare16_v2( 4320*a3141fd3SAndroid Build Coastguard Worker sqlite3 *db, /* Database handle */ 4321*a3141fd3SAndroid Build Coastguard Worker const void *zSql, /* SQL statement, UTF-16 encoded */ 4322*a3141fd3SAndroid Build Coastguard Worker int nByte, /* Maximum length of zSql in bytes. */ 4323*a3141fd3SAndroid Build Coastguard Worker sqlite3_stmt **ppStmt, /* OUT: Statement handle */ 4324*a3141fd3SAndroid Build Coastguard Worker const void **pzTail /* OUT: Pointer to unused portion of zSql */ 4325*a3141fd3SAndroid Build Coastguard Worker ); 4326*a3141fd3SAndroid Build Coastguard Worker SQLITE_API int sqlite3_prepare16_v3( 4327*a3141fd3SAndroid Build Coastguard Worker sqlite3 *db, /* Database handle */ 4328*a3141fd3SAndroid Build Coastguard Worker const void *zSql, /* SQL statement, UTF-16 encoded */ 4329*a3141fd3SAndroid Build Coastguard Worker int nByte, /* Maximum length of zSql in bytes. */ 4330*a3141fd3SAndroid Build Coastguard Worker unsigned int prepFlags, /* Zero or more SQLITE_PREPARE_ flags */ 4331*a3141fd3SAndroid Build Coastguard Worker sqlite3_stmt **ppStmt, /* OUT: Statement handle */ 4332*a3141fd3SAndroid Build Coastguard Worker const void **pzTail /* OUT: Pointer to unused portion of zSql */ 4333*a3141fd3SAndroid Build Coastguard Worker ); 4334*a3141fd3SAndroid Build Coastguard Worker 4335*a3141fd3SAndroid Build Coastguard Worker /* 4336*a3141fd3SAndroid Build Coastguard Worker ** CAPI3REF: Retrieving Statement SQL 4337*a3141fd3SAndroid Build Coastguard Worker ** METHOD: sqlite3_stmt 4338*a3141fd3SAndroid Build Coastguard Worker ** 4339*a3141fd3SAndroid Build Coastguard Worker ** ^The sqlite3_sql(P) interface returns a pointer to a copy of the UTF-8 4340*a3141fd3SAndroid Build Coastguard Worker ** SQL text used to create [prepared statement] P if P was 4341*a3141fd3SAndroid Build Coastguard Worker ** created by [sqlite3_prepare_v2()], [sqlite3_prepare_v3()], 4342*a3141fd3SAndroid Build Coastguard Worker ** [sqlite3_prepare16_v2()], or [sqlite3_prepare16_v3()]. 4343*a3141fd3SAndroid Build Coastguard Worker ** ^The sqlite3_expanded_sql(P) interface returns a pointer to a UTF-8 4344*a3141fd3SAndroid Build Coastguard Worker ** string containing the SQL text of prepared statement P with 4345*a3141fd3SAndroid Build Coastguard Worker ** [bound parameters] expanded. 4346*a3141fd3SAndroid Build Coastguard Worker ** ^The sqlite3_normalized_sql(P) interface returns a pointer to a UTF-8 4347*a3141fd3SAndroid Build Coastguard Worker ** string containing the normalized SQL text of prepared statement P. The 4348*a3141fd3SAndroid Build Coastguard Worker ** semantics used to normalize a SQL statement are unspecified and subject 4349*a3141fd3SAndroid Build Coastguard Worker ** to change. At a minimum, literal values will be replaced with suitable 4350*a3141fd3SAndroid Build Coastguard Worker ** placeholders. 4351*a3141fd3SAndroid Build Coastguard Worker ** 4352*a3141fd3SAndroid Build Coastguard Worker ** ^(For example, if a prepared statement is created using the SQL 4353*a3141fd3SAndroid Build Coastguard Worker ** text "SELECT $abc,:xyz" and if parameter $abc is bound to integer 2345 4354*a3141fd3SAndroid Build Coastguard Worker ** and parameter :xyz is unbound, then sqlite3_sql() will return 4355*a3141fd3SAndroid Build Coastguard Worker ** the original string, "SELECT $abc,:xyz" but sqlite3_expanded_sql() 4356*a3141fd3SAndroid Build Coastguard Worker ** will return "SELECT 2345,NULL".)^ 4357*a3141fd3SAndroid Build Coastguard Worker ** 4358*a3141fd3SAndroid Build Coastguard Worker ** ^The sqlite3_expanded_sql() interface returns NULL if insufficient memory 4359*a3141fd3SAndroid Build Coastguard Worker ** is available to hold the result, or if the result would exceed the 4360*a3141fd3SAndroid Build Coastguard Worker ** the maximum string length determined by the [SQLITE_LIMIT_LENGTH]. 4361*a3141fd3SAndroid Build Coastguard Worker ** 4362*a3141fd3SAndroid Build Coastguard Worker ** ^The [SQLITE_TRACE_SIZE_LIMIT] compile-time option limits the size of 4363*a3141fd3SAndroid Build Coastguard Worker ** bound parameter expansions. ^The [SQLITE_OMIT_TRACE] compile-time 4364*a3141fd3SAndroid Build Coastguard Worker ** option causes sqlite3_expanded_sql() to always return NULL. 4365*a3141fd3SAndroid Build Coastguard Worker ** 4366*a3141fd3SAndroid Build Coastguard Worker ** ^The strings returned by sqlite3_sql(P) and sqlite3_normalized_sql(P) 4367*a3141fd3SAndroid Build Coastguard Worker ** are managed by SQLite and are automatically freed when the prepared 4368*a3141fd3SAndroid Build Coastguard Worker ** statement is finalized. 4369*a3141fd3SAndroid Build Coastguard Worker ** ^The string returned by sqlite3_expanded_sql(P), on the other hand, 4370*a3141fd3SAndroid Build Coastguard Worker ** is obtained from [sqlite3_malloc()] and must be freed by the application 4371*a3141fd3SAndroid Build Coastguard Worker ** by passing it to [sqlite3_free()]. 4372*a3141fd3SAndroid Build Coastguard Worker ** 4373*a3141fd3SAndroid Build Coastguard Worker ** ^The sqlite3_normalized_sql() interface is only available if 4374*a3141fd3SAndroid Build Coastguard Worker ** the [SQLITE_ENABLE_NORMALIZE] compile-time option is defined. 4375*a3141fd3SAndroid Build Coastguard Worker */ 4376*a3141fd3SAndroid Build Coastguard Worker SQLITE_API const char *sqlite3_sql(sqlite3_stmt *pStmt); 4377*a3141fd3SAndroid Build Coastguard Worker SQLITE_API char *sqlite3_expanded_sql(sqlite3_stmt *pStmt); 4378*a3141fd3SAndroid Build Coastguard Worker #ifdef SQLITE_ENABLE_NORMALIZE 4379*a3141fd3SAndroid Build Coastguard Worker SQLITE_API const char *sqlite3_normalized_sql(sqlite3_stmt *pStmt); 4380*a3141fd3SAndroid Build Coastguard Worker #endif 4381*a3141fd3SAndroid Build Coastguard Worker 4382*a3141fd3SAndroid Build Coastguard Worker /* 4383*a3141fd3SAndroid Build Coastguard Worker ** CAPI3REF: Determine If An SQL Statement Writes The Database 4384*a3141fd3SAndroid Build Coastguard Worker ** METHOD: sqlite3_stmt 4385*a3141fd3SAndroid Build Coastguard Worker ** 4386*a3141fd3SAndroid Build Coastguard Worker ** ^The sqlite3_stmt_readonly(X) interface returns true (non-zero) if 4387*a3141fd3SAndroid Build Coastguard Worker ** and only if the [prepared statement] X makes no direct changes to 4388*a3141fd3SAndroid Build Coastguard Worker ** the content of the database file. 4389*a3141fd3SAndroid Build Coastguard Worker ** 4390*a3141fd3SAndroid Build Coastguard Worker ** Note that [application-defined SQL functions] or 4391*a3141fd3SAndroid Build Coastguard Worker ** [virtual tables] might change the database indirectly as a side effect. 4392*a3141fd3SAndroid Build Coastguard Worker ** ^(For example, if an application defines a function "eval()" that 4393*a3141fd3SAndroid Build Coastguard Worker ** calls [sqlite3_exec()], then the following SQL statement would 4394*a3141fd3SAndroid Build Coastguard Worker ** change the database file through side-effects: 4395*a3141fd3SAndroid Build Coastguard Worker ** 4396*a3141fd3SAndroid Build Coastguard Worker ** <blockquote><pre> 4397*a3141fd3SAndroid Build Coastguard Worker ** SELECT eval('DELETE FROM t1') FROM t2; 4398*a3141fd3SAndroid Build Coastguard Worker ** </pre></blockquote> 4399*a3141fd3SAndroid Build Coastguard Worker ** 4400*a3141fd3SAndroid Build Coastguard Worker ** But because the [SELECT] statement does not change the database file 4401*a3141fd3SAndroid Build Coastguard Worker ** directly, sqlite3_stmt_readonly() would still return true.)^ 4402*a3141fd3SAndroid Build Coastguard Worker ** 4403*a3141fd3SAndroid Build Coastguard Worker ** ^Transaction control statements such as [BEGIN], [COMMIT], [ROLLBACK], 4404*a3141fd3SAndroid Build Coastguard Worker ** [SAVEPOINT], and [RELEASE] cause sqlite3_stmt_readonly() to return true, 4405*a3141fd3SAndroid Build Coastguard Worker ** since the statements themselves do not actually modify the database but 4406*a3141fd3SAndroid Build Coastguard Worker ** rather they control the timing of when other statements modify the 4407*a3141fd3SAndroid Build Coastguard Worker ** database. ^The [ATTACH] and [DETACH] statements also cause 4408*a3141fd3SAndroid Build Coastguard Worker ** sqlite3_stmt_readonly() to return true since, while those statements 4409*a3141fd3SAndroid Build Coastguard Worker ** change the configuration of a database connection, they do not make 4410*a3141fd3SAndroid Build Coastguard Worker ** changes to the content of the database files on disk. 4411*a3141fd3SAndroid Build Coastguard Worker ** ^The sqlite3_stmt_readonly() interface returns true for [BEGIN] since 4412*a3141fd3SAndroid Build Coastguard Worker ** [BEGIN] merely sets internal flags, but the [BEGIN|BEGIN IMMEDIATE] and 4413*a3141fd3SAndroid Build Coastguard Worker ** [BEGIN|BEGIN EXCLUSIVE] commands do touch the database and so 4414*a3141fd3SAndroid Build Coastguard Worker ** sqlite3_stmt_readonly() returns false for those commands. 4415*a3141fd3SAndroid Build Coastguard Worker ** 4416*a3141fd3SAndroid Build Coastguard Worker ** ^This routine returns false if there is any possibility that the 4417*a3141fd3SAndroid Build Coastguard Worker ** statement might change the database file. ^A false return does 4418*a3141fd3SAndroid Build Coastguard Worker ** not guarantee that the statement will change the database file. 4419*a3141fd3SAndroid Build Coastguard Worker ** ^For example, an UPDATE statement might have a WHERE clause that 4420*a3141fd3SAndroid Build Coastguard Worker ** makes it a no-op, but the sqlite3_stmt_readonly() result would still 4421*a3141fd3SAndroid Build Coastguard Worker ** be false. ^Similarly, a CREATE TABLE IF NOT EXISTS statement is a 4422*a3141fd3SAndroid Build Coastguard Worker ** read-only no-op if the table already exists, but 4423*a3141fd3SAndroid Build Coastguard Worker ** sqlite3_stmt_readonly() still returns false for such a statement. 4424*a3141fd3SAndroid Build Coastguard Worker ** 4425*a3141fd3SAndroid Build Coastguard Worker ** ^If prepared statement X is an [EXPLAIN] or [EXPLAIN QUERY PLAN] 4426*a3141fd3SAndroid Build Coastguard Worker ** statement, then sqlite3_stmt_readonly(X) returns the same value as 4427*a3141fd3SAndroid Build Coastguard Worker ** if the EXPLAIN or EXPLAIN QUERY PLAN prefix were omitted. 4428*a3141fd3SAndroid Build Coastguard Worker */ 4429*a3141fd3SAndroid Build Coastguard Worker SQLITE_API int sqlite3_stmt_readonly(sqlite3_stmt *pStmt); 4430*a3141fd3SAndroid Build Coastguard Worker 4431*a3141fd3SAndroid Build Coastguard Worker /* 4432*a3141fd3SAndroid Build Coastguard Worker ** CAPI3REF: Query The EXPLAIN Setting For A Prepared Statement 4433*a3141fd3SAndroid Build Coastguard Worker ** METHOD: sqlite3_stmt 4434*a3141fd3SAndroid Build Coastguard Worker ** 4435*a3141fd3SAndroid Build Coastguard Worker ** ^The sqlite3_stmt_isexplain(S) interface returns 1 if the 4436*a3141fd3SAndroid Build Coastguard Worker ** prepared statement S is an EXPLAIN statement, or 2 if the 4437*a3141fd3SAndroid Build Coastguard Worker ** statement S is an EXPLAIN QUERY PLAN. 4438*a3141fd3SAndroid Build Coastguard Worker ** ^The sqlite3_stmt_isexplain(S) interface returns 0 if S is 4439*a3141fd3SAndroid Build Coastguard Worker ** an ordinary statement or a NULL pointer. 4440*a3141fd3SAndroid Build Coastguard Worker */ 4441*a3141fd3SAndroid Build Coastguard Worker SQLITE_API int sqlite3_stmt_isexplain(sqlite3_stmt *pStmt); 4442*a3141fd3SAndroid Build Coastguard Worker 4443*a3141fd3SAndroid Build Coastguard Worker /* 4444*a3141fd3SAndroid Build Coastguard Worker ** CAPI3REF: Change The EXPLAIN Setting For A Prepared Statement 4445*a3141fd3SAndroid Build Coastguard Worker ** METHOD: sqlite3_stmt 4446*a3141fd3SAndroid Build Coastguard Worker ** 4447*a3141fd3SAndroid Build Coastguard Worker ** The sqlite3_stmt_explain(S,E) interface changes the EXPLAIN 4448*a3141fd3SAndroid Build Coastguard Worker ** setting for [prepared statement] S. If E is zero, then S becomes 4449*a3141fd3SAndroid Build Coastguard Worker ** a normal prepared statement. If E is 1, then S behaves as if 4450*a3141fd3SAndroid Build Coastguard Worker ** its SQL text began with "[EXPLAIN]". If E is 2, then S behaves as if 4451*a3141fd3SAndroid Build Coastguard Worker ** its SQL text began with "[EXPLAIN QUERY PLAN]". 4452*a3141fd3SAndroid Build Coastguard Worker ** 4453*a3141fd3SAndroid Build Coastguard Worker ** Calling sqlite3_stmt_explain(S,E) might cause S to be reprepared. 4454*a3141fd3SAndroid Build Coastguard Worker ** SQLite tries to avoid a reprepare, but a reprepare might be necessary 4455*a3141fd3SAndroid Build Coastguard Worker ** on the first transition into EXPLAIN or EXPLAIN QUERY PLAN mode. 4456*a3141fd3SAndroid Build Coastguard Worker ** 4457*a3141fd3SAndroid Build Coastguard Worker ** Because of the potential need to reprepare, a call to 4458*a3141fd3SAndroid Build Coastguard Worker ** sqlite3_stmt_explain(S,E) will fail with SQLITE_ERROR if S cannot be 4459*a3141fd3SAndroid Build Coastguard Worker ** reprepared because it was created using [sqlite3_prepare()] instead of 4460*a3141fd3SAndroid Build Coastguard Worker ** the newer [sqlite3_prepare_v2()] or [sqlite3_prepare_v3()] interfaces and 4461*a3141fd3SAndroid Build Coastguard Worker ** hence has no saved SQL text with which to reprepare. 4462*a3141fd3SAndroid Build Coastguard Worker ** 4463*a3141fd3SAndroid Build Coastguard Worker ** Changing the explain setting for a prepared statement does not change 4464*a3141fd3SAndroid Build Coastguard Worker ** the original SQL text for the statement. Hence, if the SQL text originally 4465*a3141fd3SAndroid Build Coastguard Worker ** began with EXPLAIN or EXPLAIN QUERY PLAN, but sqlite3_stmt_explain(S,0) 4466*a3141fd3SAndroid Build Coastguard Worker ** is called to convert the statement into an ordinary statement, the EXPLAIN 4467*a3141fd3SAndroid Build Coastguard Worker ** or EXPLAIN QUERY PLAN keywords will still appear in the sqlite3_sql(S) 4468*a3141fd3SAndroid Build Coastguard Worker ** output, even though the statement now acts like a normal SQL statement. 4469*a3141fd3SAndroid Build Coastguard Worker ** 4470*a3141fd3SAndroid Build Coastguard Worker ** This routine returns SQLITE_OK if the explain mode is successfully 4471*a3141fd3SAndroid Build Coastguard Worker ** changed, or an error code if the explain mode could not be changed. 4472*a3141fd3SAndroid Build Coastguard Worker ** The explain mode cannot be changed while a statement is active. 4473*a3141fd3SAndroid Build Coastguard Worker ** Hence, it is good practice to call [sqlite3_reset(S)] 4474*a3141fd3SAndroid Build Coastguard Worker ** immediately prior to calling sqlite3_stmt_explain(S,E). 4475*a3141fd3SAndroid Build Coastguard Worker */ 4476*a3141fd3SAndroid Build Coastguard Worker SQLITE_API int sqlite3_stmt_explain(sqlite3_stmt *pStmt, int eMode); 4477*a3141fd3SAndroid Build Coastguard Worker 4478*a3141fd3SAndroid Build Coastguard Worker /* 4479*a3141fd3SAndroid Build Coastguard Worker ** CAPI3REF: Determine If A Prepared Statement Has Been Reset 4480*a3141fd3SAndroid Build Coastguard Worker ** METHOD: sqlite3_stmt 4481*a3141fd3SAndroid Build Coastguard Worker ** 4482*a3141fd3SAndroid Build Coastguard Worker ** ^The sqlite3_stmt_busy(S) interface returns true (non-zero) if the 4483*a3141fd3SAndroid Build Coastguard Worker ** [prepared statement] S has been stepped at least once using 4484*a3141fd3SAndroid Build Coastguard Worker ** [sqlite3_step(S)] but has neither run to completion (returned 4485*a3141fd3SAndroid Build Coastguard Worker ** [SQLITE_DONE] from [sqlite3_step(S)]) nor 4486*a3141fd3SAndroid Build Coastguard Worker ** been reset using [sqlite3_reset(S)]. ^The sqlite3_stmt_busy(S) 4487*a3141fd3SAndroid Build Coastguard Worker ** interface returns false if S is a NULL pointer. If S is not a 4488*a3141fd3SAndroid Build Coastguard Worker ** NULL pointer and is not a pointer to a valid [prepared statement] 4489*a3141fd3SAndroid Build Coastguard Worker ** object, then the behavior is undefined and probably undesirable. 4490*a3141fd3SAndroid Build Coastguard Worker ** 4491*a3141fd3SAndroid Build Coastguard Worker ** This interface can be used in combination [sqlite3_next_stmt()] 4492*a3141fd3SAndroid Build Coastguard Worker ** to locate all prepared statements associated with a database 4493*a3141fd3SAndroid Build Coastguard Worker ** connection that are in need of being reset. This can be used, 4494*a3141fd3SAndroid Build Coastguard Worker ** for example, in diagnostic routines to search for prepared 4495*a3141fd3SAndroid Build Coastguard Worker ** statements that are holding a transaction open. 4496*a3141fd3SAndroid Build Coastguard Worker */ 4497*a3141fd3SAndroid Build Coastguard Worker SQLITE_API int sqlite3_stmt_busy(sqlite3_stmt*); 4498*a3141fd3SAndroid Build Coastguard Worker 4499*a3141fd3SAndroid Build Coastguard Worker /* 4500*a3141fd3SAndroid Build Coastguard Worker ** CAPI3REF: Dynamically Typed Value Object 4501*a3141fd3SAndroid Build Coastguard Worker ** KEYWORDS: {protected sqlite3_value} {unprotected sqlite3_value} 4502*a3141fd3SAndroid Build Coastguard Worker ** 4503*a3141fd3SAndroid Build Coastguard Worker ** SQLite uses the sqlite3_value object to represent all values 4504*a3141fd3SAndroid Build Coastguard Worker ** that can be stored in a database table. SQLite uses dynamic typing 4505*a3141fd3SAndroid Build Coastguard Worker ** for the values it stores. ^Values stored in sqlite3_value objects 4506*a3141fd3SAndroid Build Coastguard Worker ** can be integers, floating point values, strings, BLOBs, or NULL. 4507*a3141fd3SAndroid Build Coastguard Worker ** 4508*a3141fd3SAndroid Build Coastguard Worker ** An sqlite3_value object may be either "protected" or "unprotected". 4509*a3141fd3SAndroid Build Coastguard Worker ** Some interfaces require a protected sqlite3_value. Other interfaces 4510*a3141fd3SAndroid Build Coastguard Worker ** will accept either a protected or an unprotected sqlite3_value. 4511*a3141fd3SAndroid Build Coastguard Worker ** Every interface that accepts sqlite3_value arguments specifies 4512*a3141fd3SAndroid Build Coastguard Worker ** whether or not it requires a protected sqlite3_value. The 4513*a3141fd3SAndroid Build Coastguard Worker ** [sqlite3_value_dup()] interface can be used to construct a new 4514*a3141fd3SAndroid Build Coastguard Worker ** protected sqlite3_value from an unprotected sqlite3_value. 4515*a3141fd3SAndroid Build Coastguard Worker ** 4516*a3141fd3SAndroid Build Coastguard Worker ** The terms "protected" and "unprotected" refer to whether or not 4517*a3141fd3SAndroid Build Coastguard Worker ** a mutex is held. An internal mutex is held for a protected 4518*a3141fd3SAndroid Build Coastguard Worker ** sqlite3_value object but no mutex is held for an unprotected 4519*a3141fd3SAndroid Build Coastguard Worker ** sqlite3_value object. If SQLite is compiled to be single-threaded 4520*a3141fd3SAndroid Build Coastguard Worker ** (with [SQLITE_THREADSAFE=0] and with [sqlite3_threadsafe()] returning 0) 4521*a3141fd3SAndroid Build Coastguard Worker ** or if SQLite is run in one of reduced mutex modes 4522*a3141fd3SAndroid Build Coastguard Worker ** [SQLITE_CONFIG_SINGLETHREAD] or [SQLITE_CONFIG_MULTITHREAD] 4523*a3141fd3SAndroid Build Coastguard Worker ** then there is no distinction between protected and unprotected 4524*a3141fd3SAndroid Build Coastguard Worker ** sqlite3_value objects and they can be used interchangeably. However, 4525*a3141fd3SAndroid Build Coastguard Worker ** for maximum code portability it is recommended that applications 4526*a3141fd3SAndroid Build Coastguard Worker ** still make the distinction between protected and unprotected 4527*a3141fd3SAndroid Build Coastguard Worker ** sqlite3_value objects even when not strictly required. 4528*a3141fd3SAndroid Build Coastguard Worker ** 4529*a3141fd3SAndroid Build Coastguard Worker ** ^The sqlite3_value objects that are passed as parameters into the 4530*a3141fd3SAndroid Build Coastguard Worker ** implementation of [application-defined SQL functions] are protected. 4531*a3141fd3SAndroid Build Coastguard Worker ** ^The sqlite3_value objects returned by [sqlite3_vtab_rhs_value()] 4532*a3141fd3SAndroid Build Coastguard Worker ** are protected. 4533*a3141fd3SAndroid Build Coastguard Worker ** ^The sqlite3_value object returned by 4534*a3141fd3SAndroid Build Coastguard Worker ** [sqlite3_column_value()] is unprotected. 4535*a3141fd3SAndroid Build Coastguard Worker ** Unprotected sqlite3_value objects may only be used as arguments 4536*a3141fd3SAndroid Build Coastguard Worker ** to [sqlite3_result_value()], [sqlite3_bind_value()], and 4537*a3141fd3SAndroid Build Coastguard Worker ** [sqlite3_value_dup()]. 4538*a3141fd3SAndroid Build Coastguard Worker ** The [sqlite3_value_blob | sqlite3_value_type()] family of 4539*a3141fd3SAndroid Build Coastguard Worker ** interfaces require protected sqlite3_value objects. 4540*a3141fd3SAndroid Build Coastguard Worker */ 4541*a3141fd3SAndroid Build Coastguard Worker typedef struct sqlite3_value sqlite3_value; 4542*a3141fd3SAndroid Build Coastguard Worker 4543*a3141fd3SAndroid Build Coastguard Worker /* 4544*a3141fd3SAndroid Build Coastguard Worker ** CAPI3REF: SQL Function Context Object 4545*a3141fd3SAndroid Build Coastguard Worker ** 4546*a3141fd3SAndroid Build Coastguard Worker ** The context in which an SQL function executes is stored in an 4547*a3141fd3SAndroid Build Coastguard Worker ** sqlite3_context object. ^A pointer to an sqlite3_context object 4548*a3141fd3SAndroid Build Coastguard Worker ** is always first parameter to [application-defined SQL functions]. 4549*a3141fd3SAndroid Build Coastguard Worker ** The application-defined SQL function implementation will pass this 4550*a3141fd3SAndroid Build Coastguard Worker ** pointer through into calls to [sqlite3_result_int | sqlite3_result()], 4551*a3141fd3SAndroid Build Coastguard Worker ** [sqlite3_aggregate_context()], [sqlite3_user_data()], 4552*a3141fd3SAndroid Build Coastguard Worker ** [sqlite3_context_db_handle()], [sqlite3_get_auxdata()], 4553*a3141fd3SAndroid Build Coastguard Worker ** and/or [sqlite3_set_auxdata()]. 4554*a3141fd3SAndroid Build Coastguard Worker */ 4555*a3141fd3SAndroid Build Coastguard Worker typedef struct sqlite3_context sqlite3_context; 4556*a3141fd3SAndroid Build Coastguard Worker 4557*a3141fd3SAndroid Build Coastguard Worker /* 4558*a3141fd3SAndroid Build Coastguard Worker ** CAPI3REF: Binding Values To Prepared Statements 4559*a3141fd3SAndroid Build Coastguard Worker ** KEYWORDS: {host parameter} {host parameters} {host parameter name} 4560*a3141fd3SAndroid Build Coastguard Worker ** KEYWORDS: {SQL parameter} {SQL parameters} {parameter binding} 4561*a3141fd3SAndroid Build Coastguard Worker ** METHOD: sqlite3_stmt 4562*a3141fd3SAndroid Build Coastguard Worker ** 4563*a3141fd3SAndroid Build Coastguard Worker ** ^(In the SQL statement text input to [sqlite3_prepare_v2()] and its variants, 4564*a3141fd3SAndroid Build Coastguard Worker ** literals may be replaced by a [parameter] that matches one of following 4565*a3141fd3SAndroid Build Coastguard Worker ** templates: 4566*a3141fd3SAndroid Build Coastguard Worker ** 4567*a3141fd3SAndroid Build Coastguard Worker ** <ul> 4568*a3141fd3SAndroid Build Coastguard Worker ** <li> ? 4569*a3141fd3SAndroid Build Coastguard Worker ** <li> ?NNN 4570*a3141fd3SAndroid Build Coastguard Worker ** <li> :VVV 4571*a3141fd3SAndroid Build Coastguard Worker ** <li> @VVV 4572*a3141fd3SAndroid Build Coastguard Worker ** <li> $VVV 4573*a3141fd3SAndroid Build Coastguard Worker ** </ul> 4574*a3141fd3SAndroid Build Coastguard Worker ** 4575*a3141fd3SAndroid Build Coastguard Worker ** In the templates above, NNN represents an integer literal, 4576*a3141fd3SAndroid Build Coastguard Worker ** and VVV represents an alphanumeric identifier.)^ ^The values of these 4577*a3141fd3SAndroid Build Coastguard Worker ** parameters (also called "host parameter names" or "SQL parameters") 4578*a3141fd3SAndroid Build Coastguard Worker ** can be set using the sqlite3_bind_*() routines defined here. 4579*a3141fd3SAndroid Build Coastguard Worker ** 4580*a3141fd3SAndroid Build Coastguard Worker ** ^The first argument to the sqlite3_bind_*() routines is always 4581*a3141fd3SAndroid Build Coastguard Worker ** a pointer to the [sqlite3_stmt] object returned from 4582*a3141fd3SAndroid Build Coastguard Worker ** [sqlite3_prepare_v2()] or its variants. 4583*a3141fd3SAndroid Build Coastguard Worker ** 4584*a3141fd3SAndroid Build Coastguard Worker ** ^The second argument is the index of the SQL parameter to be set. 4585*a3141fd3SAndroid Build Coastguard Worker ** ^The leftmost SQL parameter has an index of 1. ^When the same named 4586*a3141fd3SAndroid Build Coastguard Worker ** SQL parameter is used more than once, second and subsequent 4587*a3141fd3SAndroid Build Coastguard Worker ** occurrences have the same index as the first occurrence. 4588*a3141fd3SAndroid Build Coastguard Worker ** ^The index for named parameters can be looked up using the 4589*a3141fd3SAndroid Build Coastguard Worker ** [sqlite3_bind_parameter_index()] API if desired. ^The index 4590*a3141fd3SAndroid Build Coastguard Worker ** for "?NNN" parameters is the value of NNN. 4591*a3141fd3SAndroid Build Coastguard Worker ** ^The NNN value must be between 1 and the [sqlite3_limit()] 4592*a3141fd3SAndroid Build Coastguard Worker ** parameter [SQLITE_LIMIT_VARIABLE_NUMBER] (default value: 32766). 4593*a3141fd3SAndroid Build Coastguard Worker ** 4594*a3141fd3SAndroid Build Coastguard Worker ** ^The third argument is the value to bind to the parameter. 4595*a3141fd3SAndroid Build Coastguard Worker ** ^If the third parameter to sqlite3_bind_text() or sqlite3_bind_text16() 4596*a3141fd3SAndroid Build Coastguard Worker ** or sqlite3_bind_blob() is a NULL pointer then the fourth parameter 4597*a3141fd3SAndroid Build Coastguard Worker ** is ignored and the end result is the same as sqlite3_bind_null(). 4598*a3141fd3SAndroid Build Coastguard Worker ** ^If the third parameter to sqlite3_bind_text() is not NULL, then 4599*a3141fd3SAndroid Build Coastguard Worker ** it should be a pointer to well-formed UTF8 text. 4600*a3141fd3SAndroid Build Coastguard Worker ** ^If the third parameter to sqlite3_bind_text16() is not NULL, then 4601*a3141fd3SAndroid Build Coastguard Worker ** it should be a pointer to well-formed UTF16 text. 4602*a3141fd3SAndroid Build Coastguard Worker ** ^If the third parameter to sqlite3_bind_text64() is not NULL, then 4603*a3141fd3SAndroid Build Coastguard Worker ** it should be a pointer to a well-formed unicode string that is 4604*a3141fd3SAndroid Build Coastguard Worker ** either UTF8 if the sixth parameter is SQLITE_UTF8, or UTF16 4605*a3141fd3SAndroid Build Coastguard Worker ** otherwise. 4606*a3141fd3SAndroid Build Coastguard Worker ** 4607*a3141fd3SAndroid Build Coastguard Worker ** [[byte-order determination rules]] ^The byte-order of 4608*a3141fd3SAndroid Build Coastguard Worker ** UTF16 input text is determined by the byte-order mark (BOM, U+FEFF) 4609*a3141fd3SAndroid Build Coastguard Worker ** found in first character, which is removed, or in the absence of a BOM 4610*a3141fd3SAndroid Build Coastguard Worker ** the byte order is the native byte order of the host 4611*a3141fd3SAndroid Build Coastguard Worker ** machine for sqlite3_bind_text16() or the byte order specified in 4612*a3141fd3SAndroid Build Coastguard Worker ** the 6th parameter for sqlite3_bind_text64().)^ 4613*a3141fd3SAndroid Build Coastguard Worker ** ^If UTF16 input text contains invalid unicode 4614*a3141fd3SAndroid Build Coastguard Worker ** characters, then SQLite might change those invalid characters 4615*a3141fd3SAndroid Build Coastguard Worker ** into the unicode replacement character: U+FFFD. 4616*a3141fd3SAndroid Build Coastguard Worker ** 4617*a3141fd3SAndroid Build Coastguard Worker ** ^(In those routines that have a fourth argument, its value is the 4618*a3141fd3SAndroid Build Coastguard Worker ** number of bytes in the parameter. To be clear: the value is the 4619*a3141fd3SAndroid Build Coastguard Worker ** number of <u>bytes</u> in the value, not the number of characters.)^ 4620*a3141fd3SAndroid Build Coastguard Worker ** ^If the fourth parameter to sqlite3_bind_text() or sqlite3_bind_text16() 4621*a3141fd3SAndroid Build Coastguard Worker ** is negative, then the length of the string is 4622*a3141fd3SAndroid Build Coastguard Worker ** the number of bytes up to the first zero terminator. 4623*a3141fd3SAndroid Build Coastguard Worker ** If the fourth parameter to sqlite3_bind_blob() is negative, then 4624*a3141fd3SAndroid Build Coastguard Worker ** the behavior is undefined. 4625*a3141fd3SAndroid Build Coastguard Worker ** If a non-negative fourth parameter is provided to sqlite3_bind_text() 4626*a3141fd3SAndroid Build Coastguard Worker ** or sqlite3_bind_text16() or sqlite3_bind_text64() then 4627*a3141fd3SAndroid Build Coastguard Worker ** that parameter must be the byte offset 4628*a3141fd3SAndroid Build Coastguard Worker ** where the NUL terminator would occur assuming the string were NUL 4629*a3141fd3SAndroid Build Coastguard Worker ** terminated. If any NUL characters occurs at byte offsets less than 4630*a3141fd3SAndroid Build Coastguard Worker ** the value of the fourth parameter then the resulting string value will 4631*a3141fd3SAndroid Build Coastguard Worker ** contain embedded NULs. The result of expressions involving strings 4632*a3141fd3SAndroid Build Coastguard Worker ** with embedded NULs is undefined. 4633*a3141fd3SAndroid Build Coastguard Worker ** 4634*a3141fd3SAndroid Build Coastguard Worker ** ^The fifth argument to the BLOB and string binding interfaces controls 4635*a3141fd3SAndroid Build Coastguard Worker ** or indicates the lifetime of the object referenced by the third parameter. 4636*a3141fd3SAndroid Build Coastguard Worker ** These three options exist: 4637*a3141fd3SAndroid Build Coastguard Worker ** ^ (1) A destructor to dispose of the BLOB or string after SQLite has finished 4638*a3141fd3SAndroid Build Coastguard Worker ** with it may be passed. ^It is called to dispose of the BLOB or string even 4639*a3141fd3SAndroid Build Coastguard Worker ** if the call to the bind API fails, except the destructor is not called if 4640*a3141fd3SAndroid Build Coastguard Worker ** the third parameter is a NULL pointer or the fourth parameter is negative. 4641*a3141fd3SAndroid Build Coastguard Worker ** ^ (2) The special constant, [SQLITE_STATIC], may be passed to indicate that 4642*a3141fd3SAndroid Build Coastguard Worker ** the application remains responsible for disposing of the object. ^In this 4643*a3141fd3SAndroid Build Coastguard Worker ** case, the object and the provided pointer to it must remain valid until 4644*a3141fd3SAndroid Build Coastguard Worker ** either the prepared statement is finalized or the same SQL parameter is 4645*a3141fd3SAndroid Build Coastguard Worker ** bound to something else, whichever occurs sooner. 4646*a3141fd3SAndroid Build Coastguard Worker ** ^ (3) The constant, [SQLITE_TRANSIENT], may be passed to indicate that the 4647*a3141fd3SAndroid Build Coastguard Worker ** object is to be copied prior to the return from sqlite3_bind_*(). ^The 4648*a3141fd3SAndroid Build Coastguard Worker ** object and pointer to it must remain valid until then. ^SQLite will then 4649*a3141fd3SAndroid Build Coastguard Worker ** manage the lifetime of its private copy. 4650*a3141fd3SAndroid Build Coastguard Worker ** 4651*a3141fd3SAndroid Build Coastguard Worker ** ^The sixth argument to sqlite3_bind_text64() must be one of 4652*a3141fd3SAndroid Build Coastguard Worker ** [SQLITE_UTF8], [SQLITE_UTF16], [SQLITE_UTF16BE], or [SQLITE_UTF16LE] 4653*a3141fd3SAndroid Build Coastguard Worker ** to specify the encoding of the text in the third parameter. If 4654*a3141fd3SAndroid Build Coastguard Worker ** the sixth argument to sqlite3_bind_text64() is not one of the 4655*a3141fd3SAndroid Build Coastguard Worker ** allowed values shown above, or if the text encoding is different 4656*a3141fd3SAndroid Build Coastguard Worker ** from the encoding specified by the sixth parameter, then the behavior 4657*a3141fd3SAndroid Build Coastguard Worker ** is undefined. 4658*a3141fd3SAndroid Build Coastguard Worker ** 4659*a3141fd3SAndroid Build Coastguard Worker ** ^The sqlite3_bind_zeroblob() routine binds a BLOB of length N that 4660*a3141fd3SAndroid Build Coastguard Worker ** is filled with zeroes. ^A zeroblob uses a fixed amount of memory 4661*a3141fd3SAndroid Build Coastguard Worker ** (just an integer to hold its size) while it is being processed. 4662*a3141fd3SAndroid Build Coastguard Worker ** Zeroblobs are intended to serve as placeholders for BLOBs whose 4663*a3141fd3SAndroid Build Coastguard Worker ** content is later written using 4664*a3141fd3SAndroid Build Coastguard Worker ** [sqlite3_blob_open | incremental BLOB I/O] routines. 4665*a3141fd3SAndroid Build Coastguard Worker ** ^A negative value for the zeroblob results in a zero-length BLOB. 4666*a3141fd3SAndroid Build Coastguard Worker ** 4667*a3141fd3SAndroid Build Coastguard Worker ** ^The sqlite3_bind_pointer(S,I,P,T,D) routine causes the I-th parameter in 4668*a3141fd3SAndroid Build Coastguard Worker ** [prepared statement] S to have an SQL value of NULL, but to also be 4669*a3141fd3SAndroid Build Coastguard Worker ** associated with the pointer P of type T. ^D is either a NULL pointer or 4670*a3141fd3SAndroid Build Coastguard Worker ** a pointer to a destructor function for P. ^SQLite will invoke the 4671*a3141fd3SAndroid Build Coastguard Worker ** destructor D with a single argument of P when it is finished using 4672*a3141fd3SAndroid Build Coastguard Worker ** P. The T parameter should be a static string, preferably a string 4673*a3141fd3SAndroid Build Coastguard Worker ** literal. The sqlite3_bind_pointer() routine is part of the 4674*a3141fd3SAndroid Build Coastguard Worker ** [pointer passing interface] added for SQLite 3.20.0. 4675*a3141fd3SAndroid Build Coastguard Worker ** 4676*a3141fd3SAndroid Build Coastguard Worker ** ^If any of the sqlite3_bind_*() routines are called with a NULL pointer 4677*a3141fd3SAndroid Build Coastguard Worker ** for the [prepared statement] or with a prepared statement for which 4678*a3141fd3SAndroid Build Coastguard Worker ** [sqlite3_step()] has been called more recently than [sqlite3_reset()], 4679*a3141fd3SAndroid Build Coastguard Worker ** then the call will return [SQLITE_MISUSE]. If any sqlite3_bind_() 4680*a3141fd3SAndroid Build Coastguard Worker ** routine is passed a [prepared statement] that has been finalized, the 4681*a3141fd3SAndroid Build Coastguard Worker ** result is undefined and probably harmful. 4682*a3141fd3SAndroid Build Coastguard Worker ** 4683*a3141fd3SAndroid Build Coastguard Worker ** ^Bindings are not cleared by the [sqlite3_reset()] routine. 4684*a3141fd3SAndroid Build Coastguard Worker ** ^Unbound parameters are interpreted as NULL. 4685*a3141fd3SAndroid Build Coastguard Worker ** 4686*a3141fd3SAndroid Build Coastguard Worker ** ^The sqlite3_bind_* routines return [SQLITE_OK] on success or an 4687*a3141fd3SAndroid Build Coastguard Worker ** [error code] if anything goes wrong. 4688*a3141fd3SAndroid Build Coastguard Worker ** ^[SQLITE_TOOBIG] might be returned if the size of a string or BLOB 4689*a3141fd3SAndroid Build Coastguard Worker ** exceeds limits imposed by [sqlite3_limit]([SQLITE_LIMIT_LENGTH]) or 4690*a3141fd3SAndroid Build Coastguard Worker ** [SQLITE_MAX_LENGTH]. 4691*a3141fd3SAndroid Build Coastguard Worker ** ^[SQLITE_RANGE] is returned if the parameter 4692*a3141fd3SAndroid Build Coastguard Worker ** index is out of range. ^[SQLITE_NOMEM] is returned if malloc() fails. 4693*a3141fd3SAndroid Build Coastguard Worker ** 4694*a3141fd3SAndroid Build Coastguard Worker ** See also: [sqlite3_bind_parameter_count()], 4695*a3141fd3SAndroid Build Coastguard Worker ** [sqlite3_bind_parameter_name()], and [sqlite3_bind_parameter_index()]. 4696*a3141fd3SAndroid Build Coastguard Worker */ 4697*a3141fd3SAndroid Build Coastguard Worker SQLITE_API int sqlite3_bind_blob(sqlite3_stmt*, int, const void*, int n, void(*)(void*)); 4698*a3141fd3SAndroid Build Coastguard Worker SQLITE_API int sqlite3_bind_blob64(sqlite3_stmt*, int, const void*, sqlite3_uint64, 4699*a3141fd3SAndroid Build Coastguard Worker void(*)(void*)); 4700*a3141fd3SAndroid Build Coastguard Worker SQLITE_API int sqlite3_bind_double(sqlite3_stmt*, int, double); 4701*a3141fd3SAndroid Build Coastguard Worker SQLITE_API int sqlite3_bind_int(sqlite3_stmt*, int, int); 4702*a3141fd3SAndroid Build Coastguard Worker SQLITE_API int sqlite3_bind_int64(sqlite3_stmt*, int, sqlite3_int64); 4703*a3141fd3SAndroid Build Coastguard Worker SQLITE_API int sqlite3_bind_null(sqlite3_stmt*, int); 4704*a3141fd3SAndroid Build Coastguard Worker SQLITE_API int sqlite3_bind_text(sqlite3_stmt*,int,const char*,int,void(*)(void*)); 4705*a3141fd3SAndroid Build Coastguard Worker SQLITE_API int sqlite3_bind_text16(sqlite3_stmt*, int, const void*, int, void(*)(void*)); 4706*a3141fd3SAndroid Build Coastguard Worker SQLITE_API int sqlite3_bind_text64(sqlite3_stmt*, int, const char*, sqlite3_uint64, 4707*a3141fd3SAndroid Build Coastguard Worker void(*)(void*), unsigned char encoding); 4708*a3141fd3SAndroid Build Coastguard Worker SQLITE_API int sqlite3_bind_value(sqlite3_stmt*, int, const sqlite3_value*); 4709*a3141fd3SAndroid Build Coastguard Worker SQLITE_API int sqlite3_bind_pointer(sqlite3_stmt*, int, void*, const char*,void(*)(void*)); 4710*a3141fd3SAndroid Build Coastguard Worker SQLITE_API int sqlite3_bind_zeroblob(sqlite3_stmt*, int, int n); 4711*a3141fd3SAndroid Build Coastguard Worker SQLITE_API int sqlite3_bind_zeroblob64(sqlite3_stmt*, int, sqlite3_uint64); 4712*a3141fd3SAndroid Build Coastguard Worker 4713*a3141fd3SAndroid Build Coastguard Worker /* 4714*a3141fd3SAndroid Build Coastguard Worker ** CAPI3REF: Number Of SQL Parameters 4715*a3141fd3SAndroid Build Coastguard Worker ** METHOD: sqlite3_stmt 4716*a3141fd3SAndroid Build Coastguard Worker ** 4717*a3141fd3SAndroid Build Coastguard Worker ** ^This routine can be used to find the number of [SQL parameters] 4718*a3141fd3SAndroid Build Coastguard Worker ** in a [prepared statement]. SQL parameters are tokens of the 4719*a3141fd3SAndroid Build Coastguard Worker ** form "?", "?NNN", ":AAA", "$AAA", or "@AAA" that serve as 4720*a3141fd3SAndroid Build Coastguard Worker ** placeholders for values that are [sqlite3_bind_blob | bound] 4721*a3141fd3SAndroid Build Coastguard Worker ** to the parameters at a later time. 4722*a3141fd3SAndroid Build Coastguard Worker ** 4723*a3141fd3SAndroid Build Coastguard Worker ** ^(This routine actually returns the index of the largest (rightmost) 4724*a3141fd3SAndroid Build Coastguard Worker ** parameter. For all forms except ?NNN, this will correspond to the 4725*a3141fd3SAndroid Build Coastguard Worker ** number of unique parameters. If parameters of the ?NNN form are used, 4726*a3141fd3SAndroid Build Coastguard Worker ** there may be gaps in the list.)^ 4727*a3141fd3SAndroid Build Coastguard Worker ** 4728*a3141fd3SAndroid Build Coastguard Worker ** See also: [sqlite3_bind_blob|sqlite3_bind()], 4729*a3141fd3SAndroid Build Coastguard Worker ** [sqlite3_bind_parameter_name()], and 4730*a3141fd3SAndroid Build Coastguard Worker ** [sqlite3_bind_parameter_index()]. 4731*a3141fd3SAndroid Build Coastguard Worker */ 4732*a3141fd3SAndroid Build Coastguard Worker SQLITE_API int sqlite3_bind_parameter_count(sqlite3_stmt*); 4733*a3141fd3SAndroid Build Coastguard Worker 4734*a3141fd3SAndroid Build Coastguard Worker /* 4735*a3141fd3SAndroid Build Coastguard Worker ** CAPI3REF: Name Of A Host Parameter 4736*a3141fd3SAndroid Build Coastguard Worker ** METHOD: sqlite3_stmt 4737*a3141fd3SAndroid Build Coastguard Worker ** 4738*a3141fd3SAndroid Build Coastguard Worker ** ^The sqlite3_bind_parameter_name(P,N) interface returns 4739*a3141fd3SAndroid Build Coastguard Worker ** the name of the N-th [SQL parameter] in the [prepared statement] P. 4740*a3141fd3SAndroid Build Coastguard Worker ** ^(SQL parameters of the form "?NNN" or ":AAA" or "@AAA" or "$AAA" 4741*a3141fd3SAndroid Build Coastguard Worker ** have a name which is the string "?NNN" or ":AAA" or "@AAA" or "$AAA" 4742*a3141fd3SAndroid Build Coastguard Worker ** respectively. 4743*a3141fd3SAndroid Build Coastguard Worker ** In other words, the initial ":" or "$" or "@" or "?" 4744*a3141fd3SAndroid Build Coastguard Worker ** is included as part of the name.)^ 4745*a3141fd3SAndroid Build Coastguard Worker ** ^Parameters of the form "?" without a following integer have no name 4746*a3141fd3SAndroid Build Coastguard Worker ** and are referred to as "nameless" or "anonymous parameters". 4747*a3141fd3SAndroid Build Coastguard Worker ** 4748*a3141fd3SAndroid Build Coastguard Worker ** ^The first host parameter has an index of 1, not 0. 4749*a3141fd3SAndroid Build Coastguard Worker ** 4750*a3141fd3SAndroid Build Coastguard Worker ** ^If the value N is out of range or if the N-th parameter is 4751*a3141fd3SAndroid Build Coastguard Worker ** nameless, then NULL is returned. ^The returned string is 4752*a3141fd3SAndroid Build Coastguard Worker ** always in UTF-8 encoding even if the named parameter was 4753*a3141fd3SAndroid Build Coastguard Worker ** originally specified as UTF-16 in [sqlite3_prepare16()], 4754*a3141fd3SAndroid Build Coastguard Worker ** [sqlite3_prepare16_v2()], or [sqlite3_prepare16_v3()]. 4755*a3141fd3SAndroid Build Coastguard Worker ** 4756*a3141fd3SAndroid Build Coastguard Worker ** See also: [sqlite3_bind_blob|sqlite3_bind()], 4757*a3141fd3SAndroid Build Coastguard Worker ** [sqlite3_bind_parameter_count()], and 4758*a3141fd3SAndroid Build Coastguard Worker ** [sqlite3_bind_parameter_index()]. 4759*a3141fd3SAndroid Build Coastguard Worker */ 4760*a3141fd3SAndroid Build Coastguard Worker SQLITE_API const char *sqlite3_bind_parameter_name(sqlite3_stmt*, int); 4761*a3141fd3SAndroid Build Coastguard Worker 4762*a3141fd3SAndroid Build Coastguard Worker /* 4763*a3141fd3SAndroid Build Coastguard Worker ** CAPI3REF: Index Of A Parameter With A Given Name 4764*a3141fd3SAndroid Build Coastguard Worker ** METHOD: sqlite3_stmt 4765*a3141fd3SAndroid Build Coastguard Worker ** 4766*a3141fd3SAndroid Build Coastguard Worker ** ^Return the index of an SQL parameter given its name. ^The 4767*a3141fd3SAndroid Build Coastguard Worker ** index value returned is suitable for use as the second 4768*a3141fd3SAndroid Build Coastguard Worker ** parameter to [sqlite3_bind_blob|sqlite3_bind()]. ^A zero 4769*a3141fd3SAndroid Build Coastguard Worker ** is returned if no matching parameter is found. ^The parameter 4770*a3141fd3SAndroid Build Coastguard Worker ** name must be given in UTF-8 even if the original statement 4771*a3141fd3SAndroid Build Coastguard Worker ** was prepared from UTF-16 text using [sqlite3_prepare16_v2()] or 4772*a3141fd3SAndroid Build Coastguard Worker ** [sqlite3_prepare16_v3()]. 4773*a3141fd3SAndroid Build Coastguard Worker ** 4774*a3141fd3SAndroid Build Coastguard Worker ** See also: [sqlite3_bind_blob|sqlite3_bind()], 4775*a3141fd3SAndroid Build Coastguard Worker ** [sqlite3_bind_parameter_count()], and 4776*a3141fd3SAndroid Build Coastguard Worker ** [sqlite3_bind_parameter_name()]. 4777*a3141fd3SAndroid Build Coastguard Worker */ 4778*a3141fd3SAndroid Build Coastguard Worker SQLITE_API int sqlite3_bind_parameter_index(sqlite3_stmt*, const char *zName); 4779*a3141fd3SAndroid Build Coastguard Worker 4780*a3141fd3SAndroid Build Coastguard Worker /* 4781*a3141fd3SAndroid Build Coastguard Worker ** CAPI3REF: Reset All Bindings On A Prepared Statement 4782*a3141fd3SAndroid Build Coastguard Worker ** METHOD: sqlite3_stmt 4783*a3141fd3SAndroid Build Coastguard Worker ** 4784*a3141fd3SAndroid Build Coastguard Worker ** ^Contrary to the intuition of many, [sqlite3_reset()] does not reset 4785*a3141fd3SAndroid Build Coastguard Worker ** the [sqlite3_bind_blob | bindings] on a [prepared statement]. 4786*a3141fd3SAndroid Build Coastguard Worker ** ^Use this routine to reset all host parameters to NULL. 4787*a3141fd3SAndroid Build Coastguard Worker */ 4788*a3141fd3SAndroid Build Coastguard Worker SQLITE_API int sqlite3_clear_bindings(sqlite3_stmt*); 4789*a3141fd3SAndroid Build Coastguard Worker 4790*a3141fd3SAndroid Build Coastguard Worker /* 4791*a3141fd3SAndroid Build Coastguard Worker ** CAPI3REF: Number Of Columns In A Result Set 4792*a3141fd3SAndroid Build Coastguard Worker ** METHOD: sqlite3_stmt 4793*a3141fd3SAndroid Build Coastguard Worker ** 4794*a3141fd3SAndroid Build Coastguard Worker ** ^Return the number of columns in the result set returned by the 4795*a3141fd3SAndroid Build Coastguard Worker ** [prepared statement]. ^If this routine returns 0, that means the 4796*a3141fd3SAndroid Build Coastguard Worker ** [prepared statement] returns no data (for example an [UPDATE]). 4797*a3141fd3SAndroid Build Coastguard Worker ** ^However, just because this routine returns a positive number does not 4798*a3141fd3SAndroid Build Coastguard Worker ** mean that one or more rows of data will be returned. ^A SELECT statement 4799*a3141fd3SAndroid Build Coastguard Worker ** will always have a positive sqlite3_column_count() but depending on the 4800*a3141fd3SAndroid Build Coastguard Worker ** WHERE clause constraints and the table content, it might return no rows. 4801*a3141fd3SAndroid Build Coastguard Worker ** 4802*a3141fd3SAndroid Build Coastguard Worker ** See also: [sqlite3_data_count()] 4803*a3141fd3SAndroid Build Coastguard Worker */ 4804*a3141fd3SAndroid Build Coastguard Worker SQLITE_API int sqlite3_column_count(sqlite3_stmt *pStmt); 4805*a3141fd3SAndroid Build Coastguard Worker 4806*a3141fd3SAndroid Build Coastguard Worker /* 4807*a3141fd3SAndroid Build Coastguard Worker ** CAPI3REF: Column Names In A Result Set 4808*a3141fd3SAndroid Build Coastguard Worker ** METHOD: sqlite3_stmt 4809*a3141fd3SAndroid Build Coastguard Worker ** 4810*a3141fd3SAndroid Build Coastguard Worker ** ^These routines return the name assigned to a particular column 4811*a3141fd3SAndroid Build Coastguard Worker ** in the result set of a [SELECT] statement. ^The sqlite3_column_name() 4812*a3141fd3SAndroid Build Coastguard Worker ** interface returns a pointer to a zero-terminated UTF-8 string 4813*a3141fd3SAndroid Build Coastguard Worker ** and sqlite3_column_name16() returns a pointer to a zero-terminated 4814*a3141fd3SAndroid Build Coastguard Worker ** UTF-16 string. ^The first parameter is the [prepared statement] 4815*a3141fd3SAndroid Build Coastguard Worker ** that implements the [SELECT] statement. ^The second parameter is the 4816*a3141fd3SAndroid Build Coastguard Worker ** column number. ^The leftmost column is number 0. 4817*a3141fd3SAndroid Build Coastguard Worker ** 4818*a3141fd3SAndroid Build Coastguard Worker ** ^The returned string pointer is valid until either the [prepared statement] 4819*a3141fd3SAndroid Build Coastguard Worker ** is destroyed by [sqlite3_finalize()] or until the statement is automatically 4820*a3141fd3SAndroid Build Coastguard Worker ** reprepared by the first call to [sqlite3_step()] for a particular run 4821*a3141fd3SAndroid Build Coastguard Worker ** or until the next call to 4822*a3141fd3SAndroid Build Coastguard Worker ** sqlite3_column_name() or sqlite3_column_name16() on the same column. 4823*a3141fd3SAndroid Build Coastguard Worker ** 4824*a3141fd3SAndroid Build Coastguard Worker ** ^If sqlite3_malloc() fails during the processing of either routine 4825*a3141fd3SAndroid Build Coastguard Worker ** (for example during a conversion from UTF-8 to UTF-16) then a 4826*a3141fd3SAndroid Build Coastguard Worker ** NULL pointer is returned. 4827*a3141fd3SAndroid Build Coastguard Worker ** 4828*a3141fd3SAndroid Build Coastguard Worker ** ^The name of a result column is the value of the "AS" clause for 4829*a3141fd3SAndroid Build Coastguard Worker ** that column, if there is an AS clause. If there is no AS clause 4830*a3141fd3SAndroid Build Coastguard Worker ** then the name of the column is unspecified and may change from 4831*a3141fd3SAndroid Build Coastguard Worker ** one release of SQLite to the next. 4832*a3141fd3SAndroid Build Coastguard Worker */ 4833*a3141fd3SAndroid Build Coastguard Worker SQLITE_API const char *sqlite3_column_name(sqlite3_stmt*, int N); 4834*a3141fd3SAndroid Build Coastguard Worker SQLITE_API const void *sqlite3_column_name16(sqlite3_stmt*, int N); 4835*a3141fd3SAndroid Build Coastguard Worker 4836*a3141fd3SAndroid Build Coastguard Worker /* 4837*a3141fd3SAndroid Build Coastguard Worker ** CAPI3REF: Source Of Data In A Query Result 4838*a3141fd3SAndroid Build Coastguard Worker ** METHOD: sqlite3_stmt 4839*a3141fd3SAndroid Build Coastguard Worker ** 4840*a3141fd3SAndroid Build Coastguard Worker ** ^These routines provide a means to determine the database, table, and 4841*a3141fd3SAndroid Build Coastguard Worker ** table column that is the origin of a particular result column in 4842*a3141fd3SAndroid Build Coastguard Worker ** [SELECT] statement. 4843*a3141fd3SAndroid Build Coastguard Worker ** ^The name of the database or table or column can be returned as 4844*a3141fd3SAndroid Build Coastguard Worker ** either a UTF-8 or UTF-16 string. ^The _database_ routines return 4845*a3141fd3SAndroid Build Coastguard Worker ** the database name, the _table_ routines return the table name, and 4846*a3141fd3SAndroid Build Coastguard Worker ** the origin_ routines return the column name. 4847*a3141fd3SAndroid Build Coastguard Worker ** ^The returned string is valid until the [prepared statement] is destroyed 4848*a3141fd3SAndroid Build Coastguard Worker ** using [sqlite3_finalize()] or until the statement is automatically 4849*a3141fd3SAndroid Build Coastguard Worker ** reprepared by the first call to [sqlite3_step()] for a particular run 4850*a3141fd3SAndroid Build Coastguard Worker ** or until the same information is requested 4851*a3141fd3SAndroid Build Coastguard Worker ** again in a different encoding. 4852*a3141fd3SAndroid Build Coastguard Worker ** 4853*a3141fd3SAndroid Build Coastguard Worker ** ^The names returned are the original un-aliased names of the 4854*a3141fd3SAndroid Build Coastguard Worker ** database, table, and column. 4855*a3141fd3SAndroid Build Coastguard Worker ** 4856*a3141fd3SAndroid Build Coastguard Worker ** ^The first argument to these interfaces is a [prepared statement]. 4857*a3141fd3SAndroid Build Coastguard Worker ** ^These functions return information about the Nth result column returned by 4858*a3141fd3SAndroid Build Coastguard Worker ** the statement, where N is the second function argument. 4859*a3141fd3SAndroid Build Coastguard Worker ** ^The left-most column is column 0 for these routines. 4860*a3141fd3SAndroid Build Coastguard Worker ** 4861*a3141fd3SAndroid Build Coastguard Worker ** ^If the Nth column returned by the statement is an expression or 4862*a3141fd3SAndroid Build Coastguard Worker ** subquery and is not a column value, then all of these functions return 4863*a3141fd3SAndroid Build Coastguard Worker ** NULL. ^These routines might also return NULL if a memory allocation error 4864*a3141fd3SAndroid Build Coastguard Worker ** occurs. ^Otherwise, they return the name of the attached database, table, 4865*a3141fd3SAndroid Build Coastguard Worker ** or column that query result column was extracted from. 4866*a3141fd3SAndroid Build Coastguard Worker ** 4867*a3141fd3SAndroid Build Coastguard Worker ** ^As with all other SQLite APIs, those whose names end with "16" return 4868*a3141fd3SAndroid Build Coastguard Worker ** UTF-16 encoded strings and the other functions return UTF-8. 4869*a3141fd3SAndroid Build Coastguard Worker ** 4870*a3141fd3SAndroid Build Coastguard Worker ** ^These APIs are only available if the library was compiled with the 4871*a3141fd3SAndroid Build Coastguard Worker ** [SQLITE_ENABLE_COLUMN_METADATA] C-preprocessor symbol. 4872*a3141fd3SAndroid Build Coastguard Worker ** 4873*a3141fd3SAndroid Build Coastguard Worker ** If two or more threads call one or more 4874*a3141fd3SAndroid Build Coastguard Worker ** [sqlite3_column_database_name | column metadata interfaces] 4875*a3141fd3SAndroid Build Coastguard Worker ** for the same [prepared statement] and result column 4876*a3141fd3SAndroid Build Coastguard Worker ** at the same time then the results are undefined. 4877*a3141fd3SAndroid Build Coastguard Worker */ 4878*a3141fd3SAndroid Build Coastguard Worker SQLITE_API const char *sqlite3_column_database_name(sqlite3_stmt*,int); 4879*a3141fd3SAndroid Build Coastguard Worker SQLITE_API const void *sqlite3_column_database_name16(sqlite3_stmt*,int); 4880*a3141fd3SAndroid Build Coastguard Worker SQLITE_API const char *sqlite3_column_table_name(sqlite3_stmt*,int); 4881*a3141fd3SAndroid Build Coastguard Worker SQLITE_API const void *sqlite3_column_table_name16(sqlite3_stmt*,int); 4882*a3141fd3SAndroid Build Coastguard Worker SQLITE_API const char *sqlite3_column_origin_name(sqlite3_stmt*,int); 4883*a3141fd3SAndroid Build Coastguard Worker SQLITE_API const void *sqlite3_column_origin_name16(sqlite3_stmt*,int); 4884*a3141fd3SAndroid Build Coastguard Worker 4885*a3141fd3SAndroid Build Coastguard Worker /* 4886*a3141fd3SAndroid Build Coastguard Worker ** CAPI3REF: Declared Datatype Of A Query Result 4887*a3141fd3SAndroid Build Coastguard Worker ** METHOD: sqlite3_stmt 4888*a3141fd3SAndroid Build Coastguard Worker ** 4889*a3141fd3SAndroid Build Coastguard Worker ** ^(The first parameter is a [prepared statement]. 4890*a3141fd3SAndroid Build Coastguard Worker ** If this statement is a [SELECT] statement and the Nth column of the 4891*a3141fd3SAndroid Build Coastguard Worker ** returned result set of that [SELECT] is a table column (not an 4892*a3141fd3SAndroid Build Coastguard Worker ** expression or subquery) then the declared type of the table 4893*a3141fd3SAndroid Build Coastguard Worker ** column is returned.)^ ^If the Nth column of the result set is an 4894*a3141fd3SAndroid Build Coastguard Worker ** expression or subquery, then a NULL pointer is returned. 4895*a3141fd3SAndroid Build Coastguard Worker ** ^The returned string is always UTF-8 encoded. 4896*a3141fd3SAndroid Build Coastguard Worker ** 4897*a3141fd3SAndroid Build Coastguard Worker ** ^(For example, given the database schema: 4898*a3141fd3SAndroid Build Coastguard Worker ** 4899*a3141fd3SAndroid Build Coastguard Worker ** CREATE TABLE t1(c1 VARIANT); 4900*a3141fd3SAndroid Build Coastguard Worker ** 4901*a3141fd3SAndroid Build Coastguard Worker ** and the following statement to be compiled: 4902*a3141fd3SAndroid Build Coastguard Worker ** 4903*a3141fd3SAndroid Build Coastguard Worker ** SELECT c1 + 1, c1 FROM t1; 4904*a3141fd3SAndroid Build Coastguard Worker ** 4905*a3141fd3SAndroid Build Coastguard Worker ** this routine would return the string "VARIANT" for the second result 4906*a3141fd3SAndroid Build Coastguard Worker ** column (i==1), and a NULL pointer for the first result column (i==0).)^ 4907*a3141fd3SAndroid Build Coastguard Worker ** 4908*a3141fd3SAndroid Build Coastguard Worker ** ^SQLite uses dynamic run-time typing. ^So just because a column 4909*a3141fd3SAndroid Build Coastguard Worker ** is declared to contain a particular type does not mean that the 4910*a3141fd3SAndroid Build Coastguard Worker ** data stored in that column is of the declared type. SQLite is 4911*a3141fd3SAndroid Build Coastguard Worker ** strongly typed, but the typing is dynamic not static. ^Type 4912*a3141fd3SAndroid Build Coastguard Worker ** is associated with individual values, not with the containers 4913*a3141fd3SAndroid Build Coastguard Worker ** used to hold those values. 4914*a3141fd3SAndroid Build Coastguard Worker */ 4915*a3141fd3SAndroid Build Coastguard Worker SQLITE_API const char *sqlite3_column_decltype(sqlite3_stmt*,int); 4916*a3141fd3SAndroid Build Coastguard Worker SQLITE_API const void *sqlite3_column_decltype16(sqlite3_stmt*,int); 4917*a3141fd3SAndroid Build Coastguard Worker 4918*a3141fd3SAndroid Build Coastguard Worker /* 4919*a3141fd3SAndroid Build Coastguard Worker ** CAPI3REF: Evaluate An SQL Statement 4920*a3141fd3SAndroid Build Coastguard Worker ** METHOD: sqlite3_stmt 4921*a3141fd3SAndroid Build Coastguard Worker ** 4922*a3141fd3SAndroid Build Coastguard Worker ** After a [prepared statement] has been prepared using any of 4923*a3141fd3SAndroid Build Coastguard Worker ** [sqlite3_prepare_v2()], [sqlite3_prepare_v3()], [sqlite3_prepare16_v2()], 4924*a3141fd3SAndroid Build Coastguard Worker ** or [sqlite3_prepare16_v3()] or one of the legacy 4925*a3141fd3SAndroid Build Coastguard Worker ** interfaces [sqlite3_prepare()] or [sqlite3_prepare16()], this function 4926*a3141fd3SAndroid Build Coastguard Worker ** must be called one or more times to evaluate the statement. 4927*a3141fd3SAndroid Build Coastguard Worker ** 4928*a3141fd3SAndroid Build Coastguard Worker ** The details of the behavior of the sqlite3_step() interface depend 4929*a3141fd3SAndroid Build Coastguard Worker ** on whether the statement was prepared using the newer "vX" interfaces 4930*a3141fd3SAndroid Build Coastguard Worker ** [sqlite3_prepare_v3()], [sqlite3_prepare_v2()], [sqlite3_prepare16_v3()], 4931*a3141fd3SAndroid Build Coastguard Worker ** [sqlite3_prepare16_v2()] or the older legacy 4932*a3141fd3SAndroid Build Coastguard Worker ** interfaces [sqlite3_prepare()] and [sqlite3_prepare16()]. The use of the 4933*a3141fd3SAndroid Build Coastguard Worker ** new "vX" interface is recommended for new applications but the legacy 4934*a3141fd3SAndroid Build Coastguard Worker ** interface will continue to be supported. 4935*a3141fd3SAndroid Build Coastguard Worker ** 4936*a3141fd3SAndroid Build Coastguard Worker ** ^In the legacy interface, the return value will be either [SQLITE_BUSY], 4937*a3141fd3SAndroid Build Coastguard Worker ** [SQLITE_DONE], [SQLITE_ROW], [SQLITE_ERROR], or [SQLITE_MISUSE]. 4938*a3141fd3SAndroid Build Coastguard Worker ** ^With the "v2" interface, any of the other [result codes] or 4939*a3141fd3SAndroid Build Coastguard Worker ** [extended result codes] might be returned as well. 4940*a3141fd3SAndroid Build Coastguard Worker ** 4941*a3141fd3SAndroid Build Coastguard Worker ** ^[SQLITE_BUSY] means that the database engine was unable to acquire the 4942*a3141fd3SAndroid Build Coastguard Worker ** database locks it needs to do its job. ^If the statement is a [COMMIT] 4943*a3141fd3SAndroid Build Coastguard Worker ** or occurs outside of an explicit transaction, then you can retry the 4944*a3141fd3SAndroid Build Coastguard Worker ** statement. If the statement is not a [COMMIT] and occurs within an 4945*a3141fd3SAndroid Build Coastguard Worker ** explicit transaction then you should rollback the transaction before 4946*a3141fd3SAndroid Build Coastguard Worker ** continuing. 4947*a3141fd3SAndroid Build Coastguard Worker ** 4948*a3141fd3SAndroid Build Coastguard Worker ** ^[SQLITE_DONE] means that the statement has finished executing 4949*a3141fd3SAndroid Build Coastguard Worker ** successfully. sqlite3_step() should not be called again on this virtual 4950*a3141fd3SAndroid Build Coastguard Worker ** machine without first calling [sqlite3_reset()] to reset the virtual 4951*a3141fd3SAndroid Build Coastguard Worker ** machine back to its initial state. 4952*a3141fd3SAndroid Build Coastguard Worker ** 4953*a3141fd3SAndroid Build Coastguard Worker ** ^If the SQL statement being executed returns any data, then [SQLITE_ROW] 4954*a3141fd3SAndroid Build Coastguard Worker ** is returned each time a new row of data is ready for processing by the 4955*a3141fd3SAndroid Build Coastguard Worker ** caller. The values may be accessed using the [column access functions]. 4956*a3141fd3SAndroid Build Coastguard Worker ** sqlite3_step() is called again to retrieve the next row of data. 4957*a3141fd3SAndroid Build Coastguard Worker ** 4958*a3141fd3SAndroid Build Coastguard Worker ** ^[SQLITE_ERROR] means that a run-time error (such as a constraint 4959*a3141fd3SAndroid Build Coastguard Worker ** violation) has occurred. sqlite3_step() should not be called again on 4960*a3141fd3SAndroid Build Coastguard Worker ** the VM. More information may be found by calling [sqlite3_errmsg()]. 4961*a3141fd3SAndroid Build Coastguard Worker ** ^With the legacy interface, a more specific error code (for example, 4962*a3141fd3SAndroid Build Coastguard Worker ** [SQLITE_INTERRUPT], [SQLITE_SCHEMA], [SQLITE_CORRUPT], and so forth) 4963*a3141fd3SAndroid Build Coastguard Worker ** can be obtained by calling [sqlite3_reset()] on the 4964*a3141fd3SAndroid Build Coastguard Worker ** [prepared statement]. ^In the "v2" interface, 4965*a3141fd3SAndroid Build Coastguard Worker ** the more specific error code is returned directly by sqlite3_step(). 4966*a3141fd3SAndroid Build Coastguard Worker ** 4967*a3141fd3SAndroid Build Coastguard Worker ** [SQLITE_MISUSE] means that the this routine was called inappropriately. 4968*a3141fd3SAndroid Build Coastguard Worker ** Perhaps it was called on a [prepared statement] that has 4969*a3141fd3SAndroid Build Coastguard Worker ** already been [sqlite3_finalize | finalized] or on one that had 4970*a3141fd3SAndroid Build Coastguard Worker ** previously returned [SQLITE_ERROR] or [SQLITE_DONE]. Or it could 4971*a3141fd3SAndroid Build Coastguard Worker ** be the case that the same database connection is being used by two or 4972*a3141fd3SAndroid Build Coastguard Worker ** more threads at the same moment in time. 4973*a3141fd3SAndroid Build Coastguard Worker ** 4974*a3141fd3SAndroid Build Coastguard Worker ** For all versions of SQLite up to and including 3.6.23.1, a call to 4975*a3141fd3SAndroid Build Coastguard Worker ** [sqlite3_reset()] was required after sqlite3_step() returned anything 4976*a3141fd3SAndroid Build Coastguard Worker ** other than [SQLITE_ROW] before any subsequent invocation of 4977*a3141fd3SAndroid Build Coastguard Worker ** sqlite3_step(). Failure to reset the prepared statement using 4978*a3141fd3SAndroid Build Coastguard Worker ** [sqlite3_reset()] would result in an [SQLITE_MISUSE] return from 4979*a3141fd3SAndroid Build Coastguard Worker ** sqlite3_step(). But after [version 3.6.23.1] ([dateof:3.6.23.1], 4980*a3141fd3SAndroid Build Coastguard Worker ** sqlite3_step() began 4981*a3141fd3SAndroid Build Coastguard Worker ** calling [sqlite3_reset()] automatically in this circumstance rather 4982*a3141fd3SAndroid Build Coastguard Worker ** than returning [SQLITE_MISUSE]. This is not considered a compatibility 4983*a3141fd3SAndroid Build Coastguard Worker ** break because any application that ever receives an SQLITE_MISUSE error 4984*a3141fd3SAndroid Build Coastguard Worker ** is broken by definition. The [SQLITE_OMIT_AUTORESET] compile-time option 4985*a3141fd3SAndroid Build Coastguard Worker ** can be used to restore the legacy behavior. 4986*a3141fd3SAndroid Build Coastguard Worker ** 4987*a3141fd3SAndroid Build Coastguard Worker ** <b>Goofy Interface Alert:</b> In the legacy interface, the sqlite3_step() 4988*a3141fd3SAndroid Build Coastguard Worker ** API always returns a generic error code, [SQLITE_ERROR], following any 4989*a3141fd3SAndroid Build Coastguard Worker ** error other than [SQLITE_BUSY] and [SQLITE_MISUSE]. You must call 4990*a3141fd3SAndroid Build Coastguard Worker ** [sqlite3_reset()] or [sqlite3_finalize()] in order to find one of the 4991*a3141fd3SAndroid Build Coastguard Worker ** specific [error codes] that better describes the error. 4992*a3141fd3SAndroid Build Coastguard Worker ** We admit that this is a goofy design. The problem has been fixed 4993*a3141fd3SAndroid Build Coastguard Worker ** with the "v2" interface. If you prepare all of your SQL statements 4994*a3141fd3SAndroid Build Coastguard Worker ** using [sqlite3_prepare_v3()] or [sqlite3_prepare_v2()] 4995*a3141fd3SAndroid Build Coastguard Worker ** or [sqlite3_prepare16_v2()] or [sqlite3_prepare16_v3()] instead 4996*a3141fd3SAndroid Build Coastguard Worker ** of the legacy [sqlite3_prepare()] and [sqlite3_prepare16()] interfaces, 4997*a3141fd3SAndroid Build Coastguard Worker ** then the more specific [error codes] are returned directly 4998*a3141fd3SAndroid Build Coastguard Worker ** by sqlite3_step(). The use of the "vX" interfaces is recommended. 4999*a3141fd3SAndroid Build Coastguard Worker */ 5000*a3141fd3SAndroid Build Coastguard Worker SQLITE_API int sqlite3_step(sqlite3_stmt*); 5001*a3141fd3SAndroid Build Coastguard Worker 5002*a3141fd3SAndroid Build Coastguard Worker /* 5003*a3141fd3SAndroid Build Coastguard Worker ** CAPI3REF: Number of columns in a result set 5004*a3141fd3SAndroid Build Coastguard Worker ** METHOD: sqlite3_stmt 5005*a3141fd3SAndroid Build Coastguard Worker ** 5006*a3141fd3SAndroid Build Coastguard Worker ** ^The sqlite3_data_count(P) interface returns the number of columns in the 5007*a3141fd3SAndroid Build Coastguard Worker ** current row of the result set of [prepared statement] P. 5008*a3141fd3SAndroid Build Coastguard Worker ** ^If prepared statement P does not have results ready to return 5009*a3141fd3SAndroid Build Coastguard Worker ** (via calls to the [sqlite3_column_int | sqlite3_column()] family of 5010*a3141fd3SAndroid Build Coastguard Worker ** interfaces) then sqlite3_data_count(P) returns 0. 5011*a3141fd3SAndroid Build Coastguard Worker ** ^The sqlite3_data_count(P) routine also returns 0 if P is a NULL pointer. 5012*a3141fd3SAndroid Build Coastguard Worker ** ^The sqlite3_data_count(P) routine returns 0 if the previous call to 5013*a3141fd3SAndroid Build Coastguard Worker ** [sqlite3_step](P) returned [SQLITE_DONE]. ^The sqlite3_data_count(P) 5014*a3141fd3SAndroid Build Coastguard Worker ** will return non-zero if previous call to [sqlite3_step](P) returned 5015*a3141fd3SAndroid Build Coastguard Worker ** [SQLITE_ROW], except in the case of the [PRAGMA incremental_vacuum] 5016*a3141fd3SAndroid Build Coastguard Worker ** where it always returns zero since each step of that multi-step 5017*a3141fd3SAndroid Build Coastguard Worker ** pragma returns 0 columns of data. 5018*a3141fd3SAndroid Build Coastguard Worker ** 5019*a3141fd3SAndroid Build Coastguard Worker ** See also: [sqlite3_column_count()] 5020*a3141fd3SAndroid Build Coastguard Worker */ 5021*a3141fd3SAndroid Build Coastguard Worker SQLITE_API int sqlite3_data_count(sqlite3_stmt *pStmt); 5022*a3141fd3SAndroid Build Coastguard Worker 5023*a3141fd3SAndroid Build Coastguard Worker /* 5024*a3141fd3SAndroid Build Coastguard Worker ** CAPI3REF: Fundamental Datatypes 5025*a3141fd3SAndroid Build Coastguard Worker ** KEYWORDS: SQLITE_TEXT 5026*a3141fd3SAndroid Build Coastguard Worker ** 5027*a3141fd3SAndroid Build Coastguard Worker ** ^(Every value in SQLite has one of five fundamental datatypes: 5028*a3141fd3SAndroid Build Coastguard Worker ** 5029*a3141fd3SAndroid Build Coastguard Worker ** <ul> 5030*a3141fd3SAndroid Build Coastguard Worker ** <li> 64-bit signed integer 5031*a3141fd3SAndroid Build Coastguard Worker ** <li> 64-bit IEEE floating point number 5032*a3141fd3SAndroid Build Coastguard Worker ** <li> string 5033*a3141fd3SAndroid Build Coastguard Worker ** <li> BLOB 5034*a3141fd3SAndroid Build Coastguard Worker ** <li> NULL 5035*a3141fd3SAndroid Build Coastguard Worker ** </ul>)^ 5036*a3141fd3SAndroid Build Coastguard Worker ** 5037*a3141fd3SAndroid Build Coastguard Worker ** These constants are codes for each of those types. 5038*a3141fd3SAndroid Build Coastguard Worker ** 5039*a3141fd3SAndroid Build Coastguard Worker ** Note that the SQLITE_TEXT constant was also used in SQLite version 2 5040*a3141fd3SAndroid Build Coastguard Worker ** for a completely different meaning. Software that links against both 5041*a3141fd3SAndroid Build Coastguard Worker ** SQLite version 2 and SQLite version 3 should use SQLITE3_TEXT, not 5042*a3141fd3SAndroid Build Coastguard Worker ** SQLITE_TEXT. 5043*a3141fd3SAndroid Build Coastguard Worker */ 5044*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_INTEGER 1 5045*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_FLOAT 2 5046*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_BLOB 4 5047*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_NULL 5 5048*a3141fd3SAndroid Build Coastguard Worker #ifdef SQLITE_TEXT 5049*a3141fd3SAndroid Build Coastguard Worker # undef SQLITE_TEXT 5050*a3141fd3SAndroid Build Coastguard Worker #else 5051*a3141fd3SAndroid Build Coastguard Worker # define SQLITE_TEXT 3 5052*a3141fd3SAndroid Build Coastguard Worker #endif 5053*a3141fd3SAndroid Build Coastguard Worker #define SQLITE3_TEXT 3 5054*a3141fd3SAndroid Build Coastguard Worker 5055*a3141fd3SAndroid Build Coastguard Worker /* 5056*a3141fd3SAndroid Build Coastguard Worker ** CAPI3REF: Result Values From A Query 5057*a3141fd3SAndroid Build Coastguard Worker ** KEYWORDS: {column access functions} 5058*a3141fd3SAndroid Build Coastguard Worker ** METHOD: sqlite3_stmt 5059*a3141fd3SAndroid Build Coastguard Worker ** 5060*a3141fd3SAndroid Build Coastguard Worker ** <b>Summary:</b> 5061*a3141fd3SAndroid Build Coastguard Worker ** <blockquote><table border=0 cellpadding=0 cellspacing=0> 5062*a3141fd3SAndroid Build Coastguard Worker ** <tr><td><b>sqlite3_column_blob</b><td>→<td>BLOB result 5063*a3141fd3SAndroid Build Coastguard Worker ** <tr><td><b>sqlite3_column_double</b><td>→<td>REAL result 5064*a3141fd3SAndroid Build Coastguard Worker ** <tr><td><b>sqlite3_column_int</b><td>→<td>32-bit INTEGER result 5065*a3141fd3SAndroid Build Coastguard Worker ** <tr><td><b>sqlite3_column_int64</b><td>→<td>64-bit INTEGER result 5066*a3141fd3SAndroid Build Coastguard Worker ** <tr><td><b>sqlite3_column_text</b><td>→<td>UTF-8 TEXT result 5067*a3141fd3SAndroid Build Coastguard Worker ** <tr><td><b>sqlite3_column_text16</b><td>→<td>UTF-16 TEXT result 5068*a3141fd3SAndroid Build Coastguard Worker ** <tr><td><b>sqlite3_column_value</b><td>→<td>The result as an 5069*a3141fd3SAndroid Build Coastguard Worker ** [sqlite3_value|unprotected sqlite3_value] object. 5070*a3141fd3SAndroid Build Coastguard Worker ** <tr><td> <td> <td> 5071*a3141fd3SAndroid Build Coastguard Worker ** <tr><td><b>sqlite3_column_bytes</b><td>→<td>Size of a BLOB 5072*a3141fd3SAndroid Build Coastguard Worker ** or a UTF-8 TEXT result in bytes 5073*a3141fd3SAndroid Build Coastguard Worker ** <tr><td><b>sqlite3_column_bytes16 </b> 5074*a3141fd3SAndroid Build Coastguard Worker ** <td>→ <td>Size of UTF-16 5075*a3141fd3SAndroid Build Coastguard Worker ** TEXT in bytes 5076*a3141fd3SAndroid Build Coastguard Worker ** <tr><td><b>sqlite3_column_type</b><td>→<td>Default 5077*a3141fd3SAndroid Build Coastguard Worker ** datatype of the result 5078*a3141fd3SAndroid Build Coastguard Worker ** </table></blockquote> 5079*a3141fd3SAndroid Build Coastguard Worker ** 5080*a3141fd3SAndroid Build Coastguard Worker ** <b>Details:</b> 5081*a3141fd3SAndroid Build Coastguard Worker ** 5082*a3141fd3SAndroid Build Coastguard Worker ** ^These routines return information about a single column of the current 5083*a3141fd3SAndroid Build Coastguard Worker ** result row of a query. ^In every case the first argument is a pointer 5084*a3141fd3SAndroid Build Coastguard Worker ** to the [prepared statement] that is being evaluated (the [sqlite3_stmt*] 5085*a3141fd3SAndroid Build Coastguard Worker ** that was returned from [sqlite3_prepare_v2()] or one of its variants) 5086*a3141fd3SAndroid Build Coastguard Worker ** and the second argument is the index of the column for which information 5087*a3141fd3SAndroid Build Coastguard Worker ** should be returned. ^The leftmost column of the result set has the index 0. 5088*a3141fd3SAndroid Build Coastguard Worker ** ^The number of columns in the result can be determined using 5089*a3141fd3SAndroid Build Coastguard Worker ** [sqlite3_column_count()]. 5090*a3141fd3SAndroid Build Coastguard Worker ** 5091*a3141fd3SAndroid Build Coastguard Worker ** If the SQL statement does not currently point to a valid row, or if the 5092*a3141fd3SAndroid Build Coastguard Worker ** column index is out of range, the result is undefined. 5093*a3141fd3SAndroid Build Coastguard Worker ** These routines may only be called when the most recent call to 5094*a3141fd3SAndroid Build Coastguard Worker ** [sqlite3_step()] has returned [SQLITE_ROW] and neither 5095*a3141fd3SAndroid Build Coastguard Worker ** [sqlite3_reset()] nor [sqlite3_finalize()] have been called subsequently. 5096*a3141fd3SAndroid Build Coastguard Worker ** If any of these routines are called after [sqlite3_reset()] or 5097*a3141fd3SAndroid Build Coastguard Worker ** [sqlite3_finalize()] or after [sqlite3_step()] has returned 5098*a3141fd3SAndroid Build Coastguard Worker ** something other than [SQLITE_ROW], the results are undefined. 5099*a3141fd3SAndroid Build Coastguard Worker ** If [sqlite3_step()] or [sqlite3_reset()] or [sqlite3_finalize()] 5100*a3141fd3SAndroid Build Coastguard Worker ** are called from a different thread while any of these routines 5101*a3141fd3SAndroid Build Coastguard Worker ** are pending, then the results are undefined. 5102*a3141fd3SAndroid Build Coastguard Worker ** 5103*a3141fd3SAndroid Build Coastguard Worker ** The first six interfaces (_blob, _double, _int, _int64, _text, and _text16) 5104*a3141fd3SAndroid Build Coastguard Worker ** each return the value of a result column in a specific data format. If 5105*a3141fd3SAndroid Build Coastguard Worker ** the result column is not initially in the requested format (for example, 5106*a3141fd3SAndroid Build Coastguard Worker ** if the query returns an integer but the sqlite3_column_text() interface 5107*a3141fd3SAndroid Build Coastguard Worker ** is used to extract the value) then an automatic type conversion is performed. 5108*a3141fd3SAndroid Build Coastguard Worker ** 5109*a3141fd3SAndroid Build Coastguard Worker ** ^The sqlite3_column_type() routine returns the 5110*a3141fd3SAndroid Build Coastguard Worker ** [SQLITE_INTEGER | datatype code] for the initial data type 5111*a3141fd3SAndroid Build Coastguard Worker ** of the result column. ^The returned value is one of [SQLITE_INTEGER], 5112*a3141fd3SAndroid Build Coastguard Worker ** [SQLITE_FLOAT], [SQLITE_TEXT], [SQLITE_BLOB], or [SQLITE_NULL]. 5113*a3141fd3SAndroid Build Coastguard Worker ** The return value of sqlite3_column_type() can be used to decide which 5114*a3141fd3SAndroid Build Coastguard Worker ** of the first six interface should be used to extract the column value. 5115*a3141fd3SAndroid Build Coastguard Worker ** The value returned by sqlite3_column_type() is only meaningful if no 5116*a3141fd3SAndroid Build Coastguard Worker ** automatic type conversions have occurred for the value in question. 5117*a3141fd3SAndroid Build Coastguard Worker ** After a type conversion, the result of calling sqlite3_column_type() 5118*a3141fd3SAndroid Build Coastguard Worker ** is undefined, though harmless. Future 5119*a3141fd3SAndroid Build Coastguard Worker ** versions of SQLite may change the behavior of sqlite3_column_type() 5120*a3141fd3SAndroid Build Coastguard Worker ** following a type conversion. 5121*a3141fd3SAndroid Build Coastguard Worker ** 5122*a3141fd3SAndroid Build Coastguard Worker ** If the result is a BLOB or a TEXT string, then the sqlite3_column_bytes() 5123*a3141fd3SAndroid Build Coastguard Worker ** or sqlite3_column_bytes16() interfaces can be used to determine the size 5124*a3141fd3SAndroid Build Coastguard Worker ** of that BLOB or string. 5125*a3141fd3SAndroid Build Coastguard Worker ** 5126*a3141fd3SAndroid Build Coastguard Worker ** ^If the result is a BLOB or UTF-8 string then the sqlite3_column_bytes() 5127*a3141fd3SAndroid Build Coastguard Worker ** routine returns the number of bytes in that BLOB or string. 5128*a3141fd3SAndroid Build Coastguard Worker ** ^If the result is a UTF-16 string, then sqlite3_column_bytes() converts 5129*a3141fd3SAndroid Build Coastguard Worker ** the string to UTF-8 and then returns the number of bytes. 5130*a3141fd3SAndroid Build Coastguard Worker ** ^If the result is a numeric value then sqlite3_column_bytes() uses 5131*a3141fd3SAndroid Build Coastguard Worker ** [sqlite3_snprintf()] to convert that value to a UTF-8 string and returns 5132*a3141fd3SAndroid Build Coastguard Worker ** the number of bytes in that string. 5133*a3141fd3SAndroid Build Coastguard Worker ** ^If the result is NULL, then sqlite3_column_bytes() returns zero. 5134*a3141fd3SAndroid Build Coastguard Worker ** 5135*a3141fd3SAndroid Build Coastguard Worker ** ^If the result is a BLOB or UTF-16 string then the sqlite3_column_bytes16() 5136*a3141fd3SAndroid Build Coastguard Worker ** routine returns the number of bytes in that BLOB or string. 5137*a3141fd3SAndroid Build Coastguard Worker ** ^If the result is a UTF-8 string, then sqlite3_column_bytes16() converts 5138*a3141fd3SAndroid Build Coastguard Worker ** the string to UTF-16 and then returns the number of bytes. 5139*a3141fd3SAndroid Build Coastguard Worker ** ^If the result is a numeric value then sqlite3_column_bytes16() uses 5140*a3141fd3SAndroid Build Coastguard Worker ** [sqlite3_snprintf()] to convert that value to a UTF-16 string and returns 5141*a3141fd3SAndroid Build Coastguard Worker ** the number of bytes in that string. 5142*a3141fd3SAndroid Build Coastguard Worker ** ^If the result is NULL, then sqlite3_column_bytes16() returns zero. 5143*a3141fd3SAndroid Build Coastguard Worker ** 5144*a3141fd3SAndroid Build Coastguard Worker ** ^The values returned by [sqlite3_column_bytes()] and 5145*a3141fd3SAndroid Build Coastguard Worker ** [sqlite3_column_bytes16()] do not include the zero terminators at the end 5146*a3141fd3SAndroid Build Coastguard Worker ** of the string. ^For clarity: the values returned by 5147*a3141fd3SAndroid Build Coastguard Worker ** [sqlite3_column_bytes()] and [sqlite3_column_bytes16()] are the number of 5148*a3141fd3SAndroid Build Coastguard Worker ** bytes in the string, not the number of characters. 5149*a3141fd3SAndroid Build Coastguard Worker ** 5150*a3141fd3SAndroid Build Coastguard Worker ** ^Strings returned by sqlite3_column_text() and sqlite3_column_text16(), 5151*a3141fd3SAndroid Build Coastguard Worker ** even empty strings, are always zero-terminated. ^The return 5152*a3141fd3SAndroid Build Coastguard Worker ** value from sqlite3_column_blob() for a zero-length BLOB is a NULL pointer. 5153*a3141fd3SAndroid Build Coastguard Worker ** 5154*a3141fd3SAndroid Build Coastguard Worker ** ^Strings returned by sqlite3_column_text16() always have the endianness 5155*a3141fd3SAndroid Build Coastguard Worker ** which is native to the platform, regardless of the text encoding set 5156*a3141fd3SAndroid Build Coastguard Worker ** for the database. 5157*a3141fd3SAndroid Build Coastguard Worker ** 5158*a3141fd3SAndroid Build Coastguard Worker ** <b>Warning:</b> ^The object returned by [sqlite3_column_value()] is an 5159*a3141fd3SAndroid Build Coastguard Worker ** [unprotected sqlite3_value] object. In a multithreaded environment, 5160*a3141fd3SAndroid Build Coastguard Worker ** an unprotected sqlite3_value object may only be used safely with 5161*a3141fd3SAndroid Build Coastguard Worker ** [sqlite3_bind_value()] and [sqlite3_result_value()]. 5162*a3141fd3SAndroid Build Coastguard Worker ** If the [unprotected sqlite3_value] object returned by 5163*a3141fd3SAndroid Build Coastguard Worker ** [sqlite3_column_value()] is used in any other way, including calls 5164*a3141fd3SAndroid Build Coastguard Worker ** to routines like [sqlite3_value_int()], [sqlite3_value_text()], 5165*a3141fd3SAndroid Build Coastguard Worker ** or [sqlite3_value_bytes()], the behavior is not threadsafe. 5166*a3141fd3SAndroid Build Coastguard Worker ** Hence, the sqlite3_column_value() interface 5167*a3141fd3SAndroid Build Coastguard Worker ** is normally only useful within the implementation of 5168*a3141fd3SAndroid Build Coastguard Worker ** [application-defined SQL functions] or [virtual tables], not within 5169*a3141fd3SAndroid Build Coastguard Worker ** top-level application code. 5170*a3141fd3SAndroid Build Coastguard Worker ** 5171*a3141fd3SAndroid Build Coastguard Worker ** These routines may attempt to convert the datatype of the result. 5172*a3141fd3SAndroid Build Coastguard Worker ** ^For example, if the internal representation is FLOAT and a text result 5173*a3141fd3SAndroid Build Coastguard Worker ** is requested, [sqlite3_snprintf()] is used internally to perform the 5174*a3141fd3SAndroid Build Coastguard Worker ** conversion automatically. ^(The following table details the conversions 5175*a3141fd3SAndroid Build Coastguard Worker ** that are applied: 5176*a3141fd3SAndroid Build Coastguard Worker ** 5177*a3141fd3SAndroid Build Coastguard Worker ** <blockquote> 5178*a3141fd3SAndroid Build Coastguard Worker ** <table border="1"> 5179*a3141fd3SAndroid Build Coastguard Worker ** <tr><th> Internal<br>Type <th> Requested<br>Type <th> Conversion 5180*a3141fd3SAndroid Build Coastguard Worker ** 5181*a3141fd3SAndroid Build Coastguard Worker ** <tr><td> NULL <td> INTEGER <td> Result is 0 5182*a3141fd3SAndroid Build Coastguard Worker ** <tr><td> NULL <td> FLOAT <td> Result is 0.0 5183*a3141fd3SAndroid Build Coastguard Worker ** <tr><td> NULL <td> TEXT <td> Result is a NULL pointer 5184*a3141fd3SAndroid Build Coastguard Worker ** <tr><td> NULL <td> BLOB <td> Result is a NULL pointer 5185*a3141fd3SAndroid Build Coastguard Worker ** <tr><td> INTEGER <td> FLOAT <td> Convert from integer to float 5186*a3141fd3SAndroid Build Coastguard Worker ** <tr><td> INTEGER <td> TEXT <td> ASCII rendering of the integer 5187*a3141fd3SAndroid Build Coastguard Worker ** <tr><td> INTEGER <td> BLOB <td> Same as INTEGER->TEXT 5188*a3141fd3SAndroid Build Coastguard Worker ** <tr><td> FLOAT <td> INTEGER <td> [CAST] to INTEGER 5189*a3141fd3SAndroid Build Coastguard Worker ** <tr><td> FLOAT <td> TEXT <td> ASCII rendering of the float 5190*a3141fd3SAndroid Build Coastguard Worker ** <tr><td> FLOAT <td> BLOB <td> [CAST] to BLOB 5191*a3141fd3SAndroid Build Coastguard Worker ** <tr><td> TEXT <td> INTEGER <td> [CAST] to INTEGER 5192*a3141fd3SAndroid Build Coastguard Worker ** <tr><td> TEXT <td> FLOAT <td> [CAST] to REAL 5193*a3141fd3SAndroid Build Coastguard Worker ** <tr><td> TEXT <td> BLOB <td> No change 5194*a3141fd3SAndroid Build Coastguard Worker ** <tr><td> BLOB <td> INTEGER <td> [CAST] to INTEGER 5195*a3141fd3SAndroid Build Coastguard Worker ** <tr><td> BLOB <td> FLOAT <td> [CAST] to REAL 5196*a3141fd3SAndroid Build Coastguard Worker ** <tr><td> BLOB <td> TEXT <td> [CAST] to TEXT, ensure zero terminator 5197*a3141fd3SAndroid Build Coastguard Worker ** </table> 5198*a3141fd3SAndroid Build Coastguard Worker ** </blockquote>)^ 5199*a3141fd3SAndroid Build Coastguard Worker ** 5200*a3141fd3SAndroid Build Coastguard Worker ** Note that when type conversions occur, pointers returned by prior 5201*a3141fd3SAndroid Build Coastguard Worker ** calls to sqlite3_column_blob(), sqlite3_column_text(), and/or 5202*a3141fd3SAndroid Build Coastguard Worker ** sqlite3_column_text16() may be invalidated. 5203*a3141fd3SAndroid Build Coastguard Worker ** Type conversions and pointer invalidations might occur 5204*a3141fd3SAndroid Build Coastguard Worker ** in the following cases: 5205*a3141fd3SAndroid Build Coastguard Worker ** 5206*a3141fd3SAndroid Build Coastguard Worker ** <ul> 5207*a3141fd3SAndroid Build Coastguard Worker ** <li> The initial content is a BLOB and sqlite3_column_text() or 5208*a3141fd3SAndroid Build Coastguard Worker ** sqlite3_column_text16() is called. A zero-terminator might 5209*a3141fd3SAndroid Build Coastguard Worker ** need to be added to the string.</li> 5210*a3141fd3SAndroid Build Coastguard Worker ** <li> The initial content is UTF-8 text and sqlite3_column_bytes16() or 5211*a3141fd3SAndroid Build Coastguard Worker ** sqlite3_column_text16() is called. The content must be converted 5212*a3141fd3SAndroid Build Coastguard Worker ** to UTF-16.</li> 5213*a3141fd3SAndroid Build Coastguard Worker ** <li> The initial content is UTF-16 text and sqlite3_column_bytes() or 5214*a3141fd3SAndroid Build Coastguard Worker ** sqlite3_column_text() is called. The content must be converted 5215*a3141fd3SAndroid Build Coastguard Worker ** to UTF-8.</li> 5216*a3141fd3SAndroid Build Coastguard Worker ** </ul> 5217*a3141fd3SAndroid Build Coastguard Worker ** 5218*a3141fd3SAndroid Build Coastguard Worker ** ^Conversions between UTF-16be and UTF-16le are always done in place and do 5219*a3141fd3SAndroid Build Coastguard Worker ** not invalidate a prior pointer, though of course the content of the buffer 5220*a3141fd3SAndroid Build Coastguard Worker ** that the prior pointer references will have been modified. Other kinds 5221*a3141fd3SAndroid Build Coastguard Worker ** of conversion are done in place when it is possible, but sometimes they 5222*a3141fd3SAndroid Build Coastguard Worker ** are not possible and in those cases prior pointers are invalidated. 5223*a3141fd3SAndroid Build Coastguard Worker ** 5224*a3141fd3SAndroid Build Coastguard Worker ** The safest policy is to invoke these routines 5225*a3141fd3SAndroid Build Coastguard Worker ** in one of the following ways: 5226*a3141fd3SAndroid Build Coastguard Worker ** 5227*a3141fd3SAndroid Build Coastguard Worker ** <ul> 5228*a3141fd3SAndroid Build Coastguard Worker ** <li>sqlite3_column_text() followed by sqlite3_column_bytes()</li> 5229*a3141fd3SAndroid Build Coastguard Worker ** <li>sqlite3_column_blob() followed by sqlite3_column_bytes()</li> 5230*a3141fd3SAndroid Build Coastguard Worker ** <li>sqlite3_column_text16() followed by sqlite3_column_bytes16()</li> 5231*a3141fd3SAndroid Build Coastguard Worker ** </ul> 5232*a3141fd3SAndroid Build Coastguard Worker ** 5233*a3141fd3SAndroid Build Coastguard Worker ** In other words, you should call sqlite3_column_text(), 5234*a3141fd3SAndroid Build Coastguard Worker ** sqlite3_column_blob(), or sqlite3_column_text16() first to force the result 5235*a3141fd3SAndroid Build Coastguard Worker ** into the desired format, then invoke sqlite3_column_bytes() or 5236*a3141fd3SAndroid Build Coastguard Worker ** sqlite3_column_bytes16() to find the size of the result. Do not mix calls 5237*a3141fd3SAndroid Build Coastguard Worker ** to sqlite3_column_text() or sqlite3_column_blob() with calls to 5238*a3141fd3SAndroid Build Coastguard Worker ** sqlite3_column_bytes16(), and do not mix calls to sqlite3_column_text16() 5239*a3141fd3SAndroid Build Coastguard Worker ** with calls to sqlite3_column_bytes(). 5240*a3141fd3SAndroid Build Coastguard Worker ** 5241*a3141fd3SAndroid Build Coastguard Worker ** ^The pointers returned are valid until a type conversion occurs as 5242*a3141fd3SAndroid Build Coastguard Worker ** described above, or until [sqlite3_step()] or [sqlite3_reset()] or 5243*a3141fd3SAndroid Build Coastguard Worker ** [sqlite3_finalize()] is called. ^The memory space used to hold strings 5244*a3141fd3SAndroid Build Coastguard Worker ** and BLOBs is freed automatically. Do not pass the pointers returned 5245*a3141fd3SAndroid Build Coastguard Worker ** from [sqlite3_column_blob()], [sqlite3_column_text()], etc. into 5246*a3141fd3SAndroid Build Coastguard Worker ** [sqlite3_free()]. 5247*a3141fd3SAndroid Build Coastguard Worker ** 5248*a3141fd3SAndroid Build Coastguard Worker ** As long as the input parameters are correct, these routines will only 5249*a3141fd3SAndroid Build Coastguard Worker ** fail if an out-of-memory error occurs during a format conversion. 5250*a3141fd3SAndroid Build Coastguard Worker ** Only the following subset of interfaces are subject to out-of-memory 5251*a3141fd3SAndroid Build Coastguard Worker ** errors: 5252*a3141fd3SAndroid Build Coastguard Worker ** 5253*a3141fd3SAndroid Build Coastguard Worker ** <ul> 5254*a3141fd3SAndroid Build Coastguard Worker ** <li> sqlite3_column_blob() 5255*a3141fd3SAndroid Build Coastguard Worker ** <li> sqlite3_column_text() 5256*a3141fd3SAndroid Build Coastguard Worker ** <li> sqlite3_column_text16() 5257*a3141fd3SAndroid Build Coastguard Worker ** <li> sqlite3_column_bytes() 5258*a3141fd3SAndroid Build Coastguard Worker ** <li> sqlite3_column_bytes16() 5259*a3141fd3SAndroid Build Coastguard Worker ** </ul> 5260*a3141fd3SAndroid Build Coastguard Worker ** 5261*a3141fd3SAndroid Build Coastguard Worker ** If an out-of-memory error occurs, then the return value from these 5262*a3141fd3SAndroid Build Coastguard Worker ** routines is the same as if the column had contained an SQL NULL value. 5263*a3141fd3SAndroid Build Coastguard Worker ** Valid SQL NULL returns can be distinguished from out-of-memory errors 5264*a3141fd3SAndroid Build Coastguard Worker ** by invoking the [sqlite3_errcode()] immediately after the suspect 5265*a3141fd3SAndroid Build Coastguard Worker ** return value is obtained and before any 5266*a3141fd3SAndroid Build Coastguard Worker ** other SQLite interface is called on the same [database connection]. 5267*a3141fd3SAndroid Build Coastguard Worker */ 5268*a3141fd3SAndroid Build Coastguard Worker SQLITE_API const void *sqlite3_column_blob(sqlite3_stmt*, int iCol); 5269*a3141fd3SAndroid Build Coastguard Worker SQLITE_API double sqlite3_column_double(sqlite3_stmt*, int iCol); 5270*a3141fd3SAndroid Build Coastguard Worker SQLITE_API int sqlite3_column_int(sqlite3_stmt*, int iCol); 5271*a3141fd3SAndroid Build Coastguard Worker SQLITE_API sqlite3_int64 sqlite3_column_int64(sqlite3_stmt*, int iCol); 5272*a3141fd3SAndroid Build Coastguard Worker SQLITE_API const unsigned char *sqlite3_column_text(sqlite3_stmt*, int iCol); 5273*a3141fd3SAndroid Build Coastguard Worker SQLITE_API const void *sqlite3_column_text16(sqlite3_stmt*, int iCol); 5274*a3141fd3SAndroid Build Coastguard Worker SQLITE_API sqlite3_value *sqlite3_column_value(sqlite3_stmt*, int iCol); 5275*a3141fd3SAndroid Build Coastguard Worker SQLITE_API int sqlite3_column_bytes(sqlite3_stmt*, int iCol); 5276*a3141fd3SAndroid Build Coastguard Worker SQLITE_API int sqlite3_column_bytes16(sqlite3_stmt*, int iCol); 5277*a3141fd3SAndroid Build Coastguard Worker SQLITE_API int sqlite3_column_type(sqlite3_stmt*, int iCol); 5278*a3141fd3SAndroid Build Coastguard Worker 5279*a3141fd3SAndroid Build Coastguard Worker /* 5280*a3141fd3SAndroid Build Coastguard Worker ** CAPI3REF: Destroy A Prepared Statement Object 5281*a3141fd3SAndroid Build Coastguard Worker ** DESTRUCTOR: sqlite3_stmt 5282*a3141fd3SAndroid Build Coastguard Worker ** 5283*a3141fd3SAndroid Build Coastguard Worker ** ^The sqlite3_finalize() function is called to delete a [prepared statement]. 5284*a3141fd3SAndroid Build Coastguard Worker ** ^If the most recent evaluation of the statement encountered no errors 5285*a3141fd3SAndroid Build Coastguard Worker ** or if the statement is never been evaluated, then sqlite3_finalize() returns 5286*a3141fd3SAndroid Build Coastguard Worker ** SQLITE_OK. ^If the most recent evaluation of statement S failed, then 5287*a3141fd3SAndroid Build Coastguard Worker ** sqlite3_finalize(S) returns the appropriate [error code] or 5288*a3141fd3SAndroid Build Coastguard Worker ** [extended error code]. 5289*a3141fd3SAndroid Build Coastguard Worker ** 5290*a3141fd3SAndroid Build Coastguard Worker ** ^The sqlite3_finalize(S) routine can be called at any point during 5291*a3141fd3SAndroid Build Coastguard Worker ** the life cycle of [prepared statement] S: 5292*a3141fd3SAndroid Build Coastguard Worker ** before statement S is ever evaluated, after 5293*a3141fd3SAndroid Build Coastguard Worker ** one or more calls to [sqlite3_reset()], or after any call 5294*a3141fd3SAndroid Build Coastguard Worker ** to [sqlite3_step()] regardless of whether or not the statement has 5295*a3141fd3SAndroid Build Coastguard Worker ** completed execution. 5296*a3141fd3SAndroid Build Coastguard Worker ** 5297*a3141fd3SAndroid Build Coastguard Worker ** ^Invoking sqlite3_finalize() on a NULL pointer is a harmless no-op. 5298*a3141fd3SAndroid Build Coastguard Worker ** 5299*a3141fd3SAndroid Build Coastguard Worker ** The application must finalize every [prepared statement] in order to avoid 5300*a3141fd3SAndroid Build Coastguard Worker ** resource leaks. It is a grievous error for the application to try to use 5301*a3141fd3SAndroid Build Coastguard Worker ** a prepared statement after it has been finalized. Any use of a prepared 5302*a3141fd3SAndroid Build Coastguard Worker ** statement after it has been finalized can result in undefined and 5303*a3141fd3SAndroid Build Coastguard Worker ** undesirable behavior such as segfaults and heap corruption. 5304*a3141fd3SAndroid Build Coastguard Worker */ 5305*a3141fd3SAndroid Build Coastguard Worker SQLITE_API int sqlite3_finalize(sqlite3_stmt *pStmt); 5306*a3141fd3SAndroid Build Coastguard Worker 5307*a3141fd3SAndroid Build Coastguard Worker /* 5308*a3141fd3SAndroid Build Coastguard Worker ** CAPI3REF: Reset A Prepared Statement Object 5309*a3141fd3SAndroid Build Coastguard Worker ** METHOD: sqlite3_stmt 5310*a3141fd3SAndroid Build Coastguard Worker ** 5311*a3141fd3SAndroid Build Coastguard Worker ** The sqlite3_reset() function is called to reset a [prepared statement] 5312*a3141fd3SAndroid Build Coastguard Worker ** object back to its initial state, ready to be re-executed. 5313*a3141fd3SAndroid Build Coastguard Worker ** ^Any SQL statement variables that had values bound to them using 5314*a3141fd3SAndroid Build Coastguard Worker ** the [sqlite3_bind_blob | sqlite3_bind_*() API] retain their values. 5315*a3141fd3SAndroid Build Coastguard Worker ** Use [sqlite3_clear_bindings()] to reset the bindings. 5316*a3141fd3SAndroid Build Coastguard Worker ** 5317*a3141fd3SAndroid Build Coastguard Worker ** ^The [sqlite3_reset(S)] interface resets the [prepared statement] S 5318*a3141fd3SAndroid Build Coastguard Worker ** back to the beginning of its program. 5319*a3141fd3SAndroid Build Coastguard Worker ** 5320*a3141fd3SAndroid Build Coastguard Worker ** ^The return code from [sqlite3_reset(S)] indicates whether or not 5321*a3141fd3SAndroid Build Coastguard Worker ** the previous evaluation of prepared statement S completed successfully. 5322*a3141fd3SAndroid Build Coastguard Worker ** ^If [sqlite3_step(S)] has never before been called on S or if 5323*a3141fd3SAndroid Build Coastguard Worker ** [sqlite3_step(S)] has not been called since the previous call 5324*a3141fd3SAndroid Build Coastguard Worker ** to [sqlite3_reset(S)], then [sqlite3_reset(S)] will return 5325*a3141fd3SAndroid Build Coastguard Worker ** [SQLITE_OK]. 5326*a3141fd3SAndroid Build Coastguard Worker ** 5327*a3141fd3SAndroid Build Coastguard Worker ** ^If the most recent call to [sqlite3_step(S)] for the 5328*a3141fd3SAndroid Build Coastguard Worker ** [prepared statement] S indicated an error, then 5329*a3141fd3SAndroid Build Coastguard Worker ** [sqlite3_reset(S)] returns an appropriate [error code]. 5330*a3141fd3SAndroid Build Coastguard Worker ** ^The [sqlite3_reset(S)] interface might also return an [error code] 5331*a3141fd3SAndroid Build Coastguard Worker ** if there were no prior errors but the process of resetting 5332*a3141fd3SAndroid Build Coastguard Worker ** the prepared statement caused a new error. ^For example, if an 5333*a3141fd3SAndroid Build Coastguard Worker ** [INSERT] statement with a [RETURNING] clause is only stepped one time, 5334*a3141fd3SAndroid Build Coastguard Worker ** that one call to [sqlite3_step(S)] might return SQLITE_ROW but 5335*a3141fd3SAndroid Build Coastguard Worker ** the overall statement might still fail and the [sqlite3_reset(S)] call 5336*a3141fd3SAndroid Build Coastguard Worker ** might return SQLITE_BUSY if locking constraints prevent the 5337*a3141fd3SAndroid Build Coastguard Worker ** database change from committing. Therefore, it is important that 5338*a3141fd3SAndroid Build Coastguard Worker ** applications check the return code from [sqlite3_reset(S)] even if 5339*a3141fd3SAndroid Build Coastguard Worker ** no prior call to [sqlite3_step(S)] indicated a problem. 5340*a3141fd3SAndroid Build Coastguard Worker ** 5341*a3141fd3SAndroid Build Coastguard Worker ** ^The [sqlite3_reset(S)] interface does not change the values 5342*a3141fd3SAndroid Build Coastguard Worker ** of any [sqlite3_bind_blob|bindings] on the [prepared statement] S. 5343*a3141fd3SAndroid Build Coastguard Worker */ 5344*a3141fd3SAndroid Build Coastguard Worker SQLITE_API int sqlite3_reset(sqlite3_stmt *pStmt); 5345*a3141fd3SAndroid Build Coastguard Worker 5346*a3141fd3SAndroid Build Coastguard Worker 5347*a3141fd3SAndroid Build Coastguard Worker /* 5348*a3141fd3SAndroid Build Coastguard Worker ** CAPI3REF: Create Or Redefine SQL Functions 5349*a3141fd3SAndroid Build Coastguard Worker ** KEYWORDS: {function creation routines} 5350*a3141fd3SAndroid Build Coastguard Worker ** METHOD: sqlite3 5351*a3141fd3SAndroid Build Coastguard Worker ** 5352*a3141fd3SAndroid Build Coastguard Worker ** ^These functions (collectively known as "function creation routines") 5353*a3141fd3SAndroid Build Coastguard Worker ** are used to add SQL functions or aggregates or to redefine the behavior 5354*a3141fd3SAndroid Build Coastguard Worker ** of existing SQL functions or aggregates. The only differences between 5355*a3141fd3SAndroid Build Coastguard Worker ** the three "sqlite3_create_function*" routines are the text encoding 5356*a3141fd3SAndroid Build Coastguard Worker ** expected for the second parameter (the name of the function being 5357*a3141fd3SAndroid Build Coastguard Worker ** created) and the presence or absence of a destructor callback for 5358*a3141fd3SAndroid Build Coastguard Worker ** the application data pointer. Function sqlite3_create_window_function() 5359*a3141fd3SAndroid Build Coastguard Worker ** is similar, but allows the user to supply the extra callback functions 5360*a3141fd3SAndroid Build Coastguard Worker ** needed by [aggregate window functions]. 5361*a3141fd3SAndroid Build Coastguard Worker ** 5362*a3141fd3SAndroid Build Coastguard Worker ** ^The first parameter is the [database connection] to which the SQL 5363*a3141fd3SAndroid Build Coastguard Worker ** function is to be added. ^If an application uses more than one database 5364*a3141fd3SAndroid Build Coastguard Worker ** connection then application-defined SQL functions must be added 5365*a3141fd3SAndroid Build Coastguard Worker ** to each database connection separately. 5366*a3141fd3SAndroid Build Coastguard Worker ** 5367*a3141fd3SAndroid Build Coastguard Worker ** ^The second parameter is the name of the SQL function to be created or 5368*a3141fd3SAndroid Build Coastguard Worker ** redefined. ^The length of the name is limited to 255 bytes in a UTF-8 5369*a3141fd3SAndroid Build Coastguard Worker ** representation, exclusive of the zero-terminator. ^Note that the name 5370*a3141fd3SAndroid Build Coastguard Worker ** length limit is in UTF-8 bytes, not characters nor UTF-16 bytes. 5371*a3141fd3SAndroid Build Coastguard Worker ** ^Any attempt to create a function with a longer name 5372*a3141fd3SAndroid Build Coastguard Worker ** will result in [SQLITE_MISUSE] being returned. 5373*a3141fd3SAndroid Build Coastguard Worker ** 5374*a3141fd3SAndroid Build Coastguard Worker ** ^The third parameter (nArg) 5375*a3141fd3SAndroid Build Coastguard Worker ** is the number of arguments that the SQL function or 5376*a3141fd3SAndroid Build Coastguard Worker ** aggregate takes. ^If this parameter is -1, then the SQL function or 5377*a3141fd3SAndroid Build Coastguard Worker ** aggregate may take any number of arguments between 0 and the limit 5378*a3141fd3SAndroid Build Coastguard Worker ** set by [sqlite3_limit]([SQLITE_LIMIT_FUNCTION_ARG]). If the third 5379*a3141fd3SAndroid Build Coastguard Worker ** parameter is less than -1 or greater than 127 then the behavior is 5380*a3141fd3SAndroid Build Coastguard Worker ** undefined. 5381*a3141fd3SAndroid Build Coastguard Worker ** 5382*a3141fd3SAndroid Build Coastguard Worker ** ^The fourth parameter, eTextRep, specifies what 5383*a3141fd3SAndroid Build Coastguard Worker ** [SQLITE_UTF8 | text encoding] this SQL function prefers for 5384*a3141fd3SAndroid Build Coastguard Worker ** its parameters. The application should set this parameter to 5385*a3141fd3SAndroid Build Coastguard Worker ** [SQLITE_UTF16LE] if the function implementation invokes 5386*a3141fd3SAndroid Build Coastguard Worker ** [sqlite3_value_text16le()] on an input, or [SQLITE_UTF16BE] if the 5387*a3141fd3SAndroid Build Coastguard Worker ** implementation invokes [sqlite3_value_text16be()] on an input, or 5388*a3141fd3SAndroid Build Coastguard Worker ** [SQLITE_UTF16] if [sqlite3_value_text16()] is used, or [SQLITE_UTF8] 5389*a3141fd3SAndroid Build Coastguard Worker ** otherwise. ^The same SQL function may be registered multiple times using 5390*a3141fd3SAndroid Build Coastguard Worker ** different preferred text encodings, with different implementations for 5391*a3141fd3SAndroid Build Coastguard Worker ** each encoding. 5392*a3141fd3SAndroid Build Coastguard Worker ** ^When multiple implementations of the same function are available, SQLite 5393*a3141fd3SAndroid Build Coastguard Worker ** will pick the one that involves the least amount of data conversion. 5394*a3141fd3SAndroid Build Coastguard Worker ** 5395*a3141fd3SAndroid Build Coastguard Worker ** ^The fourth parameter may optionally be ORed with [SQLITE_DETERMINISTIC] 5396*a3141fd3SAndroid Build Coastguard Worker ** to signal that the function will always return the same result given 5397*a3141fd3SAndroid Build Coastguard Worker ** the same inputs within a single SQL statement. Most SQL functions are 5398*a3141fd3SAndroid Build Coastguard Worker ** deterministic. The built-in [random()] SQL function is an example of a 5399*a3141fd3SAndroid Build Coastguard Worker ** function that is not deterministic. The SQLite query planner is able to 5400*a3141fd3SAndroid Build Coastguard Worker ** perform additional optimizations on deterministic functions, so use 5401*a3141fd3SAndroid Build Coastguard Worker ** of the [SQLITE_DETERMINISTIC] flag is recommended where possible. 5402*a3141fd3SAndroid Build Coastguard Worker ** 5403*a3141fd3SAndroid Build Coastguard Worker ** ^The fourth parameter may also optionally include the [SQLITE_DIRECTONLY] 5404*a3141fd3SAndroid Build Coastguard Worker ** flag, which if present prevents the function from being invoked from 5405*a3141fd3SAndroid Build Coastguard Worker ** within VIEWs, TRIGGERs, CHECK constraints, generated column expressions, 5406*a3141fd3SAndroid Build Coastguard Worker ** index expressions, or the WHERE clause of partial indexes. 5407*a3141fd3SAndroid Build Coastguard Worker ** 5408*a3141fd3SAndroid Build Coastguard Worker ** For best security, the [SQLITE_DIRECTONLY] flag is recommended for 5409*a3141fd3SAndroid Build Coastguard Worker ** all application-defined SQL functions that do not need to be 5410*a3141fd3SAndroid Build Coastguard Worker ** used inside of triggers, view, CHECK constraints, or other elements of 5411*a3141fd3SAndroid Build Coastguard Worker ** the database schema. This flags is especially recommended for SQL 5412*a3141fd3SAndroid Build Coastguard Worker ** functions that have side effects or reveal internal application state. 5413*a3141fd3SAndroid Build Coastguard Worker ** Without this flag, an attacker might be able to modify the schema of 5414*a3141fd3SAndroid Build Coastguard Worker ** a database file to include invocations of the function with parameters 5415*a3141fd3SAndroid Build Coastguard Worker ** chosen by the attacker, which the application will then execute when 5416*a3141fd3SAndroid Build Coastguard Worker ** the database file is opened and read. 5417*a3141fd3SAndroid Build Coastguard Worker ** 5418*a3141fd3SAndroid Build Coastguard Worker ** ^(The fifth parameter is an arbitrary pointer. The implementation of the 5419*a3141fd3SAndroid Build Coastguard Worker ** function can gain access to this pointer using [sqlite3_user_data()].)^ 5420*a3141fd3SAndroid Build Coastguard Worker ** 5421*a3141fd3SAndroid Build Coastguard Worker ** ^The sixth, seventh and eighth parameters passed to the three 5422*a3141fd3SAndroid Build Coastguard Worker ** "sqlite3_create_function*" functions, xFunc, xStep and xFinal, are 5423*a3141fd3SAndroid Build Coastguard Worker ** pointers to C-language functions that implement the SQL function or 5424*a3141fd3SAndroid Build Coastguard Worker ** aggregate. ^A scalar SQL function requires an implementation of the xFunc 5425*a3141fd3SAndroid Build Coastguard Worker ** callback only; NULL pointers must be passed as the xStep and xFinal 5426*a3141fd3SAndroid Build Coastguard Worker ** parameters. ^An aggregate SQL function requires an implementation of xStep 5427*a3141fd3SAndroid Build Coastguard Worker ** and xFinal and NULL pointer must be passed for xFunc. ^To delete an existing 5428*a3141fd3SAndroid Build Coastguard Worker ** SQL function or aggregate, pass NULL pointers for all three function 5429*a3141fd3SAndroid Build Coastguard Worker ** callbacks. 5430*a3141fd3SAndroid Build Coastguard Worker ** 5431*a3141fd3SAndroid Build Coastguard Worker ** ^The sixth, seventh, eighth and ninth parameters (xStep, xFinal, xValue 5432*a3141fd3SAndroid Build Coastguard Worker ** and xInverse) passed to sqlite3_create_window_function are pointers to 5433*a3141fd3SAndroid Build Coastguard Worker ** C-language callbacks that implement the new function. xStep and xFinal 5434*a3141fd3SAndroid Build Coastguard Worker ** must both be non-NULL. xValue and xInverse may either both be NULL, in 5435*a3141fd3SAndroid Build Coastguard Worker ** which case a regular aggregate function is created, or must both be 5436*a3141fd3SAndroid Build Coastguard Worker ** non-NULL, in which case the new function may be used as either an aggregate 5437*a3141fd3SAndroid Build Coastguard Worker ** or aggregate window function. More details regarding the implementation 5438*a3141fd3SAndroid Build Coastguard Worker ** of aggregate window functions are 5439*a3141fd3SAndroid Build Coastguard Worker ** [user-defined window functions|available here]. 5440*a3141fd3SAndroid Build Coastguard Worker ** 5441*a3141fd3SAndroid Build Coastguard Worker ** ^(If the final parameter to sqlite3_create_function_v2() or 5442*a3141fd3SAndroid Build Coastguard Worker ** sqlite3_create_window_function() is not NULL, then it is destructor for 5443*a3141fd3SAndroid Build Coastguard Worker ** the application data pointer. The destructor is invoked when the function 5444*a3141fd3SAndroid Build Coastguard Worker ** is deleted, either by being overloaded or when the database connection 5445*a3141fd3SAndroid Build Coastguard Worker ** closes.)^ ^The destructor is also invoked if the call to 5446*a3141fd3SAndroid Build Coastguard Worker ** sqlite3_create_function_v2() fails. ^When the destructor callback is 5447*a3141fd3SAndroid Build Coastguard Worker ** invoked, it is passed a single argument which is a copy of the application 5448*a3141fd3SAndroid Build Coastguard Worker ** data pointer which was the fifth parameter to sqlite3_create_function_v2(). 5449*a3141fd3SAndroid Build Coastguard Worker ** 5450*a3141fd3SAndroid Build Coastguard Worker ** ^It is permitted to register multiple implementations of the same 5451*a3141fd3SAndroid Build Coastguard Worker ** functions with the same name but with either differing numbers of 5452*a3141fd3SAndroid Build Coastguard Worker ** arguments or differing preferred text encodings. ^SQLite will use 5453*a3141fd3SAndroid Build Coastguard Worker ** the implementation that most closely matches the way in which the 5454*a3141fd3SAndroid Build Coastguard Worker ** SQL function is used. ^A function implementation with a non-negative 5455*a3141fd3SAndroid Build Coastguard Worker ** nArg parameter is a better match than a function implementation with 5456*a3141fd3SAndroid Build Coastguard Worker ** a negative nArg. ^A function where the preferred text encoding 5457*a3141fd3SAndroid Build Coastguard Worker ** matches the database encoding is a better 5458*a3141fd3SAndroid Build Coastguard Worker ** match than a function where the encoding is different. 5459*a3141fd3SAndroid Build Coastguard Worker ** ^A function where the encoding difference is between UTF16le and UTF16be 5460*a3141fd3SAndroid Build Coastguard Worker ** is a closer match than a function where the encoding difference is 5461*a3141fd3SAndroid Build Coastguard Worker ** between UTF8 and UTF16. 5462*a3141fd3SAndroid Build Coastguard Worker ** 5463*a3141fd3SAndroid Build Coastguard Worker ** ^Built-in functions may be overloaded by new application-defined functions. 5464*a3141fd3SAndroid Build Coastguard Worker ** 5465*a3141fd3SAndroid Build Coastguard Worker ** ^An application-defined function is permitted to call other 5466*a3141fd3SAndroid Build Coastguard Worker ** SQLite interfaces. However, such calls must not 5467*a3141fd3SAndroid Build Coastguard Worker ** close the database connection nor finalize or reset the prepared 5468*a3141fd3SAndroid Build Coastguard Worker ** statement in which the function is running. 5469*a3141fd3SAndroid Build Coastguard Worker */ 5470*a3141fd3SAndroid Build Coastguard Worker SQLITE_API int sqlite3_create_function( 5471*a3141fd3SAndroid Build Coastguard Worker sqlite3 *db, 5472*a3141fd3SAndroid Build Coastguard Worker const char *zFunctionName, 5473*a3141fd3SAndroid Build Coastguard Worker int nArg, 5474*a3141fd3SAndroid Build Coastguard Worker int eTextRep, 5475*a3141fd3SAndroid Build Coastguard Worker void *pApp, 5476*a3141fd3SAndroid Build Coastguard Worker void (*xFunc)(sqlite3_context*,int,sqlite3_value**), 5477*a3141fd3SAndroid Build Coastguard Worker void (*xStep)(sqlite3_context*,int,sqlite3_value**), 5478*a3141fd3SAndroid Build Coastguard Worker void (*xFinal)(sqlite3_context*) 5479*a3141fd3SAndroid Build Coastguard Worker ); 5480*a3141fd3SAndroid Build Coastguard Worker SQLITE_API int sqlite3_create_function16( 5481*a3141fd3SAndroid Build Coastguard Worker sqlite3 *db, 5482*a3141fd3SAndroid Build Coastguard Worker const void *zFunctionName, 5483*a3141fd3SAndroid Build Coastguard Worker int nArg, 5484*a3141fd3SAndroid Build Coastguard Worker int eTextRep, 5485*a3141fd3SAndroid Build Coastguard Worker void *pApp, 5486*a3141fd3SAndroid Build Coastguard Worker void (*xFunc)(sqlite3_context*,int,sqlite3_value**), 5487*a3141fd3SAndroid Build Coastguard Worker void (*xStep)(sqlite3_context*,int,sqlite3_value**), 5488*a3141fd3SAndroid Build Coastguard Worker void (*xFinal)(sqlite3_context*) 5489*a3141fd3SAndroid Build Coastguard Worker ); 5490*a3141fd3SAndroid Build Coastguard Worker SQLITE_API int sqlite3_create_function_v2( 5491*a3141fd3SAndroid Build Coastguard Worker sqlite3 *db, 5492*a3141fd3SAndroid Build Coastguard Worker const char *zFunctionName, 5493*a3141fd3SAndroid Build Coastguard Worker int nArg, 5494*a3141fd3SAndroid Build Coastguard Worker int eTextRep, 5495*a3141fd3SAndroid Build Coastguard Worker void *pApp, 5496*a3141fd3SAndroid Build Coastguard Worker void (*xFunc)(sqlite3_context*,int,sqlite3_value**), 5497*a3141fd3SAndroid Build Coastguard Worker void (*xStep)(sqlite3_context*,int,sqlite3_value**), 5498*a3141fd3SAndroid Build Coastguard Worker void (*xFinal)(sqlite3_context*), 5499*a3141fd3SAndroid Build Coastguard Worker void(*xDestroy)(void*) 5500*a3141fd3SAndroid Build Coastguard Worker ); 5501*a3141fd3SAndroid Build Coastguard Worker SQLITE_API int sqlite3_create_window_function( 5502*a3141fd3SAndroid Build Coastguard Worker sqlite3 *db, 5503*a3141fd3SAndroid Build Coastguard Worker const char *zFunctionName, 5504*a3141fd3SAndroid Build Coastguard Worker int nArg, 5505*a3141fd3SAndroid Build Coastguard Worker int eTextRep, 5506*a3141fd3SAndroid Build Coastguard Worker void *pApp, 5507*a3141fd3SAndroid Build Coastguard Worker void (*xStep)(sqlite3_context*,int,sqlite3_value**), 5508*a3141fd3SAndroid Build Coastguard Worker void (*xFinal)(sqlite3_context*), 5509*a3141fd3SAndroid Build Coastguard Worker void (*xValue)(sqlite3_context*), 5510*a3141fd3SAndroid Build Coastguard Worker void (*xInverse)(sqlite3_context*,int,sqlite3_value**), 5511*a3141fd3SAndroid Build Coastguard Worker void(*xDestroy)(void*) 5512*a3141fd3SAndroid Build Coastguard Worker ); 5513*a3141fd3SAndroid Build Coastguard Worker 5514*a3141fd3SAndroid Build Coastguard Worker /* 5515*a3141fd3SAndroid Build Coastguard Worker ** CAPI3REF: Text Encodings 5516*a3141fd3SAndroid Build Coastguard Worker ** 5517*a3141fd3SAndroid Build Coastguard Worker ** These constant define integer codes that represent the various 5518*a3141fd3SAndroid Build Coastguard Worker ** text encodings supported by SQLite. 5519*a3141fd3SAndroid Build Coastguard Worker */ 5520*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_UTF8 1 /* IMP: R-37514-35566 */ 5521*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_UTF16LE 2 /* IMP: R-03371-37637 */ 5522*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_UTF16BE 3 /* IMP: R-51971-34154 */ 5523*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_UTF16 4 /* Use native byte order */ 5524*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_ANY 5 /* Deprecated */ 5525*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_UTF16_ALIGNED 8 /* sqlite3_create_collation only */ 5526*a3141fd3SAndroid Build Coastguard Worker 5527*a3141fd3SAndroid Build Coastguard Worker /* 5528*a3141fd3SAndroid Build Coastguard Worker ** CAPI3REF: Function Flags 5529*a3141fd3SAndroid Build Coastguard Worker ** 5530*a3141fd3SAndroid Build Coastguard Worker ** These constants may be ORed together with the 5531*a3141fd3SAndroid Build Coastguard Worker ** [SQLITE_UTF8 | preferred text encoding] as the fourth argument 5532*a3141fd3SAndroid Build Coastguard Worker ** to [sqlite3_create_function()], [sqlite3_create_function16()], or 5533*a3141fd3SAndroid Build Coastguard Worker ** [sqlite3_create_function_v2()]. 5534*a3141fd3SAndroid Build Coastguard Worker ** 5535*a3141fd3SAndroid Build Coastguard Worker ** <dl> 5536*a3141fd3SAndroid Build Coastguard Worker ** [[SQLITE_DETERMINISTIC]] <dt>SQLITE_DETERMINISTIC</dt><dd> 5537*a3141fd3SAndroid Build Coastguard Worker ** The SQLITE_DETERMINISTIC flag means that the new function always gives 5538*a3141fd3SAndroid Build Coastguard Worker ** the same output when the input parameters are the same. 5539*a3141fd3SAndroid Build Coastguard Worker ** The [abs|abs() function] is deterministic, for example, but 5540*a3141fd3SAndroid Build Coastguard Worker ** [randomblob|randomblob()] is not. Functions must 5541*a3141fd3SAndroid Build Coastguard Worker ** be deterministic in order to be used in certain contexts such as 5542*a3141fd3SAndroid Build Coastguard Worker ** with the WHERE clause of [partial indexes] or in [generated columns]. 5543*a3141fd3SAndroid Build Coastguard Worker ** SQLite might also optimize deterministic functions by factoring them 5544*a3141fd3SAndroid Build Coastguard Worker ** out of inner loops. 5545*a3141fd3SAndroid Build Coastguard Worker ** </dd> 5546*a3141fd3SAndroid Build Coastguard Worker ** 5547*a3141fd3SAndroid Build Coastguard Worker ** [[SQLITE_DIRECTONLY]] <dt>SQLITE_DIRECTONLY</dt><dd> 5548*a3141fd3SAndroid Build Coastguard Worker ** The SQLITE_DIRECTONLY flag means that the function may only be invoked 5549*a3141fd3SAndroid Build Coastguard Worker ** from top-level SQL, and cannot be used in VIEWs or TRIGGERs nor in 5550*a3141fd3SAndroid Build Coastguard Worker ** schema structures such as [CHECK constraints], [DEFAULT clauses], 5551*a3141fd3SAndroid Build Coastguard Worker ** [expression indexes], [partial indexes], or [generated columns]. 5552*a3141fd3SAndroid Build Coastguard Worker ** <p> 5553*a3141fd3SAndroid Build Coastguard Worker ** The SQLITE_DIRECTONLY flag is recommended for any 5554*a3141fd3SAndroid Build Coastguard Worker ** [application-defined SQL function] 5555*a3141fd3SAndroid Build Coastguard Worker ** that has side-effects or that could potentially leak sensitive information. 5556*a3141fd3SAndroid Build Coastguard Worker ** This will prevent attacks in which an application is tricked 5557*a3141fd3SAndroid Build Coastguard Worker ** into using a database file that has had its schema surreptitiously 5558*a3141fd3SAndroid Build Coastguard Worker ** modified to invoke the application-defined function in ways that are 5559*a3141fd3SAndroid Build Coastguard Worker ** harmful. 5560*a3141fd3SAndroid Build Coastguard Worker ** <p> 5561*a3141fd3SAndroid Build Coastguard Worker ** Some people say it is good practice to set SQLITE_DIRECTONLY on all 5562*a3141fd3SAndroid Build Coastguard Worker ** [application-defined SQL functions], regardless of whether or not they 5563*a3141fd3SAndroid Build Coastguard Worker ** are security sensitive, as doing so prevents those functions from being used 5564*a3141fd3SAndroid Build Coastguard Worker ** inside of the database schema, and thus ensures that the database 5565*a3141fd3SAndroid Build Coastguard Worker ** can be inspected and modified using generic tools (such as the [CLI]) 5566*a3141fd3SAndroid Build Coastguard Worker ** that do not have access to the application-defined functions. 5567*a3141fd3SAndroid Build Coastguard Worker ** </dd> 5568*a3141fd3SAndroid Build Coastguard Worker ** 5569*a3141fd3SAndroid Build Coastguard Worker ** [[SQLITE_INNOCUOUS]] <dt>SQLITE_INNOCUOUS</dt><dd> 5570*a3141fd3SAndroid Build Coastguard Worker ** The SQLITE_INNOCUOUS flag means that the function is unlikely 5571*a3141fd3SAndroid Build Coastguard Worker ** to cause problems even if misused. An innocuous function should have 5572*a3141fd3SAndroid Build Coastguard Worker ** no side effects and should not depend on any values other than its 5573*a3141fd3SAndroid Build Coastguard Worker ** input parameters. The [abs|abs() function] is an example of an 5574*a3141fd3SAndroid Build Coastguard Worker ** innocuous function. 5575*a3141fd3SAndroid Build Coastguard Worker ** The [load_extension() SQL function] is not innocuous because of its 5576*a3141fd3SAndroid Build Coastguard Worker ** side effects. 5577*a3141fd3SAndroid Build Coastguard Worker ** <p> SQLITE_INNOCUOUS is similar to SQLITE_DETERMINISTIC, but is not 5578*a3141fd3SAndroid Build Coastguard Worker ** exactly the same. The [random|random() function] is an example of a 5579*a3141fd3SAndroid Build Coastguard Worker ** function that is innocuous but not deterministic. 5580*a3141fd3SAndroid Build Coastguard Worker ** <p>Some heightened security settings 5581*a3141fd3SAndroid Build Coastguard Worker ** ([SQLITE_DBCONFIG_TRUSTED_SCHEMA] and [PRAGMA trusted_schema=OFF]) 5582*a3141fd3SAndroid Build Coastguard Worker ** disable the use of SQL functions inside views and triggers and in 5583*a3141fd3SAndroid Build Coastguard Worker ** schema structures such as [CHECK constraints], [DEFAULT clauses], 5584*a3141fd3SAndroid Build Coastguard Worker ** [expression indexes], [partial indexes], and [generated columns] unless 5585*a3141fd3SAndroid Build Coastguard Worker ** the function is tagged with SQLITE_INNOCUOUS. Most built-in functions 5586*a3141fd3SAndroid Build Coastguard Worker ** are innocuous. Developers are advised to avoid using the 5587*a3141fd3SAndroid Build Coastguard Worker ** SQLITE_INNOCUOUS flag for application-defined functions unless the 5588*a3141fd3SAndroid Build Coastguard Worker ** function has been carefully audited and found to be free of potentially 5589*a3141fd3SAndroid Build Coastguard Worker ** security-adverse side-effects and information-leaks. 5590*a3141fd3SAndroid Build Coastguard Worker ** </dd> 5591*a3141fd3SAndroid Build Coastguard Worker ** 5592*a3141fd3SAndroid Build Coastguard Worker ** [[SQLITE_SUBTYPE]] <dt>SQLITE_SUBTYPE</dt><dd> 5593*a3141fd3SAndroid Build Coastguard Worker ** The SQLITE_SUBTYPE flag indicates to SQLite that a function might call 5594*a3141fd3SAndroid Build Coastguard Worker ** [sqlite3_value_subtype()] to inspect the sub-types of its arguments. 5595*a3141fd3SAndroid Build Coastguard Worker ** This flag instructs SQLite to omit some corner-case optimizations that 5596*a3141fd3SAndroid Build Coastguard Worker ** might disrupt the operation of the [sqlite3_value_subtype()] function, 5597*a3141fd3SAndroid Build Coastguard Worker ** causing it to return zero rather than the correct subtype(). 5598*a3141fd3SAndroid Build Coastguard Worker ** SQL functions that invokes [sqlite3_value_subtype()] should have this 5599*a3141fd3SAndroid Build Coastguard Worker ** property. If the SQLITE_SUBTYPE property is omitted, then the return 5600*a3141fd3SAndroid Build Coastguard Worker ** value from [sqlite3_value_subtype()] might sometimes be zero even though 5601*a3141fd3SAndroid Build Coastguard Worker ** a non-zero subtype was specified by the function argument expression. 5602*a3141fd3SAndroid Build Coastguard Worker ** 5603*a3141fd3SAndroid Build Coastguard Worker ** [[SQLITE_RESULT_SUBTYPE]] <dt>SQLITE_RESULT_SUBTYPE</dt><dd> 5604*a3141fd3SAndroid Build Coastguard Worker ** The SQLITE_RESULT_SUBTYPE flag indicates to SQLite that a function might call 5605*a3141fd3SAndroid Build Coastguard Worker ** [sqlite3_result_subtype()] to cause a sub-type to be associated with its 5606*a3141fd3SAndroid Build Coastguard Worker ** result. 5607*a3141fd3SAndroid Build Coastguard Worker ** Every function that invokes [sqlite3_result_subtype()] should have this 5608*a3141fd3SAndroid Build Coastguard Worker ** property. If it does not, then the call to [sqlite3_result_subtype()] 5609*a3141fd3SAndroid Build Coastguard Worker ** might become a no-op if the function is used as term in an 5610*a3141fd3SAndroid Build Coastguard Worker ** [expression index]. On the other hand, SQL functions that never invoke 5611*a3141fd3SAndroid Build Coastguard Worker ** [sqlite3_result_subtype()] should avoid setting this property, as the 5612*a3141fd3SAndroid Build Coastguard Worker ** purpose of this property is to disable certain optimizations that are 5613*a3141fd3SAndroid Build Coastguard Worker ** incompatible with subtypes. 5614*a3141fd3SAndroid Build Coastguard Worker ** </dd> 5615*a3141fd3SAndroid Build Coastguard Worker ** </dl> 5616*a3141fd3SAndroid Build Coastguard Worker */ 5617*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_DETERMINISTIC 0x000000800 5618*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_DIRECTONLY 0x000080000 5619*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_SUBTYPE 0x000100000 5620*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_INNOCUOUS 0x000200000 5621*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_RESULT_SUBTYPE 0x001000000 5622*a3141fd3SAndroid Build Coastguard Worker 5623*a3141fd3SAndroid Build Coastguard Worker /* 5624*a3141fd3SAndroid Build Coastguard Worker ** CAPI3REF: Deprecated Functions 5625*a3141fd3SAndroid Build Coastguard Worker ** DEPRECATED 5626*a3141fd3SAndroid Build Coastguard Worker ** 5627*a3141fd3SAndroid Build Coastguard Worker ** These functions are [deprecated]. In order to maintain 5628*a3141fd3SAndroid Build Coastguard Worker ** backwards compatibility with older code, these functions continue 5629*a3141fd3SAndroid Build Coastguard Worker ** to be supported. However, new applications should avoid 5630*a3141fd3SAndroid Build Coastguard Worker ** the use of these functions. To encourage programmers to avoid 5631*a3141fd3SAndroid Build Coastguard Worker ** these functions, we will not explain what they do. 5632*a3141fd3SAndroid Build Coastguard Worker */ 5633*a3141fd3SAndroid Build Coastguard Worker #ifndef SQLITE_OMIT_DEPRECATED 5634*a3141fd3SAndroid Build Coastguard Worker SQLITE_API SQLITE_DEPRECATED int sqlite3_aggregate_count(sqlite3_context*); 5635*a3141fd3SAndroid Build Coastguard Worker SQLITE_API SQLITE_DEPRECATED int sqlite3_expired(sqlite3_stmt*); 5636*a3141fd3SAndroid Build Coastguard Worker SQLITE_API SQLITE_DEPRECATED int sqlite3_transfer_bindings(sqlite3_stmt*, sqlite3_stmt*); 5637*a3141fd3SAndroid Build Coastguard Worker SQLITE_API SQLITE_DEPRECATED int sqlite3_global_recover(void); 5638*a3141fd3SAndroid Build Coastguard Worker SQLITE_API SQLITE_DEPRECATED void sqlite3_thread_cleanup(void); 5639*a3141fd3SAndroid Build Coastguard Worker SQLITE_API SQLITE_DEPRECATED int sqlite3_memory_alarm(void(*)(void*,sqlite3_int64,int), 5640*a3141fd3SAndroid Build Coastguard Worker void*,sqlite3_int64); 5641*a3141fd3SAndroid Build Coastguard Worker #endif 5642*a3141fd3SAndroid Build Coastguard Worker 5643*a3141fd3SAndroid Build Coastguard Worker /* 5644*a3141fd3SAndroid Build Coastguard Worker ** CAPI3REF: Obtaining SQL Values 5645*a3141fd3SAndroid Build Coastguard Worker ** METHOD: sqlite3_value 5646*a3141fd3SAndroid Build Coastguard Worker ** 5647*a3141fd3SAndroid Build Coastguard Worker ** <b>Summary:</b> 5648*a3141fd3SAndroid Build Coastguard Worker ** <blockquote><table border=0 cellpadding=0 cellspacing=0> 5649*a3141fd3SAndroid Build Coastguard Worker ** <tr><td><b>sqlite3_value_blob</b><td>→<td>BLOB value 5650*a3141fd3SAndroid Build Coastguard Worker ** <tr><td><b>sqlite3_value_double</b><td>→<td>REAL value 5651*a3141fd3SAndroid Build Coastguard Worker ** <tr><td><b>sqlite3_value_int</b><td>→<td>32-bit INTEGER value 5652*a3141fd3SAndroid Build Coastguard Worker ** <tr><td><b>sqlite3_value_int64</b><td>→<td>64-bit INTEGER value 5653*a3141fd3SAndroid Build Coastguard Worker ** <tr><td><b>sqlite3_value_pointer</b><td>→<td>Pointer value 5654*a3141fd3SAndroid Build Coastguard Worker ** <tr><td><b>sqlite3_value_text</b><td>→<td>UTF-8 TEXT value 5655*a3141fd3SAndroid Build Coastguard Worker ** <tr><td><b>sqlite3_value_text16</b><td>→<td>UTF-16 TEXT value in 5656*a3141fd3SAndroid Build Coastguard Worker ** the native byteorder 5657*a3141fd3SAndroid Build Coastguard Worker ** <tr><td><b>sqlite3_value_text16be</b><td>→<td>UTF-16be TEXT value 5658*a3141fd3SAndroid Build Coastguard Worker ** <tr><td><b>sqlite3_value_text16le</b><td>→<td>UTF-16le TEXT value 5659*a3141fd3SAndroid Build Coastguard Worker ** <tr><td> <td> <td> 5660*a3141fd3SAndroid Build Coastguard Worker ** <tr><td><b>sqlite3_value_bytes</b><td>→<td>Size of a BLOB 5661*a3141fd3SAndroid Build Coastguard Worker ** or a UTF-8 TEXT in bytes 5662*a3141fd3SAndroid Build Coastguard Worker ** <tr><td><b>sqlite3_value_bytes16 </b> 5663*a3141fd3SAndroid Build Coastguard Worker ** <td>→ <td>Size of UTF-16 5664*a3141fd3SAndroid Build Coastguard Worker ** TEXT in bytes 5665*a3141fd3SAndroid Build Coastguard Worker ** <tr><td><b>sqlite3_value_type</b><td>→<td>Default 5666*a3141fd3SAndroid Build Coastguard Worker ** datatype of the value 5667*a3141fd3SAndroid Build Coastguard Worker ** <tr><td><b>sqlite3_value_numeric_type </b> 5668*a3141fd3SAndroid Build Coastguard Worker ** <td>→ <td>Best numeric datatype of the value 5669*a3141fd3SAndroid Build Coastguard Worker ** <tr><td><b>sqlite3_value_nochange </b> 5670*a3141fd3SAndroid Build Coastguard Worker ** <td>→ <td>True if the column is unchanged in an UPDATE 5671*a3141fd3SAndroid Build Coastguard Worker ** against a virtual table. 5672*a3141fd3SAndroid Build Coastguard Worker ** <tr><td><b>sqlite3_value_frombind </b> 5673*a3141fd3SAndroid Build Coastguard Worker ** <td>→ <td>True if value originated from a [bound parameter] 5674*a3141fd3SAndroid Build Coastguard Worker ** </table></blockquote> 5675*a3141fd3SAndroid Build Coastguard Worker ** 5676*a3141fd3SAndroid Build Coastguard Worker ** <b>Details:</b> 5677*a3141fd3SAndroid Build Coastguard Worker ** 5678*a3141fd3SAndroid Build Coastguard Worker ** These routines extract type, size, and content information from 5679*a3141fd3SAndroid Build Coastguard Worker ** [protected sqlite3_value] objects. Protected sqlite3_value objects 5680*a3141fd3SAndroid Build Coastguard Worker ** are used to pass parameter information into the functions that 5681*a3141fd3SAndroid Build Coastguard Worker ** implement [application-defined SQL functions] and [virtual tables]. 5682*a3141fd3SAndroid Build Coastguard Worker ** 5683*a3141fd3SAndroid Build Coastguard Worker ** These routines work only with [protected sqlite3_value] objects. 5684*a3141fd3SAndroid Build Coastguard Worker ** Any attempt to use these routines on an [unprotected sqlite3_value] 5685*a3141fd3SAndroid Build Coastguard Worker ** is not threadsafe. 5686*a3141fd3SAndroid Build Coastguard Worker ** 5687*a3141fd3SAndroid Build Coastguard Worker ** ^These routines work just like the corresponding [column access functions] 5688*a3141fd3SAndroid Build Coastguard Worker ** except that these routines take a single [protected sqlite3_value] object 5689*a3141fd3SAndroid Build Coastguard Worker ** pointer instead of a [sqlite3_stmt*] pointer and an integer column number. 5690*a3141fd3SAndroid Build Coastguard Worker ** 5691*a3141fd3SAndroid Build Coastguard Worker ** ^The sqlite3_value_text16() interface extracts a UTF-16 string 5692*a3141fd3SAndroid Build Coastguard Worker ** in the native byte-order of the host machine. ^The 5693*a3141fd3SAndroid Build Coastguard Worker ** sqlite3_value_text16be() and sqlite3_value_text16le() interfaces 5694*a3141fd3SAndroid Build Coastguard Worker ** extract UTF-16 strings as big-endian and little-endian respectively. 5695*a3141fd3SAndroid Build Coastguard Worker ** 5696*a3141fd3SAndroid Build Coastguard Worker ** ^If [sqlite3_value] object V was initialized 5697*a3141fd3SAndroid Build Coastguard Worker ** using [sqlite3_bind_pointer(S,I,P,X,D)] or [sqlite3_result_pointer(C,P,X,D)] 5698*a3141fd3SAndroid Build Coastguard Worker ** and if X and Y are strings that compare equal according to strcmp(X,Y), 5699*a3141fd3SAndroid Build Coastguard Worker ** then sqlite3_value_pointer(V,Y) will return the pointer P. ^Otherwise, 5700*a3141fd3SAndroid Build Coastguard Worker ** sqlite3_value_pointer(V,Y) returns a NULL. The sqlite3_bind_pointer() 5701*a3141fd3SAndroid Build Coastguard Worker ** routine is part of the [pointer passing interface] added for SQLite 3.20.0. 5702*a3141fd3SAndroid Build Coastguard Worker ** 5703*a3141fd3SAndroid Build Coastguard Worker ** ^(The sqlite3_value_type(V) interface returns the 5704*a3141fd3SAndroid Build Coastguard Worker ** [SQLITE_INTEGER | datatype code] for the initial datatype of the 5705*a3141fd3SAndroid Build Coastguard Worker ** [sqlite3_value] object V. The returned value is one of [SQLITE_INTEGER], 5706*a3141fd3SAndroid Build Coastguard Worker ** [SQLITE_FLOAT], [SQLITE_TEXT], [SQLITE_BLOB], or [SQLITE_NULL].)^ 5707*a3141fd3SAndroid Build Coastguard Worker ** Other interfaces might change the datatype for an sqlite3_value object. 5708*a3141fd3SAndroid Build Coastguard Worker ** For example, if the datatype is initially SQLITE_INTEGER and 5709*a3141fd3SAndroid Build Coastguard Worker ** sqlite3_value_text(V) is called to extract a text value for that 5710*a3141fd3SAndroid Build Coastguard Worker ** integer, then subsequent calls to sqlite3_value_type(V) might return 5711*a3141fd3SAndroid Build Coastguard Worker ** SQLITE_TEXT. Whether or not a persistent internal datatype conversion 5712*a3141fd3SAndroid Build Coastguard Worker ** occurs is undefined and may change from one release of SQLite to the next. 5713*a3141fd3SAndroid Build Coastguard Worker ** 5714*a3141fd3SAndroid Build Coastguard Worker ** ^(The sqlite3_value_numeric_type() interface attempts to apply 5715*a3141fd3SAndroid Build Coastguard Worker ** numeric affinity to the value. This means that an attempt is 5716*a3141fd3SAndroid Build Coastguard Worker ** made to convert the value to an integer or floating point. If 5717*a3141fd3SAndroid Build Coastguard Worker ** such a conversion is possible without loss of information (in other 5718*a3141fd3SAndroid Build Coastguard Worker ** words, if the value is a string that looks like a number) 5719*a3141fd3SAndroid Build Coastguard Worker ** then the conversion is performed. Otherwise no conversion occurs. 5720*a3141fd3SAndroid Build Coastguard Worker ** The [SQLITE_INTEGER | datatype] after conversion is returned.)^ 5721*a3141fd3SAndroid Build Coastguard Worker ** 5722*a3141fd3SAndroid Build Coastguard Worker ** ^Within the [xUpdate] method of a [virtual table], the 5723*a3141fd3SAndroid Build Coastguard Worker ** sqlite3_value_nochange(X) interface returns true if and only if 5724*a3141fd3SAndroid Build Coastguard Worker ** the column corresponding to X is unchanged by the UPDATE operation 5725*a3141fd3SAndroid Build Coastguard Worker ** that the xUpdate method call was invoked to implement and if 5726*a3141fd3SAndroid Build Coastguard Worker ** and the prior [xColumn] method call that was invoked to extracted 5727*a3141fd3SAndroid Build Coastguard Worker ** the value for that column returned without setting a result (probably 5728*a3141fd3SAndroid Build Coastguard Worker ** because it queried [sqlite3_vtab_nochange()] and found that the column 5729*a3141fd3SAndroid Build Coastguard Worker ** was unchanging). ^Within an [xUpdate] method, any value for which 5730*a3141fd3SAndroid Build Coastguard Worker ** sqlite3_value_nochange(X) is true will in all other respects appear 5731*a3141fd3SAndroid Build Coastguard Worker ** to be a NULL value. If sqlite3_value_nochange(X) is invoked anywhere other 5732*a3141fd3SAndroid Build Coastguard Worker ** than within an [xUpdate] method call for an UPDATE statement, then 5733*a3141fd3SAndroid Build Coastguard Worker ** the return value is arbitrary and meaningless. 5734*a3141fd3SAndroid Build Coastguard Worker ** 5735*a3141fd3SAndroid Build Coastguard Worker ** ^The sqlite3_value_frombind(X) interface returns non-zero if the 5736*a3141fd3SAndroid Build Coastguard Worker ** value X originated from one of the [sqlite3_bind_int|sqlite3_bind()] 5737*a3141fd3SAndroid Build Coastguard Worker ** interfaces. ^If X comes from an SQL literal value, or a table column, 5738*a3141fd3SAndroid Build Coastguard Worker ** or an expression, then sqlite3_value_frombind(X) returns zero. 5739*a3141fd3SAndroid Build Coastguard Worker ** 5740*a3141fd3SAndroid Build Coastguard Worker ** Please pay particular attention to the fact that the pointer returned 5741*a3141fd3SAndroid Build Coastguard Worker ** from [sqlite3_value_blob()], [sqlite3_value_text()], or 5742*a3141fd3SAndroid Build Coastguard Worker ** [sqlite3_value_text16()] can be invalidated by a subsequent call to 5743*a3141fd3SAndroid Build Coastguard Worker ** [sqlite3_value_bytes()], [sqlite3_value_bytes16()], [sqlite3_value_text()], 5744*a3141fd3SAndroid Build Coastguard Worker ** or [sqlite3_value_text16()]. 5745*a3141fd3SAndroid Build Coastguard Worker ** 5746*a3141fd3SAndroid Build Coastguard Worker ** These routines must be called from the same thread as 5747*a3141fd3SAndroid Build Coastguard Worker ** the SQL function that supplied the [sqlite3_value*] parameters. 5748*a3141fd3SAndroid Build Coastguard Worker ** 5749*a3141fd3SAndroid Build Coastguard Worker ** As long as the input parameter is correct, these routines can only 5750*a3141fd3SAndroid Build Coastguard Worker ** fail if an out-of-memory error occurs during a format conversion. 5751*a3141fd3SAndroid Build Coastguard Worker ** Only the following subset of interfaces are subject to out-of-memory 5752*a3141fd3SAndroid Build Coastguard Worker ** errors: 5753*a3141fd3SAndroid Build Coastguard Worker ** 5754*a3141fd3SAndroid Build Coastguard Worker ** <ul> 5755*a3141fd3SAndroid Build Coastguard Worker ** <li> sqlite3_value_blob() 5756*a3141fd3SAndroid Build Coastguard Worker ** <li> sqlite3_value_text() 5757*a3141fd3SAndroid Build Coastguard Worker ** <li> sqlite3_value_text16() 5758*a3141fd3SAndroid Build Coastguard Worker ** <li> sqlite3_value_text16le() 5759*a3141fd3SAndroid Build Coastguard Worker ** <li> sqlite3_value_text16be() 5760*a3141fd3SAndroid Build Coastguard Worker ** <li> sqlite3_value_bytes() 5761*a3141fd3SAndroid Build Coastguard Worker ** <li> sqlite3_value_bytes16() 5762*a3141fd3SAndroid Build Coastguard Worker ** </ul> 5763*a3141fd3SAndroid Build Coastguard Worker ** 5764*a3141fd3SAndroid Build Coastguard Worker ** If an out-of-memory error occurs, then the return value from these 5765*a3141fd3SAndroid Build Coastguard Worker ** routines is the same as if the column had contained an SQL NULL value. 5766*a3141fd3SAndroid Build Coastguard Worker ** Valid SQL NULL returns can be distinguished from out-of-memory errors 5767*a3141fd3SAndroid Build Coastguard Worker ** by invoking the [sqlite3_errcode()] immediately after the suspect 5768*a3141fd3SAndroid Build Coastguard Worker ** return value is obtained and before any 5769*a3141fd3SAndroid Build Coastguard Worker ** other SQLite interface is called on the same [database connection]. 5770*a3141fd3SAndroid Build Coastguard Worker */ 5771*a3141fd3SAndroid Build Coastguard Worker SQLITE_API const void *sqlite3_value_blob(sqlite3_value*); 5772*a3141fd3SAndroid Build Coastguard Worker SQLITE_API double sqlite3_value_double(sqlite3_value*); 5773*a3141fd3SAndroid Build Coastguard Worker SQLITE_API int sqlite3_value_int(sqlite3_value*); 5774*a3141fd3SAndroid Build Coastguard Worker SQLITE_API sqlite3_int64 sqlite3_value_int64(sqlite3_value*); 5775*a3141fd3SAndroid Build Coastguard Worker SQLITE_API void *sqlite3_value_pointer(sqlite3_value*, const char*); 5776*a3141fd3SAndroid Build Coastguard Worker SQLITE_API const unsigned char *sqlite3_value_text(sqlite3_value*); 5777*a3141fd3SAndroid Build Coastguard Worker SQLITE_API const void *sqlite3_value_text16(sqlite3_value*); 5778*a3141fd3SAndroid Build Coastguard Worker SQLITE_API const void *sqlite3_value_text16le(sqlite3_value*); 5779*a3141fd3SAndroid Build Coastguard Worker SQLITE_API const void *sqlite3_value_text16be(sqlite3_value*); 5780*a3141fd3SAndroid Build Coastguard Worker SQLITE_API int sqlite3_value_bytes(sqlite3_value*); 5781*a3141fd3SAndroid Build Coastguard Worker SQLITE_API int sqlite3_value_bytes16(sqlite3_value*); 5782*a3141fd3SAndroid Build Coastguard Worker SQLITE_API int sqlite3_value_type(sqlite3_value*); 5783*a3141fd3SAndroid Build Coastguard Worker SQLITE_API int sqlite3_value_numeric_type(sqlite3_value*); 5784*a3141fd3SAndroid Build Coastguard Worker SQLITE_API int sqlite3_value_nochange(sqlite3_value*); 5785*a3141fd3SAndroid Build Coastguard Worker SQLITE_API int sqlite3_value_frombind(sqlite3_value*); 5786*a3141fd3SAndroid Build Coastguard Worker 5787*a3141fd3SAndroid Build Coastguard Worker /* 5788*a3141fd3SAndroid Build Coastguard Worker ** CAPI3REF: Report the internal text encoding state of an sqlite3_value object 5789*a3141fd3SAndroid Build Coastguard Worker ** METHOD: sqlite3_value 5790*a3141fd3SAndroid Build Coastguard Worker ** 5791*a3141fd3SAndroid Build Coastguard Worker ** ^(The sqlite3_value_encoding(X) interface returns one of [SQLITE_UTF8], 5792*a3141fd3SAndroid Build Coastguard Worker ** [SQLITE_UTF16BE], or [SQLITE_UTF16LE] according to the current text encoding 5793*a3141fd3SAndroid Build Coastguard Worker ** of the value X, assuming that X has type TEXT.)^ If sqlite3_value_type(X) 5794*a3141fd3SAndroid Build Coastguard Worker ** returns something other than SQLITE_TEXT, then the return value from 5795*a3141fd3SAndroid Build Coastguard Worker ** sqlite3_value_encoding(X) is meaningless. ^Calls to 5796*a3141fd3SAndroid Build Coastguard Worker ** [sqlite3_value_text(X)], [sqlite3_value_text16(X)], [sqlite3_value_text16be(X)], 5797*a3141fd3SAndroid Build Coastguard Worker ** [sqlite3_value_text16le(X)], [sqlite3_value_bytes(X)], or 5798*a3141fd3SAndroid Build Coastguard Worker ** [sqlite3_value_bytes16(X)] might change the encoding of the value X and 5799*a3141fd3SAndroid Build Coastguard Worker ** thus change the return from subsequent calls to sqlite3_value_encoding(X). 5800*a3141fd3SAndroid Build Coastguard Worker ** 5801*a3141fd3SAndroid Build Coastguard Worker ** This routine is intended for used by applications that test and validate 5802*a3141fd3SAndroid Build Coastguard Worker ** the SQLite implementation. This routine is inquiring about the opaque 5803*a3141fd3SAndroid Build Coastguard Worker ** internal state of an [sqlite3_value] object. Ordinary applications should 5804*a3141fd3SAndroid Build Coastguard Worker ** not need to know what the internal state of an sqlite3_value object is and 5805*a3141fd3SAndroid Build Coastguard Worker ** hence should not need to use this interface. 5806*a3141fd3SAndroid Build Coastguard Worker */ 5807*a3141fd3SAndroid Build Coastguard Worker SQLITE_API int sqlite3_value_encoding(sqlite3_value*); 5808*a3141fd3SAndroid Build Coastguard Worker 5809*a3141fd3SAndroid Build Coastguard Worker /* 5810*a3141fd3SAndroid Build Coastguard Worker ** CAPI3REF: Finding The Subtype Of SQL Values 5811*a3141fd3SAndroid Build Coastguard Worker ** METHOD: sqlite3_value 5812*a3141fd3SAndroid Build Coastguard Worker ** 5813*a3141fd3SAndroid Build Coastguard Worker ** The sqlite3_value_subtype(V) function returns the subtype for 5814*a3141fd3SAndroid Build Coastguard Worker ** an [application-defined SQL function] argument V. The subtype 5815*a3141fd3SAndroid Build Coastguard Worker ** information can be used to pass a limited amount of context from 5816*a3141fd3SAndroid Build Coastguard Worker ** one SQL function to another. Use the [sqlite3_result_subtype()] 5817*a3141fd3SAndroid Build Coastguard Worker ** routine to set the subtype for the return value of an SQL function. 5818*a3141fd3SAndroid Build Coastguard Worker ** 5819*a3141fd3SAndroid Build Coastguard Worker ** Every [application-defined SQL function] that invoke this interface 5820*a3141fd3SAndroid Build Coastguard Worker ** should include the [SQLITE_SUBTYPE] property in the text 5821*a3141fd3SAndroid Build Coastguard Worker ** encoding argument when the function is [sqlite3_create_function|registered]. 5822*a3141fd3SAndroid Build Coastguard Worker ** If the [SQLITE_SUBTYPE] property is omitted, then sqlite3_value_subtype() 5823*a3141fd3SAndroid Build Coastguard Worker ** might return zero instead of the upstream subtype in some corner cases. 5824*a3141fd3SAndroid Build Coastguard Worker */ 5825*a3141fd3SAndroid Build Coastguard Worker SQLITE_API unsigned int sqlite3_value_subtype(sqlite3_value*); 5826*a3141fd3SAndroid Build Coastguard Worker 5827*a3141fd3SAndroid Build Coastguard Worker /* 5828*a3141fd3SAndroid Build Coastguard Worker ** CAPI3REF: Copy And Free SQL Values 5829*a3141fd3SAndroid Build Coastguard Worker ** METHOD: sqlite3_value 5830*a3141fd3SAndroid Build Coastguard Worker ** 5831*a3141fd3SAndroid Build Coastguard Worker ** ^The sqlite3_value_dup(V) interface makes a copy of the [sqlite3_value] 5832*a3141fd3SAndroid Build Coastguard Worker ** object D and returns a pointer to that copy. ^The [sqlite3_value] returned 5833*a3141fd3SAndroid Build Coastguard Worker ** is a [protected sqlite3_value] object even if the input is not. 5834*a3141fd3SAndroid Build Coastguard Worker ** ^The sqlite3_value_dup(V) interface returns NULL if V is NULL or if a 5835*a3141fd3SAndroid Build Coastguard Worker ** memory allocation fails. ^If V is a [pointer value], then the result 5836*a3141fd3SAndroid Build Coastguard Worker ** of sqlite3_value_dup(V) is a NULL value. 5837*a3141fd3SAndroid Build Coastguard Worker ** 5838*a3141fd3SAndroid Build Coastguard Worker ** ^The sqlite3_value_free(V) interface frees an [sqlite3_value] object 5839*a3141fd3SAndroid Build Coastguard Worker ** previously obtained from [sqlite3_value_dup()]. ^If V is a NULL pointer 5840*a3141fd3SAndroid Build Coastguard Worker ** then sqlite3_value_free(V) is a harmless no-op. 5841*a3141fd3SAndroid Build Coastguard Worker */ 5842*a3141fd3SAndroid Build Coastguard Worker SQLITE_API sqlite3_value *sqlite3_value_dup(const sqlite3_value*); 5843*a3141fd3SAndroid Build Coastguard Worker SQLITE_API void sqlite3_value_free(sqlite3_value*); 5844*a3141fd3SAndroid Build Coastguard Worker 5845*a3141fd3SAndroid Build Coastguard Worker /* 5846*a3141fd3SAndroid Build Coastguard Worker ** CAPI3REF: Obtain Aggregate Function Context 5847*a3141fd3SAndroid Build Coastguard Worker ** METHOD: sqlite3_context 5848*a3141fd3SAndroid Build Coastguard Worker ** 5849*a3141fd3SAndroid Build Coastguard Worker ** Implementations of aggregate SQL functions use this 5850*a3141fd3SAndroid Build Coastguard Worker ** routine to allocate memory for storing their state. 5851*a3141fd3SAndroid Build Coastguard Worker ** 5852*a3141fd3SAndroid Build Coastguard Worker ** ^The first time the sqlite3_aggregate_context(C,N) routine is called 5853*a3141fd3SAndroid Build Coastguard Worker ** for a particular aggregate function, SQLite allocates 5854*a3141fd3SAndroid Build Coastguard Worker ** N bytes of memory, zeroes out that memory, and returns a pointer 5855*a3141fd3SAndroid Build Coastguard Worker ** to the new memory. ^On second and subsequent calls to 5856*a3141fd3SAndroid Build Coastguard Worker ** sqlite3_aggregate_context() for the same aggregate function instance, 5857*a3141fd3SAndroid Build Coastguard Worker ** the same buffer is returned. Sqlite3_aggregate_context() is normally 5858*a3141fd3SAndroid Build Coastguard Worker ** called once for each invocation of the xStep callback and then one 5859*a3141fd3SAndroid Build Coastguard Worker ** last time when the xFinal callback is invoked. ^(When no rows match 5860*a3141fd3SAndroid Build Coastguard Worker ** an aggregate query, the xStep() callback of the aggregate function 5861*a3141fd3SAndroid Build Coastguard Worker ** implementation is never called and xFinal() is called exactly once. 5862*a3141fd3SAndroid Build Coastguard Worker ** In those cases, sqlite3_aggregate_context() might be called for the 5863*a3141fd3SAndroid Build Coastguard Worker ** first time from within xFinal().)^ 5864*a3141fd3SAndroid Build Coastguard Worker ** 5865*a3141fd3SAndroid Build Coastguard Worker ** ^The sqlite3_aggregate_context(C,N) routine returns a NULL pointer 5866*a3141fd3SAndroid Build Coastguard Worker ** when first called if N is less than or equal to zero or if a memory 5867*a3141fd3SAndroid Build Coastguard Worker ** allocation error occurs. 5868*a3141fd3SAndroid Build Coastguard Worker ** 5869*a3141fd3SAndroid Build Coastguard Worker ** ^(The amount of space allocated by sqlite3_aggregate_context(C,N) is 5870*a3141fd3SAndroid Build Coastguard Worker ** determined by the N parameter on first successful call. Changing the 5871*a3141fd3SAndroid Build Coastguard Worker ** value of N in any subsequent call to sqlite3_aggregate_context() within 5872*a3141fd3SAndroid Build Coastguard Worker ** the same aggregate function instance will not resize the memory 5873*a3141fd3SAndroid Build Coastguard Worker ** allocation.)^ Within the xFinal callback, it is customary to set 5874*a3141fd3SAndroid Build Coastguard Worker ** N=0 in calls to sqlite3_aggregate_context(C,N) so that no 5875*a3141fd3SAndroid Build Coastguard Worker ** pointless memory allocations occur. 5876*a3141fd3SAndroid Build Coastguard Worker ** 5877*a3141fd3SAndroid Build Coastguard Worker ** ^SQLite automatically frees the memory allocated by 5878*a3141fd3SAndroid Build Coastguard Worker ** sqlite3_aggregate_context() when the aggregate query concludes. 5879*a3141fd3SAndroid Build Coastguard Worker ** 5880*a3141fd3SAndroid Build Coastguard Worker ** The first parameter must be a copy of the 5881*a3141fd3SAndroid Build Coastguard Worker ** [sqlite3_context | SQL function context] that is the first parameter 5882*a3141fd3SAndroid Build Coastguard Worker ** to the xStep or xFinal callback routine that implements the aggregate 5883*a3141fd3SAndroid Build Coastguard Worker ** function. 5884*a3141fd3SAndroid Build Coastguard Worker ** 5885*a3141fd3SAndroid Build Coastguard Worker ** This routine must be called from the same thread in which 5886*a3141fd3SAndroid Build Coastguard Worker ** the aggregate SQL function is running. 5887*a3141fd3SAndroid Build Coastguard Worker */ 5888*a3141fd3SAndroid Build Coastguard Worker SQLITE_API void *sqlite3_aggregate_context(sqlite3_context*, int nBytes); 5889*a3141fd3SAndroid Build Coastguard Worker 5890*a3141fd3SAndroid Build Coastguard Worker /* 5891*a3141fd3SAndroid Build Coastguard Worker ** CAPI3REF: User Data For Functions 5892*a3141fd3SAndroid Build Coastguard Worker ** METHOD: sqlite3_context 5893*a3141fd3SAndroid Build Coastguard Worker ** 5894*a3141fd3SAndroid Build Coastguard Worker ** ^The sqlite3_user_data() interface returns a copy of 5895*a3141fd3SAndroid Build Coastguard Worker ** the pointer that was the pUserData parameter (the 5th parameter) 5896*a3141fd3SAndroid Build Coastguard Worker ** of the [sqlite3_create_function()] 5897*a3141fd3SAndroid Build Coastguard Worker ** and [sqlite3_create_function16()] routines that originally 5898*a3141fd3SAndroid Build Coastguard Worker ** registered the application defined function. 5899*a3141fd3SAndroid Build Coastguard Worker ** 5900*a3141fd3SAndroid Build Coastguard Worker ** This routine must be called from the same thread in which 5901*a3141fd3SAndroid Build Coastguard Worker ** the application-defined function is running. 5902*a3141fd3SAndroid Build Coastguard Worker */ 5903*a3141fd3SAndroid Build Coastguard Worker SQLITE_API void *sqlite3_user_data(sqlite3_context*); 5904*a3141fd3SAndroid Build Coastguard Worker 5905*a3141fd3SAndroid Build Coastguard Worker /* 5906*a3141fd3SAndroid Build Coastguard Worker ** CAPI3REF: Database Connection For Functions 5907*a3141fd3SAndroid Build Coastguard Worker ** METHOD: sqlite3_context 5908*a3141fd3SAndroid Build Coastguard Worker ** 5909*a3141fd3SAndroid Build Coastguard Worker ** ^The sqlite3_context_db_handle() interface returns a copy of 5910*a3141fd3SAndroid Build Coastguard Worker ** the pointer to the [database connection] (the 1st parameter) 5911*a3141fd3SAndroid Build Coastguard Worker ** of the [sqlite3_create_function()] 5912*a3141fd3SAndroid Build Coastguard Worker ** and [sqlite3_create_function16()] routines that originally 5913*a3141fd3SAndroid Build Coastguard Worker ** registered the application defined function. 5914*a3141fd3SAndroid Build Coastguard Worker */ 5915*a3141fd3SAndroid Build Coastguard Worker SQLITE_API sqlite3 *sqlite3_context_db_handle(sqlite3_context*); 5916*a3141fd3SAndroid Build Coastguard Worker 5917*a3141fd3SAndroid Build Coastguard Worker /* 5918*a3141fd3SAndroid Build Coastguard Worker ** CAPI3REF: Function Auxiliary Data 5919*a3141fd3SAndroid Build Coastguard Worker ** METHOD: sqlite3_context 5920*a3141fd3SAndroid Build Coastguard Worker ** 5921*a3141fd3SAndroid Build Coastguard Worker ** These functions may be used by (non-aggregate) SQL functions to 5922*a3141fd3SAndroid Build Coastguard Worker ** associate auxiliary data with argument values. If the same argument 5923*a3141fd3SAndroid Build Coastguard Worker ** value is passed to multiple invocations of the same SQL function during 5924*a3141fd3SAndroid Build Coastguard Worker ** query execution, under some circumstances the associated auxiliary data 5925*a3141fd3SAndroid Build Coastguard Worker ** might be preserved. An example of where this might be useful is in a 5926*a3141fd3SAndroid Build Coastguard Worker ** regular-expression matching function. The compiled version of the regular 5927*a3141fd3SAndroid Build Coastguard Worker ** expression can be stored as auxiliary data associated with the pattern string. 5928*a3141fd3SAndroid Build Coastguard Worker ** Then as long as the pattern string remains the same, 5929*a3141fd3SAndroid Build Coastguard Worker ** the compiled regular expression can be reused on multiple 5930*a3141fd3SAndroid Build Coastguard Worker ** invocations of the same function. 5931*a3141fd3SAndroid Build Coastguard Worker ** 5932*a3141fd3SAndroid Build Coastguard Worker ** ^The sqlite3_get_auxdata(C,N) interface returns a pointer to the auxiliary data 5933*a3141fd3SAndroid Build Coastguard Worker ** associated by the sqlite3_set_auxdata(C,N,P,X) function with the Nth argument 5934*a3141fd3SAndroid Build Coastguard Worker ** value to the application-defined function. ^N is zero for the left-most 5935*a3141fd3SAndroid Build Coastguard Worker ** function argument. ^If there is no auxiliary data 5936*a3141fd3SAndroid Build Coastguard Worker ** associated with the function argument, the sqlite3_get_auxdata(C,N) interface 5937*a3141fd3SAndroid Build Coastguard Worker ** returns a NULL pointer. 5938*a3141fd3SAndroid Build Coastguard Worker ** 5939*a3141fd3SAndroid Build Coastguard Worker ** ^The sqlite3_set_auxdata(C,N,P,X) interface saves P as auxiliary data for the 5940*a3141fd3SAndroid Build Coastguard Worker ** N-th argument of the application-defined function. ^Subsequent 5941*a3141fd3SAndroid Build Coastguard Worker ** calls to sqlite3_get_auxdata(C,N) return P from the most recent 5942*a3141fd3SAndroid Build Coastguard Worker ** sqlite3_set_auxdata(C,N,P,X) call if the auxiliary data is still valid or 5943*a3141fd3SAndroid Build Coastguard Worker ** NULL if the auxiliary data has been discarded. 5944*a3141fd3SAndroid Build Coastguard Worker ** ^After each call to sqlite3_set_auxdata(C,N,P,X) where X is not NULL, 5945*a3141fd3SAndroid Build Coastguard Worker ** SQLite will invoke the destructor function X with parameter P exactly 5946*a3141fd3SAndroid Build Coastguard Worker ** once, when the auxiliary data is discarded. 5947*a3141fd3SAndroid Build Coastguard Worker ** SQLite is free to discard the auxiliary data at any time, including: <ul> 5948*a3141fd3SAndroid Build Coastguard Worker ** <li> ^(when the corresponding function parameter changes)^, or 5949*a3141fd3SAndroid Build Coastguard Worker ** <li> ^(when [sqlite3_reset()] or [sqlite3_finalize()] is called for the 5950*a3141fd3SAndroid Build Coastguard Worker ** SQL statement)^, or 5951*a3141fd3SAndroid Build Coastguard Worker ** <li> ^(when sqlite3_set_auxdata() is invoked again on the same 5952*a3141fd3SAndroid Build Coastguard Worker ** parameter)^, or 5953*a3141fd3SAndroid Build Coastguard Worker ** <li> ^(during the original sqlite3_set_auxdata() call when a memory 5954*a3141fd3SAndroid Build Coastguard Worker ** allocation error occurs.)^ 5955*a3141fd3SAndroid Build Coastguard Worker ** <li> ^(during the original sqlite3_set_auxdata() call if the function 5956*a3141fd3SAndroid Build Coastguard Worker ** is evaluated during query planning instead of during query execution, 5957*a3141fd3SAndroid Build Coastguard Worker ** as sometimes happens with [SQLITE_ENABLE_STAT4].)^ </ul> 5958*a3141fd3SAndroid Build Coastguard Worker ** 5959*a3141fd3SAndroid Build Coastguard Worker ** Note the last two bullets in particular. The destructor X in 5960*a3141fd3SAndroid Build Coastguard Worker ** sqlite3_set_auxdata(C,N,P,X) might be called immediately, before the 5961*a3141fd3SAndroid Build Coastguard Worker ** sqlite3_set_auxdata() interface even returns. Hence sqlite3_set_auxdata() 5962*a3141fd3SAndroid Build Coastguard Worker ** should be called near the end of the function implementation and the 5963*a3141fd3SAndroid Build Coastguard Worker ** function implementation should not make any use of P after 5964*a3141fd3SAndroid Build Coastguard Worker ** sqlite3_set_auxdata() has been called. Furthermore, a call to 5965*a3141fd3SAndroid Build Coastguard Worker ** sqlite3_get_auxdata() that occurs immediately after a corresponding call 5966*a3141fd3SAndroid Build Coastguard Worker ** to sqlite3_set_auxdata() might still return NULL if an out-of-memory 5967*a3141fd3SAndroid Build Coastguard Worker ** condition occurred during the sqlite3_set_auxdata() call or if the 5968*a3141fd3SAndroid Build Coastguard Worker ** function is being evaluated during query planning rather than during 5969*a3141fd3SAndroid Build Coastguard Worker ** query execution. 5970*a3141fd3SAndroid Build Coastguard Worker ** 5971*a3141fd3SAndroid Build Coastguard Worker ** ^(In practice, auxiliary data is preserved between function calls for 5972*a3141fd3SAndroid Build Coastguard Worker ** function parameters that are compile-time constants, including literal 5973*a3141fd3SAndroid Build Coastguard Worker ** values and [parameters] and expressions composed from the same.)^ 5974*a3141fd3SAndroid Build Coastguard Worker ** 5975*a3141fd3SAndroid Build Coastguard Worker ** The value of the N parameter to these interfaces should be non-negative. 5976*a3141fd3SAndroid Build Coastguard Worker ** Future enhancements may make use of negative N values to define new 5977*a3141fd3SAndroid Build Coastguard Worker ** kinds of function caching behavior. 5978*a3141fd3SAndroid Build Coastguard Worker ** 5979*a3141fd3SAndroid Build Coastguard Worker ** These routines must be called from the same thread in which 5980*a3141fd3SAndroid Build Coastguard Worker ** the SQL function is running. 5981*a3141fd3SAndroid Build Coastguard Worker ** 5982*a3141fd3SAndroid Build Coastguard Worker ** See also: [sqlite3_get_clientdata()] and [sqlite3_set_clientdata()]. 5983*a3141fd3SAndroid Build Coastguard Worker */ 5984*a3141fd3SAndroid Build Coastguard Worker SQLITE_API void *sqlite3_get_auxdata(sqlite3_context*, int N); 5985*a3141fd3SAndroid Build Coastguard Worker SQLITE_API void sqlite3_set_auxdata(sqlite3_context*, int N, void*, void (*)(void*)); 5986*a3141fd3SAndroid Build Coastguard Worker 5987*a3141fd3SAndroid Build Coastguard Worker /* 5988*a3141fd3SAndroid Build Coastguard Worker ** CAPI3REF: Database Connection Client Data 5989*a3141fd3SAndroid Build Coastguard Worker ** METHOD: sqlite3 5990*a3141fd3SAndroid Build Coastguard Worker ** 5991*a3141fd3SAndroid Build Coastguard Worker ** These functions are used to associate one or more named pointers 5992*a3141fd3SAndroid Build Coastguard Worker ** with a [database connection]. 5993*a3141fd3SAndroid Build Coastguard Worker ** A call to sqlite3_set_clientdata(D,N,P,X) causes the pointer P 5994*a3141fd3SAndroid Build Coastguard Worker ** to be attached to [database connection] D using name N. Subsequent 5995*a3141fd3SAndroid Build Coastguard Worker ** calls to sqlite3_get_clientdata(D,N) will return a copy of pointer P 5996*a3141fd3SAndroid Build Coastguard Worker ** or a NULL pointer if there were no prior calls to 5997*a3141fd3SAndroid Build Coastguard Worker ** sqlite3_set_clientdata() with the same values of D and N. 5998*a3141fd3SAndroid Build Coastguard Worker ** Names are compared using strcmp() and are thus case sensitive. 5999*a3141fd3SAndroid Build Coastguard Worker ** 6000*a3141fd3SAndroid Build Coastguard Worker ** If P and X are both non-NULL, then the destructor X is invoked with 6001*a3141fd3SAndroid Build Coastguard Worker ** argument P on the first of the following occurrences: 6002*a3141fd3SAndroid Build Coastguard Worker ** <ul> 6003*a3141fd3SAndroid Build Coastguard Worker ** <li> An out-of-memory error occurs during the call to 6004*a3141fd3SAndroid Build Coastguard Worker ** sqlite3_set_clientdata() which attempts to register pointer P. 6005*a3141fd3SAndroid Build Coastguard Worker ** <li> A subsequent call to sqlite3_set_clientdata(D,N,P,X) is made 6006*a3141fd3SAndroid Build Coastguard Worker ** with the same D and N parameters. 6007*a3141fd3SAndroid Build Coastguard Worker ** <li> The database connection closes. SQLite does not make any guarantees 6008*a3141fd3SAndroid Build Coastguard Worker ** about the order in which destructors are called, only that all 6009*a3141fd3SAndroid Build Coastguard Worker ** destructors will be called exactly once at some point during the 6010*a3141fd3SAndroid Build Coastguard Worker ** database connection closing process. 6011*a3141fd3SAndroid Build Coastguard Worker ** </ul> 6012*a3141fd3SAndroid Build Coastguard Worker ** 6013*a3141fd3SAndroid Build Coastguard Worker ** SQLite does not do anything with client data other than invoke 6014*a3141fd3SAndroid Build Coastguard Worker ** destructors on the client data at the appropriate time. The intended 6015*a3141fd3SAndroid Build Coastguard Worker ** use for client data is to provide a mechanism for wrapper libraries 6016*a3141fd3SAndroid Build Coastguard Worker ** to store additional information about an SQLite database connection. 6017*a3141fd3SAndroid Build Coastguard Worker ** 6018*a3141fd3SAndroid Build Coastguard Worker ** There is no limit (other than available memory) on the number of different 6019*a3141fd3SAndroid Build Coastguard Worker ** client data pointers (with different names) that can be attached to a 6020*a3141fd3SAndroid Build Coastguard Worker ** single database connection. However, the implementation is optimized 6021*a3141fd3SAndroid Build Coastguard Worker ** for the case of having only one or two different client data names. 6022*a3141fd3SAndroid Build Coastguard Worker ** Applications and wrapper libraries are discouraged from using more than 6023*a3141fd3SAndroid Build Coastguard Worker ** one client data name each. 6024*a3141fd3SAndroid Build Coastguard Worker ** 6025*a3141fd3SAndroid Build Coastguard Worker ** There is no way to enumerate the client data pointers 6026*a3141fd3SAndroid Build Coastguard Worker ** associated with a database connection. The N parameter can be thought 6027*a3141fd3SAndroid Build Coastguard Worker ** of as a secret key such that only code that knows the secret key is able 6028*a3141fd3SAndroid Build Coastguard Worker ** to access the associated data. 6029*a3141fd3SAndroid Build Coastguard Worker ** 6030*a3141fd3SAndroid Build Coastguard Worker ** Security Warning: These interfaces should not be exposed in scripting 6031*a3141fd3SAndroid Build Coastguard Worker ** languages or in other circumstances where it might be possible for an 6032*a3141fd3SAndroid Build Coastguard Worker ** an attacker to invoke them. Any agent that can invoke these interfaces 6033*a3141fd3SAndroid Build Coastguard Worker ** can probably also take control of the process. 6034*a3141fd3SAndroid Build Coastguard Worker ** 6035*a3141fd3SAndroid Build Coastguard Worker ** Database connection client data is only available for SQLite 6036*a3141fd3SAndroid Build Coastguard Worker ** version 3.44.0 ([dateof:3.44.0]) and later. 6037*a3141fd3SAndroid Build Coastguard Worker ** 6038*a3141fd3SAndroid Build Coastguard Worker ** See also: [sqlite3_set_auxdata()] and [sqlite3_get_auxdata()]. 6039*a3141fd3SAndroid Build Coastguard Worker */ 6040*a3141fd3SAndroid Build Coastguard Worker SQLITE_API void *sqlite3_get_clientdata(sqlite3*,const char*); 6041*a3141fd3SAndroid Build Coastguard Worker SQLITE_API int sqlite3_set_clientdata(sqlite3*, const char*, void*, void(*)(void*)); 6042*a3141fd3SAndroid Build Coastguard Worker 6043*a3141fd3SAndroid Build Coastguard Worker /* 6044*a3141fd3SAndroid Build Coastguard Worker ** CAPI3REF: Constants Defining Special Destructor Behavior 6045*a3141fd3SAndroid Build Coastguard Worker ** 6046*a3141fd3SAndroid Build Coastguard Worker ** These are special values for the destructor that is passed in as the 6047*a3141fd3SAndroid Build Coastguard Worker ** final argument to routines like [sqlite3_result_blob()]. ^If the destructor 6048*a3141fd3SAndroid Build Coastguard Worker ** argument is SQLITE_STATIC, it means that the content pointer is constant 6049*a3141fd3SAndroid Build Coastguard Worker ** and will never change. It does not need to be destroyed. ^The 6050*a3141fd3SAndroid Build Coastguard Worker ** SQLITE_TRANSIENT value means that the content will likely change in 6051*a3141fd3SAndroid Build Coastguard Worker ** the near future and that SQLite should make its own private copy of 6052*a3141fd3SAndroid Build Coastguard Worker ** the content before returning. 6053*a3141fd3SAndroid Build Coastguard Worker ** 6054*a3141fd3SAndroid Build Coastguard Worker ** The typedef is necessary to work around problems in certain 6055*a3141fd3SAndroid Build Coastguard Worker ** C++ compilers. 6056*a3141fd3SAndroid Build Coastguard Worker */ 6057*a3141fd3SAndroid Build Coastguard Worker typedef void (*sqlite3_destructor_type)(void*); 6058*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_STATIC ((sqlite3_destructor_type)0) 6059*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_TRANSIENT ((sqlite3_destructor_type)-1) 6060*a3141fd3SAndroid Build Coastguard Worker 6061*a3141fd3SAndroid Build Coastguard Worker /* 6062*a3141fd3SAndroid Build Coastguard Worker ** CAPI3REF: Setting The Result Of An SQL Function 6063*a3141fd3SAndroid Build Coastguard Worker ** METHOD: sqlite3_context 6064*a3141fd3SAndroid Build Coastguard Worker ** 6065*a3141fd3SAndroid Build Coastguard Worker ** These routines are used by the xFunc or xFinal callbacks that 6066*a3141fd3SAndroid Build Coastguard Worker ** implement SQL functions and aggregates. See 6067*a3141fd3SAndroid Build Coastguard Worker ** [sqlite3_create_function()] and [sqlite3_create_function16()] 6068*a3141fd3SAndroid Build Coastguard Worker ** for additional information. 6069*a3141fd3SAndroid Build Coastguard Worker ** 6070*a3141fd3SAndroid Build Coastguard Worker ** These functions work very much like the [parameter binding] family of 6071*a3141fd3SAndroid Build Coastguard Worker ** functions used to bind values to host parameters in prepared statements. 6072*a3141fd3SAndroid Build Coastguard Worker ** Refer to the [SQL parameter] documentation for additional information. 6073*a3141fd3SAndroid Build Coastguard Worker ** 6074*a3141fd3SAndroid Build Coastguard Worker ** ^The sqlite3_result_blob() interface sets the result from 6075*a3141fd3SAndroid Build Coastguard Worker ** an application-defined function to be the BLOB whose content is pointed 6076*a3141fd3SAndroid Build Coastguard Worker ** to by the second parameter and which is N bytes long where N is the 6077*a3141fd3SAndroid Build Coastguard Worker ** third parameter. 6078*a3141fd3SAndroid Build Coastguard Worker ** 6079*a3141fd3SAndroid Build Coastguard Worker ** ^The sqlite3_result_zeroblob(C,N) and sqlite3_result_zeroblob64(C,N) 6080*a3141fd3SAndroid Build Coastguard Worker ** interfaces set the result of the application-defined function to be 6081*a3141fd3SAndroid Build Coastguard Worker ** a BLOB containing all zero bytes and N bytes in size. 6082*a3141fd3SAndroid Build Coastguard Worker ** 6083*a3141fd3SAndroid Build Coastguard Worker ** ^The sqlite3_result_double() interface sets the result from 6084*a3141fd3SAndroid Build Coastguard Worker ** an application-defined function to be a floating point value specified 6085*a3141fd3SAndroid Build Coastguard Worker ** by its 2nd argument. 6086*a3141fd3SAndroid Build Coastguard Worker ** 6087*a3141fd3SAndroid Build Coastguard Worker ** ^The sqlite3_result_error() and sqlite3_result_error16() functions 6088*a3141fd3SAndroid Build Coastguard Worker ** cause the implemented SQL function to throw an exception. 6089*a3141fd3SAndroid Build Coastguard Worker ** ^SQLite uses the string pointed to by the 6090*a3141fd3SAndroid Build Coastguard Worker ** 2nd parameter of sqlite3_result_error() or sqlite3_result_error16() 6091*a3141fd3SAndroid Build Coastguard Worker ** as the text of an error message. ^SQLite interprets the error 6092*a3141fd3SAndroid Build Coastguard Worker ** message string from sqlite3_result_error() as UTF-8. ^SQLite 6093*a3141fd3SAndroid Build Coastguard Worker ** interprets the string from sqlite3_result_error16() as UTF-16 using 6094*a3141fd3SAndroid Build Coastguard Worker ** the same [byte-order determination rules] as [sqlite3_bind_text16()]. 6095*a3141fd3SAndroid Build Coastguard Worker ** ^If the third parameter to sqlite3_result_error() 6096*a3141fd3SAndroid Build Coastguard Worker ** or sqlite3_result_error16() is negative then SQLite takes as the error 6097*a3141fd3SAndroid Build Coastguard Worker ** message all text up through the first zero character. 6098*a3141fd3SAndroid Build Coastguard Worker ** ^If the third parameter to sqlite3_result_error() or 6099*a3141fd3SAndroid Build Coastguard Worker ** sqlite3_result_error16() is non-negative then SQLite takes that many 6100*a3141fd3SAndroid Build Coastguard Worker ** bytes (not characters) from the 2nd parameter as the error message. 6101*a3141fd3SAndroid Build Coastguard Worker ** ^The sqlite3_result_error() and sqlite3_result_error16() 6102*a3141fd3SAndroid Build Coastguard Worker ** routines make a private copy of the error message text before 6103*a3141fd3SAndroid Build Coastguard Worker ** they return. Hence, the calling function can deallocate or 6104*a3141fd3SAndroid Build Coastguard Worker ** modify the text after they return without harm. 6105*a3141fd3SAndroid Build Coastguard Worker ** ^The sqlite3_result_error_code() function changes the error code 6106*a3141fd3SAndroid Build Coastguard Worker ** returned by SQLite as a result of an error in a function. ^By default, 6107*a3141fd3SAndroid Build Coastguard Worker ** the error code is SQLITE_ERROR. ^A subsequent call to sqlite3_result_error() 6108*a3141fd3SAndroid Build Coastguard Worker ** or sqlite3_result_error16() resets the error code to SQLITE_ERROR. 6109*a3141fd3SAndroid Build Coastguard Worker ** 6110*a3141fd3SAndroid Build Coastguard Worker ** ^The sqlite3_result_error_toobig() interface causes SQLite to throw an 6111*a3141fd3SAndroid Build Coastguard Worker ** error indicating that a string or BLOB is too long to represent. 6112*a3141fd3SAndroid Build Coastguard Worker ** 6113*a3141fd3SAndroid Build Coastguard Worker ** ^The sqlite3_result_error_nomem() interface causes SQLite to throw an 6114*a3141fd3SAndroid Build Coastguard Worker ** error indicating that a memory allocation failed. 6115*a3141fd3SAndroid Build Coastguard Worker ** 6116*a3141fd3SAndroid Build Coastguard Worker ** ^The sqlite3_result_int() interface sets the return value 6117*a3141fd3SAndroid Build Coastguard Worker ** of the application-defined function to be the 32-bit signed integer 6118*a3141fd3SAndroid Build Coastguard Worker ** value given in the 2nd argument. 6119*a3141fd3SAndroid Build Coastguard Worker ** ^The sqlite3_result_int64() interface sets the return value 6120*a3141fd3SAndroid Build Coastguard Worker ** of the application-defined function to be the 64-bit signed integer 6121*a3141fd3SAndroid Build Coastguard Worker ** value given in the 2nd argument. 6122*a3141fd3SAndroid Build Coastguard Worker ** 6123*a3141fd3SAndroid Build Coastguard Worker ** ^The sqlite3_result_null() interface sets the return value 6124*a3141fd3SAndroid Build Coastguard Worker ** of the application-defined function to be NULL. 6125*a3141fd3SAndroid Build Coastguard Worker ** 6126*a3141fd3SAndroid Build Coastguard Worker ** ^The sqlite3_result_text(), sqlite3_result_text16(), 6127*a3141fd3SAndroid Build Coastguard Worker ** sqlite3_result_text16le(), and sqlite3_result_text16be() interfaces 6128*a3141fd3SAndroid Build Coastguard Worker ** set the return value of the application-defined function to be 6129*a3141fd3SAndroid Build Coastguard Worker ** a text string which is represented as UTF-8, UTF-16 native byte order, 6130*a3141fd3SAndroid Build Coastguard Worker ** UTF-16 little endian, or UTF-16 big endian, respectively. 6131*a3141fd3SAndroid Build Coastguard Worker ** ^The sqlite3_result_text64() interface sets the return value of an 6132*a3141fd3SAndroid Build Coastguard Worker ** application-defined function to be a text string in an encoding 6133*a3141fd3SAndroid Build Coastguard Worker ** specified by the fifth (and last) parameter, which must be one 6134*a3141fd3SAndroid Build Coastguard Worker ** of [SQLITE_UTF8], [SQLITE_UTF16], [SQLITE_UTF16BE], or [SQLITE_UTF16LE]. 6135*a3141fd3SAndroid Build Coastguard Worker ** ^SQLite takes the text result from the application from 6136*a3141fd3SAndroid Build Coastguard Worker ** the 2nd parameter of the sqlite3_result_text* interfaces. 6137*a3141fd3SAndroid Build Coastguard Worker ** ^If the 3rd parameter to any of the sqlite3_result_text* interfaces 6138*a3141fd3SAndroid Build Coastguard Worker ** other than sqlite3_result_text64() is negative, then SQLite computes 6139*a3141fd3SAndroid Build Coastguard Worker ** the string length itself by searching the 2nd parameter for the first 6140*a3141fd3SAndroid Build Coastguard Worker ** zero character. 6141*a3141fd3SAndroid Build Coastguard Worker ** ^If the 3rd parameter to the sqlite3_result_text* interfaces 6142*a3141fd3SAndroid Build Coastguard Worker ** is non-negative, then as many bytes (not characters) of the text 6143*a3141fd3SAndroid Build Coastguard Worker ** pointed to by the 2nd parameter are taken as the application-defined 6144*a3141fd3SAndroid Build Coastguard Worker ** function result. If the 3rd parameter is non-negative, then it 6145*a3141fd3SAndroid Build Coastguard Worker ** must be the byte offset into the string where the NUL terminator would 6146*a3141fd3SAndroid Build Coastguard Worker ** appear if the string where NUL terminated. If any NUL characters occur 6147*a3141fd3SAndroid Build Coastguard Worker ** in the string at a byte offset that is less than the value of the 3rd 6148*a3141fd3SAndroid Build Coastguard Worker ** parameter, then the resulting string will contain embedded NULs and the 6149*a3141fd3SAndroid Build Coastguard Worker ** result of expressions operating on strings with embedded NULs is undefined. 6150*a3141fd3SAndroid Build Coastguard Worker ** ^If the 4th parameter to the sqlite3_result_text* interfaces 6151*a3141fd3SAndroid Build Coastguard Worker ** or sqlite3_result_blob is a non-NULL pointer, then SQLite calls that 6152*a3141fd3SAndroid Build Coastguard Worker ** function as the destructor on the text or BLOB result when it has 6153*a3141fd3SAndroid Build Coastguard Worker ** finished using that result. 6154*a3141fd3SAndroid Build Coastguard Worker ** ^If the 4th parameter to the sqlite3_result_text* interfaces or to 6155*a3141fd3SAndroid Build Coastguard Worker ** sqlite3_result_blob is the special constant SQLITE_STATIC, then SQLite 6156*a3141fd3SAndroid Build Coastguard Worker ** assumes that the text or BLOB result is in constant space and does not 6157*a3141fd3SAndroid Build Coastguard Worker ** copy the content of the parameter nor call a destructor on the content 6158*a3141fd3SAndroid Build Coastguard Worker ** when it has finished using that result. 6159*a3141fd3SAndroid Build Coastguard Worker ** ^If the 4th parameter to the sqlite3_result_text* interfaces 6160*a3141fd3SAndroid Build Coastguard Worker ** or sqlite3_result_blob is the special constant SQLITE_TRANSIENT 6161*a3141fd3SAndroid Build Coastguard Worker ** then SQLite makes a copy of the result into space obtained 6162*a3141fd3SAndroid Build Coastguard Worker ** from [sqlite3_malloc()] before it returns. 6163*a3141fd3SAndroid Build Coastguard Worker ** 6164*a3141fd3SAndroid Build Coastguard Worker ** ^For the sqlite3_result_text16(), sqlite3_result_text16le(), and 6165*a3141fd3SAndroid Build Coastguard Worker ** sqlite3_result_text16be() routines, and for sqlite3_result_text64() 6166*a3141fd3SAndroid Build Coastguard Worker ** when the encoding is not UTF8, if the input UTF16 begins with a 6167*a3141fd3SAndroid Build Coastguard Worker ** byte-order mark (BOM, U+FEFF) then the BOM is removed from the 6168*a3141fd3SAndroid Build Coastguard Worker ** string and the rest of the string is interpreted according to the 6169*a3141fd3SAndroid Build Coastguard Worker ** byte-order specified by the BOM. ^The byte-order specified by 6170*a3141fd3SAndroid Build Coastguard Worker ** the BOM at the beginning of the text overrides the byte-order 6171*a3141fd3SAndroid Build Coastguard Worker ** specified by the interface procedure. ^So, for example, if 6172*a3141fd3SAndroid Build Coastguard Worker ** sqlite3_result_text16le() is invoked with text that begins 6173*a3141fd3SAndroid Build Coastguard Worker ** with bytes 0xfe, 0xff (a big-endian byte-order mark) then the 6174*a3141fd3SAndroid Build Coastguard Worker ** first two bytes of input are skipped and the remaining input 6175*a3141fd3SAndroid Build Coastguard Worker ** is interpreted as UTF16BE text. 6176*a3141fd3SAndroid Build Coastguard Worker ** 6177*a3141fd3SAndroid Build Coastguard Worker ** ^For UTF16 input text to the sqlite3_result_text16(), 6178*a3141fd3SAndroid Build Coastguard Worker ** sqlite3_result_text16be(), sqlite3_result_text16le(), and 6179*a3141fd3SAndroid Build Coastguard Worker ** sqlite3_result_text64() routines, if the text contains invalid 6180*a3141fd3SAndroid Build Coastguard Worker ** UTF16 characters, the invalid characters might be converted 6181*a3141fd3SAndroid Build Coastguard Worker ** into the unicode replacement character, U+FFFD. 6182*a3141fd3SAndroid Build Coastguard Worker ** 6183*a3141fd3SAndroid Build Coastguard Worker ** ^The sqlite3_result_value() interface sets the result of 6184*a3141fd3SAndroid Build Coastguard Worker ** the application-defined function to be a copy of the 6185*a3141fd3SAndroid Build Coastguard Worker ** [unprotected sqlite3_value] object specified by the 2nd parameter. ^The 6186*a3141fd3SAndroid Build Coastguard Worker ** sqlite3_result_value() interface makes a copy of the [sqlite3_value] 6187*a3141fd3SAndroid Build Coastguard Worker ** so that the [sqlite3_value] specified in the parameter may change or 6188*a3141fd3SAndroid Build Coastguard Worker ** be deallocated after sqlite3_result_value() returns without harm. 6189*a3141fd3SAndroid Build Coastguard Worker ** ^A [protected sqlite3_value] object may always be used where an 6190*a3141fd3SAndroid Build Coastguard Worker ** [unprotected sqlite3_value] object is required, so either 6191*a3141fd3SAndroid Build Coastguard Worker ** kind of [sqlite3_value] object can be used with this interface. 6192*a3141fd3SAndroid Build Coastguard Worker ** 6193*a3141fd3SAndroid Build Coastguard Worker ** ^The sqlite3_result_pointer(C,P,T,D) interface sets the result to an 6194*a3141fd3SAndroid Build Coastguard Worker ** SQL NULL value, just like [sqlite3_result_null(C)], except that it 6195*a3141fd3SAndroid Build Coastguard Worker ** also associates the host-language pointer P or type T with that 6196*a3141fd3SAndroid Build Coastguard Worker ** NULL value such that the pointer can be retrieved within an 6197*a3141fd3SAndroid Build Coastguard Worker ** [application-defined SQL function] using [sqlite3_value_pointer()]. 6198*a3141fd3SAndroid Build Coastguard Worker ** ^If the D parameter is not NULL, then it is a pointer to a destructor 6199*a3141fd3SAndroid Build Coastguard Worker ** for the P parameter. ^SQLite invokes D with P as its only argument 6200*a3141fd3SAndroid Build Coastguard Worker ** when SQLite is finished with P. The T parameter should be a static 6201*a3141fd3SAndroid Build Coastguard Worker ** string and preferably a string literal. The sqlite3_result_pointer() 6202*a3141fd3SAndroid Build Coastguard Worker ** routine is part of the [pointer passing interface] added for SQLite 3.20.0. 6203*a3141fd3SAndroid Build Coastguard Worker ** 6204*a3141fd3SAndroid Build Coastguard Worker ** If these routines are called from within the different thread 6205*a3141fd3SAndroid Build Coastguard Worker ** than the one containing the application-defined function that received 6206*a3141fd3SAndroid Build Coastguard Worker ** the [sqlite3_context] pointer, the results are undefined. 6207*a3141fd3SAndroid Build Coastguard Worker */ 6208*a3141fd3SAndroid Build Coastguard Worker SQLITE_API void sqlite3_result_blob(sqlite3_context*, const void*, int, void(*)(void*)); 6209*a3141fd3SAndroid Build Coastguard Worker SQLITE_API void sqlite3_result_blob64(sqlite3_context*,const void*, 6210*a3141fd3SAndroid Build Coastguard Worker sqlite3_uint64,void(*)(void*)); 6211*a3141fd3SAndroid Build Coastguard Worker SQLITE_API void sqlite3_result_double(sqlite3_context*, double); 6212*a3141fd3SAndroid Build Coastguard Worker SQLITE_API void sqlite3_result_error(sqlite3_context*, const char*, int); 6213*a3141fd3SAndroid Build Coastguard Worker SQLITE_API void sqlite3_result_error16(sqlite3_context*, const void*, int); 6214*a3141fd3SAndroid Build Coastguard Worker SQLITE_API void sqlite3_result_error_toobig(sqlite3_context*); 6215*a3141fd3SAndroid Build Coastguard Worker SQLITE_API void sqlite3_result_error_nomem(sqlite3_context*); 6216*a3141fd3SAndroid Build Coastguard Worker SQLITE_API void sqlite3_result_error_code(sqlite3_context*, int); 6217*a3141fd3SAndroid Build Coastguard Worker SQLITE_API void sqlite3_result_int(sqlite3_context*, int); 6218*a3141fd3SAndroid Build Coastguard Worker SQLITE_API void sqlite3_result_int64(sqlite3_context*, sqlite3_int64); 6219*a3141fd3SAndroid Build Coastguard Worker SQLITE_API void sqlite3_result_null(sqlite3_context*); 6220*a3141fd3SAndroid Build Coastguard Worker SQLITE_API void sqlite3_result_text(sqlite3_context*, const char*, int, void(*)(void*)); 6221*a3141fd3SAndroid Build Coastguard Worker SQLITE_API void sqlite3_result_text64(sqlite3_context*, const char*,sqlite3_uint64, 6222*a3141fd3SAndroid Build Coastguard Worker void(*)(void*), unsigned char encoding); 6223*a3141fd3SAndroid Build Coastguard Worker SQLITE_API void sqlite3_result_text16(sqlite3_context*, const void*, int, void(*)(void*)); 6224*a3141fd3SAndroid Build Coastguard Worker SQLITE_API void sqlite3_result_text16le(sqlite3_context*, const void*, int,void(*)(void*)); 6225*a3141fd3SAndroid Build Coastguard Worker SQLITE_API void sqlite3_result_text16be(sqlite3_context*, const void*, int,void(*)(void*)); 6226*a3141fd3SAndroid Build Coastguard Worker SQLITE_API void sqlite3_result_value(sqlite3_context*, sqlite3_value*); 6227*a3141fd3SAndroid Build Coastguard Worker SQLITE_API void sqlite3_result_pointer(sqlite3_context*, void*,const char*,void(*)(void*)); 6228*a3141fd3SAndroid Build Coastguard Worker SQLITE_API void sqlite3_result_zeroblob(sqlite3_context*, int n); 6229*a3141fd3SAndroid Build Coastguard Worker SQLITE_API int sqlite3_result_zeroblob64(sqlite3_context*, sqlite3_uint64 n); 6230*a3141fd3SAndroid Build Coastguard Worker 6231*a3141fd3SAndroid Build Coastguard Worker 6232*a3141fd3SAndroid Build Coastguard Worker /* 6233*a3141fd3SAndroid Build Coastguard Worker ** CAPI3REF: Setting The Subtype Of An SQL Function 6234*a3141fd3SAndroid Build Coastguard Worker ** METHOD: sqlite3_context 6235*a3141fd3SAndroid Build Coastguard Worker ** 6236*a3141fd3SAndroid Build Coastguard Worker ** The sqlite3_result_subtype(C,T) function causes the subtype of 6237*a3141fd3SAndroid Build Coastguard Worker ** the result from the [application-defined SQL function] with 6238*a3141fd3SAndroid Build Coastguard Worker ** [sqlite3_context] C to be the value T. Only the lower 8 bits 6239*a3141fd3SAndroid Build Coastguard Worker ** of the subtype T are preserved in current versions of SQLite; 6240*a3141fd3SAndroid Build Coastguard Worker ** higher order bits are discarded. 6241*a3141fd3SAndroid Build Coastguard Worker ** The number of subtype bytes preserved by SQLite might increase 6242*a3141fd3SAndroid Build Coastguard Worker ** in future releases of SQLite. 6243*a3141fd3SAndroid Build Coastguard Worker ** 6244*a3141fd3SAndroid Build Coastguard Worker ** Every [application-defined SQL function] that invokes this interface 6245*a3141fd3SAndroid Build Coastguard Worker ** should include the [SQLITE_RESULT_SUBTYPE] property in its 6246*a3141fd3SAndroid Build Coastguard Worker ** text encoding argument when the SQL function is 6247*a3141fd3SAndroid Build Coastguard Worker ** [sqlite3_create_function|registered]. If the [SQLITE_RESULT_SUBTYPE] 6248*a3141fd3SAndroid Build Coastguard Worker ** property is omitted from the function that invokes sqlite3_result_subtype(), 6249*a3141fd3SAndroid Build Coastguard Worker ** then in some cases the sqlite3_result_subtype() might fail to set 6250*a3141fd3SAndroid Build Coastguard Worker ** the result subtype. 6251*a3141fd3SAndroid Build Coastguard Worker ** 6252*a3141fd3SAndroid Build Coastguard Worker ** If SQLite is compiled with -DSQLITE_STRICT_SUBTYPE=1, then any 6253*a3141fd3SAndroid Build Coastguard Worker ** SQL function that invokes the sqlite3_result_subtype() interface 6254*a3141fd3SAndroid Build Coastguard Worker ** and that does not have the SQLITE_RESULT_SUBTYPE property will raise 6255*a3141fd3SAndroid Build Coastguard Worker ** an error. Future versions of SQLite might enable -DSQLITE_STRICT_SUBTYPE=1 6256*a3141fd3SAndroid Build Coastguard Worker ** by default. 6257*a3141fd3SAndroid Build Coastguard Worker */ 6258*a3141fd3SAndroid Build Coastguard Worker SQLITE_API void sqlite3_result_subtype(sqlite3_context*,unsigned int); 6259*a3141fd3SAndroid Build Coastguard Worker 6260*a3141fd3SAndroid Build Coastguard Worker /* 6261*a3141fd3SAndroid Build Coastguard Worker ** CAPI3REF: Define New Collating Sequences 6262*a3141fd3SAndroid Build Coastguard Worker ** METHOD: sqlite3 6263*a3141fd3SAndroid Build Coastguard Worker ** 6264*a3141fd3SAndroid Build Coastguard Worker ** ^These functions add, remove, or modify a [collation] associated 6265*a3141fd3SAndroid Build Coastguard Worker ** with the [database connection] specified as the first argument. 6266*a3141fd3SAndroid Build Coastguard Worker ** 6267*a3141fd3SAndroid Build Coastguard Worker ** ^The name of the collation is a UTF-8 string 6268*a3141fd3SAndroid Build Coastguard Worker ** for sqlite3_create_collation() and sqlite3_create_collation_v2() 6269*a3141fd3SAndroid Build Coastguard Worker ** and a UTF-16 string in native byte order for sqlite3_create_collation16(). 6270*a3141fd3SAndroid Build Coastguard Worker ** ^Collation names that compare equal according to [sqlite3_strnicmp()] are 6271*a3141fd3SAndroid Build Coastguard Worker ** considered to be the same name. 6272*a3141fd3SAndroid Build Coastguard Worker ** 6273*a3141fd3SAndroid Build Coastguard Worker ** ^(The third argument (eTextRep) must be one of the constants: 6274*a3141fd3SAndroid Build Coastguard Worker ** <ul> 6275*a3141fd3SAndroid Build Coastguard Worker ** <li> [SQLITE_UTF8], 6276*a3141fd3SAndroid Build Coastguard Worker ** <li> [SQLITE_UTF16LE], 6277*a3141fd3SAndroid Build Coastguard Worker ** <li> [SQLITE_UTF16BE], 6278*a3141fd3SAndroid Build Coastguard Worker ** <li> [SQLITE_UTF16], or 6279*a3141fd3SAndroid Build Coastguard Worker ** <li> [SQLITE_UTF16_ALIGNED]. 6280*a3141fd3SAndroid Build Coastguard Worker ** </ul>)^ 6281*a3141fd3SAndroid Build Coastguard Worker ** ^The eTextRep argument determines the encoding of strings passed 6282*a3141fd3SAndroid Build Coastguard Worker ** to the collating function callback, xCompare. 6283*a3141fd3SAndroid Build Coastguard Worker ** ^The [SQLITE_UTF16] and [SQLITE_UTF16_ALIGNED] values for eTextRep 6284*a3141fd3SAndroid Build Coastguard Worker ** force strings to be UTF16 with native byte order. 6285*a3141fd3SAndroid Build Coastguard Worker ** ^The [SQLITE_UTF16_ALIGNED] value for eTextRep forces strings to begin 6286*a3141fd3SAndroid Build Coastguard Worker ** on an even byte address. 6287*a3141fd3SAndroid Build Coastguard Worker ** 6288*a3141fd3SAndroid Build Coastguard Worker ** ^The fourth argument, pArg, is an application data pointer that is passed 6289*a3141fd3SAndroid Build Coastguard Worker ** through as the first argument to the collating function callback. 6290*a3141fd3SAndroid Build Coastguard Worker ** 6291*a3141fd3SAndroid Build Coastguard Worker ** ^The fifth argument, xCompare, is a pointer to the collating function. 6292*a3141fd3SAndroid Build Coastguard Worker ** ^Multiple collating functions can be registered using the same name but 6293*a3141fd3SAndroid Build Coastguard Worker ** with different eTextRep parameters and SQLite will use whichever 6294*a3141fd3SAndroid Build Coastguard Worker ** function requires the least amount of data transformation. 6295*a3141fd3SAndroid Build Coastguard Worker ** ^If the xCompare argument is NULL then the collating function is 6296*a3141fd3SAndroid Build Coastguard Worker ** deleted. ^When all collating functions having the same name are deleted, 6297*a3141fd3SAndroid Build Coastguard Worker ** that collation is no longer usable. 6298*a3141fd3SAndroid Build Coastguard Worker ** 6299*a3141fd3SAndroid Build Coastguard Worker ** ^The collating function callback is invoked with a copy of the pArg 6300*a3141fd3SAndroid Build Coastguard Worker ** application data pointer and with two strings in the encoding specified 6301*a3141fd3SAndroid Build Coastguard Worker ** by the eTextRep argument. The two integer parameters to the collating 6302*a3141fd3SAndroid Build Coastguard Worker ** function callback are the length of the two strings, in bytes. The collating 6303*a3141fd3SAndroid Build Coastguard Worker ** function must return an integer that is negative, zero, or positive 6304*a3141fd3SAndroid Build Coastguard Worker ** if the first string is less than, equal to, or greater than the second, 6305*a3141fd3SAndroid Build Coastguard Worker ** respectively. A collating function must always return the same answer 6306*a3141fd3SAndroid Build Coastguard Worker ** given the same inputs. If two or more collating functions are registered 6307*a3141fd3SAndroid Build Coastguard Worker ** to the same collation name (using different eTextRep values) then all 6308*a3141fd3SAndroid Build Coastguard Worker ** must give an equivalent answer when invoked with equivalent strings. 6309*a3141fd3SAndroid Build Coastguard Worker ** The collating function must obey the following properties for all 6310*a3141fd3SAndroid Build Coastguard Worker ** strings A, B, and C: 6311*a3141fd3SAndroid Build Coastguard Worker ** 6312*a3141fd3SAndroid Build Coastguard Worker ** <ol> 6313*a3141fd3SAndroid Build Coastguard Worker ** <li> If A==B then B==A. 6314*a3141fd3SAndroid Build Coastguard Worker ** <li> If A==B and B==C then A==C. 6315*a3141fd3SAndroid Build Coastguard Worker ** <li> If A<B THEN B>A. 6316*a3141fd3SAndroid Build Coastguard Worker ** <li> If A<B and B<C then A<C. 6317*a3141fd3SAndroid Build Coastguard Worker ** </ol> 6318*a3141fd3SAndroid Build Coastguard Worker ** 6319*a3141fd3SAndroid Build Coastguard Worker ** If a collating function fails any of the above constraints and that 6320*a3141fd3SAndroid Build Coastguard Worker ** collating function is registered and used, then the behavior of SQLite 6321*a3141fd3SAndroid Build Coastguard Worker ** is undefined. 6322*a3141fd3SAndroid Build Coastguard Worker ** 6323*a3141fd3SAndroid Build Coastguard Worker ** ^The sqlite3_create_collation_v2() works like sqlite3_create_collation() 6324*a3141fd3SAndroid Build Coastguard Worker ** with the addition that the xDestroy callback is invoked on pArg when 6325*a3141fd3SAndroid Build Coastguard Worker ** the collating function is deleted. 6326*a3141fd3SAndroid Build Coastguard Worker ** ^Collating functions are deleted when they are overridden by later 6327*a3141fd3SAndroid Build Coastguard Worker ** calls to the collation creation functions or when the 6328*a3141fd3SAndroid Build Coastguard Worker ** [database connection] is closed using [sqlite3_close()]. 6329*a3141fd3SAndroid Build Coastguard Worker ** 6330*a3141fd3SAndroid Build Coastguard Worker ** ^The xDestroy callback is <u>not</u> called if the 6331*a3141fd3SAndroid Build Coastguard Worker ** sqlite3_create_collation_v2() function fails. Applications that invoke 6332*a3141fd3SAndroid Build Coastguard Worker ** sqlite3_create_collation_v2() with a non-NULL xDestroy argument should 6333*a3141fd3SAndroid Build Coastguard Worker ** check the return code and dispose of the application data pointer 6334*a3141fd3SAndroid Build Coastguard Worker ** themselves rather than expecting SQLite to deal with it for them. 6335*a3141fd3SAndroid Build Coastguard Worker ** This is different from every other SQLite interface. The inconsistency 6336*a3141fd3SAndroid Build Coastguard Worker ** is unfortunate but cannot be changed without breaking backwards 6337*a3141fd3SAndroid Build Coastguard Worker ** compatibility. 6338*a3141fd3SAndroid Build Coastguard Worker ** 6339*a3141fd3SAndroid Build Coastguard Worker ** See also: [sqlite3_collation_needed()] and [sqlite3_collation_needed16()]. 6340*a3141fd3SAndroid Build Coastguard Worker */ 6341*a3141fd3SAndroid Build Coastguard Worker SQLITE_API int sqlite3_create_collation( 6342*a3141fd3SAndroid Build Coastguard Worker sqlite3*, 6343*a3141fd3SAndroid Build Coastguard Worker const char *zName, 6344*a3141fd3SAndroid Build Coastguard Worker int eTextRep, 6345*a3141fd3SAndroid Build Coastguard Worker void *pArg, 6346*a3141fd3SAndroid Build Coastguard Worker int(*xCompare)(void*,int,const void*,int,const void*) 6347*a3141fd3SAndroid Build Coastguard Worker ); 6348*a3141fd3SAndroid Build Coastguard Worker SQLITE_API int sqlite3_create_collation_v2( 6349*a3141fd3SAndroid Build Coastguard Worker sqlite3*, 6350*a3141fd3SAndroid Build Coastguard Worker const char *zName, 6351*a3141fd3SAndroid Build Coastguard Worker int eTextRep, 6352*a3141fd3SAndroid Build Coastguard Worker void *pArg, 6353*a3141fd3SAndroid Build Coastguard Worker int(*xCompare)(void*,int,const void*,int,const void*), 6354*a3141fd3SAndroid Build Coastguard Worker void(*xDestroy)(void*) 6355*a3141fd3SAndroid Build Coastguard Worker ); 6356*a3141fd3SAndroid Build Coastguard Worker SQLITE_API int sqlite3_create_collation16( 6357*a3141fd3SAndroid Build Coastguard Worker sqlite3*, 6358*a3141fd3SAndroid Build Coastguard Worker const void *zName, 6359*a3141fd3SAndroid Build Coastguard Worker int eTextRep, 6360*a3141fd3SAndroid Build Coastguard Worker void *pArg, 6361*a3141fd3SAndroid Build Coastguard Worker int(*xCompare)(void*,int,const void*,int,const void*) 6362*a3141fd3SAndroid Build Coastguard Worker ); 6363*a3141fd3SAndroid Build Coastguard Worker 6364*a3141fd3SAndroid Build Coastguard Worker /* 6365*a3141fd3SAndroid Build Coastguard Worker ** CAPI3REF: Collation Needed Callbacks 6366*a3141fd3SAndroid Build Coastguard Worker ** METHOD: sqlite3 6367*a3141fd3SAndroid Build Coastguard Worker ** 6368*a3141fd3SAndroid Build Coastguard Worker ** ^To avoid having to register all collation sequences before a database 6369*a3141fd3SAndroid Build Coastguard Worker ** can be used, a single callback function may be registered with the 6370*a3141fd3SAndroid Build Coastguard Worker ** [database connection] to be invoked whenever an undefined collation 6371*a3141fd3SAndroid Build Coastguard Worker ** sequence is required. 6372*a3141fd3SAndroid Build Coastguard Worker ** 6373*a3141fd3SAndroid Build Coastguard Worker ** ^If the function is registered using the sqlite3_collation_needed() API, 6374*a3141fd3SAndroid Build Coastguard Worker ** then it is passed the names of undefined collation sequences as strings 6375*a3141fd3SAndroid Build Coastguard Worker ** encoded in UTF-8. ^If sqlite3_collation_needed16() is used, 6376*a3141fd3SAndroid Build Coastguard Worker ** the names are passed as UTF-16 in machine native byte order. 6377*a3141fd3SAndroid Build Coastguard Worker ** ^A call to either function replaces the existing collation-needed callback. 6378*a3141fd3SAndroid Build Coastguard Worker ** 6379*a3141fd3SAndroid Build Coastguard Worker ** ^(When the callback is invoked, the first argument passed is a copy 6380*a3141fd3SAndroid Build Coastguard Worker ** of the second argument to sqlite3_collation_needed() or 6381*a3141fd3SAndroid Build Coastguard Worker ** sqlite3_collation_needed16(). The second argument is the database 6382*a3141fd3SAndroid Build Coastguard Worker ** connection. The third argument is one of [SQLITE_UTF8], [SQLITE_UTF16BE], 6383*a3141fd3SAndroid Build Coastguard Worker ** or [SQLITE_UTF16LE], indicating the most desirable form of the collation 6384*a3141fd3SAndroid Build Coastguard Worker ** sequence function required. The fourth parameter is the name of the 6385*a3141fd3SAndroid Build Coastguard Worker ** required collation sequence.)^ 6386*a3141fd3SAndroid Build Coastguard Worker ** 6387*a3141fd3SAndroid Build Coastguard Worker ** The callback function should register the desired collation using 6388*a3141fd3SAndroid Build Coastguard Worker ** [sqlite3_create_collation()], [sqlite3_create_collation16()], or 6389*a3141fd3SAndroid Build Coastguard Worker ** [sqlite3_create_collation_v2()]. 6390*a3141fd3SAndroid Build Coastguard Worker */ 6391*a3141fd3SAndroid Build Coastguard Worker SQLITE_API int sqlite3_collation_needed( 6392*a3141fd3SAndroid Build Coastguard Worker sqlite3*, 6393*a3141fd3SAndroid Build Coastguard Worker void*, 6394*a3141fd3SAndroid Build Coastguard Worker void(*)(void*,sqlite3*,int eTextRep,const char*) 6395*a3141fd3SAndroid Build Coastguard Worker ); 6396*a3141fd3SAndroid Build Coastguard Worker SQLITE_API int sqlite3_collation_needed16( 6397*a3141fd3SAndroid Build Coastguard Worker sqlite3*, 6398*a3141fd3SAndroid Build Coastguard Worker void*, 6399*a3141fd3SAndroid Build Coastguard Worker void(*)(void*,sqlite3*,int eTextRep,const void*) 6400*a3141fd3SAndroid Build Coastguard Worker ); 6401*a3141fd3SAndroid Build Coastguard Worker 6402*a3141fd3SAndroid Build Coastguard Worker #ifdef SQLITE_ENABLE_CEROD 6403*a3141fd3SAndroid Build Coastguard Worker /* 6404*a3141fd3SAndroid Build Coastguard Worker ** Specify the activation key for a CEROD database. Unless 6405*a3141fd3SAndroid Build Coastguard Worker ** activated, none of the CEROD routines will work. 6406*a3141fd3SAndroid Build Coastguard Worker */ 6407*a3141fd3SAndroid Build Coastguard Worker SQLITE_API void sqlite3_activate_cerod( 6408*a3141fd3SAndroid Build Coastguard Worker const char *zPassPhrase /* Activation phrase */ 6409*a3141fd3SAndroid Build Coastguard Worker ); 6410*a3141fd3SAndroid Build Coastguard Worker #endif 6411*a3141fd3SAndroid Build Coastguard Worker 6412*a3141fd3SAndroid Build Coastguard Worker /* 6413*a3141fd3SAndroid Build Coastguard Worker ** CAPI3REF: Suspend Execution For A Short Time 6414*a3141fd3SAndroid Build Coastguard Worker ** 6415*a3141fd3SAndroid Build Coastguard Worker ** The sqlite3_sleep() function causes the current thread to suspend execution 6416*a3141fd3SAndroid Build Coastguard Worker ** for at least a number of milliseconds specified in its parameter. 6417*a3141fd3SAndroid Build Coastguard Worker ** 6418*a3141fd3SAndroid Build Coastguard Worker ** If the operating system does not support sleep requests with 6419*a3141fd3SAndroid Build Coastguard Worker ** millisecond time resolution, then the time will be rounded up to 6420*a3141fd3SAndroid Build Coastguard Worker ** the nearest second. The number of milliseconds of sleep actually 6421*a3141fd3SAndroid Build Coastguard Worker ** requested from the operating system is returned. 6422*a3141fd3SAndroid Build Coastguard Worker ** 6423*a3141fd3SAndroid Build Coastguard Worker ** ^SQLite implements this interface by calling the xSleep() 6424*a3141fd3SAndroid Build Coastguard Worker ** method of the default [sqlite3_vfs] object. If the xSleep() method 6425*a3141fd3SAndroid Build Coastguard Worker ** of the default VFS is not implemented correctly, or not implemented at 6426*a3141fd3SAndroid Build Coastguard Worker ** all, then the behavior of sqlite3_sleep() may deviate from the description 6427*a3141fd3SAndroid Build Coastguard Worker ** in the previous paragraphs. 6428*a3141fd3SAndroid Build Coastguard Worker ** 6429*a3141fd3SAndroid Build Coastguard Worker ** If a negative argument is passed to sqlite3_sleep() the results vary by 6430*a3141fd3SAndroid Build Coastguard Worker ** VFS and operating system. Some system treat a negative argument as an 6431*a3141fd3SAndroid Build Coastguard Worker ** instruction to sleep forever. Others understand it to mean do not sleep 6432*a3141fd3SAndroid Build Coastguard Worker ** at all. ^In SQLite version 3.42.0 and later, a negative 6433*a3141fd3SAndroid Build Coastguard Worker ** argument passed into sqlite3_sleep() is changed to zero before it is relayed 6434*a3141fd3SAndroid Build Coastguard Worker ** down into the xSleep method of the VFS. 6435*a3141fd3SAndroid Build Coastguard Worker */ 6436*a3141fd3SAndroid Build Coastguard Worker SQLITE_API int sqlite3_sleep(int); 6437*a3141fd3SAndroid Build Coastguard Worker 6438*a3141fd3SAndroid Build Coastguard Worker /* 6439*a3141fd3SAndroid Build Coastguard Worker ** CAPI3REF: Name Of The Folder Holding Temporary Files 6440*a3141fd3SAndroid Build Coastguard Worker ** 6441*a3141fd3SAndroid Build Coastguard Worker ** ^(If this global variable is made to point to a string which is 6442*a3141fd3SAndroid Build Coastguard Worker ** the name of a folder (a.k.a. directory), then all temporary files 6443*a3141fd3SAndroid Build Coastguard Worker ** created by SQLite when using a built-in [sqlite3_vfs | VFS] 6444*a3141fd3SAndroid Build Coastguard Worker ** will be placed in that directory.)^ ^If this variable 6445*a3141fd3SAndroid Build Coastguard Worker ** is a NULL pointer, then SQLite performs a search for an appropriate 6446*a3141fd3SAndroid Build Coastguard Worker ** temporary file directory. 6447*a3141fd3SAndroid Build Coastguard Worker ** 6448*a3141fd3SAndroid Build Coastguard Worker ** Applications are strongly discouraged from using this global variable. 6449*a3141fd3SAndroid Build Coastguard Worker ** It is required to set a temporary folder on Windows Runtime (WinRT). 6450*a3141fd3SAndroid Build Coastguard Worker ** But for all other platforms, it is highly recommended that applications 6451*a3141fd3SAndroid Build Coastguard Worker ** neither read nor write this variable. This global variable is a relic 6452*a3141fd3SAndroid Build Coastguard Worker ** that exists for backwards compatibility of legacy applications and should 6453*a3141fd3SAndroid Build Coastguard Worker ** be avoided in new projects. 6454*a3141fd3SAndroid Build Coastguard Worker ** 6455*a3141fd3SAndroid Build Coastguard Worker ** It is not safe to read or modify this variable in more than one 6456*a3141fd3SAndroid Build Coastguard Worker ** thread at a time. It is not safe to read or modify this variable 6457*a3141fd3SAndroid Build Coastguard Worker ** if a [database connection] is being used at the same time in a separate 6458*a3141fd3SAndroid Build Coastguard Worker ** thread. 6459*a3141fd3SAndroid Build Coastguard Worker ** It is intended that this variable be set once 6460*a3141fd3SAndroid Build Coastguard Worker ** as part of process initialization and before any SQLite interface 6461*a3141fd3SAndroid Build Coastguard Worker ** routines have been called and that this variable remain unchanged 6462*a3141fd3SAndroid Build Coastguard Worker ** thereafter. 6463*a3141fd3SAndroid Build Coastguard Worker ** 6464*a3141fd3SAndroid Build Coastguard Worker ** ^The [temp_store_directory pragma] may modify this variable and cause 6465*a3141fd3SAndroid Build Coastguard Worker ** it to point to memory obtained from [sqlite3_malloc]. ^Furthermore, 6466*a3141fd3SAndroid Build Coastguard Worker ** the [temp_store_directory pragma] always assumes that any string 6467*a3141fd3SAndroid Build Coastguard Worker ** that this variable points to is held in memory obtained from 6468*a3141fd3SAndroid Build Coastguard Worker ** [sqlite3_malloc] and the pragma may attempt to free that memory 6469*a3141fd3SAndroid Build Coastguard Worker ** using [sqlite3_free]. 6470*a3141fd3SAndroid Build Coastguard Worker ** Hence, if this variable is modified directly, either it should be 6471*a3141fd3SAndroid Build Coastguard Worker ** made NULL or made to point to memory obtained from [sqlite3_malloc] 6472*a3141fd3SAndroid Build Coastguard Worker ** or else the use of the [temp_store_directory pragma] should be avoided. 6473*a3141fd3SAndroid Build Coastguard Worker ** Except when requested by the [temp_store_directory pragma], SQLite 6474*a3141fd3SAndroid Build Coastguard Worker ** does not free the memory that sqlite3_temp_directory points to. If 6475*a3141fd3SAndroid Build Coastguard Worker ** the application wants that memory to be freed, it must do 6476*a3141fd3SAndroid Build Coastguard Worker ** so itself, taking care to only do so after all [database connection] 6477*a3141fd3SAndroid Build Coastguard Worker ** objects have been destroyed. 6478*a3141fd3SAndroid Build Coastguard Worker ** 6479*a3141fd3SAndroid Build Coastguard Worker ** <b>Note to Windows Runtime users:</b> The temporary directory must be set 6480*a3141fd3SAndroid Build Coastguard Worker ** prior to calling [sqlite3_open] or [sqlite3_open_v2]. Otherwise, various 6481*a3141fd3SAndroid Build Coastguard Worker ** features that require the use of temporary files may fail. Here is an 6482*a3141fd3SAndroid Build Coastguard Worker ** example of how to do this using C++ with the Windows Runtime: 6483*a3141fd3SAndroid Build Coastguard Worker ** 6484*a3141fd3SAndroid Build Coastguard Worker ** <blockquote><pre> 6485*a3141fd3SAndroid Build Coastguard Worker ** LPCWSTR zPath = Windows::Storage::ApplicationData::Current-> 6486*a3141fd3SAndroid Build Coastguard Worker ** TemporaryFolder->Path->Data(); 6487*a3141fd3SAndroid Build Coastguard Worker ** char zPathBuf[MAX_PATH + 1]; 6488*a3141fd3SAndroid Build Coastguard Worker ** memset(zPathBuf, 0, sizeof(zPathBuf)); 6489*a3141fd3SAndroid Build Coastguard Worker ** WideCharToMultiByte(CP_UTF8, 0, zPath, -1, zPathBuf, sizeof(zPathBuf), 6490*a3141fd3SAndroid Build Coastguard Worker ** NULL, NULL); 6491*a3141fd3SAndroid Build Coastguard Worker ** sqlite3_temp_directory = sqlite3_mprintf("%s", zPathBuf); 6492*a3141fd3SAndroid Build Coastguard Worker ** </pre></blockquote> 6493*a3141fd3SAndroid Build Coastguard Worker */ 6494*a3141fd3SAndroid Build Coastguard Worker SQLITE_API SQLITE_EXTERN char *sqlite3_temp_directory; 6495*a3141fd3SAndroid Build Coastguard Worker 6496*a3141fd3SAndroid Build Coastguard Worker /* 6497*a3141fd3SAndroid Build Coastguard Worker ** CAPI3REF: Name Of The Folder Holding Database Files 6498*a3141fd3SAndroid Build Coastguard Worker ** 6499*a3141fd3SAndroid Build Coastguard Worker ** ^(If this global variable is made to point to a string which is 6500*a3141fd3SAndroid Build Coastguard Worker ** the name of a folder (a.k.a. directory), then all database files 6501*a3141fd3SAndroid Build Coastguard Worker ** specified with a relative pathname and created or accessed by 6502*a3141fd3SAndroid Build Coastguard Worker ** SQLite when using a built-in windows [sqlite3_vfs | VFS] will be assumed 6503*a3141fd3SAndroid Build Coastguard Worker ** to be relative to that directory.)^ ^If this variable is a NULL 6504*a3141fd3SAndroid Build Coastguard Worker ** pointer, then SQLite assumes that all database files specified 6505*a3141fd3SAndroid Build Coastguard Worker ** with a relative pathname are relative to the current directory 6506*a3141fd3SAndroid Build Coastguard Worker ** for the process. Only the windows VFS makes use of this global 6507*a3141fd3SAndroid Build Coastguard Worker ** variable; it is ignored by the unix VFS. 6508*a3141fd3SAndroid Build Coastguard Worker ** 6509*a3141fd3SAndroid Build Coastguard Worker ** Changing the value of this variable while a database connection is 6510*a3141fd3SAndroid Build Coastguard Worker ** open can result in a corrupt database. 6511*a3141fd3SAndroid Build Coastguard Worker ** 6512*a3141fd3SAndroid Build Coastguard Worker ** It is not safe to read or modify this variable in more than one 6513*a3141fd3SAndroid Build Coastguard Worker ** thread at a time. It is not safe to read or modify this variable 6514*a3141fd3SAndroid Build Coastguard Worker ** if a [database connection] is being used at the same time in a separate 6515*a3141fd3SAndroid Build Coastguard Worker ** thread. 6516*a3141fd3SAndroid Build Coastguard Worker ** It is intended that this variable be set once 6517*a3141fd3SAndroid Build Coastguard Worker ** as part of process initialization and before any SQLite interface 6518*a3141fd3SAndroid Build Coastguard Worker ** routines have been called and that this variable remain unchanged 6519*a3141fd3SAndroid Build Coastguard Worker ** thereafter. 6520*a3141fd3SAndroid Build Coastguard Worker ** 6521*a3141fd3SAndroid Build Coastguard Worker ** ^The [data_store_directory pragma] may modify this variable and cause 6522*a3141fd3SAndroid Build Coastguard Worker ** it to point to memory obtained from [sqlite3_malloc]. ^Furthermore, 6523*a3141fd3SAndroid Build Coastguard Worker ** the [data_store_directory pragma] always assumes that any string 6524*a3141fd3SAndroid Build Coastguard Worker ** that this variable points to is held in memory obtained from 6525*a3141fd3SAndroid Build Coastguard Worker ** [sqlite3_malloc] and the pragma may attempt to free that memory 6526*a3141fd3SAndroid Build Coastguard Worker ** using [sqlite3_free]. 6527*a3141fd3SAndroid Build Coastguard Worker ** Hence, if this variable is modified directly, either it should be 6528*a3141fd3SAndroid Build Coastguard Worker ** made NULL or made to point to memory obtained from [sqlite3_malloc] 6529*a3141fd3SAndroid Build Coastguard Worker ** or else the use of the [data_store_directory pragma] should be avoided. 6530*a3141fd3SAndroid Build Coastguard Worker */ 6531*a3141fd3SAndroid Build Coastguard Worker SQLITE_API SQLITE_EXTERN char *sqlite3_data_directory; 6532*a3141fd3SAndroid Build Coastguard Worker 6533*a3141fd3SAndroid Build Coastguard Worker /* 6534*a3141fd3SAndroid Build Coastguard Worker ** CAPI3REF: Win32 Specific Interface 6535*a3141fd3SAndroid Build Coastguard Worker ** 6536*a3141fd3SAndroid Build Coastguard Worker ** These interfaces are available only on Windows. The 6537*a3141fd3SAndroid Build Coastguard Worker ** [sqlite3_win32_set_directory] interface is used to set the value associated 6538*a3141fd3SAndroid Build Coastguard Worker ** with the [sqlite3_temp_directory] or [sqlite3_data_directory] variable, to 6539*a3141fd3SAndroid Build Coastguard Worker ** zValue, depending on the value of the type parameter. The zValue parameter 6540*a3141fd3SAndroid Build Coastguard Worker ** should be NULL to cause the previous value to be freed via [sqlite3_free]; 6541*a3141fd3SAndroid Build Coastguard Worker ** a non-NULL value will be copied into memory obtained from [sqlite3_malloc] 6542*a3141fd3SAndroid Build Coastguard Worker ** prior to being used. The [sqlite3_win32_set_directory] interface returns 6543*a3141fd3SAndroid Build Coastguard Worker ** [SQLITE_OK] to indicate success, [SQLITE_ERROR] if the type is unsupported, 6544*a3141fd3SAndroid Build Coastguard Worker ** or [SQLITE_NOMEM] if memory could not be allocated. The value of the 6545*a3141fd3SAndroid Build Coastguard Worker ** [sqlite3_data_directory] variable is intended to act as a replacement for 6546*a3141fd3SAndroid Build Coastguard Worker ** the current directory on the sub-platforms of Win32 where that concept is 6547*a3141fd3SAndroid Build Coastguard Worker ** not present, e.g. WinRT and UWP. The [sqlite3_win32_set_directory8] and 6548*a3141fd3SAndroid Build Coastguard Worker ** [sqlite3_win32_set_directory16] interfaces behave exactly the same as the 6549*a3141fd3SAndroid Build Coastguard Worker ** sqlite3_win32_set_directory interface except the string parameter must be 6550*a3141fd3SAndroid Build Coastguard Worker ** UTF-8 or UTF-16, respectively. 6551*a3141fd3SAndroid Build Coastguard Worker */ 6552*a3141fd3SAndroid Build Coastguard Worker SQLITE_API int sqlite3_win32_set_directory( 6553*a3141fd3SAndroid Build Coastguard Worker unsigned long type, /* Identifier for directory being set or reset */ 6554*a3141fd3SAndroid Build Coastguard Worker void *zValue /* New value for directory being set or reset */ 6555*a3141fd3SAndroid Build Coastguard Worker ); 6556*a3141fd3SAndroid Build Coastguard Worker SQLITE_API int sqlite3_win32_set_directory8(unsigned long type, const char *zValue); 6557*a3141fd3SAndroid Build Coastguard Worker SQLITE_API int sqlite3_win32_set_directory16(unsigned long type, const void *zValue); 6558*a3141fd3SAndroid Build Coastguard Worker 6559*a3141fd3SAndroid Build Coastguard Worker /* 6560*a3141fd3SAndroid Build Coastguard Worker ** CAPI3REF: Win32 Directory Types 6561*a3141fd3SAndroid Build Coastguard Worker ** 6562*a3141fd3SAndroid Build Coastguard Worker ** These macros are only available on Windows. They define the allowed values 6563*a3141fd3SAndroid Build Coastguard Worker ** for the type argument to the [sqlite3_win32_set_directory] interface. 6564*a3141fd3SAndroid Build Coastguard Worker */ 6565*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_WIN32_DATA_DIRECTORY_TYPE 1 6566*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_WIN32_TEMP_DIRECTORY_TYPE 2 6567*a3141fd3SAndroid Build Coastguard Worker 6568*a3141fd3SAndroid Build Coastguard Worker /* 6569*a3141fd3SAndroid Build Coastguard Worker ** CAPI3REF: Test For Auto-Commit Mode 6570*a3141fd3SAndroid Build Coastguard Worker ** KEYWORDS: {autocommit mode} 6571*a3141fd3SAndroid Build Coastguard Worker ** METHOD: sqlite3 6572*a3141fd3SAndroid Build Coastguard Worker ** 6573*a3141fd3SAndroid Build Coastguard Worker ** ^The sqlite3_get_autocommit() interface returns non-zero or 6574*a3141fd3SAndroid Build Coastguard Worker ** zero if the given database connection is or is not in autocommit mode, 6575*a3141fd3SAndroid Build Coastguard Worker ** respectively. ^Autocommit mode is on by default. 6576*a3141fd3SAndroid Build Coastguard Worker ** ^Autocommit mode is disabled by a [BEGIN] statement. 6577*a3141fd3SAndroid Build Coastguard Worker ** ^Autocommit mode is re-enabled by a [COMMIT] or [ROLLBACK]. 6578*a3141fd3SAndroid Build Coastguard Worker ** 6579*a3141fd3SAndroid Build Coastguard Worker ** If certain kinds of errors occur on a statement within a multi-statement 6580*a3141fd3SAndroid Build Coastguard Worker ** transaction (errors including [SQLITE_FULL], [SQLITE_IOERR], 6581*a3141fd3SAndroid Build Coastguard Worker ** [SQLITE_NOMEM], [SQLITE_BUSY], and [SQLITE_INTERRUPT]) then the 6582*a3141fd3SAndroid Build Coastguard Worker ** transaction might be rolled back automatically. The only way to 6583*a3141fd3SAndroid Build Coastguard Worker ** find out whether SQLite automatically rolled back the transaction after 6584*a3141fd3SAndroid Build Coastguard Worker ** an error is to use this function. 6585*a3141fd3SAndroid Build Coastguard Worker ** 6586*a3141fd3SAndroid Build Coastguard Worker ** If another thread changes the autocommit status of the database 6587*a3141fd3SAndroid Build Coastguard Worker ** connection while this routine is running, then the return value 6588*a3141fd3SAndroid Build Coastguard Worker ** is undefined. 6589*a3141fd3SAndroid Build Coastguard Worker */ 6590*a3141fd3SAndroid Build Coastguard Worker SQLITE_API int sqlite3_get_autocommit(sqlite3*); 6591*a3141fd3SAndroid Build Coastguard Worker 6592*a3141fd3SAndroid Build Coastguard Worker /* 6593*a3141fd3SAndroid Build Coastguard Worker ** CAPI3REF: Find The Database Handle Of A Prepared Statement 6594*a3141fd3SAndroid Build Coastguard Worker ** METHOD: sqlite3_stmt 6595*a3141fd3SAndroid Build Coastguard Worker ** 6596*a3141fd3SAndroid Build Coastguard Worker ** ^The sqlite3_db_handle interface returns the [database connection] handle 6597*a3141fd3SAndroid Build Coastguard Worker ** to which a [prepared statement] belongs. ^The [database connection] 6598*a3141fd3SAndroid Build Coastguard Worker ** returned by sqlite3_db_handle is the same [database connection] 6599*a3141fd3SAndroid Build Coastguard Worker ** that was the first argument 6600*a3141fd3SAndroid Build Coastguard Worker ** to the [sqlite3_prepare_v2()] call (or its variants) that was used to 6601*a3141fd3SAndroid Build Coastguard Worker ** create the statement in the first place. 6602*a3141fd3SAndroid Build Coastguard Worker */ 6603*a3141fd3SAndroid Build Coastguard Worker SQLITE_API sqlite3 *sqlite3_db_handle(sqlite3_stmt*); 6604*a3141fd3SAndroid Build Coastguard Worker 6605*a3141fd3SAndroid Build Coastguard Worker /* 6606*a3141fd3SAndroid Build Coastguard Worker ** CAPI3REF: Return The Schema Name For A Database Connection 6607*a3141fd3SAndroid Build Coastguard Worker ** METHOD: sqlite3 6608*a3141fd3SAndroid Build Coastguard Worker ** 6609*a3141fd3SAndroid Build Coastguard Worker ** ^The sqlite3_db_name(D,N) interface returns a pointer to the schema name 6610*a3141fd3SAndroid Build Coastguard Worker ** for the N-th database on database connection D, or a NULL pointer of N is 6611*a3141fd3SAndroid Build Coastguard Worker ** out of range. An N value of 0 means the main database file. An N of 1 is 6612*a3141fd3SAndroid Build Coastguard Worker ** the "temp" schema. Larger values of N correspond to various ATTACH-ed 6613*a3141fd3SAndroid Build Coastguard Worker ** databases. 6614*a3141fd3SAndroid Build Coastguard Worker ** 6615*a3141fd3SAndroid Build Coastguard Worker ** Space to hold the string that is returned by sqlite3_db_name() is managed 6616*a3141fd3SAndroid Build Coastguard Worker ** by SQLite itself. The string might be deallocated by any operation that 6617*a3141fd3SAndroid Build Coastguard Worker ** changes the schema, including [ATTACH] or [DETACH] or calls to 6618*a3141fd3SAndroid Build Coastguard Worker ** [sqlite3_serialize()] or [sqlite3_deserialize()], even operations that 6619*a3141fd3SAndroid Build Coastguard Worker ** occur on a different thread. Applications that need to 6620*a3141fd3SAndroid Build Coastguard Worker ** remember the string long-term should make their own copy. Applications that 6621*a3141fd3SAndroid Build Coastguard Worker ** are accessing the same database connection simultaneously on multiple 6622*a3141fd3SAndroid Build Coastguard Worker ** threads should mutex-protect calls to this API and should make their own 6623*a3141fd3SAndroid Build Coastguard Worker ** private copy of the result prior to releasing the mutex. 6624*a3141fd3SAndroid Build Coastguard Worker */ 6625*a3141fd3SAndroid Build Coastguard Worker SQLITE_API const char *sqlite3_db_name(sqlite3 *db, int N); 6626*a3141fd3SAndroid Build Coastguard Worker 6627*a3141fd3SAndroid Build Coastguard Worker /* 6628*a3141fd3SAndroid Build Coastguard Worker ** CAPI3REF: Return The Filename For A Database Connection 6629*a3141fd3SAndroid Build Coastguard Worker ** METHOD: sqlite3 6630*a3141fd3SAndroid Build Coastguard Worker ** 6631*a3141fd3SAndroid Build Coastguard Worker ** ^The sqlite3_db_filename(D,N) interface returns a pointer to the filename 6632*a3141fd3SAndroid Build Coastguard Worker ** associated with database N of connection D. 6633*a3141fd3SAndroid Build Coastguard Worker ** ^If there is no attached database N on the database 6634*a3141fd3SAndroid Build Coastguard Worker ** connection D, or if database N is a temporary or in-memory database, then 6635*a3141fd3SAndroid Build Coastguard Worker ** this function will return either a NULL pointer or an empty string. 6636*a3141fd3SAndroid Build Coastguard Worker ** 6637*a3141fd3SAndroid Build Coastguard Worker ** ^The string value returned by this routine is owned and managed by 6638*a3141fd3SAndroid Build Coastguard Worker ** the database connection. ^The value will be valid until the database N 6639*a3141fd3SAndroid Build Coastguard Worker ** is [DETACH]-ed or until the database connection closes. 6640*a3141fd3SAndroid Build Coastguard Worker ** 6641*a3141fd3SAndroid Build Coastguard Worker ** ^The filename returned by this function is the output of the 6642*a3141fd3SAndroid Build Coastguard Worker ** xFullPathname method of the [VFS]. ^In other words, the filename 6643*a3141fd3SAndroid Build Coastguard Worker ** will be an absolute pathname, even if the filename used 6644*a3141fd3SAndroid Build Coastguard Worker ** to open the database originally was a URI or relative pathname. 6645*a3141fd3SAndroid Build Coastguard Worker ** 6646*a3141fd3SAndroid Build Coastguard Worker ** If the filename pointer returned by this routine is not NULL, then it 6647*a3141fd3SAndroid Build Coastguard Worker ** can be used as the filename input parameter to these routines: 6648*a3141fd3SAndroid Build Coastguard Worker ** <ul> 6649*a3141fd3SAndroid Build Coastguard Worker ** <li> [sqlite3_uri_parameter()] 6650*a3141fd3SAndroid Build Coastguard Worker ** <li> [sqlite3_uri_boolean()] 6651*a3141fd3SAndroid Build Coastguard Worker ** <li> [sqlite3_uri_int64()] 6652*a3141fd3SAndroid Build Coastguard Worker ** <li> [sqlite3_filename_database()] 6653*a3141fd3SAndroid Build Coastguard Worker ** <li> [sqlite3_filename_journal()] 6654*a3141fd3SAndroid Build Coastguard Worker ** <li> [sqlite3_filename_wal()] 6655*a3141fd3SAndroid Build Coastguard Worker ** </ul> 6656*a3141fd3SAndroid Build Coastguard Worker */ 6657*a3141fd3SAndroid Build Coastguard Worker SQLITE_API sqlite3_filename sqlite3_db_filename(sqlite3 *db, const char *zDbName); 6658*a3141fd3SAndroid Build Coastguard Worker 6659*a3141fd3SAndroid Build Coastguard Worker /* 6660*a3141fd3SAndroid Build Coastguard Worker ** CAPI3REF: Determine if a database is read-only 6661*a3141fd3SAndroid Build Coastguard Worker ** METHOD: sqlite3 6662*a3141fd3SAndroid Build Coastguard Worker ** 6663*a3141fd3SAndroid Build Coastguard Worker ** ^The sqlite3_db_readonly(D,N) interface returns 1 if the database N 6664*a3141fd3SAndroid Build Coastguard Worker ** of connection D is read-only, 0 if it is read/write, or -1 if N is not 6665*a3141fd3SAndroid Build Coastguard Worker ** the name of a database on connection D. 6666*a3141fd3SAndroid Build Coastguard Worker */ 6667*a3141fd3SAndroid Build Coastguard Worker SQLITE_API int sqlite3_db_readonly(sqlite3 *db, const char *zDbName); 6668*a3141fd3SAndroid Build Coastguard Worker 6669*a3141fd3SAndroid Build Coastguard Worker /* 6670*a3141fd3SAndroid Build Coastguard Worker ** CAPI3REF: Determine the transaction state of a database 6671*a3141fd3SAndroid Build Coastguard Worker ** METHOD: sqlite3 6672*a3141fd3SAndroid Build Coastguard Worker ** 6673*a3141fd3SAndroid Build Coastguard Worker ** ^The sqlite3_txn_state(D,S) interface returns the current 6674*a3141fd3SAndroid Build Coastguard Worker ** [transaction state] of schema S in database connection D. ^If S is NULL, 6675*a3141fd3SAndroid Build Coastguard Worker ** then the highest transaction state of any schema on database connection D 6676*a3141fd3SAndroid Build Coastguard Worker ** is returned. Transaction states are (in order of lowest to highest): 6677*a3141fd3SAndroid Build Coastguard Worker ** <ol> 6678*a3141fd3SAndroid Build Coastguard Worker ** <li value="0"> SQLITE_TXN_NONE 6679*a3141fd3SAndroid Build Coastguard Worker ** <li value="1"> SQLITE_TXN_READ 6680*a3141fd3SAndroid Build Coastguard Worker ** <li value="2"> SQLITE_TXN_WRITE 6681*a3141fd3SAndroid Build Coastguard Worker ** </ol> 6682*a3141fd3SAndroid Build Coastguard Worker ** ^If the S argument to sqlite3_txn_state(D,S) is not the name of 6683*a3141fd3SAndroid Build Coastguard Worker ** a valid schema, then -1 is returned. 6684*a3141fd3SAndroid Build Coastguard Worker */ 6685*a3141fd3SAndroid Build Coastguard Worker SQLITE_API int sqlite3_txn_state(sqlite3*,const char *zSchema); 6686*a3141fd3SAndroid Build Coastguard Worker 6687*a3141fd3SAndroid Build Coastguard Worker /* 6688*a3141fd3SAndroid Build Coastguard Worker ** CAPI3REF: Allowed return values from sqlite3_txn_state() 6689*a3141fd3SAndroid Build Coastguard Worker ** KEYWORDS: {transaction state} 6690*a3141fd3SAndroid Build Coastguard Worker ** 6691*a3141fd3SAndroid Build Coastguard Worker ** These constants define the current transaction state of a database file. 6692*a3141fd3SAndroid Build Coastguard Worker ** ^The [sqlite3_txn_state(D,S)] interface returns one of these 6693*a3141fd3SAndroid Build Coastguard Worker ** constants in order to describe the transaction state of schema S 6694*a3141fd3SAndroid Build Coastguard Worker ** in [database connection] D. 6695*a3141fd3SAndroid Build Coastguard Worker ** 6696*a3141fd3SAndroid Build Coastguard Worker ** <dl> 6697*a3141fd3SAndroid Build Coastguard Worker ** [[SQLITE_TXN_NONE]] <dt>SQLITE_TXN_NONE</dt> 6698*a3141fd3SAndroid Build Coastguard Worker ** <dd>The SQLITE_TXN_NONE state means that no transaction is currently 6699*a3141fd3SAndroid Build Coastguard Worker ** pending.</dd> 6700*a3141fd3SAndroid Build Coastguard Worker ** 6701*a3141fd3SAndroid Build Coastguard Worker ** [[SQLITE_TXN_READ]] <dt>SQLITE_TXN_READ</dt> 6702*a3141fd3SAndroid Build Coastguard Worker ** <dd>The SQLITE_TXN_READ state means that the database is currently 6703*a3141fd3SAndroid Build Coastguard Worker ** in a read transaction. Content has been read from the database file 6704*a3141fd3SAndroid Build Coastguard Worker ** but nothing in the database file has changed. The transaction state 6705*a3141fd3SAndroid Build Coastguard Worker ** will advanced to SQLITE_TXN_WRITE if any changes occur and there are 6706*a3141fd3SAndroid Build Coastguard Worker ** no other conflicting concurrent write transactions. The transaction 6707*a3141fd3SAndroid Build Coastguard Worker ** state will revert to SQLITE_TXN_NONE following a [ROLLBACK] or 6708*a3141fd3SAndroid Build Coastguard Worker ** [COMMIT].</dd> 6709*a3141fd3SAndroid Build Coastguard Worker ** 6710*a3141fd3SAndroid Build Coastguard Worker ** [[SQLITE_TXN_WRITE]] <dt>SQLITE_TXN_WRITE</dt> 6711*a3141fd3SAndroid Build Coastguard Worker ** <dd>The SQLITE_TXN_WRITE state means that the database is currently 6712*a3141fd3SAndroid Build Coastguard Worker ** in a write transaction. Content has been written to the database file 6713*a3141fd3SAndroid Build Coastguard Worker ** but has not yet committed. The transaction state will change to 6714*a3141fd3SAndroid Build Coastguard Worker ** to SQLITE_TXN_NONE at the next [ROLLBACK] or [COMMIT].</dd> 6715*a3141fd3SAndroid Build Coastguard Worker */ 6716*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_TXN_NONE 0 6717*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_TXN_READ 1 6718*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_TXN_WRITE 2 6719*a3141fd3SAndroid Build Coastguard Worker 6720*a3141fd3SAndroid Build Coastguard Worker /* 6721*a3141fd3SAndroid Build Coastguard Worker ** CAPI3REF: Find the next prepared statement 6722*a3141fd3SAndroid Build Coastguard Worker ** METHOD: sqlite3 6723*a3141fd3SAndroid Build Coastguard Worker ** 6724*a3141fd3SAndroid Build Coastguard Worker ** ^This interface returns a pointer to the next [prepared statement] after 6725*a3141fd3SAndroid Build Coastguard Worker ** pStmt associated with the [database connection] pDb. ^If pStmt is NULL 6726*a3141fd3SAndroid Build Coastguard Worker ** then this interface returns a pointer to the first prepared statement 6727*a3141fd3SAndroid Build Coastguard Worker ** associated with the database connection pDb. ^If no prepared statement 6728*a3141fd3SAndroid Build Coastguard Worker ** satisfies the conditions of this routine, it returns NULL. 6729*a3141fd3SAndroid Build Coastguard Worker ** 6730*a3141fd3SAndroid Build Coastguard Worker ** The [database connection] pointer D in a call to 6731*a3141fd3SAndroid Build Coastguard Worker ** [sqlite3_next_stmt(D,S)] must refer to an open database 6732*a3141fd3SAndroid Build Coastguard Worker ** connection and in particular must not be a NULL pointer. 6733*a3141fd3SAndroid Build Coastguard Worker */ 6734*a3141fd3SAndroid Build Coastguard Worker SQLITE_API sqlite3_stmt *sqlite3_next_stmt(sqlite3 *pDb, sqlite3_stmt *pStmt); 6735*a3141fd3SAndroid Build Coastguard Worker 6736*a3141fd3SAndroid Build Coastguard Worker /* 6737*a3141fd3SAndroid Build Coastguard Worker ** CAPI3REF: Commit And Rollback Notification Callbacks 6738*a3141fd3SAndroid Build Coastguard Worker ** METHOD: sqlite3 6739*a3141fd3SAndroid Build Coastguard Worker ** 6740*a3141fd3SAndroid Build Coastguard Worker ** ^The sqlite3_commit_hook() interface registers a callback 6741*a3141fd3SAndroid Build Coastguard Worker ** function to be invoked whenever a transaction is [COMMIT | committed]. 6742*a3141fd3SAndroid Build Coastguard Worker ** ^Any callback set by a previous call to sqlite3_commit_hook() 6743*a3141fd3SAndroid Build Coastguard Worker ** for the same database connection is overridden. 6744*a3141fd3SAndroid Build Coastguard Worker ** ^The sqlite3_rollback_hook() interface registers a callback 6745*a3141fd3SAndroid Build Coastguard Worker ** function to be invoked whenever a transaction is [ROLLBACK | rolled back]. 6746*a3141fd3SAndroid Build Coastguard Worker ** ^Any callback set by a previous call to sqlite3_rollback_hook() 6747*a3141fd3SAndroid Build Coastguard Worker ** for the same database connection is overridden. 6748*a3141fd3SAndroid Build Coastguard Worker ** ^The pArg argument is passed through to the callback. 6749*a3141fd3SAndroid Build Coastguard Worker ** ^If the callback on a commit hook function returns non-zero, 6750*a3141fd3SAndroid Build Coastguard Worker ** then the commit is converted into a rollback. 6751*a3141fd3SAndroid Build Coastguard Worker ** 6752*a3141fd3SAndroid Build Coastguard Worker ** ^The sqlite3_commit_hook(D,C,P) and sqlite3_rollback_hook(D,C,P) functions 6753*a3141fd3SAndroid Build Coastguard Worker ** return the P argument from the previous call of the same function 6754*a3141fd3SAndroid Build Coastguard Worker ** on the same [database connection] D, or NULL for 6755*a3141fd3SAndroid Build Coastguard Worker ** the first call for each function on D. 6756*a3141fd3SAndroid Build Coastguard Worker ** 6757*a3141fd3SAndroid Build Coastguard Worker ** The commit and rollback hook callbacks are not reentrant. 6758*a3141fd3SAndroid Build Coastguard Worker ** The callback implementation must not do anything that will modify 6759*a3141fd3SAndroid Build Coastguard Worker ** the database connection that invoked the callback. Any actions 6760*a3141fd3SAndroid Build Coastguard Worker ** to modify the database connection must be deferred until after the 6761*a3141fd3SAndroid Build Coastguard Worker ** completion of the [sqlite3_step()] call that triggered the commit 6762*a3141fd3SAndroid Build Coastguard Worker ** or rollback hook in the first place. 6763*a3141fd3SAndroid Build Coastguard Worker ** Note that running any other SQL statements, including SELECT statements, 6764*a3141fd3SAndroid Build Coastguard Worker ** or merely calling [sqlite3_prepare_v2()] and [sqlite3_step()] will modify 6765*a3141fd3SAndroid Build Coastguard Worker ** the database connections for the meaning of "modify" in this paragraph. 6766*a3141fd3SAndroid Build Coastguard Worker ** 6767*a3141fd3SAndroid Build Coastguard Worker ** ^Registering a NULL function disables the callback. 6768*a3141fd3SAndroid Build Coastguard Worker ** 6769*a3141fd3SAndroid Build Coastguard Worker ** ^When the commit hook callback routine returns zero, the [COMMIT] 6770*a3141fd3SAndroid Build Coastguard Worker ** operation is allowed to continue normally. ^If the commit hook 6771*a3141fd3SAndroid Build Coastguard Worker ** returns non-zero, then the [COMMIT] is converted into a [ROLLBACK]. 6772*a3141fd3SAndroid Build Coastguard Worker ** ^The rollback hook is invoked on a rollback that results from a commit 6773*a3141fd3SAndroid Build Coastguard Worker ** hook returning non-zero, just as it would be with any other rollback. 6774*a3141fd3SAndroid Build Coastguard Worker ** 6775*a3141fd3SAndroid Build Coastguard Worker ** ^For the purposes of this API, a transaction is said to have been 6776*a3141fd3SAndroid Build Coastguard Worker ** rolled back if an explicit "ROLLBACK" statement is executed, or 6777*a3141fd3SAndroid Build Coastguard Worker ** an error or constraint causes an implicit rollback to occur. 6778*a3141fd3SAndroid Build Coastguard Worker ** ^The rollback callback is not invoked if a transaction is 6779*a3141fd3SAndroid Build Coastguard Worker ** automatically rolled back because the database connection is closed. 6780*a3141fd3SAndroid Build Coastguard Worker ** 6781*a3141fd3SAndroid Build Coastguard Worker ** See also the [sqlite3_update_hook()] interface. 6782*a3141fd3SAndroid Build Coastguard Worker */ 6783*a3141fd3SAndroid Build Coastguard Worker SQLITE_API void *sqlite3_commit_hook(sqlite3*, int(*)(void*), void*); 6784*a3141fd3SAndroid Build Coastguard Worker SQLITE_API void *sqlite3_rollback_hook(sqlite3*, void(*)(void *), void*); 6785*a3141fd3SAndroid Build Coastguard Worker 6786*a3141fd3SAndroid Build Coastguard Worker /* 6787*a3141fd3SAndroid Build Coastguard Worker ** CAPI3REF: Autovacuum Compaction Amount Callback 6788*a3141fd3SAndroid Build Coastguard Worker ** METHOD: sqlite3 6789*a3141fd3SAndroid Build Coastguard Worker ** 6790*a3141fd3SAndroid Build Coastguard Worker ** ^The sqlite3_autovacuum_pages(D,C,P,X) interface registers a callback 6791*a3141fd3SAndroid Build Coastguard Worker ** function C that is invoked prior to each autovacuum of the database 6792*a3141fd3SAndroid Build Coastguard Worker ** file. ^The callback is passed a copy of the generic data pointer (P), 6793*a3141fd3SAndroid Build Coastguard Worker ** the schema-name of the attached database that is being autovacuumed, 6794*a3141fd3SAndroid Build Coastguard Worker ** the size of the database file in pages, the number of free pages, 6795*a3141fd3SAndroid Build Coastguard Worker ** and the number of bytes per page, respectively. The callback should 6796*a3141fd3SAndroid Build Coastguard Worker ** return the number of free pages that should be removed by the 6797*a3141fd3SAndroid Build Coastguard Worker ** autovacuum. ^If the callback returns zero, then no autovacuum happens. 6798*a3141fd3SAndroid Build Coastguard Worker ** ^If the value returned is greater than or equal to the number of 6799*a3141fd3SAndroid Build Coastguard Worker ** free pages, then a complete autovacuum happens. 6800*a3141fd3SAndroid Build Coastguard Worker ** 6801*a3141fd3SAndroid Build Coastguard Worker ** <p>^If there are multiple ATTACH-ed database files that are being 6802*a3141fd3SAndroid Build Coastguard Worker ** modified as part of a transaction commit, then the autovacuum pages 6803*a3141fd3SAndroid Build Coastguard Worker ** callback is invoked separately for each file. 6804*a3141fd3SAndroid Build Coastguard Worker ** 6805*a3141fd3SAndroid Build Coastguard Worker ** <p><b>The callback is not reentrant.</b> The callback function should 6806*a3141fd3SAndroid Build Coastguard Worker ** not attempt to invoke any other SQLite interface. If it does, bad 6807*a3141fd3SAndroid Build Coastguard Worker ** things may happen, including segmentation faults and corrupt database 6808*a3141fd3SAndroid Build Coastguard Worker ** files. The callback function should be a simple function that 6809*a3141fd3SAndroid Build Coastguard Worker ** does some arithmetic on its input parameters and returns a result. 6810*a3141fd3SAndroid Build Coastguard Worker ** 6811*a3141fd3SAndroid Build Coastguard Worker ** ^The X parameter to sqlite3_autovacuum_pages(D,C,P,X) is an optional 6812*a3141fd3SAndroid Build Coastguard Worker ** destructor for the P parameter. ^If X is not NULL, then X(P) is 6813*a3141fd3SAndroid Build Coastguard Worker ** invoked whenever the database connection closes or when the callback 6814*a3141fd3SAndroid Build Coastguard Worker ** is overwritten by another invocation of sqlite3_autovacuum_pages(). 6815*a3141fd3SAndroid Build Coastguard Worker ** 6816*a3141fd3SAndroid Build Coastguard Worker ** <p>^There is only one autovacuum pages callback per database connection. 6817*a3141fd3SAndroid Build Coastguard Worker ** ^Each call to the sqlite3_autovacuum_pages() interface overrides all 6818*a3141fd3SAndroid Build Coastguard Worker ** previous invocations for that database connection. ^If the callback 6819*a3141fd3SAndroid Build Coastguard Worker ** argument (C) to sqlite3_autovacuum_pages(D,C,P,X) is a NULL pointer, 6820*a3141fd3SAndroid Build Coastguard Worker ** then the autovacuum steps callback is canceled. The return value 6821*a3141fd3SAndroid Build Coastguard Worker ** from sqlite3_autovacuum_pages() is normally SQLITE_OK, but might 6822*a3141fd3SAndroid Build Coastguard Worker ** be some other error code if something goes wrong. The current 6823*a3141fd3SAndroid Build Coastguard Worker ** implementation will only return SQLITE_OK or SQLITE_MISUSE, but other 6824*a3141fd3SAndroid Build Coastguard Worker ** return codes might be added in future releases. 6825*a3141fd3SAndroid Build Coastguard Worker ** 6826*a3141fd3SAndroid Build Coastguard Worker ** <p>If no autovacuum pages callback is specified (the usual case) or 6827*a3141fd3SAndroid Build Coastguard Worker ** a NULL pointer is provided for the callback, 6828*a3141fd3SAndroid Build Coastguard Worker ** then the default behavior is to vacuum all free pages. So, in other 6829*a3141fd3SAndroid Build Coastguard Worker ** words, the default behavior is the same as if the callback function 6830*a3141fd3SAndroid Build Coastguard Worker ** were something like this: 6831*a3141fd3SAndroid Build Coastguard Worker ** 6832*a3141fd3SAndroid Build Coastguard Worker ** <blockquote><pre> 6833*a3141fd3SAndroid Build Coastguard Worker ** unsigned int demonstration_autovac_pages_callback( 6834*a3141fd3SAndroid Build Coastguard Worker ** void *pClientData, 6835*a3141fd3SAndroid Build Coastguard Worker ** const char *zSchema, 6836*a3141fd3SAndroid Build Coastguard Worker ** unsigned int nDbPage, 6837*a3141fd3SAndroid Build Coastguard Worker ** unsigned int nFreePage, 6838*a3141fd3SAndroid Build Coastguard Worker ** unsigned int nBytePerPage 6839*a3141fd3SAndroid Build Coastguard Worker ** ){ 6840*a3141fd3SAndroid Build Coastguard Worker ** return nFreePage; 6841*a3141fd3SAndroid Build Coastguard Worker ** } 6842*a3141fd3SAndroid Build Coastguard Worker ** </pre></blockquote> 6843*a3141fd3SAndroid Build Coastguard Worker */ 6844*a3141fd3SAndroid Build Coastguard Worker SQLITE_API int sqlite3_autovacuum_pages( 6845*a3141fd3SAndroid Build Coastguard Worker sqlite3 *db, 6846*a3141fd3SAndroid Build Coastguard Worker unsigned int(*)(void*,const char*,unsigned int,unsigned int,unsigned int), 6847*a3141fd3SAndroid Build Coastguard Worker void*, 6848*a3141fd3SAndroid Build Coastguard Worker void(*)(void*) 6849*a3141fd3SAndroid Build Coastguard Worker ); 6850*a3141fd3SAndroid Build Coastguard Worker 6851*a3141fd3SAndroid Build Coastguard Worker 6852*a3141fd3SAndroid Build Coastguard Worker /* 6853*a3141fd3SAndroid Build Coastguard Worker ** CAPI3REF: Data Change Notification Callbacks 6854*a3141fd3SAndroid Build Coastguard Worker ** METHOD: sqlite3 6855*a3141fd3SAndroid Build Coastguard Worker ** 6856*a3141fd3SAndroid Build Coastguard Worker ** ^The sqlite3_update_hook() interface registers a callback function 6857*a3141fd3SAndroid Build Coastguard Worker ** with the [database connection] identified by the first argument 6858*a3141fd3SAndroid Build Coastguard Worker ** to be invoked whenever a row is updated, inserted or deleted in 6859*a3141fd3SAndroid Build Coastguard Worker ** a [rowid table]. 6860*a3141fd3SAndroid Build Coastguard Worker ** ^Any callback set by a previous call to this function 6861*a3141fd3SAndroid Build Coastguard Worker ** for the same database connection is overridden. 6862*a3141fd3SAndroid Build Coastguard Worker ** 6863*a3141fd3SAndroid Build Coastguard Worker ** ^The second argument is a pointer to the function to invoke when a 6864*a3141fd3SAndroid Build Coastguard Worker ** row is updated, inserted or deleted in a rowid table. 6865*a3141fd3SAndroid Build Coastguard Worker ** ^The first argument to the callback is a copy of the third argument 6866*a3141fd3SAndroid Build Coastguard Worker ** to sqlite3_update_hook(). 6867*a3141fd3SAndroid Build Coastguard Worker ** ^The second callback argument is one of [SQLITE_INSERT], [SQLITE_DELETE], 6868*a3141fd3SAndroid Build Coastguard Worker ** or [SQLITE_UPDATE], depending on the operation that caused the callback 6869*a3141fd3SAndroid Build Coastguard Worker ** to be invoked. 6870*a3141fd3SAndroid Build Coastguard Worker ** ^The third and fourth arguments to the callback contain pointers to the 6871*a3141fd3SAndroid Build Coastguard Worker ** database and table name containing the affected row. 6872*a3141fd3SAndroid Build Coastguard Worker ** ^The final callback parameter is the [rowid] of the row. 6873*a3141fd3SAndroid Build Coastguard Worker ** ^In the case of an update, this is the [rowid] after the update takes place. 6874*a3141fd3SAndroid Build Coastguard Worker ** 6875*a3141fd3SAndroid Build Coastguard Worker ** ^(The update hook is not invoked when internal system tables are 6876*a3141fd3SAndroid Build Coastguard Worker ** modified (i.e. sqlite_sequence).)^ 6877*a3141fd3SAndroid Build Coastguard Worker ** ^The update hook is not invoked when [WITHOUT ROWID] tables are modified. 6878*a3141fd3SAndroid Build Coastguard Worker ** 6879*a3141fd3SAndroid Build Coastguard Worker ** ^In the current implementation, the update hook 6880*a3141fd3SAndroid Build Coastguard Worker ** is not invoked when conflicting rows are deleted because of an 6881*a3141fd3SAndroid Build Coastguard Worker ** [ON CONFLICT | ON CONFLICT REPLACE] clause. ^Nor is the update hook 6882*a3141fd3SAndroid Build Coastguard Worker ** invoked when rows are deleted using the [truncate optimization]. 6883*a3141fd3SAndroid Build Coastguard Worker ** The exceptions defined in this paragraph might change in a future 6884*a3141fd3SAndroid Build Coastguard Worker ** release of SQLite. 6885*a3141fd3SAndroid Build Coastguard Worker ** 6886*a3141fd3SAndroid Build Coastguard Worker ** The update hook implementation must not do anything that will modify 6887*a3141fd3SAndroid Build Coastguard Worker ** the database connection that invoked the update hook. Any actions 6888*a3141fd3SAndroid Build Coastguard Worker ** to modify the database connection must be deferred until after the 6889*a3141fd3SAndroid Build Coastguard Worker ** completion of the [sqlite3_step()] call that triggered the update hook. 6890*a3141fd3SAndroid Build Coastguard Worker ** Note that [sqlite3_prepare_v2()] and [sqlite3_step()] both modify their 6891*a3141fd3SAndroid Build Coastguard Worker ** database connections for the meaning of "modify" in this paragraph. 6892*a3141fd3SAndroid Build Coastguard Worker ** 6893*a3141fd3SAndroid Build Coastguard Worker ** ^The sqlite3_update_hook(D,C,P) function 6894*a3141fd3SAndroid Build Coastguard Worker ** returns the P argument from the previous call 6895*a3141fd3SAndroid Build Coastguard Worker ** on the same [database connection] D, or NULL for 6896*a3141fd3SAndroid Build Coastguard Worker ** the first call on D. 6897*a3141fd3SAndroid Build Coastguard Worker ** 6898*a3141fd3SAndroid Build Coastguard Worker ** See also the [sqlite3_commit_hook()], [sqlite3_rollback_hook()], 6899*a3141fd3SAndroid Build Coastguard Worker ** and [sqlite3_preupdate_hook()] interfaces. 6900*a3141fd3SAndroid Build Coastguard Worker */ 6901*a3141fd3SAndroid Build Coastguard Worker SQLITE_API void *sqlite3_update_hook( 6902*a3141fd3SAndroid Build Coastguard Worker sqlite3*, 6903*a3141fd3SAndroid Build Coastguard Worker void(*)(void *,int ,char const *,char const *,sqlite3_int64), 6904*a3141fd3SAndroid Build Coastguard Worker void* 6905*a3141fd3SAndroid Build Coastguard Worker ); 6906*a3141fd3SAndroid Build Coastguard Worker 6907*a3141fd3SAndroid Build Coastguard Worker /* 6908*a3141fd3SAndroid Build Coastguard Worker ** CAPI3REF: Enable Or Disable Shared Pager Cache 6909*a3141fd3SAndroid Build Coastguard Worker ** 6910*a3141fd3SAndroid Build Coastguard Worker ** ^(This routine enables or disables the sharing of the database cache 6911*a3141fd3SAndroid Build Coastguard Worker ** and schema data structures between [database connection | connections] 6912*a3141fd3SAndroid Build Coastguard Worker ** to the same database. Sharing is enabled if the argument is true 6913*a3141fd3SAndroid Build Coastguard Worker ** and disabled if the argument is false.)^ 6914*a3141fd3SAndroid Build Coastguard Worker ** 6915*a3141fd3SAndroid Build Coastguard Worker ** This interface is omitted if SQLite is compiled with 6916*a3141fd3SAndroid Build Coastguard Worker ** [-DSQLITE_OMIT_SHARED_CACHE]. The [-DSQLITE_OMIT_SHARED_CACHE] 6917*a3141fd3SAndroid Build Coastguard Worker ** compile-time option is recommended because the 6918*a3141fd3SAndroid Build Coastguard Worker ** [use of shared cache mode is discouraged]. 6919*a3141fd3SAndroid Build Coastguard Worker ** 6920*a3141fd3SAndroid Build Coastguard Worker ** ^Cache sharing is enabled and disabled for an entire process. 6921*a3141fd3SAndroid Build Coastguard Worker ** This is a change as of SQLite [version 3.5.0] ([dateof:3.5.0]). 6922*a3141fd3SAndroid Build Coastguard Worker ** In prior versions of SQLite, 6923*a3141fd3SAndroid Build Coastguard Worker ** sharing was enabled or disabled for each thread separately. 6924*a3141fd3SAndroid Build Coastguard Worker ** 6925*a3141fd3SAndroid Build Coastguard Worker ** ^(The cache sharing mode set by this interface effects all subsequent 6926*a3141fd3SAndroid Build Coastguard Worker ** calls to [sqlite3_open()], [sqlite3_open_v2()], and [sqlite3_open16()]. 6927*a3141fd3SAndroid Build Coastguard Worker ** Existing database connections continue to use the sharing mode 6928*a3141fd3SAndroid Build Coastguard Worker ** that was in effect at the time they were opened.)^ 6929*a3141fd3SAndroid Build Coastguard Worker ** 6930*a3141fd3SAndroid Build Coastguard Worker ** ^(This routine returns [SQLITE_OK] if shared cache was enabled or disabled 6931*a3141fd3SAndroid Build Coastguard Worker ** successfully. An [error code] is returned otherwise.)^ 6932*a3141fd3SAndroid Build Coastguard Worker ** 6933*a3141fd3SAndroid Build Coastguard Worker ** ^Shared cache is disabled by default. It is recommended that it stay 6934*a3141fd3SAndroid Build Coastguard Worker ** that way. In other words, do not use this routine. This interface 6935*a3141fd3SAndroid Build Coastguard Worker ** continues to be provided for historical compatibility, but its use is 6936*a3141fd3SAndroid Build Coastguard Worker ** discouraged. Any use of shared cache is discouraged. If shared cache 6937*a3141fd3SAndroid Build Coastguard Worker ** must be used, it is recommended that shared cache only be enabled for 6938*a3141fd3SAndroid Build Coastguard Worker ** individual database connections using the [sqlite3_open_v2()] interface 6939*a3141fd3SAndroid Build Coastguard Worker ** with the [SQLITE_OPEN_SHAREDCACHE] flag. 6940*a3141fd3SAndroid Build Coastguard Worker ** 6941*a3141fd3SAndroid Build Coastguard Worker ** Note: This method is disabled on MacOS X 10.7 and iOS version 5.0 6942*a3141fd3SAndroid Build Coastguard Worker ** and will always return SQLITE_MISUSE. On those systems, 6943*a3141fd3SAndroid Build Coastguard Worker ** shared cache mode should be enabled per-database connection via 6944*a3141fd3SAndroid Build Coastguard Worker ** [sqlite3_open_v2()] with [SQLITE_OPEN_SHAREDCACHE]. 6945*a3141fd3SAndroid Build Coastguard Worker ** 6946*a3141fd3SAndroid Build Coastguard Worker ** This interface is threadsafe on processors where writing a 6947*a3141fd3SAndroid Build Coastguard Worker ** 32-bit integer is atomic. 6948*a3141fd3SAndroid Build Coastguard Worker ** 6949*a3141fd3SAndroid Build Coastguard Worker ** See Also: [SQLite Shared-Cache Mode] 6950*a3141fd3SAndroid Build Coastguard Worker */ 6951*a3141fd3SAndroid Build Coastguard Worker SQLITE_API int sqlite3_enable_shared_cache(int); 6952*a3141fd3SAndroid Build Coastguard Worker 6953*a3141fd3SAndroid Build Coastguard Worker /* 6954*a3141fd3SAndroid Build Coastguard Worker ** CAPI3REF: Attempt To Free Heap Memory 6955*a3141fd3SAndroid Build Coastguard Worker ** 6956*a3141fd3SAndroid Build Coastguard Worker ** ^The sqlite3_release_memory() interface attempts to free N bytes 6957*a3141fd3SAndroid Build Coastguard Worker ** of heap memory by deallocating non-essential memory allocations 6958*a3141fd3SAndroid Build Coastguard Worker ** held by the database library. Memory used to cache database 6959*a3141fd3SAndroid Build Coastguard Worker ** pages to improve performance is an example of non-essential memory. 6960*a3141fd3SAndroid Build Coastguard Worker ** ^sqlite3_release_memory() returns the number of bytes actually freed, 6961*a3141fd3SAndroid Build Coastguard Worker ** which might be more or less than the amount requested. 6962*a3141fd3SAndroid Build Coastguard Worker ** ^The sqlite3_release_memory() routine is a no-op returning zero 6963*a3141fd3SAndroid Build Coastguard Worker ** if SQLite is not compiled with [SQLITE_ENABLE_MEMORY_MANAGEMENT]. 6964*a3141fd3SAndroid Build Coastguard Worker ** 6965*a3141fd3SAndroid Build Coastguard Worker ** See also: [sqlite3_db_release_memory()] 6966*a3141fd3SAndroid Build Coastguard Worker */ 6967*a3141fd3SAndroid Build Coastguard Worker SQLITE_API int sqlite3_release_memory(int); 6968*a3141fd3SAndroid Build Coastguard Worker 6969*a3141fd3SAndroid Build Coastguard Worker /* 6970*a3141fd3SAndroid Build Coastguard Worker ** CAPI3REF: Free Memory Used By A Database Connection 6971*a3141fd3SAndroid Build Coastguard Worker ** METHOD: sqlite3 6972*a3141fd3SAndroid Build Coastguard Worker ** 6973*a3141fd3SAndroid Build Coastguard Worker ** ^The sqlite3_db_release_memory(D) interface attempts to free as much heap 6974*a3141fd3SAndroid Build Coastguard Worker ** memory as possible from database connection D. Unlike the 6975*a3141fd3SAndroid Build Coastguard Worker ** [sqlite3_release_memory()] interface, this interface is in effect even 6976*a3141fd3SAndroid Build Coastguard Worker ** when the [SQLITE_ENABLE_MEMORY_MANAGEMENT] compile-time option is 6977*a3141fd3SAndroid Build Coastguard Worker ** omitted. 6978*a3141fd3SAndroid Build Coastguard Worker ** 6979*a3141fd3SAndroid Build Coastguard Worker ** See also: [sqlite3_release_memory()] 6980*a3141fd3SAndroid Build Coastguard Worker */ 6981*a3141fd3SAndroid Build Coastguard Worker SQLITE_API int sqlite3_db_release_memory(sqlite3*); 6982*a3141fd3SAndroid Build Coastguard Worker 6983*a3141fd3SAndroid Build Coastguard Worker /* 6984*a3141fd3SAndroid Build Coastguard Worker ** CAPI3REF: Impose A Limit On Heap Size 6985*a3141fd3SAndroid Build Coastguard Worker ** 6986*a3141fd3SAndroid Build Coastguard Worker ** These interfaces impose limits on the amount of heap memory that will be 6987*a3141fd3SAndroid Build Coastguard Worker ** by all database connections within a single process. 6988*a3141fd3SAndroid Build Coastguard Worker ** 6989*a3141fd3SAndroid Build Coastguard Worker ** ^The sqlite3_soft_heap_limit64() interface sets and/or queries the 6990*a3141fd3SAndroid Build Coastguard Worker ** soft limit on the amount of heap memory that may be allocated by SQLite. 6991*a3141fd3SAndroid Build Coastguard Worker ** ^SQLite strives to keep heap memory utilization below the soft heap 6992*a3141fd3SAndroid Build Coastguard Worker ** limit by reducing the number of pages held in the page cache 6993*a3141fd3SAndroid Build Coastguard Worker ** as heap memory usages approaches the limit. 6994*a3141fd3SAndroid Build Coastguard Worker ** ^The soft heap limit is "soft" because even though SQLite strives to stay 6995*a3141fd3SAndroid Build Coastguard Worker ** below the limit, it will exceed the limit rather than generate 6996*a3141fd3SAndroid Build Coastguard Worker ** an [SQLITE_NOMEM] error. In other words, the soft heap limit 6997*a3141fd3SAndroid Build Coastguard Worker ** is advisory only. 6998*a3141fd3SAndroid Build Coastguard Worker ** 6999*a3141fd3SAndroid Build Coastguard Worker ** ^The sqlite3_hard_heap_limit64(N) interface sets a hard upper bound of 7000*a3141fd3SAndroid Build Coastguard Worker ** N bytes on the amount of memory that will be allocated. ^The 7001*a3141fd3SAndroid Build Coastguard Worker ** sqlite3_hard_heap_limit64(N) interface is similar to 7002*a3141fd3SAndroid Build Coastguard Worker ** sqlite3_soft_heap_limit64(N) except that memory allocations will fail 7003*a3141fd3SAndroid Build Coastguard Worker ** when the hard heap limit is reached. 7004*a3141fd3SAndroid Build Coastguard Worker ** 7005*a3141fd3SAndroid Build Coastguard Worker ** ^The return value from both sqlite3_soft_heap_limit64() and 7006*a3141fd3SAndroid Build Coastguard Worker ** sqlite3_hard_heap_limit64() is the size of 7007*a3141fd3SAndroid Build Coastguard Worker ** the heap limit prior to the call, or negative in the case of an 7008*a3141fd3SAndroid Build Coastguard Worker ** error. ^If the argument N is negative 7009*a3141fd3SAndroid Build Coastguard Worker ** then no change is made to the heap limit. Hence, the current 7010*a3141fd3SAndroid Build Coastguard Worker ** size of heap limits can be determined by invoking 7011*a3141fd3SAndroid Build Coastguard Worker ** sqlite3_soft_heap_limit64(-1) or sqlite3_hard_heap_limit(-1). 7012*a3141fd3SAndroid Build Coastguard Worker ** 7013*a3141fd3SAndroid Build Coastguard Worker ** ^Setting the heap limits to zero disables the heap limiter mechanism. 7014*a3141fd3SAndroid Build Coastguard Worker ** 7015*a3141fd3SAndroid Build Coastguard Worker ** ^The soft heap limit may not be greater than the hard heap limit. 7016*a3141fd3SAndroid Build Coastguard Worker ** ^If the hard heap limit is enabled and if sqlite3_soft_heap_limit(N) 7017*a3141fd3SAndroid Build Coastguard Worker ** is invoked with a value of N that is greater than the hard heap limit, 7018*a3141fd3SAndroid Build Coastguard Worker ** the soft heap limit is set to the value of the hard heap limit. 7019*a3141fd3SAndroid Build Coastguard Worker ** ^The soft heap limit is automatically enabled whenever the hard heap 7020*a3141fd3SAndroid Build Coastguard Worker ** limit is enabled. ^When sqlite3_hard_heap_limit64(N) is invoked and 7021*a3141fd3SAndroid Build Coastguard Worker ** the soft heap limit is outside the range of 1..N, then the soft heap 7022*a3141fd3SAndroid Build Coastguard Worker ** limit is set to N. ^Invoking sqlite3_soft_heap_limit64(0) when the 7023*a3141fd3SAndroid Build Coastguard Worker ** hard heap limit is enabled makes the soft heap limit equal to the 7024*a3141fd3SAndroid Build Coastguard Worker ** hard heap limit. 7025*a3141fd3SAndroid Build Coastguard Worker ** 7026*a3141fd3SAndroid Build Coastguard Worker ** The memory allocation limits can also be adjusted using 7027*a3141fd3SAndroid Build Coastguard Worker ** [PRAGMA soft_heap_limit] and [PRAGMA hard_heap_limit]. 7028*a3141fd3SAndroid Build Coastguard Worker ** 7029*a3141fd3SAndroid Build Coastguard Worker ** ^(The heap limits are not enforced in the current implementation 7030*a3141fd3SAndroid Build Coastguard Worker ** if one or more of following conditions are true: 7031*a3141fd3SAndroid Build Coastguard Worker ** 7032*a3141fd3SAndroid Build Coastguard Worker ** <ul> 7033*a3141fd3SAndroid Build Coastguard Worker ** <li> The limit value is set to zero. 7034*a3141fd3SAndroid Build Coastguard Worker ** <li> Memory accounting is disabled using a combination of the 7035*a3141fd3SAndroid Build Coastguard Worker ** [sqlite3_config]([SQLITE_CONFIG_MEMSTATUS],...) start-time option and 7036*a3141fd3SAndroid Build Coastguard Worker ** the [SQLITE_DEFAULT_MEMSTATUS] compile-time option. 7037*a3141fd3SAndroid Build Coastguard Worker ** <li> An alternative page cache implementation is specified using 7038*a3141fd3SAndroid Build Coastguard Worker ** [sqlite3_config]([SQLITE_CONFIG_PCACHE2],...). 7039*a3141fd3SAndroid Build Coastguard Worker ** <li> The page cache allocates from its own memory pool supplied 7040*a3141fd3SAndroid Build Coastguard Worker ** by [sqlite3_config]([SQLITE_CONFIG_PAGECACHE],...) rather than 7041*a3141fd3SAndroid Build Coastguard Worker ** from the heap. 7042*a3141fd3SAndroid Build Coastguard Worker ** </ul>)^ 7043*a3141fd3SAndroid Build Coastguard Worker ** 7044*a3141fd3SAndroid Build Coastguard Worker ** The circumstances under which SQLite will enforce the heap limits may 7045*a3141fd3SAndroid Build Coastguard Worker ** changes in future releases of SQLite. 7046*a3141fd3SAndroid Build Coastguard Worker */ 7047*a3141fd3SAndroid Build Coastguard Worker SQLITE_API sqlite3_int64 sqlite3_soft_heap_limit64(sqlite3_int64 N); 7048*a3141fd3SAndroid Build Coastguard Worker SQLITE_API sqlite3_int64 sqlite3_hard_heap_limit64(sqlite3_int64 N); 7049*a3141fd3SAndroid Build Coastguard Worker 7050*a3141fd3SAndroid Build Coastguard Worker /* 7051*a3141fd3SAndroid Build Coastguard Worker ** CAPI3REF: Deprecated Soft Heap Limit Interface 7052*a3141fd3SAndroid Build Coastguard Worker ** DEPRECATED 7053*a3141fd3SAndroid Build Coastguard Worker ** 7054*a3141fd3SAndroid Build Coastguard Worker ** This is a deprecated version of the [sqlite3_soft_heap_limit64()] 7055*a3141fd3SAndroid Build Coastguard Worker ** interface. This routine is provided for historical compatibility 7056*a3141fd3SAndroid Build Coastguard Worker ** only. All new applications should use the 7057*a3141fd3SAndroid Build Coastguard Worker ** [sqlite3_soft_heap_limit64()] interface rather than this one. 7058*a3141fd3SAndroid Build Coastguard Worker */ 7059*a3141fd3SAndroid Build Coastguard Worker SQLITE_API SQLITE_DEPRECATED void sqlite3_soft_heap_limit(int N); 7060*a3141fd3SAndroid Build Coastguard Worker 7061*a3141fd3SAndroid Build Coastguard Worker 7062*a3141fd3SAndroid Build Coastguard Worker /* 7063*a3141fd3SAndroid Build Coastguard Worker ** CAPI3REF: Extract Metadata About A Column Of A Table 7064*a3141fd3SAndroid Build Coastguard Worker ** METHOD: sqlite3 7065*a3141fd3SAndroid Build Coastguard Worker ** 7066*a3141fd3SAndroid Build Coastguard Worker ** ^(The sqlite3_table_column_metadata(X,D,T,C,....) routine returns 7067*a3141fd3SAndroid Build Coastguard Worker ** information about column C of table T in database D 7068*a3141fd3SAndroid Build Coastguard Worker ** on [database connection] X.)^ ^The sqlite3_table_column_metadata() 7069*a3141fd3SAndroid Build Coastguard Worker ** interface returns SQLITE_OK and fills in the non-NULL pointers in 7070*a3141fd3SAndroid Build Coastguard Worker ** the final five arguments with appropriate values if the specified 7071*a3141fd3SAndroid Build Coastguard Worker ** column exists. ^The sqlite3_table_column_metadata() interface returns 7072*a3141fd3SAndroid Build Coastguard Worker ** SQLITE_ERROR if the specified column does not exist. 7073*a3141fd3SAndroid Build Coastguard Worker ** ^If the column-name parameter to sqlite3_table_column_metadata() is a 7074*a3141fd3SAndroid Build Coastguard Worker ** NULL pointer, then this routine simply checks for the existence of the 7075*a3141fd3SAndroid Build Coastguard Worker ** table and returns SQLITE_OK if the table exists and SQLITE_ERROR if it 7076*a3141fd3SAndroid Build Coastguard Worker ** does not. If the table name parameter T in a call to 7077*a3141fd3SAndroid Build Coastguard Worker ** sqlite3_table_column_metadata(X,D,T,C,...) is NULL then the result is 7078*a3141fd3SAndroid Build Coastguard Worker ** undefined behavior. 7079*a3141fd3SAndroid Build Coastguard Worker ** 7080*a3141fd3SAndroid Build Coastguard Worker ** ^The column is identified by the second, third and fourth parameters to 7081*a3141fd3SAndroid Build Coastguard Worker ** this function. ^(The second parameter is either the name of the database 7082*a3141fd3SAndroid Build Coastguard Worker ** (i.e. "main", "temp", or an attached database) containing the specified 7083*a3141fd3SAndroid Build Coastguard Worker ** table or NULL.)^ ^If it is NULL, then all attached databases are searched 7084*a3141fd3SAndroid Build Coastguard Worker ** for the table using the same algorithm used by the database engine to 7085*a3141fd3SAndroid Build Coastguard Worker ** resolve unqualified table references. 7086*a3141fd3SAndroid Build Coastguard Worker ** 7087*a3141fd3SAndroid Build Coastguard Worker ** ^The third and fourth parameters to this function are the table and column 7088*a3141fd3SAndroid Build Coastguard Worker ** name of the desired column, respectively. 7089*a3141fd3SAndroid Build Coastguard Worker ** 7090*a3141fd3SAndroid Build Coastguard Worker ** ^Metadata is returned by writing to the memory locations passed as the 5th 7091*a3141fd3SAndroid Build Coastguard Worker ** and subsequent parameters to this function. ^Any of these arguments may be 7092*a3141fd3SAndroid Build Coastguard Worker ** NULL, in which case the corresponding element of metadata is omitted. 7093*a3141fd3SAndroid Build Coastguard Worker ** 7094*a3141fd3SAndroid Build Coastguard Worker ** ^(<blockquote> 7095*a3141fd3SAndroid Build Coastguard Worker ** <table border="1"> 7096*a3141fd3SAndroid Build Coastguard Worker ** <tr><th> Parameter <th> Output<br>Type <th> Description 7097*a3141fd3SAndroid Build Coastguard Worker ** 7098*a3141fd3SAndroid Build Coastguard Worker ** <tr><td> 5th <td> const char* <td> Data type 7099*a3141fd3SAndroid Build Coastguard Worker ** <tr><td> 6th <td> const char* <td> Name of default collation sequence 7100*a3141fd3SAndroid Build Coastguard Worker ** <tr><td> 7th <td> int <td> True if column has a NOT NULL constraint 7101*a3141fd3SAndroid Build Coastguard Worker ** <tr><td> 8th <td> int <td> True if column is part of the PRIMARY KEY 7102*a3141fd3SAndroid Build Coastguard Worker ** <tr><td> 9th <td> int <td> True if column is [AUTOINCREMENT] 7103*a3141fd3SAndroid Build Coastguard Worker ** </table> 7104*a3141fd3SAndroid Build Coastguard Worker ** </blockquote>)^ 7105*a3141fd3SAndroid Build Coastguard Worker ** 7106*a3141fd3SAndroid Build Coastguard Worker ** ^The memory pointed to by the character pointers returned for the 7107*a3141fd3SAndroid Build Coastguard Worker ** declaration type and collation sequence is valid until the next 7108*a3141fd3SAndroid Build Coastguard Worker ** call to any SQLite API function. 7109*a3141fd3SAndroid Build Coastguard Worker ** 7110*a3141fd3SAndroid Build Coastguard Worker ** ^If the specified table is actually a view, an [error code] is returned. 7111*a3141fd3SAndroid Build Coastguard Worker ** 7112*a3141fd3SAndroid Build Coastguard Worker ** ^If the specified column is "rowid", "oid" or "_rowid_" and the table 7113*a3141fd3SAndroid Build Coastguard Worker ** is not a [WITHOUT ROWID] table and an 7114*a3141fd3SAndroid Build Coastguard Worker ** [INTEGER PRIMARY KEY] column has been explicitly declared, then the output 7115*a3141fd3SAndroid Build Coastguard Worker ** parameters are set for the explicitly declared column. ^(If there is no 7116*a3141fd3SAndroid Build Coastguard Worker ** [INTEGER PRIMARY KEY] column, then the outputs 7117*a3141fd3SAndroid Build Coastguard Worker ** for the [rowid] are set as follows: 7118*a3141fd3SAndroid Build Coastguard Worker ** 7119*a3141fd3SAndroid Build Coastguard Worker ** <pre> 7120*a3141fd3SAndroid Build Coastguard Worker ** data type: "INTEGER" 7121*a3141fd3SAndroid Build Coastguard Worker ** collation sequence: "BINARY" 7122*a3141fd3SAndroid Build Coastguard Worker ** not null: 0 7123*a3141fd3SAndroid Build Coastguard Worker ** primary key: 1 7124*a3141fd3SAndroid Build Coastguard Worker ** auto increment: 0 7125*a3141fd3SAndroid Build Coastguard Worker ** </pre>)^ 7126*a3141fd3SAndroid Build Coastguard Worker ** 7127*a3141fd3SAndroid Build Coastguard Worker ** ^This function causes all database schemas to be read from disk and 7128*a3141fd3SAndroid Build Coastguard Worker ** parsed, if that has not already been done, and returns an error if 7129*a3141fd3SAndroid Build Coastguard Worker ** any errors are encountered while loading the schema. 7130*a3141fd3SAndroid Build Coastguard Worker */ 7131*a3141fd3SAndroid Build Coastguard Worker SQLITE_API int sqlite3_table_column_metadata( 7132*a3141fd3SAndroid Build Coastguard Worker sqlite3 *db, /* Connection handle */ 7133*a3141fd3SAndroid Build Coastguard Worker const char *zDbName, /* Database name or NULL */ 7134*a3141fd3SAndroid Build Coastguard Worker const char *zTableName, /* Table name */ 7135*a3141fd3SAndroid Build Coastguard Worker const char *zColumnName, /* Column name */ 7136*a3141fd3SAndroid Build Coastguard Worker char const **pzDataType, /* OUTPUT: Declared data type */ 7137*a3141fd3SAndroid Build Coastguard Worker char const **pzCollSeq, /* OUTPUT: Collation sequence name */ 7138*a3141fd3SAndroid Build Coastguard Worker int *pNotNull, /* OUTPUT: True if NOT NULL constraint exists */ 7139*a3141fd3SAndroid Build Coastguard Worker int *pPrimaryKey, /* OUTPUT: True if column part of PK */ 7140*a3141fd3SAndroid Build Coastguard Worker int *pAutoinc /* OUTPUT: True if column is auto-increment */ 7141*a3141fd3SAndroid Build Coastguard Worker ); 7142*a3141fd3SAndroid Build Coastguard Worker 7143*a3141fd3SAndroid Build Coastguard Worker /* 7144*a3141fd3SAndroid Build Coastguard Worker ** CAPI3REF: Load An Extension 7145*a3141fd3SAndroid Build Coastguard Worker ** METHOD: sqlite3 7146*a3141fd3SAndroid Build Coastguard Worker ** 7147*a3141fd3SAndroid Build Coastguard Worker ** ^This interface loads an SQLite extension library from the named file. 7148*a3141fd3SAndroid Build Coastguard Worker ** 7149*a3141fd3SAndroid Build Coastguard Worker ** ^The sqlite3_load_extension() interface attempts to load an 7150*a3141fd3SAndroid Build Coastguard Worker ** [SQLite extension] library contained in the file zFile. If 7151*a3141fd3SAndroid Build Coastguard Worker ** the file cannot be loaded directly, attempts are made to load 7152*a3141fd3SAndroid Build Coastguard Worker ** with various operating-system specific extensions added. 7153*a3141fd3SAndroid Build Coastguard Worker ** So for example, if "samplelib" cannot be loaded, then names like 7154*a3141fd3SAndroid Build Coastguard Worker ** "samplelib.so" or "samplelib.dylib" or "samplelib.dll" might 7155*a3141fd3SAndroid Build Coastguard Worker ** be tried also. 7156*a3141fd3SAndroid Build Coastguard Worker ** 7157*a3141fd3SAndroid Build Coastguard Worker ** ^The entry point is zProc. 7158*a3141fd3SAndroid Build Coastguard Worker ** ^(zProc may be 0, in which case SQLite will try to come up with an 7159*a3141fd3SAndroid Build Coastguard Worker ** entry point name on its own. It first tries "sqlite3_extension_init". 7160*a3141fd3SAndroid Build Coastguard Worker ** If that does not work, it constructs a name "sqlite3_X_init" where the 7161*a3141fd3SAndroid Build Coastguard Worker ** X is consists of the lower-case equivalent of all ASCII alphabetic 7162*a3141fd3SAndroid Build Coastguard Worker ** characters in the filename from the last "/" to the first following 7163*a3141fd3SAndroid Build Coastguard Worker ** "." and omitting any initial "lib".)^ 7164*a3141fd3SAndroid Build Coastguard Worker ** ^The sqlite3_load_extension() interface returns 7165*a3141fd3SAndroid Build Coastguard Worker ** [SQLITE_OK] on success and [SQLITE_ERROR] if something goes wrong. 7166*a3141fd3SAndroid Build Coastguard Worker ** ^If an error occurs and pzErrMsg is not 0, then the 7167*a3141fd3SAndroid Build Coastguard Worker ** [sqlite3_load_extension()] interface shall attempt to 7168*a3141fd3SAndroid Build Coastguard Worker ** fill *pzErrMsg with error message text stored in memory 7169*a3141fd3SAndroid Build Coastguard Worker ** obtained from [sqlite3_malloc()]. The calling function 7170*a3141fd3SAndroid Build Coastguard Worker ** should free this memory by calling [sqlite3_free()]. 7171*a3141fd3SAndroid Build Coastguard Worker ** 7172*a3141fd3SAndroid Build Coastguard Worker ** ^Extension loading must be enabled using 7173*a3141fd3SAndroid Build Coastguard Worker ** [sqlite3_enable_load_extension()] or 7174*a3141fd3SAndroid Build Coastguard Worker ** [sqlite3_db_config](db,[SQLITE_DBCONFIG_ENABLE_LOAD_EXTENSION],1,NULL) 7175*a3141fd3SAndroid Build Coastguard Worker ** prior to calling this API, 7176*a3141fd3SAndroid Build Coastguard Worker ** otherwise an error will be returned. 7177*a3141fd3SAndroid Build Coastguard Worker ** 7178*a3141fd3SAndroid Build Coastguard Worker ** <b>Security warning:</b> It is recommended that the 7179*a3141fd3SAndroid Build Coastguard Worker ** [SQLITE_DBCONFIG_ENABLE_LOAD_EXTENSION] method be used to enable only this 7180*a3141fd3SAndroid Build Coastguard Worker ** interface. The use of the [sqlite3_enable_load_extension()] interface 7181*a3141fd3SAndroid Build Coastguard Worker ** should be avoided. This will keep the SQL function [load_extension()] 7182*a3141fd3SAndroid Build Coastguard Worker ** disabled and prevent SQL injections from giving attackers 7183*a3141fd3SAndroid Build Coastguard Worker ** access to extension loading capabilities. 7184*a3141fd3SAndroid Build Coastguard Worker ** 7185*a3141fd3SAndroid Build Coastguard Worker ** See also the [load_extension() SQL function]. 7186*a3141fd3SAndroid Build Coastguard Worker */ 7187*a3141fd3SAndroid Build Coastguard Worker SQLITE_API int sqlite3_load_extension( 7188*a3141fd3SAndroid Build Coastguard Worker sqlite3 *db, /* Load the extension into this database connection */ 7189*a3141fd3SAndroid Build Coastguard Worker const char *zFile, /* Name of the shared library containing extension */ 7190*a3141fd3SAndroid Build Coastguard Worker const char *zProc, /* Entry point. Derived from zFile if 0 */ 7191*a3141fd3SAndroid Build Coastguard Worker char **pzErrMsg /* Put error message here if not 0 */ 7192*a3141fd3SAndroid Build Coastguard Worker ); 7193*a3141fd3SAndroid Build Coastguard Worker 7194*a3141fd3SAndroid Build Coastguard Worker /* 7195*a3141fd3SAndroid Build Coastguard Worker ** CAPI3REF: Enable Or Disable Extension Loading 7196*a3141fd3SAndroid Build Coastguard Worker ** METHOD: sqlite3 7197*a3141fd3SAndroid Build Coastguard Worker ** 7198*a3141fd3SAndroid Build Coastguard Worker ** ^So as not to open security holes in older applications that are 7199*a3141fd3SAndroid Build Coastguard Worker ** unprepared to deal with [extension loading], and as a means of disabling 7200*a3141fd3SAndroid Build Coastguard Worker ** [extension loading] while evaluating user-entered SQL, the following API 7201*a3141fd3SAndroid Build Coastguard Worker ** is provided to turn the [sqlite3_load_extension()] mechanism on and off. 7202*a3141fd3SAndroid Build Coastguard Worker ** 7203*a3141fd3SAndroid Build Coastguard Worker ** ^Extension loading is off by default. 7204*a3141fd3SAndroid Build Coastguard Worker ** ^Call the sqlite3_enable_load_extension() routine with onoff==1 7205*a3141fd3SAndroid Build Coastguard Worker ** to turn extension loading on and call it with onoff==0 to turn 7206*a3141fd3SAndroid Build Coastguard Worker ** it back off again. 7207*a3141fd3SAndroid Build Coastguard Worker ** 7208*a3141fd3SAndroid Build Coastguard Worker ** ^This interface enables or disables both the C-API 7209*a3141fd3SAndroid Build Coastguard Worker ** [sqlite3_load_extension()] and the SQL function [load_extension()]. 7210*a3141fd3SAndroid Build Coastguard Worker ** ^(Use [sqlite3_db_config](db,[SQLITE_DBCONFIG_ENABLE_LOAD_EXTENSION],..) 7211*a3141fd3SAndroid Build Coastguard Worker ** to enable or disable only the C-API.)^ 7212*a3141fd3SAndroid Build Coastguard Worker ** 7213*a3141fd3SAndroid Build Coastguard Worker ** <b>Security warning:</b> It is recommended that extension loading 7214*a3141fd3SAndroid Build Coastguard Worker ** be enabled using the [SQLITE_DBCONFIG_ENABLE_LOAD_EXTENSION] method 7215*a3141fd3SAndroid Build Coastguard Worker ** rather than this interface, so the [load_extension()] SQL function 7216*a3141fd3SAndroid Build Coastguard Worker ** remains disabled. This will prevent SQL injections from giving attackers 7217*a3141fd3SAndroid Build Coastguard Worker ** access to extension loading capabilities. 7218*a3141fd3SAndroid Build Coastguard Worker */ 7219*a3141fd3SAndroid Build Coastguard Worker SQLITE_API int sqlite3_enable_load_extension(sqlite3 *db, int onoff); 7220*a3141fd3SAndroid Build Coastguard Worker 7221*a3141fd3SAndroid Build Coastguard Worker /* 7222*a3141fd3SAndroid Build Coastguard Worker ** CAPI3REF: Automatically Load Statically Linked Extensions 7223*a3141fd3SAndroid Build Coastguard Worker ** 7224*a3141fd3SAndroid Build Coastguard Worker ** ^This interface causes the xEntryPoint() function to be invoked for 7225*a3141fd3SAndroid Build Coastguard Worker ** each new [database connection] that is created. The idea here is that 7226*a3141fd3SAndroid Build Coastguard Worker ** xEntryPoint() is the entry point for a statically linked [SQLite extension] 7227*a3141fd3SAndroid Build Coastguard Worker ** that is to be automatically loaded into all new database connections. 7228*a3141fd3SAndroid Build Coastguard Worker ** 7229*a3141fd3SAndroid Build Coastguard Worker ** ^(Even though the function prototype shows that xEntryPoint() takes 7230*a3141fd3SAndroid Build Coastguard Worker ** no arguments and returns void, SQLite invokes xEntryPoint() with three 7231*a3141fd3SAndroid Build Coastguard Worker ** arguments and expects an integer result as if the signature of the 7232*a3141fd3SAndroid Build Coastguard Worker ** entry point where as follows: 7233*a3141fd3SAndroid Build Coastguard Worker ** 7234*a3141fd3SAndroid Build Coastguard Worker ** <blockquote><pre> 7235*a3141fd3SAndroid Build Coastguard Worker ** int xEntryPoint( 7236*a3141fd3SAndroid Build Coastguard Worker ** sqlite3 *db, 7237*a3141fd3SAndroid Build Coastguard Worker ** const char **pzErrMsg, 7238*a3141fd3SAndroid Build Coastguard Worker ** const struct sqlite3_api_routines *pThunk 7239*a3141fd3SAndroid Build Coastguard Worker ** ); 7240*a3141fd3SAndroid Build Coastguard Worker ** </pre></blockquote>)^ 7241*a3141fd3SAndroid Build Coastguard Worker ** 7242*a3141fd3SAndroid Build Coastguard Worker ** If the xEntryPoint routine encounters an error, it should make *pzErrMsg 7243*a3141fd3SAndroid Build Coastguard Worker ** point to an appropriate error message (obtained from [sqlite3_mprintf()]) 7244*a3141fd3SAndroid Build Coastguard Worker ** and return an appropriate [error code]. ^SQLite ensures that *pzErrMsg 7245*a3141fd3SAndroid Build Coastguard Worker ** is NULL before calling the xEntryPoint(). ^SQLite will invoke 7246*a3141fd3SAndroid Build Coastguard Worker ** [sqlite3_free()] on *pzErrMsg after xEntryPoint() returns. ^If any 7247*a3141fd3SAndroid Build Coastguard Worker ** xEntryPoint() returns an error, the [sqlite3_open()], [sqlite3_open16()], 7248*a3141fd3SAndroid Build Coastguard Worker ** or [sqlite3_open_v2()] call that provoked the xEntryPoint() will fail. 7249*a3141fd3SAndroid Build Coastguard Worker ** 7250*a3141fd3SAndroid Build Coastguard Worker ** ^Calling sqlite3_auto_extension(X) with an entry point X that is already 7251*a3141fd3SAndroid Build Coastguard Worker ** on the list of automatic extensions is a harmless no-op. ^No entry point 7252*a3141fd3SAndroid Build Coastguard Worker ** will be called more than once for each database connection that is opened. 7253*a3141fd3SAndroid Build Coastguard Worker ** 7254*a3141fd3SAndroid Build Coastguard Worker ** See also: [sqlite3_reset_auto_extension()] 7255*a3141fd3SAndroid Build Coastguard Worker ** and [sqlite3_cancel_auto_extension()] 7256*a3141fd3SAndroid Build Coastguard Worker */ 7257*a3141fd3SAndroid Build Coastguard Worker SQLITE_API int sqlite3_auto_extension(void(*xEntryPoint)(void)); 7258*a3141fd3SAndroid Build Coastguard Worker 7259*a3141fd3SAndroid Build Coastguard Worker /* 7260*a3141fd3SAndroid Build Coastguard Worker ** CAPI3REF: Cancel Automatic Extension Loading 7261*a3141fd3SAndroid Build Coastguard Worker ** 7262*a3141fd3SAndroid Build Coastguard Worker ** ^The [sqlite3_cancel_auto_extension(X)] interface unregisters the 7263*a3141fd3SAndroid Build Coastguard Worker ** initialization routine X that was registered using a prior call to 7264*a3141fd3SAndroid Build Coastguard Worker ** [sqlite3_auto_extension(X)]. ^The [sqlite3_cancel_auto_extension(X)] 7265*a3141fd3SAndroid Build Coastguard Worker ** routine returns 1 if initialization routine X was successfully 7266*a3141fd3SAndroid Build Coastguard Worker ** unregistered and it returns 0 if X was not on the list of initialization 7267*a3141fd3SAndroid Build Coastguard Worker ** routines. 7268*a3141fd3SAndroid Build Coastguard Worker */ 7269*a3141fd3SAndroid Build Coastguard Worker SQLITE_API int sqlite3_cancel_auto_extension(void(*xEntryPoint)(void)); 7270*a3141fd3SAndroid Build Coastguard Worker 7271*a3141fd3SAndroid Build Coastguard Worker /* 7272*a3141fd3SAndroid Build Coastguard Worker ** CAPI3REF: Reset Automatic Extension Loading 7273*a3141fd3SAndroid Build Coastguard Worker ** 7274*a3141fd3SAndroid Build Coastguard Worker ** ^This interface disables all automatic extensions previously 7275*a3141fd3SAndroid Build Coastguard Worker ** registered using [sqlite3_auto_extension()]. 7276*a3141fd3SAndroid Build Coastguard Worker */ 7277*a3141fd3SAndroid Build Coastguard Worker SQLITE_API void sqlite3_reset_auto_extension(void); 7278*a3141fd3SAndroid Build Coastguard Worker 7279*a3141fd3SAndroid Build Coastguard Worker /* 7280*a3141fd3SAndroid Build Coastguard Worker ** Structures used by the virtual table interface 7281*a3141fd3SAndroid Build Coastguard Worker */ 7282*a3141fd3SAndroid Build Coastguard Worker typedef struct sqlite3_vtab sqlite3_vtab; 7283*a3141fd3SAndroid Build Coastguard Worker typedef struct sqlite3_index_info sqlite3_index_info; 7284*a3141fd3SAndroid Build Coastguard Worker typedef struct sqlite3_vtab_cursor sqlite3_vtab_cursor; 7285*a3141fd3SAndroid Build Coastguard Worker typedef struct sqlite3_module sqlite3_module; 7286*a3141fd3SAndroid Build Coastguard Worker 7287*a3141fd3SAndroid Build Coastguard Worker /* 7288*a3141fd3SAndroid Build Coastguard Worker ** CAPI3REF: Virtual Table Object 7289*a3141fd3SAndroid Build Coastguard Worker ** KEYWORDS: sqlite3_module {virtual table module} 7290*a3141fd3SAndroid Build Coastguard Worker ** 7291*a3141fd3SAndroid Build Coastguard Worker ** This structure, sometimes called a "virtual table module", 7292*a3141fd3SAndroid Build Coastguard Worker ** defines the implementation of a [virtual table]. 7293*a3141fd3SAndroid Build Coastguard Worker ** This structure consists mostly of methods for the module. 7294*a3141fd3SAndroid Build Coastguard Worker ** 7295*a3141fd3SAndroid Build Coastguard Worker ** ^A virtual table module is created by filling in a persistent 7296*a3141fd3SAndroid Build Coastguard Worker ** instance of this structure and passing a pointer to that instance 7297*a3141fd3SAndroid Build Coastguard Worker ** to [sqlite3_create_module()] or [sqlite3_create_module_v2()]. 7298*a3141fd3SAndroid Build Coastguard Worker ** ^The registration remains valid until it is replaced by a different 7299*a3141fd3SAndroid Build Coastguard Worker ** module or until the [database connection] closes. The content 7300*a3141fd3SAndroid Build Coastguard Worker ** of this structure must not change while it is registered with 7301*a3141fd3SAndroid Build Coastguard Worker ** any database connection. 7302*a3141fd3SAndroid Build Coastguard Worker */ 7303*a3141fd3SAndroid Build Coastguard Worker struct sqlite3_module { 7304*a3141fd3SAndroid Build Coastguard Worker int iVersion; 7305*a3141fd3SAndroid Build Coastguard Worker int (*xCreate)(sqlite3*, void *pAux, 7306*a3141fd3SAndroid Build Coastguard Worker int argc, const char *const*argv, 7307*a3141fd3SAndroid Build Coastguard Worker sqlite3_vtab **ppVTab, char**); 7308*a3141fd3SAndroid Build Coastguard Worker int (*xConnect)(sqlite3*, void *pAux, 7309*a3141fd3SAndroid Build Coastguard Worker int argc, const char *const*argv, 7310*a3141fd3SAndroid Build Coastguard Worker sqlite3_vtab **ppVTab, char**); 7311*a3141fd3SAndroid Build Coastguard Worker int (*xBestIndex)(sqlite3_vtab *pVTab, sqlite3_index_info*); 7312*a3141fd3SAndroid Build Coastguard Worker int (*xDisconnect)(sqlite3_vtab *pVTab); 7313*a3141fd3SAndroid Build Coastguard Worker int (*xDestroy)(sqlite3_vtab *pVTab); 7314*a3141fd3SAndroid Build Coastguard Worker int (*xOpen)(sqlite3_vtab *pVTab, sqlite3_vtab_cursor **ppCursor); 7315*a3141fd3SAndroid Build Coastguard Worker int (*xClose)(sqlite3_vtab_cursor*); 7316*a3141fd3SAndroid Build Coastguard Worker int (*xFilter)(sqlite3_vtab_cursor*, int idxNum, const char *idxStr, 7317*a3141fd3SAndroid Build Coastguard Worker int argc, sqlite3_value **argv); 7318*a3141fd3SAndroid Build Coastguard Worker int (*xNext)(sqlite3_vtab_cursor*); 7319*a3141fd3SAndroid Build Coastguard Worker int (*xEof)(sqlite3_vtab_cursor*); 7320*a3141fd3SAndroid Build Coastguard Worker int (*xColumn)(sqlite3_vtab_cursor*, sqlite3_context*, int); 7321*a3141fd3SAndroid Build Coastguard Worker int (*xRowid)(sqlite3_vtab_cursor*, sqlite3_int64 *pRowid); 7322*a3141fd3SAndroid Build Coastguard Worker int (*xUpdate)(sqlite3_vtab *, int, sqlite3_value **, sqlite3_int64 *); 7323*a3141fd3SAndroid Build Coastguard Worker int (*xBegin)(sqlite3_vtab *pVTab); 7324*a3141fd3SAndroid Build Coastguard Worker int (*xSync)(sqlite3_vtab *pVTab); 7325*a3141fd3SAndroid Build Coastguard Worker int (*xCommit)(sqlite3_vtab *pVTab); 7326*a3141fd3SAndroid Build Coastguard Worker int (*xRollback)(sqlite3_vtab *pVTab); 7327*a3141fd3SAndroid Build Coastguard Worker int (*xFindFunction)(sqlite3_vtab *pVtab, int nArg, const char *zName, 7328*a3141fd3SAndroid Build Coastguard Worker void (**pxFunc)(sqlite3_context*,int,sqlite3_value**), 7329*a3141fd3SAndroid Build Coastguard Worker void **ppArg); 7330*a3141fd3SAndroid Build Coastguard Worker int (*xRename)(sqlite3_vtab *pVtab, const char *zNew); 7331*a3141fd3SAndroid Build Coastguard Worker /* The methods above are in version 1 of the sqlite_module object. Those 7332*a3141fd3SAndroid Build Coastguard Worker ** below are for version 2 and greater. */ 7333*a3141fd3SAndroid Build Coastguard Worker int (*xSavepoint)(sqlite3_vtab *pVTab, int); 7334*a3141fd3SAndroid Build Coastguard Worker int (*xRelease)(sqlite3_vtab *pVTab, int); 7335*a3141fd3SAndroid Build Coastguard Worker int (*xRollbackTo)(sqlite3_vtab *pVTab, int); 7336*a3141fd3SAndroid Build Coastguard Worker /* The methods above are in versions 1 and 2 of the sqlite_module object. 7337*a3141fd3SAndroid Build Coastguard Worker ** Those below are for version 3 and greater. */ 7338*a3141fd3SAndroid Build Coastguard Worker int (*xShadowName)(const char*); 7339*a3141fd3SAndroid Build Coastguard Worker /* The methods above are in versions 1 through 3 of the sqlite_module object. 7340*a3141fd3SAndroid Build Coastguard Worker ** Those below are for version 4 and greater. */ 7341*a3141fd3SAndroid Build Coastguard Worker int (*xIntegrity)(sqlite3_vtab *pVTab, const char *zSchema, 7342*a3141fd3SAndroid Build Coastguard Worker const char *zTabName, int mFlags, char **pzErr); 7343*a3141fd3SAndroid Build Coastguard Worker }; 7344*a3141fd3SAndroid Build Coastguard Worker 7345*a3141fd3SAndroid Build Coastguard Worker /* 7346*a3141fd3SAndroid Build Coastguard Worker ** CAPI3REF: Virtual Table Indexing Information 7347*a3141fd3SAndroid Build Coastguard Worker ** KEYWORDS: sqlite3_index_info 7348*a3141fd3SAndroid Build Coastguard Worker ** 7349*a3141fd3SAndroid Build Coastguard Worker ** The sqlite3_index_info structure and its substructures is used as part 7350*a3141fd3SAndroid Build Coastguard Worker ** of the [virtual table] interface to 7351*a3141fd3SAndroid Build Coastguard Worker ** pass information into and receive the reply from the [xBestIndex] 7352*a3141fd3SAndroid Build Coastguard Worker ** method of a [virtual table module]. The fields under **Inputs** are the 7353*a3141fd3SAndroid Build Coastguard Worker ** inputs to xBestIndex and are read-only. xBestIndex inserts its 7354*a3141fd3SAndroid Build Coastguard Worker ** results into the **Outputs** fields. 7355*a3141fd3SAndroid Build Coastguard Worker ** 7356*a3141fd3SAndroid Build Coastguard Worker ** ^(The aConstraint[] array records WHERE clause constraints of the form: 7357*a3141fd3SAndroid Build Coastguard Worker ** 7358*a3141fd3SAndroid Build Coastguard Worker ** <blockquote>column OP expr</blockquote> 7359*a3141fd3SAndroid Build Coastguard Worker ** 7360*a3141fd3SAndroid Build Coastguard Worker ** where OP is =, <, <=, >, or >=.)^ ^(The particular operator is 7361*a3141fd3SAndroid Build Coastguard Worker ** stored in aConstraint[].op using one of the 7362*a3141fd3SAndroid Build Coastguard Worker ** [SQLITE_INDEX_CONSTRAINT_EQ | SQLITE_INDEX_CONSTRAINT_ values].)^ 7363*a3141fd3SAndroid Build Coastguard Worker ** ^(The index of the column is stored in 7364*a3141fd3SAndroid Build Coastguard Worker ** aConstraint[].iColumn.)^ ^(aConstraint[].usable is TRUE if the 7365*a3141fd3SAndroid Build Coastguard Worker ** expr on the right-hand side can be evaluated (and thus the constraint 7366*a3141fd3SAndroid Build Coastguard Worker ** is usable) and false if it cannot.)^ 7367*a3141fd3SAndroid Build Coastguard Worker ** 7368*a3141fd3SAndroid Build Coastguard Worker ** ^The optimizer automatically inverts terms of the form "expr OP column" 7369*a3141fd3SAndroid Build Coastguard Worker ** and makes other simplifications to the WHERE clause in an attempt to 7370*a3141fd3SAndroid Build Coastguard Worker ** get as many WHERE clause terms into the form shown above as possible. 7371*a3141fd3SAndroid Build Coastguard Worker ** ^The aConstraint[] array only reports WHERE clause terms that are 7372*a3141fd3SAndroid Build Coastguard Worker ** relevant to the particular virtual table being queried. 7373*a3141fd3SAndroid Build Coastguard Worker ** 7374*a3141fd3SAndroid Build Coastguard Worker ** ^Information about the ORDER BY clause is stored in aOrderBy[]. 7375*a3141fd3SAndroid Build Coastguard Worker ** ^Each term of aOrderBy records a column of the ORDER BY clause. 7376*a3141fd3SAndroid Build Coastguard Worker ** 7377*a3141fd3SAndroid Build Coastguard Worker ** The colUsed field indicates which columns of the virtual table may be 7378*a3141fd3SAndroid Build Coastguard Worker ** required by the current scan. Virtual table columns are numbered from 7379*a3141fd3SAndroid Build Coastguard Worker ** zero in the order in which they appear within the CREATE TABLE statement 7380*a3141fd3SAndroid Build Coastguard Worker ** passed to sqlite3_declare_vtab(). For the first 63 columns (columns 0-62), 7381*a3141fd3SAndroid Build Coastguard Worker ** the corresponding bit is set within the colUsed mask if the column may be 7382*a3141fd3SAndroid Build Coastguard Worker ** required by SQLite. If the table has at least 64 columns and any column 7383*a3141fd3SAndroid Build Coastguard Worker ** to the right of the first 63 is required, then bit 63 of colUsed is also 7384*a3141fd3SAndroid Build Coastguard Worker ** set. In other words, column iCol may be required if the expression 7385*a3141fd3SAndroid Build Coastguard Worker ** (colUsed & ((sqlite3_uint64)1 << (iCol>=63 ? 63 : iCol))) evaluates to 7386*a3141fd3SAndroid Build Coastguard Worker ** non-zero. 7387*a3141fd3SAndroid Build Coastguard Worker ** 7388*a3141fd3SAndroid Build Coastguard Worker ** The [xBestIndex] method must fill aConstraintUsage[] with information 7389*a3141fd3SAndroid Build Coastguard Worker ** about what parameters to pass to xFilter. ^If argvIndex>0 then 7390*a3141fd3SAndroid Build Coastguard Worker ** the right-hand side of the corresponding aConstraint[] is evaluated 7391*a3141fd3SAndroid Build Coastguard Worker ** and becomes the argvIndex-th entry in argv. ^(If aConstraintUsage[].omit 7392*a3141fd3SAndroid Build Coastguard Worker ** is true, then the constraint is assumed to be fully handled by the 7393*a3141fd3SAndroid Build Coastguard Worker ** virtual table and might not be checked again by the byte code.)^ ^(The 7394*a3141fd3SAndroid Build Coastguard Worker ** aConstraintUsage[].omit flag is an optimization hint. When the omit flag 7395*a3141fd3SAndroid Build Coastguard Worker ** is left in its default setting of false, the constraint will always be 7396*a3141fd3SAndroid Build Coastguard Worker ** checked separately in byte code. If the omit flag is change to true, then 7397*a3141fd3SAndroid Build Coastguard Worker ** the constraint may or may not be checked in byte code. In other words, 7398*a3141fd3SAndroid Build Coastguard Worker ** when the omit flag is true there is no guarantee that the constraint will 7399*a3141fd3SAndroid Build Coastguard Worker ** not be checked again using byte code.)^ 7400*a3141fd3SAndroid Build Coastguard Worker ** 7401*a3141fd3SAndroid Build Coastguard Worker ** ^The idxNum and idxStr values are recorded and passed into the 7402*a3141fd3SAndroid Build Coastguard Worker ** [xFilter] method. 7403*a3141fd3SAndroid Build Coastguard Worker ** ^[sqlite3_free()] is used to free idxStr if and only if 7404*a3141fd3SAndroid Build Coastguard Worker ** needToFreeIdxStr is true. 7405*a3141fd3SAndroid Build Coastguard Worker ** 7406*a3141fd3SAndroid Build Coastguard Worker ** ^The orderByConsumed means that output from [xFilter]/[xNext] will occur in 7407*a3141fd3SAndroid Build Coastguard Worker ** the correct order to satisfy the ORDER BY clause so that no separate 7408*a3141fd3SAndroid Build Coastguard Worker ** sorting step is required. 7409*a3141fd3SAndroid Build Coastguard Worker ** 7410*a3141fd3SAndroid Build Coastguard Worker ** ^The estimatedCost value is an estimate of the cost of a particular 7411*a3141fd3SAndroid Build Coastguard Worker ** strategy. A cost of N indicates that the cost of the strategy is similar 7412*a3141fd3SAndroid Build Coastguard Worker ** to a linear scan of an SQLite table with N rows. A cost of log(N) 7413*a3141fd3SAndroid Build Coastguard Worker ** indicates that the expense of the operation is similar to that of a 7414*a3141fd3SAndroid Build Coastguard Worker ** binary search on a unique indexed field of an SQLite table with N rows. 7415*a3141fd3SAndroid Build Coastguard Worker ** 7416*a3141fd3SAndroid Build Coastguard Worker ** ^The estimatedRows value is an estimate of the number of rows that 7417*a3141fd3SAndroid Build Coastguard Worker ** will be returned by the strategy. 7418*a3141fd3SAndroid Build Coastguard Worker ** 7419*a3141fd3SAndroid Build Coastguard Worker ** The xBestIndex method may optionally populate the idxFlags field with a 7420*a3141fd3SAndroid Build Coastguard Worker ** mask of SQLITE_INDEX_SCAN_* flags. Currently there is only one such flag - 7421*a3141fd3SAndroid Build Coastguard Worker ** SQLITE_INDEX_SCAN_UNIQUE. If the xBestIndex method sets this flag, SQLite 7422*a3141fd3SAndroid Build Coastguard Worker ** assumes that the strategy may visit at most one row. 7423*a3141fd3SAndroid Build Coastguard Worker ** 7424*a3141fd3SAndroid Build Coastguard Worker ** Additionally, if xBestIndex sets the SQLITE_INDEX_SCAN_UNIQUE flag, then 7425*a3141fd3SAndroid Build Coastguard Worker ** SQLite also assumes that if a call to the xUpdate() method is made as 7426*a3141fd3SAndroid Build Coastguard Worker ** part of the same statement to delete or update a virtual table row and the 7427*a3141fd3SAndroid Build Coastguard Worker ** implementation returns SQLITE_CONSTRAINT, then there is no need to rollback 7428*a3141fd3SAndroid Build Coastguard Worker ** any database changes. In other words, if the xUpdate() returns 7429*a3141fd3SAndroid Build Coastguard Worker ** SQLITE_CONSTRAINT, the database contents must be exactly as they were 7430*a3141fd3SAndroid Build Coastguard Worker ** before xUpdate was called. By contrast, if SQLITE_INDEX_SCAN_UNIQUE is not 7431*a3141fd3SAndroid Build Coastguard Worker ** set and xUpdate returns SQLITE_CONSTRAINT, any database changes made by 7432*a3141fd3SAndroid Build Coastguard Worker ** the xUpdate method are automatically rolled back by SQLite. 7433*a3141fd3SAndroid Build Coastguard Worker ** 7434*a3141fd3SAndroid Build Coastguard Worker ** IMPORTANT: The estimatedRows field was added to the sqlite3_index_info 7435*a3141fd3SAndroid Build Coastguard Worker ** structure for SQLite [version 3.8.2] ([dateof:3.8.2]). 7436*a3141fd3SAndroid Build Coastguard Worker ** If a virtual table extension is 7437*a3141fd3SAndroid Build Coastguard Worker ** used with an SQLite version earlier than 3.8.2, the results of attempting 7438*a3141fd3SAndroid Build Coastguard Worker ** to read or write the estimatedRows field are undefined (but are likely 7439*a3141fd3SAndroid Build Coastguard Worker ** to include crashing the application). The estimatedRows field should 7440*a3141fd3SAndroid Build Coastguard Worker ** therefore only be used if [sqlite3_libversion_number()] returns a 7441*a3141fd3SAndroid Build Coastguard Worker ** value greater than or equal to 3008002. Similarly, the idxFlags field 7442*a3141fd3SAndroid Build Coastguard Worker ** was added for [version 3.9.0] ([dateof:3.9.0]). 7443*a3141fd3SAndroid Build Coastguard Worker ** It may therefore only be used if 7444*a3141fd3SAndroid Build Coastguard Worker ** sqlite3_libversion_number() returns a value greater than or equal to 7445*a3141fd3SAndroid Build Coastguard Worker ** 3009000. 7446*a3141fd3SAndroid Build Coastguard Worker */ 7447*a3141fd3SAndroid Build Coastguard Worker struct sqlite3_index_info { 7448*a3141fd3SAndroid Build Coastguard Worker /* Inputs */ 7449*a3141fd3SAndroid Build Coastguard Worker int nConstraint; /* Number of entries in aConstraint */ 7450*a3141fd3SAndroid Build Coastguard Worker struct sqlite3_index_constraint { 7451*a3141fd3SAndroid Build Coastguard Worker int iColumn; /* Column constrained. -1 for ROWID */ 7452*a3141fd3SAndroid Build Coastguard Worker unsigned char op; /* Constraint operator */ 7453*a3141fd3SAndroid Build Coastguard Worker unsigned char usable; /* True if this constraint is usable */ 7454*a3141fd3SAndroid Build Coastguard Worker int iTermOffset; /* Used internally - xBestIndex should ignore */ 7455*a3141fd3SAndroid Build Coastguard Worker } *aConstraint; /* Table of WHERE clause constraints */ 7456*a3141fd3SAndroid Build Coastguard Worker int nOrderBy; /* Number of terms in the ORDER BY clause */ 7457*a3141fd3SAndroid Build Coastguard Worker struct sqlite3_index_orderby { 7458*a3141fd3SAndroid Build Coastguard Worker int iColumn; /* Column number */ 7459*a3141fd3SAndroid Build Coastguard Worker unsigned char desc; /* True for DESC. False for ASC. */ 7460*a3141fd3SAndroid Build Coastguard Worker } *aOrderBy; /* The ORDER BY clause */ 7461*a3141fd3SAndroid Build Coastguard Worker /* Outputs */ 7462*a3141fd3SAndroid Build Coastguard Worker struct sqlite3_index_constraint_usage { 7463*a3141fd3SAndroid Build Coastguard Worker int argvIndex; /* if >0, constraint is part of argv to xFilter */ 7464*a3141fd3SAndroid Build Coastguard Worker unsigned char omit; /* Do not code a test for this constraint */ 7465*a3141fd3SAndroid Build Coastguard Worker } *aConstraintUsage; 7466*a3141fd3SAndroid Build Coastguard Worker int idxNum; /* Number used to identify the index */ 7467*a3141fd3SAndroid Build Coastguard Worker char *idxStr; /* String, possibly obtained from sqlite3_malloc */ 7468*a3141fd3SAndroid Build Coastguard Worker int needToFreeIdxStr; /* Free idxStr using sqlite3_free() if true */ 7469*a3141fd3SAndroid Build Coastguard Worker int orderByConsumed; /* True if output is already ordered */ 7470*a3141fd3SAndroid Build Coastguard Worker double estimatedCost; /* Estimated cost of using this index */ 7471*a3141fd3SAndroid Build Coastguard Worker /* Fields below are only available in SQLite 3.8.2 and later */ 7472*a3141fd3SAndroid Build Coastguard Worker sqlite3_int64 estimatedRows; /* Estimated number of rows returned */ 7473*a3141fd3SAndroid Build Coastguard Worker /* Fields below are only available in SQLite 3.9.0 and later */ 7474*a3141fd3SAndroid Build Coastguard Worker int idxFlags; /* Mask of SQLITE_INDEX_SCAN_* flags */ 7475*a3141fd3SAndroid Build Coastguard Worker /* Fields below are only available in SQLite 3.10.0 and later */ 7476*a3141fd3SAndroid Build Coastguard Worker sqlite3_uint64 colUsed; /* Input: Mask of columns used by statement */ 7477*a3141fd3SAndroid Build Coastguard Worker }; 7478*a3141fd3SAndroid Build Coastguard Worker 7479*a3141fd3SAndroid Build Coastguard Worker /* 7480*a3141fd3SAndroid Build Coastguard Worker ** CAPI3REF: Virtual Table Scan Flags 7481*a3141fd3SAndroid Build Coastguard Worker ** 7482*a3141fd3SAndroid Build Coastguard Worker ** Virtual table implementations are allowed to set the 7483*a3141fd3SAndroid Build Coastguard Worker ** [sqlite3_index_info].idxFlags field to some combination of 7484*a3141fd3SAndroid Build Coastguard Worker ** these bits. 7485*a3141fd3SAndroid Build Coastguard Worker */ 7486*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_INDEX_SCAN_UNIQUE 1 /* Scan visits at most 1 row */ 7487*a3141fd3SAndroid Build Coastguard Worker 7488*a3141fd3SAndroid Build Coastguard Worker /* 7489*a3141fd3SAndroid Build Coastguard Worker ** CAPI3REF: Virtual Table Constraint Operator Codes 7490*a3141fd3SAndroid Build Coastguard Worker ** 7491*a3141fd3SAndroid Build Coastguard Worker ** These macros define the allowed values for the 7492*a3141fd3SAndroid Build Coastguard Worker ** [sqlite3_index_info].aConstraint[].op field. Each value represents 7493*a3141fd3SAndroid Build Coastguard Worker ** an operator that is part of a constraint term in the WHERE clause of 7494*a3141fd3SAndroid Build Coastguard Worker ** a query that uses a [virtual table]. 7495*a3141fd3SAndroid Build Coastguard Worker ** 7496*a3141fd3SAndroid Build Coastguard Worker ** ^The left-hand operand of the operator is given by the corresponding 7497*a3141fd3SAndroid Build Coastguard Worker ** aConstraint[].iColumn field. ^An iColumn of -1 indicates the left-hand 7498*a3141fd3SAndroid Build Coastguard Worker ** operand is the rowid. 7499*a3141fd3SAndroid Build Coastguard Worker ** The SQLITE_INDEX_CONSTRAINT_LIMIT and SQLITE_INDEX_CONSTRAINT_OFFSET 7500*a3141fd3SAndroid Build Coastguard Worker ** operators have no left-hand operand, and so for those operators the 7501*a3141fd3SAndroid Build Coastguard Worker ** corresponding aConstraint[].iColumn is meaningless and should not be 7502*a3141fd3SAndroid Build Coastguard Worker ** used. 7503*a3141fd3SAndroid Build Coastguard Worker ** 7504*a3141fd3SAndroid Build Coastguard Worker ** All operator values from SQLITE_INDEX_CONSTRAINT_FUNCTION through 7505*a3141fd3SAndroid Build Coastguard Worker ** value 255 are reserved to represent functions that are overloaded 7506*a3141fd3SAndroid Build Coastguard Worker ** by the [xFindFunction|xFindFunction method] of the virtual table 7507*a3141fd3SAndroid Build Coastguard Worker ** implementation. 7508*a3141fd3SAndroid Build Coastguard Worker ** 7509*a3141fd3SAndroid Build Coastguard Worker ** The right-hand operands for each constraint might be accessible using 7510*a3141fd3SAndroid Build Coastguard Worker ** the [sqlite3_vtab_rhs_value()] interface. Usually the right-hand 7511*a3141fd3SAndroid Build Coastguard Worker ** operand is only available if it appears as a single constant literal 7512*a3141fd3SAndroid Build Coastguard Worker ** in the input SQL. If the right-hand operand is another column or an 7513*a3141fd3SAndroid Build Coastguard Worker ** expression (even a constant expression) or a parameter, then the 7514*a3141fd3SAndroid Build Coastguard Worker ** sqlite3_vtab_rhs_value() probably will not be able to extract it. 7515*a3141fd3SAndroid Build Coastguard Worker ** ^The SQLITE_INDEX_CONSTRAINT_ISNULL and 7516*a3141fd3SAndroid Build Coastguard Worker ** SQLITE_INDEX_CONSTRAINT_ISNOTNULL operators have no right-hand operand 7517*a3141fd3SAndroid Build Coastguard Worker ** and hence calls to sqlite3_vtab_rhs_value() for those operators will 7518*a3141fd3SAndroid Build Coastguard Worker ** always return SQLITE_NOTFOUND. 7519*a3141fd3SAndroid Build Coastguard Worker ** 7520*a3141fd3SAndroid Build Coastguard Worker ** The collating sequence to be used for comparison can be found using 7521*a3141fd3SAndroid Build Coastguard Worker ** the [sqlite3_vtab_collation()] interface. For most real-world virtual 7522*a3141fd3SAndroid Build Coastguard Worker ** tables, the collating sequence of constraints does not matter (for example 7523*a3141fd3SAndroid Build Coastguard Worker ** because the constraints are numeric) and so the sqlite3_vtab_collation() 7524*a3141fd3SAndroid Build Coastguard Worker ** interface is not commonly needed. 7525*a3141fd3SAndroid Build Coastguard Worker */ 7526*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_INDEX_CONSTRAINT_EQ 2 7527*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_INDEX_CONSTRAINT_GT 4 7528*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_INDEX_CONSTRAINT_LE 8 7529*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_INDEX_CONSTRAINT_LT 16 7530*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_INDEX_CONSTRAINT_GE 32 7531*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_INDEX_CONSTRAINT_MATCH 64 7532*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_INDEX_CONSTRAINT_LIKE 65 7533*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_INDEX_CONSTRAINT_GLOB 66 7534*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_INDEX_CONSTRAINT_REGEXP 67 7535*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_INDEX_CONSTRAINT_NE 68 7536*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_INDEX_CONSTRAINT_ISNOT 69 7537*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_INDEX_CONSTRAINT_ISNOTNULL 70 7538*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_INDEX_CONSTRAINT_ISNULL 71 7539*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_INDEX_CONSTRAINT_IS 72 7540*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_INDEX_CONSTRAINT_LIMIT 73 7541*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_INDEX_CONSTRAINT_OFFSET 74 7542*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_INDEX_CONSTRAINT_FUNCTION 150 7543*a3141fd3SAndroid Build Coastguard Worker 7544*a3141fd3SAndroid Build Coastguard Worker /* 7545*a3141fd3SAndroid Build Coastguard Worker ** CAPI3REF: Register A Virtual Table Implementation 7546*a3141fd3SAndroid Build Coastguard Worker ** METHOD: sqlite3 7547*a3141fd3SAndroid Build Coastguard Worker ** 7548*a3141fd3SAndroid Build Coastguard Worker ** ^These routines are used to register a new [virtual table module] name. 7549*a3141fd3SAndroid Build Coastguard Worker ** ^Module names must be registered before 7550*a3141fd3SAndroid Build Coastguard Worker ** creating a new [virtual table] using the module and before using a 7551*a3141fd3SAndroid Build Coastguard Worker ** preexisting [virtual table] for the module. 7552*a3141fd3SAndroid Build Coastguard Worker ** 7553*a3141fd3SAndroid Build Coastguard Worker ** ^The module name is registered on the [database connection] specified 7554*a3141fd3SAndroid Build Coastguard Worker ** by the first parameter. ^The name of the module is given by the 7555*a3141fd3SAndroid Build Coastguard Worker ** second parameter. ^The third parameter is a pointer to 7556*a3141fd3SAndroid Build Coastguard Worker ** the implementation of the [virtual table module]. ^The fourth 7557*a3141fd3SAndroid Build Coastguard Worker ** parameter is an arbitrary client data pointer that is passed through 7558*a3141fd3SAndroid Build Coastguard Worker ** into the [xCreate] and [xConnect] methods of the virtual table module 7559*a3141fd3SAndroid Build Coastguard Worker ** when a new virtual table is be being created or reinitialized. 7560*a3141fd3SAndroid Build Coastguard Worker ** 7561*a3141fd3SAndroid Build Coastguard Worker ** ^The sqlite3_create_module_v2() interface has a fifth parameter which 7562*a3141fd3SAndroid Build Coastguard Worker ** is a pointer to a destructor for the pClientData. ^SQLite will 7563*a3141fd3SAndroid Build Coastguard Worker ** invoke the destructor function (if it is not NULL) when SQLite 7564*a3141fd3SAndroid Build Coastguard Worker ** no longer needs the pClientData pointer. ^The destructor will also 7565*a3141fd3SAndroid Build Coastguard Worker ** be invoked if the call to sqlite3_create_module_v2() fails. 7566*a3141fd3SAndroid Build Coastguard Worker ** ^The sqlite3_create_module() 7567*a3141fd3SAndroid Build Coastguard Worker ** interface is equivalent to sqlite3_create_module_v2() with a NULL 7568*a3141fd3SAndroid Build Coastguard Worker ** destructor. 7569*a3141fd3SAndroid Build Coastguard Worker ** 7570*a3141fd3SAndroid Build Coastguard Worker ** ^If the third parameter (the pointer to the sqlite3_module object) is 7571*a3141fd3SAndroid Build Coastguard Worker ** NULL then no new module is created and any existing modules with the 7572*a3141fd3SAndroid Build Coastguard Worker ** same name are dropped. 7573*a3141fd3SAndroid Build Coastguard Worker ** 7574*a3141fd3SAndroid Build Coastguard Worker ** See also: [sqlite3_drop_modules()] 7575*a3141fd3SAndroid Build Coastguard Worker */ 7576*a3141fd3SAndroid Build Coastguard Worker SQLITE_API int sqlite3_create_module( 7577*a3141fd3SAndroid Build Coastguard Worker sqlite3 *db, /* SQLite connection to register module with */ 7578*a3141fd3SAndroid Build Coastguard Worker const char *zName, /* Name of the module */ 7579*a3141fd3SAndroid Build Coastguard Worker const sqlite3_module *p, /* Methods for the module */ 7580*a3141fd3SAndroid Build Coastguard Worker void *pClientData /* Client data for xCreate/xConnect */ 7581*a3141fd3SAndroid Build Coastguard Worker ); 7582*a3141fd3SAndroid Build Coastguard Worker SQLITE_API int sqlite3_create_module_v2( 7583*a3141fd3SAndroid Build Coastguard Worker sqlite3 *db, /* SQLite connection to register module with */ 7584*a3141fd3SAndroid Build Coastguard Worker const char *zName, /* Name of the module */ 7585*a3141fd3SAndroid Build Coastguard Worker const sqlite3_module *p, /* Methods for the module */ 7586*a3141fd3SAndroid Build Coastguard Worker void *pClientData, /* Client data for xCreate/xConnect */ 7587*a3141fd3SAndroid Build Coastguard Worker void(*xDestroy)(void*) /* Module destructor function */ 7588*a3141fd3SAndroid Build Coastguard Worker ); 7589*a3141fd3SAndroid Build Coastguard Worker 7590*a3141fd3SAndroid Build Coastguard Worker /* 7591*a3141fd3SAndroid Build Coastguard Worker ** CAPI3REF: Remove Unnecessary Virtual Table Implementations 7592*a3141fd3SAndroid Build Coastguard Worker ** METHOD: sqlite3 7593*a3141fd3SAndroid Build Coastguard Worker ** 7594*a3141fd3SAndroid Build Coastguard Worker ** ^The sqlite3_drop_modules(D,L) interface removes all virtual 7595*a3141fd3SAndroid Build Coastguard Worker ** table modules from database connection D except those named on list L. 7596*a3141fd3SAndroid Build Coastguard Worker ** The L parameter must be either NULL or a pointer to an array of pointers 7597*a3141fd3SAndroid Build Coastguard Worker ** to strings where the array is terminated by a single NULL pointer. 7598*a3141fd3SAndroid Build Coastguard Worker ** ^If the L parameter is NULL, then all virtual table modules are removed. 7599*a3141fd3SAndroid Build Coastguard Worker ** 7600*a3141fd3SAndroid Build Coastguard Worker ** See also: [sqlite3_create_module()] 7601*a3141fd3SAndroid Build Coastguard Worker */ 7602*a3141fd3SAndroid Build Coastguard Worker SQLITE_API int sqlite3_drop_modules( 7603*a3141fd3SAndroid Build Coastguard Worker sqlite3 *db, /* Remove modules from this connection */ 7604*a3141fd3SAndroid Build Coastguard Worker const char **azKeep /* Except, do not remove the ones named here */ 7605*a3141fd3SAndroid Build Coastguard Worker ); 7606*a3141fd3SAndroid Build Coastguard Worker 7607*a3141fd3SAndroid Build Coastguard Worker /* 7608*a3141fd3SAndroid Build Coastguard Worker ** CAPI3REF: Virtual Table Instance Object 7609*a3141fd3SAndroid Build Coastguard Worker ** KEYWORDS: sqlite3_vtab 7610*a3141fd3SAndroid Build Coastguard Worker ** 7611*a3141fd3SAndroid Build Coastguard Worker ** Every [virtual table module] implementation uses a subclass 7612*a3141fd3SAndroid Build Coastguard Worker ** of this object to describe a particular instance 7613*a3141fd3SAndroid Build Coastguard Worker ** of the [virtual table]. Each subclass will 7614*a3141fd3SAndroid Build Coastguard Worker ** be tailored to the specific needs of the module implementation. 7615*a3141fd3SAndroid Build Coastguard Worker ** The purpose of this superclass is to define certain fields that are 7616*a3141fd3SAndroid Build Coastguard Worker ** common to all module implementations. 7617*a3141fd3SAndroid Build Coastguard Worker ** 7618*a3141fd3SAndroid Build Coastguard Worker ** ^Virtual tables methods can set an error message by assigning a 7619*a3141fd3SAndroid Build Coastguard Worker ** string obtained from [sqlite3_mprintf()] to zErrMsg. The method should 7620*a3141fd3SAndroid Build Coastguard Worker ** take care that any prior string is freed by a call to [sqlite3_free()] 7621*a3141fd3SAndroid Build Coastguard Worker ** prior to assigning a new string to zErrMsg. ^After the error message 7622*a3141fd3SAndroid Build Coastguard Worker ** is delivered up to the client application, the string will be automatically 7623*a3141fd3SAndroid Build Coastguard Worker ** freed by sqlite3_free() and the zErrMsg field will be zeroed. 7624*a3141fd3SAndroid Build Coastguard Worker */ 7625*a3141fd3SAndroid Build Coastguard Worker struct sqlite3_vtab { 7626*a3141fd3SAndroid Build Coastguard Worker const sqlite3_module *pModule; /* The module for this virtual table */ 7627*a3141fd3SAndroid Build Coastguard Worker int nRef; /* Number of open cursors */ 7628*a3141fd3SAndroid Build Coastguard Worker char *zErrMsg; /* Error message from sqlite3_mprintf() */ 7629*a3141fd3SAndroid Build Coastguard Worker /* Virtual table implementations will typically add additional fields */ 7630*a3141fd3SAndroid Build Coastguard Worker }; 7631*a3141fd3SAndroid Build Coastguard Worker 7632*a3141fd3SAndroid Build Coastguard Worker /* 7633*a3141fd3SAndroid Build Coastguard Worker ** CAPI3REF: Virtual Table Cursor Object 7634*a3141fd3SAndroid Build Coastguard Worker ** KEYWORDS: sqlite3_vtab_cursor {virtual table cursor} 7635*a3141fd3SAndroid Build Coastguard Worker ** 7636*a3141fd3SAndroid Build Coastguard Worker ** Every [virtual table module] implementation uses a subclass of the 7637*a3141fd3SAndroid Build Coastguard Worker ** following structure to describe cursors that point into the 7638*a3141fd3SAndroid Build Coastguard Worker ** [virtual table] and are used 7639*a3141fd3SAndroid Build Coastguard Worker ** to loop through the virtual table. Cursors are created using the 7640*a3141fd3SAndroid Build Coastguard Worker ** [sqlite3_module.xOpen | xOpen] method of the module and are destroyed 7641*a3141fd3SAndroid Build Coastguard Worker ** by the [sqlite3_module.xClose | xClose] method. Cursors are used 7642*a3141fd3SAndroid Build Coastguard Worker ** by the [xFilter], [xNext], [xEof], [xColumn], and [xRowid] methods 7643*a3141fd3SAndroid Build Coastguard Worker ** of the module. Each module implementation will define 7644*a3141fd3SAndroid Build Coastguard Worker ** the content of a cursor structure to suit its own needs. 7645*a3141fd3SAndroid Build Coastguard Worker ** 7646*a3141fd3SAndroid Build Coastguard Worker ** This superclass exists in order to define fields of the cursor that 7647*a3141fd3SAndroid Build Coastguard Worker ** are common to all implementations. 7648*a3141fd3SAndroid Build Coastguard Worker */ 7649*a3141fd3SAndroid Build Coastguard Worker struct sqlite3_vtab_cursor { 7650*a3141fd3SAndroid Build Coastguard Worker sqlite3_vtab *pVtab; /* Virtual table of this cursor */ 7651*a3141fd3SAndroid Build Coastguard Worker /* Virtual table implementations will typically add additional fields */ 7652*a3141fd3SAndroid Build Coastguard Worker }; 7653*a3141fd3SAndroid Build Coastguard Worker 7654*a3141fd3SAndroid Build Coastguard Worker /* 7655*a3141fd3SAndroid Build Coastguard Worker ** CAPI3REF: Declare The Schema Of A Virtual Table 7656*a3141fd3SAndroid Build Coastguard Worker ** 7657*a3141fd3SAndroid Build Coastguard Worker ** ^The [xCreate] and [xConnect] methods of a 7658*a3141fd3SAndroid Build Coastguard Worker ** [virtual table module] call this interface 7659*a3141fd3SAndroid Build Coastguard Worker ** to declare the format (the names and datatypes of the columns) of 7660*a3141fd3SAndroid Build Coastguard Worker ** the virtual tables they implement. 7661*a3141fd3SAndroid Build Coastguard Worker */ 7662*a3141fd3SAndroid Build Coastguard Worker SQLITE_API int sqlite3_declare_vtab(sqlite3*, const char *zSQL); 7663*a3141fd3SAndroid Build Coastguard Worker 7664*a3141fd3SAndroid Build Coastguard Worker /* 7665*a3141fd3SAndroid Build Coastguard Worker ** CAPI3REF: Overload A Function For A Virtual Table 7666*a3141fd3SAndroid Build Coastguard Worker ** METHOD: sqlite3 7667*a3141fd3SAndroid Build Coastguard Worker ** 7668*a3141fd3SAndroid Build Coastguard Worker ** ^(Virtual tables can provide alternative implementations of functions 7669*a3141fd3SAndroid Build Coastguard Worker ** using the [xFindFunction] method of the [virtual table module]. 7670*a3141fd3SAndroid Build Coastguard Worker ** But global versions of those functions 7671*a3141fd3SAndroid Build Coastguard Worker ** must exist in order to be overloaded.)^ 7672*a3141fd3SAndroid Build Coastguard Worker ** 7673*a3141fd3SAndroid Build Coastguard Worker ** ^(This API makes sure a global version of a function with a particular 7674*a3141fd3SAndroid Build Coastguard Worker ** name and number of parameters exists. If no such function exists 7675*a3141fd3SAndroid Build Coastguard Worker ** before this API is called, a new function is created.)^ ^The implementation 7676*a3141fd3SAndroid Build Coastguard Worker ** of the new function always causes an exception to be thrown. So 7677*a3141fd3SAndroid Build Coastguard Worker ** the new function is not good for anything by itself. Its only 7678*a3141fd3SAndroid Build Coastguard Worker ** purpose is to be a placeholder function that can be overloaded 7679*a3141fd3SAndroid Build Coastguard Worker ** by a [virtual table]. 7680*a3141fd3SAndroid Build Coastguard Worker */ 7681*a3141fd3SAndroid Build Coastguard Worker SQLITE_API int sqlite3_overload_function(sqlite3*, const char *zFuncName, int nArg); 7682*a3141fd3SAndroid Build Coastguard Worker 7683*a3141fd3SAndroid Build Coastguard Worker /* 7684*a3141fd3SAndroid Build Coastguard Worker ** CAPI3REF: A Handle To An Open BLOB 7685*a3141fd3SAndroid Build Coastguard Worker ** KEYWORDS: {BLOB handle} {BLOB handles} 7686*a3141fd3SAndroid Build Coastguard Worker ** 7687*a3141fd3SAndroid Build Coastguard Worker ** An instance of this object represents an open BLOB on which 7688*a3141fd3SAndroid Build Coastguard Worker ** [sqlite3_blob_open | incremental BLOB I/O] can be performed. 7689*a3141fd3SAndroid Build Coastguard Worker ** ^Objects of this type are created by [sqlite3_blob_open()] 7690*a3141fd3SAndroid Build Coastguard Worker ** and destroyed by [sqlite3_blob_close()]. 7691*a3141fd3SAndroid Build Coastguard Worker ** ^The [sqlite3_blob_read()] and [sqlite3_blob_write()] interfaces 7692*a3141fd3SAndroid Build Coastguard Worker ** can be used to read or write small subsections of the BLOB. 7693*a3141fd3SAndroid Build Coastguard Worker ** ^The [sqlite3_blob_bytes()] interface returns the size of the BLOB in bytes. 7694*a3141fd3SAndroid Build Coastguard Worker */ 7695*a3141fd3SAndroid Build Coastguard Worker typedef struct sqlite3_blob sqlite3_blob; 7696*a3141fd3SAndroid Build Coastguard Worker 7697*a3141fd3SAndroid Build Coastguard Worker /* 7698*a3141fd3SAndroid Build Coastguard Worker ** CAPI3REF: Open A BLOB For Incremental I/O 7699*a3141fd3SAndroid Build Coastguard Worker ** METHOD: sqlite3 7700*a3141fd3SAndroid Build Coastguard Worker ** CONSTRUCTOR: sqlite3_blob 7701*a3141fd3SAndroid Build Coastguard Worker ** 7702*a3141fd3SAndroid Build Coastguard Worker ** ^(This interfaces opens a [BLOB handle | handle] to the BLOB located 7703*a3141fd3SAndroid Build Coastguard Worker ** in row iRow, column zColumn, table zTable in database zDb; 7704*a3141fd3SAndroid Build Coastguard Worker ** in other words, the same BLOB that would be selected by: 7705*a3141fd3SAndroid Build Coastguard Worker ** 7706*a3141fd3SAndroid Build Coastguard Worker ** <pre> 7707*a3141fd3SAndroid Build Coastguard Worker ** SELECT zColumn FROM zDb.zTable WHERE [rowid] = iRow; 7708*a3141fd3SAndroid Build Coastguard Worker ** </pre>)^ 7709*a3141fd3SAndroid Build Coastguard Worker ** 7710*a3141fd3SAndroid Build Coastguard Worker ** ^(Parameter zDb is not the filename that contains the database, but 7711*a3141fd3SAndroid Build Coastguard Worker ** rather the symbolic name of the database. For attached databases, this is 7712*a3141fd3SAndroid Build Coastguard Worker ** the name that appears after the AS keyword in the [ATTACH] statement. 7713*a3141fd3SAndroid Build Coastguard Worker ** For the main database file, the database name is "main". For TEMP 7714*a3141fd3SAndroid Build Coastguard Worker ** tables, the database name is "temp".)^ 7715*a3141fd3SAndroid Build Coastguard Worker ** 7716*a3141fd3SAndroid Build Coastguard Worker ** ^If the flags parameter is non-zero, then the BLOB is opened for read 7717*a3141fd3SAndroid Build Coastguard Worker ** and write access. ^If the flags parameter is zero, the BLOB is opened for 7718*a3141fd3SAndroid Build Coastguard Worker ** read-only access. 7719*a3141fd3SAndroid Build Coastguard Worker ** 7720*a3141fd3SAndroid Build Coastguard Worker ** ^(On success, [SQLITE_OK] is returned and the new [BLOB handle] is stored 7721*a3141fd3SAndroid Build Coastguard Worker ** in *ppBlob. Otherwise an [error code] is returned and, unless the error 7722*a3141fd3SAndroid Build Coastguard Worker ** code is SQLITE_MISUSE, *ppBlob is set to NULL.)^ ^This means that, provided 7723*a3141fd3SAndroid Build Coastguard Worker ** the API is not misused, it is always safe to call [sqlite3_blob_close()] 7724*a3141fd3SAndroid Build Coastguard Worker ** on *ppBlob after this function it returns. 7725*a3141fd3SAndroid Build Coastguard Worker ** 7726*a3141fd3SAndroid Build Coastguard Worker ** This function fails with SQLITE_ERROR if any of the following are true: 7727*a3141fd3SAndroid Build Coastguard Worker ** <ul> 7728*a3141fd3SAndroid Build Coastguard Worker ** <li> ^(Database zDb does not exist)^, 7729*a3141fd3SAndroid Build Coastguard Worker ** <li> ^(Table zTable does not exist within database zDb)^, 7730*a3141fd3SAndroid Build Coastguard Worker ** <li> ^(Table zTable is a WITHOUT ROWID table)^, 7731*a3141fd3SAndroid Build Coastguard Worker ** <li> ^(Column zColumn does not exist)^, 7732*a3141fd3SAndroid Build Coastguard Worker ** <li> ^(Row iRow is not present in the table)^, 7733*a3141fd3SAndroid Build Coastguard Worker ** <li> ^(The specified column of row iRow contains a value that is not 7734*a3141fd3SAndroid Build Coastguard Worker ** a TEXT or BLOB value)^, 7735*a3141fd3SAndroid Build Coastguard Worker ** <li> ^(Column zColumn is part of an index, PRIMARY KEY or UNIQUE 7736*a3141fd3SAndroid Build Coastguard Worker ** constraint and the blob is being opened for read/write access)^, 7737*a3141fd3SAndroid Build Coastguard Worker ** <li> ^([foreign key constraints | Foreign key constraints] are enabled, 7738*a3141fd3SAndroid Build Coastguard Worker ** column zColumn is part of a [child key] definition and the blob is 7739*a3141fd3SAndroid Build Coastguard Worker ** being opened for read/write access)^. 7740*a3141fd3SAndroid Build Coastguard Worker ** </ul> 7741*a3141fd3SAndroid Build Coastguard Worker ** 7742*a3141fd3SAndroid Build Coastguard Worker ** ^Unless it returns SQLITE_MISUSE, this function sets the 7743*a3141fd3SAndroid Build Coastguard Worker ** [database connection] error code and message accessible via 7744*a3141fd3SAndroid Build Coastguard Worker ** [sqlite3_errcode()] and [sqlite3_errmsg()] and related functions. 7745*a3141fd3SAndroid Build Coastguard Worker ** 7746*a3141fd3SAndroid Build Coastguard Worker ** A BLOB referenced by sqlite3_blob_open() may be read using the 7747*a3141fd3SAndroid Build Coastguard Worker ** [sqlite3_blob_read()] interface and modified by using 7748*a3141fd3SAndroid Build Coastguard Worker ** [sqlite3_blob_write()]. The [BLOB handle] can be moved to a 7749*a3141fd3SAndroid Build Coastguard Worker ** different row of the same table using the [sqlite3_blob_reopen()] 7750*a3141fd3SAndroid Build Coastguard Worker ** interface. However, the column, table, or database of a [BLOB handle] 7751*a3141fd3SAndroid Build Coastguard Worker ** cannot be changed after the [BLOB handle] is opened. 7752*a3141fd3SAndroid Build Coastguard Worker ** 7753*a3141fd3SAndroid Build Coastguard Worker ** ^(If the row that a BLOB handle points to is modified by an 7754*a3141fd3SAndroid Build Coastguard Worker ** [UPDATE], [DELETE], or by [ON CONFLICT] side-effects 7755*a3141fd3SAndroid Build Coastguard Worker ** then the BLOB handle is marked as "expired". 7756*a3141fd3SAndroid Build Coastguard Worker ** This is true if any column of the row is changed, even a column 7757*a3141fd3SAndroid Build Coastguard Worker ** other than the one the BLOB handle is open on.)^ 7758*a3141fd3SAndroid Build Coastguard Worker ** ^Calls to [sqlite3_blob_read()] and [sqlite3_blob_write()] for 7759*a3141fd3SAndroid Build Coastguard Worker ** an expired BLOB handle fail with a return code of [SQLITE_ABORT]. 7760*a3141fd3SAndroid Build Coastguard Worker ** ^(Changes written into a BLOB prior to the BLOB expiring are not 7761*a3141fd3SAndroid Build Coastguard Worker ** rolled back by the expiration of the BLOB. Such changes will eventually 7762*a3141fd3SAndroid Build Coastguard Worker ** commit if the transaction continues to completion.)^ 7763*a3141fd3SAndroid Build Coastguard Worker ** 7764*a3141fd3SAndroid Build Coastguard Worker ** ^Use the [sqlite3_blob_bytes()] interface to determine the size of 7765*a3141fd3SAndroid Build Coastguard Worker ** the opened blob. ^The size of a blob may not be changed by this 7766*a3141fd3SAndroid Build Coastguard Worker ** interface. Use the [UPDATE] SQL command to change the size of a 7767*a3141fd3SAndroid Build Coastguard Worker ** blob. 7768*a3141fd3SAndroid Build Coastguard Worker ** 7769*a3141fd3SAndroid Build Coastguard Worker ** ^The [sqlite3_bind_zeroblob()] and [sqlite3_result_zeroblob()] interfaces 7770*a3141fd3SAndroid Build Coastguard Worker ** and the built-in [zeroblob] SQL function may be used to create a 7771*a3141fd3SAndroid Build Coastguard Worker ** zero-filled blob to read or write using the incremental-blob interface. 7772*a3141fd3SAndroid Build Coastguard Worker ** 7773*a3141fd3SAndroid Build Coastguard Worker ** To avoid a resource leak, every open [BLOB handle] should eventually 7774*a3141fd3SAndroid Build Coastguard Worker ** be released by a call to [sqlite3_blob_close()]. 7775*a3141fd3SAndroid Build Coastguard Worker ** 7776*a3141fd3SAndroid Build Coastguard Worker ** See also: [sqlite3_blob_close()], 7777*a3141fd3SAndroid Build Coastguard Worker ** [sqlite3_blob_reopen()], [sqlite3_blob_read()], 7778*a3141fd3SAndroid Build Coastguard Worker ** [sqlite3_blob_bytes()], [sqlite3_blob_write()]. 7779*a3141fd3SAndroid Build Coastguard Worker */ 7780*a3141fd3SAndroid Build Coastguard Worker SQLITE_API int sqlite3_blob_open( 7781*a3141fd3SAndroid Build Coastguard Worker sqlite3*, 7782*a3141fd3SAndroid Build Coastguard Worker const char *zDb, 7783*a3141fd3SAndroid Build Coastguard Worker const char *zTable, 7784*a3141fd3SAndroid Build Coastguard Worker const char *zColumn, 7785*a3141fd3SAndroid Build Coastguard Worker sqlite3_int64 iRow, 7786*a3141fd3SAndroid Build Coastguard Worker int flags, 7787*a3141fd3SAndroid Build Coastguard Worker sqlite3_blob **ppBlob 7788*a3141fd3SAndroid Build Coastguard Worker ); 7789*a3141fd3SAndroid Build Coastguard Worker 7790*a3141fd3SAndroid Build Coastguard Worker /* 7791*a3141fd3SAndroid Build Coastguard Worker ** CAPI3REF: Move a BLOB Handle to a New Row 7792*a3141fd3SAndroid Build Coastguard Worker ** METHOD: sqlite3_blob 7793*a3141fd3SAndroid Build Coastguard Worker ** 7794*a3141fd3SAndroid Build Coastguard Worker ** ^This function is used to move an existing [BLOB handle] so that it points 7795*a3141fd3SAndroid Build Coastguard Worker ** to a different row of the same database table. ^The new row is identified 7796*a3141fd3SAndroid Build Coastguard Worker ** by the rowid value passed as the second argument. Only the row can be 7797*a3141fd3SAndroid Build Coastguard Worker ** changed. ^The database, table and column on which the blob handle is open 7798*a3141fd3SAndroid Build Coastguard Worker ** remain the same. Moving an existing [BLOB handle] to a new row is 7799*a3141fd3SAndroid Build Coastguard Worker ** faster than closing the existing handle and opening a new one. 7800*a3141fd3SAndroid Build Coastguard Worker ** 7801*a3141fd3SAndroid Build Coastguard Worker ** ^(The new row must meet the same criteria as for [sqlite3_blob_open()] - 7802*a3141fd3SAndroid Build Coastguard Worker ** it must exist and there must be either a blob or text value stored in 7803*a3141fd3SAndroid Build Coastguard Worker ** the nominated column.)^ ^If the new row is not present in the table, or if 7804*a3141fd3SAndroid Build Coastguard Worker ** it does not contain a blob or text value, or if another error occurs, an 7805*a3141fd3SAndroid Build Coastguard Worker ** SQLite error code is returned and the blob handle is considered aborted. 7806*a3141fd3SAndroid Build Coastguard Worker ** ^All subsequent calls to [sqlite3_blob_read()], [sqlite3_blob_write()] or 7807*a3141fd3SAndroid Build Coastguard Worker ** [sqlite3_blob_reopen()] on an aborted blob handle immediately return 7808*a3141fd3SAndroid Build Coastguard Worker ** SQLITE_ABORT. ^Calling [sqlite3_blob_bytes()] on an aborted blob handle 7809*a3141fd3SAndroid Build Coastguard Worker ** always returns zero. 7810*a3141fd3SAndroid Build Coastguard Worker ** 7811*a3141fd3SAndroid Build Coastguard Worker ** ^This function sets the database handle error code and message. 7812*a3141fd3SAndroid Build Coastguard Worker */ 7813*a3141fd3SAndroid Build Coastguard Worker SQLITE_API int sqlite3_blob_reopen(sqlite3_blob *, sqlite3_int64); 7814*a3141fd3SAndroid Build Coastguard Worker 7815*a3141fd3SAndroid Build Coastguard Worker /* 7816*a3141fd3SAndroid Build Coastguard Worker ** CAPI3REF: Close A BLOB Handle 7817*a3141fd3SAndroid Build Coastguard Worker ** DESTRUCTOR: sqlite3_blob 7818*a3141fd3SAndroid Build Coastguard Worker ** 7819*a3141fd3SAndroid Build Coastguard Worker ** ^This function closes an open [BLOB handle]. ^(The BLOB handle is closed 7820*a3141fd3SAndroid Build Coastguard Worker ** unconditionally. Even if this routine returns an error code, the 7821*a3141fd3SAndroid Build Coastguard Worker ** handle is still closed.)^ 7822*a3141fd3SAndroid Build Coastguard Worker ** 7823*a3141fd3SAndroid Build Coastguard Worker ** ^If the blob handle being closed was opened for read-write access, and if 7824*a3141fd3SAndroid Build Coastguard Worker ** the database is in auto-commit mode and there are no other open read-write 7825*a3141fd3SAndroid Build Coastguard Worker ** blob handles or active write statements, the current transaction is 7826*a3141fd3SAndroid Build Coastguard Worker ** committed. ^If an error occurs while committing the transaction, an error 7827*a3141fd3SAndroid Build Coastguard Worker ** code is returned and the transaction rolled back. 7828*a3141fd3SAndroid Build Coastguard Worker ** 7829*a3141fd3SAndroid Build Coastguard Worker ** Calling this function with an argument that is not a NULL pointer or an 7830*a3141fd3SAndroid Build Coastguard Worker ** open blob handle results in undefined behavior. ^Calling this routine 7831*a3141fd3SAndroid Build Coastguard Worker ** with a null pointer (such as would be returned by a failed call to 7832*a3141fd3SAndroid Build Coastguard Worker ** [sqlite3_blob_open()]) is a harmless no-op. ^Otherwise, if this function 7833*a3141fd3SAndroid Build Coastguard Worker ** is passed a valid open blob handle, the values returned by the 7834*a3141fd3SAndroid Build Coastguard Worker ** sqlite3_errcode() and sqlite3_errmsg() functions are set before returning. 7835*a3141fd3SAndroid Build Coastguard Worker */ 7836*a3141fd3SAndroid Build Coastguard Worker SQLITE_API int sqlite3_blob_close(sqlite3_blob *); 7837*a3141fd3SAndroid Build Coastguard Worker 7838*a3141fd3SAndroid Build Coastguard Worker /* 7839*a3141fd3SAndroid Build Coastguard Worker ** CAPI3REF: Return The Size Of An Open BLOB 7840*a3141fd3SAndroid Build Coastguard Worker ** METHOD: sqlite3_blob 7841*a3141fd3SAndroid Build Coastguard Worker ** 7842*a3141fd3SAndroid Build Coastguard Worker ** ^Returns the size in bytes of the BLOB accessible via the 7843*a3141fd3SAndroid Build Coastguard Worker ** successfully opened [BLOB handle] in its only argument. ^The 7844*a3141fd3SAndroid Build Coastguard Worker ** incremental blob I/O routines can only read or overwriting existing 7845*a3141fd3SAndroid Build Coastguard Worker ** blob content; they cannot change the size of a blob. 7846*a3141fd3SAndroid Build Coastguard Worker ** 7847*a3141fd3SAndroid Build Coastguard Worker ** This routine only works on a [BLOB handle] which has been created 7848*a3141fd3SAndroid Build Coastguard Worker ** by a prior successful call to [sqlite3_blob_open()] and which has not 7849*a3141fd3SAndroid Build Coastguard Worker ** been closed by [sqlite3_blob_close()]. Passing any other pointer in 7850*a3141fd3SAndroid Build Coastguard Worker ** to this routine results in undefined and probably undesirable behavior. 7851*a3141fd3SAndroid Build Coastguard Worker */ 7852*a3141fd3SAndroid Build Coastguard Worker SQLITE_API int sqlite3_blob_bytes(sqlite3_blob *); 7853*a3141fd3SAndroid Build Coastguard Worker 7854*a3141fd3SAndroid Build Coastguard Worker /* 7855*a3141fd3SAndroid Build Coastguard Worker ** CAPI3REF: Read Data From A BLOB Incrementally 7856*a3141fd3SAndroid Build Coastguard Worker ** METHOD: sqlite3_blob 7857*a3141fd3SAndroid Build Coastguard Worker ** 7858*a3141fd3SAndroid Build Coastguard Worker ** ^(This function is used to read data from an open [BLOB handle] into a 7859*a3141fd3SAndroid Build Coastguard Worker ** caller-supplied buffer. N bytes of data are copied into buffer Z 7860*a3141fd3SAndroid Build Coastguard Worker ** from the open BLOB, starting at offset iOffset.)^ 7861*a3141fd3SAndroid Build Coastguard Worker ** 7862*a3141fd3SAndroid Build Coastguard Worker ** ^If offset iOffset is less than N bytes from the end of the BLOB, 7863*a3141fd3SAndroid Build Coastguard Worker ** [SQLITE_ERROR] is returned and no data is read. ^If N or iOffset is 7864*a3141fd3SAndroid Build Coastguard Worker ** less than zero, [SQLITE_ERROR] is returned and no data is read. 7865*a3141fd3SAndroid Build Coastguard Worker ** ^The size of the blob (and hence the maximum value of N+iOffset) 7866*a3141fd3SAndroid Build Coastguard Worker ** can be determined using the [sqlite3_blob_bytes()] interface. 7867*a3141fd3SAndroid Build Coastguard Worker ** 7868*a3141fd3SAndroid Build Coastguard Worker ** ^An attempt to read from an expired [BLOB handle] fails with an 7869*a3141fd3SAndroid Build Coastguard Worker ** error code of [SQLITE_ABORT]. 7870*a3141fd3SAndroid Build Coastguard Worker ** 7871*a3141fd3SAndroid Build Coastguard Worker ** ^(On success, sqlite3_blob_read() returns SQLITE_OK. 7872*a3141fd3SAndroid Build Coastguard Worker ** Otherwise, an [error code] or an [extended error code] is returned.)^ 7873*a3141fd3SAndroid Build Coastguard Worker ** 7874*a3141fd3SAndroid Build Coastguard Worker ** This routine only works on a [BLOB handle] which has been created 7875*a3141fd3SAndroid Build Coastguard Worker ** by a prior successful call to [sqlite3_blob_open()] and which has not 7876*a3141fd3SAndroid Build Coastguard Worker ** been closed by [sqlite3_blob_close()]. Passing any other pointer in 7877*a3141fd3SAndroid Build Coastguard Worker ** to this routine results in undefined and probably undesirable behavior. 7878*a3141fd3SAndroid Build Coastguard Worker ** 7879*a3141fd3SAndroid Build Coastguard Worker ** See also: [sqlite3_blob_write()]. 7880*a3141fd3SAndroid Build Coastguard Worker */ 7881*a3141fd3SAndroid Build Coastguard Worker SQLITE_API int sqlite3_blob_read(sqlite3_blob *, void *Z, int N, int iOffset); 7882*a3141fd3SAndroid Build Coastguard Worker 7883*a3141fd3SAndroid Build Coastguard Worker /* 7884*a3141fd3SAndroid Build Coastguard Worker ** CAPI3REF: Write Data Into A BLOB Incrementally 7885*a3141fd3SAndroid Build Coastguard Worker ** METHOD: sqlite3_blob 7886*a3141fd3SAndroid Build Coastguard Worker ** 7887*a3141fd3SAndroid Build Coastguard Worker ** ^(This function is used to write data into an open [BLOB handle] from a 7888*a3141fd3SAndroid Build Coastguard Worker ** caller-supplied buffer. N bytes of data are copied from the buffer Z 7889*a3141fd3SAndroid Build Coastguard Worker ** into the open BLOB, starting at offset iOffset.)^ 7890*a3141fd3SAndroid Build Coastguard Worker ** 7891*a3141fd3SAndroid Build Coastguard Worker ** ^(On success, sqlite3_blob_write() returns SQLITE_OK. 7892*a3141fd3SAndroid Build Coastguard Worker ** Otherwise, an [error code] or an [extended error code] is returned.)^ 7893*a3141fd3SAndroid Build Coastguard Worker ** ^Unless SQLITE_MISUSE is returned, this function sets the 7894*a3141fd3SAndroid Build Coastguard Worker ** [database connection] error code and message accessible via 7895*a3141fd3SAndroid Build Coastguard Worker ** [sqlite3_errcode()] and [sqlite3_errmsg()] and related functions. 7896*a3141fd3SAndroid Build Coastguard Worker ** 7897*a3141fd3SAndroid Build Coastguard Worker ** ^If the [BLOB handle] passed as the first argument was not opened for 7898*a3141fd3SAndroid Build Coastguard Worker ** writing (the flags parameter to [sqlite3_blob_open()] was zero), 7899*a3141fd3SAndroid Build Coastguard Worker ** this function returns [SQLITE_READONLY]. 7900*a3141fd3SAndroid Build Coastguard Worker ** 7901*a3141fd3SAndroid Build Coastguard Worker ** This function may only modify the contents of the BLOB; it is 7902*a3141fd3SAndroid Build Coastguard Worker ** not possible to increase the size of a BLOB using this API. 7903*a3141fd3SAndroid Build Coastguard Worker ** ^If offset iOffset is less than N bytes from the end of the BLOB, 7904*a3141fd3SAndroid Build Coastguard Worker ** [SQLITE_ERROR] is returned and no data is written. The size of the 7905*a3141fd3SAndroid Build Coastguard Worker ** BLOB (and hence the maximum value of N+iOffset) can be determined 7906*a3141fd3SAndroid Build Coastguard Worker ** using the [sqlite3_blob_bytes()] interface. ^If N or iOffset are less 7907*a3141fd3SAndroid Build Coastguard Worker ** than zero [SQLITE_ERROR] is returned and no data is written. 7908*a3141fd3SAndroid Build Coastguard Worker ** 7909*a3141fd3SAndroid Build Coastguard Worker ** ^An attempt to write to an expired [BLOB handle] fails with an 7910*a3141fd3SAndroid Build Coastguard Worker ** error code of [SQLITE_ABORT]. ^Writes to the BLOB that occurred 7911*a3141fd3SAndroid Build Coastguard Worker ** before the [BLOB handle] expired are not rolled back by the 7912*a3141fd3SAndroid Build Coastguard Worker ** expiration of the handle, though of course those changes might 7913*a3141fd3SAndroid Build Coastguard Worker ** have been overwritten by the statement that expired the BLOB handle 7914*a3141fd3SAndroid Build Coastguard Worker ** or by other independent statements. 7915*a3141fd3SAndroid Build Coastguard Worker ** 7916*a3141fd3SAndroid Build Coastguard Worker ** This routine only works on a [BLOB handle] which has been created 7917*a3141fd3SAndroid Build Coastguard Worker ** by a prior successful call to [sqlite3_blob_open()] and which has not 7918*a3141fd3SAndroid Build Coastguard Worker ** been closed by [sqlite3_blob_close()]. Passing any other pointer in 7919*a3141fd3SAndroid Build Coastguard Worker ** to this routine results in undefined and probably undesirable behavior. 7920*a3141fd3SAndroid Build Coastguard Worker ** 7921*a3141fd3SAndroid Build Coastguard Worker ** See also: [sqlite3_blob_read()]. 7922*a3141fd3SAndroid Build Coastguard Worker */ 7923*a3141fd3SAndroid Build Coastguard Worker SQLITE_API int sqlite3_blob_write(sqlite3_blob *, const void *z, int n, int iOffset); 7924*a3141fd3SAndroid Build Coastguard Worker 7925*a3141fd3SAndroid Build Coastguard Worker /* 7926*a3141fd3SAndroid Build Coastguard Worker ** CAPI3REF: Virtual File System Objects 7927*a3141fd3SAndroid Build Coastguard Worker ** 7928*a3141fd3SAndroid Build Coastguard Worker ** A virtual filesystem (VFS) is an [sqlite3_vfs] object 7929*a3141fd3SAndroid Build Coastguard Worker ** that SQLite uses to interact 7930*a3141fd3SAndroid Build Coastguard Worker ** with the underlying operating system. Most SQLite builds come with a 7931*a3141fd3SAndroid Build Coastguard Worker ** single default VFS that is appropriate for the host computer. 7932*a3141fd3SAndroid Build Coastguard Worker ** New VFSes can be registered and existing VFSes can be unregistered. 7933*a3141fd3SAndroid Build Coastguard Worker ** The following interfaces are provided. 7934*a3141fd3SAndroid Build Coastguard Worker ** 7935*a3141fd3SAndroid Build Coastguard Worker ** ^The sqlite3_vfs_find() interface returns a pointer to a VFS given its name. 7936*a3141fd3SAndroid Build Coastguard Worker ** ^Names are case sensitive. 7937*a3141fd3SAndroid Build Coastguard Worker ** ^Names are zero-terminated UTF-8 strings. 7938*a3141fd3SAndroid Build Coastguard Worker ** ^If there is no match, a NULL pointer is returned. 7939*a3141fd3SAndroid Build Coastguard Worker ** ^If zVfsName is NULL then the default VFS is returned. 7940*a3141fd3SAndroid Build Coastguard Worker ** 7941*a3141fd3SAndroid Build Coastguard Worker ** ^New VFSes are registered with sqlite3_vfs_register(). 7942*a3141fd3SAndroid Build Coastguard Worker ** ^Each new VFS becomes the default VFS if the makeDflt flag is set. 7943*a3141fd3SAndroid Build Coastguard Worker ** ^The same VFS can be registered multiple times without injury. 7944*a3141fd3SAndroid Build Coastguard Worker ** ^To make an existing VFS into the default VFS, register it again 7945*a3141fd3SAndroid Build Coastguard Worker ** with the makeDflt flag set. If two different VFSes with the 7946*a3141fd3SAndroid Build Coastguard Worker ** same name are registered, the behavior is undefined. If a 7947*a3141fd3SAndroid Build Coastguard Worker ** VFS is registered with a name that is NULL or an empty string, 7948*a3141fd3SAndroid Build Coastguard Worker ** then the behavior is undefined. 7949*a3141fd3SAndroid Build Coastguard Worker ** 7950*a3141fd3SAndroid Build Coastguard Worker ** ^Unregister a VFS with the sqlite3_vfs_unregister() interface. 7951*a3141fd3SAndroid Build Coastguard Worker ** ^(If the default VFS is unregistered, another VFS is chosen as 7952*a3141fd3SAndroid Build Coastguard Worker ** the default. The choice for the new VFS is arbitrary.)^ 7953*a3141fd3SAndroid Build Coastguard Worker */ 7954*a3141fd3SAndroid Build Coastguard Worker SQLITE_API sqlite3_vfs *sqlite3_vfs_find(const char *zVfsName); 7955*a3141fd3SAndroid Build Coastguard Worker SQLITE_API int sqlite3_vfs_register(sqlite3_vfs*, int makeDflt); 7956*a3141fd3SAndroid Build Coastguard Worker SQLITE_API int sqlite3_vfs_unregister(sqlite3_vfs*); 7957*a3141fd3SAndroid Build Coastguard Worker 7958*a3141fd3SAndroid Build Coastguard Worker /* 7959*a3141fd3SAndroid Build Coastguard Worker ** CAPI3REF: Mutexes 7960*a3141fd3SAndroid Build Coastguard Worker ** 7961*a3141fd3SAndroid Build Coastguard Worker ** The SQLite core uses these routines for thread 7962*a3141fd3SAndroid Build Coastguard Worker ** synchronization. Though they are intended for internal 7963*a3141fd3SAndroid Build Coastguard Worker ** use by SQLite, code that links against SQLite is 7964*a3141fd3SAndroid Build Coastguard Worker ** permitted to use any of these routines. 7965*a3141fd3SAndroid Build Coastguard Worker ** 7966*a3141fd3SAndroid Build Coastguard Worker ** The SQLite source code contains multiple implementations 7967*a3141fd3SAndroid Build Coastguard Worker ** of these mutex routines. An appropriate implementation 7968*a3141fd3SAndroid Build Coastguard Worker ** is selected automatically at compile-time. The following 7969*a3141fd3SAndroid Build Coastguard Worker ** implementations are available in the SQLite core: 7970*a3141fd3SAndroid Build Coastguard Worker ** 7971*a3141fd3SAndroid Build Coastguard Worker ** <ul> 7972*a3141fd3SAndroid Build Coastguard Worker ** <li> SQLITE_MUTEX_PTHREADS 7973*a3141fd3SAndroid Build Coastguard Worker ** <li> SQLITE_MUTEX_W32 7974*a3141fd3SAndroid Build Coastguard Worker ** <li> SQLITE_MUTEX_NOOP 7975*a3141fd3SAndroid Build Coastguard Worker ** </ul> 7976*a3141fd3SAndroid Build Coastguard Worker ** 7977*a3141fd3SAndroid Build Coastguard Worker ** The SQLITE_MUTEX_NOOP implementation is a set of routines 7978*a3141fd3SAndroid Build Coastguard Worker ** that does no real locking and is appropriate for use in 7979*a3141fd3SAndroid Build Coastguard Worker ** a single-threaded application. The SQLITE_MUTEX_PTHREADS and 7980*a3141fd3SAndroid Build Coastguard Worker ** SQLITE_MUTEX_W32 implementations are appropriate for use on Unix 7981*a3141fd3SAndroid Build Coastguard Worker ** and Windows. 7982*a3141fd3SAndroid Build Coastguard Worker ** 7983*a3141fd3SAndroid Build Coastguard Worker ** If SQLite is compiled with the SQLITE_MUTEX_APPDEF preprocessor 7984*a3141fd3SAndroid Build Coastguard Worker ** macro defined (with "-DSQLITE_MUTEX_APPDEF=1"), then no mutex 7985*a3141fd3SAndroid Build Coastguard Worker ** implementation is included with the library. In this case the 7986*a3141fd3SAndroid Build Coastguard Worker ** application must supply a custom mutex implementation using the 7987*a3141fd3SAndroid Build Coastguard Worker ** [SQLITE_CONFIG_MUTEX] option of the sqlite3_config() function 7988*a3141fd3SAndroid Build Coastguard Worker ** before calling sqlite3_initialize() or any other public sqlite3_ 7989*a3141fd3SAndroid Build Coastguard Worker ** function that calls sqlite3_initialize(). 7990*a3141fd3SAndroid Build Coastguard Worker ** 7991*a3141fd3SAndroid Build Coastguard Worker ** ^The sqlite3_mutex_alloc() routine allocates a new 7992*a3141fd3SAndroid Build Coastguard Worker ** mutex and returns a pointer to it. ^The sqlite3_mutex_alloc() 7993*a3141fd3SAndroid Build Coastguard Worker ** routine returns NULL if it is unable to allocate the requested 7994*a3141fd3SAndroid Build Coastguard Worker ** mutex. The argument to sqlite3_mutex_alloc() must one of these 7995*a3141fd3SAndroid Build Coastguard Worker ** integer constants: 7996*a3141fd3SAndroid Build Coastguard Worker ** 7997*a3141fd3SAndroid Build Coastguard Worker ** <ul> 7998*a3141fd3SAndroid Build Coastguard Worker ** <li> SQLITE_MUTEX_FAST 7999*a3141fd3SAndroid Build Coastguard Worker ** <li> SQLITE_MUTEX_RECURSIVE 8000*a3141fd3SAndroid Build Coastguard Worker ** <li> SQLITE_MUTEX_STATIC_MAIN 8001*a3141fd3SAndroid Build Coastguard Worker ** <li> SQLITE_MUTEX_STATIC_MEM 8002*a3141fd3SAndroid Build Coastguard Worker ** <li> SQLITE_MUTEX_STATIC_OPEN 8003*a3141fd3SAndroid Build Coastguard Worker ** <li> SQLITE_MUTEX_STATIC_PRNG 8004*a3141fd3SAndroid Build Coastguard Worker ** <li> SQLITE_MUTEX_STATIC_LRU 8005*a3141fd3SAndroid Build Coastguard Worker ** <li> SQLITE_MUTEX_STATIC_PMEM 8006*a3141fd3SAndroid Build Coastguard Worker ** <li> SQLITE_MUTEX_STATIC_APP1 8007*a3141fd3SAndroid Build Coastguard Worker ** <li> SQLITE_MUTEX_STATIC_APP2 8008*a3141fd3SAndroid Build Coastguard Worker ** <li> SQLITE_MUTEX_STATIC_APP3 8009*a3141fd3SAndroid Build Coastguard Worker ** <li> SQLITE_MUTEX_STATIC_VFS1 8010*a3141fd3SAndroid Build Coastguard Worker ** <li> SQLITE_MUTEX_STATIC_VFS2 8011*a3141fd3SAndroid Build Coastguard Worker ** <li> SQLITE_MUTEX_STATIC_VFS3 8012*a3141fd3SAndroid Build Coastguard Worker ** </ul> 8013*a3141fd3SAndroid Build Coastguard Worker ** 8014*a3141fd3SAndroid Build Coastguard Worker ** ^The first two constants (SQLITE_MUTEX_FAST and SQLITE_MUTEX_RECURSIVE) 8015*a3141fd3SAndroid Build Coastguard Worker ** cause sqlite3_mutex_alloc() to create 8016*a3141fd3SAndroid Build Coastguard Worker ** a new mutex. ^The new mutex is recursive when SQLITE_MUTEX_RECURSIVE 8017*a3141fd3SAndroid Build Coastguard Worker ** is used but not necessarily so when SQLITE_MUTEX_FAST is used. 8018*a3141fd3SAndroid Build Coastguard Worker ** The mutex implementation does not need to make a distinction 8019*a3141fd3SAndroid Build Coastguard Worker ** between SQLITE_MUTEX_RECURSIVE and SQLITE_MUTEX_FAST if it does 8020*a3141fd3SAndroid Build Coastguard Worker ** not want to. SQLite will only request a recursive mutex in 8021*a3141fd3SAndroid Build Coastguard Worker ** cases where it really needs one. If a faster non-recursive mutex 8022*a3141fd3SAndroid Build Coastguard Worker ** implementation is available on the host platform, the mutex subsystem 8023*a3141fd3SAndroid Build Coastguard Worker ** might return such a mutex in response to SQLITE_MUTEX_FAST. 8024*a3141fd3SAndroid Build Coastguard Worker ** 8025*a3141fd3SAndroid Build Coastguard Worker ** ^The other allowed parameters to sqlite3_mutex_alloc() (anything other 8026*a3141fd3SAndroid Build Coastguard Worker ** than SQLITE_MUTEX_FAST and SQLITE_MUTEX_RECURSIVE) each return 8027*a3141fd3SAndroid Build Coastguard Worker ** a pointer to a static preexisting mutex. ^Nine static mutexes are 8028*a3141fd3SAndroid Build Coastguard Worker ** used by the current version of SQLite. Future versions of SQLite 8029*a3141fd3SAndroid Build Coastguard Worker ** may add additional static mutexes. Static mutexes are for internal 8030*a3141fd3SAndroid Build Coastguard Worker ** use by SQLite only. Applications that use SQLite mutexes should 8031*a3141fd3SAndroid Build Coastguard Worker ** use only the dynamic mutexes returned by SQLITE_MUTEX_FAST or 8032*a3141fd3SAndroid Build Coastguard Worker ** SQLITE_MUTEX_RECURSIVE. 8033*a3141fd3SAndroid Build Coastguard Worker ** 8034*a3141fd3SAndroid Build Coastguard Worker ** ^Note that if one of the dynamic mutex parameters (SQLITE_MUTEX_FAST 8035*a3141fd3SAndroid Build Coastguard Worker ** or SQLITE_MUTEX_RECURSIVE) is used then sqlite3_mutex_alloc() 8036*a3141fd3SAndroid Build Coastguard Worker ** returns a different mutex on every call. ^For the static 8037*a3141fd3SAndroid Build Coastguard Worker ** mutex types, the same mutex is returned on every call that has 8038*a3141fd3SAndroid Build Coastguard Worker ** the same type number. 8039*a3141fd3SAndroid Build Coastguard Worker ** 8040*a3141fd3SAndroid Build Coastguard Worker ** ^The sqlite3_mutex_free() routine deallocates a previously 8041*a3141fd3SAndroid Build Coastguard Worker ** allocated dynamic mutex. Attempting to deallocate a static 8042*a3141fd3SAndroid Build Coastguard Worker ** mutex results in undefined behavior. 8043*a3141fd3SAndroid Build Coastguard Worker ** 8044*a3141fd3SAndroid Build Coastguard Worker ** ^The sqlite3_mutex_enter() and sqlite3_mutex_try() routines attempt 8045*a3141fd3SAndroid Build Coastguard Worker ** to enter a mutex. ^If another thread is already within the mutex, 8046*a3141fd3SAndroid Build Coastguard Worker ** sqlite3_mutex_enter() will block and sqlite3_mutex_try() will return 8047*a3141fd3SAndroid Build Coastguard Worker ** SQLITE_BUSY. ^The sqlite3_mutex_try() interface returns [SQLITE_OK] 8048*a3141fd3SAndroid Build Coastguard Worker ** upon successful entry. ^(Mutexes created using 8049*a3141fd3SAndroid Build Coastguard Worker ** SQLITE_MUTEX_RECURSIVE can be entered multiple times by the same thread. 8050*a3141fd3SAndroid Build Coastguard Worker ** In such cases, the 8051*a3141fd3SAndroid Build Coastguard Worker ** mutex must be exited an equal number of times before another thread 8052*a3141fd3SAndroid Build Coastguard Worker ** can enter.)^ If the same thread tries to enter any mutex other 8053*a3141fd3SAndroid Build Coastguard Worker ** than an SQLITE_MUTEX_RECURSIVE more than once, the behavior is undefined. 8054*a3141fd3SAndroid Build Coastguard Worker ** 8055*a3141fd3SAndroid Build Coastguard Worker ** ^(Some systems (for example, Windows 95) do not support the operation 8056*a3141fd3SAndroid Build Coastguard Worker ** implemented by sqlite3_mutex_try(). On those systems, sqlite3_mutex_try() 8057*a3141fd3SAndroid Build Coastguard Worker ** will always return SQLITE_BUSY. The SQLite core only ever uses 8058*a3141fd3SAndroid Build Coastguard Worker ** sqlite3_mutex_try() as an optimization so this is acceptable 8059*a3141fd3SAndroid Build Coastguard Worker ** behavior.)^ 8060*a3141fd3SAndroid Build Coastguard Worker ** 8061*a3141fd3SAndroid Build Coastguard Worker ** ^The sqlite3_mutex_leave() routine exits a mutex that was 8062*a3141fd3SAndroid Build Coastguard Worker ** previously entered by the same thread. The behavior 8063*a3141fd3SAndroid Build Coastguard Worker ** is undefined if the mutex is not currently entered by the 8064*a3141fd3SAndroid Build Coastguard Worker ** calling thread or is not currently allocated. 8065*a3141fd3SAndroid Build Coastguard Worker ** 8066*a3141fd3SAndroid Build Coastguard Worker ** ^If the argument to sqlite3_mutex_enter(), sqlite3_mutex_try(), 8067*a3141fd3SAndroid Build Coastguard Worker ** sqlite3_mutex_leave(), or sqlite3_mutex_free() is a NULL pointer, 8068*a3141fd3SAndroid Build Coastguard Worker ** then any of the four routines behaves as a no-op. 8069*a3141fd3SAndroid Build Coastguard Worker ** 8070*a3141fd3SAndroid Build Coastguard Worker ** See also: [sqlite3_mutex_held()] and [sqlite3_mutex_notheld()]. 8071*a3141fd3SAndroid Build Coastguard Worker */ 8072*a3141fd3SAndroid Build Coastguard Worker SQLITE_API sqlite3_mutex *sqlite3_mutex_alloc(int); 8073*a3141fd3SAndroid Build Coastguard Worker SQLITE_API void sqlite3_mutex_free(sqlite3_mutex*); 8074*a3141fd3SAndroid Build Coastguard Worker SQLITE_API void sqlite3_mutex_enter(sqlite3_mutex*); 8075*a3141fd3SAndroid Build Coastguard Worker SQLITE_API int sqlite3_mutex_try(sqlite3_mutex*); 8076*a3141fd3SAndroid Build Coastguard Worker SQLITE_API void sqlite3_mutex_leave(sqlite3_mutex*); 8077*a3141fd3SAndroid Build Coastguard Worker 8078*a3141fd3SAndroid Build Coastguard Worker /* 8079*a3141fd3SAndroid Build Coastguard Worker ** CAPI3REF: Mutex Methods Object 8080*a3141fd3SAndroid Build Coastguard Worker ** 8081*a3141fd3SAndroid Build Coastguard Worker ** An instance of this structure defines the low-level routines 8082*a3141fd3SAndroid Build Coastguard Worker ** used to allocate and use mutexes. 8083*a3141fd3SAndroid Build Coastguard Worker ** 8084*a3141fd3SAndroid Build Coastguard Worker ** Usually, the default mutex implementations provided by SQLite are 8085*a3141fd3SAndroid Build Coastguard Worker ** sufficient, however the application has the option of substituting a custom 8086*a3141fd3SAndroid Build Coastguard Worker ** implementation for specialized deployments or systems for which SQLite 8087*a3141fd3SAndroid Build Coastguard Worker ** does not provide a suitable implementation. In this case, the application 8088*a3141fd3SAndroid Build Coastguard Worker ** creates and populates an instance of this structure to pass 8089*a3141fd3SAndroid Build Coastguard Worker ** to sqlite3_config() along with the [SQLITE_CONFIG_MUTEX] option. 8090*a3141fd3SAndroid Build Coastguard Worker ** Additionally, an instance of this structure can be used as an 8091*a3141fd3SAndroid Build Coastguard Worker ** output variable when querying the system for the current mutex 8092*a3141fd3SAndroid Build Coastguard Worker ** implementation, using the [SQLITE_CONFIG_GETMUTEX] option. 8093*a3141fd3SAndroid Build Coastguard Worker ** 8094*a3141fd3SAndroid Build Coastguard Worker ** ^The xMutexInit method defined by this structure is invoked as 8095*a3141fd3SAndroid Build Coastguard Worker ** part of system initialization by the sqlite3_initialize() function. 8096*a3141fd3SAndroid Build Coastguard Worker ** ^The xMutexInit routine is called by SQLite exactly once for each 8097*a3141fd3SAndroid Build Coastguard Worker ** effective call to [sqlite3_initialize()]. 8098*a3141fd3SAndroid Build Coastguard Worker ** 8099*a3141fd3SAndroid Build Coastguard Worker ** ^The xMutexEnd method defined by this structure is invoked as 8100*a3141fd3SAndroid Build Coastguard Worker ** part of system shutdown by the sqlite3_shutdown() function. The 8101*a3141fd3SAndroid Build Coastguard Worker ** implementation of this method is expected to release all outstanding 8102*a3141fd3SAndroid Build Coastguard Worker ** resources obtained by the mutex methods implementation, especially 8103*a3141fd3SAndroid Build Coastguard Worker ** those obtained by the xMutexInit method. ^The xMutexEnd() 8104*a3141fd3SAndroid Build Coastguard Worker ** interface is invoked exactly once for each call to [sqlite3_shutdown()]. 8105*a3141fd3SAndroid Build Coastguard Worker ** 8106*a3141fd3SAndroid Build Coastguard Worker ** ^(The remaining seven methods defined by this structure (xMutexAlloc, 8107*a3141fd3SAndroid Build Coastguard Worker ** xMutexFree, xMutexEnter, xMutexTry, xMutexLeave, xMutexHeld and 8108*a3141fd3SAndroid Build Coastguard Worker ** xMutexNotheld) implement the following interfaces (respectively): 8109*a3141fd3SAndroid Build Coastguard Worker ** 8110*a3141fd3SAndroid Build Coastguard Worker ** <ul> 8111*a3141fd3SAndroid Build Coastguard Worker ** <li> [sqlite3_mutex_alloc()] </li> 8112*a3141fd3SAndroid Build Coastguard Worker ** <li> [sqlite3_mutex_free()] </li> 8113*a3141fd3SAndroid Build Coastguard Worker ** <li> [sqlite3_mutex_enter()] </li> 8114*a3141fd3SAndroid Build Coastguard Worker ** <li> [sqlite3_mutex_try()] </li> 8115*a3141fd3SAndroid Build Coastguard Worker ** <li> [sqlite3_mutex_leave()] </li> 8116*a3141fd3SAndroid Build Coastguard Worker ** <li> [sqlite3_mutex_held()] </li> 8117*a3141fd3SAndroid Build Coastguard Worker ** <li> [sqlite3_mutex_notheld()] </li> 8118*a3141fd3SAndroid Build Coastguard Worker ** </ul>)^ 8119*a3141fd3SAndroid Build Coastguard Worker ** 8120*a3141fd3SAndroid Build Coastguard Worker ** The only difference is that the public sqlite3_XXX functions enumerated 8121*a3141fd3SAndroid Build Coastguard Worker ** above silently ignore any invocations that pass a NULL pointer instead 8122*a3141fd3SAndroid Build Coastguard Worker ** of a valid mutex handle. The implementations of the methods defined 8123*a3141fd3SAndroid Build Coastguard Worker ** by this structure are not required to handle this case. The results 8124*a3141fd3SAndroid Build Coastguard Worker ** of passing a NULL pointer instead of a valid mutex handle are undefined 8125*a3141fd3SAndroid Build Coastguard Worker ** (i.e. it is acceptable to provide an implementation that segfaults if 8126*a3141fd3SAndroid Build Coastguard Worker ** it is passed a NULL pointer). 8127*a3141fd3SAndroid Build Coastguard Worker ** 8128*a3141fd3SAndroid Build Coastguard Worker ** The xMutexInit() method must be threadsafe. It must be harmless to 8129*a3141fd3SAndroid Build Coastguard Worker ** invoke xMutexInit() multiple times within the same process and without 8130*a3141fd3SAndroid Build Coastguard Worker ** intervening calls to xMutexEnd(). Second and subsequent calls to 8131*a3141fd3SAndroid Build Coastguard Worker ** xMutexInit() must be no-ops. 8132*a3141fd3SAndroid Build Coastguard Worker ** 8133*a3141fd3SAndroid Build Coastguard Worker ** xMutexInit() must not use SQLite memory allocation ([sqlite3_malloc()] 8134*a3141fd3SAndroid Build Coastguard Worker ** and its associates). Similarly, xMutexAlloc() must not use SQLite memory 8135*a3141fd3SAndroid Build Coastguard Worker ** allocation for a static mutex. ^However xMutexAlloc() may use SQLite 8136*a3141fd3SAndroid Build Coastguard Worker ** memory allocation for a fast or recursive mutex. 8137*a3141fd3SAndroid Build Coastguard Worker ** 8138*a3141fd3SAndroid Build Coastguard Worker ** ^SQLite will invoke the xMutexEnd() method when [sqlite3_shutdown()] is 8139*a3141fd3SAndroid Build Coastguard Worker ** called, but only if the prior call to xMutexInit returned SQLITE_OK. 8140*a3141fd3SAndroid Build Coastguard Worker ** If xMutexInit fails in any way, it is expected to clean up after itself 8141*a3141fd3SAndroid Build Coastguard Worker ** prior to returning. 8142*a3141fd3SAndroid Build Coastguard Worker */ 8143*a3141fd3SAndroid Build Coastguard Worker typedef struct sqlite3_mutex_methods sqlite3_mutex_methods; 8144*a3141fd3SAndroid Build Coastguard Worker struct sqlite3_mutex_methods { 8145*a3141fd3SAndroid Build Coastguard Worker int (*xMutexInit)(void); 8146*a3141fd3SAndroid Build Coastguard Worker int (*xMutexEnd)(void); 8147*a3141fd3SAndroid Build Coastguard Worker sqlite3_mutex *(*xMutexAlloc)(int); 8148*a3141fd3SAndroid Build Coastguard Worker void (*xMutexFree)(sqlite3_mutex *); 8149*a3141fd3SAndroid Build Coastguard Worker void (*xMutexEnter)(sqlite3_mutex *); 8150*a3141fd3SAndroid Build Coastguard Worker int (*xMutexTry)(sqlite3_mutex *); 8151*a3141fd3SAndroid Build Coastguard Worker void (*xMutexLeave)(sqlite3_mutex *); 8152*a3141fd3SAndroid Build Coastguard Worker int (*xMutexHeld)(sqlite3_mutex *); 8153*a3141fd3SAndroid Build Coastguard Worker int (*xMutexNotheld)(sqlite3_mutex *); 8154*a3141fd3SAndroid Build Coastguard Worker }; 8155*a3141fd3SAndroid Build Coastguard Worker 8156*a3141fd3SAndroid Build Coastguard Worker /* 8157*a3141fd3SAndroid Build Coastguard Worker ** CAPI3REF: Mutex Verification Routines 8158*a3141fd3SAndroid Build Coastguard Worker ** 8159*a3141fd3SAndroid Build Coastguard Worker ** The sqlite3_mutex_held() and sqlite3_mutex_notheld() routines 8160*a3141fd3SAndroid Build Coastguard Worker ** are intended for use inside assert() statements. The SQLite core 8161*a3141fd3SAndroid Build Coastguard Worker ** never uses these routines except inside an assert() and applications 8162*a3141fd3SAndroid Build Coastguard Worker ** are advised to follow the lead of the core. The SQLite core only 8163*a3141fd3SAndroid Build Coastguard Worker ** provides implementations for these routines when it is compiled 8164*a3141fd3SAndroid Build Coastguard Worker ** with the SQLITE_DEBUG flag. External mutex implementations 8165*a3141fd3SAndroid Build Coastguard Worker ** are only required to provide these routines if SQLITE_DEBUG is 8166*a3141fd3SAndroid Build Coastguard Worker ** defined and if NDEBUG is not defined. 8167*a3141fd3SAndroid Build Coastguard Worker ** 8168*a3141fd3SAndroid Build Coastguard Worker ** These routines should return true if the mutex in their argument 8169*a3141fd3SAndroid Build Coastguard Worker ** is held or not held, respectively, by the calling thread. 8170*a3141fd3SAndroid Build Coastguard Worker ** 8171*a3141fd3SAndroid Build Coastguard Worker ** The implementation is not required to provide versions of these 8172*a3141fd3SAndroid Build Coastguard Worker ** routines that actually work. If the implementation does not provide working 8173*a3141fd3SAndroid Build Coastguard Worker ** versions of these routines, it should at least provide stubs that always 8174*a3141fd3SAndroid Build Coastguard Worker ** return true so that one does not get spurious assertion failures. 8175*a3141fd3SAndroid Build Coastguard Worker ** 8176*a3141fd3SAndroid Build Coastguard Worker ** If the argument to sqlite3_mutex_held() is a NULL pointer then 8177*a3141fd3SAndroid Build Coastguard Worker ** the routine should return 1. This seems counter-intuitive since 8178*a3141fd3SAndroid Build Coastguard Worker ** clearly the mutex cannot be held if it does not exist. But 8179*a3141fd3SAndroid Build Coastguard Worker ** the reason the mutex does not exist is because the build is not 8180*a3141fd3SAndroid Build Coastguard Worker ** using mutexes. And we do not want the assert() containing the 8181*a3141fd3SAndroid Build Coastguard Worker ** call to sqlite3_mutex_held() to fail, so a non-zero return is 8182*a3141fd3SAndroid Build Coastguard Worker ** the appropriate thing to do. The sqlite3_mutex_notheld() 8183*a3141fd3SAndroid Build Coastguard Worker ** interface should also return 1 when given a NULL pointer. 8184*a3141fd3SAndroid Build Coastguard Worker */ 8185*a3141fd3SAndroid Build Coastguard Worker #ifndef NDEBUG 8186*a3141fd3SAndroid Build Coastguard Worker SQLITE_API int sqlite3_mutex_held(sqlite3_mutex*); 8187*a3141fd3SAndroid Build Coastguard Worker SQLITE_API int sqlite3_mutex_notheld(sqlite3_mutex*); 8188*a3141fd3SAndroid Build Coastguard Worker #endif 8189*a3141fd3SAndroid Build Coastguard Worker 8190*a3141fd3SAndroid Build Coastguard Worker /* 8191*a3141fd3SAndroid Build Coastguard Worker ** CAPI3REF: Mutex Types 8192*a3141fd3SAndroid Build Coastguard Worker ** 8193*a3141fd3SAndroid Build Coastguard Worker ** The [sqlite3_mutex_alloc()] interface takes a single argument 8194*a3141fd3SAndroid Build Coastguard Worker ** which is one of these integer constants. 8195*a3141fd3SAndroid Build Coastguard Worker ** 8196*a3141fd3SAndroid Build Coastguard Worker ** The set of static mutexes may change from one SQLite release to the 8197*a3141fd3SAndroid Build Coastguard Worker ** next. Applications that override the built-in mutex logic must be 8198*a3141fd3SAndroid Build Coastguard Worker ** prepared to accommodate additional static mutexes. 8199*a3141fd3SAndroid Build Coastguard Worker */ 8200*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_MUTEX_FAST 0 8201*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_MUTEX_RECURSIVE 1 8202*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_MUTEX_STATIC_MAIN 2 8203*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_MUTEX_STATIC_MEM 3 /* sqlite3_malloc() */ 8204*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_MUTEX_STATIC_MEM2 4 /* NOT USED */ 8205*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_MUTEX_STATIC_OPEN 4 /* sqlite3BtreeOpen() */ 8206*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_MUTEX_STATIC_PRNG 5 /* sqlite3_randomness() */ 8207*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_MUTEX_STATIC_LRU 6 /* lru page list */ 8208*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_MUTEX_STATIC_LRU2 7 /* NOT USED */ 8209*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_MUTEX_STATIC_PMEM 7 /* sqlite3PageMalloc() */ 8210*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_MUTEX_STATIC_APP1 8 /* For use by application */ 8211*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_MUTEX_STATIC_APP2 9 /* For use by application */ 8212*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_MUTEX_STATIC_APP3 10 /* For use by application */ 8213*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_MUTEX_STATIC_VFS1 11 /* For use by built-in VFS */ 8214*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_MUTEX_STATIC_VFS2 12 /* For use by extension VFS */ 8215*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_MUTEX_STATIC_VFS3 13 /* For use by application VFS */ 8216*a3141fd3SAndroid Build Coastguard Worker 8217*a3141fd3SAndroid Build Coastguard Worker /* Legacy compatibility: */ 8218*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_MUTEX_STATIC_MASTER 2 8219*a3141fd3SAndroid Build Coastguard Worker 8220*a3141fd3SAndroid Build Coastguard Worker 8221*a3141fd3SAndroid Build Coastguard Worker /* 8222*a3141fd3SAndroid Build Coastguard Worker ** CAPI3REF: Retrieve the mutex for a database connection 8223*a3141fd3SAndroid Build Coastguard Worker ** METHOD: sqlite3 8224*a3141fd3SAndroid Build Coastguard Worker ** 8225*a3141fd3SAndroid Build Coastguard Worker ** ^This interface returns a pointer the [sqlite3_mutex] object that 8226*a3141fd3SAndroid Build Coastguard Worker ** serializes access to the [database connection] given in the argument 8227*a3141fd3SAndroid Build Coastguard Worker ** when the [threading mode] is Serialized. 8228*a3141fd3SAndroid Build Coastguard Worker ** ^If the [threading mode] is Single-thread or Multi-thread then this 8229*a3141fd3SAndroid Build Coastguard Worker ** routine returns a NULL pointer. 8230*a3141fd3SAndroid Build Coastguard Worker */ 8231*a3141fd3SAndroid Build Coastguard Worker SQLITE_API sqlite3_mutex *sqlite3_db_mutex(sqlite3*); 8232*a3141fd3SAndroid Build Coastguard Worker 8233*a3141fd3SAndroid Build Coastguard Worker /* 8234*a3141fd3SAndroid Build Coastguard Worker ** CAPI3REF: Low-Level Control Of Database Files 8235*a3141fd3SAndroid Build Coastguard Worker ** METHOD: sqlite3 8236*a3141fd3SAndroid Build Coastguard Worker ** KEYWORDS: {file control} 8237*a3141fd3SAndroid Build Coastguard Worker ** 8238*a3141fd3SAndroid Build Coastguard Worker ** ^The [sqlite3_file_control()] interface makes a direct call to the 8239*a3141fd3SAndroid Build Coastguard Worker ** xFileControl method for the [sqlite3_io_methods] object associated 8240*a3141fd3SAndroid Build Coastguard Worker ** with a particular database identified by the second argument. ^The 8241*a3141fd3SAndroid Build Coastguard Worker ** name of the database is "main" for the main database or "temp" for the 8242*a3141fd3SAndroid Build Coastguard Worker ** TEMP database, or the name that appears after the AS keyword for 8243*a3141fd3SAndroid Build Coastguard Worker ** databases that are added using the [ATTACH] SQL command. 8244*a3141fd3SAndroid Build Coastguard Worker ** ^A NULL pointer can be used in place of "main" to refer to the 8245*a3141fd3SAndroid Build Coastguard Worker ** main database file. 8246*a3141fd3SAndroid Build Coastguard Worker ** ^The third and fourth parameters to this routine 8247*a3141fd3SAndroid Build Coastguard Worker ** are passed directly through to the second and third parameters of 8248*a3141fd3SAndroid Build Coastguard Worker ** the xFileControl method. ^The return value of the xFileControl 8249*a3141fd3SAndroid Build Coastguard Worker ** method becomes the return value of this routine. 8250*a3141fd3SAndroid Build Coastguard Worker ** 8251*a3141fd3SAndroid Build Coastguard Worker ** A few opcodes for [sqlite3_file_control()] are handled directly 8252*a3141fd3SAndroid Build Coastguard Worker ** by the SQLite core and never invoke the 8253*a3141fd3SAndroid Build Coastguard Worker ** sqlite3_io_methods.xFileControl method. 8254*a3141fd3SAndroid Build Coastguard Worker ** ^The [SQLITE_FCNTL_FILE_POINTER] value for the op parameter causes 8255*a3141fd3SAndroid Build Coastguard Worker ** a pointer to the underlying [sqlite3_file] object to be written into 8256*a3141fd3SAndroid Build Coastguard Worker ** the space pointed to by the 4th parameter. The 8257*a3141fd3SAndroid Build Coastguard Worker ** [SQLITE_FCNTL_JOURNAL_POINTER] works similarly except that it returns 8258*a3141fd3SAndroid Build Coastguard Worker ** the [sqlite3_file] object associated with the journal file instead of 8259*a3141fd3SAndroid Build Coastguard Worker ** the main database. The [SQLITE_FCNTL_VFS_POINTER] opcode returns 8260*a3141fd3SAndroid Build Coastguard Worker ** a pointer to the underlying [sqlite3_vfs] object for the file. 8261*a3141fd3SAndroid Build Coastguard Worker ** The [SQLITE_FCNTL_DATA_VERSION] returns the data version counter 8262*a3141fd3SAndroid Build Coastguard Worker ** from the pager. 8263*a3141fd3SAndroid Build Coastguard Worker ** 8264*a3141fd3SAndroid Build Coastguard Worker ** ^If the second parameter (zDbName) does not match the name of any 8265*a3141fd3SAndroid Build Coastguard Worker ** open database file, then SQLITE_ERROR is returned. ^This error 8266*a3141fd3SAndroid Build Coastguard Worker ** code is not remembered and will not be recalled by [sqlite3_errcode()] 8267*a3141fd3SAndroid Build Coastguard Worker ** or [sqlite3_errmsg()]. The underlying xFileControl method might 8268*a3141fd3SAndroid Build Coastguard Worker ** also return SQLITE_ERROR. There is no way to distinguish between 8269*a3141fd3SAndroid Build Coastguard Worker ** an incorrect zDbName and an SQLITE_ERROR return from the underlying 8270*a3141fd3SAndroid Build Coastguard Worker ** xFileControl method. 8271*a3141fd3SAndroid Build Coastguard Worker ** 8272*a3141fd3SAndroid Build Coastguard Worker ** See also: [file control opcodes] 8273*a3141fd3SAndroid Build Coastguard Worker */ 8274*a3141fd3SAndroid Build Coastguard Worker SQLITE_API int sqlite3_file_control(sqlite3*, const char *zDbName, int op, void*); 8275*a3141fd3SAndroid Build Coastguard Worker 8276*a3141fd3SAndroid Build Coastguard Worker /* 8277*a3141fd3SAndroid Build Coastguard Worker ** CAPI3REF: Testing Interface 8278*a3141fd3SAndroid Build Coastguard Worker ** 8279*a3141fd3SAndroid Build Coastguard Worker ** ^The sqlite3_test_control() interface is used to read out internal 8280*a3141fd3SAndroid Build Coastguard Worker ** state of SQLite and to inject faults into SQLite for testing 8281*a3141fd3SAndroid Build Coastguard Worker ** purposes. ^The first parameter is an operation code that determines 8282*a3141fd3SAndroid Build Coastguard Worker ** the number, meaning, and operation of all subsequent parameters. 8283*a3141fd3SAndroid Build Coastguard Worker ** 8284*a3141fd3SAndroid Build Coastguard Worker ** This interface is not for use by applications. It exists solely 8285*a3141fd3SAndroid Build Coastguard Worker ** for verifying the correct operation of the SQLite library. Depending 8286*a3141fd3SAndroid Build Coastguard Worker ** on how the SQLite library is compiled, this interface might not exist. 8287*a3141fd3SAndroid Build Coastguard Worker ** 8288*a3141fd3SAndroid Build Coastguard Worker ** The details of the operation codes, their meanings, the parameters 8289*a3141fd3SAndroid Build Coastguard Worker ** they take, and what they do are all subject to change without notice. 8290*a3141fd3SAndroid Build Coastguard Worker ** Unlike most of the SQLite API, this function is not guaranteed to 8291*a3141fd3SAndroid Build Coastguard Worker ** operate consistently from one release to the next. 8292*a3141fd3SAndroid Build Coastguard Worker */ 8293*a3141fd3SAndroid Build Coastguard Worker SQLITE_API int sqlite3_test_control(int op, ...); 8294*a3141fd3SAndroid Build Coastguard Worker 8295*a3141fd3SAndroid Build Coastguard Worker /* 8296*a3141fd3SAndroid Build Coastguard Worker ** CAPI3REF: Testing Interface Operation Codes 8297*a3141fd3SAndroid Build Coastguard Worker ** 8298*a3141fd3SAndroid Build Coastguard Worker ** These constants are the valid operation code parameters used 8299*a3141fd3SAndroid Build Coastguard Worker ** as the first argument to [sqlite3_test_control()]. 8300*a3141fd3SAndroid Build Coastguard Worker ** 8301*a3141fd3SAndroid Build Coastguard Worker ** These parameters and their meanings are subject to change 8302*a3141fd3SAndroid Build Coastguard Worker ** without notice. These values are for testing purposes only. 8303*a3141fd3SAndroid Build Coastguard Worker ** Applications should not use any of these parameters or the 8304*a3141fd3SAndroid Build Coastguard Worker ** [sqlite3_test_control()] interface. 8305*a3141fd3SAndroid Build Coastguard Worker */ 8306*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_TESTCTRL_FIRST 5 8307*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_TESTCTRL_PRNG_SAVE 5 8308*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_TESTCTRL_PRNG_RESTORE 6 8309*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_TESTCTRL_PRNG_RESET 7 /* NOT USED */ 8310*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_TESTCTRL_FK_NO_ACTION 7 8311*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_TESTCTRL_BITVEC_TEST 8 8312*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_TESTCTRL_FAULT_INSTALL 9 8313*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_TESTCTRL_BENIGN_MALLOC_HOOKS 10 8314*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_TESTCTRL_PENDING_BYTE 11 8315*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_TESTCTRL_ASSERT 12 8316*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_TESTCTRL_ALWAYS 13 8317*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_TESTCTRL_RESERVE 14 /* NOT USED */ 8318*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_TESTCTRL_OPTIMIZATIONS 15 8319*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_TESTCTRL_ISKEYWORD 16 /* NOT USED */ 8320*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_TESTCTRL_SCRATCHMALLOC 17 /* NOT USED */ 8321*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_TESTCTRL_INTERNAL_FUNCTIONS 17 8322*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_TESTCTRL_LOCALTIME_FAULT 18 8323*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_TESTCTRL_EXPLAIN_STMT 19 /* NOT USED */ 8324*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_TESTCTRL_ONCE_RESET_THRESHOLD 19 8325*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_TESTCTRL_NEVER_CORRUPT 20 8326*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_TESTCTRL_VDBE_COVERAGE 21 8327*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_TESTCTRL_BYTEORDER 22 8328*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_TESTCTRL_ISINIT 23 8329*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_TESTCTRL_SORTER_MMAP 24 8330*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_TESTCTRL_IMPOSTER 25 8331*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_TESTCTRL_PARSER_COVERAGE 26 8332*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_TESTCTRL_RESULT_INTREAL 27 8333*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_TESTCTRL_PRNG_SEED 28 8334*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_TESTCTRL_EXTRA_SCHEMA_CHECKS 29 8335*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_TESTCTRL_SEEK_COUNT 30 8336*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_TESTCTRL_TRACEFLAGS 31 8337*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_TESTCTRL_TUNE 32 8338*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_TESTCTRL_LOGEST 33 8339*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_TESTCTRL_USELONGDOUBLE 34 8340*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_TESTCTRL_LAST 34 /* Largest TESTCTRL */ 8341*a3141fd3SAndroid Build Coastguard Worker 8342*a3141fd3SAndroid Build Coastguard Worker /* 8343*a3141fd3SAndroid Build Coastguard Worker ** CAPI3REF: SQL Keyword Checking 8344*a3141fd3SAndroid Build Coastguard Worker ** 8345*a3141fd3SAndroid Build Coastguard Worker ** These routines provide access to the set of SQL language keywords 8346*a3141fd3SAndroid Build Coastguard Worker ** recognized by SQLite. Applications can uses these routines to determine 8347*a3141fd3SAndroid Build Coastguard Worker ** whether or not a specific identifier needs to be escaped (for example, 8348*a3141fd3SAndroid Build Coastguard Worker ** by enclosing in double-quotes) so as not to confuse the parser. 8349*a3141fd3SAndroid Build Coastguard Worker ** 8350*a3141fd3SAndroid Build Coastguard Worker ** The sqlite3_keyword_count() interface returns the number of distinct 8351*a3141fd3SAndroid Build Coastguard Worker ** keywords understood by SQLite. 8352*a3141fd3SAndroid Build Coastguard Worker ** 8353*a3141fd3SAndroid Build Coastguard Worker ** The sqlite3_keyword_name(N,Z,L) interface finds the N-th keyword and 8354*a3141fd3SAndroid Build Coastguard Worker ** makes *Z point to that keyword expressed as UTF8 and writes the number 8355*a3141fd3SAndroid Build Coastguard Worker ** of bytes in the keyword into *L. The string that *Z points to is not 8356*a3141fd3SAndroid Build Coastguard Worker ** zero-terminated. The sqlite3_keyword_name(N,Z,L) routine returns 8357*a3141fd3SAndroid Build Coastguard Worker ** SQLITE_OK if N is within bounds and SQLITE_ERROR if not. If either Z 8358*a3141fd3SAndroid Build Coastguard Worker ** or L are NULL or invalid pointers then calls to 8359*a3141fd3SAndroid Build Coastguard Worker ** sqlite3_keyword_name(N,Z,L) result in undefined behavior. 8360*a3141fd3SAndroid Build Coastguard Worker ** 8361*a3141fd3SAndroid Build Coastguard Worker ** The sqlite3_keyword_check(Z,L) interface checks to see whether or not 8362*a3141fd3SAndroid Build Coastguard Worker ** the L-byte UTF8 identifier that Z points to is a keyword, returning non-zero 8363*a3141fd3SAndroid Build Coastguard Worker ** if it is and zero if not. 8364*a3141fd3SAndroid Build Coastguard Worker ** 8365*a3141fd3SAndroid Build Coastguard Worker ** The parser used by SQLite is forgiving. It is often possible to use 8366*a3141fd3SAndroid Build Coastguard Worker ** a keyword as an identifier as long as such use does not result in a 8367*a3141fd3SAndroid Build Coastguard Worker ** parsing ambiguity. For example, the statement 8368*a3141fd3SAndroid Build Coastguard Worker ** "CREATE TABLE BEGIN(REPLACE,PRAGMA,END);" is accepted by SQLite, and 8369*a3141fd3SAndroid Build Coastguard Worker ** creates a new table named "BEGIN" with three columns named 8370*a3141fd3SAndroid Build Coastguard Worker ** "REPLACE", "PRAGMA", and "END". Nevertheless, best practice is to avoid 8371*a3141fd3SAndroid Build Coastguard Worker ** using keywords as identifiers. Common techniques used to avoid keyword 8372*a3141fd3SAndroid Build Coastguard Worker ** name collisions include: 8373*a3141fd3SAndroid Build Coastguard Worker ** <ul> 8374*a3141fd3SAndroid Build Coastguard Worker ** <li> Put all identifier names inside double-quotes. This is the official 8375*a3141fd3SAndroid Build Coastguard Worker ** SQL way to escape identifier names. 8376*a3141fd3SAndroid Build Coastguard Worker ** <li> Put identifier names inside [...]. This is not standard SQL, 8377*a3141fd3SAndroid Build Coastguard Worker ** but it is what SQL Server does and so lots of programmers use this 8378*a3141fd3SAndroid Build Coastguard Worker ** technique. 8379*a3141fd3SAndroid Build Coastguard Worker ** <li> Begin every identifier with the letter "Z" as no SQL keywords start 8380*a3141fd3SAndroid Build Coastguard Worker ** with "Z". 8381*a3141fd3SAndroid Build Coastguard Worker ** <li> Include a digit somewhere in every identifier name. 8382*a3141fd3SAndroid Build Coastguard Worker ** </ul> 8383*a3141fd3SAndroid Build Coastguard Worker ** 8384*a3141fd3SAndroid Build Coastguard Worker ** Note that the number of keywords understood by SQLite can depend on 8385*a3141fd3SAndroid Build Coastguard Worker ** compile-time options. For example, "VACUUM" is not a keyword if 8386*a3141fd3SAndroid Build Coastguard Worker ** SQLite is compiled with the [-DSQLITE_OMIT_VACUUM] option. Also, 8387*a3141fd3SAndroid Build Coastguard Worker ** new keywords may be added to future releases of SQLite. 8388*a3141fd3SAndroid Build Coastguard Worker */ 8389*a3141fd3SAndroid Build Coastguard Worker SQLITE_API int sqlite3_keyword_count(void); 8390*a3141fd3SAndroid Build Coastguard Worker SQLITE_API int sqlite3_keyword_name(int,const char**,int*); 8391*a3141fd3SAndroid Build Coastguard Worker SQLITE_API int sqlite3_keyword_check(const char*,int); 8392*a3141fd3SAndroid Build Coastguard Worker 8393*a3141fd3SAndroid Build Coastguard Worker /* 8394*a3141fd3SAndroid Build Coastguard Worker ** CAPI3REF: Dynamic String Object 8395*a3141fd3SAndroid Build Coastguard Worker ** KEYWORDS: {dynamic string} 8396*a3141fd3SAndroid Build Coastguard Worker ** 8397*a3141fd3SAndroid Build Coastguard Worker ** An instance of the sqlite3_str object contains a dynamically-sized 8398*a3141fd3SAndroid Build Coastguard Worker ** string under construction. 8399*a3141fd3SAndroid Build Coastguard Worker ** 8400*a3141fd3SAndroid Build Coastguard Worker ** The lifecycle of an sqlite3_str object is as follows: 8401*a3141fd3SAndroid Build Coastguard Worker ** <ol> 8402*a3141fd3SAndroid Build Coastguard Worker ** <li> ^The sqlite3_str object is created using [sqlite3_str_new()]. 8403*a3141fd3SAndroid Build Coastguard Worker ** <li> ^Text is appended to the sqlite3_str object using various 8404*a3141fd3SAndroid Build Coastguard Worker ** methods, such as [sqlite3_str_appendf()]. 8405*a3141fd3SAndroid Build Coastguard Worker ** <li> ^The sqlite3_str object is destroyed and the string it created 8406*a3141fd3SAndroid Build Coastguard Worker ** is returned using the [sqlite3_str_finish()] interface. 8407*a3141fd3SAndroid Build Coastguard Worker ** </ol> 8408*a3141fd3SAndroid Build Coastguard Worker */ 8409*a3141fd3SAndroid Build Coastguard Worker typedef struct sqlite3_str sqlite3_str; 8410*a3141fd3SAndroid Build Coastguard Worker 8411*a3141fd3SAndroid Build Coastguard Worker /* 8412*a3141fd3SAndroid Build Coastguard Worker ** CAPI3REF: Create A New Dynamic String Object 8413*a3141fd3SAndroid Build Coastguard Worker ** CONSTRUCTOR: sqlite3_str 8414*a3141fd3SAndroid Build Coastguard Worker ** 8415*a3141fd3SAndroid Build Coastguard Worker ** ^The [sqlite3_str_new(D)] interface allocates and initializes 8416*a3141fd3SAndroid Build Coastguard Worker ** a new [sqlite3_str] object. To avoid memory leaks, the object returned by 8417*a3141fd3SAndroid Build Coastguard Worker ** [sqlite3_str_new()] must be freed by a subsequent call to 8418*a3141fd3SAndroid Build Coastguard Worker ** [sqlite3_str_finish(X)]. 8419*a3141fd3SAndroid Build Coastguard Worker ** 8420*a3141fd3SAndroid Build Coastguard Worker ** ^The [sqlite3_str_new(D)] interface always returns a pointer to a 8421*a3141fd3SAndroid Build Coastguard Worker ** valid [sqlite3_str] object, though in the event of an out-of-memory 8422*a3141fd3SAndroid Build Coastguard Worker ** error the returned object might be a special singleton that will 8423*a3141fd3SAndroid Build Coastguard Worker ** silently reject new text, always return SQLITE_NOMEM from 8424*a3141fd3SAndroid Build Coastguard Worker ** [sqlite3_str_errcode()], always return 0 for 8425*a3141fd3SAndroid Build Coastguard Worker ** [sqlite3_str_length()], and always return NULL from 8426*a3141fd3SAndroid Build Coastguard Worker ** [sqlite3_str_finish(X)]. It is always safe to use the value 8427*a3141fd3SAndroid Build Coastguard Worker ** returned by [sqlite3_str_new(D)] as the sqlite3_str parameter 8428*a3141fd3SAndroid Build Coastguard Worker ** to any of the other [sqlite3_str] methods. 8429*a3141fd3SAndroid Build Coastguard Worker ** 8430*a3141fd3SAndroid Build Coastguard Worker ** The D parameter to [sqlite3_str_new(D)] may be NULL. If the 8431*a3141fd3SAndroid Build Coastguard Worker ** D parameter in [sqlite3_str_new(D)] is not NULL, then the maximum 8432*a3141fd3SAndroid Build Coastguard Worker ** length of the string contained in the [sqlite3_str] object will be 8433*a3141fd3SAndroid Build Coastguard Worker ** the value set for [sqlite3_limit](D,[SQLITE_LIMIT_LENGTH]) instead 8434*a3141fd3SAndroid Build Coastguard Worker ** of [SQLITE_MAX_LENGTH]. 8435*a3141fd3SAndroid Build Coastguard Worker */ 8436*a3141fd3SAndroid Build Coastguard Worker SQLITE_API sqlite3_str *sqlite3_str_new(sqlite3*); 8437*a3141fd3SAndroid Build Coastguard Worker 8438*a3141fd3SAndroid Build Coastguard Worker /* 8439*a3141fd3SAndroid Build Coastguard Worker ** CAPI3REF: Finalize A Dynamic String 8440*a3141fd3SAndroid Build Coastguard Worker ** DESTRUCTOR: sqlite3_str 8441*a3141fd3SAndroid Build Coastguard Worker ** 8442*a3141fd3SAndroid Build Coastguard Worker ** ^The [sqlite3_str_finish(X)] interface destroys the sqlite3_str object X 8443*a3141fd3SAndroid Build Coastguard Worker ** and returns a pointer to a memory buffer obtained from [sqlite3_malloc64()] 8444*a3141fd3SAndroid Build Coastguard Worker ** that contains the constructed string. The calling application should 8445*a3141fd3SAndroid Build Coastguard Worker ** pass the returned value to [sqlite3_free()] to avoid a memory leak. 8446*a3141fd3SAndroid Build Coastguard Worker ** ^The [sqlite3_str_finish(X)] interface may return a NULL pointer if any 8447*a3141fd3SAndroid Build Coastguard Worker ** errors were encountered during construction of the string. ^The 8448*a3141fd3SAndroid Build Coastguard Worker ** [sqlite3_str_finish(X)] interface will also return a NULL pointer if the 8449*a3141fd3SAndroid Build Coastguard Worker ** string in [sqlite3_str] object X is zero bytes long. 8450*a3141fd3SAndroid Build Coastguard Worker */ 8451*a3141fd3SAndroid Build Coastguard Worker SQLITE_API char *sqlite3_str_finish(sqlite3_str*); 8452*a3141fd3SAndroid Build Coastguard Worker 8453*a3141fd3SAndroid Build Coastguard Worker /* 8454*a3141fd3SAndroid Build Coastguard Worker ** CAPI3REF: Add Content To A Dynamic String 8455*a3141fd3SAndroid Build Coastguard Worker ** METHOD: sqlite3_str 8456*a3141fd3SAndroid Build Coastguard Worker ** 8457*a3141fd3SAndroid Build Coastguard Worker ** These interfaces add content to an sqlite3_str object previously obtained 8458*a3141fd3SAndroid Build Coastguard Worker ** from [sqlite3_str_new()]. 8459*a3141fd3SAndroid Build Coastguard Worker ** 8460*a3141fd3SAndroid Build Coastguard Worker ** ^The [sqlite3_str_appendf(X,F,...)] and 8461*a3141fd3SAndroid Build Coastguard Worker ** [sqlite3_str_vappendf(X,F,V)] interfaces uses the [built-in printf] 8462*a3141fd3SAndroid Build Coastguard Worker ** functionality of SQLite to append formatted text onto the end of 8463*a3141fd3SAndroid Build Coastguard Worker ** [sqlite3_str] object X. 8464*a3141fd3SAndroid Build Coastguard Worker ** 8465*a3141fd3SAndroid Build Coastguard Worker ** ^The [sqlite3_str_append(X,S,N)] method appends exactly N bytes from string S 8466*a3141fd3SAndroid Build Coastguard Worker ** onto the end of the [sqlite3_str] object X. N must be non-negative. 8467*a3141fd3SAndroid Build Coastguard Worker ** S must contain at least N non-zero bytes of content. To append a 8468*a3141fd3SAndroid Build Coastguard Worker ** zero-terminated string in its entirety, use the [sqlite3_str_appendall()] 8469*a3141fd3SAndroid Build Coastguard Worker ** method instead. 8470*a3141fd3SAndroid Build Coastguard Worker ** 8471*a3141fd3SAndroid Build Coastguard Worker ** ^The [sqlite3_str_appendall(X,S)] method appends the complete content of 8472*a3141fd3SAndroid Build Coastguard Worker ** zero-terminated string S onto the end of [sqlite3_str] object X. 8473*a3141fd3SAndroid Build Coastguard Worker ** 8474*a3141fd3SAndroid Build Coastguard Worker ** ^The [sqlite3_str_appendchar(X,N,C)] method appends N copies of the 8475*a3141fd3SAndroid Build Coastguard Worker ** single-byte character C onto the end of [sqlite3_str] object X. 8476*a3141fd3SAndroid Build Coastguard Worker ** ^This method can be used, for example, to add whitespace indentation. 8477*a3141fd3SAndroid Build Coastguard Worker ** 8478*a3141fd3SAndroid Build Coastguard Worker ** ^The [sqlite3_str_reset(X)] method resets the string under construction 8479*a3141fd3SAndroid Build Coastguard Worker ** inside [sqlite3_str] object X back to zero bytes in length. 8480*a3141fd3SAndroid Build Coastguard Worker ** 8481*a3141fd3SAndroid Build Coastguard Worker ** These methods do not return a result code. ^If an error occurs, that fact 8482*a3141fd3SAndroid Build Coastguard Worker ** is recorded in the [sqlite3_str] object and can be recovered by a 8483*a3141fd3SAndroid Build Coastguard Worker ** subsequent call to [sqlite3_str_errcode(X)]. 8484*a3141fd3SAndroid Build Coastguard Worker */ 8485*a3141fd3SAndroid Build Coastguard Worker SQLITE_API void sqlite3_str_appendf(sqlite3_str*, const char *zFormat, ...); 8486*a3141fd3SAndroid Build Coastguard Worker SQLITE_API void sqlite3_str_vappendf(sqlite3_str*, const char *zFormat, va_list); 8487*a3141fd3SAndroid Build Coastguard Worker SQLITE_API void sqlite3_str_append(sqlite3_str*, const char *zIn, int N); 8488*a3141fd3SAndroid Build Coastguard Worker SQLITE_API void sqlite3_str_appendall(sqlite3_str*, const char *zIn); 8489*a3141fd3SAndroid Build Coastguard Worker SQLITE_API void sqlite3_str_appendchar(sqlite3_str*, int N, char C); 8490*a3141fd3SAndroid Build Coastguard Worker SQLITE_API void sqlite3_str_reset(sqlite3_str*); 8491*a3141fd3SAndroid Build Coastguard Worker 8492*a3141fd3SAndroid Build Coastguard Worker /* 8493*a3141fd3SAndroid Build Coastguard Worker ** CAPI3REF: Status Of A Dynamic String 8494*a3141fd3SAndroid Build Coastguard Worker ** METHOD: sqlite3_str 8495*a3141fd3SAndroid Build Coastguard Worker ** 8496*a3141fd3SAndroid Build Coastguard Worker ** These interfaces return the current status of an [sqlite3_str] object. 8497*a3141fd3SAndroid Build Coastguard Worker ** 8498*a3141fd3SAndroid Build Coastguard Worker ** ^If any prior errors have occurred while constructing the dynamic string 8499*a3141fd3SAndroid Build Coastguard Worker ** in sqlite3_str X, then the [sqlite3_str_errcode(X)] method will return 8500*a3141fd3SAndroid Build Coastguard Worker ** an appropriate error code. ^The [sqlite3_str_errcode(X)] method returns 8501*a3141fd3SAndroid Build Coastguard Worker ** [SQLITE_NOMEM] following any out-of-memory error, or 8502*a3141fd3SAndroid Build Coastguard Worker ** [SQLITE_TOOBIG] if the size of the dynamic string exceeds 8503*a3141fd3SAndroid Build Coastguard Worker ** [SQLITE_MAX_LENGTH], or [SQLITE_OK] if there have been no errors. 8504*a3141fd3SAndroid Build Coastguard Worker ** 8505*a3141fd3SAndroid Build Coastguard Worker ** ^The [sqlite3_str_length(X)] method returns the current length, in bytes, 8506*a3141fd3SAndroid Build Coastguard Worker ** of the dynamic string under construction in [sqlite3_str] object X. 8507*a3141fd3SAndroid Build Coastguard Worker ** ^The length returned by [sqlite3_str_length(X)] does not include the 8508*a3141fd3SAndroid Build Coastguard Worker ** zero-termination byte. 8509*a3141fd3SAndroid Build Coastguard Worker ** 8510*a3141fd3SAndroid Build Coastguard Worker ** ^The [sqlite3_str_value(X)] method returns a pointer to the current 8511*a3141fd3SAndroid Build Coastguard Worker ** content of the dynamic string under construction in X. The value 8512*a3141fd3SAndroid Build Coastguard Worker ** returned by [sqlite3_str_value(X)] is managed by the sqlite3_str object X 8513*a3141fd3SAndroid Build Coastguard Worker ** and might be freed or altered by any subsequent method on the same 8514*a3141fd3SAndroid Build Coastguard Worker ** [sqlite3_str] object. Applications must not used the pointer returned 8515*a3141fd3SAndroid Build Coastguard Worker ** [sqlite3_str_value(X)] after any subsequent method call on the same 8516*a3141fd3SAndroid Build Coastguard Worker ** object. ^Applications may change the content of the string returned 8517*a3141fd3SAndroid Build Coastguard Worker ** by [sqlite3_str_value(X)] as long as they do not write into any bytes 8518*a3141fd3SAndroid Build Coastguard Worker ** outside the range of 0 to [sqlite3_str_length(X)] and do not read or 8519*a3141fd3SAndroid Build Coastguard Worker ** write any byte after any subsequent sqlite3_str method call. 8520*a3141fd3SAndroid Build Coastguard Worker */ 8521*a3141fd3SAndroid Build Coastguard Worker SQLITE_API int sqlite3_str_errcode(sqlite3_str*); 8522*a3141fd3SAndroid Build Coastguard Worker SQLITE_API int sqlite3_str_length(sqlite3_str*); 8523*a3141fd3SAndroid Build Coastguard Worker SQLITE_API char *sqlite3_str_value(sqlite3_str*); 8524*a3141fd3SAndroid Build Coastguard Worker 8525*a3141fd3SAndroid Build Coastguard Worker /* 8526*a3141fd3SAndroid Build Coastguard Worker ** CAPI3REF: SQLite Runtime Status 8527*a3141fd3SAndroid Build Coastguard Worker ** 8528*a3141fd3SAndroid Build Coastguard Worker ** ^These interfaces are used to retrieve runtime status information 8529*a3141fd3SAndroid Build Coastguard Worker ** about the performance of SQLite, and optionally to reset various 8530*a3141fd3SAndroid Build Coastguard Worker ** highwater marks. ^The first argument is an integer code for 8531*a3141fd3SAndroid Build Coastguard Worker ** the specific parameter to measure. ^(Recognized integer codes 8532*a3141fd3SAndroid Build Coastguard Worker ** are of the form [status parameters | SQLITE_STATUS_...].)^ 8533*a3141fd3SAndroid Build Coastguard Worker ** ^The current value of the parameter is returned into *pCurrent. 8534*a3141fd3SAndroid Build Coastguard Worker ** ^The highest recorded value is returned in *pHighwater. ^If the 8535*a3141fd3SAndroid Build Coastguard Worker ** resetFlag is true, then the highest record value is reset after 8536*a3141fd3SAndroid Build Coastguard Worker ** *pHighwater is written. ^(Some parameters do not record the highest 8537*a3141fd3SAndroid Build Coastguard Worker ** value. For those parameters 8538*a3141fd3SAndroid Build Coastguard Worker ** nothing is written into *pHighwater and the resetFlag is ignored.)^ 8539*a3141fd3SAndroid Build Coastguard Worker ** ^(Other parameters record only the highwater mark and not the current 8540*a3141fd3SAndroid Build Coastguard Worker ** value. For these latter parameters nothing is written into *pCurrent.)^ 8541*a3141fd3SAndroid Build Coastguard Worker ** 8542*a3141fd3SAndroid Build Coastguard Worker ** ^The sqlite3_status() and sqlite3_status64() routines return 8543*a3141fd3SAndroid Build Coastguard Worker ** SQLITE_OK on success and a non-zero [error code] on failure. 8544*a3141fd3SAndroid Build Coastguard Worker ** 8545*a3141fd3SAndroid Build Coastguard Worker ** If either the current value or the highwater mark is too large to 8546*a3141fd3SAndroid Build Coastguard Worker ** be represented by a 32-bit integer, then the values returned by 8547*a3141fd3SAndroid Build Coastguard Worker ** sqlite3_status() are undefined. 8548*a3141fd3SAndroid Build Coastguard Worker ** 8549*a3141fd3SAndroid Build Coastguard Worker ** See also: [sqlite3_db_status()] 8550*a3141fd3SAndroid Build Coastguard Worker */ 8551*a3141fd3SAndroid Build Coastguard Worker SQLITE_API int sqlite3_status(int op, int *pCurrent, int *pHighwater, int resetFlag); 8552*a3141fd3SAndroid Build Coastguard Worker SQLITE_API int sqlite3_status64( 8553*a3141fd3SAndroid Build Coastguard Worker int op, 8554*a3141fd3SAndroid Build Coastguard Worker sqlite3_int64 *pCurrent, 8555*a3141fd3SAndroid Build Coastguard Worker sqlite3_int64 *pHighwater, 8556*a3141fd3SAndroid Build Coastguard Worker int resetFlag 8557*a3141fd3SAndroid Build Coastguard Worker ); 8558*a3141fd3SAndroid Build Coastguard Worker 8559*a3141fd3SAndroid Build Coastguard Worker 8560*a3141fd3SAndroid Build Coastguard Worker /* 8561*a3141fd3SAndroid Build Coastguard Worker ** CAPI3REF: Status Parameters 8562*a3141fd3SAndroid Build Coastguard Worker ** KEYWORDS: {status parameters} 8563*a3141fd3SAndroid Build Coastguard Worker ** 8564*a3141fd3SAndroid Build Coastguard Worker ** These integer constants designate various run-time status parameters 8565*a3141fd3SAndroid Build Coastguard Worker ** that can be returned by [sqlite3_status()]. 8566*a3141fd3SAndroid Build Coastguard Worker ** 8567*a3141fd3SAndroid Build Coastguard Worker ** <dl> 8568*a3141fd3SAndroid Build Coastguard Worker ** [[SQLITE_STATUS_MEMORY_USED]] ^(<dt>SQLITE_STATUS_MEMORY_USED</dt> 8569*a3141fd3SAndroid Build Coastguard Worker ** <dd>This parameter is the current amount of memory checked out 8570*a3141fd3SAndroid Build Coastguard Worker ** using [sqlite3_malloc()], either directly or indirectly. The 8571*a3141fd3SAndroid Build Coastguard Worker ** figure includes calls made to [sqlite3_malloc()] by the application 8572*a3141fd3SAndroid Build Coastguard Worker ** and internal memory usage by the SQLite library. Auxiliary page-cache 8573*a3141fd3SAndroid Build Coastguard Worker ** memory controlled by [SQLITE_CONFIG_PAGECACHE] is not included in 8574*a3141fd3SAndroid Build Coastguard Worker ** this parameter. The amount returned is the sum of the allocation 8575*a3141fd3SAndroid Build Coastguard Worker ** sizes as reported by the xSize method in [sqlite3_mem_methods].</dd>)^ 8576*a3141fd3SAndroid Build Coastguard Worker ** 8577*a3141fd3SAndroid Build Coastguard Worker ** [[SQLITE_STATUS_MALLOC_SIZE]] ^(<dt>SQLITE_STATUS_MALLOC_SIZE</dt> 8578*a3141fd3SAndroid Build Coastguard Worker ** <dd>This parameter records the largest memory allocation request 8579*a3141fd3SAndroid Build Coastguard Worker ** handed to [sqlite3_malloc()] or [sqlite3_realloc()] (or their 8580*a3141fd3SAndroid Build Coastguard Worker ** internal equivalents). Only the value returned in the 8581*a3141fd3SAndroid Build Coastguard Worker ** *pHighwater parameter to [sqlite3_status()] is of interest. 8582*a3141fd3SAndroid Build Coastguard Worker ** The value written into the *pCurrent parameter is undefined.</dd>)^ 8583*a3141fd3SAndroid Build Coastguard Worker ** 8584*a3141fd3SAndroid Build Coastguard Worker ** [[SQLITE_STATUS_MALLOC_COUNT]] ^(<dt>SQLITE_STATUS_MALLOC_COUNT</dt> 8585*a3141fd3SAndroid Build Coastguard Worker ** <dd>This parameter records the number of separate memory allocations 8586*a3141fd3SAndroid Build Coastguard Worker ** currently checked out.</dd>)^ 8587*a3141fd3SAndroid Build Coastguard Worker ** 8588*a3141fd3SAndroid Build Coastguard Worker ** [[SQLITE_STATUS_PAGECACHE_USED]] ^(<dt>SQLITE_STATUS_PAGECACHE_USED</dt> 8589*a3141fd3SAndroid Build Coastguard Worker ** <dd>This parameter returns the number of pages used out of the 8590*a3141fd3SAndroid Build Coastguard Worker ** [pagecache memory allocator] that was configured using 8591*a3141fd3SAndroid Build Coastguard Worker ** [SQLITE_CONFIG_PAGECACHE]. The 8592*a3141fd3SAndroid Build Coastguard Worker ** value returned is in pages, not in bytes.</dd>)^ 8593*a3141fd3SAndroid Build Coastguard Worker ** 8594*a3141fd3SAndroid Build Coastguard Worker ** [[SQLITE_STATUS_PAGECACHE_OVERFLOW]] 8595*a3141fd3SAndroid Build Coastguard Worker ** ^(<dt>SQLITE_STATUS_PAGECACHE_OVERFLOW</dt> 8596*a3141fd3SAndroid Build Coastguard Worker ** <dd>This parameter returns the number of bytes of page cache 8597*a3141fd3SAndroid Build Coastguard Worker ** allocation which could not be satisfied by the [SQLITE_CONFIG_PAGECACHE] 8598*a3141fd3SAndroid Build Coastguard Worker ** buffer and where forced to overflow to [sqlite3_malloc()]. The 8599*a3141fd3SAndroid Build Coastguard Worker ** returned value includes allocations that overflowed because they 8600*a3141fd3SAndroid Build Coastguard Worker ** where too large (they were larger than the "sz" parameter to 8601*a3141fd3SAndroid Build Coastguard Worker ** [SQLITE_CONFIG_PAGECACHE]) and allocations that overflowed because 8602*a3141fd3SAndroid Build Coastguard Worker ** no space was left in the page cache.</dd>)^ 8603*a3141fd3SAndroid Build Coastguard Worker ** 8604*a3141fd3SAndroid Build Coastguard Worker ** [[SQLITE_STATUS_PAGECACHE_SIZE]] ^(<dt>SQLITE_STATUS_PAGECACHE_SIZE</dt> 8605*a3141fd3SAndroid Build Coastguard Worker ** <dd>This parameter records the largest memory allocation request 8606*a3141fd3SAndroid Build Coastguard Worker ** handed to the [pagecache memory allocator]. Only the value returned in the 8607*a3141fd3SAndroid Build Coastguard Worker ** *pHighwater parameter to [sqlite3_status()] is of interest. 8608*a3141fd3SAndroid Build Coastguard Worker ** The value written into the *pCurrent parameter is undefined.</dd>)^ 8609*a3141fd3SAndroid Build Coastguard Worker ** 8610*a3141fd3SAndroid Build Coastguard Worker ** [[SQLITE_STATUS_SCRATCH_USED]] <dt>SQLITE_STATUS_SCRATCH_USED</dt> 8611*a3141fd3SAndroid Build Coastguard Worker ** <dd>No longer used.</dd> 8612*a3141fd3SAndroid Build Coastguard Worker ** 8613*a3141fd3SAndroid Build Coastguard Worker ** [[SQLITE_STATUS_SCRATCH_OVERFLOW]] ^(<dt>SQLITE_STATUS_SCRATCH_OVERFLOW</dt> 8614*a3141fd3SAndroid Build Coastguard Worker ** <dd>No longer used.</dd> 8615*a3141fd3SAndroid Build Coastguard Worker ** 8616*a3141fd3SAndroid Build Coastguard Worker ** [[SQLITE_STATUS_SCRATCH_SIZE]] <dt>SQLITE_STATUS_SCRATCH_SIZE</dt> 8617*a3141fd3SAndroid Build Coastguard Worker ** <dd>No longer used.</dd> 8618*a3141fd3SAndroid Build Coastguard Worker ** 8619*a3141fd3SAndroid Build Coastguard Worker ** [[SQLITE_STATUS_PARSER_STACK]] ^(<dt>SQLITE_STATUS_PARSER_STACK</dt> 8620*a3141fd3SAndroid Build Coastguard Worker ** <dd>The *pHighwater parameter records the deepest parser stack. 8621*a3141fd3SAndroid Build Coastguard Worker ** The *pCurrent value is undefined. The *pHighwater value is only 8622*a3141fd3SAndroid Build Coastguard Worker ** meaningful if SQLite is compiled with [YYTRACKMAXSTACKDEPTH].</dd>)^ 8623*a3141fd3SAndroid Build Coastguard Worker ** </dl> 8624*a3141fd3SAndroid Build Coastguard Worker ** 8625*a3141fd3SAndroid Build Coastguard Worker ** New status parameters may be added from time to time. 8626*a3141fd3SAndroid Build Coastguard Worker */ 8627*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_STATUS_MEMORY_USED 0 8628*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_STATUS_PAGECACHE_USED 1 8629*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_STATUS_PAGECACHE_OVERFLOW 2 8630*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_STATUS_SCRATCH_USED 3 /* NOT USED */ 8631*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_STATUS_SCRATCH_OVERFLOW 4 /* NOT USED */ 8632*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_STATUS_MALLOC_SIZE 5 8633*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_STATUS_PARSER_STACK 6 8634*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_STATUS_PAGECACHE_SIZE 7 8635*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_STATUS_SCRATCH_SIZE 8 /* NOT USED */ 8636*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_STATUS_MALLOC_COUNT 9 8637*a3141fd3SAndroid Build Coastguard Worker 8638*a3141fd3SAndroid Build Coastguard Worker /* 8639*a3141fd3SAndroid Build Coastguard Worker ** CAPI3REF: Database Connection Status 8640*a3141fd3SAndroid Build Coastguard Worker ** METHOD: sqlite3 8641*a3141fd3SAndroid Build Coastguard Worker ** 8642*a3141fd3SAndroid Build Coastguard Worker ** ^This interface is used to retrieve runtime status information 8643*a3141fd3SAndroid Build Coastguard Worker ** about a single [database connection]. ^The first argument is the 8644*a3141fd3SAndroid Build Coastguard Worker ** database connection object to be interrogated. ^The second argument 8645*a3141fd3SAndroid Build Coastguard Worker ** is an integer constant, taken from the set of 8646*a3141fd3SAndroid Build Coastguard Worker ** [SQLITE_DBSTATUS options], that 8647*a3141fd3SAndroid Build Coastguard Worker ** determines the parameter to interrogate. The set of 8648*a3141fd3SAndroid Build Coastguard Worker ** [SQLITE_DBSTATUS options] is likely 8649*a3141fd3SAndroid Build Coastguard Worker ** to grow in future releases of SQLite. 8650*a3141fd3SAndroid Build Coastguard Worker ** 8651*a3141fd3SAndroid Build Coastguard Worker ** ^The current value of the requested parameter is written into *pCur 8652*a3141fd3SAndroid Build Coastguard Worker ** and the highest instantaneous value is written into *pHiwtr. ^If 8653*a3141fd3SAndroid Build Coastguard Worker ** the resetFlg is true, then the highest instantaneous value is 8654*a3141fd3SAndroid Build Coastguard Worker ** reset back down to the current value. 8655*a3141fd3SAndroid Build Coastguard Worker ** 8656*a3141fd3SAndroid Build Coastguard Worker ** ^The sqlite3_db_status() routine returns SQLITE_OK on success and a 8657*a3141fd3SAndroid Build Coastguard Worker ** non-zero [error code] on failure. 8658*a3141fd3SAndroid Build Coastguard Worker ** 8659*a3141fd3SAndroid Build Coastguard Worker ** See also: [sqlite3_status()] and [sqlite3_stmt_status()]. 8660*a3141fd3SAndroid Build Coastguard Worker */ 8661*a3141fd3SAndroid Build Coastguard Worker SQLITE_API int sqlite3_db_status(sqlite3*, int op, int *pCur, int *pHiwtr, int resetFlg); 8662*a3141fd3SAndroid Build Coastguard Worker 8663*a3141fd3SAndroid Build Coastguard Worker /* 8664*a3141fd3SAndroid Build Coastguard Worker ** CAPI3REF: Status Parameters for database connections 8665*a3141fd3SAndroid Build Coastguard Worker ** KEYWORDS: {SQLITE_DBSTATUS options} 8666*a3141fd3SAndroid Build Coastguard Worker ** 8667*a3141fd3SAndroid Build Coastguard Worker ** These constants are the available integer "verbs" that can be passed as 8668*a3141fd3SAndroid Build Coastguard Worker ** the second argument to the [sqlite3_db_status()] interface. 8669*a3141fd3SAndroid Build Coastguard Worker ** 8670*a3141fd3SAndroid Build Coastguard Worker ** New verbs may be added in future releases of SQLite. Existing verbs 8671*a3141fd3SAndroid Build Coastguard Worker ** might be discontinued. Applications should check the return code from 8672*a3141fd3SAndroid Build Coastguard Worker ** [sqlite3_db_status()] to make sure that the call worked. 8673*a3141fd3SAndroid Build Coastguard Worker ** The [sqlite3_db_status()] interface will return a non-zero error code 8674*a3141fd3SAndroid Build Coastguard Worker ** if a discontinued or unsupported verb is invoked. 8675*a3141fd3SAndroid Build Coastguard Worker ** 8676*a3141fd3SAndroid Build Coastguard Worker ** <dl> 8677*a3141fd3SAndroid Build Coastguard Worker ** [[SQLITE_DBSTATUS_LOOKASIDE_USED]] ^(<dt>SQLITE_DBSTATUS_LOOKASIDE_USED</dt> 8678*a3141fd3SAndroid Build Coastguard Worker ** <dd>This parameter returns the number of lookaside memory slots currently 8679*a3141fd3SAndroid Build Coastguard Worker ** checked out.</dd>)^ 8680*a3141fd3SAndroid Build Coastguard Worker ** 8681*a3141fd3SAndroid Build Coastguard Worker ** [[SQLITE_DBSTATUS_LOOKASIDE_HIT]] ^(<dt>SQLITE_DBSTATUS_LOOKASIDE_HIT</dt> 8682*a3141fd3SAndroid Build Coastguard Worker ** <dd>This parameter returns the number of malloc attempts that were 8683*a3141fd3SAndroid Build Coastguard Worker ** satisfied using lookaside memory. Only the high-water value is meaningful; 8684*a3141fd3SAndroid Build Coastguard Worker ** the current value is always zero.)^ 8685*a3141fd3SAndroid Build Coastguard Worker ** 8686*a3141fd3SAndroid Build Coastguard Worker ** [[SQLITE_DBSTATUS_LOOKASIDE_MISS_SIZE]] 8687*a3141fd3SAndroid Build Coastguard Worker ** ^(<dt>SQLITE_DBSTATUS_LOOKASIDE_MISS_SIZE</dt> 8688*a3141fd3SAndroid Build Coastguard Worker ** <dd>This parameter returns the number malloc attempts that might have 8689*a3141fd3SAndroid Build Coastguard Worker ** been satisfied using lookaside memory but failed due to the amount of 8690*a3141fd3SAndroid Build Coastguard Worker ** memory requested being larger than the lookaside slot size. 8691*a3141fd3SAndroid Build Coastguard Worker ** Only the high-water value is meaningful; 8692*a3141fd3SAndroid Build Coastguard Worker ** the current value is always zero.)^ 8693*a3141fd3SAndroid Build Coastguard Worker ** 8694*a3141fd3SAndroid Build Coastguard Worker ** [[SQLITE_DBSTATUS_LOOKASIDE_MISS_FULL]] 8695*a3141fd3SAndroid Build Coastguard Worker ** ^(<dt>SQLITE_DBSTATUS_LOOKASIDE_MISS_FULL</dt> 8696*a3141fd3SAndroid Build Coastguard Worker ** <dd>This parameter returns the number malloc attempts that might have 8697*a3141fd3SAndroid Build Coastguard Worker ** been satisfied using lookaside memory but failed due to all lookaside 8698*a3141fd3SAndroid Build Coastguard Worker ** memory already being in use. 8699*a3141fd3SAndroid Build Coastguard Worker ** Only the high-water value is meaningful; 8700*a3141fd3SAndroid Build Coastguard Worker ** the current value is always zero.)^ 8701*a3141fd3SAndroid Build Coastguard Worker ** 8702*a3141fd3SAndroid Build Coastguard Worker ** [[SQLITE_DBSTATUS_CACHE_USED]] ^(<dt>SQLITE_DBSTATUS_CACHE_USED</dt> 8703*a3141fd3SAndroid Build Coastguard Worker ** <dd>This parameter returns the approximate number of bytes of heap 8704*a3141fd3SAndroid Build Coastguard Worker ** memory used by all pager caches associated with the database connection.)^ 8705*a3141fd3SAndroid Build Coastguard Worker ** ^The highwater mark associated with SQLITE_DBSTATUS_CACHE_USED is always 0. 8706*a3141fd3SAndroid Build Coastguard Worker ** 8707*a3141fd3SAndroid Build Coastguard Worker ** [[SQLITE_DBSTATUS_CACHE_USED_SHARED]] 8708*a3141fd3SAndroid Build Coastguard Worker ** ^(<dt>SQLITE_DBSTATUS_CACHE_USED_SHARED</dt> 8709*a3141fd3SAndroid Build Coastguard Worker ** <dd>This parameter is similar to DBSTATUS_CACHE_USED, except that if a 8710*a3141fd3SAndroid Build Coastguard Worker ** pager cache is shared between two or more connections the bytes of heap 8711*a3141fd3SAndroid Build Coastguard Worker ** memory used by that pager cache is divided evenly between the attached 8712*a3141fd3SAndroid Build Coastguard Worker ** connections.)^ In other words, if none of the pager caches associated 8713*a3141fd3SAndroid Build Coastguard Worker ** with the database connection are shared, this request returns the same 8714*a3141fd3SAndroid Build Coastguard Worker ** value as DBSTATUS_CACHE_USED. Or, if one or more or the pager caches are 8715*a3141fd3SAndroid Build Coastguard Worker ** shared, the value returned by this call will be smaller than that returned 8716*a3141fd3SAndroid Build Coastguard Worker ** by DBSTATUS_CACHE_USED. ^The highwater mark associated with 8717*a3141fd3SAndroid Build Coastguard Worker ** SQLITE_DBSTATUS_CACHE_USED_SHARED is always 0. 8718*a3141fd3SAndroid Build Coastguard Worker ** 8719*a3141fd3SAndroid Build Coastguard Worker ** [[SQLITE_DBSTATUS_SCHEMA_USED]] ^(<dt>SQLITE_DBSTATUS_SCHEMA_USED</dt> 8720*a3141fd3SAndroid Build Coastguard Worker ** <dd>This parameter returns the approximate number of bytes of heap 8721*a3141fd3SAndroid Build Coastguard Worker ** memory used to store the schema for all databases associated 8722*a3141fd3SAndroid Build Coastguard Worker ** with the connection - main, temp, and any [ATTACH]-ed databases.)^ 8723*a3141fd3SAndroid Build Coastguard Worker ** ^The full amount of memory used by the schemas is reported, even if the 8724*a3141fd3SAndroid Build Coastguard Worker ** schema memory is shared with other database connections due to 8725*a3141fd3SAndroid Build Coastguard Worker ** [shared cache mode] being enabled. 8726*a3141fd3SAndroid Build Coastguard Worker ** ^The highwater mark associated with SQLITE_DBSTATUS_SCHEMA_USED is always 0. 8727*a3141fd3SAndroid Build Coastguard Worker ** 8728*a3141fd3SAndroid Build Coastguard Worker ** [[SQLITE_DBSTATUS_STMT_USED]] ^(<dt>SQLITE_DBSTATUS_STMT_USED</dt> 8729*a3141fd3SAndroid Build Coastguard Worker ** <dd>This parameter returns the approximate number of bytes of heap 8730*a3141fd3SAndroid Build Coastguard Worker ** and lookaside memory used by all prepared statements associated with 8731*a3141fd3SAndroid Build Coastguard Worker ** the database connection.)^ 8732*a3141fd3SAndroid Build Coastguard Worker ** ^The highwater mark associated with SQLITE_DBSTATUS_STMT_USED is always 0. 8733*a3141fd3SAndroid Build Coastguard Worker ** </dd> 8734*a3141fd3SAndroid Build Coastguard Worker ** 8735*a3141fd3SAndroid Build Coastguard Worker ** [[SQLITE_DBSTATUS_CACHE_HIT]] ^(<dt>SQLITE_DBSTATUS_CACHE_HIT</dt> 8736*a3141fd3SAndroid Build Coastguard Worker ** <dd>This parameter returns the number of pager cache hits that have 8737*a3141fd3SAndroid Build Coastguard Worker ** occurred.)^ ^The highwater mark associated with SQLITE_DBSTATUS_CACHE_HIT 8738*a3141fd3SAndroid Build Coastguard Worker ** is always 0. 8739*a3141fd3SAndroid Build Coastguard Worker ** </dd> 8740*a3141fd3SAndroid Build Coastguard Worker ** 8741*a3141fd3SAndroid Build Coastguard Worker ** [[SQLITE_DBSTATUS_CACHE_MISS]] ^(<dt>SQLITE_DBSTATUS_CACHE_MISS</dt> 8742*a3141fd3SAndroid Build Coastguard Worker ** <dd>This parameter returns the number of pager cache misses that have 8743*a3141fd3SAndroid Build Coastguard Worker ** occurred.)^ ^The highwater mark associated with SQLITE_DBSTATUS_CACHE_MISS 8744*a3141fd3SAndroid Build Coastguard Worker ** is always 0. 8745*a3141fd3SAndroid Build Coastguard Worker ** </dd> 8746*a3141fd3SAndroid Build Coastguard Worker ** 8747*a3141fd3SAndroid Build Coastguard Worker ** [[SQLITE_DBSTATUS_CACHE_WRITE]] ^(<dt>SQLITE_DBSTATUS_CACHE_WRITE</dt> 8748*a3141fd3SAndroid Build Coastguard Worker ** <dd>This parameter returns the number of dirty cache entries that have 8749*a3141fd3SAndroid Build Coastguard Worker ** been written to disk. Specifically, the number of pages written to the 8750*a3141fd3SAndroid Build Coastguard Worker ** wal file in wal mode databases, or the number of pages written to the 8751*a3141fd3SAndroid Build Coastguard Worker ** database file in rollback mode databases. Any pages written as part of 8752*a3141fd3SAndroid Build Coastguard Worker ** transaction rollback or database recovery operations are not included. 8753*a3141fd3SAndroid Build Coastguard Worker ** If an IO or other error occurs while writing a page to disk, the effect 8754*a3141fd3SAndroid Build Coastguard Worker ** on subsequent SQLITE_DBSTATUS_CACHE_WRITE requests is undefined.)^ ^The 8755*a3141fd3SAndroid Build Coastguard Worker ** highwater mark associated with SQLITE_DBSTATUS_CACHE_WRITE is always 0. 8756*a3141fd3SAndroid Build Coastguard Worker ** </dd> 8757*a3141fd3SAndroid Build Coastguard Worker ** 8758*a3141fd3SAndroid Build Coastguard Worker ** [[SQLITE_DBSTATUS_CACHE_SPILL]] ^(<dt>SQLITE_DBSTATUS_CACHE_SPILL</dt> 8759*a3141fd3SAndroid Build Coastguard Worker ** <dd>This parameter returns the number of dirty cache entries that have 8760*a3141fd3SAndroid Build Coastguard Worker ** been written to disk in the middle of a transaction due to the page 8761*a3141fd3SAndroid Build Coastguard Worker ** cache overflowing. Transactions are more efficient if they are written 8762*a3141fd3SAndroid Build Coastguard Worker ** to disk all at once. When pages spill mid-transaction, that introduces 8763*a3141fd3SAndroid Build Coastguard Worker ** additional overhead. This parameter can be used help identify 8764*a3141fd3SAndroid Build Coastguard Worker ** inefficiencies that can be resolved by increasing the cache size. 8765*a3141fd3SAndroid Build Coastguard Worker ** </dd> 8766*a3141fd3SAndroid Build Coastguard Worker ** 8767*a3141fd3SAndroid Build Coastguard Worker ** [[SQLITE_DBSTATUS_DEFERRED_FKS]] ^(<dt>SQLITE_DBSTATUS_DEFERRED_FKS</dt> 8768*a3141fd3SAndroid Build Coastguard Worker ** <dd>This parameter returns zero for the current value if and only if 8769*a3141fd3SAndroid Build Coastguard Worker ** all foreign key constraints (deferred or immediate) have been 8770*a3141fd3SAndroid Build Coastguard Worker ** resolved.)^ ^The highwater mark is always 0. 8771*a3141fd3SAndroid Build Coastguard Worker ** </dd> 8772*a3141fd3SAndroid Build Coastguard Worker ** </dl> 8773*a3141fd3SAndroid Build Coastguard Worker */ 8774*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_DBSTATUS_LOOKASIDE_USED 0 8775*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_DBSTATUS_CACHE_USED 1 8776*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_DBSTATUS_SCHEMA_USED 2 8777*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_DBSTATUS_STMT_USED 3 8778*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_DBSTATUS_LOOKASIDE_HIT 4 8779*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_DBSTATUS_LOOKASIDE_MISS_SIZE 5 8780*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_DBSTATUS_LOOKASIDE_MISS_FULL 6 8781*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_DBSTATUS_CACHE_HIT 7 8782*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_DBSTATUS_CACHE_MISS 8 8783*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_DBSTATUS_CACHE_WRITE 9 8784*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_DBSTATUS_DEFERRED_FKS 10 8785*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_DBSTATUS_CACHE_USED_SHARED 11 8786*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_DBSTATUS_CACHE_SPILL 12 8787*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_DBSTATUS_MAX 12 /* Largest defined DBSTATUS */ 8788*a3141fd3SAndroid Build Coastguard Worker 8789*a3141fd3SAndroid Build Coastguard Worker 8790*a3141fd3SAndroid Build Coastguard Worker /* 8791*a3141fd3SAndroid Build Coastguard Worker ** CAPI3REF: Prepared Statement Status 8792*a3141fd3SAndroid Build Coastguard Worker ** METHOD: sqlite3_stmt 8793*a3141fd3SAndroid Build Coastguard Worker ** 8794*a3141fd3SAndroid Build Coastguard Worker ** ^(Each prepared statement maintains various 8795*a3141fd3SAndroid Build Coastguard Worker ** [SQLITE_STMTSTATUS counters] that measure the number 8796*a3141fd3SAndroid Build Coastguard Worker ** of times it has performed specific operations.)^ These counters can 8797*a3141fd3SAndroid Build Coastguard Worker ** be used to monitor the performance characteristics of the prepared 8798*a3141fd3SAndroid Build Coastguard Worker ** statements. For example, if the number of table steps greatly exceeds 8799*a3141fd3SAndroid Build Coastguard Worker ** the number of table searches or result rows, that would tend to indicate 8800*a3141fd3SAndroid Build Coastguard Worker ** that the prepared statement is using a full table scan rather than 8801*a3141fd3SAndroid Build Coastguard Worker ** an index. 8802*a3141fd3SAndroid Build Coastguard Worker ** 8803*a3141fd3SAndroid Build Coastguard Worker ** ^(This interface is used to retrieve and reset counter values from 8804*a3141fd3SAndroid Build Coastguard Worker ** a [prepared statement]. The first argument is the prepared statement 8805*a3141fd3SAndroid Build Coastguard Worker ** object to be interrogated. The second argument 8806*a3141fd3SAndroid Build Coastguard Worker ** is an integer code for a specific [SQLITE_STMTSTATUS counter] 8807*a3141fd3SAndroid Build Coastguard Worker ** to be interrogated.)^ 8808*a3141fd3SAndroid Build Coastguard Worker ** ^The current value of the requested counter is returned. 8809*a3141fd3SAndroid Build Coastguard Worker ** ^If the resetFlg is true, then the counter is reset to zero after this 8810*a3141fd3SAndroid Build Coastguard Worker ** interface call returns. 8811*a3141fd3SAndroid Build Coastguard Worker ** 8812*a3141fd3SAndroid Build Coastguard Worker ** See also: [sqlite3_status()] and [sqlite3_db_status()]. 8813*a3141fd3SAndroid Build Coastguard Worker */ 8814*a3141fd3SAndroid Build Coastguard Worker SQLITE_API int sqlite3_stmt_status(sqlite3_stmt*, int op,int resetFlg); 8815*a3141fd3SAndroid Build Coastguard Worker 8816*a3141fd3SAndroid Build Coastguard Worker /* 8817*a3141fd3SAndroid Build Coastguard Worker ** CAPI3REF: Status Parameters for prepared statements 8818*a3141fd3SAndroid Build Coastguard Worker ** KEYWORDS: {SQLITE_STMTSTATUS counter} {SQLITE_STMTSTATUS counters} 8819*a3141fd3SAndroid Build Coastguard Worker ** 8820*a3141fd3SAndroid Build Coastguard Worker ** These preprocessor macros define integer codes that name counter 8821*a3141fd3SAndroid Build Coastguard Worker ** values associated with the [sqlite3_stmt_status()] interface. 8822*a3141fd3SAndroid Build Coastguard Worker ** The meanings of the various counters are as follows: 8823*a3141fd3SAndroid Build Coastguard Worker ** 8824*a3141fd3SAndroid Build Coastguard Worker ** <dl> 8825*a3141fd3SAndroid Build Coastguard Worker ** [[SQLITE_STMTSTATUS_FULLSCAN_STEP]] <dt>SQLITE_STMTSTATUS_FULLSCAN_STEP</dt> 8826*a3141fd3SAndroid Build Coastguard Worker ** <dd>^This is the number of times that SQLite has stepped forward in 8827*a3141fd3SAndroid Build Coastguard Worker ** a table as part of a full table scan. Large numbers for this counter 8828*a3141fd3SAndroid Build Coastguard Worker ** may indicate opportunities for performance improvement through 8829*a3141fd3SAndroid Build Coastguard Worker ** careful use of indices.</dd> 8830*a3141fd3SAndroid Build Coastguard Worker ** 8831*a3141fd3SAndroid Build Coastguard Worker ** [[SQLITE_STMTSTATUS_SORT]] <dt>SQLITE_STMTSTATUS_SORT</dt> 8832*a3141fd3SAndroid Build Coastguard Worker ** <dd>^This is the number of sort operations that have occurred. 8833*a3141fd3SAndroid Build Coastguard Worker ** A non-zero value in this counter may indicate an opportunity to 8834*a3141fd3SAndroid Build Coastguard Worker ** improvement performance through careful use of indices.</dd> 8835*a3141fd3SAndroid Build Coastguard Worker ** 8836*a3141fd3SAndroid Build Coastguard Worker ** [[SQLITE_STMTSTATUS_AUTOINDEX]] <dt>SQLITE_STMTSTATUS_AUTOINDEX</dt> 8837*a3141fd3SAndroid Build Coastguard Worker ** <dd>^This is the number of rows inserted into transient indices that 8838*a3141fd3SAndroid Build Coastguard Worker ** were created automatically in order to help joins run faster. 8839*a3141fd3SAndroid Build Coastguard Worker ** A non-zero value in this counter may indicate an opportunity to 8840*a3141fd3SAndroid Build Coastguard Worker ** improvement performance by adding permanent indices that do not 8841*a3141fd3SAndroid Build Coastguard Worker ** need to be reinitialized each time the statement is run.</dd> 8842*a3141fd3SAndroid Build Coastguard Worker ** 8843*a3141fd3SAndroid Build Coastguard Worker ** [[SQLITE_STMTSTATUS_VM_STEP]] <dt>SQLITE_STMTSTATUS_VM_STEP</dt> 8844*a3141fd3SAndroid Build Coastguard Worker ** <dd>^This is the number of virtual machine operations executed 8845*a3141fd3SAndroid Build Coastguard Worker ** by the prepared statement if that number is less than or equal 8846*a3141fd3SAndroid Build Coastguard Worker ** to 2147483647. The number of virtual machine operations can be 8847*a3141fd3SAndroid Build Coastguard Worker ** used as a proxy for the total work done by the prepared statement. 8848*a3141fd3SAndroid Build Coastguard Worker ** If the number of virtual machine operations exceeds 2147483647 8849*a3141fd3SAndroid Build Coastguard Worker ** then the value returned by this statement status code is undefined. 8850*a3141fd3SAndroid Build Coastguard Worker ** 8851*a3141fd3SAndroid Build Coastguard Worker ** [[SQLITE_STMTSTATUS_REPREPARE]] <dt>SQLITE_STMTSTATUS_REPREPARE</dt> 8852*a3141fd3SAndroid Build Coastguard Worker ** <dd>^This is the number of times that the prepare statement has been 8853*a3141fd3SAndroid Build Coastguard Worker ** automatically regenerated due to schema changes or changes to 8854*a3141fd3SAndroid Build Coastguard Worker ** [bound parameters] that might affect the query plan. 8855*a3141fd3SAndroid Build Coastguard Worker ** 8856*a3141fd3SAndroid Build Coastguard Worker ** [[SQLITE_STMTSTATUS_RUN]] <dt>SQLITE_STMTSTATUS_RUN</dt> 8857*a3141fd3SAndroid Build Coastguard Worker ** <dd>^This is the number of times that the prepared statement has 8858*a3141fd3SAndroid Build Coastguard Worker ** been run. A single "run" for the purposes of this counter is one 8859*a3141fd3SAndroid Build Coastguard Worker ** or more calls to [sqlite3_step()] followed by a call to [sqlite3_reset()]. 8860*a3141fd3SAndroid Build Coastguard Worker ** The counter is incremented on the first [sqlite3_step()] call of each 8861*a3141fd3SAndroid Build Coastguard Worker ** cycle. 8862*a3141fd3SAndroid Build Coastguard Worker ** 8863*a3141fd3SAndroid Build Coastguard Worker ** [[SQLITE_STMTSTATUS_FILTER_MISS]] 8864*a3141fd3SAndroid Build Coastguard Worker ** [[SQLITE_STMTSTATUS_FILTER HIT]] 8865*a3141fd3SAndroid Build Coastguard Worker ** <dt>SQLITE_STMTSTATUS_FILTER_HIT<br> 8866*a3141fd3SAndroid Build Coastguard Worker ** SQLITE_STMTSTATUS_FILTER_MISS</dt> 8867*a3141fd3SAndroid Build Coastguard Worker ** <dd>^SQLITE_STMTSTATUS_FILTER_HIT is the number of times that a join 8868*a3141fd3SAndroid Build Coastguard Worker ** step was bypassed because a Bloom filter returned not-found. The 8869*a3141fd3SAndroid Build Coastguard Worker ** corresponding SQLITE_STMTSTATUS_FILTER_MISS value is the number of 8870*a3141fd3SAndroid Build Coastguard Worker ** times that the Bloom filter returned a find, and thus the join step 8871*a3141fd3SAndroid Build Coastguard Worker ** had to be processed as normal. 8872*a3141fd3SAndroid Build Coastguard Worker ** 8873*a3141fd3SAndroid Build Coastguard Worker ** [[SQLITE_STMTSTATUS_MEMUSED]] <dt>SQLITE_STMTSTATUS_MEMUSED</dt> 8874*a3141fd3SAndroid Build Coastguard Worker ** <dd>^This is the approximate number of bytes of heap memory 8875*a3141fd3SAndroid Build Coastguard Worker ** used to store the prepared statement. ^This value is not actually 8876*a3141fd3SAndroid Build Coastguard Worker ** a counter, and so the resetFlg parameter to sqlite3_stmt_status() 8877*a3141fd3SAndroid Build Coastguard Worker ** is ignored when the opcode is SQLITE_STMTSTATUS_MEMUSED. 8878*a3141fd3SAndroid Build Coastguard Worker ** </dd> 8879*a3141fd3SAndroid Build Coastguard Worker ** </dl> 8880*a3141fd3SAndroid Build Coastguard Worker */ 8881*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_STMTSTATUS_FULLSCAN_STEP 1 8882*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_STMTSTATUS_SORT 2 8883*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_STMTSTATUS_AUTOINDEX 3 8884*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_STMTSTATUS_VM_STEP 4 8885*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_STMTSTATUS_REPREPARE 5 8886*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_STMTSTATUS_RUN 6 8887*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_STMTSTATUS_FILTER_MISS 7 8888*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_STMTSTATUS_FILTER_HIT 8 8889*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_STMTSTATUS_MEMUSED 99 8890*a3141fd3SAndroid Build Coastguard Worker 8891*a3141fd3SAndroid Build Coastguard Worker /* 8892*a3141fd3SAndroid Build Coastguard Worker ** CAPI3REF: Custom Page Cache Object 8893*a3141fd3SAndroid Build Coastguard Worker ** 8894*a3141fd3SAndroid Build Coastguard Worker ** The sqlite3_pcache type is opaque. It is implemented by 8895*a3141fd3SAndroid Build Coastguard Worker ** the pluggable module. The SQLite core has no knowledge of 8896*a3141fd3SAndroid Build Coastguard Worker ** its size or internal structure and never deals with the 8897*a3141fd3SAndroid Build Coastguard Worker ** sqlite3_pcache object except by holding and passing pointers 8898*a3141fd3SAndroid Build Coastguard Worker ** to the object. 8899*a3141fd3SAndroid Build Coastguard Worker ** 8900*a3141fd3SAndroid Build Coastguard Worker ** See [sqlite3_pcache_methods2] for additional information. 8901*a3141fd3SAndroid Build Coastguard Worker */ 8902*a3141fd3SAndroid Build Coastguard Worker typedef struct sqlite3_pcache sqlite3_pcache; 8903*a3141fd3SAndroid Build Coastguard Worker 8904*a3141fd3SAndroid Build Coastguard Worker /* 8905*a3141fd3SAndroid Build Coastguard Worker ** CAPI3REF: Custom Page Cache Object 8906*a3141fd3SAndroid Build Coastguard Worker ** 8907*a3141fd3SAndroid Build Coastguard Worker ** The sqlite3_pcache_page object represents a single page in the 8908*a3141fd3SAndroid Build Coastguard Worker ** page cache. The page cache will allocate instances of this 8909*a3141fd3SAndroid Build Coastguard Worker ** object. Various methods of the page cache use pointers to instances 8910*a3141fd3SAndroid Build Coastguard Worker ** of this object as parameters or as their return value. 8911*a3141fd3SAndroid Build Coastguard Worker ** 8912*a3141fd3SAndroid Build Coastguard Worker ** See [sqlite3_pcache_methods2] for additional information. 8913*a3141fd3SAndroid Build Coastguard Worker */ 8914*a3141fd3SAndroid Build Coastguard Worker typedef struct sqlite3_pcache_page sqlite3_pcache_page; 8915*a3141fd3SAndroid Build Coastguard Worker struct sqlite3_pcache_page { 8916*a3141fd3SAndroid Build Coastguard Worker void *pBuf; /* The content of the page */ 8917*a3141fd3SAndroid Build Coastguard Worker void *pExtra; /* Extra information associated with the page */ 8918*a3141fd3SAndroid Build Coastguard Worker }; 8919*a3141fd3SAndroid Build Coastguard Worker 8920*a3141fd3SAndroid Build Coastguard Worker /* 8921*a3141fd3SAndroid Build Coastguard Worker ** CAPI3REF: Application Defined Page Cache. 8922*a3141fd3SAndroid Build Coastguard Worker ** KEYWORDS: {page cache} 8923*a3141fd3SAndroid Build Coastguard Worker ** 8924*a3141fd3SAndroid Build Coastguard Worker ** ^(The [sqlite3_config]([SQLITE_CONFIG_PCACHE2], ...) interface can 8925*a3141fd3SAndroid Build Coastguard Worker ** register an alternative page cache implementation by passing in an 8926*a3141fd3SAndroid Build Coastguard Worker ** instance of the sqlite3_pcache_methods2 structure.)^ 8927*a3141fd3SAndroid Build Coastguard Worker ** In many applications, most of the heap memory allocated by 8928*a3141fd3SAndroid Build Coastguard Worker ** SQLite is used for the page cache. 8929*a3141fd3SAndroid Build Coastguard Worker ** By implementing a 8930*a3141fd3SAndroid Build Coastguard Worker ** custom page cache using this API, an application can better control 8931*a3141fd3SAndroid Build Coastguard Worker ** the amount of memory consumed by SQLite, the way in which 8932*a3141fd3SAndroid Build Coastguard Worker ** that memory is allocated and released, and the policies used to 8933*a3141fd3SAndroid Build Coastguard Worker ** determine exactly which parts of a database file are cached and for 8934*a3141fd3SAndroid Build Coastguard Worker ** how long. 8935*a3141fd3SAndroid Build Coastguard Worker ** 8936*a3141fd3SAndroid Build Coastguard Worker ** The alternative page cache mechanism is an 8937*a3141fd3SAndroid Build Coastguard Worker ** extreme measure that is only needed by the most demanding applications. 8938*a3141fd3SAndroid Build Coastguard Worker ** The built-in page cache is recommended for most uses. 8939*a3141fd3SAndroid Build Coastguard Worker ** 8940*a3141fd3SAndroid Build Coastguard Worker ** ^(The contents of the sqlite3_pcache_methods2 structure are copied to an 8941*a3141fd3SAndroid Build Coastguard Worker ** internal buffer by SQLite within the call to [sqlite3_config]. Hence 8942*a3141fd3SAndroid Build Coastguard Worker ** the application may discard the parameter after the call to 8943*a3141fd3SAndroid Build Coastguard Worker ** [sqlite3_config()] returns.)^ 8944*a3141fd3SAndroid Build Coastguard Worker ** 8945*a3141fd3SAndroid Build Coastguard Worker ** [[the xInit() page cache method]] 8946*a3141fd3SAndroid Build Coastguard Worker ** ^(The xInit() method is called once for each effective 8947*a3141fd3SAndroid Build Coastguard Worker ** call to [sqlite3_initialize()])^ 8948*a3141fd3SAndroid Build Coastguard Worker ** (usually only once during the lifetime of the process). ^(The xInit() 8949*a3141fd3SAndroid Build Coastguard Worker ** method is passed a copy of the sqlite3_pcache_methods2.pArg value.)^ 8950*a3141fd3SAndroid Build Coastguard Worker ** The intent of the xInit() method is to set up global data structures 8951*a3141fd3SAndroid Build Coastguard Worker ** required by the custom page cache implementation. 8952*a3141fd3SAndroid Build Coastguard Worker ** ^(If the xInit() method is NULL, then the 8953*a3141fd3SAndroid Build Coastguard Worker ** built-in default page cache is used instead of the application defined 8954*a3141fd3SAndroid Build Coastguard Worker ** page cache.)^ 8955*a3141fd3SAndroid Build Coastguard Worker ** 8956*a3141fd3SAndroid Build Coastguard Worker ** [[the xShutdown() page cache method]] 8957*a3141fd3SAndroid Build Coastguard Worker ** ^The xShutdown() method is called by [sqlite3_shutdown()]. 8958*a3141fd3SAndroid Build Coastguard Worker ** It can be used to clean up 8959*a3141fd3SAndroid Build Coastguard Worker ** any outstanding resources before process shutdown, if required. 8960*a3141fd3SAndroid Build Coastguard Worker ** ^The xShutdown() method may be NULL. 8961*a3141fd3SAndroid Build Coastguard Worker ** 8962*a3141fd3SAndroid Build Coastguard Worker ** ^SQLite automatically serializes calls to the xInit method, 8963*a3141fd3SAndroid Build Coastguard Worker ** so the xInit method need not be threadsafe. ^The 8964*a3141fd3SAndroid Build Coastguard Worker ** xShutdown method is only called from [sqlite3_shutdown()] so it does 8965*a3141fd3SAndroid Build Coastguard Worker ** not need to be threadsafe either. All other methods must be threadsafe 8966*a3141fd3SAndroid Build Coastguard Worker ** in multithreaded applications. 8967*a3141fd3SAndroid Build Coastguard Worker ** 8968*a3141fd3SAndroid Build Coastguard Worker ** ^SQLite will never invoke xInit() more than once without an intervening 8969*a3141fd3SAndroid Build Coastguard Worker ** call to xShutdown(). 8970*a3141fd3SAndroid Build Coastguard Worker ** 8971*a3141fd3SAndroid Build Coastguard Worker ** [[the xCreate() page cache methods]] 8972*a3141fd3SAndroid Build Coastguard Worker ** ^SQLite invokes the xCreate() method to construct a new cache instance. 8973*a3141fd3SAndroid Build Coastguard Worker ** SQLite will typically create one cache instance for each open database file, 8974*a3141fd3SAndroid Build Coastguard Worker ** though this is not guaranteed. ^The 8975*a3141fd3SAndroid Build Coastguard Worker ** first parameter, szPage, is the size in bytes of the pages that must 8976*a3141fd3SAndroid Build Coastguard Worker ** be allocated by the cache. ^szPage will always a power of two. ^The 8977*a3141fd3SAndroid Build Coastguard Worker ** second parameter szExtra is a number of bytes of extra storage 8978*a3141fd3SAndroid Build Coastguard Worker ** associated with each page cache entry. ^The szExtra parameter will 8979*a3141fd3SAndroid Build Coastguard Worker ** a number less than 250. SQLite will use the 8980*a3141fd3SAndroid Build Coastguard Worker ** extra szExtra bytes on each page to store metadata about the underlying 8981*a3141fd3SAndroid Build Coastguard Worker ** database page on disk. The value passed into szExtra depends 8982*a3141fd3SAndroid Build Coastguard Worker ** on the SQLite version, the target platform, and how SQLite was compiled. 8983*a3141fd3SAndroid Build Coastguard Worker ** ^The third argument to xCreate(), bPurgeable, is true if the cache being 8984*a3141fd3SAndroid Build Coastguard Worker ** created will be used to cache database pages of a file stored on disk, or 8985*a3141fd3SAndroid Build Coastguard Worker ** false if it is used for an in-memory database. The cache implementation 8986*a3141fd3SAndroid Build Coastguard Worker ** does not have to do anything special based with the value of bPurgeable; 8987*a3141fd3SAndroid Build Coastguard Worker ** it is purely advisory. ^On a cache where bPurgeable is false, SQLite will 8988*a3141fd3SAndroid Build Coastguard Worker ** never invoke xUnpin() except to deliberately delete a page. 8989*a3141fd3SAndroid Build Coastguard Worker ** ^In other words, calls to xUnpin() on a cache with bPurgeable set to 8990*a3141fd3SAndroid Build Coastguard Worker ** false will always have the "discard" flag set to true. 8991*a3141fd3SAndroid Build Coastguard Worker ** ^Hence, a cache created with bPurgeable false will 8992*a3141fd3SAndroid Build Coastguard Worker ** never contain any unpinned pages. 8993*a3141fd3SAndroid Build Coastguard Worker ** 8994*a3141fd3SAndroid Build Coastguard Worker ** [[the xCachesize() page cache method]] 8995*a3141fd3SAndroid Build Coastguard Worker ** ^(The xCachesize() method may be called at any time by SQLite to set the 8996*a3141fd3SAndroid Build Coastguard Worker ** suggested maximum cache-size (number of pages stored by) the cache 8997*a3141fd3SAndroid Build Coastguard Worker ** instance passed as the first argument. This is the value configured using 8998*a3141fd3SAndroid Build Coastguard Worker ** the SQLite "[PRAGMA cache_size]" command.)^ As with the bPurgeable 8999*a3141fd3SAndroid Build Coastguard Worker ** parameter, the implementation is not required to do anything with this 9000*a3141fd3SAndroid Build Coastguard Worker ** value; it is advisory only. 9001*a3141fd3SAndroid Build Coastguard Worker ** 9002*a3141fd3SAndroid Build Coastguard Worker ** [[the xPagecount() page cache methods]] 9003*a3141fd3SAndroid Build Coastguard Worker ** The xPagecount() method must return the number of pages currently 9004*a3141fd3SAndroid Build Coastguard Worker ** stored in the cache, both pinned and unpinned. 9005*a3141fd3SAndroid Build Coastguard Worker ** 9006*a3141fd3SAndroid Build Coastguard Worker ** [[the xFetch() page cache methods]] 9007*a3141fd3SAndroid Build Coastguard Worker ** The xFetch() method locates a page in the cache and returns a pointer to 9008*a3141fd3SAndroid Build Coastguard Worker ** an sqlite3_pcache_page object associated with that page, or a NULL pointer. 9009*a3141fd3SAndroid Build Coastguard Worker ** The pBuf element of the returned sqlite3_pcache_page object will be a 9010*a3141fd3SAndroid Build Coastguard Worker ** pointer to a buffer of szPage bytes used to store the content of a 9011*a3141fd3SAndroid Build Coastguard Worker ** single database page. The pExtra element of sqlite3_pcache_page will be 9012*a3141fd3SAndroid Build Coastguard Worker ** a pointer to the szExtra bytes of extra storage that SQLite has requested 9013*a3141fd3SAndroid Build Coastguard Worker ** for each entry in the page cache. 9014*a3141fd3SAndroid Build Coastguard Worker ** 9015*a3141fd3SAndroid Build Coastguard Worker ** The page to be fetched is determined by the key. ^The minimum key value 9016*a3141fd3SAndroid Build Coastguard Worker ** is 1. After it has been retrieved using xFetch, the page is considered 9017*a3141fd3SAndroid Build Coastguard Worker ** to be "pinned". 9018*a3141fd3SAndroid Build Coastguard Worker ** 9019*a3141fd3SAndroid Build Coastguard Worker ** If the requested page is already in the page cache, then the page cache 9020*a3141fd3SAndroid Build Coastguard Worker ** implementation must return a pointer to the page buffer with its content 9021*a3141fd3SAndroid Build Coastguard Worker ** intact. If the requested page is not already in the cache, then the 9022*a3141fd3SAndroid Build Coastguard Worker ** cache implementation should use the value of the createFlag 9023*a3141fd3SAndroid Build Coastguard Worker ** parameter to help it determined what action to take: 9024*a3141fd3SAndroid Build Coastguard Worker ** 9025*a3141fd3SAndroid Build Coastguard Worker ** <table border=1 width=85% align=center> 9026*a3141fd3SAndroid Build Coastguard Worker ** <tr><th> createFlag <th> Behavior when page is not already in cache 9027*a3141fd3SAndroid Build Coastguard Worker ** <tr><td> 0 <td> Do not allocate a new page. Return NULL. 9028*a3141fd3SAndroid Build Coastguard Worker ** <tr><td> 1 <td> Allocate a new page if it easy and convenient to do so. 9029*a3141fd3SAndroid Build Coastguard Worker ** Otherwise return NULL. 9030*a3141fd3SAndroid Build Coastguard Worker ** <tr><td> 2 <td> Make every effort to allocate a new page. Only return 9031*a3141fd3SAndroid Build Coastguard Worker ** NULL if allocating a new page is effectively impossible. 9032*a3141fd3SAndroid Build Coastguard Worker ** </table> 9033*a3141fd3SAndroid Build Coastguard Worker ** 9034*a3141fd3SAndroid Build Coastguard Worker ** ^(SQLite will normally invoke xFetch() with a createFlag of 0 or 1. SQLite 9035*a3141fd3SAndroid Build Coastguard Worker ** will only use a createFlag of 2 after a prior call with a createFlag of 1 9036*a3141fd3SAndroid Build Coastguard Worker ** failed.)^ In between the xFetch() calls, SQLite may 9037*a3141fd3SAndroid Build Coastguard Worker ** attempt to unpin one or more cache pages by spilling the content of 9038*a3141fd3SAndroid Build Coastguard Worker ** pinned pages to disk and synching the operating system disk cache. 9039*a3141fd3SAndroid Build Coastguard Worker ** 9040*a3141fd3SAndroid Build Coastguard Worker ** [[the xUnpin() page cache method]] 9041*a3141fd3SAndroid Build Coastguard Worker ** ^xUnpin() is called by SQLite with a pointer to a currently pinned page 9042*a3141fd3SAndroid Build Coastguard Worker ** as its second argument. If the third parameter, discard, is non-zero, 9043*a3141fd3SAndroid Build Coastguard Worker ** then the page must be evicted from the cache. 9044*a3141fd3SAndroid Build Coastguard Worker ** ^If the discard parameter is 9045*a3141fd3SAndroid Build Coastguard Worker ** zero, then the page may be discarded or retained at the discretion of 9046*a3141fd3SAndroid Build Coastguard Worker ** page cache implementation. ^The page cache implementation 9047*a3141fd3SAndroid Build Coastguard Worker ** may choose to evict unpinned pages at any time. 9048*a3141fd3SAndroid Build Coastguard Worker ** 9049*a3141fd3SAndroid Build Coastguard Worker ** The cache must not perform any reference counting. A single 9050*a3141fd3SAndroid Build Coastguard Worker ** call to xUnpin() unpins the page regardless of the number of prior calls 9051*a3141fd3SAndroid Build Coastguard Worker ** to xFetch(). 9052*a3141fd3SAndroid Build Coastguard Worker ** 9053*a3141fd3SAndroid Build Coastguard Worker ** [[the xRekey() page cache methods]] 9054*a3141fd3SAndroid Build Coastguard Worker ** The xRekey() method is used to change the key value associated with the 9055*a3141fd3SAndroid Build Coastguard Worker ** page passed as the second argument. If the cache 9056*a3141fd3SAndroid Build Coastguard Worker ** previously contains an entry associated with newKey, it must be 9057*a3141fd3SAndroid Build Coastguard Worker ** discarded. ^Any prior cache entry associated with newKey is guaranteed not 9058*a3141fd3SAndroid Build Coastguard Worker ** to be pinned. 9059*a3141fd3SAndroid Build Coastguard Worker ** 9060*a3141fd3SAndroid Build Coastguard Worker ** When SQLite calls the xTruncate() method, the cache must discard all 9061*a3141fd3SAndroid Build Coastguard Worker ** existing cache entries with page numbers (keys) greater than or equal 9062*a3141fd3SAndroid Build Coastguard Worker ** to the value of the iLimit parameter passed to xTruncate(). If any 9063*a3141fd3SAndroid Build Coastguard Worker ** of these pages are pinned, they are implicitly unpinned, meaning that 9064*a3141fd3SAndroid Build Coastguard Worker ** they can be safely discarded. 9065*a3141fd3SAndroid Build Coastguard Worker ** 9066*a3141fd3SAndroid Build Coastguard Worker ** [[the xDestroy() page cache method]] 9067*a3141fd3SAndroid Build Coastguard Worker ** ^The xDestroy() method is used to delete a cache allocated by xCreate(). 9068*a3141fd3SAndroid Build Coastguard Worker ** All resources associated with the specified cache should be freed. ^After 9069*a3141fd3SAndroid Build Coastguard Worker ** calling the xDestroy() method, SQLite considers the [sqlite3_pcache*] 9070*a3141fd3SAndroid Build Coastguard Worker ** handle invalid, and will not use it with any other sqlite3_pcache_methods2 9071*a3141fd3SAndroid Build Coastguard Worker ** functions. 9072*a3141fd3SAndroid Build Coastguard Worker ** 9073*a3141fd3SAndroid Build Coastguard Worker ** [[the xShrink() page cache method]] 9074*a3141fd3SAndroid Build Coastguard Worker ** ^SQLite invokes the xShrink() method when it wants the page cache to 9075*a3141fd3SAndroid Build Coastguard Worker ** free up as much of heap memory as possible. The page cache implementation 9076*a3141fd3SAndroid Build Coastguard Worker ** is not obligated to free any memory, but well-behaved implementations should 9077*a3141fd3SAndroid Build Coastguard Worker ** do their best. 9078*a3141fd3SAndroid Build Coastguard Worker */ 9079*a3141fd3SAndroid Build Coastguard Worker typedef struct sqlite3_pcache_methods2 sqlite3_pcache_methods2; 9080*a3141fd3SAndroid Build Coastguard Worker struct sqlite3_pcache_methods2 { 9081*a3141fd3SAndroid Build Coastguard Worker int iVersion; 9082*a3141fd3SAndroid Build Coastguard Worker void *pArg; 9083*a3141fd3SAndroid Build Coastguard Worker int (*xInit)(void*); 9084*a3141fd3SAndroid Build Coastguard Worker void (*xShutdown)(void*); 9085*a3141fd3SAndroid Build Coastguard Worker sqlite3_pcache *(*xCreate)(int szPage, int szExtra, int bPurgeable); 9086*a3141fd3SAndroid Build Coastguard Worker void (*xCachesize)(sqlite3_pcache*, int nCachesize); 9087*a3141fd3SAndroid Build Coastguard Worker int (*xPagecount)(sqlite3_pcache*); 9088*a3141fd3SAndroid Build Coastguard Worker sqlite3_pcache_page *(*xFetch)(sqlite3_pcache*, unsigned key, int createFlag); 9089*a3141fd3SAndroid Build Coastguard Worker void (*xUnpin)(sqlite3_pcache*, sqlite3_pcache_page*, int discard); 9090*a3141fd3SAndroid Build Coastguard Worker void (*xRekey)(sqlite3_pcache*, sqlite3_pcache_page*, 9091*a3141fd3SAndroid Build Coastguard Worker unsigned oldKey, unsigned newKey); 9092*a3141fd3SAndroid Build Coastguard Worker void (*xTruncate)(sqlite3_pcache*, unsigned iLimit); 9093*a3141fd3SAndroid Build Coastguard Worker void (*xDestroy)(sqlite3_pcache*); 9094*a3141fd3SAndroid Build Coastguard Worker void (*xShrink)(sqlite3_pcache*); 9095*a3141fd3SAndroid Build Coastguard Worker }; 9096*a3141fd3SAndroid Build Coastguard Worker 9097*a3141fd3SAndroid Build Coastguard Worker /* 9098*a3141fd3SAndroid Build Coastguard Worker ** This is the obsolete pcache_methods object that has now been replaced 9099*a3141fd3SAndroid Build Coastguard Worker ** by sqlite3_pcache_methods2. This object is not used by SQLite. It is 9100*a3141fd3SAndroid Build Coastguard Worker ** retained in the header file for backwards compatibility only. 9101*a3141fd3SAndroid Build Coastguard Worker */ 9102*a3141fd3SAndroid Build Coastguard Worker typedef struct sqlite3_pcache_methods sqlite3_pcache_methods; 9103*a3141fd3SAndroid Build Coastguard Worker struct sqlite3_pcache_methods { 9104*a3141fd3SAndroid Build Coastguard Worker void *pArg; 9105*a3141fd3SAndroid Build Coastguard Worker int (*xInit)(void*); 9106*a3141fd3SAndroid Build Coastguard Worker void (*xShutdown)(void*); 9107*a3141fd3SAndroid Build Coastguard Worker sqlite3_pcache *(*xCreate)(int szPage, int bPurgeable); 9108*a3141fd3SAndroid Build Coastguard Worker void (*xCachesize)(sqlite3_pcache*, int nCachesize); 9109*a3141fd3SAndroid Build Coastguard Worker int (*xPagecount)(sqlite3_pcache*); 9110*a3141fd3SAndroid Build Coastguard Worker void *(*xFetch)(sqlite3_pcache*, unsigned key, int createFlag); 9111*a3141fd3SAndroid Build Coastguard Worker void (*xUnpin)(sqlite3_pcache*, void*, int discard); 9112*a3141fd3SAndroid Build Coastguard Worker void (*xRekey)(sqlite3_pcache*, void*, unsigned oldKey, unsigned newKey); 9113*a3141fd3SAndroid Build Coastguard Worker void (*xTruncate)(sqlite3_pcache*, unsigned iLimit); 9114*a3141fd3SAndroid Build Coastguard Worker void (*xDestroy)(sqlite3_pcache*); 9115*a3141fd3SAndroid Build Coastguard Worker }; 9116*a3141fd3SAndroid Build Coastguard Worker 9117*a3141fd3SAndroid Build Coastguard Worker 9118*a3141fd3SAndroid Build Coastguard Worker /* 9119*a3141fd3SAndroid Build Coastguard Worker ** CAPI3REF: Online Backup Object 9120*a3141fd3SAndroid Build Coastguard Worker ** 9121*a3141fd3SAndroid Build Coastguard Worker ** The sqlite3_backup object records state information about an ongoing 9122*a3141fd3SAndroid Build Coastguard Worker ** online backup operation. ^The sqlite3_backup object is created by 9123*a3141fd3SAndroid Build Coastguard Worker ** a call to [sqlite3_backup_init()] and is destroyed by a call to 9124*a3141fd3SAndroid Build Coastguard Worker ** [sqlite3_backup_finish()]. 9125*a3141fd3SAndroid Build Coastguard Worker ** 9126*a3141fd3SAndroid Build Coastguard Worker ** See Also: [Using the SQLite Online Backup API] 9127*a3141fd3SAndroid Build Coastguard Worker */ 9128*a3141fd3SAndroid Build Coastguard Worker typedef struct sqlite3_backup sqlite3_backup; 9129*a3141fd3SAndroid Build Coastguard Worker 9130*a3141fd3SAndroid Build Coastguard Worker /* 9131*a3141fd3SAndroid Build Coastguard Worker ** CAPI3REF: Online Backup API. 9132*a3141fd3SAndroid Build Coastguard Worker ** 9133*a3141fd3SAndroid Build Coastguard Worker ** The backup API copies the content of one database into another. 9134*a3141fd3SAndroid Build Coastguard Worker ** It is useful either for creating backups of databases or 9135*a3141fd3SAndroid Build Coastguard Worker ** for copying in-memory databases to or from persistent files. 9136*a3141fd3SAndroid Build Coastguard Worker ** 9137*a3141fd3SAndroid Build Coastguard Worker ** See Also: [Using the SQLite Online Backup API] 9138*a3141fd3SAndroid Build Coastguard Worker ** 9139*a3141fd3SAndroid Build Coastguard Worker ** ^SQLite holds a write transaction open on the destination database file 9140*a3141fd3SAndroid Build Coastguard Worker ** for the duration of the backup operation. 9141*a3141fd3SAndroid Build Coastguard Worker ** ^The source database is read-locked only while it is being read; 9142*a3141fd3SAndroid Build Coastguard Worker ** it is not locked continuously for the entire backup operation. 9143*a3141fd3SAndroid Build Coastguard Worker ** ^Thus, the backup may be performed on a live source database without 9144*a3141fd3SAndroid Build Coastguard Worker ** preventing other database connections from 9145*a3141fd3SAndroid Build Coastguard Worker ** reading or writing to the source database while the backup is underway. 9146*a3141fd3SAndroid Build Coastguard Worker ** 9147*a3141fd3SAndroid Build Coastguard Worker ** ^(To perform a backup operation: 9148*a3141fd3SAndroid Build Coastguard Worker ** <ol> 9149*a3141fd3SAndroid Build Coastguard Worker ** <li><b>sqlite3_backup_init()</b> is called once to initialize the 9150*a3141fd3SAndroid Build Coastguard Worker ** backup, 9151*a3141fd3SAndroid Build Coastguard Worker ** <li><b>sqlite3_backup_step()</b> is called one or more times to transfer 9152*a3141fd3SAndroid Build Coastguard Worker ** the data between the two databases, and finally 9153*a3141fd3SAndroid Build Coastguard Worker ** <li><b>sqlite3_backup_finish()</b> is called to release all resources 9154*a3141fd3SAndroid Build Coastguard Worker ** associated with the backup operation. 9155*a3141fd3SAndroid Build Coastguard Worker ** </ol>)^ 9156*a3141fd3SAndroid Build Coastguard Worker ** There should be exactly one call to sqlite3_backup_finish() for each 9157*a3141fd3SAndroid Build Coastguard Worker ** successful call to sqlite3_backup_init(). 9158*a3141fd3SAndroid Build Coastguard Worker ** 9159*a3141fd3SAndroid Build Coastguard Worker ** [[sqlite3_backup_init()]] <b>sqlite3_backup_init()</b> 9160*a3141fd3SAndroid Build Coastguard Worker ** 9161*a3141fd3SAndroid Build Coastguard Worker ** ^The D and N arguments to sqlite3_backup_init(D,N,S,M) are the 9162*a3141fd3SAndroid Build Coastguard Worker ** [database connection] associated with the destination database 9163*a3141fd3SAndroid Build Coastguard Worker ** and the database name, respectively. 9164*a3141fd3SAndroid Build Coastguard Worker ** ^The database name is "main" for the main database, "temp" for the 9165*a3141fd3SAndroid Build Coastguard Worker ** temporary database, or the name specified after the AS keyword in 9166*a3141fd3SAndroid Build Coastguard Worker ** an [ATTACH] statement for an attached database. 9167*a3141fd3SAndroid Build Coastguard Worker ** ^The S and M arguments passed to 9168*a3141fd3SAndroid Build Coastguard Worker ** sqlite3_backup_init(D,N,S,M) identify the [database connection] 9169*a3141fd3SAndroid Build Coastguard Worker ** and database name of the source database, respectively. 9170*a3141fd3SAndroid Build Coastguard Worker ** ^The source and destination [database connections] (parameters S and D) 9171*a3141fd3SAndroid Build Coastguard Worker ** must be different or else sqlite3_backup_init(D,N,S,M) will fail with 9172*a3141fd3SAndroid Build Coastguard Worker ** an error. 9173*a3141fd3SAndroid Build Coastguard Worker ** 9174*a3141fd3SAndroid Build Coastguard Worker ** ^A call to sqlite3_backup_init() will fail, returning NULL, if 9175*a3141fd3SAndroid Build Coastguard Worker ** there is already a read or read-write transaction open on the 9176*a3141fd3SAndroid Build Coastguard Worker ** destination database. 9177*a3141fd3SAndroid Build Coastguard Worker ** 9178*a3141fd3SAndroid Build Coastguard Worker ** ^If an error occurs within sqlite3_backup_init(D,N,S,M), then NULL is 9179*a3141fd3SAndroid Build Coastguard Worker ** returned and an error code and error message are stored in the 9180*a3141fd3SAndroid Build Coastguard Worker ** destination [database connection] D. 9181*a3141fd3SAndroid Build Coastguard Worker ** ^The error code and message for the failed call to sqlite3_backup_init() 9182*a3141fd3SAndroid Build Coastguard Worker ** can be retrieved using the [sqlite3_errcode()], [sqlite3_errmsg()], and/or 9183*a3141fd3SAndroid Build Coastguard Worker ** [sqlite3_errmsg16()] functions. 9184*a3141fd3SAndroid Build Coastguard Worker ** ^A successful call to sqlite3_backup_init() returns a pointer to an 9185*a3141fd3SAndroid Build Coastguard Worker ** [sqlite3_backup] object. 9186*a3141fd3SAndroid Build Coastguard Worker ** ^The [sqlite3_backup] object may be used with the sqlite3_backup_step() and 9187*a3141fd3SAndroid Build Coastguard Worker ** sqlite3_backup_finish() functions to perform the specified backup 9188*a3141fd3SAndroid Build Coastguard Worker ** operation. 9189*a3141fd3SAndroid Build Coastguard Worker ** 9190*a3141fd3SAndroid Build Coastguard Worker ** [[sqlite3_backup_step()]] <b>sqlite3_backup_step()</b> 9191*a3141fd3SAndroid Build Coastguard Worker ** 9192*a3141fd3SAndroid Build Coastguard Worker ** ^Function sqlite3_backup_step(B,N) will copy up to N pages between 9193*a3141fd3SAndroid Build Coastguard Worker ** the source and destination databases specified by [sqlite3_backup] object B. 9194*a3141fd3SAndroid Build Coastguard Worker ** ^If N is negative, all remaining source pages are copied. 9195*a3141fd3SAndroid Build Coastguard Worker ** ^If sqlite3_backup_step(B,N) successfully copies N pages and there 9196*a3141fd3SAndroid Build Coastguard Worker ** are still more pages to be copied, then the function returns [SQLITE_OK]. 9197*a3141fd3SAndroid Build Coastguard Worker ** ^If sqlite3_backup_step(B,N) successfully finishes copying all pages 9198*a3141fd3SAndroid Build Coastguard Worker ** from source to destination, then it returns [SQLITE_DONE]. 9199*a3141fd3SAndroid Build Coastguard Worker ** ^If an error occurs while running sqlite3_backup_step(B,N), 9200*a3141fd3SAndroid Build Coastguard Worker ** then an [error code] is returned. ^As well as [SQLITE_OK] and 9201*a3141fd3SAndroid Build Coastguard Worker ** [SQLITE_DONE], a call to sqlite3_backup_step() may return [SQLITE_READONLY], 9202*a3141fd3SAndroid Build Coastguard Worker ** [SQLITE_NOMEM], [SQLITE_BUSY], [SQLITE_LOCKED], or an 9203*a3141fd3SAndroid Build Coastguard Worker ** [SQLITE_IOERR_ACCESS | SQLITE_IOERR_XXX] extended error code. 9204*a3141fd3SAndroid Build Coastguard Worker ** 9205*a3141fd3SAndroid Build Coastguard Worker ** ^(The sqlite3_backup_step() might return [SQLITE_READONLY] if 9206*a3141fd3SAndroid Build Coastguard Worker ** <ol> 9207*a3141fd3SAndroid Build Coastguard Worker ** <li> the destination database was opened read-only, or 9208*a3141fd3SAndroid Build Coastguard Worker ** <li> the destination database is using write-ahead-log journaling 9209*a3141fd3SAndroid Build Coastguard Worker ** and the destination and source page sizes differ, or 9210*a3141fd3SAndroid Build Coastguard Worker ** <li> the destination database is an in-memory database and the 9211*a3141fd3SAndroid Build Coastguard Worker ** destination and source page sizes differ. 9212*a3141fd3SAndroid Build Coastguard Worker ** </ol>)^ 9213*a3141fd3SAndroid Build Coastguard Worker ** 9214*a3141fd3SAndroid Build Coastguard Worker ** ^If sqlite3_backup_step() cannot obtain a required file-system lock, then 9215*a3141fd3SAndroid Build Coastguard Worker ** the [sqlite3_busy_handler | busy-handler function] 9216*a3141fd3SAndroid Build Coastguard Worker ** is invoked (if one is specified). ^If the 9217*a3141fd3SAndroid Build Coastguard Worker ** busy-handler returns non-zero before the lock is available, then 9218*a3141fd3SAndroid Build Coastguard Worker ** [SQLITE_BUSY] is returned to the caller. ^In this case the call to 9219*a3141fd3SAndroid Build Coastguard Worker ** sqlite3_backup_step() can be retried later. ^If the source 9220*a3141fd3SAndroid Build Coastguard Worker ** [database connection] 9221*a3141fd3SAndroid Build Coastguard Worker ** is being used to write to the source database when sqlite3_backup_step() 9222*a3141fd3SAndroid Build Coastguard Worker ** is called, then [SQLITE_LOCKED] is returned immediately. ^Again, in this 9223*a3141fd3SAndroid Build Coastguard Worker ** case the call to sqlite3_backup_step() can be retried later on. ^(If 9224*a3141fd3SAndroid Build Coastguard Worker ** [SQLITE_IOERR_ACCESS | SQLITE_IOERR_XXX], [SQLITE_NOMEM], or 9225*a3141fd3SAndroid Build Coastguard Worker ** [SQLITE_READONLY] is returned, then 9226*a3141fd3SAndroid Build Coastguard Worker ** there is no point in retrying the call to sqlite3_backup_step(). These 9227*a3141fd3SAndroid Build Coastguard Worker ** errors are considered fatal.)^ The application must accept 9228*a3141fd3SAndroid Build Coastguard Worker ** that the backup operation has failed and pass the backup operation handle 9229*a3141fd3SAndroid Build Coastguard Worker ** to the sqlite3_backup_finish() to release associated resources. 9230*a3141fd3SAndroid Build Coastguard Worker ** 9231*a3141fd3SAndroid Build Coastguard Worker ** ^The first call to sqlite3_backup_step() obtains an exclusive lock 9232*a3141fd3SAndroid Build Coastguard Worker ** on the destination file. ^The exclusive lock is not released until either 9233*a3141fd3SAndroid Build Coastguard Worker ** sqlite3_backup_finish() is called or the backup operation is complete 9234*a3141fd3SAndroid Build Coastguard Worker ** and sqlite3_backup_step() returns [SQLITE_DONE]. ^Every call to 9235*a3141fd3SAndroid Build Coastguard Worker ** sqlite3_backup_step() obtains a [shared lock] on the source database that 9236*a3141fd3SAndroid Build Coastguard Worker ** lasts for the duration of the sqlite3_backup_step() call. 9237*a3141fd3SAndroid Build Coastguard Worker ** ^Because the source database is not locked between calls to 9238*a3141fd3SAndroid Build Coastguard Worker ** sqlite3_backup_step(), the source database may be modified mid-way 9239*a3141fd3SAndroid Build Coastguard Worker ** through the backup process. ^If the source database is modified by an 9240*a3141fd3SAndroid Build Coastguard Worker ** external process or via a database connection other than the one being 9241*a3141fd3SAndroid Build Coastguard Worker ** used by the backup operation, then the backup will be automatically 9242*a3141fd3SAndroid Build Coastguard Worker ** restarted by the next call to sqlite3_backup_step(). ^If the source 9243*a3141fd3SAndroid Build Coastguard Worker ** database is modified by the using the same database connection as is used 9244*a3141fd3SAndroid Build Coastguard Worker ** by the backup operation, then the backup database is automatically 9245*a3141fd3SAndroid Build Coastguard Worker ** updated at the same time. 9246*a3141fd3SAndroid Build Coastguard Worker ** 9247*a3141fd3SAndroid Build Coastguard Worker ** [[sqlite3_backup_finish()]] <b>sqlite3_backup_finish()</b> 9248*a3141fd3SAndroid Build Coastguard Worker ** 9249*a3141fd3SAndroid Build Coastguard Worker ** When sqlite3_backup_step() has returned [SQLITE_DONE], or when the 9250*a3141fd3SAndroid Build Coastguard Worker ** application wishes to abandon the backup operation, the application 9251*a3141fd3SAndroid Build Coastguard Worker ** should destroy the [sqlite3_backup] by passing it to sqlite3_backup_finish(). 9252*a3141fd3SAndroid Build Coastguard Worker ** ^The sqlite3_backup_finish() interfaces releases all 9253*a3141fd3SAndroid Build Coastguard Worker ** resources associated with the [sqlite3_backup] object. 9254*a3141fd3SAndroid Build Coastguard Worker ** ^If sqlite3_backup_step() has not yet returned [SQLITE_DONE], then any 9255*a3141fd3SAndroid Build Coastguard Worker ** active write-transaction on the destination database is rolled back. 9256*a3141fd3SAndroid Build Coastguard Worker ** The [sqlite3_backup] object is invalid 9257*a3141fd3SAndroid Build Coastguard Worker ** and may not be used following a call to sqlite3_backup_finish(). 9258*a3141fd3SAndroid Build Coastguard Worker ** 9259*a3141fd3SAndroid Build Coastguard Worker ** ^The value returned by sqlite3_backup_finish is [SQLITE_OK] if no 9260*a3141fd3SAndroid Build Coastguard Worker ** sqlite3_backup_step() errors occurred, regardless or whether or not 9261*a3141fd3SAndroid Build Coastguard Worker ** sqlite3_backup_step() completed. 9262*a3141fd3SAndroid Build Coastguard Worker ** ^If an out-of-memory condition or IO error occurred during any prior 9263*a3141fd3SAndroid Build Coastguard Worker ** sqlite3_backup_step() call on the same [sqlite3_backup] object, then 9264*a3141fd3SAndroid Build Coastguard Worker ** sqlite3_backup_finish() returns the corresponding [error code]. 9265*a3141fd3SAndroid Build Coastguard Worker ** 9266*a3141fd3SAndroid Build Coastguard Worker ** ^A return of [SQLITE_BUSY] or [SQLITE_LOCKED] from sqlite3_backup_step() 9267*a3141fd3SAndroid Build Coastguard Worker ** is not a permanent error and does not affect the return value of 9268*a3141fd3SAndroid Build Coastguard Worker ** sqlite3_backup_finish(). 9269*a3141fd3SAndroid Build Coastguard Worker ** 9270*a3141fd3SAndroid Build Coastguard Worker ** [[sqlite3_backup_remaining()]] [[sqlite3_backup_pagecount()]] 9271*a3141fd3SAndroid Build Coastguard Worker ** <b>sqlite3_backup_remaining() and sqlite3_backup_pagecount()</b> 9272*a3141fd3SAndroid Build Coastguard Worker ** 9273*a3141fd3SAndroid Build Coastguard Worker ** ^The sqlite3_backup_remaining() routine returns the number of pages still 9274*a3141fd3SAndroid Build Coastguard Worker ** to be backed up at the conclusion of the most recent sqlite3_backup_step(). 9275*a3141fd3SAndroid Build Coastguard Worker ** ^The sqlite3_backup_pagecount() routine returns the total number of pages 9276*a3141fd3SAndroid Build Coastguard Worker ** in the source database at the conclusion of the most recent 9277*a3141fd3SAndroid Build Coastguard Worker ** sqlite3_backup_step(). 9278*a3141fd3SAndroid Build Coastguard Worker ** ^(The values returned by these functions are only updated by 9279*a3141fd3SAndroid Build Coastguard Worker ** sqlite3_backup_step(). If the source database is modified in a way that 9280*a3141fd3SAndroid Build Coastguard Worker ** changes the size of the source database or the number of pages remaining, 9281*a3141fd3SAndroid Build Coastguard Worker ** those changes are not reflected in the output of sqlite3_backup_pagecount() 9282*a3141fd3SAndroid Build Coastguard Worker ** and sqlite3_backup_remaining() until after the next 9283*a3141fd3SAndroid Build Coastguard Worker ** sqlite3_backup_step().)^ 9284*a3141fd3SAndroid Build Coastguard Worker ** 9285*a3141fd3SAndroid Build Coastguard Worker ** <b>Concurrent Usage of Database Handles</b> 9286*a3141fd3SAndroid Build Coastguard Worker ** 9287*a3141fd3SAndroid Build Coastguard Worker ** ^The source [database connection] may be used by the application for other 9288*a3141fd3SAndroid Build Coastguard Worker ** purposes while a backup operation is underway or being initialized. 9289*a3141fd3SAndroid Build Coastguard Worker ** ^If SQLite is compiled and configured to support threadsafe database 9290*a3141fd3SAndroid Build Coastguard Worker ** connections, then the source database connection may be used concurrently 9291*a3141fd3SAndroid Build Coastguard Worker ** from within other threads. 9292*a3141fd3SAndroid Build Coastguard Worker ** 9293*a3141fd3SAndroid Build Coastguard Worker ** However, the application must guarantee that the destination 9294*a3141fd3SAndroid Build Coastguard Worker ** [database connection] is not passed to any other API (by any thread) after 9295*a3141fd3SAndroid Build Coastguard Worker ** sqlite3_backup_init() is called and before the corresponding call to 9296*a3141fd3SAndroid Build Coastguard Worker ** sqlite3_backup_finish(). SQLite does not currently check to see 9297*a3141fd3SAndroid Build Coastguard Worker ** if the application incorrectly accesses the destination [database connection] 9298*a3141fd3SAndroid Build Coastguard Worker ** and so no error code is reported, but the operations may malfunction 9299*a3141fd3SAndroid Build Coastguard Worker ** nevertheless. Use of the destination database connection while a 9300*a3141fd3SAndroid Build Coastguard Worker ** backup is in progress might also cause a mutex deadlock. 9301*a3141fd3SAndroid Build Coastguard Worker ** 9302*a3141fd3SAndroid Build Coastguard Worker ** If running in [shared cache mode], the application must 9303*a3141fd3SAndroid Build Coastguard Worker ** guarantee that the shared cache used by the destination database 9304*a3141fd3SAndroid Build Coastguard Worker ** is not accessed while the backup is running. In practice this means 9305*a3141fd3SAndroid Build Coastguard Worker ** that the application must guarantee that the disk file being 9306*a3141fd3SAndroid Build Coastguard Worker ** backed up to is not accessed by any connection within the process, 9307*a3141fd3SAndroid Build Coastguard Worker ** not just the specific connection that was passed to sqlite3_backup_init(). 9308*a3141fd3SAndroid Build Coastguard Worker ** 9309*a3141fd3SAndroid Build Coastguard Worker ** The [sqlite3_backup] object itself is partially threadsafe. Multiple 9310*a3141fd3SAndroid Build Coastguard Worker ** threads may safely make multiple concurrent calls to sqlite3_backup_step(). 9311*a3141fd3SAndroid Build Coastguard Worker ** However, the sqlite3_backup_remaining() and sqlite3_backup_pagecount() 9312*a3141fd3SAndroid Build Coastguard Worker ** APIs are not strictly speaking threadsafe. If they are invoked at the 9313*a3141fd3SAndroid Build Coastguard Worker ** same time as another thread is invoking sqlite3_backup_step() it is 9314*a3141fd3SAndroid Build Coastguard Worker ** possible that they return invalid values. 9315*a3141fd3SAndroid Build Coastguard Worker */ 9316*a3141fd3SAndroid Build Coastguard Worker SQLITE_API sqlite3_backup *sqlite3_backup_init( 9317*a3141fd3SAndroid Build Coastguard Worker sqlite3 *pDest, /* Destination database handle */ 9318*a3141fd3SAndroid Build Coastguard Worker const char *zDestName, /* Destination database name */ 9319*a3141fd3SAndroid Build Coastguard Worker sqlite3 *pSource, /* Source database handle */ 9320*a3141fd3SAndroid Build Coastguard Worker const char *zSourceName /* Source database name */ 9321*a3141fd3SAndroid Build Coastguard Worker ); 9322*a3141fd3SAndroid Build Coastguard Worker SQLITE_API int sqlite3_backup_step(sqlite3_backup *p, int nPage); 9323*a3141fd3SAndroid Build Coastguard Worker SQLITE_API int sqlite3_backup_finish(sqlite3_backup *p); 9324*a3141fd3SAndroid Build Coastguard Worker SQLITE_API int sqlite3_backup_remaining(sqlite3_backup *p); 9325*a3141fd3SAndroid Build Coastguard Worker SQLITE_API int sqlite3_backup_pagecount(sqlite3_backup *p); 9326*a3141fd3SAndroid Build Coastguard Worker 9327*a3141fd3SAndroid Build Coastguard Worker /* 9328*a3141fd3SAndroid Build Coastguard Worker ** CAPI3REF: Unlock Notification 9329*a3141fd3SAndroid Build Coastguard Worker ** METHOD: sqlite3 9330*a3141fd3SAndroid Build Coastguard Worker ** 9331*a3141fd3SAndroid Build Coastguard Worker ** ^When running in shared-cache mode, a database operation may fail with 9332*a3141fd3SAndroid Build Coastguard Worker ** an [SQLITE_LOCKED] error if the required locks on the shared-cache or 9333*a3141fd3SAndroid Build Coastguard Worker ** individual tables within the shared-cache cannot be obtained. See 9334*a3141fd3SAndroid Build Coastguard Worker ** [SQLite Shared-Cache Mode] for a description of shared-cache locking. 9335*a3141fd3SAndroid Build Coastguard Worker ** ^This API may be used to register a callback that SQLite will invoke 9336*a3141fd3SAndroid Build Coastguard Worker ** when the connection currently holding the required lock relinquishes it. 9337*a3141fd3SAndroid Build Coastguard Worker ** ^This API is only available if the library was compiled with the 9338*a3141fd3SAndroid Build Coastguard Worker ** [SQLITE_ENABLE_UNLOCK_NOTIFY] C-preprocessor symbol defined. 9339*a3141fd3SAndroid Build Coastguard Worker ** 9340*a3141fd3SAndroid Build Coastguard Worker ** See Also: [Using the SQLite Unlock Notification Feature]. 9341*a3141fd3SAndroid Build Coastguard Worker ** 9342*a3141fd3SAndroid Build Coastguard Worker ** ^Shared-cache locks are released when a database connection concludes 9343*a3141fd3SAndroid Build Coastguard Worker ** its current transaction, either by committing it or rolling it back. 9344*a3141fd3SAndroid Build Coastguard Worker ** 9345*a3141fd3SAndroid Build Coastguard Worker ** ^When a connection (known as the blocked connection) fails to obtain a 9346*a3141fd3SAndroid Build Coastguard Worker ** shared-cache lock and SQLITE_LOCKED is returned to the caller, the 9347*a3141fd3SAndroid Build Coastguard Worker ** identity of the database connection (the blocking connection) that 9348*a3141fd3SAndroid Build Coastguard Worker ** has locked the required resource is stored internally. ^After an 9349*a3141fd3SAndroid Build Coastguard Worker ** application receives an SQLITE_LOCKED error, it may call the 9350*a3141fd3SAndroid Build Coastguard Worker ** sqlite3_unlock_notify() method with the blocked connection handle as 9351*a3141fd3SAndroid Build Coastguard Worker ** the first argument to register for a callback that will be invoked 9352*a3141fd3SAndroid Build Coastguard Worker ** when the blocking connections current transaction is concluded. ^The 9353*a3141fd3SAndroid Build Coastguard Worker ** callback is invoked from within the [sqlite3_step] or [sqlite3_close] 9354*a3141fd3SAndroid Build Coastguard Worker ** call that concludes the blocking connection's transaction. 9355*a3141fd3SAndroid Build Coastguard Worker ** 9356*a3141fd3SAndroid Build Coastguard Worker ** ^(If sqlite3_unlock_notify() is called in a multi-threaded application, 9357*a3141fd3SAndroid Build Coastguard Worker ** there is a chance that the blocking connection will have already 9358*a3141fd3SAndroid Build Coastguard Worker ** concluded its transaction by the time sqlite3_unlock_notify() is invoked. 9359*a3141fd3SAndroid Build Coastguard Worker ** If this happens, then the specified callback is invoked immediately, 9360*a3141fd3SAndroid Build Coastguard Worker ** from within the call to sqlite3_unlock_notify().)^ 9361*a3141fd3SAndroid Build Coastguard Worker ** 9362*a3141fd3SAndroid Build Coastguard Worker ** ^If the blocked connection is attempting to obtain a write-lock on a 9363*a3141fd3SAndroid Build Coastguard Worker ** shared-cache table, and more than one other connection currently holds 9364*a3141fd3SAndroid Build Coastguard Worker ** a read-lock on the same table, then SQLite arbitrarily selects one of 9365*a3141fd3SAndroid Build Coastguard Worker ** the other connections to use as the blocking connection. 9366*a3141fd3SAndroid Build Coastguard Worker ** 9367*a3141fd3SAndroid Build Coastguard Worker ** ^(There may be at most one unlock-notify callback registered by a 9368*a3141fd3SAndroid Build Coastguard Worker ** blocked connection. If sqlite3_unlock_notify() is called when the 9369*a3141fd3SAndroid Build Coastguard Worker ** blocked connection already has a registered unlock-notify callback, 9370*a3141fd3SAndroid Build Coastguard Worker ** then the new callback replaces the old.)^ ^If sqlite3_unlock_notify() is 9371*a3141fd3SAndroid Build Coastguard Worker ** called with a NULL pointer as its second argument, then any existing 9372*a3141fd3SAndroid Build Coastguard Worker ** unlock-notify callback is canceled. ^The blocked connections 9373*a3141fd3SAndroid Build Coastguard Worker ** unlock-notify callback may also be canceled by closing the blocked 9374*a3141fd3SAndroid Build Coastguard Worker ** connection using [sqlite3_close()]. 9375*a3141fd3SAndroid Build Coastguard Worker ** 9376*a3141fd3SAndroid Build Coastguard Worker ** The unlock-notify callback is not reentrant. If an application invokes 9377*a3141fd3SAndroid Build Coastguard Worker ** any sqlite3_xxx API functions from within an unlock-notify callback, a 9378*a3141fd3SAndroid Build Coastguard Worker ** crash or deadlock may be the result. 9379*a3141fd3SAndroid Build Coastguard Worker ** 9380*a3141fd3SAndroid Build Coastguard Worker ** ^Unless deadlock is detected (see below), sqlite3_unlock_notify() always 9381*a3141fd3SAndroid Build Coastguard Worker ** returns SQLITE_OK. 9382*a3141fd3SAndroid Build Coastguard Worker ** 9383*a3141fd3SAndroid Build Coastguard Worker ** <b>Callback Invocation Details</b> 9384*a3141fd3SAndroid Build Coastguard Worker ** 9385*a3141fd3SAndroid Build Coastguard Worker ** When an unlock-notify callback is registered, the application provides a 9386*a3141fd3SAndroid Build Coastguard Worker ** single void* pointer that is passed to the callback when it is invoked. 9387*a3141fd3SAndroid Build Coastguard Worker ** However, the signature of the callback function allows SQLite to pass 9388*a3141fd3SAndroid Build Coastguard Worker ** it an array of void* context pointers. The first argument passed to 9389*a3141fd3SAndroid Build Coastguard Worker ** an unlock-notify callback is a pointer to an array of void* pointers, 9390*a3141fd3SAndroid Build Coastguard Worker ** and the second is the number of entries in the array. 9391*a3141fd3SAndroid Build Coastguard Worker ** 9392*a3141fd3SAndroid Build Coastguard Worker ** When a blocking connection's transaction is concluded, there may be 9393*a3141fd3SAndroid Build Coastguard Worker ** more than one blocked connection that has registered for an unlock-notify 9394*a3141fd3SAndroid Build Coastguard Worker ** callback. ^If two or more such blocked connections have specified the 9395*a3141fd3SAndroid Build Coastguard Worker ** same callback function, then instead of invoking the callback function 9396*a3141fd3SAndroid Build Coastguard Worker ** multiple times, it is invoked once with the set of void* context pointers 9397*a3141fd3SAndroid Build Coastguard Worker ** specified by the blocked connections bundled together into an array. 9398*a3141fd3SAndroid Build Coastguard Worker ** This gives the application an opportunity to prioritize any actions 9399*a3141fd3SAndroid Build Coastguard Worker ** related to the set of unblocked database connections. 9400*a3141fd3SAndroid Build Coastguard Worker ** 9401*a3141fd3SAndroid Build Coastguard Worker ** <b>Deadlock Detection</b> 9402*a3141fd3SAndroid Build Coastguard Worker ** 9403*a3141fd3SAndroid Build Coastguard Worker ** Assuming that after registering for an unlock-notify callback a 9404*a3141fd3SAndroid Build Coastguard Worker ** database waits for the callback to be issued before taking any further 9405*a3141fd3SAndroid Build Coastguard Worker ** action (a reasonable assumption), then using this API may cause the 9406*a3141fd3SAndroid Build Coastguard Worker ** application to deadlock. For example, if connection X is waiting for 9407*a3141fd3SAndroid Build Coastguard Worker ** connection Y's transaction to be concluded, and similarly connection 9408*a3141fd3SAndroid Build Coastguard Worker ** Y is waiting on connection X's transaction, then neither connection 9409*a3141fd3SAndroid Build Coastguard Worker ** will proceed and the system may remain deadlocked indefinitely. 9410*a3141fd3SAndroid Build Coastguard Worker ** 9411*a3141fd3SAndroid Build Coastguard Worker ** To avoid this scenario, the sqlite3_unlock_notify() performs deadlock 9412*a3141fd3SAndroid Build Coastguard Worker ** detection. ^If a given call to sqlite3_unlock_notify() would put the 9413*a3141fd3SAndroid Build Coastguard Worker ** system in a deadlocked state, then SQLITE_LOCKED is returned and no 9414*a3141fd3SAndroid Build Coastguard Worker ** unlock-notify callback is registered. The system is said to be in 9415*a3141fd3SAndroid Build Coastguard Worker ** a deadlocked state if connection A has registered for an unlock-notify 9416*a3141fd3SAndroid Build Coastguard Worker ** callback on the conclusion of connection B's transaction, and connection 9417*a3141fd3SAndroid Build Coastguard Worker ** B has itself registered for an unlock-notify callback when connection 9418*a3141fd3SAndroid Build Coastguard Worker ** A's transaction is concluded. ^Indirect deadlock is also detected, so 9419*a3141fd3SAndroid Build Coastguard Worker ** the system is also considered to be deadlocked if connection B has 9420*a3141fd3SAndroid Build Coastguard Worker ** registered for an unlock-notify callback on the conclusion of connection 9421*a3141fd3SAndroid Build Coastguard Worker ** C's transaction, where connection C is waiting on connection A. ^Any 9422*a3141fd3SAndroid Build Coastguard Worker ** number of levels of indirection are allowed. 9423*a3141fd3SAndroid Build Coastguard Worker ** 9424*a3141fd3SAndroid Build Coastguard Worker ** <b>The "DROP TABLE" Exception</b> 9425*a3141fd3SAndroid Build Coastguard Worker ** 9426*a3141fd3SAndroid Build Coastguard Worker ** When a call to [sqlite3_step()] returns SQLITE_LOCKED, it is almost 9427*a3141fd3SAndroid Build Coastguard Worker ** always appropriate to call sqlite3_unlock_notify(). There is however, 9428*a3141fd3SAndroid Build Coastguard Worker ** one exception. When executing a "DROP TABLE" or "DROP INDEX" statement, 9429*a3141fd3SAndroid Build Coastguard Worker ** SQLite checks if there are any currently executing SELECT statements 9430*a3141fd3SAndroid Build Coastguard Worker ** that belong to the same connection. If there are, SQLITE_LOCKED is 9431*a3141fd3SAndroid Build Coastguard Worker ** returned. In this case there is no "blocking connection", so invoking 9432*a3141fd3SAndroid Build Coastguard Worker ** sqlite3_unlock_notify() results in the unlock-notify callback being 9433*a3141fd3SAndroid Build Coastguard Worker ** invoked immediately. If the application then re-attempts the "DROP TABLE" 9434*a3141fd3SAndroid Build Coastguard Worker ** or "DROP INDEX" query, an infinite loop might be the result. 9435*a3141fd3SAndroid Build Coastguard Worker ** 9436*a3141fd3SAndroid Build Coastguard Worker ** One way around this problem is to check the extended error code returned 9437*a3141fd3SAndroid Build Coastguard Worker ** by an sqlite3_step() call. ^(If there is a blocking connection, then the 9438*a3141fd3SAndroid Build Coastguard Worker ** extended error code is set to SQLITE_LOCKED_SHAREDCACHE. Otherwise, in 9439*a3141fd3SAndroid Build Coastguard Worker ** the special "DROP TABLE/INDEX" case, the extended error code is just 9440*a3141fd3SAndroid Build Coastguard Worker ** SQLITE_LOCKED.)^ 9441*a3141fd3SAndroid Build Coastguard Worker */ 9442*a3141fd3SAndroid Build Coastguard Worker SQLITE_API int sqlite3_unlock_notify( 9443*a3141fd3SAndroid Build Coastguard Worker sqlite3 *pBlocked, /* Waiting connection */ 9444*a3141fd3SAndroid Build Coastguard Worker void (*xNotify)(void **apArg, int nArg), /* Callback function to invoke */ 9445*a3141fd3SAndroid Build Coastguard Worker void *pNotifyArg /* Argument to pass to xNotify */ 9446*a3141fd3SAndroid Build Coastguard Worker ); 9447*a3141fd3SAndroid Build Coastguard Worker 9448*a3141fd3SAndroid Build Coastguard Worker 9449*a3141fd3SAndroid Build Coastguard Worker /* 9450*a3141fd3SAndroid Build Coastguard Worker ** CAPI3REF: String Comparison 9451*a3141fd3SAndroid Build Coastguard Worker ** 9452*a3141fd3SAndroid Build Coastguard Worker ** ^The [sqlite3_stricmp()] and [sqlite3_strnicmp()] APIs allow applications 9453*a3141fd3SAndroid Build Coastguard Worker ** and extensions to compare the contents of two buffers containing UTF-8 9454*a3141fd3SAndroid Build Coastguard Worker ** strings in a case-independent fashion, using the same definition of "case 9455*a3141fd3SAndroid Build Coastguard Worker ** independence" that SQLite uses internally when comparing identifiers. 9456*a3141fd3SAndroid Build Coastguard Worker */ 9457*a3141fd3SAndroid Build Coastguard Worker SQLITE_API int sqlite3_stricmp(const char *, const char *); 9458*a3141fd3SAndroid Build Coastguard Worker SQLITE_API int sqlite3_strnicmp(const char *, const char *, int); 9459*a3141fd3SAndroid Build Coastguard Worker 9460*a3141fd3SAndroid Build Coastguard Worker /* 9461*a3141fd3SAndroid Build Coastguard Worker ** CAPI3REF: String Globbing 9462*a3141fd3SAndroid Build Coastguard Worker * 9463*a3141fd3SAndroid Build Coastguard Worker ** ^The [sqlite3_strglob(P,X)] interface returns zero if and only if 9464*a3141fd3SAndroid Build Coastguard Worker ** string X matches the [GLOB] pattern P. 9465*a3141fd3SAndroid Build Coastguard Worker ** ^The definition of [GLOB] pattern matching used in 9466*a3141fd3SAndroid Build Coastguard Worker ** [sqlite3_strglob(P,X)] is the same as for the "X GLOB P" operator in the 9467*a3141fd3SAndroid Build Coastguard Worker ** SQL dialect understood by SQLite. ^The [sqlite3_strglob(P,X)] function 9468*a3141fd3SAndroid Build Coastguard Worker ** is case sensitive. 9469*a3141fd3SAndroid Build Coastguard Worker ** 9470*a3141fd3SAndroid Build Coastguard Worker ** Note that this routine returns zero on a match and non-zero if the strings 9471*a3141fd3SAndroid Build Coastguard Worker ** do not match, the same as [sqlite3_stricmp()] and [sqlite3_strnicmp()]. 9472*a3141fd3SAndroid Build Coastguard Worker ** 9473*a3141fd3SAndroid Build Coastguard Worker ** See also: [sqlite3_strlike()]. 9474*a3141fd3SAndroid Build Coastguard Worker */ 9475*a3141fd3SAndroid Build Coastguard Worker SQLITE_API int sqlite3_strglob(const char *zGlob, const char *zStr); 9476*a3141fd3SAndroid Build Coastguard Worker 9477*a3141fd3SAndroid Build Coastguard Worker /* 9478*a3141fd3SAndroid Build Coastguard Worker ** CAPI3REF: String LIKE Matching 9479*a3141fd3SAndroid Build Coastguard Worker * 9480*a3141fd3SAndroid Build Coastguard Worker ** ^The [sqlite3_strlike(P,X,E)] interface returns zero if and only if 9481*a3141fd3SAndroid Build Coastguard Worker ** string X matches the [LIKE] pattern P with escape character E. 9482*a3141fd3SAndroid Build Coastguard Worker ** ^The definition of [LIKE] pattern matching used in 9483*a3141fd3SAndroid Build Coastguard Worker ** [sqlite3_strlike(P,X,E)] is the same as for the "X LIKE P ESCAPE E" 9484*a3141fd3SAndroid Build Coastguard Worker ** operator in the SQL dialect understood by SQLite. ^For "X LIKE P" without 9485*a3141fd3SAndroid Build Coastguard Worker ** the ESCAPE clause, set the E parameter of [sqlite3_strlike(P,X,E)] to 0. 9486*a3141fd3SAndroid Build Coastguard Worker ** ^As with the LIKE operator, the [sqlite3_strlike(P,X,E)] function is case 9487*a3141fd3SAndroid Build Coastguard Worker ** insensitive - equivalent upper and lower case ASCII characters match 9488*a3141fd3SAndroid Build Coastguard Worker ** one another. 9489*a3141fd3SAndroid Build Coastguard Worker ** 9490*a3141fd3SAndroid Build Coastguard Worker ** ^The [sqlite3_strlike(P,X,E)] function matches Unicode characters, though 9491*a3141fd3SAndroid Build Coastguard Worker ** only ASCII characters are case folded. 9492*a3141fd3SAndroid Build Coastguard Worker ** 9493*a3141fd3SAndroid Build Coastguard Worker ** Note that this routine returns zero on a match and non-zero if the strings 9494*a3141fd3SAndroid Build Coastguard Worker ** do not match, the same as [sqlite3_stricmp()] and [sqlite3_strnicmp()]. 9495*a3141fd3SAndroid Build Coastguard Worker ** 9496*a3141fd3SAndroid Build Coastguard Worker ** See also: [sqlite3_strglob()]. 9497*a3141fd3SAndroid Build Coastguard Worker */ 9498*a3141fd3SAndroid Build Coastguard Worker SQLITE_API int sqlite3_strlike(const char *zGlob, const char *zStr, unsigned int cEsc); 9499*a3141fd3SAndroid Build Coastguard Worker 9500*a3141fd3SAndroid Build Coastguard Worker /* 9501*a3141fd3SAndroid Build Coastguard Worker ** CAPI3REF: Error Logging Interface 9502*a3141fd3SAndroid Build Coastguard Worker ** 9503*a3141fd3SAndroid Build Coastguard Worker ** ^The [sqlite3_log()] interface writes a message into the [error log] 9504*a3141fd3SAndroid Build Coastguard Worker ** established by the [SQLITE_CONFIG_LOG] option to [sqlite3_config()]. 9505*a3141fd3SAndroid Build Coastguard Worker ** ^If logging is enabled, the zFormat string and subsequent arguments are 9506*a3141fd3SAndroid Build Coastguard Worker ** used with [sqlite3_snprintf()] to generate the final output string. 9507*a3141fd3SAndroid Build Coastguard Worker ** 9508*a3141fd3SAndroid Build Coastguard Worker ** The sqlite3_log() interface is intended for use by extensions such as 9509*a3141fd3SAndroid Build Coastguard Worker ** virtual tables, collating functions, and SQL functions. While there is 9510*a3141fd3SAndroid Build Coastguard Worker ** nothing to prevent an application from calling sqlite3_log(), doing so 9511*a3141fd3SAndroid Build Coastguard Worker ** is considered bad form. 9512*a3141fd3SAndroid Build Coastguard Worker ** 9513*a3141fd3SAndroid Build Coastguard Worker ** The zFormat string must not be NULL. 9514*a3141fd3SAndroid Build Coastguard Worker ** 9515*a3141fd3SAndroid Build Coastguard Worker ** To avoid deadlocks and other threading problems, the sqlite3_log() routine 9516*a3141fd3SAndroid Build Coastguard Worker ** will not use dynamically allocated memory. The log message is stored in 9517*a3141fd3SAndroid Build Coastguard Worker ** a fixed-length buffer on the stack. If the log message is longer than 9518*a3141fd3SAndroid Build Coastguard Worker ** a few hundred characters, it will be truncated to the length of the 9519*a3141fd3SAndroid Build Coastguard Worker ** buffer. 9520*a3141fd3SAndroid Build Coastguard Worker */ 9521*a3141fd3SAndroid Build Coastguard Worker SQLITE_API void sqlite3_log(int iErrCode, const char *zFormat, ...); 9522*a3141fd3SAndroid Build Coastguard Worker 9523*a3141fd3SAndroid Build Coastguard Worker /* 9524*a3141fd3SAndroid Build Coastguard Worker ** CAPI3REF: Write-Ahead Log Commit Hook 9525*a3141fd3SAndroid Build Coastguard Worker ** METHOD: sqlite3 9526*a3141fd3SAndroid Build Coastguard Worker ** 9527*a3141fd3SAndroid Build Coastguard Worker ** ^The [sqlite3_wal_hook()] function is used to register a callback that 9528*a3141fd3SAndroid Build Coastguard Worker ** is invoked each time data is committed to a database in wal mode. 9529*a3141fd3SAndroid Build Coastguard Worker ** 9530*a3141fd3SAndroid Build Coastguard Worker ** ^(The callback is invoked by SQLite after the commit has taken place and 9531*a3141fd3SAndroid Build Coastguard Worker ** the associated write-lock on the database released)^, so the implementation 9532*a3141fd3SAndroid Build Coastguard Worker ** may read, write or [checkpoint] the database as required. 9533*a3141fd3SAndroid Build Coastguard Worker ** 9534*a3141fd3SAndroid Build Coastguard Worker ** ^The first parameter passed to the callback function when it is invoked 9535*a3141fd3SAndroid Build Coastguard Worker ** is a copy of the third parameter passed to sqlite3_wal_hook() when 9536*a3141fd3SAndroid Build Coastguard Worker ** registering the callback. ^The second is a copy of the database handle. 9537*a3141fd3SAndroid Build Coastguard Worker ** ^The third parameter is the name of the database that was written to - 9538*a3141fd3SAndroid Build Coastguard Worker ** either "main" or the name of an [ATTACH]-ed database. ^The fourth parameter 9539*a3141fd3SAndroid Build Coastguard Worker ** is the number of pages currently in the write-ahead log file, 9540*a3141fd3SAndroid Build Coastguard Worker ** including those that were just committed. 9541*a3141fd3SAndroid Build Coastguard Worker ** 9542*a3141fd3SAndroid Build Coastguard Worker ** The callback function should normally return [SQLITE_OK]. ^If an error 9543*a3141fd3SAndroid Build Coastguard Worker ** code is returned, that error will propagate back up through the 9544*a3141fd3SAndroid Build Coastguard Worker ** SQLite code base to cause the statement that provoked the callback 9545*a3141fd3SAndroid Build Coastguard Worker ** to report an error, though the commit will have still occurred. If the 9546*a3141fd3SAndroid Build Coastguard Worker ** callback returns [SQLITE_ROW] or [SQLITE_DONE], or if it returns a value 9547*a3141fd3SAndroid Build Coastguard Worker ** that does not correspond to any valid SQLite error code, the results 9548*a3141fd3SAndroid Build Coastguard Worker ** are undefined. 9549*a3141fd3SAndroid Build Coastguard Worker ** 9550*a3141fd3SAndroid Build Coastguard Worker ** A single database handle may have at most a single write-ahead log callback 9551*a3141fd3SAndroid Build Coastguard Worker ** registered at one time. ^Calling [sqlite3_wal_hook()] replaces any 9552*a3141fd3SAndroid Build Coastguard Worker ** previously registered write-ahead log callback. ^The return value is 9553*a3141fd3SAndroid Build Coastguard Worker ** a copy of the third parameter from the previous call, if any, or 0. 9554*a3141fd3SAndroid Build Coastguard Worker ** ^Note that the [sqlite3_wal_autocheckpoint()] interface and the 9555*a3141fd3SAndroid Build Coastguard Worker ** [wal_autocheckpoint pragma] both invoke [sqlite3_wal_hook()] and will 9556*a3141fd3SAndroid Build Coastguard Worker ** overwrite any prior [sqlite3_wal_hook()] settings. 9557*a3141fd3SAndroid Build Coastguard Worker */ 9558*a3141fd3SAndroid Build Coastguard Worker SQLITE_API void *sqlite3_wal_hook( 9559*a3141fd3SAndroid Build Coastguard Worker sqlite3*, 9560*a3141fd3SAndroid Build Coastguard Worker int(*)(void *,sqlite3*,const char*,int), 9561*a3141fd3SAndroid Build Coastguard Worker void* 9562*a3141fd3SAndroid Build Coastguard Worker ); 9563*a3141fd3SAndroid Build Coastguard Worker 9564*a3141fd3SAndroid Build Coastguard Worker /* 9565*a3141fd3SAndroid Build Coastguard Worker ** CAPI3REF: Configure an auto-checkpoint 9566*a3141fd3SAndroid Build Coastguard Worker ** METHOD: sqlite3 9567*a3141fd3SAndroid Build Coastguard Worker ** 9568*a3141fd3SAndroid Build Coastguard Worker ** ^The [sqlite3_wal_autocheckpoint(D,N)] is a wrapper around 9569*a3141fd3SAndroid Build Coastguard Worker ** [sqlite3_wal_hook()] that causes any database on [database connection] D 9570*a3141fd3SAndroid Build Coastguard Worker ** to automatically [checkpoint] 9571*a3141fd3SAndroid Build Coastguard Worker ** after committing a transaction if there are N or 9572*a3141fd3SAndroid Build Coastguard Worker ** more frames in the [write-ahead log] file. ^Passing zero or 9573*a3141fd3SAndroid Build Coastguard Worker ** a negative value as the nFrame parameter disables automatic 9574*a3141fd3SAndroid Build Coastguard Worker ** checkpoints entirely. 9575*a3141fd3SAndroid Build Coastguard Worker ** 9576*a3141fd3SAndroid Build Coastguard Worker ** ^The callback registered by this function replaces any existing callback 9577*a3141fd3SAndroid Build Coastguard Worker ** registered using [sqlite3_wal_hook()]. ^Likewise, registering a callback 9578*a3141fd3SAndroid Build Coastguard Worker ** using [sqlite3_wal_hook()] disables the automatic checkpoint mechanism 9579*a3141fd3SAndroid Build Coastguard Worker ** configured by this function. 9580*a3141fd3SAndroid Build Coastguard Worker ** 9581*a3141fd3SAndroid Build Coastguard Worker ** ^The [wal_autocheckpoint pragma] can be used to invoke this interface 9582*a3141fd3SAndroid Build Coastguard Worker ** from SQL. 9583*a3141fd3SAndroid Build Coastguard Worker ** 9584*a3141fd3SAndroid Build Coastguard Worker ** ^Checkpoints initiated by this mechanism are 9585*a3141fd3SAndroid Build Coastguard Worker ** [sqlite3_wal_checkpoint_v2|PASSIVE]. 9586*a3141fd3SAndroid Build Coastguard Worker ** 9587*a3141fd3SAndroid Build Coastguard Worker ** ^Every new [database connection] defaults to having the auto-checkpoint 9588*a3141fd3SAndroid Build Coastguard Worker ** enabled with a threshold of 1000 or [SQLITE_DEFAULT_WAL_AUTOCHECKPOINT] 9589*a3141fd3SAndroid Build Coastguard Worker ** pages. The use of this interface 9590*a3141fd3SAndroid Build Coastguard Worker ** is only necessary if the default setting is found to be suboptimal 9591*a3141fd3SAndroid Build Coastguard Worker ** for a particular application. 9592*a3141fd3SAndroid Build Coastguard Worker */ 9593*a3141fd3SAndroid Build Coastguard Worker SQLITE_API int sqlite3_wal_autocheckpoint(sqlite3 *db, int N); 9594*a3141fd3SAndroid Build Coastguard Worker 9595*a3141fd3SAndroid Build Coastguard Worker /* 9596*a3141fd3SAndroid Build Coastguard Worker ** CAPI3REF: Checkpoint a database 9597*a3141fd3SAndroid Build Coastguard Worker ** METHOD: sqlite3 9598*a3141fd3SAndroid Build Coastguard Worker ** 9599*a3141fd3SAndroid Build Coastguard Worker ** ^(The sqlite3_wal_checkpoint(D,X) is equivalent to 9600*a3141fd3SAndroid Build Coastguard Worker ** [sqlite3_wal_checkpoint_v2](D,X,[SQLITE_CHECKPOINT_PASSIVE],0,0).)^ 9601*a3141fd3SAndroid Build Coastguard Worker ** 9602*a3141fd3SAndroid Build Coastguard Worker ** In brief, sqlite3_wal_checkpoint(D,X) causes the content in the 9603*a3141fd3SAndroid Build Coastguard Worker ** [write-ahead log] for database X on [database connection] D to be 9604*a3141fd3SAndroid Build Coastguard Worker ** transferred into the database file and for the write-ahead log to 9605*a3141fd3SAndroid Build Coastguard Worker ** be reset. See the [checkpointing] documentation for addition 9606*a3141fd3SAndroid Build Coastguard Worker ** information. 9607*a3141fd3SAndroid Build Coastguard Worker ** 9608*a3141fd3SAndroid Build Coastguard Worker ** This interface used to be the only way to cause a checkpoint to 9609*a3141fd3SAndroid Build Coastguard Worker ** occur. But then the newer and more powerful [sqlite3_wal_checkpoint_v2()] 9610*a3141fd3SAndroid Build Coastguard Worker ** interface was added. This interface is retained for backwards 9611*a3141fd3SAndroid Build Coastguard Worker ** compatibility and as a convenience for applications that need to manually 9612*a3141fd3SAndroid Build Coastguard Worker ** start a callback but which do not need the full power (and corresponding 9613*a3141fd3SAndroid Build Coastguard Worker ** complication) of [sqlite3_wal_checkpoint_v2()]. 9614*a3141fd3SAndroid Build Coastguard Worker */ 9615*a3141fd3SAndroid Build Coastguard Worker SQLITE_API int sqlite3_wal_checkpoint(sqlite3 *db, const char *zDb); 9616*a3141fd3SAndroid Build Coastguard Worker 9617*a3141fd3SAndroid Build Coastguard Worker /* 9618*a3141fd3SAndroid Build Coastguard Worker ** CAPI3REF: Checkpoint a database 9619*a3141fd3SAndroid Build Coastguard Worker ** METHOD: sqlite3 9620*a3141fd3SAndroid Build Coastguard Worker ** 9621*a3141fd3SAndroid Build Coastguard Worker ** ^(The sqlite3_wal_checkpoint_v2(D,X,M,L,C) interface runs a checkpoint 9622*a3141fd3SAndroid Build Coastguard Worker ** operation on database X of [database connection] D in mode M. Status 9623*a3141fd3SAndroid Build Coastguard Worker ** information is written back into integers pointed to by L and C.)^ 9624*a3141fd3SAndroid Build Coastguard Worker ** ^(The M parameter must be a valid [checkpoint mode]:)^ 9625*a3141fd3SAndroid Build Coastguard Worker ** 9626*a3141fd3SAndroid Build Coastguard Worker ** <dl> 9627*a3141fd3SAndroid Build Coastguard Worker ** <dt>SQLITE_CHECKPOINT_PASSIVE<dd> 9628*a3141fd3SAndroid Build Coastguard Worker ** ^Checkpoint as many frames as possible without waiting for any database 9629*a3141fd3SAndroid Build Coastguard Worker ** readers or writers to finish, then sync the database file if all frames 9630*a3141fd3SAndroid Build Coastguard Worker ** in the log were checkpointed. ^The [busy-handler callback] 9631*a3141fd3SAndroid Build Coastguard Worker ** is never invoked in the SQLITE_CHECKPOINT_PASSIVE mode. 9632*a3141fd3SAndroid Build Coastguard Worker ** ^On the other hand, passive mode might leave the checkpoint unfinished 9633*a3141fd3SAndroid Build Coastguard Worker ** if there are concurrent readers or writers. 9634*a3141fd3SAndroid Build Coastguard Worker ** 9635*a3141fd3SAndroid Build Coastguard Worker ** <dt>SQLITE_CHECKPOINT_FULL<dd> 9636*a3141fd3SAndroid Build Coastguard Worker ** ^This mode blocks (it invokes the 9637*a3141fd3SAndroid Build Coastguard Worker ** [sqlite3_busy_handler|busy-handler callback]) until there is no 9638*a3141fd3SAndroid Build Coastguard Worker ** database writer and all readers are reading from the most recent database 9639*a3141fd3SAndroid Build Coastguard Worker ** snapshot. ^It then checkpoints all frames in the log file and syncs the 9640*a3141fd3SAndroid Build Coastguard Worker ** database file. ^This mode blocks new database writers while it is pending, 9641*a3141fd3SAndroid Build Coastguard Worker ** but new database readers are allowed to continue unimpeded. 9642*a3141fd3SAndroid Build Coastguard Worker ** 9643*a3141fd3SAndroid Build Coastguard Worker ** <dt>SQLITE_CHECKPOINT_RESTART<dd> 9644*a3141fd3SAndroid Build Coastguard Worker ** ^This mode works the same way as SQLITE_CHECKPOINT_FULL with the addition 9645*a3141fd3SAndroid Build Coastguard Worker ** that after checkpointing the log file it blocks (calls the 9646*a3141fd3SAndroid Build Coastguard Worker ** [busy-handler callback]) 9647*a3141fd3SAndroid Build Coastguard Worker ** until all readers are reading from the database file only. ^This ensures 9648*a3141fd3SAndroid Build Coastguard Worker ** that the next writer will restart the log file from the beginning. 9649*a3141fd3SAndroid Build Coastguard Worker ** ^Like SQLITE_CHECKPOINT_FULL, this mode blocks new 9650*a3141fd3SAndroid Build Coastguard Worker ** database writer attempts while it is pending, but does not impede readers. 9651*a3141fd3SAndroid Build Coastguard Worker ** 9652*a3141fd3SAndroid Build Coastguard Worker ** <dt>SQLITE_CHECKPOINT_TRUNCATE<dd> 9653*a3141fd3SAndroid Build Coastguard Worker ** ^This mode works the same way as SQLITE_CHECKPOINT_RESTART with the 9654*a3141fd3SAndroid Build Coastguard Worker ** addition that it also truncates the log file to zero bytes just prior 9655*a3141fd3SAndroid Build Coastguard Worker ** to a successful return. 9656*a3141fd3SAndroid Build Coastguard Worker ** </dl> 9657*a3141fd3SAndroid Build Coastguard Worker ** 9658*a3141fd3SAndroid Build Coastguard Worker ** ^If pnLog is not NULL, then *pnLog is set to the total number of frames in 9659*a3141fd3SAndroid Build Coastguard Worker ** the log file or to -1 if the checkpoint could not run because 9660*a3141fd3SAndroid Build Coastguard Worker ** of an error or because the database is not in [WAL mode]. ^If pnCkpt is not 9661*a3141fd3SAndroid Build Coastguard Worker ** NULL,then *pnCkpt is set to the total number of checkpointed frames in the 9662*a3141fd3SAndroid Build Coastguard Worker ** log file (including any that were already checkpointed before the function 9663*a3141fd3SAndroid Build Coastguard Worker ** was called) or to -1 if the checkpoint could not run due to an error or 9664*a3141fd3SAndroid Build Coastguard Worker ** because the database is not in WAL mode. ^Note that upon successful 9665*a3141fd3SAndroid Build Coastguard Worker ** completion of an SQLITE_CHECKPOINT_TRUNCATE, the log file will have been 9666*a3141fd3SAndroid Build Coastguard Worker ** truncated to zero bytes and so both *pnLog and *pnCkpt will be set to zero. 9667*a3141fd3SAndroid Build Coastguard Worker ** 9668*a3141fd3SAndroid Build Coastguard Worker ** ^All calls obtain an exclusive "checkpoint" lock on the database file. ^If 9669*a3141fd3SAndroid Build Coastguard Worker ** any other process is running a checkpoint operation at the same time, the 9670*a3141fd3SAndroid Build Coastguard Worker ** lock cannot be obtained and SQLITE_BUSY is returned. ^Even if there is a 9671*a3141fd3SAndroid Build Coastguard Worker ** busy-handler configured, it will not be invoked in this case. 9672*a3141fd3SAndroid Build Coastguard Worker ** 9673*a3141fd3SAndroid Build Coastguard Worker ** ^The SQLITE_CHECKPOINT_FULL, RESTART and TRUNCATE modes also obtain the 9674*a3141fd3SAndroid Build Coastguard Worker ** exclusive "writer" lock on the database file. ^If the writer lock cannot be 9675*a3141fd3SAndroid Build Coastguard Worker ** obtained immediately, and a busy-handler is configured, it is invoked and 9676*a3141fd3SAndroid Build Coastguard Worker ** the writer lock retried until either the busy-handler returns 0 or the lock 9677*a3141fd3SAndroid Build Coastguard Worker ** is successfully obtained. ^The busy-handler is also invoked while waiting for 9678*a3141fd3SAndroid Build Coastguard Worker ** database readers as described above. ^If the busy-handler returns 0 before 9679*a3141fd3SAndroid Build Coastguard Worker ** the writer lock is obtained or while waiting for database readers, the 9680*a3141fd3SAndroid Build Coastguard Worker ** checkpoint operation proceeds from that point in the same way as 9681*a3141fd3SAndroid Build Coastguard Worker ** SQLITE_CHECKPOINT_PASSIVE - checkpointing as many frames as possible 9682*a3141fd3SAndroid Build Coastguard Worker ** without blocking any further. ^SQLITE_BUSY is returned in this case. 9683*a3141fd3SAndroid Build Coastguard Worker ** 9684*a3141fd3SAndroid Build Coastguard Worker ** ^If parameter zDb is NULL or points to a zero length string, then the 9685*a3141fd3SAndroid Build Coastguard Worker ** specified operation is attempted on all WAL databases [attached] to 9686*a3141fd3SAndroid Build Coastguard Worker ** [database connection] db. In this case the 9687*a3141fd3SAndroid Build Coastguard Worker ** values written to output parameters *pnLog and *pnCkpt are undefined. ^If 9688*a3141fd3SAndroid Build Coastguard Worker ** an SQLITE_BUSY error is encountered when processing one or more of the 9689*a3141fd3SAndroid Build Coastguard Worker ** attached WAL databases, the operation is still attempted on any remaining 9690*a3141fd3SAndroid Build Coastguard Worker ** attached databases and SQLITE_BUSY is returned at the end. ^If any other 9691*a3141fd3SAndroid Build Coastguard Worker ** error occurs while processing an attached database, processing is abandoned 9692*a3141fd3SAndroid Build Coastguard Worker ** and the error code is returned to the caller immediately. ^If no error 9693*a3141fd3SAndroid Build Coastguard Worker ** (SQLITE_BUSY or otherwise) is encountered while processing the attached 9694*a3141fd3SAndroid Build Coastguard Worker ** databases, SQLITE_OK is returned. 9695*a3141fd3SAndroid Build Coastguard Worker ** 9696*a3141fd3SAndroid Build Coastguard Worker ** ^If database zDb is the name of an attached database that is not in WAL 9697*a3141fd3SAndroid Build Coastguard Worker ** mode, SQLITE_OK is returned and both *pnLog and *pnCkpt set to -1. ^If 9698*a3141fd3SAndroid Build Coastguard Worker ** zDb is not NULL (or a zero length string) and is not the name of any 9699*a3141fd3SAndroid Build Coastguard Worker ** attached database, SQLITE_ERROR is returned to the caller. 9700*a3141fd3SAndroid Build Coastguard Worker ** 9701*a3141fd3SAndroid Build Coastguard Worker ** ^Unless it returns SQLITE_MISUSE, 9702*a3141fd3SAndroid Build Coastguard Worker ** the sqlite3_wal_checkpoint_v2() interface 9703*a3141fd3SAndroid Build Coastguard Worker ** sets the error information that is queried by 9704*a3141fd3SAndroid Build Coastguard Worker ** [sqlite3_errcode()] and [sqlite3_errmsg()]. 9705*a3141fd3SAndroid Build Coastguard Worker ** 9706*a3141fd3SAndroid Build Coastguard Worker ** ^The [PRAGMA wal_checkpoint] command can be used to invoke this interface 9707*a3141fd3SAndroid Build Coastguard Worker ** from SQL. 9708*a3141fd3SAndroid Build Coastguard Worker */ 9709*a3141fd3SAndroid Build Coastguard Worker SQLITE_API int sqlite3_wal_checkpoint_v2( 9710*a3141fd3SAndroid Build Coastguard Worker sqlite3 *db, /* Database handle */ 9711*a3141fd3SAndroid Build Coastguard Worker const char *zDb, /* Name of attached database (or NULL) */ 9712*a3141fd3SAndroid Build Coastguard Worker int eMode, /* SQLITE_CHECKPOINT_* value */ 9713*a3141fd3SAndroid Build Coastguard Worker int *pnLog, /* OUT: Size of WAL log in frames */ 9714*a3141fd3SAndroid Build Coastguard Worker int *pnCkpt /* OUT: Total number of frames checkpointed */ 9715*a3141fd3SAndroid Build Coastguard Worker ); 9716*a3141fd3SAndroid Build Coastguard Worker 9717*a3141fd3SAndroid Build Coastguard Worker /* 9718*a3141fd3SAndroid Build Coastguard Worker ** CAPI3REF: Checkpoint Mode Values 9719*a3141fd3SAndroid Build Coastguard Worker ** KEYWORDS: {checkpoint mode} 9720*a3141fd3SAndroid Build Coastguard Worker ** 9721*a3141fd3SAndroid Build Coastguard Worker ** These constants define all valid values for the "checkpoint mode" passed 9722*a3141fd3SAndroid Build Coastguard Worker ** as the third parameter to the [sqlite3_wal_checkpoint_v2()] interface. 9723*a3141fd3SAndroid Build Coastguard Worker ** See the [sqlite3_wal_checkpoint_v2()] documentation for details on the 9724*a3141fd3SAndroid Build Coastguard Worker ** meaning of each of these checkpoint modes. 9725*a3141fd3SAndroid Build Coastguard Worker */ 9726*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_CHECKPOINT_PASSIVE 0 /* Do as much as possible w/o blocking */ 9727*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_CHECKPOINT_FULL 1 /* Wait for writers, then checkpoint */ 9728*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_CHECKPOINT_RESTART 2 /* Like FULL but wait for readers */ 9729*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_CHECKPOINT_TRUNCATE 3 /* Like RESTART but also truncate WAL */ 9730*a3141fd3SAndroid Build Coastguard Worker 9731*a3141fd3SAndroid Build Coastguard Worker /* 9732*a3141fd3SAndroid Build Coastguard Worker ** CAPI3REF: Virtual Table Interface Configuration 9733*a3141fd3SAndroid Build Coastguard Worker ** 9734*a3141fd3SAndroid Build Coastguard Worker ** This function may be called by either the [xConnect] or [xCreate] method 9735*a3141fd3SAndroid Build Coastguard Worker ** of a [virtual table] implementation to configure 9736*a3141fd3SAndroid Build Coastguard Worker ** various facets of the virtual table interface. 9737*a3141fd3SAndroid Build Coastguard Worker ** 9738*a3141fd3SAndroid Build Coastguard Worker ** If this interface is invoked outside the context of an xConnect or 9739*a3141fd3SAndroid Build Coastguard Worker ** xCreate virtual table method then the behavior is undefined. 9740*a3141fd3SAndroid Build Coastguard Worker ** 9741*a3141fd3SAndroid Build Coastguard Worker ** In the call sqlite3_vtab_config(D,C,...) the D parameter is the 9742*a3141fd3SAndroid Build Coastguard Worker ** [database connection] in which the virtual table is being created and 9743*a3141fd3SAndroid Build Coastguard Worker ** which is passed in as the first argument to the [xConnect] or [xCreate] 9744*a3141fd3SAndroid Build Coastguard Worker ** method that is invoking sqlite3_vtab_config(). The C parameter is one 9745*a3141fd3SAndroid Build Coastguard Worker ** of the [virtual table configuration options]. The presence and meaning 9746*a3141fd3SAndroid Build Coastguard Worker ** of parameters after C depend on which [virtual table configuration option] 9747*a3141fd3SAndroid Build Coastguard Worker ** is used. 9748*a3141fd3SAndroid Build Coastguard Worker */ 9749*a3141fd3SAndroid Build Coastguard Worker SQLITE_API int sqlite3_vtab_config(sqlite3*, int op, ...); 9750*a3141fd3SAndroid Build Coastguard Worker 9751*a3141fd3SAndroid Build Coastguard Worker /* 9752*a3141fd3SAndroid Build Coastguard Worker ** CAPI3REF: Virtual Table Configuration Options 9753*a3141fd3SAndroid Build Coastguard Worker ** KEYWORDS: {virtual table configuration options} 9754*a3141fd3SAndroid Build Coastguard Worker ** KEYWORDS: {virtual table configuration option} 9755*a3141fd3SAndroid Build Coastguard Worker ** 9756*a3141fd3SAndroid Build Coastguard Worker ** These macros define the various options to the 9757*a3141fd3SAndroid Build Coastguard Worker ** [sqlite3_vtab_config()] interface that [virtual table] implementations 9758*a3141fd3SAndroid Build Coastguard Worker ** can use to customize and optimize their behavior. 9759*a3141fd3SAndroid Build Coastguard Worker ** 9760*a3141fd3SAndroid Build Coastguard Worker ** <dl> 9761*a3141fd3SAndroid Build Coastguard Worker ** [[SQLITE_VTAB_CONSTRAINT_SUPPORT]] 9762*a3141fd3SAndroid Build Coastguard Worker ** <dt>SQLITE_VTAB_CONSTRAINT_SUPPORT</dt> 9763*a3141fd3SAndroid Build Coastguard Worker ** <dd>Calls of the form 9764*a3141fd3SAndroid Build Coastguard Worker ** [sqlite3_vtab_config](db,SQLITE_VTAB_CONSTRAINT_SUPPORT,X) are supported, 9765*a3141fd3SAndroid Build Coastguard Worker ** where X is an integer. If X is zero, then the [virtual table] whose 9766*a3141fd3SAndroid Build Coastguard Worker ** [xCreate] or [xConnect] method invoked [sqlite3_vtab_config()] does not 9767*a3141fd3SAndroid Build Coastguard Worker ** support constraints. In this configuration (which is the default) if 9768*a3141fd3SAndroid Build Coastguard Worker ** a call to the [xUpdate] method returns [SQLITE_CONSTRAINT], then the entire 9769*a3141fd3SAndroid Build Coastguard Worker ** statement is rolled back as if [ON CONFLICT | OR ABORT] had been 9770*a3141fd3SAndroid Build Coastguard Worker ** specified as part of the users SQL statement, regardless of the actual 9771*a3141fd3SAndroid Build Coastguard Worker ** ON CONFLICT mode specified. 9772*a3141fd3SAndroid Build Coastguard Worker ** 9773*a3141fd3SAndroid Build Coastguard Worker ** If X is non-zero, then the virtual table implementation guarantees 9774*a3141fd3SAndroid Build Coastguard Worker ** that if [xUpdate] returns [SQLITE_CONSTRAINT], it will do so before 9775*a3141fd3SAndroid Build Coastguard Worker ** any modifications to internal or persistent data structures have been made. 9776*a3141fd3SAndroid Build Coastguard Worker ** If the [ON CONFLICT] mode is ABORT, FAIL, IGNORE or ROLLBACK, SQLite 9777*a3141fd3SAndroid Build Coastguard Worker ** is able to roll back a statement or database transaction, and abandon 9778*a3141fd3SAndroid Build Coastguard Worker ** or continue processing the current SQL statement as appropriate. 9779*a3141fd3SAndroid Build Coastguard Worker ** If the ON CONFLICT mode is REPLACE and the [xUpdate] method returns 9780*a3141fd3SAndroid Build Coastguard Worker ** [SQLITE_CONSTRAINT], SQLite handles this as if the ON CONFLICT mode 9781*a3141fd3SAndroid Build Coastguard Worker ** had been ABORT. 9782*a3141fd3SAndroid Build Coastguard Worker ** 9783*a3141fd3SAndroid Build Coastguard Worker ** Virtual table implementations that are required to handle OR REPLACE 9784*a3141fd3SAndroid Build Coastguard Worker ** must do so within the [xUpdate] method. If a call to the 9785*a3141fd3SAndroid Build Coastguard Worker ** [sqlite3_vtab_on_conflict()] function indicates that the current ON 9786*a3141fd3SAndroid Build Coastguard Worker ** CONFLICT policy is REPLACE, the virtual table implementation should 9787*a3141fd3SAndroid Build Coastguard Worker ** silently replace the appropriate rows within the xUpdate callback and 9788*a3141fd3SAndroid Build Coastguard Worker ** return SQLITE_OK. Or, if this is not possible, it may return 9789*a3141fd3SAndroid Build Coastguard Worker ** SQLITE_CONSTRAINT, in which case SQLite falls back to OR ABORT 9790*a3141fd3SAndroid Build Coastguard Worker ** constraint handling. 9791*a3141fd3SAndroid Build Coastguard Worker ** </dd> 9792*a3141fd3SAndroid Build Coastguard Worker ** 9793*a3141fd3SAndroid Build Coastguard Worker ** [[SQLITE_VTAB_DIRECTONLY]]<dt>SQLITE_VTAB_DIRECTONLY</dt> 9794*a3141fd3SAndroid Build Coastguard Worker ** <dd>Calls of the form 9795*a3141fd3SAndroid Build Coastguard Worker ** [sqlite3_vtab_config](db,SQLITE_VTAB_DIRECTONLY) from within the 9796*a3141fd3SAndroid Build Coastguard Worker ** the [xConnect] or [xCreate] methods of a [virtual table] implementation 9797*a3141fd3SAndroid Build Coastguard Worker ** prohibits that virtual table from being used from within triggers and 9798*a3141fd3SAndroid Build Coastguard Worker ** views. 9799*a3141fd3SAndroid Build Coastguard Worker ** </dd> 9800*a3141fd3SAndroid Build Coastguard Worker ** 9801*a3141fd3SAndroid Build Coastguard Worker ** [[SQLITE_VTAB_INNOCUOUS]]<dt>SQLITE_VTAB_INNOCUOUS</dt> 9802*a3141fd3SAndroid Build Coastguard Worker ** <dd>Calls of the form 9803*a3141fd3SAndroid Build Coastguard Worker ** [sqlite3_vtab_config](db,SQLITE_VTAB_INNOCUOUS) from within the 9804*a3141fd3SAndroid Build Coastguard Worker ** the [xConnect] or [xCreate] methods of a [virtual table] implementation 9805*a3141fd3SAndroid Build Coastguard Worker ** identify that virtual table as being safe to use from within triggers 9806*a3141fd3SAndroid Build Coastguard Worker ** and views. Conceptually, the SQLITE_VTAB_INNOCUOUS tag means that the 9807*a3141fd3SAndroid Build Coastguard Worker ** virtual table can do no serious harm even if it is controlled by a 9808*a3141fd3SAndroid Build Coastguard Worker ** malicious hacker. Developers should avoid setting the SQLITE_VTAB_INNOCUOUS 9809*a3141fd3SAndroid Build Coastguard Worker ** flag unless absolutely necessary. 9810*a3141fd3SAndroid Build Coastguard Worker ** </dd> 9811*a3141fd3SAndroid Build Coastguard Worker ** 9812*a3141fd3SAndroid Build Coastguard Worker ** [[SQLITE_VTAB_USES_ALL_SCHEMAS]]<dt>SQLITE_VTAB_USES_ALL_SCHEMAS</dt> 9813*a3141fd3SAndroid Build Coastguard Worker ** <dd>Calls of the form 9814*a3141fd3SAndroid Build Coastguard Worker ** [sqlite3_vtab_config](db,SQLITE_VTAB_USES_ALL_SCHEMA) from within the 9815*a3141fd3SAndroid Build Coastguard Worker ** the [xConnect] or [xCreate] methods of a [virtual table] implementation 9816*a3141fd3SAndroid Build Coastguard Worker ** instruct the query planner to begin at least a read transaction on 9817*a3141fd3SAndroid Build Coastguard Worker ** all schemas ("main", "temp", and any ATTACH-ed databases) whenever the 9818*a3141fd3SAndroid Build Coastguard Worker ** virtual table is used. 9819*a3141fd3SAndroid Build Coastguard Worker ** </dd> 9820*a3141fd3SAndroid Build Coastguard Worker ** </dl> 9821*a3141fd3SAndroid Build Coastguard Worker */ 9822*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_VTAB_CONSTRAINT_SUPPORT 1 9823*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_VTAB_INNOCUOUS 2 9824*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_VTAB_DIRECTONLY 3 9825*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_VTAB_USES_ALL_SCHEMAS 4 9826*a3141fd3SAndroid Build Coastguard Worker 9827*a3141fd3SAndroid Build Coastguard Worker /* 9828*a3141fd3SAndroid Build Coastguard Worker ** CAPI3REF: Determine The Virtual Table Conflict Policy 9829*a3141fd3SAndroid Build Coastguard Worker ** 9830*a3141fd3SAndroid Build Coastguard Worker ** This function may only be called from within a call to the [xUpdate] method 9831*a3141fd3SAndroid Build Coastguard Worker ** of a [virtual table] implementation for an INSERT or UPDATE operation. ^The 9832*a3141fd3SAndroid Build Coastguard Worker ** value returned is one of [SQLITE_ROLLBACK], [SQLITE_IGNORE], [SQLITE_FAIL], 9833*a3141fd3SAndroid Build Coastguard Worker ** [SQLITE_ABORT], or [SQLITE_REPLACE], according to the [ON CONFLICT] mode 9834*a3141fd3SAndroid Build Coastguard Worker ** of the SQL statement that triggered the call to the [xUpdate] method of the 9835*a3141fd3SAndroid Build Coastguard Worker ** [virtual table]. 9836*a3141fd3SAndroid Build Coastguard Worker */ 9837*a3141fd3SAndroid Build Coastguard Worker SQLITE_API int sqlite3_vtab_on_conflict(sqlite3 *); 9838*a3141fd3SAndroid Build Coastguard Worker 9839*a3141fd3SAndroid Build Coastguard Worker /* 9840*a3141fd3SAndroid Build Coastguard Worker ** CAPI3REF: Determine If Virtual Table Column Access Is For UPDATE 9841*a3141fd3SAndroid Build Coastguard Worker ** 9842*a3141fd3SAndroid Build Coastguard Worker ** If the sqlite3_vtab_nochange(X) routine is called within the [xColumn] 9843*a3141fd3SAndroid Build Coastguard Worker ** method of a [virtual table], then it might return true if the 9844*a3141fd3SAndroid Build Coastguard Worker ** column is being fetched as part of an UPDATE operation during which the 9845*a3141fd3SAndroid Build Coastguard Worker ** column value will not change. The virtual table implementation can use 9846*a3141fd3SAndroid Build Coastguard Worker ** this hint as permission to substitute a return value that is less 9847*a3141fd3SAndroid Build Coastguard Worker ** expensive to compute and that the corresponding 9848*a3141fd3SAndroid Build Coastguard Worker ** [xUpdate] method understands as a "no-change" value. 9849*a3141fd3SAndroid Build Coastguard Worker ** 9850*a3141fd3SAndroid Build Coastguard Worker ** If the [xColumn] method calls sqlite3_vtab_nochange() and finds that 9851*a3141fd3SAndroid Build Coastguard Worker ** the column is not changed by the UPDATE statement, then the xColumn 9852*a3141fd3SAndroid Build Coastguard Worker ** method can optionally return without setting a result, without calling 9853*a3141fd3SAndroid Build Coastguard Worker ** any of the [sqlite3_result_int|sqlite3_result_xxxxx() interfaces]. 9854*a3141fd3SAndroid Build Coastguard Worker ** In that case, [sqlite3_value_nochange(X)] will return true for the 9855*a3141fd3SAndroid Build Coastguard Worker ** same column in the [xUpdate] method. 9856*a3141fd3SAndroid Build Coastguard Worker ** 9857*a3141fd3SAndroid Build Coastguard Worker ** The sqlite3_vtab_nochange() routine is an optimization. Virtual table 9858*a3141fd3SAndroid Build Coastguard Worker ** implementations should continue to give a correct answer even if the 9859*a3141fd3SAndroid Build Coastguard Worker ** sqlite3_vtab_nochange() interface were to always return false. In the 9860*a3141fd3SAndroid Build Coastguard Worker ** current implementation, the sqlite3_vtab_nochange() interface does always 9861*a3141fd3SAndroid Build Coastguard Worker ** returns false for the enhanced [UPDATE FROM] statement. 9862*a3141fd3SAndroid Build Coastguard Worker */ 9863*a3141fd3SAndroid Build Coastguard Worker SQLITE_API int sqlite3_vtab_nochange(sqlite3_context*); 9864*a3141fd3SAndroid Build Coastguard Worker 9865*a3141fd3SAndroid Build Coastguard Worker /* 9866*a3141fd3SAndroid Build Coastguard Worker ** CAPI3REF: Determine The Collation For a Virtual Table Constraint 9867*a3141fd3SAndroid Build Coastguard Worker ** METHOD: sqlite3_index_info 9868*a3141fd3SAndroid Build Coastguard Worker ** 9869*a3141fd3SAndroid Build Coastguard Worker ** This function may only be called from within a call to the [xBestIndex] 9870*a3141fd3SAndroid Build Coastguard Worker ** method of a [virtual table]. This function returns a pointer to a string 9871*a3141fd3SAndroid Build Coastguard Worker ** that is the name of the appropriate collation sequence to use for text 9872*a3141fd3SAndroid Build Coastguard Worker ** comparisons on the constraint identified by its arguments. 9873*a3141fd3SAndroid Build Coastguard Worker ** 9874*a3141fd3SAndroid Build Coastguard Worker ** The first argument must be the pointer to the [sqlite3_index_info] object 9875*a3141fd3SAndroid Build Coastguard Worker ** that is the first parameter to the xBestIndex() method. The second argument 9876*a3141fd3SAndroid Build Coastguard Worker ** must be an index into the aConstraint[] array belonging to the 9877*a3141fd3SAndroid Build Coastguard Worker ** sqlite3_index_info structure passed to xBestIndex. 9878*a3141fd3SAndroid Build Coastguard Worker ** 9879*a3141fd3SAndroid Build Coastguard Worker ** Important: 9880*a3141fd3SAndroid Build Coastguard Worker ** The first parameter must be the same pointer that is passed into the 9881*a3141fd3SAndroid Build Coastguard Worker ** xBestMethod() method. The first parameter may not be a pointer to a 9882*a3141fd3SAndroid Build Coastguard Worker ** different [sqlite3_index_info] object, even an exact copy. 9883*a3141fd3SAndroid Build Coastguard Worker ** 9884*a3141fd3SAndroid Build Coastguard Worker ** The return value is computed as follows: 9885*a3141fd3SAndroid Build Coastguard Worker ** 9886*a3141fd3SAndroid Build Coastguard Worker ** <ol> 9887*a3141fd3SAndroid Build Coastguard Worker ** <li><p> If the constraint comes from a WHERE clause expression that contains 9888*a3141fd3SAndroid Build Coastguard Worker ** a [COLLATE operator], then the name of the collation specified by 9889*a3141fd3SAndroid Build Coastguard Worker ** that COLLATE operator is returned. 9890*a3141fd3SAndroid Build Coastguard Worker ** <li><p> If there is no COLLATE operator, but the column that is the subject 9891*a3141fd3SAndroid Build Coastguard Worker ** of the constraint specifies an alternative collating sequence via 9892*a3141fd3SAndroid Build Coastguard Worker ** a [COLLATE clause] on the column definition within the CREATE TABLE 9893*a3141fd3SAndroid Build Coastguard Worker ** statement that was passed into [sqlite3_declare_vtab()], then the 9894*a3141fd3SAndroid Build Coastguard Worker ** name of that alternative collating sequence is returned. 9895*a3141fd3SAndroid Build Coastguard Worker ** <li><p> Otherwise, "BINARY" is returned. 9896*a3141fd3SAndroid Build Coastguard Worker ** </ol> 9897*a3141fd3SAndroid Build Coastguard Worker */ 9898*a3141fd3SAndroid Build Coastguard Worker SQLITE_API const char *sqlite3_vtab_collation(sqlite3_index_info*,int); 9899*a3141fd3SAndroid Build Coastguard Worker 9900*a3141fd3SAndroid Build Coastguard Worker /* 9901*a3141fd3SAndroid Build Coastguard Worker ** CAPI3REF: Determine if a virtual table query is DISTINCT 9902*a3141fd3SAndroid Build Coastguard Worker ** METHOD: sqlite3_index_info 9903*a3141fd3SAndroid Build Coastguard Worker ** 9904*a3141fd3SAndroid Build Coastguard Worker ** This API may only be used from within an [xBestIndex|xBestIndex method] 9905*a3141fd3SAndroid Build Coastguard Worker ** of a [virtual table] implementation. The result of calling this 9906*a3141fd3SAndroid Build Coastguard Worker ** interface from outside of xBestIndex() is undefined and probably harmful. 9907*a3141fd3SAndroid Build Coastguard Worker ** 9908*a3141fd3SAndroid Build Coastguard Worker ** ^The sqlite3_vtab_distinct() interface returns an integer between 0 and 9909*a3141fd3SAndroid Build Coastguard Worker ** 3. The integer returned by sqlite3_vtab_distinct() 9910*a3141fd3SAndroid Build Coastguard Worker ** gives the virtual table additional information about how the query 9911*a3141fd3SAndroid Build Coastguard Worker ** planner wants the output to be ordered. As long as the virtual table 9912*a3141fd3SAndroid Build Coastguard Worker ** can meet the ordering requirements of the query planner, it may set 9913*a3141fd3SAndroid Build Coastguard Worker ** the "orderByConsumed" flag. 9914*a3141fd3SAndroid Build Coastguard Worker ** 9915*a3141fd3SAndroid Build Coastguard Worker ** <ol><li value="0"><p> 9916*a3141fd3SAndroid Build Coastguard Worker ** ^If the sqlite3_vtab_distinct() interface returns 0, that means 9917*a3141fd3SAndroid Build Coastguard Worker ** that the query planner needs the virtual table to return all rows in the 9918*a3141fd3SAndroid Build Coastguard Worker ** sort order defined by the "nOrderBy" and "aOrderBy" fields of the 9919*a3141fd3SAndroid Build Coastguard Worker ** [sqlite3_index_info] object. This is the default expectation. If the 9920*a3141fd3SAndroid Build Coastguard Worker ** virtual table outputs all rows in sorted order, then it is always safe for 9921*a3141fd3SAndroid Build Coastguard Worker ** the xBestIndex method to set the "orderByConsumed" flag, regardless of 9922*a3141fd3SAndroid Build Coastguard Worker ** the return value from sqlite3_vtab_distinct(). 9923*a3141fd3SAndroid Build Coastguard Worker ** <li value="1"><p> 9924*a3141fd3SAndroid Build Coastguard Worker ** ^(If the sqlite3_vtab_distinct() interface returns 1, that means 9925*a3141fd3SAndroid Build Coastguard Worker ** that the query planner does not need the rows to be returned in sorted order 9926*a3141fd3SAndroid Build Coastguard Worker ** as long as all rows with the same values in all columns identified by the 9927*a3141fd3SAndroid Build Coastguard Worker ** "aOrderBy" field are adjacent.)^ This mode is used when the query planner 9928*a3141fd3SAndroid Build Coastguard Worker ** is doing a GROUP BY. 9929*a3141fd3SAndroid Build Coastguard Worker ** <li value="2"><p> 9930*a3141fd3SAndroid Build Coastguard Worker ** ^(If the sqlite3_vtab_distinct() interface returns 2, that means 9931*a3141fd3SAndroid Build Coastguard Worker ** that the query planner does not need the rows returned in any particular 9932*a3141fd3SAndroid Build Coastguard Worker ** order, as long as rows with the same values in all "aOrderBy" columns 9933*a3141fd3SAndroid Build Coastguard Worker ** are adjacent.)^ ^(Furthermore, only a single row for each particular 9934*a3141fd3SAndroid Build Coastguard Worker ** combination of values in the columns identified by the "aOrderBy" field 9935*a3141fd3SAndroid Build Coastguard Worker ** needs to be returned.)^ ^It is always ok for two or more rows with the same 9936*a3141fd3SAndroid Build Coastguard Worker ** values in all "aOrderBy" columns to be returned, as long as all such rows 9937*a3141fd3SAndroid Build Coastguard Worker ** are adjacent. ^The virtual table may, if it chooses, omit extra rows 9938*a3141fd3SAndroid Build Coastguard Worker ** that have the same value for all columns identified by "aOrderBy". 9939*a3141fd3SAndroid Build Coastguard Worker ** ^However omitting the extra rows is optional. 9940*a3141fd3SAndroid Build Coastguard Worker ** This mode is used for a DISTINCT query. 9941*a3141fd3SAndroid Build Coastguard Worker ** <li value="3"><p> 9942*a3141fd3SAndroid Build Coastguard Worker ** ^(If the sqlite3_vtab_distinct() interface returns 3, that means 9943*a3141fd3SAndroid Build Coastguard Worker ** that the query planner needs only distinct rows but it does need the 9944*a3141fd3SAndroid Build Coastguard Worker ** rows to be sorted.)^ ^The virtual table implementation is free to omit 9945*a3141fd3SAndroid Build Coastguard Worker ** rows that are identical in all aOrderBy columns, if it wants to, but 9946*a3141fd3SAndroid Build Coastguard Worker ** it is not required to omit any rows. This mode is used for queries 9947*a3141fd3SAndroid Build Coastguard Worker ** that have both DISTINCT and ORDER BY clauses. 9948*a3141fd3SAndroid Build Coastguard Worker ** </ol> 9949*a3141fd3SAndroid Build Coastguard Worker ** 9950*a3141fd3SAndroid Build Coastguard Worker ** ^For the purposes of comparing virtual table output values to see if the 9951*a3141fd3SAndroid Build Coastguard Worker ** values are same value for sorting purposes, two NULL values are considered 9952*a3141fd3SAndroid Build Coastguard Worker ** to be the same. In other words, the comparison operator is "IS" 9953*a3141fd3SAndroid Build Coastguard Worker ** (or "IS NOT DISTINCT FROM") and not "==". 9954*a3141fd3SAndroid Build Coastguard Worker ** 9955*a3141fd3SAndroid Build Coastguard Worker ** If a virtual table implementation is unable to meet the requirements 9956*a3141fd3SAndroid Build Coastguard Worker ** specified above, then it must not set the "orderByConsumed" flag in the 9957*a3141fd3SAndroid Build Coastguard Worker ** [sqlite3_index_info] object or an incorrect answer may result. 9958*a3141fd3SAndroid Build Coastguard Worker ** 9959*a3141fd3SAndroid Build Coastguard Worker ** ^A virtual table implementation is always free to return rows in any order 9960*a3141fd3SAndroid Build Coastguard Worker ** it wants, as long as the "orderByConsumed" flag is not set. ^When the 9961*a3141fd3SAndroid Build Coastguard Worker ** the "orderByConsumed" flag is unset, the query planner will add extra 9962*a3141fd3SAndroid Build Coastguard Worker ** [bytecode] to ensure that the final results returned by the SQL query are 9963*a3141fd3SAndroid Build Coastguard Worker ** ordered correctly. The use of the "orderByConsumed" flag and the 9964*a3141fd3SAndroid Build Coastguard Worker ** sqlite3_vtab_distinct() interface is merely an optimization. ^Careful 9965*a3141fd3SAndroid Build Coastguard Worker ** use of the sqlite3_vtab_distinct() interface and the "orderByConsumed" 9966*a3141fd3SAndroid Build Coastguard Worker ** flag might help queries against a virtual table to run faster. Being 9967*a3141fd3SAndroid Build Coastguard Worker ** overly aggressive and setting the "orderByConsumed" flag when it is not 9968*a3141fd3SAndroid Build Coastguard Worker ** valid to do so, on the other hand, might cause SQLite to return incorrect 9969*a3141fd3SAndroid Build Coastguard Worker ** results. 9970*a3141fd3SAndroid Build Coastguard Worker */ 9971*a3141fd3SAndroid Build Coastguard Worker SQLITE_API int sqlite3_vtab_distinct(sqlite3_index_info*); 9972*a3141fd3SAndroid Build Coastguard Worker 9973*a3141fd3SAndroid Build Coastguard Worker /* 9974*a3141fd3SAndroid Build Coastguard Worker ** CAPI3REF: Identify and handle IN constraints in xBestIndex 9975*a3141fd3SAndroid Build Coastguard Worker ** 9976*a3141fd3SAndroid Build Coastguard Worker ** This interface may only be used from within an 9977*a3141fd3SAndroid Build Coastguard Worker ** [xBestIndex|xBestIndex() method] of a [virtual table] implementation. 9978*a3141fd3SAndroid Build Coastguard Worker ** The result of invoking this interface from any other context is 9979*a3141fd3SAndroid Build Coastguard Worker ** undefined and probably harmful. 9980*a3141fd3SAndroid Build Coastguard Worker ** 9981*a3141fd3SAndroid Build Coastguard Worker ** ^(A constraint on a virtual table of the form 9982*a3141fd3SAndroid Build Coastguard Worker ** "[IN operator|column IN (...)]" is 9983*a3141fd3SAndroid Build Coastguard Worker ** communicated to the xBestIndex method as a 9984*a3141fd3SAndroid Build Coastguard Worker ** [SQLITE_INDEX_CONSTRAINT_EQ] constraint.)^ If xBestIndex wants to use 9985*a3141fd3SAndroid Build Coastguard Worker ** this constraint, it must set the corresponding 9986*a3141fd3SAndroid Build Coastguard Worker ** aConstraintUsage[].argvIndex to a positive integer. ^(Then, under 9987*a3141fd3SAndroid Build Coastguard Worker ** the usual mode of handling IN operators, SQLite generates [bytecode] 9988*a3141fd3SAndroid Build Coastguard Worker ** that invokes the [xFilter|xFilter() method] once for each value 9989*a3141fd3SAndroid Build Coastguard Worker ** on the right-hand side of the IN operator.)^ Thus the virtual table 9990*a3141fd3SAndroid Build Coastguard Worker ** only sees a single value from the right-hand side of the IN operator 9991*a3141fd3SAndroid Build Coastguard Worker ** at a time. 9992*a3141fd3SAndroid Build Coastguard Worker ** 9993*a3141fd3SAndroid Build Coastguard Worker ** In some cases, however, it would be advantageous for the virtual 9994*a3141fd3SAndroid Build Coastguard Worker ** table to see all values on the right-hand of the IN operator all at 9995*a3141fd3SAndroid Build Coastguard Worker ** once. The sqlite3_vtab_in() interfaces facilitates this in two ways: 9996*a3141fd3SAndroid Build Coastguard Worker ** 9997*a3141fd3SAndroid Build Coastguard Worker ** <ol> 9998*a3141fd3SAndroid Build Coastguard Worker ** <li><p> 9999*a3141fd3SAndroid Build Coastguard Worker ** ^A call to sqlite3_vtab_in(P,N,-1) will return true (non-zero) 10000*a3141fd3SAndroid Build Coastguard Worker ** if and only if the [sqlite3_index_info|P->aConstraint][N] constraint 10001*a3141fd3SAndroid Build Coastguard Worker ** is an [IN operator] that can be processed all at once. ^In other words, 10002*a3141fd3SAndroid Build Coastguard Worker ** sqlite3_vtab_in() with -1 in the third argument is a mechanism 10003*a3141fd3SAndroid Build Coastguard Worker ** by which the virtual table can ask SQLite if all-at-once processing 10004*a3141fd3SAndroid Build Coastguard Worker ** of the IN operator is even possible. 10005*a3141fd3SAndroid Build Coastguard Worker ** 10006*a3141fd3SAndroid Build Coastguard Worker ** <li><p> 10007*a3141fd3SAndroid Build Coastguard Worker ** ^A call to sqlite3_vtab_in(P,N,F) with F==1 or F==0 indicates 10008*a3141fd3SAndroid Build Coastguard Worker ** to SQLite that the virtual table does or does not want to process 10009*a3141fd3SAndroid Build Coastguard Worker ** the IN operator all-at-once, respectively. ^Thus when the third 10010*a3141fd3SAndroid Build Coastguard Worker ** parameter (F) is non-negative, this interface is the mechanism by 10011*a3141fd3SAndroid Build Coastguard Worker ** which the virtual table tells SQLite how it wants to process the 10012*a3141fd3SAndroid Build Coastguard Worker ** IN operator. 10013*a3141fd3SAndroid Build Coastguard Worker ** </ol> 10014*a3141fd3SAndroid Build Coastguard Worker ** 10015*a3141fd3SAndroid Build Coastguard Worker ** ^The sqlite3_vtab_in(P,N,F) interface can be invoked multiple times 10016*a3141fd3SAndroid Build Coastguard Worker ** within the same xBestIndex method call. ^For any given P,N pair, 10017*a3141fd3SAndroid Build Coastguard Worker ** the return value from sqlite3_vtab_in(P,N,F) will always be the same 10018*a3141fd3SAndroid Build Coastguard Worker ** within the same xBestIndex call. ^If the interface returns true 10019*a3141fd3SAndroid Build Coastguard Worker ** (non-zero), that means that the constraint is an IN operator 10020*a3141fd3SAndroid Build Coastguard Worker ** that can be processed all-at-once. ^If the constraint is not an IN 10021*a3141fd3SAndroid Build Coastguard Worker ** operator or cannot be processed all-at-once, then the interface returns 10022*a3141fd3SAndroid Build Coastguard Worker ** false. 10023*a3141fd3SAndroid Build Coastguard Worker ** 10024*a3141fd3SAndroid Build Coastguard Worker ** ^(All-at-once processing of the IN operator is selected if both of the 10025*a3141fd3SAndroid Build Coastguard Worker ** following conditions are met: 10026*a3141fd3SAndroid Build Coastguard Worker ** 10027*a3141fd3SAndroid Build Coastguard Worker ** <ol> 10028*a3141fd3SAndroid Build Coastguard Worker ** <li><p> The P->aConstraintUsage[N].argvIndex value is set to a positive 10029*a3141fd3SAndroid Build Coastguard Worker ** integer. This is how the virtual table tells SQLite that it wants to 10030*a3141fd3SAndroid Build Coastguard Worker ** use the N-th constraint. 10031*a3141fd3SAndroid Build Coastguard Worker ** 10032*a3141fd3SAndroid Build Coastguard Worker ** <li><p> The last call to sqlite3_vtab_in(P,N,F) for which F was 10033*a3141fd3SAndroid Build Coastguard Worker ** non-negative had F>=1. 10034*a3141fd3SAndroid Build Coastguard Worker ** </ol>)^ 10035*a3141fd3SAndroid Build Coastguard Worker ** 10036*a3141fd3SAndroid Build Coastguard Worker ** ^If either or both of the conditions above are false, then SQLite uses 10037*a3141fd3SAndroid Build Coastguard Worker ** the traditional one-at-a-time processing strategy for the IN constraint. 10038*a3141fd3SAndroid Build Coastguard Worker ** ^If both conditions are true, then the argvIndex-th parameter to the 10039*a3141fd3SAndroid Build Coastguard Worker ** xFilter method will be an [sqlite3_value] that appears to be NULL, 10040*a3141fd3SAndroid Build Coastguard Worker ** but which can be passed to [sqlite3_vtab_in_first()] and 10041*a3141fd3SAndroid Build Coastguard Worker ** [sqlite3_vtab_in_next()] to find all values on the right-hand side 10042*a3141fd3SAndroid Build Coastguard Worker ** of the IN constraint. 10043*a3141fd3SAndroid Build Coastguard Worker */ 10044*a3141fd3SAndroid Build Coastguard Worker SQLITE_API int sqlite3_vtab_in(sqlite3_index_info*, int iCons, int bHandle); 10045*a3141fd3SAndroid Build Coastguard Worker 10046*a3141fd3SAndroid Build Coastguard Worker /* 10047*a3141fd3SAndroid Build Coastguard Worker ** CAPI3REF: Find all elements on the right-hand side of an IN constraint. 10048*a3141fd3SAndroid Build Coastguard Worker ** 10049*a3141fd3SAndroid Build Coastguard Worker ** These interfaces are only useful from within the 10050*a3141fd3SAndroid Build Coastguard Worker ** [xFilter|xFilter() method] of a [virtual table] implementation. 10051*a3141fd3SAndroid Build Coastguard Worker ** The result of invoking these interfaces from any other context 10052*a3141fd3SAndroid Build Coastguard Worker ** is undefined and probably harmful. 10053*a3141fd3SAndroid Build Coastguard Worker ** 10054*a3141fd3SAndroid Build Coastguard Worker ** The X parameter in a call to sqlite3_vtab_in_first(X,P) or 10055*a3141fd3SAndroid Build Coastguard Worker ** sqlite3_vtab_in_next(X,P) should be one of the parameters to the 10056*a3141fd3SAndroid Build Coastguard Worker ** xFilter method which invokes these routines, and specifically 10057*a3141fd3SAndroid Build Coastguard Worker ** a parameter that was previously selected for all-at-once IN constraint 10058*a3141fd3SAndroid Build Coastguard Worker ** processing use the [sqlite3_vtab_in()] interface in the 10059*a3141fd3SAndroid Build Coastguard Worker ** [xBestIndex|xBestIndex method]. ^(If the X parameter is not 10060*a3141fd3SAndroid Build Coastguard Worker ** an xFilter argument that was selected for all-at-once IN constraint 10061*a3141fd3SAndroid Build Coastguard Worker ** processing, then these routines return [SQLITE_ERROR].)^ 10062*a3141fd3SAndroid Build Coastguard Worker ** 10063*a3141fd3SAndroid Build Coastguard Worker ** ^(Use these routines to access all values on the right-hand side 10064*a3141fd3SAndroid Build Coastguard Worker ** of the IN constraint using code like the following: 10065*a3141fd3SAndroid Build Coastguard Worker ** 10066*a3141fd3SAndroid Build Coastguard Worker ** <blockquote><pre> 10067*a3141fd3SAndroid Build Coastguard Worker ** for(rc=sqlite3_vtab_in_first(pList, &pVal); 10068*a3141fd3SAndroid Build Coastguard Worker ** rc==SQLITE_OK && pVal; 10069*a3141fd3SAndroid Build Coastguard Worker ** rc=sqlite3_vtab_in_next(pList, &pVal) 10070*a3141fd3SAndroid Build Coastguard Worker ** ){ 10071*a3141fd3SAndroid Build Coastguard Worker ** // do something with pVal 10072*a3141fd3SAndroid Build Coastguard Worker ** } 10073*a3141fd3SAndroid Build Coastguard Worker ** if( rc!=SQLITE_OK ){ 10074*a3141fd3SAndroid Build Coastguard Worker ** // an error has occurred 10075*a3141fd3SAndroid Build Coastguard Worker ** } 10076*a3141fd3SAndroid Build Coastguard Worker ** </pre></blockquote>)^ 10077*a3141fd3SAndroid Build Coastguard Worker ** 10078*a3141fd3SAndroid Build Coastguard Worker ** ^On success, the sqlite3_vtab_in_first(X,P) and sqlite3_vtab_in_next(X,P) 10079*a3141fd3SAndroid Build Coastguard Worker ** routines return SQLITE_OK and set *P to point to the first or next value 10080*a3141fd3SAndroid Build Coastguard Worker ** on the RHS of the IN constraint. ^If there are no more values on the 10081*a3141fd3SAndroid Build Coastguard Worker ** right hand side of the IN constraint, then *P is set to NULL and these 10082*a3141fd3SAndroid Build Coastguard Worker ** routines return [SQLITE_DONE]. ^The return value might be 10083*a3141fd3SAndroid Build Coastguard Worker ** some other value, such as SQLITE_NOMEM, in the event of a malfunction. 10084*a3141fd3SAndroid Build Coastguard Worker ** 10085*a3141fd3SAndroid Build Coastguard Worker ** The *ppOut values returned by these routines are only valid until the 10086*a3141fd3SAndroid Build Coastguard Worker ** next call to either of these routines or until the end of the xFilter 10087*a3141fd3SAndroid Build Coastguard Worker ** method from which these routines were called. If the virtual table 10088*a3141fd3SAndroid Build Coastguard Worker ** implementation needs to retain the *ppOut values for longer, it must make 10089*a3141fd3SAndroid Build Coastguard Worker ** copies. The *ppOut values are [protected sqlite3_value|protected]. 10090*a3141fd3SAndroid Build Coastguard Worker */ 10091*a3141fd3SAndroid Build Coastguard Worker SQLITE_API int sqlite3_vtab_in_first(sqlite3_value *pVal, sqlite3_value **ppOut); 10092*a3141fd3SAndroid Build Coastguard Worker SQLITE_API int sqlite3_vtab_in_next(sqlite3_value *pVal, sqlite3_value **ppOut); 10093*a3141fd3SAndroid Build Coastguard Worker 10094*a3141fd3SAndroid Build Coastguard Worker /* 10095*a3141fd3SAndroid Build Coastguard Worker ** CAPI3REF: Constraint values in xBestIndex() 10096*a3141fd3SAndroid Build Coastguard Worker ** METHOD: sqlite3_index_info 10097*a3141fd3SAndroid Build Coastguard Worker ** 10098*a3141fd3SAndroid Build Coastguard Worker ** This API may only be used from within the [xBestIndex|xBestIndex method] 10099*a3141fd3SAndroid Build Coastguard Worker ** of a [virtual table] implementation. The result of calling this interface 10100*a3141fd3SAndroid Build Coastguard Worker ** from outside of an xBestIndex method are undefined and probably harmful. 10101*a3141fd3SAndroid Build Coastguard Worker ** 10102*a3141fd3SAndroid Build Coastguard Worker ** ^When the sqlite3_vtab_rhs_value(P,J,V) interface is invoked from within 10103*a3141fd3SAndroid Build Coastguard Worker ** the [xBestIndex] method of a [virtual table] implementation, with P being 10104*a3141fd3SAndroid Build Coastguard Worker ** a copy of the [sqlite3_index_info] object pointer passed into xBestIndex and 10105*a3141fd3SAndroid Build Coastguard Worker ** J being a 0-based index into P->aConstraint[], then this routine 10106*a3141fd3SAndroid Build Coastguard Worker ** attempts to set *V to the value of the right-hand operand of 10107*a3141fd3SAndroid Build Coastguard Worker ** that constraint if the right-hand operand is known. ^If the 10108*a3141fd3SAndroid Build Coastguard Worker ** right-hand operand is not known, then *V is set to a NULL pointer. 10109*a3141fd3SAndroid Build Coastguard Worker ** ^The sqlite3_vtab_rhs_value(P,J,V) interface returns SQLITE_OK if 10110*a3141fd3SAndroid Build Coastguard Worker ** and only if *V is set to a value. ^The sqlite3_vtab_rhs_value(P,J,V) 10111*a3141fd3SAndroid Build Coastguard Worker ** inteface returns SQLITE_NOTFOUND if the right-hand side of the J-th 10112*a3141fd3SAndroid Build Coastguard Worker ** constraint is not available. ^The sqlite3_vtab_rhs_value() interface 10113*a3141fd3SAndroid Build Coastguard Worker ** can return an result code other than SQLITE_OK or SQLITE_NOTFOUND if 10114*a3141fd3SAndroid Build Coastguard Worker ** something goes wrong. 10115*a3141fd3SAndroid Build Coastguard Worker ** 10116*a3141fd3SAndroid Build Coastguard Worker ** The sqlite3_vtab_rhs_value() interface is usually only successful if 10117*a3141fd3SAndroid Build Coastguard Worker ** the right-hand operand of a constraint is a literal value in the original 10118*a3141fd3SAndroid Build Coastguard Worker ** SQL statement. If the right-hand operand is an expression or a reference 10119*a3141fd3SAndroid Build Coastguard Worker ** to some other column or a [host parameter], then sqlite3_vtab_rhs_value() 10120*a3141fd3SAndroid Build Coastguard Worker ** will probably return [SQLITE_NOTFOUND]. 10121*a3141fd3SAndroid Build Coastguard Worker ** 10122*a3141fd3SAndroid Build Coastguard Worker ** ^(Some constraints, such as [SQLITE_INDEX_CONSTRAINT_ISNULL] and 10123*a3141fd3SAndroid Build Coastguard Worker ** [SQLITE_INDEX_CONSTRAINT_ISNOTNULL], have no right-hand operand. For such 10124*a3141fd3SAndroid Build Coastguard Worker ** constraints, sqlite3_vtab_rhs_value() always returns SQLITE_NOTFOUND.)^ 10125*a3141fd3SAndroid Build Coastguard Worker ** 10126*a3141fd3SAndroid Build Coastguard Worker ** ^The [sqlite3_value] object returned in *V is a protected sqlite3_value 10127*a3141fd3SAndroid Build Coastguard Worker ** and remains valid for the duration of the xBestIndex method call. 10128*a3141fd3SAndroid Build Coastguard Worker ** ^When xBestIndex returns, the sqlite3_value object returned by 10129*a3141fd3SAndroid Build Coastguard Worker ** sqlite3_vtab_rhs_value() is automatically deallocated. 10130*a3141fd3SAndroid Build Coastguard Worker ** 10131*a3141fd3SAndroid Build Coastguard Worker ** The "_rhs_" in the name of this routine is an abbreviation for 10132*a3141fd3SAndroid Build Coastguard Worker ** "Right-Hand Side". 10133*a3141fd3SAndroid Build Coastguard Worker */ 10134*a3141fd3SAndroid Build Coastguard Worker SQLITE_API int sqlite3_vtab_rhs_value(sqlite3_index_info*, int, sqlite3_value **ppVal); 10135*a3141fd3SAndroid Build Coastguard Worker 10136*a3141fd3SAndroid Build Coastguard Worker /* 10137*a3141fd3SAndroid Build Coastguard Worker ** CAPI3REF: Conflict resolution modes 10138*a3141fd3SAndroid Build Coastguard Worker ** KEYWORDS: {conflict resolution mode} 10139*a3141fd3SAndroid Build Coastguard Worker ** 10140*a3141fd3SAndroid Build Coastguard Worker ** These constants are returned by [sqlite3_vtab_on_conflict()] to 10141*a3141fd3SAndroid Build Coastguard Worker ** inform a [virtual table] implementation what the [ON CONFLICT] mode 10142*a3141fd3SAndroid Build Coastguard Worker ** is for the SQL statement being evaluated. 10143*a3141fd3SAndroid Build Coastguard Worker ** 10144*a3141fd3SAndroid Build Coastguard Worker ** Note that the [SQLITE_IGNORE] constant is also used as a potential 10145*a3141fd3SAndroid Build Coastguard Worker ** return value from the [sqlite3_set_authorizer()] callback and that 10146*a3141fd3SAndroid Build Coastguard Worker ** [SQLITE_ABORT] is also a [result code]. 10147*a3141fd3SAndroid Build Coastguard Worker */ 10148*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_ROLLBACK 1 10149*a3141fd3SAndroid Build Coastguard Worker /* #define SQLITE_IGNORE 2 // Also used by sqlite3_authorizer() callback */ 10150*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_FAIL 3 10151*a3141fd3SAndroid Build Coastguard Worker /* #define SQLITE_ABORT 4 // Also an error code */ 10152*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_REPLACE 5 10153*a3141fd3SAndroid Build Coastguard Worker 10154*a3141fd3SAndroid Build Coastguard Worker /* 10155*a3141fd3SAndroid Build Coastguard Worker ** CAPI3REF: Prepared Statement Scan Status Opcodes 10156*a3141fd3SAndroid Build Coastguard Worker ** KEYWORDS: {scanstatus options} 10157*a3141fd3SAndroid Build Coastguard Worker ** 10158*a3141fd3SAndroid Build Coastguard Worker ** The following constants can be used for the T parameter to the 10159*a3141fd3SAndroid Build Coastguard Worker ** [sqlite3_stmt_scanstatus(S,X,T,V)] interface. Each constant designates a 10160*a3141fd3SAndroid Build Coastguard Worker ** different metric for sqlite3_stmt_scanstatus() to return. 10161*a3141fd3SAndroid Build Coastguard Worker ** 10162*a3141fd3SAndroid Build Coastguard Worker ** When the value returned to V is a string, space to hold that string is 10163*a3141fd3SAndroid Build Coastguard Worker ** managed by the prepared statement S and will be automatically freed when 10164*a3141fd3SAndroid Build Coastguard Worker ** S is finalized. 10165*a3141fd3SAndroid Build Coastguard Worker ** 10166*a3141fd3SAndroid Build Coastguard Worker ** Not all values are available for all query elements. When a value is 10167*a3141fd3SAndroid Build Coastguard Worker ** not available, the output variable is set to -1 if the value is numeric, 10168*a3141fd3SAndroid Build Coastguard Worker ** or to NULL if it is a string (SQLITE_SCANSTAT_NAME). 10169*a3141fd3SAndroid Build Coastguard Worker ** 10170*a3141fd3SAndroid Build Coastguard Worker ** <dl> 10171*a3141fd3SAndroid Build Coastguard Worker ** [[SQLITE_SCANSTAT_NLOOP]] <dt>SQLITE_SCANSTAT_NLOOP</dt> 10172*a3141fd3SAndroid Build Coastguard Worker ** <dd>^The [sqlite3_int64] variable pointed to by the V parameter will be 10173*a3141fd3SAndroid Build Coastguard Worker ** set to the total number of times that the X-th loop has run.</dd> 10174*a3141fd3SAndroid Build Coastguard Worker ** 10175*a3141fd3SAndroid Build Coastguard Worker ** [[SQLITE_SCANSTAT_NVISIT]] <dt>SQLITE_SCANSTAT_NVISIT</dt> 10176*a3141fd3SAndroid Build Coastguard Worker ** <dd>^The [sqlite3_int64] variable pointed to by the V parameter will be set 10177*a3141fd3SAndroid Build Coastguard Worker ** to the total number of rows examined by all iterations of the X-th loop.</dd> 10178*a3141fd3SAndroid Build Coastguard Worker ** 10179*a3141fd3SAndroid Build Coastguard Worker ** [[SQLITE_SCANSTAT_EST]] <dt>SQLITE_SCANSTAT_EST</dt> 10180*a3141fd3SAndroid Build Coastguard Worker ** <dd>^The "double" variable pointed to by the V parameter will be set to the 10181*a3141fd3SAndroid Build Coastguard Worker ** query planner's estimate for the average number of rows output from each 10182*a3141fd3SAndroid Build Coastguard Worker ** iteration of the X-th loop. If the query planner's estimates was accurate, 10183*a3141fd3SAndroid Build Coastguard Worker ** then this value will approximate the quotient NVISIT/NLOOP and the 10184*a3141fd3SAndroid Build Coastguard Worker ** product of this value for all prior loops with the same SELECTID will 10185*a3141fd3SAndroid Build Coastguard Worker ** be the NLOOP value for the current loop. 10186*a3141fd3SAndroid Build Coastguard Worker ** 10187*a3141fd3SAndroid Build Coastguard Worker ** [[SQLITE_SCANSTAT_NAME]] <dt>SQLITE_SCANSTAT_NAME</dt> 10188*a3141fd3SAndroid Build Coastguard Worker ** <dd>^The "const char *" variable pointed to by the V parameter will be set 10189*a3141fd3SAndroid Build Coastguard Worker ** to a zero-terminated UTF-8 string containing the name of the index or table 10190*a3141fd3SAndroid Build Coastguard Worker ** used for the X-th loop. 10191*a3141fd3SAndroid Build Coastguard Worker ** 10192*a3141fd3SAndroid Build Coastguard Worker ** [[SQLITE_SCANSTAT_EXPLAIN]] <dt>SQLITE_SCANSTAT_EXPLAIN</dt> 10193*a3141fd3SAndroid Build Coastguard Worker ** <dd>^The "const char *" variable pointed to by the V parameter will be set 10194*a3141fd3SAndroid Build Coastguard Worker ** to a zero-terminated UTF-8 string containing the [EXPLAIN QUERY PLAN] 10195*a3141fd3SAndroid Build Coastguard Worker ** description for the X-th loop. 10196*a3141fd3SAndroid Build Coastguard Worker ** 10197*a3141fd3SAndroid Build Coastguard Worker ** [[SQLITE_SCANSTAT_SELECTID]] <dt>SQLITE_SCANSTAT_SELECTID</dt> 10198*a3141fd3SAndroid Build Coastguard Worker ** <dd>^The "int" variable pointed to by the V parameter will be set to the 10199*a3141fd3SAndroid Build Coastguard Worker ** id for the X-th query plan element. The id value is unique within the 10200*a3141fd3SAndroid Build Coastguard Worker ** statement. The select-id is the same value as is output in the first 10201*a3141fd3SAndroid Build Coastguard Worker ** column of an [EXPLAIN QUERY PLAN] query. 10202*a3141fd3SAndroid Build Coastguard Worker ** 10203*a3141fd3SAndroid Build Coastguard Worker ** [[SQLITE_SCANSTAT_PARENTID]] <dt>SQLITE_SCANSTAT_PARENTID</dt> 10204*a3141fd3SAndroid Build Coastguard Worker ** <dd>The "int" variable pointed to by the V parameter will be set to the 10205*a3141fd3SAndroid Build Coastguard Worker ** the id of the parent of the current query element, if applicable, or 10206*a3141fd3SAndroid Build Coastguard Worker ** to zero if the query element has no parent. This is the same value as 10207*a3141fd3SAndroid Build Coastguard Worker ** returned in the second column of an [EXPLAIN QUERY PLAN] query. 10208*a3141fd3SAndroid Build Coastguard Worker ** 10209*a3141fd3SAndroid Build Coastguard Worker ** [[SQLITE_SCANSTAT_NCYCLE]] <dt>SQLITE_SCANSTAT_NCYCLE</dt> 10210*a3141fd3SAndroid Build Coastguard Worker ** <dd>The sqlite3_int64 output value is set to the number of cycles, 10211*a3141fd3SAndroid Build Coastguard Worker ** according to the processor time-stamp counter, that elapsed while the 10212*a3141fd3SAndroid Build Coastguard Worker ** query element was being processed. This value is not available for 10213*a3141fd3SAndroid Build Coastguard Worker ** all query elements - if it is unavailable the output variable is 10214*a3141fd3SAndroid Build Coastguard Worker ** set to -1. 10215*a3141fd3SAndroid Build Coastguard Worker ** </dl> 10216*a3141fd3SAndroid Build Coastguard Worker */ 10217*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_SCANSTAT_NLOOP 0 10218*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_SCANSTAT_NVISIT 1 10219*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_SCANSTAT_EST 2 10220*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_SCANSTAT_NAME 3 10221*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_SCANSTAT_EXPLAIN 4 10222*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_SCANSTAT_SELECTID 5 10223*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_SCANSTAT_PARENTID 6 10224*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_SCANSTAT_NCYCLE 7 10225*a3141fd3SAndroid Build Coastguard Worker 10226*a3141fd3SAndroid Build Coastguard Worker /* 10227*a3141fd3SAndroid Build Coastguard Worker ** CAPI3REF: Prepared Statement Scan Status 10228*a3141fd3SAndroid Build Coastguard Worker ** METHOD: sqlite3_stmt 10229*a3141fd3SAndroid Build Coastguard Worker ** 10230*a3141fd3SAndroid Build Coastguard Worker ** These interfaces return information about the predicted and measured 10231*a3141fd3SAndroid Build Coastguard Worker ** performance for pStmt. Advanced applications can use this 10232*a3141fd3SAndroid Build Coastguard Worker ** interface to compare the predicted and the measured performance and 10233*a3141fd3SAndroid Build Coastguard Worker ** issue warnings and/or rerun [ANALYZE] if discrepancies are found. 10234*a3141fd3SAndroid Build Coastguard Worker ** 10235*a3141fd3SAndroid Build Coastguard Worker ** Since this interface is expected to be rarely used, it is only 10236*a3141fd3SAndroid Build Coastguard Worker ** available if SQLite is compiled using the [SQLITE_ENABLE_STMT_SCANSTATUS] 10237*a3141fd3SAndroid Build Coastguard Worker ** compile-time option. 10238*a3141fd3SAndroid Build Coastguard Worker ** 10239*a3141fd3SAndroid Build Coastguard Worker ** The "iScanStatusOp" parameter determines which status information to return. 10240*a3141fd3SAndroid Build Coastguard Worker ** The "iScanStatusOp" must be one of the [scanstatus options] or the behavior 10241*a3141fd3SAndroid Build Coastguard Worker ** of this interface is undefined. ^The requested measurement is written into 10242*a3141fd3SAndroid Build Coastguard Worker ** a variable pointed to by the "pOut" parameter. 10243*a3141fd3SAndroid Build Coastguard Worker ** 10244*a3141fd3SAndroid Build Coastguard Worker ** The "flags" parameter must be passed a mask of flags. At present only 10245*a3141fd3SAndroid Build Coastguard Worker ** one flag is defined - SQLITE_SCANSTAT_COMPLEX. If SQLITE_SCANSTAT_COMPLEX 10246*a3141fd3SAndroid Build Coastguard Worker ** is specified, then status information is available for all elements 10247*a3141fd3SAndroid Build Coastguard Worker ** of a query plan that are reported by "EXPLAIN QUERY PLAN" output. If 10248*a3141fd3SAndroid Build Coastguard Worker ** SQLITE_SCANSTAT_COMPLEX is not specified, then only query plan elements 10249*a3141fd3SAndroid Build Coastguard Worker ** that correspond to query loops (the "SCAN..." and "SEARCH..." elements of 10250*a3141fd3SAndroid Build Coastguard Worker ** the EXPLAIN QUERY PLAN output) are available. Invoking API 10251*a3141fd3SAndroid Build Coastguard Worker ** sqlite3_stmt_scanstatus() is equivalent to calling 10252*a3141fd3SAndroid Build Coastguard Worker ** sqlite3_stmt_scanstatus_v2() with a zeroed flags parameter. 10253*a3141fd3SAndroid Build Coastguard Worker ** 10254*a3141fd3SAndroid Build Coastguard Worker ** Parameter "idx" identifies the specific query element to retrieve statistics 10255*a3141fd3SAndroid Build Coastguard Worker ** for. Query elements are numbered starting from zero. A value of -1 may be 10256*a3141fd3SAndroid Build Coastguard Worker ** to query for statistics regarding the entire query. ^If idx is out of range 10257*a3141fd3SAndroid Build Coastguard Worker ** - less than -1 or greater than or equal to the total number of query 10258*a3141fd3SAndroid Build Coastguard Worker ** elements used to implement the statement - a non-zero value is returned and 10259*a3141fd3SAndroid Build Coastguard Worker ** the variable that pOut points to is unchanged. 10260*a3141fd3SAndroid Build Coastguard Worker ** 10261*a3141fd3SAndroid Build Coastguard Worker ** See also: [sqlite3_stmt_scanstatus_reset()] 10262*a3141fd3SAndroid Build Coastguard Worker */ 10263*a3141fd3SAndroid Build Coastguard Worker SQLITE_API int sqlite3_stmt_scanstatus( 10264*a3141fd3SAndroid Build Coastguard Worker sqlite3_stmt *pStmt, /* Prepared statement for which info desired */ 10265*a3141fd3SAndroid Build Coastguard Worker int idx, /* Index of loop to report on */ 10266*a3141fd3SAndroid Build Coastguard Worker int iScanStatusOp, /* Information desired. SQLITE_SCANSTAT_* */ 10267*a3141fd3SAndroid Build Coastguard Worker void *pOut /* Result written here */ 10268*a3141fd3SAndroid Build Coastguard Worker ); 10269*a3141fd3SAndroid Build Coastguard Worker SQLITE_API int sqlite3_stmt_scanstatus_v2( 10270*a3141fd3SAndroid Build Coastguard Worker sqlite3_stmt *pStmt, /* Prepared statement for which info desired */ 10271*a3141fd3SAndroid Build Coastguard Worker int idx, /* Index of loop to report on */ 10272*a3141fd3SAndroid Build Coastguard Worker int iScanStatusOp, /* Information desired. SQLITE_SCANSTAT_* */ 10273*a3141fd3SAndroid Build Coastguard Worker int flags, /* Mask of flags defined below */ 10274*a3141fd3SAndroid Build Coastguard Worker void *pOut /* Result written here */ 10275*a3141fd3SAndroid Build Coastguard Worker ); 10276*a3141fd3SAndroid Build Coastguard Worker 10277*a3141fd3SAndroid Build Coastguard Worker /* 10278*a3141fd3SAndroid Build Coastguard Worker ** CAPI3REF: Prepared Statement Scan Status 10279*a3141fd3SAndroid Build Coastguard Worker ** KEYWORDS: {scan status flags} 10280*a3141fd3SAndroid Build Coastguard Worker */ 10281*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_SCANSTAT_COMPLEX 0x0001 10282*a3141fd3SAndroid Build Coastguard Worker 10283*a3141fd3SAndroid Build Coastguard Worker /* 10284*a3141fd3SAndroid Build Coastguard Worker ** CAPI3REF: Zero Scan-Status Counters 10285*a3141fd3SAndroid Build Coastguard Worker ** METHOD: sqlite3_stmt 10286*a3141fd3SAndroid Build Coastguard Worker ** 10287*a3141fd3SAndroid Build Coastguard Worker ** ^Zero all [sqlite3_stmt_scanstatus()] related event counters. 10288*a3141fd3SAndroid Build Coastguard Worker ** 10289*a3141fd3SAndroid Build Coastguard Worker ** This API is only available if the library is built with pre-processor 10290*a3141fd3SAndroid Build Coastguard Worker ** symbol [SQLITE_ENABLE_STMT_SCANSTATUS] defined. 10291*a3141fd3SAndroid Build Coastguard Worker */ 10292*a3141fd3SAndroid Build Coastguard Worker SQLITE_API void sqlite3_stmt_scanstatus_reset(sqlite3_stmt*); 10293*a3141fd3SAndroid Build Coastguard Worker 10294*a3141fd3SAndroid Build Coastguard Worker /* 10295*a3141fd3SAndroid Build Coastguard Worker ** CAPI3REF: Flush caches to disk mid-transaction 10296*a3141fd3SAndroid Build Coastguard Worker ** METHOD: sqlite3 10297*a3141fd3SAndroid Build Coastguard Worker ** 10298*a3141fd3SAndroid Build Coastguard Worker ** ^If a write-transaction is open on [database connection] D when the 10299*a3141fd3SAndroid Build Coastguard Worker ** [sqlite3_db_cacheflush(D)] interface invoked, any dirty 10300*a3141fd3SAndroid Build Coastguard Worker ** pages in the pager-cache that are not currently in use are written out 10301*a3141fd3SAndroid Build Coastguard Worker ** to disk. A dirty page may be in use if a database cursor created by an 10302*a3141fd3SAndroid Build Coastguard Worker ** active SQL statement is reading from it, or if it is page 1 of a database 10303*a3141fd3SAndroid Build Coastguard Worker ** file (page 1 is always "in use"). ^The [sqlite3_db_cacheflush(D)] 10304*a3141fd3SAndroid Build Coastguard Worker ** interface flushes caches for all schemas - "main", "temp", and 10305*a3141fd3SAndroid Build Coastguard Worker ** any [attached] databases. 10306*a3141fd3SAndroid Build Coastguard Worker ** 10307*a3141fd3SAndroid Build Coastguard Worker ** ^If this function needs to obtain extra database locks before dirty pages 10308*a3141fd3SAndroid Build Coastguard Worker ** can be flushed to disk, it does so. ^If those locks cannot be obtained 10309*a3141fd3SAndroid Build Coastguard Worker ** immediately and there is a busy-handler callback configured, it is invoked 10310*a3141fd3SAndroid Build Coastguard Worker ** in the usual manner. ^If the required lock still cannot be obtained, then 10311*a3141fd3SAndroid Build Coastguard Worker ** the database is skipped and an attempt made to flush any dirty pages 10312*a3141fd3SAndroid Build Coastguard Worker ** belonging to the next (if any) database. ^If any databases are skipped 10313*a3141fd3SAndroid Build Coastguard Worker ** because locks cannot be obtained, but no other error occurs, this 10314*a3141fd3SAndroid Build Coastguard Worker ** function returns SQLITE_BUSY. 10315*a3141fd3SAndroid Build Coastguard Worker ** 10316*a3141fd3SAndroid Build Coastguard Worker ** ^If any other error occurs while flushing dirty pages to disk (for 10317*a3141fd3SAndroid Build Coastguard Worker ** example an IO error or out-of-memory condition), then processing is 10318*a3141fd3SAndroid Build Coastguard Worker ** abandoned and an SQLite [error code] is returned to the caller immediately. 10319*a3141fd3SAndroid Build Coastguard Worker ** 10320*a3141fd3SAndroid Build Coastguard Worker ** ^Otherwise, if no error occurs, [sqlite3_db_cacheflush()] returns SQLITE_OK. 10321*a3141fd3SAndroid Build Coastguard Worker ** 10322*a3141fd3SAndroid Build Coastguard Worker ** ^This function does not set the database handle error code or message 10323*a3141fd3SAndroid Build Coastguard Worker ** returned by the [sqlite3_errcode()] and [sqlite3_errmsg()] functions. 10324*a3141fd3SAndroid Build Coastguard Worker */ 10325*a3141fd3SAndroid Build Coastguard Worker SQLITE_API int sqlite3_db_cacheflush(sqlite3*); 10326*a3141fd3SAndroid Build Coastguard Worker 10327*a3141fd3SAndroid Build Coastguard Worker /* 10328*a3141fd3SAndroid Build Coastguard Worker ** CAPI3REF: The pre-update hook. 10329*a3141fd3SAndroid Build Coastguard Worker ** METHOD: sqlite3 10330*a3141fd3SAndroid Build Coastguard Worker ** 10331*a3141fd3SAndroid Build Coastguard Worker ** ^These interfaces are only available if SQLite is compiled using the 10332*a3141fd3SAndroid Build Coastguard Worker ** [SQLITE_ENABLE_PREUPDATE_HOOK] compile-time option. 10333*a3141fd3SAndroid Build Coastguard Worker ** 10334*a3141fd3SAndroid Build Coastguard Worker ** ^The [sqlite3_preupdate_hook()] interface registers a callback function 10335*a3141fd3SAndroid Build Coastguard Worker ** that is invoked prior to each [INSERT], [UPDATE], and [DELETE] operation 10336*a3141fd3SAndroid Build Coastguard Worker ** on a database table. 10337*a3141fd3SAndroid Build Coastguard Worker ** ^At most one preupdate hook may be registered at a time on a single 10338*a3141fd3SAndroid Build Coastguard Worker ** [database connection]; each call to [sqlite3_preupdate_hook()] overrides 10339*a3141fd3SAndroid Build Coastguard Worker ** the previous setting. 10340*a3141fd3SAndroid Build Coastguard Worker ** ^The preupdate hook is disabled by invoking [sqlite3_preupdate_hook()] 10341*a3141fd3SAndroid Build Coastguard Worker ** with a NULL pointer as the second parameter. 10342*a3141fd3SAndroid Build Coastguard Worker ** ^The third parameter to [sqlite3_preupdate_hook()] is passed through as 10343*a3141fd3SAndroid Build Coastguard Worker ** the first parameter to callbacks. 10344*a3141fd3SAndroid Build Coastguard Worker ** 10345*a3141fd3SAndroid Build Coastguard Worker ** ^The preupdate hook only fires for changes to real database tables; the 10346*a3141fd3SAndroid Build Coastguard Worker ** preupdate hook is not invoked for changes to [virtual tables] or to 10347*a3141fd3SAndroid Build Coastguard Worker ** system tables like sqlite_sequence or sqlite_stat1. 10348*a3141fd3SAndroid Build Coastguard Worker ** 10349*a3141fd3SAndroid Build Coastguard Worker ** ^The second parameter to the preupdate callback is a pointer to 10350*a3141fd3SAndroid Build Coastguard Worker ** the [database connection] that registered the preupdate hook. 10351*a3141fd3SAndroid Build Coastguard Worker ** ^The third parameter to the preupdate callback is one of the constants 10352*a3141fd3SAndroid Build Coastguard Worker ** [SQLITE_INSERT], [SQLITE_DELETE], or [SQLITE_UPDATE] to identify the 10353*a3141fd3SAndroid Build Coastguard Worker ** kind of update operation that is about to occur. 10354*a3141fd3SAndroid Build Coastguard Worker ** ^(The fourth parameter to the preupdate callback is the name of the 10355*a3141fd3SAndroid Build Coastguard Worker ** database within the database connection that is being modified. This 10356*a3141fd3SAndroid Build Coastguard Worker ** will be "main" for the main database or "temp" for TEMP tables or 10357*a3141fd3SAndroid Build Coastguard Worker ** the name given after the AS keyword in the [ATTACH] statement for attached 10358*a3141fd3SAndroid Build Coastguard Worker ** databases.)^ 10359*a3141fd3SAndroid Build Coastguard Worker ** ^The fifth parameter to the preupdate callback is the name of the 10360*a3141fd3SAndroid Build Coastguard Worker ** table that is being modified. 10361*a3141fd3SAndroid Build Coastguard Worker ** 10362*a3141fd3SAndroid Build Coastguard Worker ** For an UPDATE or DELETE operation on a [rowid table], the sixth 10363*a3141fd3SAndroid Build Coastguard Worker ** parameter passed to the preupdate callback is the initial [rowid] of the 10364*a3141fd3SAndroid Build Coastguard Worker ** row being modified or deleted. For an INSERT operation on a rowid table, 10365*a3141fd3SAndroid Build Coastguard Worker ** or any operation on a WITHOUT ROWID table, the value of the sixth 10366*a3141fd3SAndroid Build Coastguard Worker ** parameter is undefined. For an INSERT or UPDATE on a rowid table the 10367*a3141fd3SAndroid Build Coastguard Worker ** seventh parameter is the final rowid value of the row being inserted 10368*a3141fd3SAndroid Build Coastguard Worker ** or updated. The value of the seventh parameter passed to the callback 10369*a3141fd3SAndroid Build Coastguard Worker ** function is not defined for operations on WITHOUT ROWID tables, or for 10370*a3141fd3SAndroid Build Coastguard Worker ** DELETE operations on rowid tables. 10371*a3141fd3SAndroid Build Coastguard Worker ** 10372*a3141fd3SAndroid Build Coastguard Worker ** ^The sqlite3_preupdate_hook(D,C,P) function returns the P argument from 10373*a3141fd3SAndroid Build Coastguard Worker ** the previous call on the same [database connection] D, or NULL for 10374*a3141fd3SAndroid Build Coastguard Worker ** the first call on D. 10375*a3141fd3SAndroid Build Coastguard Worker ** 10376*a3141fd3SAndroid Build Coastguard Worker ** The [sqlite3_preupdate_old()], [sqlite3_preupdate_new()], 10377*a3141fd3SAndroid Build Coastguard Worker ** [sqlite3_preupdate_count()], and [sqlite3_preupdate_depth()] interfaces 10378*a3141fd3SAndroid Build Coastguard Worker ** provide additional information about a preupdate event. These routines 10379*a3141fd3SAndroid Build Coastguard Worker ** may only be called from within a preupdate callback. Invoking any of 10380*a3141fd3SAndroid Build Coastguard Worker ** these routines from outside of a preupdate callback or with a 10381*a3141fd3SAndroid Build Coastguard Worker ** [database connection] pointer that is different from the one supplied 10382*a3141fd3SAndroid Build Coastguard Worker ** to the preupdate callback results in undefined and probably undesirable 10383*a3141fd3SAndroid Build Coastguard Worker ** behavior. 10384*a3141fd3SAndroid Build Coastguard Worker ** 10385*a3141fd3SAndroid Build Coastguard Worker ** ^The [sqlite3_preupdate_count(D)] interface returns the number of columns 10386*a3141fd3SAndroid Build Coastguard Worker ** in the row that is being inserted, updated, or deleted. 10387*a3141fd3SAndroid Build Coastguard Worker ** 10388*a3141fd3SAndroid Build Coastguard Worker ** ^The [sqlite3_preupdate_old(D,N,P)] interface writes into P a pointer to 10389*a3141fd3SAndroid Build Coastguard Worker ** a [protected sqlite3_value] that contains the value of the Nth column of 10390*a3141fd3SAndroid Build Coastguard Worker ** the table row before it is updated. The N parameter must be between 0 10391*a3141fd3SAndroid Build Coastguard Worker ** and one less than the number of columns or the behavior will be 10392*a3141fd3SAndroid Build Coastguard Worker ** undefined. This must only be used within SQLITE_UPDATE and SQLITE_DELETE 10393*a3141fd3SAndroid Build Coastguard Worker ** preupdate callbacks; if it is used by an SQLITE_INSERT callback then the 10394*a3141fd3SAndroid Build Coastguard Worker ** behavior is undefined. The [sqlite3_value] that P points to 10395*a3141fd3SAndroid Build Coastguard Worker ** will be destroyed when the preupdate callback returns. 10396*a3141fd3SAndroid Build Coastguard Worker ** 10397*a3141fd3SAndroid Build Coastguard Worker ** ^The [sqlite3_preupdate_new(D,N,P)] interface writes into P a pointer to 10398*a3141fd3SAndroid Build Coastguard Worker ** a [protected sqlite3_value] that contains the value of the Nth column of 10399*a3141fd3SAndroid Build Coastguard Worker ** the table row after it is updated. The N parameter must be between 0 10400*a3141fd3SAndroid Build Coastguard Worker ** and one less than the number of columns or the behavior will be 10401*a3141fd3SAndroid Build Coastguard Worker ** undefined. This must only be used within SQLITE_INSERT and SQLITE_UPDATE 10402*a3141fd3SAndroid Build Coastguard Worker ** preupdate callbacks; if it is used by an SQLITE_DELETE callback then the 10403*a3141fd3SAndroid Build Coastguard Worker ** behavior is undefined. The [sqlite3_value] that P points to 10404*a3141fd3SAndroid Build Coastguard Worker ** will be destroyed when the preupdate callback returns. 10405*a3141fd3SAndroid Build Coastguard Worker ** 10406*a3141fd3SAndroid Build Coastguard Worker ** ^The [sqlite3_preupdate_depth(D)] interface returns 0 if the preupdate 10407*a3141fd3SAndroid Build Coastguard Worker ** callback was invoked as a result of a direct insert, update, or delete 10408*a3141fd3SAndroid Build Coastguard Worker ** operation; or 1 for inserts, updates, or deletes invoked by top-level 10409*a3141fd3SAndroid Build Coastguard Worker ** triggers; or 2 for changes resulting from triggers called by top-level 10410*a3141fd3SAndroid Build Coastguard Worker ** triggers; and so forth. 10411*a3141fd3SAndroid Build Coastguard Worker ** 10412*a3141fd3SAndroid Build Coastguard Worker ** When the [sqlite3_blob_write()] API is used to update a blob column, 10413*a3141fd3SAndroid Build Coastguard Worker ** the pre-update hook is invoked with SQLITE_DELETE. This is because the 10414*a3141fd3SAndroid Build Coastguard Worker ** in this case the new values are not available. In this case, when a 10415*a3141fd3SAndroid Build Coastguard Worker ** callback made with op==SQLITE_DELETE is actually a write using the 10416*a3141fd3SAndroid Build Coastguard Worker ** sqlite3_blob_write() API, the [sqlite3_preupdate_blobwrite()] returns 10417*a3141fd3SAndroid Build Coastguard Worker ** the index of the column being written. In other cases, where the 10418*a3141fd3SAndroid Build Coastguard Worker ** pre-update hook is being invoked for some other reason, including a 10419*a3141fd3SAndroid Build Coastguard Worker ** regular DELETE, sqlite3_preupdate_blobwrite() returns -1. 10420*a3141fd3SAndroid Build Coastguard Worker ** 10421*a3141fd3SAndroid Build Coastguard Worker ** See also: [sqlite3_update_hook()] 10422*a3141fd3SAndroid Build Coastguard Worker */ 10423*a3141fd3SAndroid Build Coastguard Worker #if defined(SQLITE_ENABLE_PREUPDATE_HOOK) 10424*a3141fd3SAndroid Build Coastguard Worker SQLITE_API void *sqlite3_preupdate_hook( 10425*a3141fd3SAndroid Build Coastguard Worker sqlite3 *db, 10426*a3141fd3SAndroid Build Coastguard Worker void(*xPreUpdate)( 10427*a3141fd3SAndroid Build Coastguard Worker void *pCtx, /* Copy of third arg to preupdate_hook() */ 10428*a3141fd3SAndroid Build Coastguard Worker sqlite3 *db, /* Database handle */ 10429*a3141fd3SAndroid Build Coastguard Worker int op, /* SQLITE_UPDATE, DELETE or INSERT */ 10430*a3141fd3SAndroid Build Coastguard Worker char const *zDb, /* Database name */ 10431*a3141fd3SAndroid Build Coastguard Worker char const *zName, /* Table name */ 10432*a3141fd3SAndroid Build Coastguard Worker sqlite3_int64 iKey1, /* Rowid of row about to be deleted/updated */ 10433*a3141fd3SAndroid Build Coastguard Worker sqlite3_int64 iKey2 /* New rowid value (for a rowid UPDATE) */ 10434*a3141fd3SAndroid Build Coastguard Worker ), 10435*a3141fd3SAndroid Build Coastguard Worker void* 10436*a3141fd3SAndroid Build Coastguard Worker ); 10437*a3141fd3SAndroid Build Coastguard Worker SQLITE_API int sqlite3_preupdate_old(sqlite3 *, int, sqlite3_value **); 10438*a3141fd3SAndroid Build Coastguard Worker SQLITE_API int sqlite3_preupdate_count(sqlite3 *); 10439*a3141fd3SAndroid Build Coastguard Worker SQLITE_API int sqlite3_preupdate_depth(sqlite3 *); 10440*a3141fd3SAndroid Build Coastguard Worker SQLITE_API int sqlite3_preupdate_new(sqlite3 *, int, sqlite3_value **); 10441*a3141fd3SAndroid Build Coastguard Worker SQLITE_API int sqlite3_preupdate_blobwrite(sqlite3 *); 10442*a3141fd3SAndroid Build Coastguard Worker #endif 10443*a3141fd3SAndroid Build Coastguard Worker 10444*a3141fd3SAndroid Build Coastguard Worker /* 10445*a3141fd3SAndroid Build Coastguard Worker ** CAPI3REF: Low-level system error code 10446*a3141fd3SAndroid Build Coastguard Worker ** METHOD: sqlite3 10447*a3141fd3SAndroid Build Coastguard Worker ** 10448*a3141fd3SAndroid Build Coastguard Worker ** ^Attempt to return the underlying operating system error code or error 10449*a3141fd3SAndroid Build Coastguard Worker ** number that caused the most recent I/O error or failure to open a file. 10450*a3141fd3SAndroid Build Coastguard Worker ** The return value is OS-dependent. For example, on unix systems, after 10451*a3141fd3SAndroid Build Coastguard Worker ** [sqlite3_open_v2()] returns [SQLITE_CANTOPEN], this interface could be 10452*a3141fd3SAndroid Build Coastguard Worker ** called to get back the underlying "errno" that caused the problem, such 10453*a3141fd3SAndroid Build Coastguard Worker ** as ENOSPC, EAUTH, EISDIR, and so forth. 10454*a3141fd3SAndroid Build Coastguard Worker */ 10455*a3141fd3SAndroid Build Coastguard Worker SQLITE_API int sqlite3_system_errno(sqlite3*); 10456*a3141fd3SAndroid Build Coastguard Worker 10457*a3141fd3SAndroid Build Coastguard Worker /* 10458*a3141fd3SAndroid Build Coastguard Worker ** CAPI3REF: Database Snapshot 10459*a3141fd3SAndroid Build Coastguard Worker ** KEYWORDS: {snapshot} {sqlite3_snapshot} 10460*a3141fd3SAndroid Build Coastguard Worker ** 10461*a3141fd3SAndroid Build Coastguard Worker ** An instance of the snapshot object records the state of a [WAL mode] 10462*a3141fd3SAndroid Build Coastguard Worker ** database for some specific point in history. 10463*a3141fd3SAndroid Build Coastguard Worker ** 10464*a3141fd3SAndroid Build Coastguard Worker ** In [WAL mode], multiple [database connections] that are open on the 10465*a3141fd3SAndroid Build Coastguard Worker ** same database file can each be reading a different historical version 10466*a3141fd3SAndroid Build Coastguard Worker ** of the database file. When a [database connection] begins a read 10467*a3141fd3SAndroid Build Coastguard Worker ** transaction, that connection sees an unchanging copy of the database 10468*a3141fd3SAndroid Build Coastguard Worker ** as it existed for the point in time when the transaction first started. 10469*a3141fd3SAndroid Build Coastguard Worker ** Subsequent changes to the database from other connections are not seen 10470*a3141fd3SAndroid Build Coastguard Worker ** by the reader until a new read transaction is started. 10471*a3141fd3SAndroid Build Coastguard Worker ** 10472*a3141fd3SAndroid Build Coastguard Worker ** The sqlite3_snapshot object records state information about an historical 10473*a3141fd3SAndroid Build Coastguard Worker ** version of the database file so that it is possible to later open a new read 10474*a3141fd3SAndroid Build Coastguard Worker ** transaction that sees that historical version of the database rather than 10475*a3141fd3SAndroid Build Coastguard Worker ** the most recent version. 10476*a3141fd3SAndroid Build Coastguard Worker */ 10477*a3141fd3SAndroid Build Coastguard Worker typedef struct sqlite3_snapshot { 10478*a3141fd3SAndroid Build Coastguard Worker unsigned char hidden[48]; 10479*a3141fd3SAndroid Build Coastguard Worker } sqlite3_snapshot; 10480*a3141fd3SAndroid Build Coastguard Worker 10481*a3141fd3SAndroid Build Coastguard Worker /* 10482*a3141fd3SAndroid Build Coastguard Worker ** CAPI3REF: Record A Database Snapshot 10483*a3141fd3SAndroid Build Coastguard Worker ** CONSTRUCTOR: sqlite3_snapshot 10484*a3141fd3SAndroid Build Coastguard Worker ** 10485*a3141fd3SAndroid Build Coastguard Worker ** ^The [sqlite3_snapshot_get(D,S,P)] interface attempts to make a 10486*a3141fd3SAndroid Build Coastguard Worker ** new [sqlite3_snapshot] object that records the current state of 10487*a3141fd3SAndroid Build Coastguard Worker ** schema S in database connection D. ^On success, the 10488*a3141fd3SAndroid Build Coastguard Worker ** [sqlite3_snapshot_get(D,S,P)] interface writes a pointer to the newly 10489*a3141fd3SAndroid Build Coastguard Worker ** created [sqlite3_snapshot] object into *P and returns SQLITE_OK. 10490*a3141fd3SAndroid Build Coastguard Worker ** If there is not already a read-transaction open on schema S when 10491*a3141fd3SAndroid Build Coastguard Worker ** this function is called, one is opened automatically. 10492*a3141fd3SAndroid Build Coastguard Worker ** 10493*a3141fd3SAndroid Build Coastguard Worker ** The following must be true for this function to succeed. If any of 10494*a3141fd3SAndroid Build Coastguard Worker ** the following statements are false when sqlite3_snapshot_get() is 10495*a3141fd3SAndroid Build Coastguard Worker ** called, SQLITE_ERROR is returned. The final value of *P is undefined 10496*a3141fd3SAndroid Build Coastguard Worker ** in this case. 10497*a3141fd3SAndroid Build Coastguard Worker ** 10498*a3141fd3SAndroid Build Coastguard Worker ** <ul> 10499*a3141fd3SAndroid Build Coastguard Worker ** <li> The database handle must not be in [autocommit mode]. 10500*a3141fd3SAndroid Build Coastguard Worker ** 10501*a3141fd3SAndroid Build Coastguard Worker ** <li> Schema S of [database connection] D must be a [WAL mode] database. 10502*a3141fd3SAndroid Build Coastguard Worker ** 10503*a3141fd3SAndroid Build Coastguard Worker ** <li> There must not be a write transaction open on schema S of database 10504*a3141fd3SAndroid Build Coastguard Worker ** connection D. 10505*a3141fd3SAndroid Build Coastguard Worker ** 10506*a3141fd3SAndroid Build Coastguard Worker ** <li> One or more transactions must have been written to the current wal 10507*a3141fd3SAndroid Build Coastguard Worker ** file since it was created on disk (by any connection). This means 10508*a3141fd3SAndroid Build Coastguard Worker ** that a snapshot cannot be taken on a wal mode database with no wal 10509*a3141fd3SAndroid Build Coastguard Worker ** file immediately after it is first opened. At least one transaction 10510*a3141fd3SAndroid Build Coastguard Worker ** must be written to it first. 10511*a3141fd3SAndroid Build Coastguard Worker ** </ul> 10512*a3141fd3SAndroid Build Coastguard Worker ** 10513*a3141fd3SAndroid Build Coastguard Worker ** This function may also return SQLITE_NOMEM. If it is called with the 10514*a3141fd3SAndroid Build Coastguard Worker ** database handle in autocommit mode but fails for some other reason, 10515*a3141fd3SAndroid Build Coastguard Worker ** whether or not a read transaction is opened on schema S is undefined. 10516*a3141fd3SAndroid Build Coastguard Worker ** 10517*a3141fd3SAndroid Build Coastguard Worker ** The [sqlite3_snapshot] object returned from a successful call to 10518*a3141fd3SAndroid Build Coastguard Worker ** [sqlite3_snapshot_get()] must be freed using [sqlite3_snapshot_free()] 10519*a3141fd3SAndroid Build Coastguard Worker ** to avoid a memory leak. 10520*a3141fd3SAndroid Build Coastguard Worker ** 10521*a3141fd3SAndroid Build Coastguard Worker ** The [sqlite3_snapshot_get()] interface is only available when the 10522*a3141fd3SAndroid Build Coastguard Worker ** [SQLITE_ENABLE_SNAPSHOT] compile-time option is used. 10523*a3141fd3SAndroid Build Coastguard Worker */ 10524*a3141fd3SAndroid Build Coastguard Worker SQLITE_API SQLITE_EXPERIMENTAL int sqlite3_snapshot_get( 10525*a3141fd3SAndroid Build Coastguard Worker sqlite3 *db, 10526*a3141fd3SAndroid Build Coastguard Worker const char *zSchema, 10527*a3141fd3SAndroid Build Coastguard Worker sqlite3_snapshot **ppSnapshot 10528*a3141fd3SAndroid Build Coastguard Worker ); 10529*a3141fd3SAndroid Build Coastguard Worker 10530*a3141fd3SAndroid Build Coastguard Worker /* 10531*a3141fd3SAndroid Build Coastguard Worker ** CAPI3REF: Start a read transaction on an historical snapshot 10532*a3141fd3SAndroid Build Coastguard Worker ** METHOD: sqlite3_snapshot 10533*a3141fd3SAndroid Build Coastguard Worker ** 10534*a3141fd3SAndroid Build Coastguard Worker ** ^The [sqlite3_snapshot_open(D,S,P)] interface either starts a new read 10535*a3141fd3SAndroid Build Coastguard Worker ** transaction or upgrades an existing one for schema S of 10536*a3141fd3SAndroid Build Coastguard Worker ** [database connection] D such that the read transaction refers to 10537*a3141fd3SAndroid Build Coastguard Worker ** historical [snapshot] P, rather than the most recent change to the 10538*a3141fd3SAndroid Build Coastguard Worker ** database. ^The [sqlite3_snapshot_open()] interface returns SQLITE_OK 10539*a3141fd3SAndroid Build Coastguard Worker ** on success or an appropriate [error code] if it fails. 10540*a3141fd3SAndroid Build Coastguard Worker ** 10541*a3141fd3SAndroid Build Coastguard Worker ** ^In order to succeed, the database connection must not be in 10542*a3141fd3SAndroid Build Coastguard Worker ** [autocommit mode] when [sqlite3_snapshot_open(D,S,P)] is called. If there 10543*a3141fd3SAndroid Build Coastguard Worker ** is already a read transaction open on schema S, then the database handle 10544*a3141fd3SAndroid Build Coastguard Worker ** must have no active statements (SELECT statements that have been passed 10545*a3141fd3SAndroid Build Coastguard Worker ** to sqlite3_step() but not sqlite3_reset() or sqlite3_finalize()). 10546*a3141fd3SAndroid Build Coastguard Worker ** SQLITE_ERROR is returned if either of these conditions is violated, or 10547*a3141fd3SAndroid Build Coastguard Worker ** if schema S does not exist, or if the snapshot object is invalid. 10548*a3141fd3SAndroid Build Coastguard Worker ** 10549*a3141fd3SAndroid Build Coastguard Worker ** ^A call to sqlite3_snapshot_open() will fail to open if the specified 10550*a3141fd3SAndroid Build Coastguard Worker ** snapshot has been overwritten by a [checkpoint]. In this case 10551*a3141fd3SAndroid Build Coastguard Worker ** SQLITE_ERROR_SNAPSHOT is returned. 10552*a3141fd3SAndroid Build Coastguard Worker ** 10553*a3141fd3SAndroid Build Coastguard Worker ** If there is already a read transaction open when this function is 10554*a3141fd3SAndroid Build Coastguard Worker ** invoked, then the same read transaction remains open (on the same 10555*a3141fd3SAndroid Build Coastguard Worker ** database snapshot) if SQLITE_ERROR, SQLITE_BUSY or SQLITE_ERROR_SNAPSHOT 10556*a3141fd3SAndroid Build Coastguard Worker ** is returned. If another error code - for example SQLITE_PROTOCOL or an 10557*a3141fd3SAndroid Build Coastguard Worker ** SQLITE_IOERR error code - is returned, then the final state of the 10558*a3141fd3SAndroid Build Coastguard Worker ** read transaction is undefined. If SQLITE_OK is returned, then the 10559*a3141fd3SAndroid Build Coastguard Worker ** read transaction is now open on database snapshot P. 10560*a3141fd3SAndroid Build Coastguard Worker ** 10561*a3141fd3SAndroid Build Coastguard Worker ** ^(A call to [sqlite3_snapshot_open(D,S,P)] will fail if the 10562*a3141fd3SAndroid Build Coastguard Worker ** database connection D does not know that the database file for 10563*a3141fd3SAndroid Build Coastguard Worker ** schema S is in [WAL mode]. A database connection might not know 10564*a3141fd3SAndroid Build Coastguard Worker ** that the database file is in [WAL mode] if there has been no prior 10565*a3141fd3SAndroid Build Coastguard Worker ** I/O on that database connection, or if the database entered [WAL mode] 10566*a3141fd3SAndroid Build Coastguard Worker ** after the most recent I/O on the database connection.)^ 10567*a3141fd3SAndroid Build Coastguard Worker ** (Hint: Run "[PRAGMA application_id]" against a newly opened 10568*a3141fd3SAndroid Build Coastguard Worker ** database connection in order to make it ready to use snapshots.) 10569*a3141fd3SAndroid Build Coastguard Worker ** 10570*a3141fd3SAndroid Build Coastguard Worker ** The [sqlite3_snapshot_open()] interface is only available when the 10571*a3141fd3SAndroid Build Coastguard Worker ** [SQLITE_ENABLE_SNAPSHOT] compile-time option is used. 10572*a3141fd3SAndroid Build Coastguard Worker */ 10573*a3141fd3SAndroid Build Coastguard Worker SQLITE_API SQLITE_EXPERIMENTAL int sqlite3_snapshot_open( 10574*a3141fd3SAndroid Build Coastguard Worker sqlite3 *db, 10575*a3141fd3SAndroid Build Coastguard Worker const char *zSchema, 10576*a3141fd3SAndroid Build Coastguard Worker sqlite3_snapshot *pSnapshot 10577*a3141fd3SAndroid Build Coastguard Worker ); 10578*a3141fd3SAndroid Build Coastguard Worker 10579*a3141fd3SAndroid Build Coastguard Worker /* 10580*a3141fd3SAndroid Build Coastguard Worker ** CAPI3REF: Destroy a snapshot 10581*a3141fd3SAndroid Build Coastguard Worker ** DESTRUCTOR: sqlite3_snapshot 10582*a3141fd3SAndroid Build Coastguard Worker ** 10583*a3141fd3SAndroid Build Coastguard Worker ** ^The [sqlite3_snapshot_free(P)] interface destroys [sqlite3_snapshot] P. 10584*a3141fd3SAndroid Build Coastguard Worker ** The application must eventually free every [sqlite3_snapshot] object 10585*a3141fd3SAndroid Build Coastguard Worker ** using this routine to avoid a memory leak. 10586*a3141fd3SAndroid Build Coastguard Worker ** 10587*a3141fd3SAndroid Build Coastguard Worker ** The [sqlite3_snapshot_free()] interface is only available when the 10588*a3141fd3SAndroid Build Coastguard Worker ** [SQLITE_ENABLE_SNAPSHOT] compile-time option is used. 10589*a3141fd3SAndroid Build Coastguard Worker */ 10590*a3141fd3SAndroid Build Coastguard Worker SQLITE_API SQLITE_EXPERIMENTAL void sqlite3_snapshot_free(sqlite3_snapshot*); 10591*a3141fd3SAndroid Build Coastguard Worker 10592*a3141fd3SAndroid Build Coastguard Worker /* 10593*a3141fd3SAndroid Build Coastguard Worker ** CAPI3REF: Compare the ages of two snapshot handles. 10594*a3141fd3SAndroid Build Coastguard Worker ** METHOD: sqlite3_snapshot 10595*a3141fd3SAndroid Build Coastguard Worker ** 10596*a3141fd3SAndroid Build Coastguard Worker ** The sqlite3_snapshot_cmp(P1, P2) interface is used to compare the ages 10597*a3141fd3SAndroid Build Coastguard Worker ** of two valid snapshot handles. 10598*a3141fd3SAndroid Build Coastguard Worker ** 10599*a3141fd3SAndroid Build Coastguard Worker ** If the two snapshot handles are not associated with the same database 10600*a3141fd3SAndroid Build Coastguard Worker ** file, the result of the comparison is undefined. 10601*a3141fd3SAndroid Build Coastguard Worker ** 10602*a3141fd3SAndroid Build Coastguard Worker ** Additionally, the result of the comparison is only valid if both of the 10603*a3141fd3SAndroid Build Coastguard Worker ** snapshot handles were obtained by calling sqlite3_snapshot_get() since the 10604*a3141fd3SAndroid Build Coastguard Worker ** last time the wal file was deleted. The wal file is deleted when the 10605*a3141fd3SAndroid Build Coastguard Worker ** database is changed back to rollback mode or when the number of database 10606*a3141fd3SAndroid Build Coastguard Worker ** clients drops to zero. If either snapshot handle was obtained before the 10607*a3141fd3SAndroid Build Coastguard Worker ** wal file was last deleted, the value returned by this function 10608*a3141fd3SAndroid Build Coastguard Worker ** is undefined. 10609*a3141fd3SAndroid Build Coastguard Worker ** 10610*a3141fd3SAndroid Build Coastguard Worker ** Otherwise, this API returns a negative value if P1 refers to an older 10611*a3141fd3SAndroid Build Coastguard Worker ** snapshot than P2, zero if the two handles refer to the same database 10612*a3141fd3SAndroid Build Coastguard Worker ** snapshot, and a positive value if P1 is a newer snapshot than P2. 10613*a3141fd3SAndroid Build Coastguard Worker ** 10614*a3141fd3SAndroid Build Coastguard Worker ** This interface is only available if SQLite is compiled with the 10615*a3141fd3SAndroid Build Coastguard Worker ** [SQLITE_ENABLE_SNAPSHOT] option. 10616*a3141fd3SAndroid Build Coastguard Worker */ 10617*a3141fd3SAndroid Build Coastguard Worker SQLITE_API SQLITE_EXPERIMENTAL int sqlite3_snapshot_cmp( 10618*a3141fd3SAndroid Build Coastguard Worker sqlite3_snapshot *p1, 10619*a3141fd3SAndroid Build Coastguard Worker sqlite3_snapshot *p2 10620*a3141fd3SAndroid Build Coastguard Worker ); 10621*a3141fd3SAndroid Build Coastguard Worker 10622*a3141fd3SAndroid Build Coastguard Worker /* 10623*a3141fd3SAndroid Build Coastguard Worker ** CAPI3REF: Recover snapshots from a wal file 10624*a3141fd3SAndroid Build Coastguard Worker ** METHOD: sqlite3_snapshot 10625*a3141fd3SAndroid Build Coastguard Worker ** 10626*a3141fd3SAndroid Build Coastguard Worker ** If a [WAL file] remains on disk after all database connections close 10627*a3141fd3SAndroid Build Coastguard Worker ** (either through the use of the [SQLITE_FCNTL_PERSIST_WAL] [file control] 10628*a3141fd3SAndroid Build Coastguard Worker ** or because the last process to have the database opened exited without 10629*a3141fd3SAndroid Build Coastguard Worker ** calling [sqlite3_close()]) and a new connection is subsequently opened 10630*a3141fd3SAndroid Build Coastguard Worker ** on that database and [WAL file], the [sqlite3_snapshot_open()] interface 10631*a3141fd3SAndroid Build Coastguard Worker ** will only be able to open the last transaction added to the WAL file 10632*a3141fd3SAndroid Build Coastguard Worker ** even though the WAL file contains other valid transactions. 10633*a3141fd3SAndroid Build Coastguard Worker ** 10634*a3141fd3SAndroid Build Coastguard Worker ** This function attempts to scan the WAL file associated with database zDb 10635*a3141fd3SAndroid Build Coastguard Worker ** of database handle db and make all valid snapshots available to 10636*a3141fd3SAndroid Build Coastguard Worker ** sqlite3_snapshot_open(). It is an error if there is already a read 10637*a3141fd3SAndroid Build Coastguard Worker ** transaction open on the database, or if the database is not a WAL mode 10638*a3141fd3SAndroid Build Coastguard Worker ** database. 10639*a3141fd3SAndroid Build Coastguard Worker ** 10640*a3141fd3SAndroid Build Coastguard Worker ** SQLITE_OK is returned if successful, or an SQLite error code otherwise. 10641*a3141fd3SAndroid Build Coastguard Worker ** 10642*a3141fd3SAndroid Build Coastguard Worker ** This interface is only available if SQLite is compiled with the 10643*a3141fd3SAndroid Build Coastguard Worker ** [SQLITE_ENABLE_SNAPSHOT] option. 10644*a3141fd3SAndroid Build Coastguard Worker */ 10645*a3141fd3SAndroid Build Coastguard Worker SQLITE_API SQLITE_EXPERIMENTAL int sqlite3_snapshot_recover(sqlite3 *db, const char *zDb); 10646*a3141fd3SAndroid Build Coastguard Worker 10647*a3141fd3SAndroid Build Coastguard Worker /* 10648*a3141fd3SAndroid Build Coastguard Worker ** CAPI3REF: Serialize a database 10649*a3141fd3SAndroid Build Coastguard Worker ** 10650*a3141fd3SAndroid Build Coastguard Worker ** The sqlite3_serialize(D,S,P,F) interface returns a pointer to memory 10651*a3141fd3SAndroid Build Coastguard Worker ** that is a serialization of the S database on [database connection] D. 10652*a3141fd3SAndroid Build Coastguard Worker ** If P is not a NULL pointer, then the size of the database in bytes 10653*a3141fd3SAndroid Build Coastguard Worker ** is written into *P. 10654*a3141fd3SAndroid Build Coastguard Worker ** 10655*a3141fd3SAndroid Build Coastguard Worker ** For an ordinary on-disk database file, the serialization is just a 10656*a3141fd3SAndroid Build Coastguard Worker ** copy of the disk file. For an in-memory database or a "TEMP" database, 10657*a3141fd3SAndroid Build Coastguard Worker ** the serialization is the same sequence of bytes which would be written 10658*a3141fd3SAndroid Build Coastguard Worker ** to disk if that database where backed up to disk. 10659*a3141fd3SAndroid Build Coastguard Worker ** 10660*a3141fd3SAndroid Build Coastguard Worker ** The usual case is that sqlite3_serialize() copies the serialization of 10661*a3141fd3SAndroid Build Coastguard Worker ** the database into memory obtained from [sqlite3_malloc64()] and returns 10662*a3141fd3SAndroid Build Coastguard Worker ** a pointer to that memory. The caller is responsible for freeing the 10663*a3141fd3SAndroid Build Coastguard Worker ** returned value to avoid a memory leak. However, if the F argument 10664*a3141fd3SAndroid Build Coastguard Worker ** contains the SQLITE_SERIALIZE_NOCOPY bit, then no memory allocations 10665*a3141fd3SAndroid Build Coastguard Worker ** are made, and the sqlite3_serialize() function will return a pointer 10666*a3141fd3SAndroid Build Coastguard Worker ** to the contiguous memory representation of the database that SQLite 10667*a3141fd3SAndroid Build Coastguard Worker ** is currently using for that database, or NULL if the no such contiguous 10668*a3141fd3SAndroid Build Coastguard Worker ** memory representation of the database exists. A contiguous memory 10669*a3141fd3SAndroid Build Coastguard Worker ** representation of the database will usually only exist if there has 10670*a3141fd3SAndroid Build Coastguard Worker ** been a prior call to [sqlite3_deserialize(D,S,...)] with the same 10671*a3141fd3SAndroid Build Coastguard Worker ** values of D and S. 10672*a3141fd3SAndroid Build Coastguard Worker ** The size of the database is written into *P even if the 10673*a3141fd3SAndroid Build Coastguard Worker ** SQLITE_SERIALIZE_NOCOPY bit is set but no contiguous copy 10674*a3141fd3SAndroid Build Coastguard Worker ** of the database exists. 10675*a3141fd3SAndroid Build Coastguard Worker ** 10676*a3141fd3SAndroid Build Coastguard Worker ** After the call, if the SQLITE_SERIALIZE_NOCOPY bit had been set, 10677*a3141fd3SAndroid Build Coastguard Worker ** the returned buffer content will remain accessible and unchanged 10678*a3141fd3SAndroid Build Coastguard Worker ** until either the next write operation on the connection or when 10679*a3141fd3SAndroid Build Coastguard Worker ** the connection is closed, and applications must not modify the 10680*a3141fd3SAndroid Build Coastguard Worker ** buffer. If the bit had been clear, the returned buffer will not 10681*a3141fd3SAndroid Build Coastguard Worker ** be accessed by SQLite after the call. 10682*a3141fd3SAndroid Build Coastguard Worker ** 10683*a3141fd3SAndroid Build Coastguard Worker ** A call to sqlite3_serialize(D,S,P,F) might return NULL even if the 10684*a3141fd3SAndroid Build Coastguard Worker ** SQLITE_SERIALIZE_NOCOPY bit is omitted from argument F if a memory 10685*a3141fd3SAndroid Build Coastguard Worker ** allocation error occurs. 10686*a3141fd3SAndroid Build Coastguard Worker ** 10687*a3141fd3SAndroid Build Coastguard Worker ** This interface is omitted if SQLite is compiled with the 10688*a3141fd3SAndroid Build Coastguard Worker ** [SQLITE_OMIT_DESERIALIZE] option. 10689*a3141fd3SAndroid Build Coastguard Worker */ 10690*a3141fd3SAndroid Build Coastguard Worker SQLITE_API unsigned char *sqlite3_serialize( 10691*a3141fd3SAndroid Build Coastguard Worker sqlite3 *db, /* The database connection */ 10692*a3141fd3SAndroid Build Coastguard Worker const char *zSchema, /* Which DB to serialize. ex: "main", "temp", ... */ 10693*a3141fd3SAndroid Build Coastguard Worker sqlite3_int64 *piSize, /* Write size of the DB here, if not NULL */ 10694*a3141fd3SAndroid Build Coastguard Worker unsigned int mFlags /* Zero or more SQLITE_SERIALIZE_* flags */ 10695*a3141fd3SAndroid Build Coastguard Worker ); 10696*a3141fd3SAndroid Build Coastguard Worker 10697*a3141fd3SAndroid Build Coastguard Worker /* 10698*a3141fd3SAndroid Build Coastguard Worker ** CAPI3REF: Flags for sqlite3_serialize 10699*a3141fd3SAndroid Build Coastguard Worker ** 10700*a3141fd3SAndroid Build Coastguard Worker ** Zero or more of the following constants can be OR-ed together for 10701*a3141fd3SAndroid Build Coastguard Worker ** the F argument to [sqlite3_serialize(D,S,P,F)]. 10702*a3141fd3SAndroid Build Coastguard Worker ** 10703*a3141fd3SAndroid Build Coastguard Worker ** SQLITE_SERIALIZE_NOCOPY means that [sqlite3_serialize()] will return 10704*a3141fd3SAndroid Build Coastguard Worker ** a pointer to contiguous in-memory database that it is currently using, 10705*a3141fd3SAndroid Build Coastguard Worker ** without making a copy of the database. If SQLite is not currently using 10706*a3141fd3SAndroid Build Coastguard Worker ** a contiguous in-memory database, then this option causes 10707*a3141fd3SAndroid Build Coastguard Worker ** [sqlite3_serialize()] to return a NULL pointer. SQLite will only be 10708*a3141fd3SAndroid Build Coastguard Worker ** using a contiguous in-memory database if it has been initialized by a 10709*a3141fd3SAndroid Build Coastguard Worker ** prior call to [sqlite3_deserialize()]. 10710*a3141fd3SAndroid Build Coastguard Worker */ 10711*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_SERIALIZE_NOCOPY 0x001 /* Do no memory allocations */ 10712*a3141fd3SAndroid Build Coastguard Worker 10713*a3141fd3SAndroid Build Coastguard Worker /* 10714*a3141fd3SAndroid Build Coastguard Worker ** CAPI3REF: Deserialize a database 10715*a3141fd3SAndroid Build Coastguard Worker ** 10716*a3141fd3SAndroid Build Coastguard Worker ** The sqlite3_deserialize(D,S,P,N,M,F) interface causes the 10717*a3141fd3SAndroid Build Coastguard Worker ** [database connection] D to disconnect from database S and then 10718*a3141fd3SAndroid Build Coastguard Worker ** reopen S as an in-memory database based on the serialization contained 10719*a3141fd3SAndroid Build Coastguard Worker ** in P. The serialized database P is N bytes in size. M is the size of 10720*a3141fd3SAndroid Build Coastguard Worker ** the buffer P, which might be larger than N. If M is larger than N, and 10721*a3141fd3SAndroid Build Coastguard Worker ** the SQLITE_DESERIALIZE_READONLY bit is not set in F, then SQLite is 10722*a3141fd3SAndroid Build Coastguard Worker ** permitted to add content to the in-memory database as long as the total 10723*a3141fd3SAndroid Build Coastguard Worker ** size does not exceed M bytes. 10724*a3141fd3SAndroid Build Coastguard Worker ** 10725*a3141fd3SAndroid Build Coastguard Worker ** If the SQLITE_DESERIALIZE_FREEONCLOSE bit is set in F, then SQLite will 10726*a3141fd3SAndroid Build Coastguard Worker ** invoke sqlite3_free() on the serialization buffer when the database 10727*a3141fd3SAndroid Build Coastguard Worker ** connection closes. If the SQLITE_DESERIALIZE_RESIZEABLE bit is set, then 10728*a3141fd3SAndroid Build Coastguard Worker ** SQLite will try to increase the buffer size using sqlite3_realloc64() 10729*a3141fd3SAndroid Build Coastguard Worker ** if writes on the database cause it to grow larger than M bytes. 10730*a3141fd3SAndroid Build Coastguard Worker ** 10731*a3141fd3SAndroid Build Coastguard Worker ** Applications must not modify the buffer P or invalidate it before 10732*a3141fd3SAndroid Build Coastguard Worker ** the database connection D is closed. 10733*a3141fd3SAndroid Build Coastguard Worker ** 10734*a3141fd3SAndroid Build Coastguard Worker ** The sqlite3_deserialize() interface will fail with SQLITE_BUSY if the 10735*a3141fd3SAndroid Build Coastguard Worker ** database is currently in a read transaction or is involved in a backup 10736*a3141fd3SAndroid Build Coastguard Worker ** operation. 10737*a3141fd3SAndroid Build Coastguard Worker ** 10738*a3141fd3SAndroid Build Coastguard Worker ** It is not possible to deserialized into the TEMP database. If the 10739*a3141fd3SAndroid Build Coastguard Worker ** S argument to sqlite3_deserialize(D,S,P,N,M,F) is "temp" then the 10740*a3141fd3SAndroid Build Coastguard Worker ** function returns SQLITE_ERROR. 10741*a3141fd3SAndroid Build Coastguard Worker ** 10742*a3141fd3SAndroid Build Coastguard Worker ** The deserialized database should not be in [WAL mode]. If the database 10743*a3141fd3SAndroid Build Coastguard Worker ** is in WAL mode, then any attempt to use the database file will result 10744*a3141fd3SAndroid Build Coastguard Worker ** in an [SQLITE_CANTOPEN] error. The application can set the 10745*a3141fd3SAndroid Build Coastguard Worker ** [file format version numbers] (bytes 18 and 19) of the input database P 10746*a3141fd3SAndroid Build Coastguard Worker ** to 0x01 prior to invoking sqlite3_deserialize(D,S,P,N,M,F) to force the 10747*a3141fd3SAndroid Build Coastguard Worker ** database file into rollback mode and work around this limitation. 10748*a3141fd3SAndroid Build Coastguard Worker ** 10749*a3141fd3SAndroid Build Coastguard Worker ** If sqlite3_deserialize(D,S,P,N,M,F) fails for any reason and if the 10750*a3141fd3SAndroid Build Coastguard Worker ** SQLITE_DESERIALIZE_FREEONCLOSE bit is set in argument F, then 10751*a3141fd3SAndroid Build Coastguard Worker ** [sqlite3_free()] is invoked on argument P prior to returning. 10752*a3141fd3SAndroid Build Coastguard Worker ** 10753*a3141fd3SAndroid Build Coastguard Worker ** This interface is omitted if SQLite is compiled with the 10754*a3141fd3SAndroid Build Coastguard Worker ** [SQLITE_OMIT_DESERIALIZE] option. 10755*a3141fd3SAndroid Build Coastguard Worker */ 10756*a3141fd3SAndroid Build Coastguard Worker SQLITE_API int sqlite3_deserialize( 10757*a3141fd3SAndroid Build Coastguard Worker sqlite3 *db, /* The database connection */ 10758*a3141fd3SAndroid Build Coastguard Worker const char *zSchema, /* Which DB to reopen with the deserialization */ 10759*a3141fd3SAndroid Build Coastguard Worker unsigned char *pData, /* The serialized database content */ 10760*a3141fd3SAndroid Build Coastguard Worker sqlite3_int64 szDb, /* Number bytes in the deserialization */ 10761*a3141fd3SAndroid Build Coastguard Worker sqlite3_int64 szBuf, /* Total size of buffer pData[] */ 10762*a3141fd3SAndroid Build Coastguard Worker unsigned mFlags /* Zero or more SQLITE_DESERIALIZE_* flags */ 10763*a3141fd3SAndroid Build Coastguard Worker ); 10764*a3141fd3SAndroid Build Coastguard Worker 10765*a3141fd3SAndroid Build Coastguard Worker /* 10766*a3141fd3SAndroid Build Coastguard Worker ** CAPI3REF: Flags for sqlite3_deserialize() 10767*a3141fd3SAndroid Build Coastguard Worker ** 10768*a3141fd3SAndroid Build Coastguard Worker ** The following are allowed values for 6th argument (the F argument) to 10769*a3141fd3SAndroid Build Coastguard Worker ** the [sqlite3_deserialize(D,S,P,N,M,F)] interface. 10770*a3141fd3SAndroid Build Coastguard Worker ** 10771*a3141fd3SAndroid Build Coastguard Worker ** The SQLITE_DESERIALIZE_FREEONCLOSE means that the database serialization 10772*a3141fd3SAndroid Build Coastguard Worker ** in the P argument is held in memory obtained from [sqlite3_malloc64()] 10773*a3141fd3SAndroid Build Coastguard Worker ** and that SQLite should take ownership of this memory and automatically 10774*a3141fd3SAndroid Build Coastguard Worker ** free it when it has finished using it. Without this flag, the caller 10775*a3141fd3SAndroid Build Coastguard Worker ** is responsible for freeing any dynamically allocated memory. 10776*a3141fd3SAndroid Build Coastguard Worker ** 10777*a3141fd3SAndroid Build Coastguard Worker ** The SQLITE_DESERIALIZE_RESIZEABLE flag means that SQLite is allowed to 10778*a3141fd3SAndroid Build Coastguard Worker ** grow the size of the database using calls to [sqlite3_realloc64()]. This 10779*a3141fd3SAndroid Build Coastguard Worker ** flag should only be used if SQLITE_DESERIALIZE_FREEONCLOSE is also used. 10780*a3141fd3SAndroid Build Coastguard Worker ** Without this flag, the deserialized database cannot increase in size beyond 10781*a3141fd3SAndroid Build Coastguard Worker ** the number of bytes specified by the M parameter. 10782*a3141fd3SAndroid Build Coastguard Worker ** 10783*a3141fd3SAndroid Build Coastguard Worker ** The SQLITE_DESERIALIZE_READONLY flag means that the deserialized database 10784*a3141fd3SAndroid Build Coastguard Worker ** should be treated as read-only. 10785*a3141fd3SAndroid Build Coastguard Worker */ 10786*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_DESERIALIZE_FREEONCLOSE 1 /* Call sqlite3_free() on close */ 10787*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_DESERIALIZE_RESIZEABLE 2 /* Resize using sqlite3_realloc64() */ 10788*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_DESERIALIZE_READONLY 4 /* Database is read-only */ 10789*a3141fd3SAndroid Build Coastguard Worker 10790*a3141fd3SAndroid Build Coastguard Worker /* 10791*a3141fd3SAndroid Build Coastguard Worker ** Undo the hack that converts floating point types to integer for 10792*a3141fd3SAndroid Build Coastguard Worker ** builds on processors without floating point support. 10793*a3141fd3SAndroid Build Coastguard Worker */ 10794*a3141fd3SAndroid Build Coastguard Worker #ifdef SQLITE_OMIT_FLOATING_POINT 10795*a3141fd3SAndroid Build Coastguard Worker # undef double 10796*a3141fd3SAndroid Build Coastguard Worker #endif 10797*a3141fd3SAndroid Build Coastguard Worker 10798*a3141fd3SAndroid Build Coastguard Worker #if defined(__wasi__) 10799*a3141fd3SAndroid Build Coastguard Worker # undef SQLITE_WASI 10800*a3141fd3SAndroid Build Coastguard Worker # define SQLITE_WASI 1 10801*a3141fd3SAndroid Build Coastguard Worker # undef SQLITE_OMIT_WAL 10802*a3141fd3SAndroid Build Coastguard Worker # define SQLITE_OMIT_WAL 1/* because it requires shared memory APIs */ 10803*a3141fd3SAndroid Build Coastguard Worker # ifndef SQLITE_OMIT_LOAD_EXTENSION 10804*a3141fd3SAndroid Build Coastguard Worker # define SQLITE_OMIT_LOAD_EXTENSION 10805*a3141fd3SAndroid Build Coastguard Worker # endif 10806*a3141fd3SAndroid Build Coastguard Worker # ifndef SQLITE_THREADSAFE 10807*a3141fd3SAndroid Build Coastguard Worker # define SQLITE_THREADSAFE 0 10808*a3141fd3SAndroid Build Coastguard Worker # endif 10809*a3141fd3SAndroid Build Coastguard Worker #endif 10810*a3141fd3SAndroid Build Coastguard Worker 10811*a3141fd3SAndroid Build Coastguard Worker #ifdef __cplusplus 10812*a3141fd3SAndroid Build Coastguard Worker } /* End of the 'extern "C"' block */ 10813*a3141fd3SAndroid Build Coastguard Worker #endif 10814*a3141fd3SAndroid Build Coastguard Worker #endif /* SQLITE3_H */ 10815*a3141fd3SAndroid Build Coastguard Worker 10816*a3141fd3SAndroid Build Coastguard Worker /******** Begin file sqlite3rtree.h *********/ 10817*a3141fd3SAndroid Build Coastguard Worker /* 10818*a3141fd3SAndroid Build Coastguard Worker ** 2010 August 30 10819*a3141fd3SAndroid Build Coastguard Worker ** 10820*a3141fd3SAndroid Build Coastguard Worker ** The author disclaims copyright to this source code. In place of 10821*a3141fd3SAndroid Build Coastguard Worker ** a legal notice, here is a blessing: 10822*a3141fd3SAndroid Build Coastguard Worker ** 10823*a3141fd3SAndroid Build Coastguard Worker ** May you do good and not evil. 10824*a3141fd3SAndroid Build Coastguard Worker ** May you find forgiveness for yourself and forgive others. 10825*a3141fd3SAndroid Build Coastguard Worker ** May you share freely, never taking more than you give. 10826*a3141fd3SAndroid Build Coastguard Worker ** 10827*a3141fd3SAndroid Build Coastguard Worker ************************************************************************* 10828*a3141fd3SAndroid Build Coastguard Worker */ 10829*a3141fd3SAndroid Build Coastguard Worker 10830*a3141fd3SAndroid Build Coastguard Worker #ifndef _SQLITE3RTREE_H_ 10831*a3141fd3SAndroid Build Coastguard Worker #define _SQLITE3RTREE_H_ 10832*a3141fd3SAndroid Build Coastguard Worker 10833*a3141fd3SAndroid Build Coastguard Worker 10834*a3141fd3SAndroid Build Coastguard Worker #ifdef __cplusplus 10835*a3141fd3SAndroid Build Coastguard Worker extern "C" { 10836*a3141fd3SAndroid Build Coastguard Worker #endif 10837*a3141fd3SAndroid Build Coastguard Worker 10838*a3141fd3SAndroid Build Coastguard Worker typedef struct sqlite3_rtree_geometry sqlite3_rtree_geometry; 10839*a3141fd3SAndroid Build Coastguard Worker typedef struct sqlite3_rtree_query_info sqlite3_rtree_query_info; 10840*a3141fd3SAndroid Build Coastguard Worker 10841*a3141fd3SAndroid Build Coastguard Worker /* The double-precision datatype used by RTree depends on the 10842*a3141fd3SAndroid Build Coastguard Worker ** SQLITE_RTREE_INT_ONLY compile-time option. 10843*a3141fd3SAndroid Build Coastguard Worker */ 10844*a3141fd3SAndroid Build Coastguard Worker #ifdef SQLITE_RTREE_INT_ONLY 10845*a3141fd3SAndroid Build Coastguard Worker typedef sqlite3_int64 sqlite3_rtree_dbl; 10846*a3141fd3SAndroid Build Coastguard Worker #else 10847*a3141fd3SAndroid Build Coastguard Worker typedef double sqlite3_rtree_dbl; 10848*a3141fd3SAndroid Build Coastguard Worker #endif 10849*a3141fd3SAndroid Build Coastguard Worker 10850*a3141fd3SAndroid Build Coastguard Worker /* 10851*a3141fd3SAndroid Build Coastguard Worker ** Register a geometry callback named zGeom that can be used as part of an 10852*a3141fd3SAndroid Build Coastguard Worker ** R-Tree geometry query as follows: 10853*a3141fd3SAndroid Build Coastguard Worker ** 10854*a3141fd3SAndroid Build Coastguard Worker ** SELECT ... FROM <rtree> WHERE <rtree col> MATCH $zGeom(... params ...) 10855*a3141fd3SAndroid Build Coastguard Worker */ 10856*a3141fd3SAndroid Build Coastguard Worker SQLITE_API int sqlite3_rtree_geometry_callback( 10857*a3141fd3SAndroid Build Coastguard Worker sqlite3 *db, 10858*a3141fd3SAndroid Build Coastguard Worker const char *zGeom, 10859*a3141fd3SAndroid Build Coastguard Worker int (*xGeom)(sqlite3_rtree_geometry*, int, sqlite3_rtree_dbl*,int*), 10860*a3141fd3SAndroid Build Coastguard Worker void *pContext 10861*a3141fd3SAndroid Build Coastguard Worker ); 10862*a3141fd3SAndroid Build Coastguard Worker 10863*a3141fd3SAndroid Build Coastguard Worker 10864*a3141fd3SAndroid Build Coastguard Worker /* 10865*a3141fd3SAndroid Build Coastguard Worker ** A pointer to a structure of the following type is passed as the first 10866*a3141fd3SAndroid Build Coastguard Worker ** argument to callbacks registered using rtree_geometry_callback(). 10867*a3141fd3SAndroid Build Coastguard Worker */ 10868*a3141fd3SAndroid Build Coastguard Worker struct sqlite3_rtree_geometry { 10869*a3141fd3SAndroid Build Coastguard Worker void *pContext; /* Copy of pContext passed to s_r_g_c() */ 10870*a3141fd3SAndroid Build Coastguard Worker int nParam; /* Size of array aParam[] */ 10871*a3141fd3SAndroid Build Coastguard Worker sqlite3_rtree_dbl *aParam; /* Parameters passed to SQL geom function */ 10872*a3141fd3SAndroid Build Coastguard Worker void *pUser; /* Callback implementation user data */ 10873*a3141fd3SAndroid Build Coastguard Worker void (*xDelUser)(void *); /* Called by SQLite to clean up pUser */ 10874*a3141fd3SAndroid Build Coastguard Worker }; 10875*a3141fd3SAndroid Build Coastguard Worker 10876*a3141fd3SAndroid Build Coastguard Worker /* 10877*a3141fd3SAndroid Build Coastguard Worker ** Register a 2nd-generation geometry callback named zScore that can be 10878*a3141fd3SAndroid Build Coastguard Worker ** used as part of an R-Tree geometry query as follows: 10879*a3141fd3SAndroid Build Coastguard Worker ** 10880*a3141fd3SAndroid Build Coastguard Worker ** SELECT ... FROM <rtree> WHERE <rtree col> MATCH $zQueryFunc(... params ...) 10881*a3141fd3SAndroid Build Coastguard Worker */ 10882*a3141fd3SAndroid Build Coastguard Worker SQLITE_API int sqlite3_rtree_query_callback( 10883*a3141fd3SAndroid Build Coastguard Worker sqlite3 *db, 10884*a3141fd3SAndroid Build Coastguard Worker const char *zQueryFunc, 10885*a3141fd3SAndroid Build Coastguard Worker int (*xQueryFunc)(sqlite3_rtree_query_info*), 10886*a3141fd3SAndroid Build Coastguard Worker void *pContext, 10887*a3141fd3SAndroid Build Coastguard Worker void (*xDestructor)(void*) 10888*a3141fd3SAndroid Build Coastguard Worker ); 10889*a3141fd3SAndroid Build Coastguard Worker 10890*a3141fd3SAndroid Build Coastguard Worker 10891*a3141fd3SAndroid Build Coastguard Worker /* 10892*a3141fd3SAndroid Build Coastguard Worker ** A pointer to a structure of the following type is passed as the 10893*a3141fd3SAndroid Build Coastguard Worker ** argument to scored geometry callback registered using 10894*a3141fd3SAndroid Build Coastguard Worker ** sqlite3_rtree_query_callback(). 10895*a3141fd3SAndroid Build Coastguard Worker ** 10896*a3141fd3SAndroid Build Coastguard Worker ** Note that the first 5 fields of this structure are identical to 10897*a3141fd3SAndroid Build Coastguard Worker ** sqlite3_rtree_geometry. This structure is a subclass of 10898*a3141fd3SAndroid Build Coastguard Worker ** sqlite3_rtree_geometry. 10899*a3141fd3SAndroid Build Coastguard Worker */ 10900*a3141fd3SAndroid Build Coastguard Worker struct sqlite3_rtree_query_info { 10901*a3141fd3SAndroid Build Coastguard Worker void *pContext; /* pContext from when function registered */ 10902*a3141fd3SAndroid Build Coastguard Worker int nParam; /* Number of function parameters */ 10903*a3141fd3SAndroid Build Coastguard Worker sqlite3_rtree_dbl *aParam; /* value of function parameters */ 10904*a3141fd3SAndroid Build Coastguard Worker void *pUser; /* callback can use this, if desired */ 10905*a3141fd3SAndroid Build Coastguard Worker void (*xDelUser)(void*); /* function to free pUser */ 10906*a3141fd3SAndroid Build Coastguard Worker sqlite3_rtree_dbl *aCoord; /* Coordinates of node or entry to check */ 10907*a3141fd3SAndroid Build Coastguard Worker unsigned int *anQueue; /* Number of pending entries in the queue */ 10908*a3141fd3SAndroid Build Coastguard Worker int nCoord; /* Number of coordinates */ 10909*a3141fd3SAndroid Build Coastguard Worker int iLevel; /* Level of current node or entry */ 10910*a3141fd3SAndroid Build Coastguard Worker int mxLevel; /* The largest iLevel value in the tree */ 10911*a3141fd3SAndroid Build Coastguard Worker sqlite3_int64 iRowid; /* Rowid for current entry */ 10912*a3141fd3SAndroid Build Coastguard Worker sqlite3_rtree_dbl rParentScore; /* Score of parent node */ 10913*a3141fd3SAndroid Build Coastguard Worker int eParentWithin; /* Visibility of parent node */ 10914*a3141fd3SAndroid Build Coastguard Worker int eWithin; /* OUT: Visibility */ 10915*a3141fd3SAndroid Build Coastguard Worker sqlite3_rtree_dbl rScore; /* OUT: Write the score here */ 10916*a3141fd3SAndroid Build Coastguard Worker /* The following fields are only available in 3.8.11 and later */ 10917*a3141fd3SAndroid Build Coastguard Worker sqlite3_value **apSqlParam; /* Original SQL values of parameters */ 10918*a3141fd3SAndroid Build Coastguard Worker }; 10919*a3141fd3SAndroid Build Coastguard Worker 10920*a3141fd3SAndroid Build Coastguard Worker /* 10921*a3141fd3SAndroid Build Coastguard Worker ** Allowed values for sqlite3_rtree_query.eWithin and .eParentWithin. 10922*a3141fd3SAndroid Build Coastguard Worker */ 10923*a3141fd3SAndroid Build Coastguard Worker #define NOT_WITHIN 0 /* Object completely outside of query region */ 10924*a3141fd3SAndroid Build Coastguard Worker #define PARTLY_WITHIN 1 /* Object partially overlaps query region */ 10925*a3141fd3SAndroid Build Coastguard Worker #define FULLY_WITHIN 2 /* Object fully contained within query region */ 10926*a3141fd3SAndroid Build Coastguard Worker 10927*a3141fd3SAndroid Build Coastguard Worker 10928*a3141fd3SAndroid Build Coastguard Worker #ifdef __cplusplus 10929*a3141fd3SAndroid Build Coastguard Worker } /* end of the 'extern "C"' block */ 10930*a3141fd3SAndroid Build Coastguard Worker #endif 10931*a3141fd3SAndroid Build Coastguard Worker 10932*a3141fd3SAndroid Build Coastguard Worker #endif /* ifndef _SQLITE3RTREE_H_ */ 10933*a3141fd3SAndroid Build Coastguard Worker 10934*a3141fd3SAndroid Build Coastguard Worker /******** End of sqlite3rtree.h *********/ 10935*a3141fd3SAndroid Build Coastguard Worker /******** Begin file sqlite3session.h *********/ 10936*a3141fd3SAndroid Build Coastguard Worker 10937*a3141fd3SAndroid Build Coastguard Worker #if !defined(__SQLITESESSION_H_) && defined(SQLITE_ENABLE_SESSION) 10938*a3141fd3SAndroid Build Coastguard Worker #define __SQLITESESSION_H_ 1 10939*a3141fd3SAndroid Build Coastguard Worker 10940*a3141fd3SAndroid Build Coastguard Worker /* 10941*a3141fd3SAndroid Build Coastguard Worker ** Make sure we can call this stuff from C++. 10942*a3141fd3SAndroid Build Coastguard Worker */ 10943*a3141fd3SAndroid Build Coastguard Worker #ifdef __cplusplus 10944*a3141fd3SAndroid Build Coastguard Worker extern "C" { 10945*a3141fd3SAndroid Build Coastguard Worker #endif 10946*a3141fd3SAndroid Build Coastguard Worker 10947*a3141fd3SAndroid Build Coastguard Worker 10948*a3141fd3SAndroid Build Coastguard Worker /* 10949*a3141fd3SAndroid Build Coastguard Worker ** CAPI3REF: Session Object Handle 10950*a3141fd3SAndroid Build Coastguard Worker ** 10951*a3141fd3SAndroid Build Coastguard Worker ** An instance of this object is a [session] that can be used to 10952*a3141fd3SAndroid Build Coastguard Worker ** record changes to a database. 10953*a3141fd3SAndroid Build Coastguard Worker */ 10954*a3141fd3SAndroid Build Coastguard Worker typedef struct sqlite3_session sqlite3_session; 10955*a3141fd3SAndroid Build Coastguard Worker 10956*a3141fd3SAndroid Build Coastguard Worker /* 10957*a3141fd3SAndroid Build Coastguard Worker ** CAPI3REF: Changeset Iterator Handle 10958*a3141fd3SAndroid Build Coastguard Worker ** 10959*a3141fd3SAndroid Build Coastguard Worker ** An instance of this object acts as a cursor for iterating 10960*a3141fd3SAndroid Build Coastguard Worker ** over the elements of a [changeset] or [patchset]. 10961*a3141fd3SAndroid Build Coastguard Worker */ 10962*a3141fd3SAndroid Build Coastguard Worker typedef struct sqlite3_changeset_iter sqlite3_changeset_iter; 10963*a3141fd3SAndroid Build Coastguard Worker 10964*a3141fd3SAndroid Build Coastguard Worker /* 10965*a3141fd3SAndroid Build Coastguard Worker ** CAPI3REF: Create A New Session Object 10966*a3141fd3SAndroid Build Coastguard Worker ** CONSTRUCTOR: sqlite3_session 10967*a3141fd3SAndroid Build Coastguard Worker ** 10968*a3141fd3SAndroid Build Coastguard Worker ** Create a new session object attached to database handle db. If successful, 10969*a3141fd3SAndroid Build Coastguard Worker ** a pointer to the new object is written to *ppSession and SQLITE_OK is 10970*a3141fd3SAndroid Build Coastguard Worker ** returned. If an error occurs, *ppSession is set to NULL and an SQLite 10971*a3141fd3SAndroid Build Coastguard Worker ** error code (e.g. SQLITE_NOMEM) is returned. 10972*a3141fd3SAndroid Build Coastguard Worker ** 10973*a3141fd3SAndroid Build Coastguard Worker ** It is possible to create multiple session objects attached to a single 10974*a3141fd3SAndroid Build Coastguard Worker ** database handle. 10975*a3141fd3SAndroid Build Coastguard Worker ** 10976*a3141fd3SAndroid Build Coastguard Worker ** Session objects created using this function should be deleted using the 10977*a3141fd3SAndroid Build Coastguard Worker ** [sqlite3session_delete()] function before the database handle that they 10978*a3141fd3SAndroid Build Coastguard Worker ** are attached to is itself closed. If the database handle is closed before 10979*a3141fd3SAndroid Build Coastguard Worker ** the session object is deleted, then the results of calling any session 10980*a3141fd3SAndroid Build Coastguard Worker ** module function, including [sqlite3session_delete()] on the session object 10981*a3141fd3SAndroid Build Coastguard Worker ** are undefined. 10982*a3141fd3SAndroid Build Coastguard Worker ** 10983*a3141fd3SAndroid Build Coastguard Worker ** Because the session module uses the [sqlite3_preupdate_hook()] API, it 10984*a3141fd3SAndroid Build Coastguard Worker ** is not possible for an application to register a pre-update hook on a 10985*a3141fd3SAndroid Build Coastguard Worker ** database handle that has one or more session objects attached. Nor is 10986*a3141fd3SAndroid Build Coastguard Worker ** it possible to create a session object attached to a database handle for 10987*a3141fd3SAndroid Build Coastguard Worker ** which a pre-update hook is already defined. The results of attempting 10988*a3141fd3SAndroid Build Coastguard Worker ** either of these things are undefined. 10989*a3141fd3SAndroid Build Coastguard Worker ** 10990*a3141fd3SAndroid Build Coastguard Worker ** The session object will be used to create changesets for tables in 10991*a3141fd3SAndroid Build Coastguard Worker ** database zDb, where zDb is either "main", or "temp", or the name of an 10992*a3141fd3SAndroid Build Coastguard Worker ** attached database. It is not an error if database zDb is not attached 10993*a3141fd3SAndroid Build Coastguard Worker ** to the database when the session object is created. 10994*a3141fd3SAndroid Build Coastguard Worker */ 10995*a3141fd3SAndroid Build Coastguard Worker SQLITE_API int sqlite3session_create( 10996*a3141fd3SAndroid Build Coastguard Worker sqlite3 *db, /* Database handle */ 10997*a3141fd3SAndroid Build Coastguard Worker const char *zDb, /* Name of db (e.g. "main") */ 10998*a3141fd3SAndroid Build Coastguard Worker sqlite3_session **ppSession /* OUT: New session object */ 10999*a3141fd3SAndroid Build Coastguard Worker ); 11000*a3141fd3SAndroid Build Coastguard Worker 11001*a3141fd3SAndroid Build Coastguard Worker /* 11002*a3141fd3SAndroid Build Coastguard Worker ** CAPI3REF: Delete A Session Object 11003*a3141fd3SAndroid Build Coastguard Worker ** DESTRUCTOR: sqlite3_session 11004*a3141fd3SAndroid Build Coastguard Worker ** 11005*a3141fd3SAndroid Build Coastguard Worker ** Delete a session object previously allocated using 11006*a3141fd3SAndroid Build Coastguard Worker ** [sqlite3session_create()]. Once a session object has been deleted, the 11007*a3141fd3SAndroid Build Coastguard Worker ** results of attempting to use pSession with any other session module 11008*a3141fd3SAndroid Build Coastguard Worker ** function are undefined. 11009*a3141fd3SAndroid Build Coastguard Worker ** 11010*a3141fd3SAndroid Build Coastguard Worker ** Session objects must be deleted before the database handle to which they 11011*a3141fd3SAndroid Build Coastguard Worker ** are attached is closed. Refer to the documentation for 11012*a3141fd3SAndroid Build Coastguard Worker ** [sqlite3session_create()] for details. 11013*a3141fd3SAndroid Build Coastguard Worker */ 11014*a3141fd3SAndroid Build Coastguard Worker SQLITE_API void sqlite3session_delete(sqlite3_session *pSession); 11015*a3141fd3SAndroid Build Coastguard Worker 11016*a3141fd3SAndroid Build Coastguard Worker /* 11017*a3141fd3SAndroid Build Coastguard Worker ** CAPI3REF: Configure a Session Object 11018*a3141fd3SAndroid Build Coastguard Worker ** METHOD: sqlite3_session 11019*a3141fd3SAndroid Build Coastguard Worker ** 11020*a3141fd3SAndroid Build Coastguard Worker ** This method is used to configure a session object after it has been 11021*a3141fd3SAndroid Build Coastguard Worker ** created. At present the only valid values for the second parameter are 11022*a3141fd3SAndroid Build Coastguard Worker ** [SQLITE_SESSION_OBJCONFIG_SIZE] and [SQLITE_SESSION_OBJCONFIG_ROWID]. 11023*a3141fd3SAndroid Build Coastguard Worker ** 11024*a3141fd3SAndroid Build Coastguard Worker */ 11025*a3141fd3SAndroid Build Coastguard Worker SQLITE_API int sqlite3session_object_config(sqlite3_session*, int op, void *pArg); 11026*a3141fd3SAndroid Build Coastguard Worker 11027*a3141fd3SAndroid Build Coastguard Worker /* 11028*a3141fd3SAndroid Build Coastguard Worker ** CAPI3REF: Options for sqlite3session_object_config 11029*a3141fd3SAndroid Build Coastguard Worker ** 11030*a3141fd3SAndroid Build Coastguard Worker ** The following values may passed as the the 2nd parameter to 11031*a3141fd3SAndroid Build Coastguard Worker ** sqlite3session_object_config(). 11032*a3141fd3SAndroid Build Coastguard Worker ** 11033*a3141fd3SAndroid Build Coastguard Worker ** <dt>SQLITE_SESSION_OBJCONFIG_SIZE <dd> 11034*a3141fd3SAndroid Build Coastguard Worker ** This option is used to set, clear or query the flag that enables 11035*a3141fd3SAndroid Build Coastguard Worker ** the [sqlite3session_changeset_size()] API. Because it imposes some 11036*a3141fd3SAndroid Build Coastguard Worker ** computational overhead, this API is disabled by default. Argument 11037*a3141fd3SAndroid Build Coastguard Worker ** pArg must point to a value of type (int). If the value is initially 11038*a3141fd3SAndroid Build Coastguard Worker ** 0, then the sqlite3session_changeset_size() API is disabled. If it 11039*a3141fd3SAndroid Build Coastguard Worker ** is greater than 0, then the same API is enabled. Or, if the initial 11040*a3141fd3SAndroid Build Coastguard Worker ** value is less than zero, no change is made. In all cases the (int) 11041*a3141fd3SAndroid Build Coastguard Worker ** variable is set to 1 if the sqlite3session_changeset_size() API is 11042*a3141fd3SAndroid Build Coastguard Worker ** enabled following the current call, or 0 otherwise. 11043*a3141fd3SAndroid Build Coastguard Worker ** 11044*a3141fd3SAndroid Build Coastguard Worker ** It is an error (SQLITE_MISUSE) to attempt to modify this setting after 11045*a3141fd3SAndroid Build Coastguard Worker ** the first table has been attached to the session object. 11046*a3141fd3SAndroid Build Coastguard Worker ** 11047*a3141fd3SAndroid Build Coastguard Worker ** <dt>SQLITE_SESSION_OBJCONFIG_ROWID <dd> 11048*a3141fd3SAndroid Build Coastguard Worker ** This option is used to set, clear or query the flag that enables 11049*a3141fd3SAndroid Build Coastguard Worker ** collection of data for tables with no explicit PRIMARY KEY. 11050*a3141fd3SAndroid Build Coastguard Worker ** 11051*a3141fd3SAndroid Build Coastguard Worker ** Normally, tables with no explicit PRIMARY KEY are simply ignored 11052*a3141fd3SAndroid Build Coastguard Worker ** by the sessions module. However, if this flag is set, it behaves 11053*a3141fd3SAndroid Build Coastguard Worker ** as if such tables have a column "_rowid_ INTEGER PRIMARY KEY" inserted 11054*a3141fd3SAndroid Build Coastguard Worker ** as their leftmost columns. 11055*a3141fd3SAndroid Build Coastguard Worker ** 11056*a3141fd3SAndroid Build Coastguard Worker ** It is an error (SQLITE_MISUSE) to attempt to modify this setting after 11057*a3141fd3SAndroid Build Coastguard Worker ** the first table has been attached to the session object. 11058*a3141fd3SAndroid Build Coastguard Worker */ 11059*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_SESSION_OBJCONFIG_SIZE 1 11060*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_SESSION_OBJCONFIG_ROWID 2 11061*a3141fd3SAndroid Build Coastguard Worker 11062*a3141fd3SAndroid Build Coastguard Worker /* 11063*a3141fd3SAndroid Build Coastguard Worker ** CAPI3REF: Enable Or Disable A Session Object 11064*a3141fd3SAndroid Build Coastguard Worker ** METHOD: sqlite3_session 11065*a3141fd3SAndroid Build Coastguard Worker ** 11066*a3141fd3SAndroid Build Coastguard Worker ** Enable or disable the recording of changes by a session object. When 11067*a3141fd3SAndroid Build Coastguard Worker ** enabled, a session object records changes made to the database. When 11068*a3141fd3SAndroid Build Coastguard Worker ** disabled - it does not. A newly created session object is enabled. 11069*a3141fd3SAndroid Build Coastguard Worker ** Refer to the documentation for [sqlite3session_changeset()] for further 11070*a3141fd3SAndroid Build Coastguard Worker ** details regarding how enabling and disabling a session object affects 11071*a3141fd3SAndroid Build Coastguard Worker ** the eventual changesets. 11072*a3141fd3SAndroid Build Coastguard Worker ** 11073*a3141fd3SAndroid Build Coastguard Worker ** Passing zero to this function disables the session. Passing a value 11074*a3141fd3SAndroid Build Coastguard Worker ** greater than zero enables it. Passing a value less than zero is a 11075*a3141fd3SAndroid Build Coastguard Worker ** no-op, and may be used to query the current state of the session. 11076*a3141fd3SAndroid Build Coastguard Worker ** 11077*a3141fd3SAndroid Build Coastguard Worker ** The return value indicates the final state of the session object: 0 if 11078*a3141fd3SAndroid Build Coastguard Worker ** the session is disabled, or 1 if it is enabled. 11079*a3141fd3SAndroid Build Coastguard Worker */ 11080*a3141fd3SAndroid Build Coastguard Worker SQLITE_API int sqlite3session_enable(sqlite3_session *pSession, int bEnable); 11081*a3141fd3SAndroid Build Coastguard Worker 11082*a3141fd3SAndroid Build Coastguard Worker /* 11083*a3141fd3SAndroid Build Coastguard Worker ** CAPI3REF: Set Or Clear the Indirect Change Flag 11084*a3141fd3SAndroid Build Coastguard Worker ** METHOD: sqlite3_session 11085*a3141fd3SAndroid Build Coastguard Worker ** 11086*a3141fd3SAndroid Build Coastguard Worker ** Each change recorded by a session object is marked as either direct or 11087*a3141fd3SAndroid Build Coastguard Worker ** indirect. A change is marked as indirect if either: 11088*a3141fd3SAndroid Build Coastguard Worker ** 11089*a3141fd3SAndroid Build Coastguard Worker ** <ul> 11090*a3141fd3SAndroid Build Coastguard Worker ** <li> The session object "indirect" flag is set when the change is 11091*a3141fd3SAndroid Build Coastguard Worker ** made, or 11092*a3141fd3SAndroid Build Coastguard Worker ** <li> The change is made by an SQL trigger or foreign key action 11093*a3141fd3SAndroid Build Coastguard Worker ** instead of directly as a result of a users SQL statement. 11094*a3141fd3SAndroid Build Coastguard Worker ** </ul> 11095*a3141fd3SAndroid Build Coastguard Worker ** 11096*a3141fd3SAndroid Build Coastguard Worker ** If a single row is affected by more than one operation within a session, 11097*a3141fd3SAndroid Build Coastguard Worker ** then the change is considered indirect if all operations meet the criteria 11098*a3141fd3SAndroid Build Coastguard Worker ** for an indirect change above, or direct otherwise. 11099*a3141fd3SAndroid Build Coastguard Worker ** 11100*a3141fd3SAndroid Build Coastguard Worker ** This function is used to set, clear or query the session object indirect 11101*a3141fd3SAndroid Build Coastguard Worker ** flag. If the second argument passed to this function is zero, then the 11102*a3141fd3SAndroid Build Coastguard Worker ** indirect flag is cleared. If it is greater than zero, the indirect flag 11103*a3141fd3SAndroid Build Coastguard Worker ** is set. Passing a value less than zero does not modify the current value 11104*a3141fd3SAndroid Build Coastguard Worker ** of the indirect flag, and may be used to query the current state of the 11105*a3141fd3SAndroid Build Coastguard Worker ** indirect flag for the specified session object. 11106*a3141fd3SAndroid Build Coastguard Worker ** 11107*a3141fd3SAndroid Build Coastguard Worker ** The return value indicates the final state of the indirect flag: 0 if 11108*a3141fd3SAndroid Build Coastguard Worker ** it is clear, or 1 if it is set. 11109*a3141fd3SAndroid Build Coastguard Worker */ 11110*a3141fd3SAndroid Build Coastguard Worker SQLITE_API int sqlite3session_indirect(sqlite3_session *pSession, int bIndirect); 11111*a3141fd3SAndroid Build Coastguard Worker 11112*a3141fd3SAndroid Build Coastguard Worker /* 11113*a3141fd3SAndroid Build Coastguard Worker ** CAPI3REF: Attach A Table To A Session Object 11114*a3141fd3SAndroid Build Coastguard Worker ** METHOD: sqlite3_session 11115*a3141fd3SAndroid Build Coastguard Worker ** 11116*a3141fd3SAndroid Build Coastguard Worker ** If argument zTab is not NULL, then it is the name of a table to attach 11117*a3141fd3SAndroid Build Coastguard Worker ** to the session object passed as the first argument. All subsequent changes 11118*a3141fd3SAndroid Build Coastguard Worker ** made to the table while the session object is enabled will be recorded. See 11119*a3141fd3SAndroid Build Coastguard Worker ** documentation for [sqlite3session_changeset()] for further details. 11120*a3141fd3SAndroid Build Coastguard Worker ** 11121*a3141fd3SAndroid Build Coastguard Worker ** Or, if argument zTab is NULL, then changes are recorded for all tables 11122*a3141fd3SAndroid Build Coastguard Worker ** in the database. If additional tables are added to the database (by 11123*a3141fd3SAndroid Build Coastguard Worker ** executing "CREATE TABLE" statements) after this call is made, changes for 11124*a3141fd3SAndroid Build Coastguard Worker ** the new tables are also recorded. 11125*a3141fd3SAndroid Build Coastguard Worker ** 11126*a3141fd3SAndroid Build Coastguard Worker ** Changes can only be recorded for tables that have a PRIMARY KEY explicitly 11127*a3141fd3SAndroid Build Coastguard Worker ** defined as part of their CREATE TABLE statement. It does not matter if the 11128*a3141fd3SAndroid Build Coastguard Worker ** PRIMARY KEY is an "INTEGER PRIMARY KEY" (rowid alias) or not. The PRIMARY 11129*a3141fd3SAndroid Build Coastguard Worker ** KEY may consist of a single column, or may be a composite key. 11130*a3141fd3SAndroid Build Coastguard Worker ** 11131*a3141fd3SAndroid Build Coastguard Worker ** It is not an error if the named table does not exist in the database. Nor 11132*a3141fd3SAndroid Build Coastguard Worker ** is it an error if the named table does not have a PRIMARY KEY. However, 11133*a3141fd3SAndroid Build Coastguard Worker ** no changes will be recorded in either of these scenarios. 11134*a3141fd3SAndroid Build Coastguard Worker ** 11135*a3141fd3SAndroid Build Coastguard Worker ** Changes are not recorded for individual rows that have NULL values stored 11136*a3141fd3SAndroid Build Coastguard Worker ** in one or more of their PRIMARY KEY columns. 11137*a3141fd3SAndroid Build Coastguard Worker ** 11138*a3141fd3SAndroid Build Coastguard Worker ** SQLITE_OK is returned if the call completes without error. Or, if an error 11139*a3141fd3SAndroid Build Coastguard Worker ** occurs, an SQLite error code (e.g. SQLITE_NOMEM) is returned. 11140*a3141fd3SAndroid Build Coastguard Worker ** 11141*a3141fd3SAndroid Build Coastguard Worker ** <h3>Special sqlite_stat1 Handling</h3> 11142*a3141fd3SAndroid Build Coastguard Worker ** 11143*a3141fd3SAndroid Build Coastguard Worker ** As of SQLite version 3.22.0, the "sqlite_stat1" table is an exception to 11144*a3141fd3SAndroid Build Coastguard Worker ** some of the rules above. In SQLite, the schema of sqlite_stat1 is: 11145*a3141fd3SAndroid Build Coastguard Worker ** <pre> 11146*a3141fd3SAndroid Build Coastguard Worker ** CREATE TABLE sqlite_stat1(tbl,idx,stat) 11147*a3141fd3SAndroid Build Coastguard Worker ** </pre> 11148*a3141fd3SAndroid Build Coastguard Worker ** 11149*a3141fd3SAndroid Build Coastguard Worker ** Even though sqlite_stat1 does not have a PRIMARY KEY, changes are 11150*a3141fd3SAndroid Build Coastguard Worker ** recorded for it as if the PRIMARY KEY is (tbl,idx). Additionally, changes 11151*a3141fd3SAndroid Build Coastguard Worker ** are recorded for rows for which (idx IS NULL) is true. However, for such 11152*a3141fd3SAndroid Build Coastguard Worker ** rows a zero-length blob (SQL value X'') is stored in the changeset or 11153*a3141fd3SAndroid Build Coastguard Worker ** patchset instead of a NULL value. This allows such changesets to be 11154*a3141fd3SAndroid Build Coastguard Worker ** manipulated by legacy implementations of sqlite3changeset_invert(), 11155*a3141fd3SAndroid Build Coastguard Worker ** concat() and similar. 11156*a3141fd3SAndroid Build Coastguard Worker ** 11157*a3141fd3SAndroid Build Coastguard Worker ** The sqlite3changeset_apply() function automatically converts the 11158*a3141fd3SAndroid Build Coastguard Worker ** zero-length blob back to a NULL value when updating the sqlite_stat1 11159*a3141fd3SAndroid Build Coastguard Worker ** table. However, if the application calls sqlite3changeset_new(), 11160*a3141fd3SAndroid Build Coastguard Worker ** sqlite3changeset_old() or sqlite3changeset_conflict on a changeset 11161*a3141fd3SAndroid Build Coastguard Worker ** iterator directly (including on a changeset iterator passed to a 11162*a3141fd3SAndroid Build Coastguard Worker ** conflict-handler callback) then the X'' value is returned. The application 11163*a3141fd3SAndroid Build Coastguard Worker ** must translate X'' to NULL itself if required. 11164*a3141fd3SAndroid Build Coastguard Worker ** 11165*a3141fd3SAndroid Build Coastguard Worker ** Legacy (older than 3.22.0) versions of the sessions module cannot capture 11166*a3141fd3SAndroid Build Coastguard Worker ** changes made to the sqlite_stat1 table. Legacy versions of the 11167*a3141fd3SAndroid Build Coastguard Worker ** sqlite3changeset_apply() function silently ignore any modifications to the 11168*a3141fd3SAndroid Build Coastguard Worker ** sqlite_stat1 table that are part of a changeset or patchset. 11169*a3141fd3SAndroid Build Coastguard Worker */ 11170*a3141fd3SAndroid Build Coastguard Worker SQLITE_API int sqlite3session_attach( 11171*a3141fd3SAndroid Build Coastguard Worker sqlite3_session *pSession, /* Session object */ 11172*a3141fd3SAndroid Build Coastguard Worker const char *zTab /* Table name */ 11173*a3141fd3SAndroid Build Coastguard Worker ); 11174*a3141fd3SAndroid Build Coastguard Worker 11175*a3141fd3SAndroid Build Coastguard Worker /* 11176*a3141fd3SAndroid Build Coastguard Worker ** CAPI3REF: Set a table filter on a Session Object. 11177*a3141fd3SAndroid Build Coastguard Worker ** METHOD: sqlite3_session 11178*a3141fd3SAndroid Build Coastguard Worker ** 11179*a3141fd3SAndroid Build Coastguard Worker ** The second argument (xFilter) is the "filter callback". For changes to rows 11180*a3141fd3SAndroid Build Coastguard Worker ** in tables that are not attached to the Session object, the filter is called 11181*a3141fd3SAndroid Build Coastguard Worker ** to determine whether changes to the table's rows should be tracked or not. 11182*a3141fd3SAndroid Build Coastguard Worker ** If xFilter returns 0, changes are not tracked. Note that once a table is 11183*a3141fd3SAndroid Build Coastguard Worker ** attached, xFilter will not be called again. 11184*a3141fd3SAndroid Build Coastguard Worker */ 11185*a3141fd3SAndroid Build Coastguard Worker SQLITE_API void sqlite3session_table_filter( 11186*a3141fd3SAndroid Build Coastguard Worker sqlite3_session *pSession, /* Session object */ 11187*a3141fd3SAndroid Build Coastguard Worker int(*xFilter)( 11188*a3141fd3SAndroid Build Coastguard Worker void *pCtx, /* Copy of third arg to _filter_table() */ 11189*a3141fd3SAndroid Build Coastguard Worker const char *zTab /* Table name */ 11190*a3141fd3SAndroid Build Coastguard Worker ), 11191*a3141fd3SAndroid Build Coastguard Worker void *pCtx /* First argument passed to xFilter */ 11192*a3141fd3SAndroid Build Coastguard Worker ); 11193*a3141fd3SAndroid Build Coastguard Worker 11194*a3141fd3SAndroid Build Coastguard Worker /* 11195*a3141fd3SAndroid Build Coastguard Worker ** CAPI3REF: Generate A Changeset From A Session Object 11196*a3141fd3SAndroid Build Coastguard Worker ** METHOD: sqlite3_session 11197*a3141fd3SAndroid Build Coastguard Worker ** 11198*a3141fd3SAndroid Build Coastguard Worker ** Obtain a changeset containing changes to the tables attached to the 11199*a3141fd3SAndroid Build Coastguard Worker ** session object passed as the first argument. If successful, 11200*a3141fd3SAndroid Build Coastguard Worker ** set *ppChangeset to point to a buffer containing the changeset 11201*a3141fd3SAndroid Build Coastguard Worker ** and *pnChangeset to the size of the changeset in bytes before returning 11202*a3141fd3SAndroid Build Coastguard Worker ** SQLITE_OK. If an error occurs, set both *ppChangeset and *pnChangeset to 11203*a3141fd3SAndroid Build Coastguard Worker ** zero and return an SQLite error code. 11204*a3141fd3SAndroid Build Coastguard Worker ** 11205*a3141fd3SAndroid Build Coastguard Worker ** A changeset consists of zero or more INSERT, UPDATE and/or DELETE changes, 11206*a3141fd3SAndroid Build Coastguard Worker ** each representing a change to a single row of an attached table. An INSERT 11207*a3141fd3SAndroid Build Coastguard Worker ** change contains the values of each field of a new database row. A DELETE 11208*a3141fd3SAndroid Build Coastguard Worker ** contains the original values of each field of a deleted database row. An 11209*a3141fd3SAndroid Build Coastguard Worker ** UPDATE change contains the original values of each field of an updated 11210*a3141fd3SAndroid Build Coastguard Worker ** database row along with the updated values for each updated non-primary-key 11211*a3141fd3SAndroid Build Coastguard Worker ** column. It is not possible for an UPDATE change to represent a change that 11212*a3141fd3SAndroid Build Coastguard Worker ** modifies the values of primary key columns. If such a change is made, it 11213*a3141fd3SAndroid Build Coastguard Worker ** is represented in a changeset as a DELETE followed by an INSERT. 11214*a3141fd3SAndroid Build Coastguard Worker ** 11215*a3141fd3SAndroid Build Coastguard Worker ** Changes are not recorded for rows that have NULL values stored in one or 11216*a3141fd3SAndroid Build Coastguard Worker ** more of their PRIMARY KEY columns. If such a row is inserted or deleted, 11217*a3141fd3SAndroid Build Coastguard Worker ** no corresponding change is present in the changesets returned by this 11218*a3141fd3SAndroid Build Coastguard Worker ** function. If an existing row with one or more NULL values stored in 11219*a3141fd3SAndroid Build Coastguard Worker ** PRIMARY KEY columns is updated so that all PRIMARY KEY columns are non-NULL, 11220*a3141fd3SAndroid Build Coastguard Worker ** only an INSERT is appears in the changeset. Similarly, if an existing row 11221*a3141fd3SAndroid Build Coastguard Worker ** with non-NULL PRIMARY KEY values is updated so that one or more of its 11222*a3141fd3SAndroid Build Coastguard Worker ** PRIMARY KEY columns are set to NULL, the resulting changeset contains a 11223*a3141fd3SAndroid Build Coastguard Worker ** DELETE change only. 11224*a3141fd3SAndroid Build Coastguard Worker ** 11225*a3141fd3SAndroid Build Coastguard Worker ** The contents of a changeset may be traversed using an iterator created 11226*a3141fd3SAndroid Build Coastguard Worker ** using the [sqlite3changeset_start()] API. A changeset may be applied to 11227*a3141fd3SAndroid Build Coastguard Worker ** a database with a compatible schema using the [sqlite3changeset_apply()] 11228*a3141fd3SAndroid Build Coastguard Worker ** API. 11229*a3141fd3SAndroid Build Coastguard Worker ** 11230*a3141fd3SAndroid Build Coastguard Worker ** Within a changeset generated by this function, all changes related to a 11231*a3141fd3SAndroid Build Coastguard Worker ** single table are grouped together. In other words, when iterating through 11232*a3141fd3SAndroid Build Coastguard Worker ** a changeset or when applying a changeset to a database, all changes related 11233*a3141fd3SAndroid Build Coastguard Worker ** to a single table are processed before moving on to the next table. Tables 11234*a3141fd3SAndroid Build Coastguard Worker ** are sorted in the same order in which they were attached (or auto-attached) 11235*a3141fd3SAndroid Build Coastguard Worker ** to the sqlite3_session object. The order in which the changes related to 11236*a3141fd3SAndroid Build Coastguard Worker ** a single table are stored is undefined. 11237*a3141fd3SAndroid Build Coastguard Worker ** 11238*a3141fd3SAndroid Build Coastguard Worker ** Following a successful call to this function, it is the responsibility of 11239*a3141fd3SAndroid Build Coastguard Worker ** the caller to eventually free the buffer that *ppChangeset points to using 11240*a3141fd3SAndroid Build Coastguard Worker ** [sqlite3_free()]. 11241*a3141fd3SAndroid Build Coastguard Worker ** 11242*a3141fd3SAndroid Build Coastguard Worker ** <h3>Changeset Generation</h3> 11243*a3141fd3SAndroid Build Coastguard Worker ** 11244*a3141fd3SAndroid Build Coastguard Worker ** Once a table has been attached to a session object, the session object 11245*a3141fd3SAndroid Build Coastguard Worker ** records the primary key values of all new rows inserted into the table. 11246*a3141fd3SAndroid Build Coastguard Worker ** It also records the original primary key and other column values of any 11247*a3141fd3SAndroid Build Coastguard Worker ** deleted or updated rows. For each unique primary key value, data is only 11248*a3141fd3SAndroid Build Coastguard Worker ** recorded once - the first time a row with said primary key is inserted, 11249*a3141fd3SAndroid Build Coastguard Worker ** updated or deleted in the lifetime of the session. 11250*a3141fd3SAndroid Build Coastguard Worker ** 11251*a3141fd3SAndroid Build Coastguard Worker ** There is one exception to the previous paragraph: when a row is inserted, 11252*a3141fd3SAndroid Build Coastguard Worker ** updated or deleted, if one or more of its primary key columns contain a 11253*a3141fd3SAndroid Build Coastguard Worker ** NULL value, no record of the change is made. 11254*a3141fd3SAndroid Build Coastguard Worker ** 11255*a3141fd3SAndroid Build Coastguard Worker ** The session object therefore accumulates two types of records - those 11256*a3141fd3SAndroid Build Coastguard Worker ** that consist of primary key values only (created when the user inserts 11257*a3141fd3SAndroid Build Coastguard Worker ** a new record) and those that consist of the primary key values and the 11258*a3141fd3SAndroid Build Coastguard Worker ** original values of other table columns (created when the users deletes 11259*a3141fd3SAndroid Build Coastguard Worker ** or updates a record). 11260*a3141fd3SAndroid Build Coastguard Worker ** 11261*a3141fd3SAndroid Build Coastguard Worker ** When this function is called, the requested changeset is created using 11262*a3141fd3SAndroid Build Coastguard Worker ** both the accumulated records and the current contents of the database 11263*a3141fd3SAndroid Build Coastguard Worker ** file. Specifically: 11264*a3141fd3SAndroid Build Coastguard Worker ** 11265*a3141fd3SAndroid Build Coastguard Worker ** <ul> 11266*a3141fd3SAndroid Build Coastguard Worker ** <li> For each record generated by an insert, the database is queried 11267*a3141fd3SAndroid Build Coastguard Worker ** for a row with a matching primary key. If one is found, an INSERT 11268*a3141fd3SAndroid Build Coastguard Worker ** change is added to the changeset. If no such row is found, no change 11269*a3141fd3SAndroid Build Coastguard Worker ** is added to the changeset. 11270*a3141fd3SAndroid Build Coastguard Worker ** 11271*a3141fd3SAndroid Build Coastguard Worker ** <li> For each record generated by an update or delete, the database is 11272*a3141fd3SAndroid Build Coastguard Worker ** queried for a row with a matching primary key. If such a row is 11273*a3141fd3SAndroid Build Coastguard Worker ** found and one or more of the non-primary key fields have been 11274*a3141fd3SAndroid Build Coastguard Worker ** modified from their original values, an UPDATE change is added to 11275*a3141fd3SAndroid Build Coastguard Worker ** the changeset. Or, if no such row is found in the table, a DELETE 11276*a3141fd3SAndroid Build Coastguard Worker ** change is added to the changeset. If there is a row with a matching 11277*a3141fd3SAndroid Build Coastguard Worker ** primary key in the database, but all fields contain their original 11278*a3141fd3SAndroid Build Coastguard Worker ** values, no change is added to the changeset. 11279*a3141fd3SAndroid Build Coastguard Worker ** </ul> 11280*a3141fd3SAndroid Build Coastguard Worker ** 11281*a3141fd3SAndroid Build Coastguard Worker ** This means, amongst other things, that if a row is inserted and then later 11282*a3141fd3SAndroid Build Coastguard Worker ** deleted while a session object is active, neither the insert nor the delete 11283*a3141fd3SAndroid Build Coastguard Worker ** will be present in the changeset. Or if a row is deleted and then later a 11284*a3141fd3SAndroid Build Coastguard Worker ** row with the same primary key values inserted while a session object is 11285*a3141fd3SAndroid Build Coastguard Worker ** active, the resulting changeset will contain an UPDATE change instead of 11286*a3141fd3SAndroid Build Coastguard Worker ** a DELETE and an INSERT. 11287*a3141fd3SAndroid Build Coastguard Worker ** 11288*a3141fd3SAndroid Build Coastguard Worker ** When a session object is disabled (see the [sqlite3session_enable()] API), 11289*a3141fd3SAndroid Build Coastguard Worker ** it does not accumulate records when rows are inserted, updated or deleted. 11290*a3141fd3SAndroid Build Coastguard Worker ** This may appear to have some counter-intuitive effects if a single row 11291*a3141fd3SAndroid Build Coastguard Worker ** is written to more than once during a session. For example, if a row 11292*a3141fd3SAndroid Build Coastguard Worker ** is inserted while a session object is enabled, then later deleted while 11293*a3141fd3SAndroid Build Coastguard Worker ** the same session object is disabled, no INSERT record will appear in the 11294*a3141fd3SAndroid Build Coastguard Worker ** changeset, even though the delete took place while the session was disabled. 11295*a3141fd3SAndroid Build Coastguard Worker ** Or, if one field of a row is updated while a session is disabled, and 11296*a3141fd3SAndroid Build Coastguard Worker ** another field of the same row is updated while the session is enabled, the 11297*a3141fd3SAndroid Build Coastguard Worker ** resulting changeset will contain an UPDATE change that updates both fields. 11298*a3141fd3SAndroid Build Coastguard Worker */ 11299*a3141fd3SAndroid Build Coastguard Worker SQLITE_API int sqlite3session_changeset( 11300*a3141fd3SAndroid Build Coastguard Worker sqlite3_session *pSession, /* Session object */ 11301*a3141fd3SAndroid Build Coastguard Worker int *pnChangeset, /* OUT: Size of buffer at *ppChangeset */ 11302*a3141fd3SAndroid Build Coastguard Worker void **ppChangeset /* OUT: Buffer containing changeset */ 11303*a3141fd3SAndroid Build Coastguard Worker ); 11304*a3141fd3SAndroid Build Coastguard Worker 11305*a3141fd3SAndroid Build Coastguard Worker /* 11306*a3141fd3SAndroid Build Coastguard Worker ** CAPI3REF: Return An Upper-limit For The Size Of The Changeset 11307*a3141fd3SAndroid Build Coastguard Worker ** METHOD: sqlite3_session 11308*a3141fd3SAndroid Build Coastguard Worker ** 11309*a3141fd3SAndroid Build Coastguard Worker ** By default, this function always returns 0. For it to return 11310*a3141fd3SAndroid Build Coastguard Worker ** a useful result, the sqlite3_session object must have been configured 11311*a3141fd3SAndroid Build Coastguard Worker ** to enable this API using sqlite3session_object_config() with the 11312*a3141fd3SAndroid Build Coastguard Worker ** SQLITE_SESSION_OBJCONFIG_SIZE verb. 11313*a3141fd3SAndroid Build Coastguard Worker ** 11314*a3141fd3SAndroid Build Coastguard Worker ** When enabled, this function returns an upper limit, in bytes, for the size 11315*a3141fd3SAndroid Build Coastguard Worker ** of the changeset that might be produced if sqlite3session_changeset() were 11316*a3141fd3SAndroid Build Coastguard Worker ** called. The final changeset size might be equal to or smaller than the 11317*a3141fd3SAndroid Build Coastguard Worker ** size in bytes returned by this function. 11318*a3141fd3SAndroid Build Coastguard Worker */ 11319*a3141fd3SAndroid Build Coastguard Worker SQLITE_API sqlite3_int64 sqlite3session_changeset_size(sqlite3_session *pSession); 11320*a3141fd3SAndroid Build Coastguard Worker 11321*a3141fd3SAndroid Build Coastguard Worker /* 11322*a3141fd3SAndroid Build Coastguard Worker ** CAPI3REF: Load The Difference Between Tables Into A Session 11323*a3141fd3SAndroid Build Coastguard Worker ** METHOD: sqlite3_session 11324*a3141fd3SAndroid Build Coastguard Worker ** 11325*a3141fd3SAndroid Build Coastguard Worker ** If it is not already attached to the session object passed as the first 11326*a3141fd3SAndroid Build Coastguard Worker ** argument, this function attaches table zTbl in the same manner as the 11327*a3141fd3SAndroid Build Coastguard Worker ** [sqlite3session_attach()] function. If zTbl does not exist, or if it 11328*a3141fd3SAndroid Build Coastguard Worker ** does not have a primary key, this function is a no-op (but does not return 11329*a3141fd3SAndroid Build Coastguard Worker ** an error). 11330*a3141fd3SAndroid Build Coastguard Worker ** 11331*a3141fd3SAndroid Build Coastguard Worker ** Argument zFromDb must be the name of a database ("main", "temp" etc.) 11332*a3141fd3SAndroid Build Coastguard Worker ** attached to the same database handle as the session object that contains 11333*a3141fd3SAndroid Build Coastguard Worker ** a table compatible with the table attached to the session by this function. 11334*a3141fd3SAndroid Build Coastguard Worker ** A table is considered compatible if it: 11335*a3141fd3SAndroid Build Coastguard Worker ** 11336*a3141fd3SAndroid Build Coastguard Worker ** <ul> 11337*a3141fd3SAndroid Build Coastguard Worker ** <li> Has the same name, 11338*a3141fd3SAndroid Build Coastguard Worker ** <li> Has the same set of columns declared in the same order, and 11339*a3141fd3SAndroid Build Coastguard Worker ** <li> Has the same PRIMARY KEY definition. 11340*a3141fd3SAndroid Build Coastguard Worker ** </ul> 11341*a3141fd3SAndroid Build Coastguard Worker ** 11342*a3141fd3SAndroid Build Coastguard Worker ** If the tables are not compatible, SQLITE_SCHEMA is returned. If the tables 11343*a3141fd3SAndroid Build Coastguard Worker ** are compatible but do not have any PRIMARY KEY columns, it is not an error 11344*a3141fd3SAndroid Build Coastguard Worker ** but no changes are added to the session object. As with other session 11345*a3141fd3SAndroid Build Coastguard Worker ** APIs, tables without PRIMARY KEYs are simply ignored. 11346*a3141fd3SAndroid Build Coastguard Worker ** 11347*a3141fd3SAndroid Build Coastguard Worker ** This function adds a set of changes to the session object that could be 11348*a3141fd3SAndroid Build Coastguard Worker ** used to update the table in database zFrom (call this the "from-table") 11349*a3141fd3SAndroid Build Coastguard Worker ** so that its content is the same as the table attached to the session 11350*a3141fd3SAndroid Build Coastguard Worker ** object (call this the "to-table"). Specifically: 11351*a3141fd3SAndroid Build Coastguard Worker ** 11352*a3141fd3SAndroid Build Coastguard Worker ** <ul> 11353*a3141fd3SAndroid Build Coastguard Worker ** <li> For each row (primary key) that exists in the to-table but not in 11354*a3141fd3SAndroid Build Coastguard Worker ** the from-table, an INSERT record is added to the session object. 11355*a3141fd3SAndroid Build Coastguard Worker ** 11356*a3141fd3SAndroid Build Coastguard Worker ** <li> For each row (primary key) that exists in the to-table but not in 11357*a3141fd3SAndroid Build Coastguard Worker ** the from-table, a DELETE record is added to the session object. 11358*a3141fd3SAndroid Build Coastguard Worker ** 11359*a3141fd3SAndroid Build Coastguard Worker ** <li> For each row (primary key) that exists in both tables, but features 11360*a3141fd3SAndroid Build Coastguard Worker ** different non-PK values in each, an UPDATE record is added to the 11361*a3141fd3SAndroid Build Coastguard Worker ** session. 11362*a3141fd3SAndroid Build Coastguard Worker ** </ul> 11363*a3141fd3SAndroid Build Coastguard Worker ** 11364*a3141fd3SAndroid Build Coastguard Worker ** To clarify, if this function is called and then a changeset constructed 11365*a3141fd3SAndroid Build Coastguard Worker ** using [sqlite3session_changeset()], then after applying that changeset to 11366*a3141fd3SAndroid Build Coastguard Worker ** database zFrom the contents of the two compatible tables would be 11367*a3141fd3SAndroid Build Coastguard Worker ** identical. 11368*a3141fd3SAndroid Build Coastguard Worker ** 11369*a3141fd3SAndroid Build Coastguard Worker ** It an error if database zFrom does not exist or does not contain the 11370*a3141fd3SAndroid Build Coastguard Worker ** required compatible table. 11371*a3141fd3SAndroid Build Coastguard Worker ** 11372*a3141fd3SAndroid Build Coastguard Worker ** If the operation is successful, SQLITE_OK is returned. Otherwise, an SQLite 11373*a3141fd3SAndroid Build Coastguard Worker ** error code. In this case, if argument pzErrMsg is not NULL, *pzErrMsg 11374*a3141fd3SAndroid Build Coastguard Worker ** may be set to point to a buffer containing an English language error 11375*a3141fd3SAndroid Build Coastguard Worker ** message. It is the responsibility of the caller to free this buffer using 11376*a3141fd3SAndroid Build Coastguard Worker ** sqlite3_free(). 11377*a3141fd3SAndroid Build Coastguard Worker */ 11378*a3141fd3SAndroid Build Coastguard Worker SQLITE_API int sqlite3session_diff( 11379*a3141fd3SAndroid Build Coastguard Worker sqlite3_session *pSession, 11380*a3141fd3SAndroid Build Coastguard Worker const char *zFromDb, 11381*a3141fd3SAndroid Build Coastguard Worker const char *zTbl, 11382*a3141fd3SAndroid Build Coastguard Worker char **pzErrMsg 11383*a3141fd3SAndroid Build Coastguard Worker ); 11384*a3141fd3SAndroid Build Coastguard Worker 11385*a3141fd3SAndroid Build Coastguard Worker 11386*a3141fd3SAndroid Build Coastguard Worker /* 11387*a3141fd3SAndroid Build Coastguard Worker ** CAPI3REF: Generate A Patchset From A Session Object 11388*a3141fd3SAndroid Build Coastguard Worker ** METHOD: sqlite3_session 11389*a3141fd3SAndroid Build Coastguard Worker ** 11390*a3141fd3SAndroid Build Coastguard Worker ** The differences between a patchset and a changeset are that: 11391*a3141fd3SAndroid Build Coastguard Worker ** 11392*a3141fd3SAndroid Build Coastguard Worker ** <ul> 11393*a3141fd3SAndroid Build Coastguard Worker ** <li> DELETE records consist of the primary key fields only. The 11394*a3141fd3SAndroid Build Coastguard Worker ** original values of other fields are omitted. 11395*a3141fd3SAndroid Build Coastguard Worker ** <li> The original values of any modified fields are omitted from 11396*a3141fd3SAndroid Build Coastguard Worker ** UPDATE records. 11397*a3141fd3SAndroid Build Coastguard Worker ** </ul> 11398*a3141fd3SAndroid Build Coastguard Worker ** 11399*a3141fd3SAndroid Build Coastguard Worker ** A patchset blob may be used with up to date versions of all 11400*a3141fd3SAndroid Build Coastguard Worker ** sqlite3changeset_xxx API functions except for sqlite3changeset_invert(), 11401*a3141fd3SAndroid Build Coastguard Worker ** which returns SQLITE_CORRUPT if it is passed a patchset. Similarly, 11402*a3141fd3SAndroid Build Coastguard Worker ** attempting to use a patchset blob with old versions of the 11403*a3141fd3SAndroid Build Coastguard Worker ** sqlite3changeset_xxx APIs also provokes an SQLITE_CORRUPT error. 11404*a3141fd3SAndroid Build Coastguard Worker ** 11405*a3141fd3SAndroid Build Coastguard Worker ** Because the non-primary key "old.*" fields are omitted, no 11406*a3141fd3SAndroid Build Coastguard Worker ** SQLITE_CHANGESET_DATA conflicts can be detected or reported if a patchset 11407*a3141fd3SAndroid Build Coastguard Worker ** is passed to the sqlite3changeset_apply() API. Other conflict types work 11408*a3141fd3SAndroid Build Coastguard Worker ** in the same way as for changesets. 11409*a3141fd3SAndroid Build Coastguard Worker ** 11410*a3141fd3SAndroid Build Coastguard Worker ** Changes within a patchset are ordered in the same way as for changesets 11411*a3141fd3SAndroid Build Coastguard Worker ** generated by the sqlite3session_changeset() function (i.e. all changes for 11412*a3141fd3SAndroid Build Coastguard Worker ** a single table are grouped together, tables appear in the order in which 11413*a3141fd3SAndroid Build Coastguard Worker ** they were attached to the session object). 11414*a3141fd3SAndroid Build Coastguard Worker */ 11415*a3141fd3SAndroid Build Coastguard Worker SQLITE_API int sqlite3session_patchset( 11416*a3141fd3SAndroid Build Coastguard Worker sqlite3_session *pSession, /* Session object */ 11417*a3141fd3SAndroid Build Coastguard Worker int *pnPatchset, /* OUT: Size of buffer at *ppPatchset */ 11418*a3141fd3SAndroid Build Coastguard Worker void **ppPatchset /* OUT: Buffer containing patchset */ 11419*a3141fd3SAndroid Build Coastguard Worker ); 11420*a3141fd3SAndroid Build Coastguard Worker 11421*a3141fd3SAndroid Build Coastguard Worker /* 11422*a3141fd3SAndroid Build Coastguard Worker ** CAPI3REF: Test if a changeset has recorded any changes. 11423*a3141fd3SAndroid Build Coastguard Worker ** 11424*a3141fd3SAndroid Build Coastguard Worker ** Return non-zero if no changes to attached tables have been recorded by 11425*a3141fd3SAndroid Build Coastguard Worker ** the session object passed as the first argument. Otherwise, if one or 11426*a3141fd3SAndroid Build Coastguard Worker ** more changes have been recorded, return zero. 11427*a3141fd3SAndroid Build Coastguard Worker ** 11428*a3141fd3SAndroid Build Coastguard Worker ** Even if this function returns zero, it is possible that calling 11429*a3141fd3SAndroid Build Coastguard Worker ** [sqlite3session_changeset()] on the session handle may still return a 11430*a3141fd3SAndroid Build Coastguard Worker ** changeset that contains no changes. This can happen when a row in 11431*a3141fd3SAndroid Build Coastguard Worker ** an attached table is modified and then later on the original values 11432*a3141fd3SAndroid Build Coastguard Worker ** are restored. However, if this function returns non-zero, then it is 11433*a3141fd3SAndroid Build Coastguard Worker ** guaranteed that a call to sqlite3session_changeset() will return a 11434*a3141fd3SAndroid Build Coastguard Worker ** changeset containing zero changes. 11435*a3141fd3SAndroid Build Coastguard Worker */ 11436*a3141fd3SAndroid Build Coastguard Worker SQLITE_API int sqlite3session_isempty(sqlite3_session *pSession); 11437*a3141fd3SAndroid Build Coastguard Worker 11438*a3141fd3SAndroid Build Coastguard Worker /* 11439*a3141fd3SAndroid Build Coastguard Worker ** CAPI3REF: Query for the amount of heap memory used by a session object. 11440*a3141fd3SAndroid Build Coastguard Worker ** 11441*a3141fd3SAndroid Build Coastguard Worker ** This API returns the total amount of heap memory in bytes currently 11442*a3141fd3SAndroid Build Coastguard Worker ** used by the session object passed as the only argument. 11443*a3141fd3SAndroid Build Coastguard Worker */ 11444*a3141fd3SAndroid Build Coastguard Worker SQLITE_API sqlite3_int64 sqlite3session_memory_used(sqlite3_session *pSession); 11445*a3141fd3SAndroid Build Coastguard Worker 11446*a3141fd3SAndroid Build Coastguard Worker /* 11447*a3141fd3SAndroid Build Coastguard Worker ** CAPI3REF: Create An Iterator To Traverse A Changeset 11448*a3141fd3SAndroid Build Coastguard Worker ** CONSTRUCTOR: sqlite3_changeset_iter 11449*a3141fd3SAndroid Build Coastguard Worker ** 11450*a3141fd3SAndroid Build Coastguard Worker ** Create an iterator used to iterate through the contents of a changeset. 11451*a3141fd3SAndroid Build Coastguard Worker ** If successful, *pp is set to point to the iterator handle and SQLITE_OK 11452*a3141fd3SAndroid Build Coastguard Worker ** is returned. Otherwise, if an error occurs, *pp is set to zero and an 11453*a3141fd3SAndroid Build Coastguard Worker ** SQLite error code is returned. 11454*a3141fd3SAndroid Build Coastguard Worker ** 11455*a3141fd3SAndroid Build Coastguard Worker ** The following functions can be used to advance and query a changeset 11456*a3141fd3SAndroid Build Coastguard Worker ** iterator created by this function: 11457*a3141fd3SAndroid Build Coastguard Worker ** 11458*a3141fd3SAndroid Build Coastguard Worker ** <ul> 11459*a3141fd3SAndroid Build Coastguard Worker ** <li> [sqlite3changeset_next()] 11460*a3141fd3SAndroid Build Coastguard Worker ** <li> [sqlite3changeset_op()] 11461*a3141fd3SAndroid Build Coastguard Worker ** <li> [sqlite3changeset_new()] 11462*a3141fd3SAndroid Build Coastguard Worker ** <li> [sqlite3changeset_old()] 11463*a3141fd3SAndroid Build Coastguard Worker ** </ul> 11464*a3141fd3SAndroid Build Coastguard Worker ** 11465*a3141fd3SAndroid Build Coastguard Worker ** It is the responsibility of the caller to eventually destroy the iterator 11466*a3141fd3SAndroid Build Coastguard Worker ** by passing it to [sqlite3changeset_finalize()]. The buffer containing the 11467*a3141fd3SAndroid Build Coastguard Worker ** changeset (pChangeset) must remain valid until after the iterator is 11468*a3141fd3SAndroid Build Coastguard Worker ** destroyed. 11469*a3141fd3SAndroid Build Coastguard Worker ** 11470*a3141fd3SAndroid Build Coastguard Worker ** Assuming the changeset blob was created by one of the 11471*a3141fd3SAndroid Build Coastguard Worker ** [sqlite3session_changeset()], [sqlite3changeset_concat()] or 11472*a3141fd3SAndroid Build Coastguard Worker ** [sqlite3changeset_invert()] functions, all changes within the changeset 11473*a3141fd3SAndroid Build Coastguard Worker ** that apply to a single table are grouped together. This means that when 11474*a3141fd3SAndroid Build Coastguard Worker ** an application iterates through a changeset using an iterator created by 11475*a3141fd3SAndroid Build Coastguard Worker ** this function, all changes that relate to a single table are visited 11476*a3141fd3SAndroid Build Coastguard Worker ** consecutively. There is no chance that the iterator will visit a change 11477*a3141fd3SAndroid Build Coastguard Worker ** the applies to table X, then one for table Y, and then later on visit 11478*a3141fd3SAndroid Build Coastguard Worker ** another change for table X. 11479*a3141fd3SAndroid Build Coastguard Worker ** 11480*a3141fd3SAndroid Build Coastguard Worker ** The behavior of sqlite3changeset_start_v2() and its streaming equivalent 11481*a3141fd3SAndroid Build Coastguard Worker ** may be modified by passing a combination of 11482*a3141fd3SAndroid Build Coastguard Worker ** [SQLITE_CHANGESETSTART_INVERT | supported flags] as the 4th parameter. 11483*a3141fd3SAndroid Build Coastguard Worker ** 11484*a3141fd3SAndroid Build Coastguard Worker ** Note that the sqlite3changeset_start_v2() API is still <b>experimental</b> 11485*a3141fd3SAndroid Build Coastguard Worker ** and therefore subject to change. 11486*a3141fd3SAndroid Build Coastguard Worker */ 11487*a3141fd3SAndroid Build Coastguard Worker SQLITE_API int sqlite3changeset_start( 11488*a3141fd3SAndroid Build Coastguard Worker sqlite3_changeset_iter **pp, /* OUT: New changeset iterator handle */ 11489*a3141fd3SAndroid Build Coastguard Worker int nChangeset, /* Size of changeset blob in bytes */ 11490*a3141fd3SAndroid Build Coastguard Worker void *pChangeset /* Pointer to blob containing changeset */ 11491*a3141fd3SAndroid Build Coastguard Worker ); 11492*a3141fd3SAndroid Build Coastguard Worker SQLITE_API int sqlite3changeset_start_v2( 11493*a3141fd3SAndroid Build Coastguard Worker sqlite3_changeset_iter **pp, /* OUT: New changeset iterator handle */ 11494*a3141fd3SAndroid Build Coastguard Worker int nChangeset, /* Size of changeset blob in bytes */ 11495*a3141fd3SAndroid Build Coastguard Worker void *pChangeset, /* Pointer to blob containing changeset */ 11496*a3141fd3SAndroid Build Coastguard Worker int flags /* SESSION_CHANGESETSTART_* flags */ 11497*a3141fd3SAndroid Build Coastguard Worker ); 11498*a3141fd3SAndroid Build Coastguard Worker 11499*a3141fd3SAndroid Build Coastguard Worker /* 11500*a3141fd3SAndroid Build Coastguard Worker ** CAPI3REF: Flags for sqlite3changeset_start_v2 11501*a3141fd3SAndroid Build Coastguard Worker ** 11502*a3141fd3SAndroid Build Coastguard Worker ** The following flags may passed via the 4th parameter to 11503*a3141fd3SAndroid Build Coastguard Worker ** [sqlite3changeset_start_v2] and [sqlite3changeset_start_v2_strm]: 11504*a3141fd3SAndroid Build Coastguard Worker ** 11505*a3141fd3SAndroid Build Coastguard Worker ** <dt>SQLITE_CHANGESETAPPLY_INVERT <dd> 11506*a3141fd3SAndroid Build Coastguard Worker ** Invert the changeset while iterating through it. This is equivalent to 11507*a3141fd3SAndroid Build Coastguard Worker ** inverting a changeset using sqlite3changeset_invert() before applying it. 11508*a3141fd3SAndroid Build Coastguard Worker ** It is an error to specify this flag with a patchset. 11509*a3141fd3SAndroid Build Coastguard Worker */ 11510*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_CHANGESETSTART_INVERT 0x0002 11511*a3141fd3SAndroid Build Coastguard Worker 11512*a3141fd3SAndroid Build Coastguard Worker 11513*a3141fd3SAndroid Build Coastguard Worker /* 11514*a3141fd3SAndroid Build Coastguard Worker ** CAPI3REF: Advance A Changeset Iterator 11515*a3141fd3SAndroid Build Coastguard Worker ** METHOD: sqlite3_changeset_iter 11516*a3141fd3SAndroid Build Coastguard Worker ** 11517*a3141fd3SAndroid Build Coastguard Worker ** This function may only be used with iterators created by the function 11518*a3141fd3SAndroid Build Coastguard Worker ** [sqlite3changeset_start()]. If it is called on an iterator passed to 11519*a3141fd3SAndroid Build Coastguard Worker ** a conflict-handler callback by [sqlite3changeset_apply()], SQLITE_MISUSE 11520*a3141fd3SAndroid Build Coastguard Worker ** is returned and the call has no effect. 11521*a3141fd3SAndroid Build Coastguard Worker ** 11522*a3141fd3SAndroid Build Coastguard Worker ** Immediately after an iterator is created by sqlite3changeset_start(), it 11523*a3141fd3SAndroid Build Coastguard Worker ** does not point to any change in the changeset. Assuming the changeset 11524*a3141fd3SAndroid Build Coastguard Worker ** is not empty, the first call to this function advances the iterator to 11525*a3141fd3SAndroid Build Coastguard Worker ** point to the first change in the changeset. Each subsequent call advances 11526*a3141fd3SAndroid Build Coastguard Worker ** the iterator to point to the next change in the changeset (if any). If 11527*a3141fd3SAndroid Build Coastguard Worker ** no error occurs and the iterator points to a valid change after a call 11528*a3141fd3SAndroid Build Coastguard Worker ** to sqlite3changeset_next() has advanced it, SQLITE_ROW is returned. 11529*a3141fd3SAndroid Build Coastguard Worker ** Otherwise, if all changes in the changeset have already been visited, 11530*a3141fd3SAndroid Build Coastguard Worker ** SQLITE_DONE is returned. 11531*a3141fd3SAndroid Build Coastguard Worker ** 11532*a3141fd3SAndroid Build Coastguard Worker ** If an error occurs, an SQLite error code is returned. Possible error 11533*a3141fd3SAndroid Build Coastguard Worker ** codes include SQLITE_CORRUPT (if the changeset buffer is corrupt) or 11534*a3141fd3SAndroid Build Coastguard Worker ** SQLITE_NOMEM. 11535*a3141fd3SAndroid Build Coastguard Worker */ 11536*a3141fd3SAndroid Build Coastguard Worker SQLITE_API int sqlite3changeset_next(sqlite3_changeset_iter *pIter); 11537*a3141fd3SAndroid Build Coastguard Worker 11538*a3141fd3SAndroid Build Coastguard Worker /* 11539*a3141fd3SAndroid Build Coastguard Worker ** CAPI3REF: Obtain The Current Operation From A Changeset Iterator 11540*a3141fd3SAndroid Build Coastguard Worker ** METHOD: sqlite3_changeset_iter 11541*a3141fd3SAndroid Build Coastguard Worker ** 11542*a3141fd3SAndroid Build Coastguard Worker ** The pIter argument passed to this function may either be an iterator 11543*a3141fd3SAndroid Build Coastguard Worker ** passed to a conflict-handler by [sqlite3changeset_apply()], or an iterator 11544*a3141fd3SAndroid Build Coastguard Worker ** created by [sqlite3changeset_start()]. In the latter case, the most recent 11545*a3141fd3SAndroid Build Coastguard Worker ** call to [sqlite3changeset_next()] must have returned [SQLITE_ROW]. If this 11546*a3141fd3SAndroid Build Coastguard Worker ** is not the case, this function returns [SQLITE_MISUSE]. 11547*a3141fd3SAndroid Build Coastguard Worker ** 11548*a3141fd3SAndroid Build Coastguard Worker ** Arguments pOp, pnCol and pzTab may not be NULL. Upon return, three 11549*a3141fd3SAndroid Build Coastguard Worker ** outputs are set through these pointers: 11550*a3141fd3SAndroid Build Coastguard Worker ** 11551*a3141fd3SAndroid Build Coastguard Worker ** *pOp is set to one of [SQLITE_INSERT], [SQLITE_DELETE] or [SQLITE_UPDATE], 11552*a3141fd3SAndroid Build Coastguard Worker ** depending on the type of change that the iterator currently points to; 11553*a3141fd3SAndroid Build Coastguard Worker ** 11554*a3141fd3SAndroid Build Coastguard Worker ** *pnCol is set to the number of columns in the table affected by the change; and 11555*a3141fd3SAndroid Build Coastguard Worker ** 11556*a3141fd3SAndroid Build Coastguard Worker ** *pzTab is set to point to a nul-terminated utf-8 encoded string containing 11557*a3141fd3SAndroid Build Coastguard Worker ** the name of the table affected by the current change. The buffer remains 11558*a3141fd3SAndroid Build Coastguard Worker ** valid until either sqlite3changeset_next() is called on the iterator 11559*a3141fd3SAndroid Build Coastguard Worker ** or until the conflict-handler function returns. 11560*a3141fd3SAndroid Build Coastguard Worker ** 11561*a3141fd3SAndroid Build Coastguard Worker ** If pbIndirect is not NULL, then *pbIndirect is set to true (1) if the change 11562*a3141fd3SAndroid Build Coastguard Worker ** is an indirect change, or false (0) otherwise. See the documentation for 11563*a3141fd3SAndroid Build Coastguard Worker ** [sqlite3session_indirect()] for a description of direct and indirect 11564*a3141fd3SAndroid Build Coastguard Worker ** changes. 11565*a3141fd3SAndroid Build Coastguard Worker ** 11566*a3141fd3SAndroid Build Coastguard Worker ** If no error occurs, SQLITE_OK is returned. If an error does occur, an 11567*a3141fd3SAndroid Build Coastguard Worker ** SQLite error code is returned. The values of the output variables may not 11568*a3141fd3SAndroid Build Coastguard Worker ** be trusted in this case. 11569*a3141fd3SAndroid Build Coastguard Worker */ 11570*a3141fd3SAndroid Build Coastguard Worker SQLITE_API int sqlite3changeset_op( 11571*a3141fd3SAndroid Build Coastguard Worker sqlite3_changeset_iter *pIter, /* Iterator object */ 11572*a3141fd3SAndroid Build Coastguard Worker const char **pzTab, /* OUT: Pointer to table name */ 11573*a3141fd3SAndroid Build Coastguard Worker int *pnCol, /* OUT: Number of columns in table */ 11574*a3141fd3SAndroid Build Coastguard Worker int *pOp, /* OUT: SQLITE_INSERT, DELETE or UPDATE */ 11575*a3141fd3SAndroid Build Coastguard Worker int *pbIndirect /* OUT: True for an 'indirect' change */ 11576*a3141fd3SAndroid Build Coastguard Worker ); 11577*a3141fd3SAndroid Build Coastguard Worker 11578*a3141fd3SAndroid Build Coastguard Worker /* 11579*a3141fd3SAndroid Build Coastguard Worker ** CAPI3REF: Obtain The Primary Key Definition Of A Table 11580*a3141fd3SAndroid Build Coastguard Worker ** METHOD: sqlite3_changeset_iter 11581*a3141fd3SAndroid Build Coastguard Worker ** 11582*a3141fd3SAndroid Build Coastguard Worker ** For each modified table, a changeset includes the following: 11583*a3141fd3SAndroid Build Coastguard Worker ** 11584*a3141fd3SAndroid Build Coastguard Worker ** <ul> 11585*a3141fd3SAndroid Build Coastguard Worker ** <li> The number of columns in the table, and 11586*a3141fd3SAndroid Build Coastguard Worker ** <li> Which of those columns make up the tables PRIMARY KEY. 11587*a3141fd3SAndroid Build Coastguard Worker ** </ul> 11588*a3141fd3SAndroid Build Coastguard Worker ** 11589*a3141fd3SAndroid Build Coastguard Worker ** This function is used to find which columns comprise the PRIMARY KEY of 11590*a3141fd3SAndroid Build Coastguard Worker ** the table modified by the change that iterator pIter currently points to. 11591*a3141fd3SAndroid Build Coastguard Worker ** If successful, *pabPK is set to point to an array of nCol entries, where 11592*a3141fd3SAndroid Build Coastguard Worker ** nCol is the number of columns in the table. Elements of *pabPK are set to 11593*a3141fd3SAndroid Build Coastguard Worker ** 0x01 if the corresponding column is part of the tables primary key, or 11594*a3141fd3SAndroid Build Coastguard Worker ** 0x00 if it is not. 11595*a3141fd3SAndroid Build Coastguard Worker ** 11596*a3141fd3SAndroid Build Coastguard Worker ** If argument pnCol is not NULL, then *pnCol is set to the number of columns 11597*a3141fd3SAndroid Build Coastguard Worker ** in the table. 11598*a3141fd3SAndroid Build Coastguard Worker ** 11599*a3141fd3SAndroid Build Coastguard Worker ** If this function is called when the iterator does not point to a valid 11600*a3141fd3SAndroid Build Coastguard Worker ** entry, SQLITE_MISUSE is returned and the output variables zeroed. Otherwise, 11601*a3141fd3SAndroid Build Coastguard Worker ** SQLITE_OK is returned and the output variables populated as described 11602*a3141fd3SAndroid Build Coastguard Worker ** above. 11603*a3141fd3SAndroid Build Coastguard Worker */ 11604*a3141fd3SAndroid Build Coastguard Worker SQLITE_API int sqlite3changeset_pk( 11605*a3141fd3SAndroid Build Coastguard Worker sqlite3_changeset_iter *pIter, /* Iterator object */ 11606*a3141fd3SAndroid Build Coastguard Worker unsigned char **pabPK, /* OUT: Array of boolean - true for PK cols */ 11607*a3141fd3SAndroid Build Coastguard Worker int *pnCol /* OUT: Number of entries in output array */ 11608*a3141fd3SAndroid Build Coastguard Worker ); 11609*a3141fd3SAndroid Build Coastguard Worker 11610*a3141fd3SAndroid Build Coastguard Worker /* 11611*a3141fd3SAndroid Build Coastguard Worker ** CAPI3REF: Obtain old.* Values From A Changeset Iterator 11612*a3141fd3SAndroid Build Coastguard Worker ** METHOD: sqlite3_changeset_iter 11613*a3141fd3SAndroid Build Coastguard Worker ** 11614*a3141fd3SAndroid Build Coastguard Worker ** The pIter argument passed to this function may either be an iterator 11615*a3141fd3SAndroid Build Coastguard Worker ** passed to a conflict-handler by [sqlite3changeset_apply()], or an iterator 11616*a3141fd3SAndroid Build Coastguard Worker ** created by [sqlite3changeset_start()]. In the latter case, the most recent 11617*a3141fd3SAndroid Build Coastguard Worker ** call to [sqlite3changeset_next()] must have returned SQLITE_ROW. 11618*a3141fd3SAndroid Build Coastguard Worker ** Furthermore, it may only be called if the type of change that the iterator 11619*a3141fd3SAndroid Build Coastguard Worker ** currently points to is either [SQLITE_DELETE] or [SQLITE_UPDATE]. Otherwise, 11620*a3141fd3SAndroid Build Coastguard Worker ** this function returns [SQLITE_MISUSE] and sets *ppValue to NULL. 11621*a3141fd3SAndroid Build Coastguard Worker ** 11622*a3141fd3SAndroid Build Coastguard Worker ** Argument iVal must be greater than or equal to 0, and less than the number 11623*a3141fd3SAndroid Build Coastguard Worker ** of columns in the table affected by the current change. Otherwise, 11624*a3141fd3SAndroid Build Coastguard Worker ** [SQLITE_RANGE] is returned and *ppValue is set to NULL. 11625*a3141fd3SAndroid Build Coastguard Worker ** 11626*a3141fd3SAndroid Build Coastguard Worker ** If successful, this function sets *ppValue to point to a protected 11627*a3141fd3SAndroid Build Coastguard Worker ** sqlite3_value object containing the iVal'th value from the vector of 11628*a3141fd3SAndroid Build Coastguard Worker ** original row values stored as part of the UPDATE or DELETE change and 11629*a3141fd3SAndroid Build Coastguard Worker ** returns SQLITE_OK. The name of the function comes from the fact that this 11630*a3141fd3SAndroid Build Coastguard Worker ** is similar to the "old.*" columns available to update or delete triggers. 11631*a3141fd3SAndroid Build Coastguard Worker ** 11632*a3141fd3SAndroid Build Coastguard Worker ** If some other error occurs (e.g. an OOM condition), an SQLite error code 11633*a3141fd3SAndroid Build Coastguard Worker ** is returned and *ppValue is set to NULL. 11634*a3141fd3SAndroid Build Coastguard Worker */ 11635*a3141fd3SAndroid Build Coastguard Worker SQLITE_API int sqlite3changeset_old( 11636*a3141fd3SAndroid Build Coastguard Worker sqlite3_changeset_iter *pIter, /* Changeset iterator */ 11637*a3141fd3SAndroid Build Coastguard Worker int iVal, /* Column number */ 11638*a3141fd3SAndroid Build Coastguard Worker sqlite3_value **ppValue /* OUT: Old value (or NULL pointer) */ 11639*a3141fd3SAndroid Build Coastguard Worker ); 11640*a3141fd3SAndroid Build Coastguard Worker 11641*a3141fd3SAndroid Build Coastguard Worker /* 11642*a3141fd3SAndroid Build Coastguard Worker ** CAPI3REF: Obtain new.* Values From A Changeset Iterator 11643*a3141fd3SAndroid Build Coastguard Worker ** METHOD: sqlite3_changeset_iter 11644*a3141fd3SAndroid Build Coastguard Worker ** 11645*a3141fd3SAndroid Build Coastguard Worker ** The pIter argument passed to this function may either be an iterator 11646*a3141fd3SAndroid Build Coastguard Worker ** passed to a conflict-handler by [sqlite3changeset_apply()], or an iterator 11647*a3141fd3SAndroid Build Coastguard Worker ** created by [sqlite3changeset_start()]. In the latter case, the most recent 11648*a3141fd3SAndroid Build Coastguard Worker ** call to [sqlite3changeset_next()] must have returned SQLITE_ROW. 11649*a3141fd3SAndroid Build Coastguard Worker ** Furthermore, it may only be called if the type of change that the iterator 11650*a3141fd3SAndroid Build Coastguard Worker ** currently points to is either [SQLITE_UPDATE] or [SQLITE_INSERT]. Otherwise, 11651*a3141fd3SAndroid Build Coastguard Worker ** this function returns [SQLITE_MISUSE] and sets *ppValue to NULL. 11652*a3141fd3SAndroid Build Coastguard Worker ** 11653*a3141fd3SAndroid Build Coastguard Worker ** Argument iVal must be greater than or equal to 0, and less than the number 11654*a3141fd3SAndroid Build Coastguard Worker ** of columns in the table affected by the current change. Otherwise, 11655*a3141fd3SAndroid Build Coastguard Worker ** [SQLITE_RANGE] is returned and *ppValue is set to NULL. 11656*a3141fd3SAndroid Build Coastguard Worker ** 11657*a3141fd3SAndroid Build Coastguard Worker ** If successful, this function sets *ppValue to point to a protected 11658*a3141fd3SAndroid Build Coastguard Worker ** sqlite3_value object containing the iVal'th value from the vector of 11659*a3141fd3SAndroid Build Coastguard Worker ** new row values stored as part of the UPDATE or INSERT change and 11660*a3141fd3SAndroid Build Coastguard Worker ** returns SQLITE_OK. If the change is an UPDATE and does not include 11661*a3141fd3SAndroid Build Coastguard Worker ** a new value for the requested column, *ppValue is set to NULL and 11662*a3141fd3SAndroid Build Coastguard Worker ** SQLITE_OK returned. The name of the function comes from the fact that 11663*a3141fd3SAndroid Build Coastguard Worker ** this is similar to the "new.*" columns available to update or delete 11664*a3141fd3SAndroid Build Coastguard Worker ** triggers. 11665*a3141fd3SAndroid Build Coastguard Worker ** 11666*a3141fd3SAndroid Build Coastguard Worker ** If some other error occurs (e.g. an OOM condition), an SQLite error code 11667*a3141fd3SAndroid Build Coastguard Worker ** is returned and *ppValue is set to NULL. 11668*a3141fd3SAndroid Build Coastguard Worker */ 11669*a3141fd3SAndroid Build Coastguard Worker SQLITE_API int sqlite3changeset_new( 11670*a3141fd3SAndroid Build Coastguard Worker sqlite3_changeset_iter *pIter, /* Changeset iterator */ 11671*a3141fd3SAndroid Build Coastguard Worker int iVal, /* Column number */ 11672*a3141fd3SAndroid Build Coastguard Worker sqlite3_value **ppValue /* OUT: New value (or NULL pointer) */ 11673*a3141fd3SAndroid Build Coastguard Worker ); 11674*a3141fd3SAndroid Build Coastguard Worker 11675*a3141fd3SAndroid Build Coastguard Worker /* 11676*a3141fd3SAndroid Build Coastguard Worker ** CAPI3REF: Obtain Conflicting Row Values From A Changeset Iterator 11677*a3141fd3SAndroid Build Coastguard Worker ** METHOD: sqlite3_changeset_iter 11678*a3141fd3SAndroid Build Coastguard Worker ** 11679*a3141fd3SAndroid Build Coastguard Worker ** This function should only be used with iterator objects passed to a 11680*a3141fd3SAndroid Build Coastguard Worker ** conflict-handler callback by [sqlite3changeset_apply()] with either 11681*a3141fd3SAndroid Build Coastguard Worker ** [SQLITE_CHANGESET_DATA] or [SQLITE_CHANGESET_CONFLICT]. If this function 11682*a3141fd3SAndroid Build Coastguard Worker ** is called on any other iterator, [SQLITE_MISUSE] is returned and *ppValue 11683*a3141fd3SAndroid Build Coastguard Worker ** is set to NULL. 11684*a3141fd3SAndroid Build Coastguard Worker ** 11685*a3141fd3SAndroid Build Coastguard Worker ** Argument iVal must be greater than or equal to 0, and less than the number 11686*a3141fd3SAndroid Build Coastguard Worker ** of columns in the table affected by the current change. Otherwise, 11687*a3141fd3SAndroid Build Coastguard Worker ** [SQLITE_RANGE] is returned and *ppValue is set to NULL. 11688*a3141fd3SAndroid Build Coastguard Worker ** 11689*a3141fd3SAndroid Build Coastguard Worker ** If successful, this function sets *ppValue to point to a protected 11690*a3141fd3SAndroid Build Coastguard Worker ** sqlite3_value object containing the iVal'th value from the 11691*a3141fd3SAndroid Build Coastguard Worker ** "conflicting row" associated with the current conflict-handler callback 11692*a3141fd3SAndroid Build Coastguard Worker ** and returns SQLITE_OK. 11693*a3141fd3SAndroid Build Coastguard Worker ** 11694*a3141fd3SAndroid Build Coastguard Worker ** If some other error occurs (e.g. an OOM condition), an SQLite error code 11695*a3141fd3SAndroid Build Coastguard Worker ** is returned and *ppValue is set to NULL. 11696*a3141fd3SAndroid Build Coastguard Worker */ 11697*a3141fd3SAndroid Build Coastguard Worker SQLITE_API int sqlite3changeset_conflict( 11698*a3141fd3SAndroid Build Coastguard Worker sqlite3_changeset_iter *pIter, /* Changeset iterator */ 11699*a3141fd3SAndroid Build Coastguard Worker int iVal, /* Column number */ 11700*a3141fd3SAndroid Build Coastguard Worker sqlite3_value **ppValue /* OUT: Value from conflicting row */ 11701*a3141fd3SAndroid Build Coastguard Worker ); 11702*a3141fd3SAndroid Build Coastguard Worker 11703*a3141fd3SAndroid Build Coastguard Worker /* 11704*a3141fd3SAndroid Build Coastguard Worker ** CAPI3REF: Determine The Number Of Foreign Key Constraint Violations 11705*a3141fd3SAndroid Build Coastguard Worker ** METHOD: sqlite3_changeset_iter 11706*a3141fd3SAndroid Build Coastguard Worker ** 11707*a3141fd3SAndroid Build Coastguard Worker ** This function may only be called with an iterator passed to an 11708*a3141fd3SAndroid Build Coastguard Worker ** SQLITE_CHANGESET_FOREIGN_KEY conflict handler callback. In this case 11709*a3141fd3SAndroid Build Coastguard Worker ** it sets the output variable to the total number of known foreign key 11710*a3141fd3SAndroid Build Coastguard Worker ** violations in the destination database and returns SQLITE_OK. 11711*a3141fd3SAndroid Build Coastguard Worker ** 11712*a3141fd3SAndroid Build Coastguard Worker ** In all other cases this function returns SQLITE_MISUSE. 11713*a3141fd3SAndroid Build Coastguard Worker */ 11714*a3141fd3SAndroid Build Coastguard Worker SQLITE_API int sqlite3changeset_fk_conflicts( 11715*a3141fd3SAndroid Build Coastguard Worker sqlite3_changeset_iter *pIter, /* Changeset iterator */ 11716*a3141fd3SAndroid Build Coastguard Worker int *pnOut /* OUT: Number of FK violations */ 11717*a3141fd3SAndroid Build Coastguard Worker ); 11718*a3141fd3SAndroid Build Coastguard Worker 11719*a3141fd3SAndroid Build Coastguard Worker 11720*a3141fd3SAndroid Build Coastguard Worker /* 11721*a3141fd3SAndroid Build Coastguard Worker ** CAPI3REF: Finalize A Changeset Iterator 11722*a3141fd3SAndroid Build Coastguard Worker ** METHOD: sqlite3_changeset_iter 11723*a3141fd3SAndroid Build Coastguard Worker ** 11724*a3141fd3SAndroid Build Coastguard Worker ** This function is used to finalize an iterator allocated with 11725*a3141fd3SAndroid Build Coastguard Worker ** [sqlite3changeset_start()]. 11726*a3141fd3SAndroid Build Coastguard Worker ** 11727*a3141fd3SAndroid Build Coastguard Worker ** This function should only be called on iterators created using the 11728*a3141fd3SAndroid Build Coastguard Worker ** [sqlite3changeset_start()] function. If an application calls this 11729*a3141fd3SAndroid Build Coastguard Worker ** function with an iterator passed to a conflict-handler by 11730*a3141fd3SAndroid Build Coastguard Worker ** [sqlite3changeset_apply()], [SQLITE_MISUSE] is immediately returned and the 11731*a3141fd3SAndroid Build Coastguard Worker ** call has no effect. 11732*a3141fd3SAndroid Build Coastguard Worker ** 11733*a3141fd3SAndroid Build Coastguard Worker ** If an error was encountered within a call to an sqlite3changeset_xxx() 11734*a3141fd3SAndroid Build Coastguard Worker ** function (for example an [SQLITE_CORRUPT] in [sqlite3changeset_next()] or an 11735*a3141fd3SAndroid Build Coastguard Worker ** [SQLITE_NOMEM] in [sqlite3changeset_new()]) then an error code corresponding 11736*a3141fd3SAndroid Build Coastguard Worker ** to that error is returned by this function. Otherwise, SQLITE_OK is 11737*a3141fd3SAndroid Build Coastguard Worker ** returned. This is to allow the following pattern (pseudo-code): 11738*a3141fd3SAndroid Build Coastguard Worker ** 11739*a3141fd3SAndroid Build Coastguard Worker ** <pre> 11740*a3141fd3SAndroid Build Coastguard Worker ** sqlite3changeset_start(); 11741*a3141fd3SAndroid Build Coastguard Worker ** while( SQLITE_ROW==sqlite3changeset_next() ){ 11742*a3141fd3SAndroid Build Coastguard Worker ** // Do something with change. 11743*a3141fd3SAndroid Build Coastguard Worker ** } 11744*a3141fd3SAndroid Build Coastguard Worker ** rc = sqlite3changeset_finalize(); 11745*a3141fd3SAndroid Build Coastguard Worker ** if( rc!=SQLITE_OK ){ 11746*a3141fd3SAndroid Build Coastguard Worker ** // An error has occurred 11747*a3141fd3SAndroid Build Coastguard Worker ** } 11748*a3141fd3SAndroid Build Coastguard Worker ** </pre> 11749*a3141fd3SAndroid Build Coastguard Worker */ 11750*a3141fd3SAndroid Build Coastguard Worker SQLITE_API int sqlite3changeset_finalize(sqlite3_changeset_iter *pIter); 11751*a3141fd3SAndroid Build Coastguard Worker 11752*a3141fd3SAndroid Build Coastguard Worker /* 11753*a3141fd3SAndroid Build Coastguard Worker ** CAPI3REF: Invert A Changeset 11754*a3141fd3SAndroid Build Coastguard Worker ** 11755*a3141fd3SAndroid Build Coastguard Worker ** This function is used to "invert" a changeset object. Applying an inverted 11756*a3141fd3SAndroid Build Coastguard Worker ** changeset to a database reverses the effects of applying the uninverted 11757*a3141fd3SAndroid Build Coastguard Worker ** changeset. Specifically: 11758*a3141fd3SAndroid Build Coastguard Worker ** 11759*a3141fd3SAndroid Build Coastguard Worker ** <ul> 11760*a3141fd3SAndroid Build Coastguard Worker ** <li> Each DELETE change is changed to an INSERT, and 11761*a3141fd3SAndroid Build Coastguard Worker ** <li> Each INSERT change is changed to a DELETE, and 11762*a3141fd3SAndroid Build Coastguard Worker ** <li> For each UPDATE change, the old.* and new.* values are exchanged. 11763*a3141fd3SAndroid Build Coastguard Worker ** </ul> 11764*a3141fd3SAndroid Build Coastguard Worker ** 11765*a3141fd3SAndroid Build Coastguard Worker ** This function does not change the order in which changes appear within 11766*a3141fd3SAndroid Build Coastguard Worker ** the changeset. It merely reverses the sense of each individual change. 11767*a3141fd3SAndroid Build Coastguard Worker ** 11768*a3141fd3SAndroid Build Coastguard Worker ** If successful, a pointer to a buffer containing the inverted changeset 11769*a3141fd3SAndroid Build Coastguard Worker ** is stored in *ppOut, the size of the same buffer is stored in *pnOut, and 11770*a3141fd3SAndroid Build Coastguard Worker ** SQLITE_OK is returned. If an error occurs, both *pnOut and *ppOut are 11771*a3141fd3SAndroid Build Coastguard Worker ** zeroed and an SQLite error code returned. 11772*a3141fd3SAndroid Build Coastguard Worker ** 11773*a3141fd3SAndroid Build Coastguard Worker ** It is the responsibility of the caller to eventually call sqlite3_free() 11774*a3141fd3SAndroid Build Coastguard Worker ** on the *ppOut pointer to free the buffer allocation following a successful 11775*a3141fd3SAndroid Build Coastguard Worker ** call to this function. 11776*a3141fd3SAndroid Build Coastguard Worker ** 11777*a3141fd3SAndroid Build Coastguard Worker ** WARNING/TODO: This function currently assumes that the input is a valid 11778*a3141fd3SAndroid Build Coastguard Worker ** changeset. If it is not, the results are undefined. 11779*a3141fd3SAndroid Build Coastguard Worker */ 11780*a3141fd3SAndroid Build Coastguard Worker SQLITE_API int sqlite3changeset_invert( 11781*a3141fd3SAndroid Build Coastguard Worker int nIn, const void *pIn, /* Input changeset */ 11782*a3141fd3SAndroid Build Coastguard Worker int *pnOut, void **ppOut /* OUT: Inverse of input */ 11783*a3141fd3SAndroid Build Coastguard Worker ); 11784*a3141fd3SAndroid Build Coastguard Worker 11785*a3141fd3SAndroid Build Coastguard Worker /* 11786*a3141fd3SAndroid Build Coastguard Worker ** CAPI3REF: Concatenate Two Changeset Objects 11787*a3141fd3SAndroid Build Coastguard Worker ** 11788*a3141fd3SAndroid Build Coastguard Worker ** This function is used to concatenate two changesets, A and B, into a 11789*a3141fd3SAndroid Build Coastguard Worker ** single changeset. The result is a changeset equivalent to applying 11790*a3141fd3SAndroid Build Coastguard Worker ** changeset A followed by changeset B. 11791*a3141fd3SAndroid Build Coastguard Worker ** 11792*a3141fd3SAndroid Build Coastguard Worker ** This function combines the two input changesets using an 11793*a3141fd3SAndroid Build Coastguard Worker ** sqlite3_changegroup object. Calling it produces similar results as the 11794*a3141fd3SAndroid Build Coastguard Worker ** following code fragment: 11795*a3141fd3SAndroid Build Coastguard Worker ** 11796*a3141fd3SAndroid Build Coastguard Worker ** <pre> 11797*a3141fd3SAndroid Build Coastguard Worker ** sqlite3_changegroup *pGrp; 11798*a3141fd3SAndroid Build Coastguard Worker ** rc = sqlite3_changegroup_new(&pGrp); 11799*a3141fd3SAndroid Build Coastguard Worker ** if( rc==SQLITE_OK ) rc = sqlite3changegroup_add(pGrp, nA, pA); 11800*a3141fd3SAndroid Build Coastguard Worker ** if( rc==SQLITE_OK ) rc = sqlite3changegroup_add(pGrp, nB, pB); 11801*a3141fd3SAndroid Build Coastguard Worker ** if( rc==SQLITE_OK ){ 11802*a3141fd3SAndroid Build Coastguard Worker ** rc = sqlite3changegroup_output(pGrp, pnOut, ppOut); 11803*a3141fd3SAndroid Build Coastguard Worker ** }else{ 11804*a3141fd3SAndroid Build Coastguard Worker ** *ppOut = 0; 11805*a3141fd3SAndroid Build Coastguard Worker ** *pnOut = 0; 11806*a3141fd3SAndroid Build Coastguard Worker ** } 11807*a3141fd3SAndroid Build Coastguard Worker ** </pre> 11808*a3141fd3SAndroid Build Coastguard Worker ** 11809*a3141fd3SAndroid Build Coastguard Worker ** Refer to the sqlite3_changegroup documentation below for details. 11810*a3141fd3SAndroid Build Coastguard Worker */ 11811*a3141fd3SAndroid Build Coastguard Worker SQLITE_API int sqlite3changeset_concat( 11812*a3141fd3SAndroid Build Coastguard Worker int nA, /* Number of bytes in buffer pA */ 11813*a3141fd3SAndroid Build Coastguard Worker void *pA, /* Pointer to buffer containing changeset A */ 11814*a3141fd3SAndroid Build Coastguard Worker int nB, /* Number of bytes in buffer pB */ 11815*a3141fd3SAndroid Build Coastguard Worker void *pB, /* Pointer to buffer containing changeset B */ 11816*a3141fd3SAndroid Build Coastguard Worker int *pnOut, /* OUT: Number of bytes in output changeset */ 11817*a3141fd3SAndroid Build Coastguard Worker void **ppOut /* OUT: Buffer containing output changeset */ 11818*a3141fd3SAndroid Build Coastguard Worker ); 11819*a3141fd3SAndroid Build Coastguard Worker 11820*a3141fd3SAndroid Build Coastguard Worker 11821*a3141fd3SAndroid Build Coastguard Worker /* 11822*a3141fd3SAndroid Build Coastguard Worker ** CAPI3REF: Upgrade the Schema of a Changeset/Patchset 11823*a3141fd3SAndroid Build Coastguard Worker */ 11824*a3141fd3SAndroid Build Coastguard Worker SQLITE_API int sqlite3changeset_upgrade( 11825*a3141fd3SAndroid Build Coastguard Worker sqlite3 *db, 11826*a3141fd3SAndroid Build Coastguard Worker const char *zDb, 11827*a3141fd3SAndroid Build Coastguard Worker int nIn, const void *pIn, /* Input changeset */ 11828*a3141fd3SAndroid Build Coastguard Worker int *pnOut, void **ppOut /* OUT: Inverse of input */ 11829*a3141fd3SAndroid Build Coastguard Worker ); 11830*a3141fd3SAndroid Build Coastguard Worker 11831*a3141fd3SAndroid Build Coastguard Worker 11832*a3141fd3SAndroid Build Coastguard Worker 11833*a3141fd3SAndroid Build Coastguard Worker /* 11834*a3141fd3SAndroid Build Coastguard Worker ** CAPI3REF: Changegroup Handle 11835*a3141fd3SAndroid Build Coastguard Worker ** 11836*a3141fd3SAndroid Build Coastguard Worker ** A changegroup is an object used to combine two or more 11837*a3141fd3SAndroid Build Coastguard Worker ** [changesets] or [patchsets] 11838*a3141fd3SAndroid Build Coastguard Worker */ 11839*a3141fd3SAndroid Build Coastguard Worker typedef struct sqlite3_changegroup sqlite3_changegroup; 11840*a3141fd3SAndroid Build Coastguard Worker 11841*a3141fd3SAndroid Build Coastguard Worker /* 11842*a3141fd3SAndroid Build Coastguard Worker ** CAPI3REF: Create A New Changegroup Object 11843*a3141fd3SAndroid Build Coastguard Worker ** CONSTRUCTOR: sqlite3_changegroup 11844*a3141fd3SAndroid Build Coastguard Worker ** 11845*a3141fd3SAndroid Build Coastguard Worker ** An sqlite3_changegroup object is used to combine two or more changesets 11846*a3141fd3SAndroid Build Coastguard Worker ** (or patchsets) into a single changeset (or patchset). A single changegroup 11847*a3141fd3SAndroid Build Coastguard Worker ** object may combine changesets or patchsets, but not both. The output is 11848*a3141fd3SAndroid Build Coastguard Worker ** always in the same format as the input. 11849*a3141fd3SAndroid Build Coastguard Worker ** 11850*a3141fd3SAndroid Build Coastguard Worker ** If successful, this function returns SQLITE_OK and populates (*pp) with 11851*a3141fd3SAndroid Build Coastguard Worker ** a pointer to a new sqlite3_changegroup object before returning. The caller 11852*a3141fd3SAndroid Build Coastguard Worker ** should eventually free the returned object using a call to 11853*a3141fd3SAndroid Build Coastguard Worker ** sqlite3changegroup_delete(). If an error occurs, an SQLite error code 11854*a3141fd3SAndroid Build Coastguard Worker ** (i.e. SQLITE_NOMEM) is returned and *pp is set to NULL. 11855*a3141fd3SAndroid Build Coastguard Worker ** 11856*a3141fd3SAndroid Build Coastguard Worker ** The usual usage pattern for an sqlite3_changegroup object is as follows: 11857*a3141fd3SAndroid Build Coastguard Worker ** 11858*a3141fd3SAndroid Build Coastguard Worker ** <ul> 11859*a3141fd3SAndroid Build Coastguard Worker ** <li> It is created using a call to sqlite3changegroup_new(). 11860*a3141fd3SAndroid Build Coastguard Worker ** 11861*a3141fd3SAndroid Build Coastguard Worker ** <li> Zero or more changesets (or patchsets) are added to the object 11862*a3141fd3SAndroid Build Coastguard Worker ** by calling sqlite3changegroup_add(). 11863*a3141fd3SAndroid Build Coastguard Worker ** 11864*a3141fd3SAndroid Build Coastguard Worker ** <li> The result of combining all input changesets together is obtained 11865*a3141fd3SAndroid Build Coastguard Worker ** by the application via a call to sqlite3changegroup_output(). 11866*a3141fd3SAndroid Build Coastguard Worker ** 11867*a3141fd3SAndroid Build Coastguard Worker ** <li> The object is deleted using a call to sqlite3changegroup_delete(). 11868*a3141fd3SAndroid Build Coastguard Worker ** </ul> 11869*a3141fd3SAndroid Build Coastguard Worker ** 11870*a3141fd3SAndroid Build Coastguard Worker ** Any number of calls to add() and output() may be made between the calls to 11871*a3141fd3SAndroid Build Coastguard Worker ** new() and delete(), and in any order. 11872*a3141fd3SAndroid Build Coastguard Worker ** 11873*a3141fd3SAndroid Build Coastguard Worker ** As well as the regular sqlite3changegroup_add() and 11874*a3141fd3SAndroid Build Coastguard Worker ** sqlite3changegroup_output() functions, also available are the streaming 11875*a3141fd3SAndroid Build Coastguard Worker ** versions sqlite3changegroup_add_strm() and sqlite3changegroup_output_strm(). 11876*a3141fd3SAndroid Build Coastguard Worker */ 11877*a3141fd3SAndroid Build Coastguard Worker SQLITE_API int sqlite3changegroup_new(sqlite3_changegroup **pp); 11878*a3141fd3SAndroid Build Coastguard Worker 11879*a3141fd3SAndroid Build Coastguard Worker /* 11880*a3141fd3SAndroid Build Coastguard Worker ** CAPI3REF: Add a Schema to a Changegroup 11881*a3141fd3SAndroid Build Coastguard Worker ** METHOD: sqlite3_changegroup_schema 11882*a3141fd3SAndroid Build Coastguard Worker ** 11883*a3141fd3SAndroid Build Coastguard Worker ** This method may be used to optionally enforce the rule that the changesets 11884*a3141fd3SAndroid Build Coastguard Worker ** added to the changegroup handle must match the schema of database zDb 11885*a3141fd3SAndroid Build Coastguard Worker ** ("main", "temp", or the name of an attached database). If 11886*a3141fd3SAndroid Build Coastguard Worker ** sqlite3changegroup_add() is called to add a changeset that is not compatible 11887*a3141fd3SAndroid Build Coastguard Worker ** with the configured schema, SQLITE_SCHEMA is returned and the changegroup 11888*a3141fd3SAndroid Build Coastguard Worker ** object is left in an undefined state. 11889*a3141fd3SAndroid Build Coastguard Worker ** 11890*a3141fd3SAndroid Build Coastguard Worker ** A changeset schema is considered compatible with the database schema in 11891*a3141fd3SAndroid Build Coastguard Worker ** the same way as for sqlite3changeset_apply(). Specifically, for each 11892*a3141fd3SAndroid Build Coastguard Worker ** table in the changeset, there exists a database table with: 11893*a3141fd3SAndroid Build Coastguard Worker ** 11894*a3141fd3SAndroid Build Coastguard Worker ** <ul> 11895*a3141fd3SAndroid Build Coastguard Worker ** <li> The name identified by the changeset, and 11896*a3141fd3SAndroid Build Coastguard Worker ** <li> at least as many columns as recorded in the changeset, and 11897*a3141fd3SAndroid Build Coastguard Worker ** <li> the primary key columns in the same position as recorded in 11898*a3141fd3SAndroid Build Coastguard Worker ** the changeset. 11899*a3141fd3SAndroid Build Coastguard Worker ** </ul> 11900*a3141fd3SAndroid Build Coastguard Worker ** 11901*a3141fd3SAndroid Build Coastguard Worker ** The output of the changegroup object always has the same schema as the 11902*a3141fd3SAndroid Build Coastguard Worker ** database nominated using this function. In cases where changesets passed 11903*a3141fd3SAndroid Build Coastguard Worker ** to sqlite3changegroup_add() have fewer columns than the corresponding table 11904*a3141fd3SAndroid Build Coastguard Worker ** in the database schema, these are filled in using the default column 11905*a3141fd3SAndroid Build Coastguard Worker ** values from the database schema. This makes it possible to combined 11906*a3141fd3SAndroid Build Coastguard Worker ** changesets that have different numbers of columns for a single table 11907*a3141fd3SAndroid Build Coastguard Worker ** within a changegroup, provided that they are otherwise compatible. 11908*a3141fd3SAndroid Build Coastguard Worker */ 11909*a3141fd3SAndroid Build Coastguard Worker SQLITE_API int sqlite3changegroup_schema(sqlite3_changegroup*, sqlite3*, const char *zDb); 11910*a3141fd3SAndroid Build Coastguard Worker 11911*a3141fd3SAndroid Build Coastguard Worker /* 11912*a3141fd3SAndroid Build Coastguard Worker ** CAPI3REF: Add A Changeset To A Changegroup 11913*a3141fd3SAndroid Build Coastguard Worker ** METHOD: sqlite3_changegroup 11914*a3141fd3SAndroid Build Coastguard Worker ** 11915*a3141fd3SAndroid Build Coastguard Worker ** Add all changes within the changeset (or patchset) in buffer pData (size 11916*a3141fd3SAndroid Build Coastguard Worker ** nData bytes) to the changegroup. 11917*a3141fd3SAndroid Build Coastguard Worker ** 11918*a3141fd3SAndroid Build Coastguard Worker ** If the buffer contains a patchset, then all prior calls to this function 11919*a3141fd3SAndroid Build Coastguard Worker ** on the same changegroup object must also have specified patchsets. Or, if 11920*a3141fd3SAndroid Build Coastguard Worker ** the buffer contains a changeset, so must have the earlier calls to this 11921*a3141fd3SAndroid Build Coastguard Worker ** function. Otherwise, SQLITE_ERROR is returned and no changes are added 11922*a3141fd3SAndroid Build Coastguard Worker ** to the changegroup. 11923*a3141fd3SAndroid Build Coastguard Worker ** 11924*a3141fd3SAndroid Build Coastguard Worker ** Rows within the changeset and changegroup are identified by the values in 11925*a3141fd3SAndroid Build Coastguard Worker ** their PRIMARY KEY columns. A change in the changeset is considered to 11926*a3141fd3SAndroid Build Coastguard Worker ** apply to the same row as a change already present in the changegroup if 11927*a3141fd3SAndroid Build Coastguard Worker ** the two rows have the same primary key. 11928*a3141fd3SAndroid Build Coastguard Worker ** 11929*a3141fd3SAndroid Build Coastguard Worker ** Changes to rows that do not already appear in the changegroup are 11930*a3141fd3SAndroid Build Coastguard Worker ** simply copied into it. Or, if both the new changeset and the changegroup 11931*a3141fd3SAndroid Build Coastguard Worker ** contain changes that apply to a single row, the final contents of the 11932*a3141fd3SAndroid Build Coastguard Worker ** changegroup depends on the type of each change, as follows: 11933*a3141fd3SAndroid Build Coastguard Worker ** 11934*a3141fd3SAndroid Build Coastguard Worker ** <table border=1 style="margin-left:8ex;margin-right:8ex"> 11935*a3141fd3SAndroid Build Coastguard Worker ** <tr><th style="white-space:pre">Existing Change </th> 11936*a3141fd3SAndroid Build Coastguard Worker ** <th style="white-space:pre">New Change </th> 11937*a3141fd3SAndroid Build Coastguard Worker ** <th>Output Change 11938*a3141fd3SAndroid Build Coastguard Worker ** <tr><td>INSERT <td>INSERT <td> 11939*a3141fd3SAndroid Build Coastguard Worker ** The new change is ignored. This case does not occur if the new 11940*a3141fd3SAndroid Build Coastguard Worker ** changeset was recorded immediately after the changesets already 11941*a3141fd3SAndroid Build Coastguard Worker ** added to the changegroup. 11942*a3141fd3SAndroid Build Coastguard Worker ** <tr><td>INSERT <td>UPDATE <td> 11943*a3141fd3SAndroid Build Coastguard Worker ** The INSERT change remains in the changegroup. The values in the 11944*a3141fd3SAndroid Build Coastguard Worker ** INSERT change are modified as if the row was inserted by the 11945*a3141fd3SAndroid Build Coastguard Worker ** existing change and then updated according to the new change. 11946*a3141fd3SAndroid Build Coastguard Worker ** <tr><td>INSERT <td>DELETE <td> 11947*a3141fd3SAndroid Build Coastguard Worker ** The existing INSERT is removed from the changegroup. The DELETE is 11948*a3141fd3SAndroid Build Coastguard Worker ** not added. 11949*a3141fd3SAndroid Build Coastguard Worker ** <tr><td>UPDATE <td>INSERT <td> 11950*a3141fd3SAndroid Build Coastguard Worker ** The new change is ignored. This case does not occur if the new 11951*a3141fd3SAndroid Build Coastguard Worker ** changeset was recorded immediately after the changesets already 11952*a3141fd3SAndroid Build Coastguard Worker ** added to the changegroup. 11953*a3141fd3SAndroid Build Coastguard Worker ** <tr><td>UPDATE <td>UPDATE <td> 11954*a3141fd3SAndroid Build Coastguard Worker ** The existing UPDATE remains within the changegroup. It is amended 11955*a3141fd3SAndroid Build Coastguard Worker ** so that the accompanying values are as if the row was updated once 11956*a3141fd3SAndroid Build Coastguard Worker ** by the existing change and then again by the new change. 11957*a3141fd3SAndroid Build Coastguard Worker ** <tr><td>UPDATE <td>DELETE <td> 11958*a3141fd3SAndroid Build Coastguard Worker ** The existing UPDATE is replaced by the new DELETE within the 11959*a3141fd3SAndroid Build Coastguard Worker ** changegroup. 11960*a3141fd3SAndroid Build Coastguard Worker ** <tr><td>DELETE <td>INSERT <td> 11961*a3141fd3SAndroid Build Coastguard Worker ** If one or more of the column values in the row inserted by the 11962*a3141fd3SAndroid Build Coastguard Worker ** new change differ from those in the row deleted by the existing 11963*a3141fd3SAndroid Build Coastguard Worker ** change, the existing DELETE is replaced by an UPDATE within the 11964*a3141fd3SAndroid Build Coastguard Worker ** changegroup. Otherwise, if the inserted row is exactly the same 11965*a3141fd3SAndroid Build Coastguard Worker ** as the deleted row, the existing DELETE is simply discarded. 11966*a3141fd3SAndroid Build Coastguard Worker ** <tr><td>DELETE <td>UPDATE <td> 11967*a3141fd3SAndroid Build Coastguard Worker ** The new change is ignored. This case does not occur if the new 11968*a3141fd3SAndroid Build Coastguard Worker ** changeset was recorded immediately after the changesets already 11969*a3141fd3SAndroid Build Coastguard Worker ** added to the changegroup. 11970*a3141fd3SAndroid Build Coastguard Worker ** <tr><td>DELETE <td>DELETE <td> 11971*a3141fd3SAndroid Build Coastguard Worker ** The new change is ignored. This case does not occur if the new 11972*a3141fd3SAndroid Build Coastguard Worker ** changeset was recorded immediately after the changesets already 11973*a3141fd3SAndroid Build Coastguard Worker ** added to the changegroup. 11974*a3141fd3SAndroid Build Coastguard Worker ** </table> 11975*a3141fd3SAndroid Build Coastguard Worker ** 11976*a3141fd3SAndroid Build Coastguard Worker ** If the new changeset contains changes to a table that is already present 11977*a3141fd3SAndroid Build Coastguard Worker ** in the changegroup, then the number of columns and the position of the 11978*a3141fd3SAndroid Build Coastguard Worker ** primary key columns for the table must be consistent. If this is not the 11979*a3141fd3SAndroid Build Coastguard Worker ** case, this function fails with SQLITE_SCHEMA. Except, if the changegroup 11980*a3141fd3SAndroid Build Coastguard Worker ** object has been configured with a database schema using the 11981*a3141fd3SAndroid Build Coastguard Worker ** sqlite3changegroup_schema() API, then it is possible to combine changesets 11982*a3141fd3SAndroid Build Coastguard Worker ** with different numbers of columns for a single table, provided that 11983*a3141fd3SAndroid Build Coastguard Worker ** they are otherwise compatible. 11984*a3141fd3SAndroid Build Coastguard Worker ** 11985*a3141fd3SAndroid Build Coastguard Worker ** If the input changeset appears to be corrupt and the corruption is 11986*a3141fd3SAndroid Build Coastguard Worker ** detected, SQLITE_CORRUPT is returned. Or, if an out-of-memory condition 11987*a3141fd3SAndroid Build Coastguard Worker ** occurs during processing, this function returns SQLITE_NOMEM. 11988*a3141fd3SAndroid Build Coastguard Worker ** 11989*a3141fd3SAndroid Build Coastguard Worker ** In all cases, if an error occurs the state of the final contents of the 11990*a3141fd3SAndroid Build Coastguard Worker ** changegroup is undefined. If no error occurs, SQLITE_OK is returned. 11991*a3141fd3SAndroid Build Coastguard Worker */ 11992*a3141fd3SAndroid Build Coastguard Worker SQLITE_API int sqlite3changegroup_add(sqlite3_changegroup*, int nData, void *pData); 11993*a3141fd3SAndroid Build Coastguard Worker 11994*a3141fd3SAndroid Build Coastguard Worker /* 11995*a3141fd3SAndroid Build Coastguard Worker ** CAPI3REF: Obtain A Composite Changeset From A Changegroup 11996*a3141fd3SAndroid Build Coastguard Worker ** METHOD: sqlite3_changegroup 11997*a3141fd3SAndroid Build Coastguard Worker ** 11998*a3141fd3SAndroid Build Coastguard Worker ** Obtain a buffer containing a changeset (or patchset) representing the 11999*a3141fd3SAndroid Build Coastguard Worker ** current contents of the changegroup. If the inputs to the changegroup 12000*a3141fd3SAndroid Build Coastguard Worker ** were themselves changesets, the output is a changeset. Or, if the 12001*a3141fd3SAndroid Build Coastguard Worker ** inputs were patchsets, the output is also a patchset. 12002*a3141fd3SAndroid Build Coastguard Worker ** 12003*a3141fd3SAndroid Build Coastguard Worker ** As with the output of the sqlite3session_changeset() and 12004*a3141fd3SAndroid Build Coastguard Worker ** sqlite3session_patchset() functions, all changes related to a single 12005*a3141fd3SAndroid Build Coastguard Worker ** table are grouped together in the output of this function. Tables appear 12006*a3141fd3SAndroid Build Coastguard Worker ** in the same order as for the very first changeset added to the changegroup. 12007*a3141fd3SAndroid Build Coastguard Worker ** If the second or subsequent changesets added to the changegroup contain 12008*a3141fd3SAndroid Build Coastguard Worker ** changes for tables that do not appear in the first changeset, they are 12009*a3141fd3SAndroid Build Coastguard Worker ** appended onto the end of the output changeset, again in the order in 12010*a3141fd3SAndroid Build Coastguard Worker ** which they are first encountered. 12011*a3141fd3SAndroid Build Coastguard Worker ** 12012*a3141fd3SAndroid Build Coastguard Worker ** If an error occurs, an SQLite error code is returned and the output 12013*a3141fd3SAndroid Build Coastguard Worker ** variables (*pnData) and (*ppData) are set to 0. Otherwise, SQLITE_OK 12014*a3141fd3SAndroid Build Coastguard Worker ** is returned and the output variables are set to the size of and a 12015*a3141fd3SAndroid Build Coastguard Worker ** pointer to the output buffer, respectively. In this case it is the 12016*a3141fd3SAndroid Build Coastguard Worker ** responsibility of the caller to eventually free the buffer using a 12017*a3141fd3SAndroid Build Coastguard Worker ** call to sqlite3_free(). 12018*a3141fd3SAndroid Build Coastguard Worker */ 12019*a3141fd3SAndroid Build Coastguard Worker SQLITE_API int sqlite3changegroup_output( 12020*a3141fd3SAndroid Build Coastguard Worker sqlite3_changegroup*, 12021*a3141fd3SAndroid Build Coastguard Worker int *pnData, /* OUT: Size of output buffer in bytes */ 12022*a3141fd3SAndroid Build Coastguard Worker void **ppData /* OUT: Pointer to output buffer */ 12023*a3141fd3SAndroid Build Coastguard Worker ); 12024*a3141fd3SAndroid Build Coastguard Worker 12025*a3141fd3SAndroid Build Coastguard Worker /* 12026*a3141fd3SAndroid Build Coastguard Worker ** CAPI3REF: Delete A Changegroup Object 12027*a3141fd3SAndroid Build Coastguard Worker ** DESTRUCTOR: sqlite3_changegroup 12028*a3141fd3SAndroid Build Coastguard Worker */ 12029*a3141fd3SAndroid Build Coastguard Worker SQLITE_API void sqlite3changegroup_delete(sqlite3_changegroup*); 12030*a3141fd3SAndroid Build Coastguard Worker 12031*a3141fd3SAndroid Build Coastguard Worker /* 12032*a3141fd3SAndroid Build Coastguard Worker ** CAPI3REF: Apply A Changeset To A Database 12033*a3141fd3SAndroid Build Coastguard Worker ** 12034*a3141fd3SAndroid Build Coastguard Worker ** Apply a changeset or patchset to a database. These functions attempt to 12035*a3141fd3SAndroid Build Coastguard Worker ** update the "main" database attached to handle db with the changes found in 12036*a3141fd3SAndroid Build Coastguard Worker ** the changeset passed via the second and third arguments. 12037*a3141fd3SAndroid Build Coastguard Worker ** 12038*a3141fd3SAndroid Build Coastguard Worker ** The fourth argument (xFilter) passed to these functions is the "filter 12039*a3141fd3SAndroid Build Coastguard Worker ** callback". If it is not NULL, then for each table affected by at least one 12040*a3141fd3SAndroid Build Coastguard Worker ** change in the changeset, the filter callback is invoked with 12041*a3141fd3SAndroid Build Coastguard Worker ** the table name as the second argument, and a copy of the context pointer 12042*a3141fd3SAndroid Build Coastguard Worker ** passed as the sixth argument as the first. If the "filter callback" 12043*a3141fd3SAndroid Build Coastguard Worker ** returns zero, then no attempt is made to apply any changes to the table. 12044*a3141fd3SAndroid Build Coastguard Worker ** Otherwise, if the return value is non-zero or the xFilter argument to 12045*a3141fd3SAndroid Build Coastguard Worker ** is NULL, all changes related to the table are attempted. 12046*a3141fd3SAndroid Build Coastguard Worker ** 12047*a3141fd3SAndroid Build Coastguard Worker ** For each table that is not excluded by the filter callback, this function 12048*a3141fd3SAndroid Build Coastguard Worker ** tests that the target database contains a compatible table. A table is 12049*a3141fd3SAndroid Build Coastguard Worker ** considered compatible if all of the following are true: 12050*a3141fd3SAndroid Build Coastguard Worker ** 12051*a3141fd3SAndroid Build Coastguard Worker ** <ul> 12052*a3141fd3SAndroid Build Coastguard Worker ** <li> The table has the same name as the name recorded in the 12053*a3141fd3SAndroid Build Coastguard Worker ** changeset, and 12054*a3141fd3SAndroid Build Coastguard Worker ** <li> The table has at least as many columns as recorded in the 12055*a3141fd3SAndroid Build Coastguard Worker ** changeset, and 12056*a3141fd3SAndroid Build Coastguard Worker ** <li> The table has primary key columns in the same position as 12057*a3141fd3SAndroid Build Coastguard Worker ** recorded in the changeset. 12058*a3141fd3SAndroid Build Coastguard Worker ** </ul> 12059*a3141fd3SAndroid Build Coastguard Worker ** 12060*a3141fd3SAndroid Build Coastguard Worker ** If there is no compatible table, it is not an error, but none of the 12061*a3141fd3SAndroid Build Coastguard Worker ** changes associated with the table are applied. A warning message is issued 12062*a3141fd3SAndroid Build Coastguard Worker ** via the sqlite3_log() mechanism with the error code SQLITE_SCHEMA. At most 12063*a3141fd3SAndroid Build Coastguard Worker ** one such warning is issued for each table in the changeset. 12064*a3141fd3SAndroid Build Coastguard Worker ** 12065*a3141fd3SAndroid Build Coastguard Worker ** For each change for which there is a compatible table, an attempt is made 12066*a3141fd3SAndroid Build Coastguard Worker ** to modify the table contents according to the UPDATE, INSERT or DELETE 12067*a3141fd3SAndroid Build Coastguard Worker ** change. If a change cannot be applied cleanly, the conflict handler 12068*a3141fd3SAndroid Build Coastguard Worker ** function passed as the fifth argument to sqlite3changeset_apply() may be 12069*a3141fd3SAndroid Build Coastguard Worker ** invoked. A description of exactly when the conflict handler is invoked for 12070*a3141fd3SAndroid Build Coastguard Worker ** each type of change is below. 12071*a3141fd3SAndroid Build Coastguard Worker ** 12072*a3141fd3SAndroid Build Coastguard Worker ** Unlike the xFilter argument, xConflict may not be passed NULL. The results 12073*a3141fd3SAndroid Build Coastguard Worker ** of passing anything other than a valid function pointer as the xConflict 12074*a3141fd3SAndroid Build Coastguard Worker ** argument are undefined. 12075*a3141fd3SAndroid Build Coastguard Worker ** 12076*a3141fd3SAndroid Build Coastguard Worker ** Each time the conflict handler function is invoked, it must return one 12077*a3141fd3SAndroid Build Coastguard Worker ** of [SQLITE_CHANGESET_OMIT], [SQLITE_CHANGESET_ABORT] or 12078*a3141fd3SAndroid Build Coastguard Worker ** [SQLITE_CHANGESET_REPLACE]. SQLITE_CHANGESET_REPLACE may only be returned 12079*a3141fd3SAndroid Build Coastguard Worker ** if the second argument passed to the conflict handler is either 12080*a3141fd3SAndroid Build Coastguard Worker ** SQLITE_CHANGESET_DATA or SQLITE_CHANGESET_CONFLICT. If the conflict-handler 12081*a3141fd3SAndroid Build Coastguard Worker ** returns an illegal value, any changes already made are rolled back and 12082*a3141fd3SAndroid Build Coastguard Worker ** the call to sqlite3changeset_apply() returns SQLITE_MISUSE. Different 12083*a3141fd3SAndroid Build Coastguard Worker ** actions are taken by sqlite3changeset_apply() depending on the value 12084*a3141fd3SAndroid Build Coastguard Worker ** returned by each invocation of the conflict-handler function. Refer to 12085*a3141fd3SAndroid Build Coastguard Worker ** the documentation for the three 12086*a3141fd3SAndroid Build Coastguard Worker ** [SQLITE_CHANGESET_OMIT|available return values] for details. 12087*a3141fd3SAndroid Build Coastguard Worker ** 12088*a3141fd3SAndroid Build Coastguard Worker ** <dl> 12089*a3141fd3SAndroid Build Coastguard Worker ** <dt>DELETE Changes<dd> 12090*a3141fd3SAndroid Build Coastguard Worker ** For each DELETE change, the function checks if the target database 12091*a3141fd3SAndroid Build Coastguard Worker ** contains a row with the same primary key value (or values) as the 12092*a3141fd3SAndroid Build Coastguard Worker ** original row values stored in the changeset. If it does, and the values 12093*a3141fd3SAndroid Build Coastguard Worker ** stored in all non-primary key columns also match the values stored in 12094*a3141fd3SAndroid Build Coastguard Worker ** the changeset the row is deleted from the target database. 12095*a3141fd3SAndroid Build Coastguard Worker ** 12096*a3141fd3SAndroid Build Coastguard Worker ** If a row with matching primary key values is found, but one or more of 12097*a3141fd3SAndroid Build Coastguard Worker ** the non-primary key fields contains a value different from the original 12098*a3141fd3SAndroid Build Coastguard Worker ** row value stored in the changeset, the conflict-handler function is 12099*a3141fd3SAndroid Build Coastguard Worker ** invoked with [SQLITE_CHANGESET_DATA] as the second argument. If the 12100*a3141fd3SAndroid Build Coastguard Worker ** database table has more columns than are recorded in the changeset, 12101*a3141fd3SAndroid Build Coastguard Worker ** only the values of those non-primary key fields are compared against 12102*a3141fd3SAndroid Build Coastguard Worker ** the current database contents - any trailing database table columns 12103*a3141fd3SAndroid Build Coastguard Worker ** are ignored. 12104*a3141fd3SAndroid Build Coastguard Worker ** 12105*a3141fd3SAndroid Build Coastguard Worker ** If no row with matching primary key values is found in the database, 12106*a3141fd3SAndroid Build Coastguard Worker ** the conflict-handler function is invoked with [SQLITE_CHANGESET_NOTFOUND] 12107*a3141fd3SAndroid Build Coastguard Worker ** passed as the second argument. 12108*a3141fd3SAndroid Build Coastguard Worker ** 12109*a3141fd3SAndroid Build Coastguard Worker ** If the DELETE operation is attempted, but SQLite returns SQLITE_CONSTRAINT 12110*a3141fd3SAndroid Build Coastguard Worker ** (which can only happen if a foreign key constraint is violated), the 12111*a3141fd3SAndroid Build Coastguard Worker ** conflict-handler function is invoked with [SQLITE_CHANGESET_CONSTRAINT] 12112*a3141fd3SAndroid Build Coastguard Worker ** passed as the second argument. This includes the case where the DELETE 12113*a3141fd3SAndroid Build Coastguard Worker ** operation is attempted because an earlier call to the conflict handler 12114*a3141fd3SAndroid Build Coastguard Worker ** function returned [SQLITE_CHANGESET_REPLACE]. 12115*a3141fd3SAndroid Build Coastguard Worker ** 12116*a3141fd3SAndroid Build Coastguard Worker ** <dt>INSERT Changes<dd> 12117*a3141fd3SAndroid Build Coastguard Worker ** For each INSERT change, an attempt is made to insert the new row into 12118*a3141fd3SAndroid Build Coastguard Worker ** the database. If the changeset row contains fewer fields than the 12119*a3141fd3SAndroid Build Coastguard Worker ** database table, the trailing fields are populated with their default 12120*a3141fd3SAndroid Build Coastguard Worker ** values. 12121*a3141fd3SAndroid Build Coastguard Worker ** 12122*a3141fd3SAndroid Build Coastguard Worker ** If the attempt to insert the row fails because the database already 12123*a3141fd3SAndroid Build Coastguard Worker ** contains a row with the same primary key values, the conflict handler 12124*a3141fd3SAndroid Build Coastguard Worker ** function is invoked with the second argument set to 12125*a3141fd3SAndroid Build Coastguard Worker ** [SQLITE_CHANGESET_CONFLICT]. 12126*a3141fd3SAndroid Build Coastguard Worker ** 12127*a3141fd3SAndroid Build Coastguard Worker ** If the attempt to insert the row fails because of some other constraint 12128*a3141fd3SAndroid Build Coastguard Worker ** violation (e.g. NOT NULL or UNIQUE), the conflict handler function is 12129*a3141fd3SAndroid Build Coastguard Worker ** invoked with the second argument set to [SQLITE_CHANGESET_CONSTRAINT]. 12130*a3141fd3SAndroid Build Coastguard Worker ** This includes the case where the INSERT operation is re-attempted because 12131*a3141fd3SAndroid Build Coastguard Worker ** an earlier call to the conflict handler function returned 12132*a3141fd3SAndroid Build Coastguard Worker ** [SQLITE_CHANGESET_REPLACE]. 12133*a3141fd3SAndroid Build Coastguard Worker ** 12134*a3141fd3SAndroid Build Coastguard Worker ** <dt>UPDATE Changes<dd> 12135*a3141fd3SAndroid Build Coastguard Worker ** For each UPDATE change, the function checks if the target database 12136*a3141fd3SAndroid Build Coastguard Worker ** contains a row with the same primary key value (or values) as the 12137*a3141fd3SAndroid Build Coastguard Worker ** original row values stored in the changeset. If it does, and the values 12138*a3141fd3SAndroid Build Coastguard Worker ** stored in all modified non-primary key columns also match the values 12139*a3141fd3SAndroid Build Coastguard Worker ** stored in the changeset the row is updated within the target database. 12140*a3141fd3SAndroid Build Coastguard Worker ** 12141*a3141fd3SAndroid Build Coastguard Worker ** If a row with matching primary key values is found, but one or more of 12142*a3141fd3SAndroid Build Coastguard Worker ** the modified non-primary key fields contains a value different from an 12143*a3141fd3SAndroid Build Coastguard Worker ** original row value stored in the changeset, the conflict-handler function 12144*a3141fd3SAndroid Build Coastguard Worker ** is invoked with [SQLITE_CHANGESET_DATA] as the second argument. Since 12145*a3141fd3SAndroid Build Coastguard Worker ** UPDATE changes only contain values for non-primary key fields that are 12146*a3141fd3SAndroid Build Coastguard Worker ** to be modified, only those fields need to match the original values to 12147*a3141fd3SAndroid Build Coastguard Worker ** avoid the SQLITE_CHANGESET_DATA conflict-handler callback. 12148*a3141fd3SAndroid Build Coastguard Worker ** 12149*a3141fd3SAndroid Build Coastguard Worker ** If no row with matching primary key values is found in the database, 12150*a3141fd3SAndroid Build Coastguard Worker ** the conflict-handler function is invoked with [SQLITE_CHANGESET_NOTFOUND] 12151*a3141fd3SAndroid Build Coastguard Worker ** passed as the second argument. 12152*a3141fd3SAndroid Build Coastguard Worker ** 12153*a3141fd3SAndroid Build Coastguard Worker ** If the UPDATE operation is attempted, but SQLite returns 12154*a3141fd3SAndroid Build Coastguard Worker ** SQLITE_CONSTRAINT, the conflict-handler function is invoked with 12155*a3141fd3SAndroid Build Coastguard Worker ** [SQLITE_CHANGESET_CONSTRAINT] passed as the second argument. 12156*a3141fd3SAndroid Build Coastguard Worker ** This includes the case where the UPDATE operation is attempted after 12157*a3141fd3SAndroid Build Coastguard Worker ** an earlier call to the conflict handler function returned 12158*a3141fd3SAndroid Build Coastguard Worker ** [SQLITE_CHANGESET_REPLACE]. 12159*a3141fd3SAndroid Build Coastguard Worker ** </dl> 12160*a3141fd3SAndroid Build Coastguard Worker ** 12161*a3141fd3SAndroid Build Coastguard Worker ** It is safe to execute SQL statements, including those that write to the 12162*a3141fd3SAndroid Build Coastguard Worker ** table that the callback related to, from within the xConflict callback. 12163*a3141fd3SAndroid Build Coastguard Worker ** This can be used to further customize the application's conflict 12164*a3141fd3SAndroid Build Coastguard Worker ** resolution strategy. 12165*a3141fd3SAndroid Build Coastguard Worker ** 12166*a3141fd3SAndroid Build Coastguard Worker ** All changes made by these functions are enclosed in a savepoint transaction. 12167*a3141fd3SAndroid Build Coastguard Worker ** If any other error (aside from a constraint failure when attempting to 12168*a3141fd3SAndroid Build Coastguard Worker ** write to the target database) occurs, then the savepoint transaction is 12169*a3141fd3SAndroid Build Coastguard Worker ** rolled back, restoring the target database to its original state, and an 12170*a3141fd3SAndroid Build Coastguard Worker ** SQLite error code returned. 12171*a3141fd3SAndroid Build Coastguard Worker ** 12172*a3141fd3SAndroid Build Coastguard Worker ** If the output parameters (ppRebase) and (pnRebase) are non-NULL and 12173*a3141fd3SAndroid Build Coastguard Worker ** the input is a changeset (not a patchset), then sqlite3changeset_apply_v2() 12174*a3141fd3SAndroid Build Coastguard Worker ** may set (*ppRebase) to point to a "rebase" that may be used with the 12175*a3141fd3SAndroid Build Coastguard Worker ** sqlite3_rebaser APIs buffer before returning. In this case (*pnRebase) 12176*a3141fd3SAndroid Build Coastguard Worker ** is set to the size of the buffer in bytes. It is the responsibility of the 12177*a3141fd3SAndroid Build Coastguard Worker ** caller to eventually free any such buffer using sqlite3_free(). The buffer 12178*a3141fd3SAndroid Build Coastguard Worker ** is only allocated and populated if one or more conflicts were encountered 12179*a3141fd3SAndroid Build Coastguard Worker ** while applying the patchset. See comments surrounding the sqlite3_rebaser 12180*a3141fd3SAndroid Build Coastguard Worker ** APIs for further details. 12181*a3141fd3SAndroid Build Coastguard Worker ** 12182*a3141fd3SAndroid Build Coastguard Worker ** The behavior of sqlite3changeset_apply_v2() and its streaming equivalent 12183*a3141fd3SAndroid Build Coastguard Worker ** may be modified by passing a combination of 12184*a3141fd3SAndroid Build Coastguard Worker ** [SQLITE_CHANGESETAPPLY_NOSAVEPOINT | supported flags] as the 9th parameter. 12185*a3141fd3SAndroid Build Coastguard Worker ** 12186*a3141fd3SAndroid Build Coastguard Worker ** Note that the sqlite3changeset_apply_v2() API is still <b>experimental</b> 12187*a3141fd3SAndroid Build Coastguard Worker ** and therefore subject to change. 12188*a3141fd3SAndroid Build Coastguard Worker */ 12189*a3141fd3SAndroid Build Coastguard Worker SQLITE_API int sqlite3changeset_apply( 12190*a3141fd3SAndroid Build Coastguard Worker sqlite3 *db, /* Apply change to "main" db of this handle */ 12191*a3141fd3SAndroid Build Coastguard Worker int nChangeset, /* Size of changeset in bytes */ 12192*a3141fd3SAndroid Build Coastguard Worker void *pChangeset, /* Changeset blob */ 12193*a3141fd3SAndroid Build Coastguard Worker int(*xFilter)( 12194*a3141fd3SAndroid Build Coastguard Worker void *pCtx, /* Copy of sixth arg to _apply() */ 12195*a3141fd3SAndroid Build Coastguard Worker const char *zTab /* Table name */ 12196*a3141fd3SAndroid Build Coastguard Worker ), 12197*a3141fd3SAndroid Build Coastguard Worker int(*xConflict)( 12198*a3141fd3SAndroid Build Coastguard Worker void *pCtx, /* Copy of sixth arg to _apply() */ 12199*a3141fd3SAndroid Build Coastguard Worker int eConflict, /* DATA, MISSING, CONFLICT, CONSTRAINT */ 12200*a3141fd3SAndroid Build Coastguard Worker sqlite3_changeset_iter *p /* Handle describing change and conflict */ 12201*a3141fd3SAndroid Build Coastguard Worker ), 12202*a3141fd3SAndroid Build Coastguard Worker void *pCtx /* First argument passed to xConflict */ 12203*a3141fd3SAndroid Build Coastguard Worker ); 12204*a3141fd3SAndroid Build Coastguard Worker SQLITE_API int sqlite3changeset_apply_v2( 12205*a3141fd3SAndroid Build Coastguard Worker sqlite3 *db, /* Apply change to "main" db of this handle */ 12206*a3141fd3SAndroid Build Coastguard Worker int nChangeset, /* Size of changeset in bytes */ 12207*a3141fd3SAndroid Build Coastguard Worker void *pChangeset, /* Changeset blob */ 12208*a3141fd3SAndroid Build Coastguard Worker int(*xFilter)( 12209*a3141fd3SAndroid Build Coastguard Worker void *pCtx, /* Copy of sixth arg to _apply() */ 12210*a3141fd3SAndroid Build Coastguard Worker const char *zTab /* Table name */ 12211*a3141fd3SAndroid Build Coastguard Worker ), 12212*a3141fd3SAndroid Build Coastguard Worker int(*xConflict)( 12213*a3141fd3SAndroid Build Coastguard Worker void *pCtx, /* Copy of sixth arg to _apply() */ 12214*a3141fd3SAndroid Build Coastguard Worker int eConflict, /* DATA, MISSING, CONFLICT, CONSTRAINT */ 12215*a3141fd3SAndroid Build Coastguard Worker sqlite3_changeset_iter *p /* Handle describing change and conflict */ 12216*a3141fd3SAndroid Build Coastguard Worker ), 12217*a3141fd3SAndroid Build Coastguard Worker void *pCtx, /* First argument passed to xConflict */ 12218*a3141fd3SAndroid Build Coastguard Worker void **ppRebase, int *pnRebase, /* OUT: Rebase data */ 12219*a3141fd3SAndroid Build Coastguard Worker int flags /* SESSION_CHANGESETAPPLY_* flags */ 12220*a3141fd3SAndroid Build Coastguard Worker ); 12221*a3141fd3SAndroid Build Coastguard Worker 12222*a3141fd3SAndroid Build Coastguard Worker /* 12223*a3141fd3SAndroid Build Coastguard Worker ** CAPI3REF: Flags for sqlite3changeset_apply_v2 12224*a3141fd3SAndroid Build Coastguard Worker ** 12225*a3141fd3SAndroid Build Coastguard Worker ** The following flags may passed via the 9th parameter to 12226*a3141fd3SAndroid Build Coastguard Worker ** [sqlite3changeset_apply_v2] and [sqlite3changeset_apply_v2_strm]: 12227*a3141fd3SAndroid Build Coastguard Worker ** 12228*a3141fd3SAndroid Build Coastguard Worker ** <dl> 12229*a3141fd3SAndroid Build Coastguard Worker ** <dt>SQLITE_CHANGESETAPPLY_NOSAVEPOINT <dd> 12230*a3141fd3SAndroid Build Coastguard Worker ** Usually, the sessions module encloses all operations performed by 12231*a3141fd3SAndroid Build Coastguard Worker ** a single call to apply_v2() or apply_v2_strm() in a [SAVEPOINT]. The 12232*a3141fd3SAndroid Build Coastguard Worker ** SAVEPOINT is committed if the changeset or patchset is successfully 12233*a3141fd3SAndroid Build Coastguard Worker ** applied, or rolled back if an error occurs. Specifying this flag 12234*a3141fd3SAndroid Build Coastguard Worker ** causes the sessions module to omit this savepoint. In this case, if the 12235*a3141fd3SAndroid Build Coastguard Worker ** caller has an open transaction or savepoint when apply_v2() is called, 12236*a3141fd3SAndroid Build Coastguard Worker ** it may revert the partially applied changeset by rolling it back. 12237*a3141fd3SAndroid Build Coastguard Worker ** 12238*a3141fd3SAndroid Build Coastguard Worker ** <dt>SQLITE_CHANGESETAPPLY_INVERT <dd> 12239*a3141fd3SAndroid Build Coastguard Worker ** Invert the changeset before applying it. This is equivalent to inverting 12240*a3141fd3SAndroid Build Coastguard Worker ** a changeset using sqlite3changeset_invert() before applying it. It is 12241*a3141fd3SAndroid Build Coastguard Worker ** an error to specify this flag with a patchset. 12242*a3141fd3SAndroid Build Coastguard Worker ** 12243*a3141fd3SAndroid Build Coastguard Worker ** <dt>SQLITE_CHANGESETAPPLY_IGNORENOOP <dd> 12244*a3141fd3SAndroid Build Coastguard Worker ** Do not invoke the conflict handler callback for any changes that 12245*a3141fd3SAndroid Build Coastguard Worker ** would not actually modify the database even if they were applied. 12246*a3141fd3SAndroid Build Coastguard Worker ** Specifically, this means that the conflict handler is not invoked 12247*a3141fd3SAndroid Build Coastguard Worker ** for: 12248*a3141fd3SAndroid Build Coastguard Worker ** <ul> 12249*a3141fd3SAndroid Build Coastguard Worker ** <li>a delete change if the row being deleted cannot be found, 12250*a3141fd3SAndroid Build Coastguard Worker ** <li>an update change if the modified fields are already set to 12251*a3141fd3SAndroid Build Coastguard Worker ** their new values in the conflicting row, or 12252*a3141fd3SAndroid Build Coastguard Worker ** <li>an insert change if all fields of the conflicting row match 12253*a3141fd3SAndroid Build Coastguard Worker ** the row being inserted. 12254*a3141fd3SAndroid Build Coastguard Worker ** </ul> 12255*a3141fd3SAndroid Build Coastguard Worker ** 12256*a3141fd3SAndroid Build Coastguard Worker ** <dt>SQLITE_CHANGESETAPPLY_FKNOACTION <dd> 12257*a3141fd3SAndroid Build Coastguard Worker ** If this flag it set, then all foreign key constraints in the target 12258*a3141fd3SAndroid Build Coastguard Worker ** database behave as if they were declared with "ON UPDATE NO ACTION ON 12259*a3141fd3SAndroid Build Coastguard Worker ** DELETE NO ACTION", even if they are actually CASCADE, RESTRICT, SET NULL 12260*a3141fd3SAndroid Build Coastguard Worker ** or SET DEFAULT. 12261*a3141fd3SAndroid Build Coastguard Worker */ 12262*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_CHANGESETAPPLY_NOSAVEPOINT 0x0001 12263*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_CHANGESETAPPLY_INVERT 0x0002 12264*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_CHANGESETAPPLY_IGNORENOOP 0x0004 12265*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_CHANGESETAPPLY_FKNOACTION 0x0008 12266*a3141fd3SAndroid Build Coastguard Worker 12267*a3141fd3SAndroid Build Coastguard Worker /* 12268*a3141fd3SAndroid Build Coastguard Worker ** CAPI3REF: Constants Passed To The Conflict Handler 12269*a3141fd3SAndroid Build Coastguard Worker ** 12270*a3141fd3SAndroid Build Coastguard Worker ** Values that may be passed as the second argument to a conflict-handler. 12271*a3141fd3SAndroid Build Coastguard Worker ** 12272*a3141fd3SAndroid Build Coastguard Worker ** <dl> 12273*a3141fd3SAndroid Build Coastguard Worker ** <dt>SQLITE_CHANGESET_DATA<dd> 12274*a3141fd3SAndroid Build Coastguard Worker ** The conflict handler is invoked with CHANGESET_DATA as the second argument 12275*a3141fd3SAndroid Build Coastguard Worker ** when processing a DELETE or UPDATE change if a row with the required 12276*a3141fd3SAndroid Build Coastguard Worker ** PRIMARY KEY fields is present in the database, but one or more other 12277*a3141fd3SAndroid Build Coastguard Worker ** (non primary-key) fields modified by the update do not contain the 12278*a3141fd3SAndroid Build Coastguard Worker ** expected "before" values. 12279*a3141fd3SAndroid Build Coastguard Worker ** 12280*a3141fd3SAndroid Build Coastguard Worker ** The conflicting row, in this case, is the database row with the matching 12281*a3141fd3SAndroid Build Coastguard Worker ** primary key. 12282*a3141fd3SAndroid Build Coastguard Worker ** 12283*a3141fd3SAndroid Build Coastguard Worker ** <dt>SQLITE_CHANGESET_NOTFOUND<dd> 12284*a3141fd3SAndroid Build Coastguard Worker ** The conflict handler is invoked with CHANGESET_NOTFOUND as the second 12285*a3141fd3SAndroid Build Coastguard Worker ** argument when processing a DELETE or UPDATE change if a row with the 12286*a3141fd3SAndroid Build Coastguard Worker ** required PRIMARY KEY fields is not present in the database. 12287*a3141fd3SAndroid Build Coastguard Worker ** 12288*a3141fd3SAndroid Build Coastguard Worker ** There is no conflicting row in this case. The results of invoking the 12289*a3141fd3SAndroid Build Coastguard Worker ** sqlite3changeset_conflict() API are undefined. 12290*a3141fd3SAndroid Build Coastguard Worker ** 12291*a3141fd3SAndroid Build Coastguard Worker ** <dt>SQLITE_CHANGESET_CONFLICT<dd> 12292*a3141fd3SAndroid Build Coastguard Worker ** CHANGESET_CONFLICT is passed as the second argument to the conflict 12293*a3141fd3SAndroid Build Coastguard Worker ** handler while processing an INSERT change if the operation would result 12294*a3141fd3SAndroid Build Coastguard Worker ** in duplicate primary key values. 12295*a3141fd3SAndroid Build Coastguard Worker ** 12296*a3141fd3SAndroid Build Coastguard Worker ** The conflicting row in this case is the database row with the matching 12297*a3141fd3SAndroid Build Coastguard Worker ** primary key. 12298*a3141fd3SAndroid Build Coastguard Worker ** 12299*a3141fd3SAndroid Build Coastguard Worker ** <dt>SQLITE_CHANGESET_FOREIGN_KEY<dd> 12300*a3141fd3SAndroid Build Coastguard Worker ** If foreign key handling is enabled, and applying a changeset leaves the 12301*a3141fd3SAndroid Build Coastguard Worker ** database in a state containing foreign key violations, the conflict 12302*a3141fd3SAndroid Build Coastguard Worker ** handler is invoked with CHANGESET_FOREIGN_KEY as the second argument 12303*a3141fd3SAndroid Build Coastguard Worker ** exactly once before the changeset is committed. If the conflict handler 12304*a3141fd3SAndroid Build Coastguard Worker ** returns CHANGESET_OMIT, the changes, including those that caused the 12305*a3141fd3SAndroid Build Coastguard Worker ** foreign key constraint violation, are committed. Or, if it returns 12306*a3141fd3SAndroid Build Coastguard Worker ** CHANGESET_ABORT, the changeset is rolled back. 12307*a3141fd3SAndroid Build Coastguard Worker ** 12308*a3141fd3SAndroid Build Coastguard Worker ** No current or conflicting row information is provided. The only function 12309*a3141fd3SAndroid Build Coastguard Worker ** it is possible to call on the supplied sqlite3_changeset_iter handle 12310*a3141fd3SAndroid Build Coastguard Worker ** is sqlite3changeset_fk_conflicts(). 12311*a3141fd3SAndroid Build Coastguard Worker ** 12312*a3141fd3SAndroid Build Coastguard Worker ** <dt>SQLITE_CHANGESET_CONSTRAINT<dd> 12313*a3141fd3SAndroid Build Coastguard Worker ** If any other constraint violation occurs while applying a change (i.e. 12314*a3141fd3SAndroid Build Coastguard Worker ** a UNIQUE, CHECK or NOT NULL constraint), the conflict handler is 12315*a3141fd3SAndroid Build Coastguard Worker ** invoked with CHANGESET_CONSTRAINT as the second argument. 12316*a3141fd3SAndroid Build Coastguard Worker ** 12317*a3141fd3SAndroid Build Coastguard Worker ** There is no conflicting row in this case. The results of invoking the 12318*a3141fd3SAndroid Build Coastguard Worker ** sqlite3changeset_conflict() API are undefined. 12319*a3141fd3SAndroid Build Coastguard Worker ** 12320*a3141fd3SAndroid Build Coastguard Worker ** </dl> 12321*a3141fd3SAndroid Build Coastguard Worker */ 12322*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_CHANGESET_DATA 1 12323*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_CHANGESET_NOTFOUND 2 12324*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_CHANGESET_CONFLICT 3 12325*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_CHANGESET_CONSTRAINT 4 12326*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_CHANGESET_FOREIGN_KEY 5 12327*a3141fd3SAndroid Build Coastguard Worker 12328*a3141fd3SAndroid Build Coastguard Worker /* 12329*a3141fd3SAndroid Build Coastguard Worker ** CAPI3REF: Constants Returned By The Conflict Handler 12330*a3141fd3SAndroid Build Coastguard Worker ** 12331*a3141fd3SAndroid Build Coastguard Worker ** A conflict handler callback must return one of the following three values. 12332*a3141fd3SAndroid Build Coastguard Worker ** 12333*a3141fd3SAndroid Build Coastguard Worker ** <dl> 12334*a3141fd3SAndroid Build Coastguard Worker ** <dt>SQLITE_CHANGESET_OMIT<dd> 12335*a3141fd3SAndroid Build Coastguard Worker ** If a conflict handler returns this value no special action is taken. The 12336*a3141fd3SAndroid Build Coastguard Worker ** change that caused the conflict is not applied. The session module 12337*a3141fd3SAndroid Build Coastguard Worker ** continues to the next change in the changeset. 12338*a3141fd3SAndroid Build Coastguard Worker ** 12339*a3141fd3SAndroid Build Coastguard Worker ** <dt>SQLITE_CHANGESET_REPLACE<dd> 12340*a3141fd3SAndroid Build Coastguard Worker ** This value may only be returned if the second argument to the conflict 12341*a3141fd3SAndroid Build Coastguard Worker ** handler was SQLITE_CHANGESET_DATA or SQLITE_CHANGESET_CONFLICT. If this 12342*a3141fd3SAndroid Build Coastguard Worker ** is not the case, any changes applied so far are rolled back and the 12343*a3141fd3SAndroid Build Coastguard Worker ** call to sqlite3changeset_apply() returns SQLITE_MISUSE. 12344*a3141fd3SAndroid Build Coastguard Worker ** 12345*a3141fd3SAndroid Build Coastguard Worker ** If CHANGESET_REPLACE is returned by an SQLITE_CHANGESET_DATA conflict 12346*a3141fd3SAndroid Build Coastguard Worker ** handler, then the conflicting row is either updated or deleted, depending 12347*a3141fd3SAndroid Build Coastguard Worker ** on the type of change. 12348*a3141fd3SAndroid Build Coastguard Worker ** 12349*a3141fd3SAndroid Build Coastguard Worker ** If CHANGESET_REPLACE is returned by an SQLITE_CHANGESET_CONFLICT conflict 12350*a3141fd3SAndroid Build Coastguard Worker ** handler, then the conflicting row is removed from the database and a 12351*a3141fd3SAndroid Build Coastguard Worker ** second attempt to apply the change is made. If this second attempt fails, 12352*a3141fd3SAndroid Build Coastguard Worker ** the original row is restored to the database before continuing. 12353*a3141fd3SAndroid Build Coastguard Worker ** 12354*a3141fd3SAndroid Build Coastguard Worker ** <dt>SQLITE_CHANGESET_ABORT<dd> 12355*a3141fd3SAndroid Build Coastguard Worker ** If this value is returned, any changes applied so far are rolled back 12356*a3141fd3SAndroid Build Coastguard Worker ** and the call to sqlite3changeset_apply() returns SQLITE_ABORT. 12357*a3141fd3SAndroid Build Coastguard Worker ** </dl> 12358*a3141fd3SAndroid Build Coastguard Worker */ 12359*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_CHANGESET_OMIT 0 12360*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_CHANGESET_REPLACE 1 12361*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_CHANGESET_ABORT 2 12362*a3141fd3SAndroid Build Coastguard Worker 12363*a3141fd3SAndroid Build Coastguard Worker /* 12364*a3141fd3SAndroid Build Coastguard Worker ** CAPI3REF: Rebasing changesets 12365*a3141fd3SAndroid Build Coastguard Worker ** EXPERIMENTAL 12366*a3141fd3SAndroid Build Coastguard Worker ** 12367*a3141fd3SAndroid Build Coastguard Worker ** Suppose there is a site hosting a database in state S0. And that 12368*a3141fd3SAndroid Build Coastguard Worker ** modifications are made that move that database to state S1 and a 12369*a3141fd3SAndroid Build Coastguard Worker ** changeset recorded (the "local" changeset). Then, a changeset based 12370*a3141fd3SAndroid Build Coastguard Worker ** on S0 is received from another site (the "remote" changeset) and 12371*a3141fd3SAndroid Build Coastguard Worker ** applied to the database. The database is then in state 12372*a3141fd3SAndroid Build Coastguard Worker ** (S1+"remote"), where the exact state depends on any conflict 12373*a3141fd3SAndroid Build Coastguard Worker ** resolution decisions (OMIT or REPLACE) made while applying "remote". 12374*a3141fd3SAndroid Build Coastguard Worker ** Rebasing a changeset is to update it to take those conflict 12375*a3141fd3SAndroid Build Coastguard Worker ** resolution decisions into account, so that the same conflicts 12376*a3141fd3SAndroid Build Coastguard Worker ** do not have to be resolved elsewhere in the network. 12377*a3141fd3SAndroid Build Coastguard Worker ** 12378*a3141fd3SAndroid Build Coastguard Worker ** For example, if both the local and remote changesets contain an 12379*a3141fd3SAndroid Build Coastguard Worker ** INSERT of the same key on "CREATE TABLE t1(a PRIMARY KEY, b)": 12380*a3141fd3SAndroid Build Coastguard Worker ** 12381*a3141fd3SAndroid Build Coastguard Worker ** local: INSERT INTO t1 VALUES(1, 'v1'); 12382*a3141fd3SAndroid Build Coastguard Worker ** remote: INSERT INTO t1 VALUES(1, 'v2'); 12383*a3141fd3SAndroid Build Coastguard Worker ** 12384*a3141fd3SAndroid Build Coastguard Worker ** and the conflict resolution is REPLACE, then the INSERT change is 12385*a3141fd3SAndroid Build Coastguard Worker ** removed from the local changeset (it was overridden). Or, if the 12386*a3141fd3SAndroid Build Coastguard Worker ** conflict resolution was "OMIT", then the local changeset is modified 12387*a3141fd3SAndroid Build Coastguard Worker ** to instead contain: 12388*a3141fd3SAndroid Build Coastguard Worker ** 12389*a3141fd3SAndroid Build Coastguard Worker ** UPDATE t1 SET b = 'v2' WHERE a=1; 12390*a3141fd3SAndroid Build Coastguard Worker ** 12391*a3141fd3SAndroid Build Coastguard Worker ** Changes within the local changeset are rebased as follows: 12392*a3141fd3SAndroid Build Coastguard Worker ** 12393*a3141fd3SAndroid Build Coastguard Worker ** <dl> 12394*a3141fd3SAndroid Build Coastguard Worker ** <dt>Local INSERT<dd> 12395*a3141fd3SAndroid Build Coastguard Worker ** This may only conflict with a remote INSERT. If the conflict 12396*a3141fd3SAndroid Build Coastguard Worker ** resolution was OMIT, then add an UPDATE change to the rebased 12397*a3141fd3SAndroid Build Coastguard Worker ** changeset. Or, if the conflict resolution was REPLACE, add 12398*a3141fd3SAndroid Build Coastguard Worker ** nothing to the rebased changeset. 12399*a3141fd3SAndroid Build Coastguard Worker ** 12400*a3141fd3SAndroid Build Coastguard Worker ** <dt>Local DELETE<dd> 12401*a3141fd3SAndroid Build Coastguard Worker ** This may conflict with a remote UPDATE or DELETE. In both cases the 12402*a3141fd3SAndroid Build Coastguard Worker ** only possible resolution is OMIT. If the remote operation was a 12403*a3141fd3SAndroid Build Coastguard Worker ** DELETE, then add no change to the rebased changeset. If the remote 12404*a3141fd3SAndroid Build Coastguard Worker ** operation was an UPDATE, then the old.* fields of change are updated 12405*a3141fd3SAndroid Build Coastguard Worker ** to reflect the new.* values in the UPDATE. 12406*a3141fd3SAndroid Build Coastguard Worker ** 12407*a3141fd3SAndroid Build Coastguard Worker ** <dt>Local UPDATE<dd> 12408*a3141fd3SAndroid Build Coastguard Worker ** This may conflict with a remote UPDATE or DELETE. If it conflicts 12409*a3141fd3SAndroid Build Coastguard Worker ** with a DELETE, and the conflict resolution was OMIT, then the update 12410*a3141fd3SAndroid Build Coastguard Worker ** is changed into an INSERT. Any undefined values in the new.* record 12411*a3141fd3SAndroid Build Coastguard Worker ** from the update change are filled in using the old.* values from 12412*a3141fd3SAndroid Build Coastguard Worker ** the conflicting DELETE. Or, if the conflict resolution was REPLACE, 12413*a3141fd3SAndroid Build Coastguard Worker ** the UPDATE change is simply omitted from the rebased changeset. 12414*a3141fd3SAndroid Build Coastguard Worker ** 12415*a3141fd3SAndroid Build Coastguard Worker ** If conflict is with a remote UPDATE and the resolution is OMIT, then 12416*a3141fd3SAndroid Build Coastguard Worker ** the old.* values are rebased using the new.* values in the remote 12417*a3141fd3SAndroid Build Coastguard Worker ** change. Or, if the resolution is REPLACE, then the change is copied 12418*a3141fd3SAndroid Build Coastguard Worker ** into the rebased changeset with updates to columns also updated by 12419*a3141fd3SAndroid Build Coastguard Worker ** the conflicting remote UPDATE removed. If this means no columns would 12420*a3141fd3SAndroid Build Coastguard Worker ** be updated, the change is omitted. 12421*a3141fd3SAndroid Build Coastguard Worker ** </dl> 12422*a3141fd3SAndroid Build Coastguard Worker ** 12423*a3141fd3SAndroid Build Coastguard Worker ** A local change may be rebased against multiple remote changes 12424*a3141fd3SAndroid Build Coastguard Worker ** simultaneously. If a single key is modified by multiple remote 12425*a3141fd3SAndroid Build Coastguard Worker ** changesets, they are combined as follows before the local changeset 12426*a3141fd3SAndroid Build Coastguard Worker ** is rebased: 12427*a3141fd3SAndroid Build Coastguard Worker ** 12428*a3141fd3SAndroid Build Coastguard Worker ** <ul> 12429*a3141fd3SAndroid Build Coastguard Worker ** <li> If there has been one or more REPLACE resolutions on a 12430*a3141fd3SAndroid Build Coastguard Worker ** key, it is rebased according to a REPLACE. 12431*a3141fd3SAndroid Build Coastguard Worker ** 12432*a3141fd3SAndroid Build Coastguard Worker ** <li> If there have been no REPLACE resolutions on a key, then 12433*a3141fd3SAndroid Build Coastguard Worker ** the local changeset is rebased according to the most recent 12434*a3141fd3SAndroid Build Coastguard Worker ** of the OMIT resolutions. 12435*a3141fd3SAndroid Build Coastguard Worker ** </ul> 12436*a3141fd3SAndroid Build Coastguard Worker ** 12437*a3141fd3SAndroid Build Coastguard Worker ** Note that conflict resolutions from multiple remote changesets are 12438*a3141fd3SAndroid Build Coastguard Worker ** combined on a per-field basis, not per-row. This means that in the 12439*a3141fd3SAndroid Build Coastguard Worker ** case of multiple remote UPDATE operations, some fields of a single 12440*a3141fd3SAndroid Build Coastguard Worker ** local change may be rebased for REPLACE while others are rebased for 12441*a3141fd3SAndroid Build Coastguard Worker ** OMIT. 12442*a3141fd3SAndroid Build Coastguard Worker ** 12443*a3141fd3SAndroid Build Coastguard Worker ** In order to rebase a local changeset, the remote changeset must first 12444*a3141fd3SAndroid Build Coastguard Worker ** be applied to the local database using sqlite3changeset_apply_v2() and 12445*a3141fd3SAndroid Build Coastguard Worker ** the buffer of rebase information captured. Then: 12446*a3141fd3SAndroid Build Coastguard Worker ** 12447*a3141fd3SAndroid Build Coastguard Worker ** <ol> 12448*a3141fd3SAndroid Build Coastguard Worker ** <li> An sqlite3_rebaser object is created by calling 12449*a3141fd3SAndroid Build Coastguard Worker ** sqlite3rebaser_create(). 12450*a3141fd3SAndroid Build Coastguard Worker ** <li> The new object is configured with the rebase buffer obtained from 12451*a3141fd3SAndroid Build Coastguard Worker ** sqlite3changeset_apply_v2() by calling sqlite3rebaser_configure(). 12452*a3141fd3SAndroid Build Coastguard Worker ** If the local changeset is to be rebased against multiple remote 12453*a3141fd3SAndroid Build Coastguard Worker ** changesets, then sqlite3rebaser_configure() should be called 12454*a3141fd3SAndroid Build Coastguard Worker ** multiple times, in the same order that the multiple 12455*a3141fd3SAndroid Build Coastguard Worker ** sqlite3changeset_apply_v2() calls were made. 12456*a3141fd3SAndroid Build Coastguard Worker ** <li> Each local changeset is rebased by calling sqlite3rebaser_rebase(). 12457*a3141fd3SAndroid Build Coastguard Worker ** <li> The sqlite3_rebaser object is deleted by calling 12458*a3141fd3SAndroid Build Coastguard Worker ** sqlite3rebaser_delete(). 12459*a3141fd3SAndroid Build Coastguard Worker ** </ol> 12460*a3141fd3SAndroid Build Coastguard Worker */ 12461*a3141fd3SAndroid Build Coastguard Worker typedef struct sqlite3_rebaser sqlite3_rebaser; 12462*a3141fd3SAndroid Build Coastguard Worker 12463*a3141fd3SAndroid Build Coastguard Worker /* 12464*a3141fd3SAndroid Build Coastguard Worker ** CAPI3REF: Create a changeset rebaser object. 12465*a3141fd3SAndroid Build Coastguard Worker ** EXPERIMENTAL 12466*a3141fd3SAndroid Build Coastguard Worker ** 12467*a3141fd3SAndroid Build Coastguard Worker ** Allocate a new changeset rebaser object. If successful, set (*ppNew) to 12468*a3141fd3SAndroid Build Coastguard Worker ** point to the new object and return SQLITE_OK. Otherwise, if an error 12469*a3141fd3SAndroid Build Coastguard Worker ** occurs, return an SQLite error code (e.g. SQLITE_NOMEM) and set (*ppNew) 12470*a3141fd3SAndroid Build Coastguard Worker ** to NULL. 12471*a3141fd3SAndroid Build Coastguard Worker */ 12472*a3141fd3SAndroid Build Coastguard Worker SQLITE_API int sqlite3rebaser_create(sqlite3_rebaser **ppNew); 12473*a3141fd3SAndroid Build Coastguard Worker 12474*a3141fd3SAndroid Build Coastguard Worker /* 12475*a3141fd3SAndroid Build Coastguard Worker ** CAPI3REF: Configure a changeset rebaser object. 12476*a3141fd3SAndroid Build Coastguard Worker ** EXPERIMENTAL 12477*a3141fd3SAndroid Build Coastguard Worker ** 12478*a3141fd3SAndroid Build Coastguard Worker ** Configure the changeset rebaser object to rebase changesets according 12479*a3141fd3SAndroid Build Coastguard Worker ** to the conflict resolutions described by buffer pRebase (size nRebase 12480*a3141fd3SAndroid Build Coastguard Worker ** bytes), which must have been obtained from a previous call to 12481*a3141fd3SAndroid Build Coastguard Worker ** sqlite3changeset_apply_v2(). 12482*a3141fd3SAndroid Build Coastguard Worker */ 12483*a3141fd3SAndroid Build Coastguard Worker SQLITE_API int sqlite3rebaser_configure( 12484*a3141fd3SAndroid Build Coastguard Worker sqlite3_rebaser*, 12485*a3141fd3SAndroid Build Coastguard Worker int nRebase, const void *pRebase 12486*a3141fd3SAndroid Build Coastguard Worker ); 12487*a3141fd3SAndroid Build Coastguard Worker 12488*a3141fd3SAndroid Build Coastguard Worker /* 12489*a3141fd3SAndroid Build Coastguard Worker ** CAPI3REF: Rebase a changeset 12490*a3141fd3SAndroid Build Coastguard Worker ** EXPERIMENTAL 12491*a3141fd3SAndroid Build Coastguard Worker ** 12492*a3141fd3SAndroid Build Coastguard Worker ** Argument pIn must point to a buffer containing a changeset nIn bytes 12493*a3141fd3SAndroid Build Coastguard Worker ** in size. This function allocates and populates a buffer with a copy 12494*a3141fd3SAndroid Build Coastguard Worker ** of the changeset rebased according to the configuration of the 12495*a3141fd3SAndroid Build Coastguard Worker ** rebaser object passed as the first argument. If successful, (*ppOut) 12496*a3141fd3SAndroid Build Coastguard Worker ** is set to point to the new buffer containing the rebased changeset and 12497*a3141fd3SAndroid Build Coastguard Worker ** (*pnOut) to its size in bytes and SQLITE_OK returned. It is the 12498*a3141fd3SAndroid Build Coastguard Worker ** responsibility of the caller to eventually free the new buffer using 12499*a3141fd3SAndroid Build Coastguard Worker ** sqlite3_free(). Otherwise, if an error occurs, (*ppOut) and (*pnOut) 12500*a3141fd3SAndroid Build Coastguard Worker ** are set to zero and an SQLite error code returned. 12501*a3141fd3SAndroid Build Coastguard Worker */ 12502*a3141fd3SAndroid Build Coastguard Worker SQLITE_API int sqlite3rebaser_rebase( 12503*a3141fd3SAndroid Build Coastguard Worker sqlite3_rebaser*, 12504*a3141fd3SAndroid Build Coastguard Worker int nIn, const void *pIn, 12505*a3141fd3SAndroid Build Coastguard Worker int *pnOut, void **ppOut 12506*a3141fd3SAndroid Build Coastguard Worker ); 12507*a3141fd3SAndroid Build Coastguard Worker 12508*a3141fd3SAndroid Build Coastguard Worker /* 12509*a3141fd3SAndroid Build Coastguard Worker ** CAPI3REF: Delete a changeset rebaser object. 12510*a3141fd3SAndroid Build Coastguard Worker ** EXPERIMENTAL 12511*a3141fd3SAndroid Build Coastguard Worker ** 12512*a3141fd3SAndroid Build Coastguard Worker ** Delete the changeset rebaser object and all associated resources. There 12513*a3141fd3SAndroid Build Coastguard Worker ** should be one call to this function for each successful invocation 12514*a3141fd3SAndroid Build Coastguard Worker ** of sqlite3rebaser_create(). 12515*a3141fd3SAndroid Build Coastguard Worker */ 12516*a3141fd3SAndroid Build Coastguard Worker SQLITE_API void sqlite3rebaser_delete(sqlite3_rebaser *p); 12517*a3141fd3SAndroid Build Coastguard Worker 12518*a3141fd3SAndroid Build Coastguard Worker /* 12519*a3141fd3SAndroid Build Coastguard Worker ** CAPI3REF: Streaming Versions of API functions. 12520*a3141fd3SAndroid Build Coastguard Worker ** 12521*a3141fd3SAndroid Build Coastguard Worker ** The six streaming API xxx_strm() functions serve similar purposes to the 12522*a3141fd3SAndroid Build Coastguard Worker ** corresponding non-streaming API functions: 12523*a3141fd3SAndroid Build Coastguard Worker ** 12524*a3141fd3SAndroid Build Coastguard Worker ** <table border=1 style="margin-left:8ex;margin-right:8ex"> 12525*a3141fd3SAndroid Build Coastguard Worker ** <tr><th>Streaming function<th>Non-streaming equivalent</th> 12526*a3141fd3SAndroid Build Coastguard Worker ** <tr><td>sqlite3changeset_apply_strm<td>[sqlite3changeset_apply] 12527*a3141fd3SAndroid Build Coastguard Worker ** <tr><td>sqlite3changeset_apply_strm_v2<td>[sqlite3changeset_apply_v2] 12528*a3141fd3SAndroid Build Coastguard Worker ** <tr><td>sqlite3changeset_concat_strm<td>[sqlite3changeset_concat] 12529*a3141fd3SAndroid Build Coastguard Worker ** <tr><td>sqlite3changeset_invert_strm<td>[sqlite3changeset_invert] 12530*a3141fd3SAndroid Build Coastguard Worker ** <tr><td>sqlite3changeset_start_strm<td>[sqlite3changeset_start] 12531*a3141fd3SAndroid Build Coastguard Worker ** <tr><td>sqlite3session_changeset_strm<td>[sqlite3session_changeset] 12532*a3141fd3SAndroid Build Coastguard Worker ** <tr><td>sqlite3session_patchset_strm<td>[sqlite3session_patchset] 12533*a3141fd3SAndroid Build Coastguard Worker ** </table> 12534*a3141fd3SAndroid Build Coastguard Worker ** 12535*a3141fd3SAndroid Build Coastguard Worker ** Non-streaming functions that accept changesets (or patchsets) as input 12536*a3141fd3SAndroid Build Coastguard Worker ** require that the entire changeset be stored in a single buffer in memory. 12537*a3141fd3SAndroid Build Coastguard Worker ** Similarly, those that return a changeset or patchset do so by returning 12538*a3141fd3SAndroid Build Coastguard Worker ** a pointer to a single large buffer allocated using sqlite3_malloc(). 12539*a3141fd3SAndroid Build Coastguard Worker ** Normally this is convenient. However, if an application running in a 12540*a3141fd3SAndroid Build Coastguard Worker ** low-memory environment is required to handle very large changesets, the 12541*a3141fd3SAndroid Build Coastguard Worker ** large contiguous memory allocations required can become onerous. 12542*a3141fd3SAndroid Build Coastguard Worker ** 12543*a3141fd3SAndroid Build Coastguard Worker ** In order to avoid this problem, instead of a single large buffer, input 12544*a3141fd3SAndroid Build Coastguard Worker ** is passed to a streaming API functions by way of a callback function that 12545*a3141fd3SAndroid Build Coastguard Worker ** the sessions module invokes to incrementally request input data as it is 12546*a3141fd3SAndroid Build Coastguard Worker ** required. In all cases, a pair of API function parameters such as 12547*a3141fd3SAndroid Build Coastguard Worker ** 12548*a3141fd3SAndroid Build Coastguard Worker ** <pre> 12549*a3141fd3SAndroid Build Coastguard Worker ** int nChangeset, 12550*a3141fd3SAndroid Build Coastguard Worker ** void *pChangeset, 12551*a3141fd3SAndroid Build Coastguard Worker ** </pre> 12552*a3141fd3SAndroid Build Coastguard Worker ** 12553*a3141fd3SAndroid Build Coastguard Worker ** Is replaced by: 12554*a3141fd3SAndroid Build Coastguard Worker ** 12555*a3141fd3SAndroid Build Coastguard Worker ** <pre> 12556*a3141fd3SAndroid Build Coastguard Worker ** int (*xInput)(void *pIn, void *pData, int *pnData), 12557*a3141fd3SAndroid Build Coastguard Worker ** void *pIn, 12558*a3141fd3SAndroid Build Coastguard Worker ** </pre> 12559*a3141fd3SAndroid Build Coastguard Worker ** 12560*a3141fd3SAndroid Build Coastguard Worker ** Each time the xInput callback is invoked by the sessions module, the first 12561*a3141fd3SAndroid Build Coastguard Worker ** argument passed is a copy of the supplied pIn context pointer. The second 12562*a3141fd3SAndroid Build Coastguard Worker ** argument, pData, points to a buffer (*pnData) bytes in size. Assuming no 12563*a3141fd3SAndroid Build Coastguard Worker ** error occurs the xInput method should copy up to (*pnData) bytes of data 12564*a3141fd3SAndroid Build Coastguard Worker ** into the buffer and set (*pnData) to the actual number of bytes copied 12565*a3141fd3SAndroid Build Coastguard Worker ** before returning SQLITE_OK. If the input is completely exhausted, (*pnData) 12566*a3141fd3SAndroid Build Coastguard Worker ** should be set to zero to indicate this. Or, if an error occurs, an SQLite 12567*a3141fd3SAndroid Build Coastguard Worker ** error code should be returned. In all cases, if an xInput callback returns 12568*a3141fd3SAndroid Build Coastguard Worker ** an error, all processing is abandoned and the streaming API function 12569*a3141fd3SAndroid Build Coastguard Worker ** returns a copy of the error code to the caller. 12570*a3141fd3SAndroid Build Coastguard Worker ** 12571*a3141fd3SAndroid Build Coastguard Worker ** In the case of sqlite3changeset_start_strm(), the xInput callback may be 12572*a3141fd3SAndroid Build Coastguard Worker ** invoked by the sessions module at any point during the lifetime of the 12573*a3141fd3SAndroid Build Coastguard Worker ** iterator. If such an xInput callback returns an error, the iterator enters 12574*a3141fd3SAndroid Build Coastguard Worker ** an error state, whereby all subsequent calls to iterator functions 12575*a3141fd3SAndroid Build Coastguard Worker ** immediately fail with the same error code as returned by xInput. 12576*a3141fd3SAndroid Build Coastguard Worker ** 12577*a3141fd3SAndroid Build Coastguard Worker ** Similarly, streaming API functions that return changesets (or patchsets) 12578*a3141fd3SAndroid Build Coastguard Worker ** return them in chunks by way of a callback function instead of via a 12579*a3141fd3SAndroid Build Coastguard Worker ** pointer to a single large buffer. In this case, a pair of parameters such 12580*a3141fd3SAndroid Build Coastguard Worker ** as: 12581*a3141fd3SAndroid Build Coastguard Worker ** 12582*a3141fd3SAndroid Build Coastguard Worker ** <pre> 12583*a3141fd3SAndroid Build Coastguard Worker ** int *pnChangeset, 12584*a3141fd3SAndroid Build Coastguard Worker ** void **ppChangeset, 12585*a3141fd3SAndroid Build Coastguard Worker ** </pre> 12586*a3141fd3SAndroid Build Coastguard Worker ** 12587*a3141fd3SAndroid Build Coastguard Worker ** Is replaced by: 12588*a3141fd3SAndroid Build Coastguard Worker ** 12589*a3141fd3SAndroid Build Coastguard Worker ** <pre> 12590*a3141fd3SAndroid Build Coastguard Worker ** int (*xOutput)(void *pOut, const void *pData, int nData), 12591*a3141fd3SAndroid Build Coastguard Worker ** void *pOut 12592*a3141fd3SAndroid Build Coastguard Worker ** </pre> 12593*a3141fd3SAndroid Build Coastguard Worker ** 12594*a3141fd3SAndroid Build Coastguard Worker ** The xOutput callback is invoked zero or more times to return data to 12595*a3141fd3SAndroid Build Coastguard Worker ** the application. The first parameter passed to each call is a copy of the 12596*a3141fd3SAndroid Build Coastguard Worker ** pOut pointer supplied by the application. The second parameter, pData, 12597*a3141fd3SAndroid Build Coastguard Worker ** points to a buffer nData bytes in size containing the chunk of output 12598*a3141fd3SAndroid Build Coastguard Worker ** data being returned. If the xOutput callback successfully processes the 12599*a3141fd3SAndroid Build Coastguard Worker ** supplied data, it should return SQLITE_OK to indicate success. Otherwise, 12600*a3141fd3SAndroid Build Coastguard Worker ** it should return some other SQLite error code. In this case processing 12601*a3141fd3SAndroid Build Coastguard Worker ** is immediately abandoned and the streaming API function returns a copy 12602*a3141fd3SAndroid Build Coastguard Worker ** of the xOutput error code to the application. 12603*a3141fd3SAndroid Build Coastguard Worker ** 12604*a3141fd3SAndroid Build Coastguard Worker ** The sessions module never invokes an xOutput callback with the third 12605*a3141fd3SAndroid Build Coastguard Worker ** parameter set to a value less than or equal to zero. Other than this, 12606*a3141fd3SAndroid Build Coastguard Worker ** no guarantees are made as to the size of the chunks of data returned. 12607*a3141fd3SAndroid Build Coastguard Worker */ 12608*a3141fd3SAndroid Build Coastguard Worker SQLITE_API int sqlite3changeset_apply_strm( 12609*a3141fd3SAndroid Build Coastguard Worker sqlite3 *db, /* Apply change to "main" db of this handle */ 12610*a3141fd3SAndroid Build Coastguard Worker int (*xInput)(void *pIn, void *pData, int *pnData), /* Input function */ 12611*a3141fd3SAndroid Build Coastguard Worker void *pIn, /* First arg for xInput */ 12612*a3141fd3SAndroid Build Coastguard Worker int(*xFilter)( 12613*a3141fd3SAndroid Build Coastguard Worker void *pCtx, /* Copy of sixth arg to _apply() */ 12614*a3141fd3SAndroid Build Coastguard Worker const char *zTab /* Table name */ 12615*a3141fd3SAndroid Build Coastguard Worker ), 12616*a3141fd3SAndroid Build Coastguard Worker int(*xConflict)( 12617*a3141fd3SAndroid Build Coastguard Worker void *pCtx, /* Copy of sixth arg to _apply() */ 12618*a3141fd3SAndroid Build Coastguard Worker int eConflict, /* DATA, MISSING, CONFLICT, CONSTRAINT */ 12619*a3141fd3SAndroid Build Coastguard Worker sqlite3_changeset_iter *p /* Handle describing change and conflict */ 12620*a3141fd3SAndroid Build Coastguard Worker ), 12621*a3141fd3SAndroid Build Coastguard Worker void *pCtx /* First argument passed to xConflict */ 12622*a3141fd3SAndroid Build Coastguard Worker ); 12623*a3141fd3SAndroid Build Coastguard Worker SQLITE_API int sqlite3changeset_apply_v2_strm( 12624*a3141fd3SAndroid Build Coastguard Worker sqlite3 *db, /* Apply change to "main" db of this handle */ 12625*a3141fd3SAndroid Build Coastguard Worker int (*xInput)(void *pIn, void *pData, int *pnData), /* Input function */ 12626*a3141fd3SAndroid Build Coastguard Worker void *pIn, /* First arg for xInput */ 12627*a3141fd3SAndroid Build Coastguard Worker int(*xFilter)( 12628*a3141fd3SAndroid Build Coastguard Worker void *pCtx, /* Copy of sixth arg to _apply() */ 12629*a3141fd3SAndroid Build Coastguard Worker const char *zTab /* Table name */ 12630*a3141fd3SAndroid Build Coastguard Worker ), 12631*a3141fd3SAndroid Build Coastguard Worker int(*xConflict)( 12632*a3141fd3SAndroid Build Coastguard Worker void *pCtx, /* Copy of sixth arg to _apply() */ 12633*a3141fd3SAndroid Build Coastguard Worker int eConflict, /* DATA, MISSING, CONFLICT, CONSTRAINT */ 12634*a3141fd3SAndroid Build Coastguard Worker sqlite3_changeset_iter *p /* Handle describing change and conflict */ 12635*a3141fd3SAndroid Build Coastguard Worker ), 12636*a3141fd3SAndroid Build Coastguard Worker void *pCtx, /* First argument passed to xConflict */ 12637*a3141fd3SAndroid Build Coastguard Worker void **ppRebase, int *pnRebase, 12638*a3141fd3SAndroid Build Coastguard Worker int flags 12639*a3141fd3SAndroid Build Coastguard Worker ); 12640*a3141fd3SAndroid Build Coastguard Worker SQLITE_API int sqlite3changeset_concat_strm( 12641*a3141fd3SAndroid Build Coastguard Worker int (*xInputA)(void *pIn, void *pData, int *pnData), 12642*a3141fd3SAndroid Build Coastguard Worker void *pInA, 12643*a3141fd3SAndroid Build Coastguard Worker int (*xInputB)(void *pIn, void *pData, int *pnData), 12644*a3141fd3SAndroid Build Coastguard Worker void *pInB, 12645*a3141fd3SAndroid Build Coastguard Worker int (*xOutput)(void *pOut, const void *pData, int nData), 12646*a3141fd3SAndroid Build Coastguard Worker void *pOut 12647*a3141fd3SAndroid Build Coastguard Worker ); 12648*a3141fd3SAndroid Build Coastguard Worker SQLITE_API int sqlite3changeset_invert_strm( 12649*a3141fd3SAndroid Build Coastguard Worker int (*xInput)(void *pIn, void *pData, int *pnData), 12650*a3141fd3SAndroid Build Coastguard Worker void *pIn, 12651*a3141fd3SAndroid Build Coastguard Worker int (*xOutput)(void *pOut, const void *pData, int nData), 12652*a3141fd3SAndroid Build Coastguard Worker void *pOut 12653*a3141fd3SAndroid Build Coastguard Worker ); 12654*a3141fd3SAndroid Build Coastguard Worker SQLITE_API int sqlite3changeset_start_strm( 12655*a3141fd3SAndroid Build Coastguard Worker sqlite3_changeset_iter **pp, 12656*a3141fd3SAndroid Build Coastguard Worker int (*xInput)(void *pIn, void *pData, int *pnData), 12657*a3141fd3SAndroid Build Coastguard Worker void *pIn 12658*a3141fd3SAndroid Build Coastguard Worker ); 12659*a3141fd3SAndroid Build Coastguard Worker SQLITE_API int sqlite3changeset_start_v2_strm( 12660*a3141fd3SAndroid Build Coastguard Worker sqlite3_changeset_iter **pp, 12661*a3141fd3SAndroid Build Coastguard Worker int (*xInput)(void *pIn, void *pData, int *pnData), 12662*a3141fd3SAndroid Build Coastguard Worker void *pIn, 12663*a3141fd3SAndroid Build Coastguard Worker int flags 12664*a3141fd3SAndroid Build Coastguard Worker ); 12665*a3141fd3SAndroid Build Coastguard Worker SQLITE_API int sqlite3session_changeset_strm( 12666*a3141fd3SAndroid Build Coastguard Worker sqlite3_session *pSession, 12667*a3141fd3SAndroid Build Coastguard Worker int (*xOutput)(void *pOut, const void *pData, int nData), 12668*a3141fd3SAndroid Build Coastguard Worker void *pOut 12669*a3141fd3SAndroid Build Coastguard Worker ); 12670*a3141fd3SAndroid Build Coastguard Worker SQLITE_API int sqlite3session_patchset_strm( 12671*a3141fd3SAndroid Build Coastguard Worker sqlite3_session *pSession, 12672*a3141fd3SAndroid Build Coastguard Worker int (*xOutput)(void *pOut, const void *pData, int nData), 12673*a3141fd3SAndroid Build Coastguard Worker void *pOut 12674*a3141fd3SAndroid Build Coastguard Worker ); 12675*a3141fd3SAndroid Build Coastguard Worker SQLITE_API int sqlite3changegroup_add_strm(sqlite3_changegroup*, 12676*a3141fd3SAndroid Build Coastguard Worker int (*xInput)(void *pIn, void *pData, int *pnData), 12677*a3141fd3SAndroid Build Coastguard Worker void *pIn 12678*a3141fd3SAndroid Build Coastguard Worker ); 12679*a3141fd3SAndroid Build Coastguard Worker SQLITE_API int sqlite3changegroup_output_strm(sqlite3_changegroup*, 12680*a3141fd3SAndroid Build Coastguard Worker int (*xOutput)(void *pOut, const void *pData, int nData), 12681*a3141fd3SAndroid Build Coastguard Worker void *pOut 12682*a3141fd3SAndroid Build Coastguard Worker ); 12683*a3141fd3SAndroid Build Coastguard Worker SQLITE_API int sqlite3rebaser_rebase_strm( 12684*a3141fd3SAndroid Build Coastguard Worker sqlite3_rebaser *pRebaser, 12685*a3141fd3SAndroid Build Coastguard Worker int (*xInput)(void *pIn, void *pData, int *pnData), 12686*a3141fd3SAndroid Build Coastguard Worker void *pIn, 12687*a3141fd3SAndroid Build Coastguard Worker int (*xOutput)(void *pOut, const void *pData, int nData), 12688*a3141fd3SAndroid Build Coastguard Worker void *pOut 12689*a3141fd3SAndroid Build Coastguard Worker ); 12690*a3141fd3SAndroid Build Coastguard Worker 12691*a3141fd3SAndroid Build Coastguard Worker /* 12692*a3141fd3SAndroid Build Coastguard Worker ** CAPI3REF: Configure global parameters 12693*a3141fd3SAndroid Build Coastguard Worker ** 12694*a3141fd3SAndroid Build Coastguard Worker ** The sqlite3session_config() interface is used to make global configuration 12695*a3141fd3SAndroid Build Coastguard Worker ** changes to the sessions module in order to tune it to the specific needs 12696*a3141fd3SAndroid Build Coastguard Worker ** of the application. 12697*a3141fd3SAndroid Build Coastguard Worker ** 12698*a3141fd3SAndroid Build Coastguard Worker ** The sqlite3session_config() interface is not threadsafe. If it is invoked 12699*a3141fd3SAndroid Build Coastguard Worker ** while any other thread is inside any other sessions method then the 12700*a3141fd3SAndroid Build Coastguard Worker ** results are undefined. Furthermore, if it is invoked after any sessions 12701*a3141fd3SAndroid Build Coastguard Worker ** related objects have been created, the results are also undefined. 12702*a3141fd3SAndroid Build Coastguard Worker ** 12703*a3141fd3SAndroid Build Coastguard Worker ** The first argument to the sqlite3session_config() function must be one 12704*a3141fd3SAndroid Build Coastguard Worker ** of the SQLITE_SESSION_CONFIG_XXX constants defined below. The 12705*a3141fd3SAndroid Build Coastguard Worker ** interpretation of the (void*) value passed as the second parameter and 12706*a3141fd3SAndroid Build Coastguard Worker ** the effect of calling this function depends on the value of the first 12707*a3141fd3SAndroid Build Coastguard Worker ** parameter. 12708*a3141fd3SAndroid Build Coastguard Worker ** 12709*a3141fd3SAndroid Build Coastguard Worker ** <dl> 12710*a3141fd3SAndroid Build Coastguard Worker ** <dt>SQLITE_SESSION_CONFIG_STRMSIZE<dd> 12711*a3141fd3SAndroid Build Coastguard Worker ** By default, the sessions module streaming interfaces attempt to input 12712*a3141fd3SAndroid Build Coastguard Worker ** and output data in approximately 1 KiB chunks. This operand may be used 12713*a3141fd3SAndroid Build Coastguard Worker ** to set and query the value of this configuration setting. The pointer 12714*a3141fd3SAndroid Build Coastguard Worker ** passed as the second argument must point to a value of type (int). 12715*a3141fd3SAndroid Build Coastguard Worker ** If this value is greater than 0, it is used as the new streaming data 12716*a3141fd3SAndroid Build Coastguard Worker ** chunk size for both input and output. Before returning, the (int) value 12717*a3141fd3SAndroid Build Coastguard Worker ** pointed to by pArg is set to the final value of the streaming interface 12718*a3141fd3SAndroid Build Coastguard Worker ** chunk size. 12719*a3141fd3SAndroid Build Coastguard Worker ** </dl> 12720*a3141fd3SAndroid Build Coastguard Worker ** 12721*a3141fd3SAndroid Build Coastguard Worker ** This function returns SQLITE_OK if successful, or an SQLite error code 12722*a3141fd3SAndroid Build Coastguard Worker ** otherwise. 12723*a3141fd3SAndroid Build Coastguard Worker */ 12724*a3141fd3SAndroid Build Coastguard Worker SQLITE_API int sqlite3session_config(int op, void *pArg); 12725*a3141fd3SAndroid Build Coastguard Worker 12726*a3141fd3SAndroid Build Coastguard Worker /* 12727*a3141fd3SAndroid Build Coastguard Worker ** CAPI3REF: Values for sqlite3session_config(). 12728*a3141fd3SAndroid Build Coastguard Worker */ 12729*a3141fd3SAndroid Build Coastguard Worker #define SQLITE_SESSION_CONFIG_STRMSIZE 1 12730*a3141fd3SAndroid Build Coastguard Worker 12731*a3141fd3SAndroid Build Coastguard Worker /* 12732*a3141fd3SAndroid Build Coastguard Worker ** Make sure we can call this stuff from C++. 12733*a3141fd3SAndroid Build Coastguard Worker */ 12734*a3141fd3SAndroid Build Coastguard Worker #ifdef __cplusplus 12735*a3141fd3SAndroid Build Coastguard Worker } 12736*a3141fd3SAndroid Build Coastguard Worker #endif 12737*a3141fd3SAndroid Build Coastguard Worker 12738*a3141fd3SAndroid Build Coastguard Worker #endif /* !defined(__SQLITESESSION_H_) && defined(SQLITE_ENABLE_SESSION) */ 12739*a3141fd3SAndroid Build Coastguard Worker 12740*a3141fd3SAndroid Build Coastguard Worker /******** End of sqlite3session.h *********/ 12741*a3141fd3SAndroid Build Coastguard Worker /******** Begin file fts5.h *********/ 12742*a3141fd3SAndroid Build Coastguard Worker /* 12743*a3141fd3SAndroid Build Coastguard Worker ** 2014 May 31 12744*a3141fd3SAndroid Build Coastguard Worker ** 12745*a3141fd3SAndroid Build Coastguard Worker ** The author disclaims copyright to this source code. In place of 12746*a3141fd3SAndroid Build Coastguard Worker ** a legal notice, here is a blessing: 12747*a3141fd3SAndroid Build Coastguard Worker ** 12748*a3141fd3SAndroid Build Coastguard Worker ** May you do good and not evil. 12749*a3141fd3SAndroid Build Coastguard Worker ** May you find forgiveness for yourself and forgive others. 12750*a3141fd3SAndroid Build Coastguard Worker ** May you share freely, never taking more than you give. 12751*a3141fd3SAndroid Build Coastguard Worker ** 12752*a3141fd3SAndroid Build Coastguard Worker ****************************************************************************** 12753*a3141fd3SAndroid Build Coastguard Worker ** 12754*a3141fd3SAndroid Build Coastguard Worker ** Interfaces to extend FTS5. Using the interfaces defined in this file, 12755*a3141fd3SAndroid Build Coastguard Worker ** FTS5 may be extended with: 12756*a3141fd3SAndroid Build Coastguard Worker ** 12757*a3141fd3SAndroid Build Coastguard Worker ** * custom tokenizers, and 12758*a3141fd3SAndroid Build Coastguard Worker ** * custom auxiliary functions. 12759*a3141fd3SAndroid Build Coastguard Worker */ 12760*a3141fd3SAndroid Build Coastguard Worker 12761*a3141fd3SAndroid Build Coastguard Worker 12762*a3141fd3SAndroid Build Coastguard Worker #ifndef _FTS5_H 12763*a3141fd3SAndroid Build Coastguard Worker #define _FTS5_H 12764*a3141fd3SAndroid Build Coastguard Worker 12765*a3141fd3SAndroid Build Coastguard Worker 12766*a3141fd3SAndroid Build Coastguard Worker #ifdef __cplusplus 12767*a3141fd3SAndroid Build Coastguard Worker extern "C" { 12768*a3141fd3SAndroid Build Coastguard Worker #endif 12769*a3141fd3SAndroid Build Coastguard Worker 12770*a3141fd3SAndroid Build Coastguard Worker /************************************************************************* 12771*a3141fd3SAndroid Build Coastguard Worker ** CUSTOM AUXILIARY FUNCTIONS 12772*a3141fd3SAndroid Build Coastguard Worker ** 12773*a3141fd3SAndroid Build Coastguard Worker ** Virtual table implementations may overload SQL functions by implementing 12774*a3141fd3SAndroid Build Coastguard Worker ** the sqlite3_module.xFindFunction() method. 12775*a3141fd3SAndroid Build Coastguard Worker */ 12776*a3141fd3SAndroid Build Coastguard Worker 12777*a3141fd3SAndroid Build Coastguard Worker typedef struct Fts5ExtensionApi Fts5ExtensionApi; 12778*a3141fd3SAndroid Build Coastguard Worker typedef struct Fts5Context Fts5Context; 12779*a3141fd3SAndroid Build Coastguard Worker typedef struct Fts5PhraseIter Fts5PhraseIter; 12780*a3141fd3SAndroid Build Coastguard Worker 12781*a3141fd3SAndroid Build Coastguard Worker typedef void (*fts5_extension_function)( 12782*a3141fd3SAndroid Build Coastguard Worker const Fts5ExtensionApi *pApi, /* API offered by current FTS version */ 12783*a3141fd3SAndroid Build Coastguard Worker Fts5Context *pFts, /* First arg to pass to pApi functions */ 12784*a3141fd3SAndroid Build Coastguard Worker sqlite3_context *pCtx, /* Context for returning result/error */ 12785*a3141fd3SAndroid Build Coastguard Worker int nVal, /* Number of values in apVal[] array */ 12786*a3141fd3SAndroid Build Coastguard Worker sqlite3_value **apVal /* Array of trailing arguments */ 12787*a3141fd3SAndroid Build Coastguard Worker ); 12788*a3141fd3SAndroid Build Coastguard Worker 12789*a3141fd3SAndroid Build Coastguard Worker struct Fts5PhraseIter { 12790*a3141fd3SAndroid Build Coastguard Worker const unsigned char *a; 12791*a3141fd3SAndroid Build Coastguard Worker const unsigned char *b; 12792*a3141fd3SAndroid Build Coastguard Worker }; 12793*a3141fd3SAndroid Build Coastguard Worker 12794*a3141fd3SAndroid Build Coastguard Worker /* 12795*a3141fd3SAndroid Build Coastguard Worker ** EXTENSION API FUNCTIONS 12796*a3141fd3SAndroid Build Coastguard Worker ** 12797*a3141fd3SAndroid Build Coastguard Worker ** xUserData(pFts): 12798*a3141fd3SAndroid Build Coastguard Worker ** Return a copy of the context pointer the extension function was 12799*a3141fd3SAndroid Build Coastguard Worker ** registered with. 12800*a3141fd3SAndroid Build Coastguard Worker ** 12801*a3141fd3SAndroid Build Coastguard Worker ** xColumnTotalSize(pFts, iCol, pnToken): 12802*a3141fd3SAndroid Build Coastguard Worker ** If parameter iCol is less than zero, set output variable *pnToken 12803*a3141fd3SAndroid Build Coastguard Worker ** to the total number of tokens in the FTS5 table. Or, if iCol is 12804*a3141fd3SAndroid Build Coastguard Worker ** non-negative but less than the number of columns in the table, return 12805*a3141fd3SAndroid Build Coastguard Worker ** the total number of tokens in column iCol, considering all rows in 12806*a3141fd3SAndroid Build Coastguard Worker ** the FTS5 table. 12807*a3141fd3SAndroid Build Coastguard Worker ** 12808*a3141fd3SAndroid Build Coastguard Worker ** If parameter iCol is greater than or equal to the number of columns 12809*a3141fd3SAndroid Build Coastguard Worker ** in the table, SQLITE_RANGE is returned. Or, if an error occurs (e.g. 12810*a3141fd3SAndroid Build Coastguard Worker ** an OOM condition or IO error), an appropriate SQLite error code is 12811*a3141fd3SAndroid Build Coastguard Worker ** returned. 12812*a3141fd3SAndroid Build Coastguard Worker ** 12813*a3141fd3SAndroid Build Coastguard Worker ** xColumnCount(pFts): 12814*a3141fd3SAndroid Build Coastguard Worker ** Return the number of columns in the table. 12815*a3141fd3SAndroid Build Coastguard Worker ** 12816*a3141fd3SAndroid Build Coastguard Worker ** xColumnSize(pFts, iCol, pnToken): 12817*a3141fd3SAndroid Build Coastguard Worker ** If parameter iCol is less than zero, set output variable *pnToken 12818*a3141fd3SAndroid Build Coastguard Worker ** to the total number of tokens in the current row. Or, if iCol is 12819*a3141fd3SAndroid Build Coastguard Worker ** non-negative but less than the number of columns in the table, set 12820*a3141fd3SAndroid Build Coastguard Worker ** *pnToken to the number of tokens in column iCol of the current row. 12821*a3141fd3SAndroid Build Coastguard Worker ** 12822*a3141fd3SAndroid Build Coastguard Worker ** If parameter iCol is greater than or equal to the number of columns 12823*a3141fd3SAndroid Build Coastguard Worker ** in the table, SQLITE_RANGE is returned. Or, if an error occurs (e.g. 12824*a3141fd3SAndroid Build Coastguard Worker ** an OOM condition or IO error), an appropriate SQLite error code is 12825*a3141fd3SAndroid Build Coastguard Worker ** returned. 12826*a3141fd3SAndroid Build Coastguard Worker ** 12827*a3141fd3SAndroid Build Coastguard Worker ** This function may be quite inefficient if used with an FTS5 table 12828*a3141fd3SAndroid Build Coastguard Worker ** created with the "columnsize=0" option. 12829*a3141fd3SAndroid Build Coastguard Worker ** 12830*a3141fd3SAndroid Build Coastguard Worker ** xColumnText: 12831*a3141fd3SAndroid Build Coastguard Worker ** This function attempts to retrieve the text of column iCol of the 12832*a3141fd3SAndroid Build Coastguard Worker ** current document. If successful, (*pz) is set to point to a buffer 12833*a3141fd3SAndroid Build Coastguard Worker ** containing the text in utf-8 encoding, (*pn) is set to the size in bytes 12834*a3141fd3SAndroid Build Coastguard Worker ** (not characters) of the buffer and SQLITE_OK is returned. Otherwise, 12835*a3141fd3SAndroid Build Coastguard Worker ** if an error occurs, an SQLite error code is returned and the final values 12836*a3141fd3SAndroid Build Coastguard Worker ** of (*pz) and (*pn) are undefined. 12837*a3141fd3SAndroid Build Coastguard Worker ** 12838*a3141fd3SAndroid Build Coastguard Worker ** xPhraseCount: 12839*a3141fd3SAndroid Build Coastguard Worker ** Returns the number of phrases in the current query expression. 12840*a3141fd3SAndroid Build Coastguard Worker ** 12841*a3141fd3SAndroid Build Coastguard Worker ** xPhraseSize: 12842*a3141fd3SAndroid Build Coastguard Worker ** Returns the number of tokens in phrase iPhrase of the query. Phrases 12843*a3141fd3SAndroid Build Coastguard Worker ** are numbered starting from zero. 12844*a3141fd3SAndroid Build Coastguard Worker ** 12845*a3141fd3SAndroid Build Coastguard Worker ** xInstCount: 12846*a3141fd3SAndroid Build Coastguard Worker ** Set *pnInst to the total number of occurrences of all phrases within 12847*a3141fd3SAndroid Build Coastguard Worker ** the query within the current row. Return SQLITE_OK if successful, or 12848*a3141fd3SAndroid Build Coastguard Worker ** an error code (i.e. SQLITE_NOMEM) if an error occurs. 12849*a3141fd3SAndroid Build Coastguard Worker ** 12850*a3141fd3SAndroid Build Coastguard Worker ** This API can be quite slow if used with an FTS5 table created with the 12851*a3141fd3SAndroid Build Coastguard Worker ** "detail=none" or "detail=column" option. If the FTS5 table is created 12852*a3141fd3SAndroid Build Coastguard Worker ** with either "detail=none" or "detail=column" and "content=" option 12853*a3141fd3SAndroid Build Coastguard Worker ** (i.e. if it is a contentless table), then this API always returns 0. 12854*a3141fd3SAndroid Build Coastguard Worker ** 12855*a3141fd3SAndroid Build Coastguard Worker ** xInst: 12856*a3141fd3SAndroid Build Coastguard Worker ** Query for the details of phrase match iIdx within the current row. 12857*a3141fd3SAndroid Build Coastguard Worker ** Phrase matches are numbered starting from zero, so the iIdx argument 12858*a3141fd3SAndroid Build Coastguard Worker ** should be greater than or equal to zero and smaller than the value 12859*a3141fd3SAndroid Build Coastguard Worker ** output by xInstCount(). 12860*a3141fd3SAndroid Build Coastguard Worker ** 12861*a3141fd3SAndroid Build Coastguard Worker ** Usually, output parameter *piPhrase is set to the phrase number, *piCol 12862*a3141fd3SAndroid Build Coastguard Worker ** to the column in which it occurs and *piOff the token offset of the 12863*a3141fd3SAndroid Build Coastguard Worker ** first token of the phrase. Returns SQLITE_OK if successful, or an error 12864*a3141fd3SAndroid Build Coastguard Worker ** code (i.e. SQLITE_NOMEM) if an error occurs. 12865*a3141fd3SAndroid Build Coastguard Worker ** 12866*a3141fd3SAndroid Build Coastguard Worker ** This API can be quite slow if used with an FTS5 table created with the 12867*a3141fd3SAndroid Build Coastguard Worker ** "detail=none" or "detail=column" option. 12868*a3141fd3SAndroid Build Coastguard Worker ** 12869*a3141fd3SAndroid Build Coastguard Worker ** xRowid: 12870*a3141fd3SAndroid Build Coastguard Worker ** Returns the rowid of the current row. 12871*a3141fd3SAndroid Build Coastguard Worker ** 12872*a3141fd3SAndroid Build Coastguard Worker ** xTokenize: 12873*a3141fd3SAndroid Build Coastguard Worker ** Tokenize text using the tokenizer belonging to the FTS5 table. 12874*a3141fd3SAndroid Build Coastguard Worker ** 12875*a3141fd3SAndroid Build Coastguard Worker ** xQueryPhrase(pFts5, iPhrase, pUserData, xCallback): 12876*a3141fd3SAndroid Build Coastguard Worker ** This API function is used to query the FTS table for phrase iPhrase 12877*a3141fd3SAndroid Build Coastguard Worker ** of the current query. Specifically, a query equivalent to: 12878*a3141fd3SAndroid Build Coastguard Worker ** 12879*a3141fd3SAndroid Build Coastguard Worker ** ... FROM ftstable WHERE ftstable MATCH $p ORDER BY rowid 12880*a3141fd3SAndroid Build Coastguard Worker ** 12881*a3141fd3SAndroid Build Coastguard Worker ** with $p set to a phrase equivalent to the phrase iPhrase of the 12882*a3141fd3SAndroid Build Coastguard Worker ** current query is executed. Any column filter that applies to 12883*a3141fd3SAndroid Build Coastguard Worker ** phrase iPhrase of the current query is included in $p. For each 12884*a3141fd3SAndroid Build Coastguard Worker ** row visited, the callback function passed as the fourth argument 12885*a3141fd3SAndroid Build Coastguard Worker ** is invoked. The context and API objects passed to the callback 12886*a3141fd3SAndroid Build Coastguard Worker ** function may be used to access the properties of each matched row. 12887*a3141fd3SAndroid Build Coastguard Worker ** Invoking Api.xUserData() returns a copy of the pointer passed as 12888*a3141fd3SAndroid Build Coastguard Worker ** the third argument to pUserData. 12889*a3141fd3SAndroid Build Coastguard Worker ** 12890*a3141fd3SAndroid Build Coastguard Worker ** If the callback function returns any value other than SQLITE_OK, the 12891*a3141fd3SAndroid Build Coastguard Worker ** query is abandoned and the xQueryPhrase function returns immediately. 12892*a3141fd3SAndroid Build Coastguard Worker ** If the returned value is SQLITE_DONE, xQueryPhrase returns SQLITE_OK. 12893*a3141fd3SAndroid Build Coastguard Worker ** Otherwise, the error code is propagated upwards. 12894*a3141fd3SAndroid Build Coastguard Worker ** 12895*a3141fd3SAndroid Build Coastguard Worker ** If the query runs to completion without incident, SQLITE_OK is returned. 12896*a3141fd3SAndroid Build Coastguard Worker ** Or, if some error occurs before the query completes or is aborted by 12897*a3141fd3SAndroid Build Coastguard Worker ** the callback, an SQLite error code is returned. 12898*a3141fd3SAndroid Build Coastguard Worker ** 12899*a3141fd3SAndroid Build Coastguard Worker ** 12900*a3141fd3SAndroid Build Coastguard Worker ** xSetAuxdata(pFts5, pAux, xDelete) 12901*a3141fd3SAndroid Build Coastguard Worker ** 12902*a3141fd3SAndroid Build Coastguard Worker ** Save the pointer passed as the second argument as the extension function's 12903*a3141fd3SAndroid Build Coastguard Worker ** "auxiliary data". The pointer may then be retrieved by the current or any 12904*a3141fd3SAndroid Build Coastguard Worker ** future invocation of the same fts5 extension function made as part of 12905*a3141fd3SAndroid Build Coastguard Worker ** the same MATCH query using the xGetAuxdata() API. 12906*a3141fd3SAndroid Build Coastguard Worker ** 12907*a3141fd3SAndroid Build Coastguard Worker ** Each extension function is allocated a single auxiliary data slot for 12908*a3141fd3SAndroid Build Coastguard Worker ** each FTS query (MATCH expression). If the extension function is invoked 12909*a3141fd3SAndroid Build Coastguard Worker ** more than once for a single FTS query, then all invocations share a 12910*a3141fd3SAndroid Build Coastguard Worker ** single auxiliary data context. 12911*a3141fd3SAndroid Build Coastguard Worker ** 12912*a3141fd3SAndroid Build Coastguard Worker ** If there is already an auxiliary data pointer when this function is 12913*a3141fd3SAndroid Build Coastguard Worker ** invoked, then it is replaced by the new pointer. If an xDelete callback 12914*a3141fd3SAndroid Build Coastguard Worker ** was specified along with the original pointer, it is invoked at this 12915*a3141fd3SAndroid Build Coastguard Worker ** point. 12916*a3141fd3SAndroid Build Coastguard Worker ** 12917*a3141fd3SAndroid Build Coastguard Worker ** The xDelete callback, if one is specified, is also invoked on the 12918*a3141fd3SAndroid Build Coastguard Worker ** auxiliary data pointer after the FTS5 query has finished. 12919*a3141fd3SAndroid Build Coastguard Worker ** 12920*a3141fd3SAndroid Build Coastguard Worker ** If an error (e.g. an OOM condition) occurs within this function, 12921*a3141fd3SAndroid Build Coastguard Worker ** the auxiliary data is set to NULL and an error code returned. If the 12922*a3141fd3SAndroid Build Coastguard Worker ** xDelete parameter was not NULL, it is invoked on the auxiliary data 12923*a3141fd3SAndroid Build Coastguard Worker ** pointer before returning. 12924*a3141fd3SAndroid Build Coastguard Worker ** 12925*a3141fd3SAndroid Build Coastguard Worker ** 12926*a3141fd3SAndroid Build Coastguard Worker ** xGetAuxdata(pFts5, bClear) 12927*a3141fd3SAndroid Build Coastguard Worker ** 12928*a3141fd3SAndroid Build Coastguard Worker ** Returns the current auxiliary data pointer for the fts5 extension 12929*a3141fd3SAndroid Build Coastguard Worker ** function. See the xSetAuxdata() method for details. 12930*a3141fd3SAndroid Build Coastguard Worker ** 12931*a3141fd3SAndroid Build Coastguard Worker ** If the bClear argument is non-zero, then the auxiliary data is cleared 12932*a3141fd3SAndroid Build Coastguard Worker ** (set to NULL) before this function returns. In this case the xDelete, 12933*a3141fd3SAndroid Build Coastguard Worker ** if any, is not invoked. 12934*a3141fd3SAndroid Build Coastguard Worker ** 12935*a3141fd3SAndroid Build Coastguard Worker ** 12936*a3141fd3SAndroid Build Coastguard Worker ** xRowCount(pFts5, pnRow) 12937*a3141fd3SAndroid Build Coastguard Worker ** 12938*a3141fd3SAndroid Build Coastguard Worker ** This function is used to retrieve the total number of rows in the table. 12939*a3141fd3SAndroid Build Coastguard Worker ** In other words, the same value that would be returned by: 12940*a3141fd3SAndroid Build Coastguard Worker ** 12941*a3141fd3SAndroid Build Coastguard Worker ** SELECT count(*) FROM ftstable; 12942*a3141fd3SAndroid Build Coastguard Worker ** 12943*a3141fd3SAndroid Build Coastguard Worker ** xPhraseFirst() 12944*a3141fd3SAndroid Build Coastguard Worker ** This function is used, along with type Fts5PhraseIter and the xPhraseNext 12945*a3141fd3SAndroid Build Coastguard Worker ** method, to iterate through all instances of a single query phrase within 12946*a3141fd3SAndroid Build Coastguard Worker ** the current row. This is the same information as is accessible via the 12947*a3141fd3SAndroid Build Coastguard Worker ** xInstCount/xInst APIs. While the xInstCount/xInst APIs are more convenient 12948*a3141fd3SAndroid Build Coastguard Worker ** to use, this API may be faster under some circumstances. To iterate 12949*a3141fd3SAndroid Build Coastguard Worker ** through instances of phrase iPhrase, use the following code: 12950*a3141fd3SAndroid Build Coastguard Worker ** 12951*a3141fd3SAndroid Build Coastguard Worker ** Fts5PhraseIter iter; 12952*a3141fd3SAndroid Build Coastguard Worker ** int iCol, iOff; 12953*a3141fd3SAndroid Build Coastguard Worker ** for(pApi->xPhraseFirst(pFts, iPhrase, &iter, &iCol, &iOff); 12954*a3141fd3SAndroid Build Coastguard Worker ** iCol>=0; 12955*a3141fd3SAndroid Build Coastguard Worker ** pApi->xPhraseNext(pFts, &iter, &iCol, &iOff) 12956*a3141fd3SAndroid Build Coastguard Worker ** ){ 12957*a3141fd3SAndroid Build Coastguard Worker ** // An instance of phrase iPhrase at offset iOff of column iCol 12958*a3141fd3SAndroid Build Coastguard Worker ** } 12959*a3141fd3SAndroid Build Coastguard Worker ** 12960*a3141fd3SAndroid Build Coastguard Worker ** The Fts5PhraseIter structure is defined above. Applications should not 12961*a3141fd3SAndroid Build Coastguard Worker ** modify this structure directly - it should only be used as shown above 12962*a3141fd3SAndroid Build Coastguard Worker ** with the xPhraseFirst() and xPhraseNext() API methods (and by 12963*a3141fd3SAndroid Build Coastguard Worker ** xPhraseFirstColumn() and xPhraseNextColumn() as illustrated below). 12964*a3141fd3SAndroid Build Coastguard Worker ** 12965*a3141fd3SAndroid Build Coastguard Worker ** This API can be quite slow if used with an FTS5 table created with the 12966*a3141fd3SAndroid Build Coastguard Worker ** "detail=none" or "detail=column" option. If the FTS5 table is created 12967*a3141fd3SAndroid Build Coastguard Worker ** with either "detail=none" or "detail=column" and "content=" option 12968*a3141fd3SAndroid Build Coastguard Worker ** (i.e. if it is a contentless table), then this API always iterates 12969*a3141fd3SAndroid Build Coastguard Worker ** through an empty set (all calls to xPhraseFirst() set iCol to -1). 12970*a3141fd3SAndroid Build Coastguard Worker ** 12971*a3141fd3SAndroid Build Coastguard Worker ** xPhraseNext() 12972*a3141fd3SAndroid Build Coastguard Worker ** See xPhraseFirst above. 12973*a3141fd3SAndroid Build Coastguard Worker ** 12974*a3141fd3SAndroid Build Coastguard Worker ** xPhraseFirstColumn() 12975*a3141fd3SAndroid Build Coastguard Worker ** This function and xPhraseNextColumn() are similar to the xPhraseFirst() 12976*a3141fd3SAndroid Build Coastguard Worker ** and xPhraseNext() APIs described above. The difference is that instead 12977*a3141fd3SAndroid Build Coastguard Worker ** of iterating through all instances of a phrase in the current row, these 12978*a3141fd3SAndroid Build Coastguard Worker ** APIs are used to iterate through the set of columns in the current row 12979*a3141fd3SAndroid Build Coastguard Worker ** that contain one or more instances of a specified phrase. For example: 12980*a3141fd3SAndroid Build Coastguard Worker ** 12981*a3141fd3SAndroid Build Coastguard Worker ** Fts5PhraseIter iter; 12982*a3141fd3SAndroid Build Coastguard Worker ** int iCol; 12983*a3141fd3SAndroid Build Coastguard Worker ** for(pApi->xPhraseFirstColumn(pFts, iPhrase, &iter, &iCol); 12984*a3141fd3SAndroid Build Coastguard Worker ** iCol>=0; 12985*a3141fd3SAndroid Build Coastguard Worker ** pApi->xPhraseNextColumn(pFts, &iter, &iCol) 12986*a3141fd3SAndroid Build Coastguard Worker ** ){ 12987*a3141fd3SAndroid Build Coastguard Worker ** // Column iCol contains at least one instance of phrase iPhrase 12988*a3141fd3SAndroid Build Coastguard Worker ** } 12989*a3141fd3SAndroid Build Coastguard Worker ** 12990*a3141fd3SAndroid Build Coastguard Worker ** This API can be quite slow if used with an FTS5 table created with the 12991*a3141fd3SAndroid Build Coastguard Worker ** "detail=none" option. If the FTS5 table is created with either 12992*a3141fd3SAndroid Build Coastguard Worker ** "detail=none" "content=" option (i.e. if it is a contentless table), 12993*a3141fd3SAndroid Build Coastguard Worker ** then this API always iterates through an empty set (all calls to 12994*a3141fd3SAndroid Build Coastguard Worker ** xPhraseFirstColumn() set iCol to -1). 12995*a3141fd3SAndroid Build Coastguard Worker ** 12996*a3141fd3SAndroid Build Coastguard Worker ** The information accessed using this API and its companion 12997*a3141fd3SAndroid Build Coastguard Worker ** xPhraseFirstColumn() may also be obtained using xPhraseFirst/xPhraseNext 12998*a3141fd3SAndroid Build Coastguard Worker ** (or xInst/xInstCount). The chief advantage of this API is that it is 12999*a3141fd3SAndroid Build Coastguard Worker ** significantly more efficient than those alternatives when used with 13000*a3141fd3SAndroid Build Coastguard Worker ** "detail=column" tables. 13001*a3141fd3SAndroid Build Coastguard Worker ** 13002*a3141fd3SAndroid Build Coastguard Worker ** xPhraseNextColumn() 13003*a3141fd3SAndroid Build Coastguard Worker ** See xPhraseFirstColumn above. 13004*a3141fd3SAndroid Build Coastguard Worker */ 13005*a3141fd3SAndroid Build Coastguard Worker struct Fts5ExtensionApi { 13006*a3141fd3SAndroid Build Coastguard Worker int iVersion; /* Currently always set to 2 */ 13007*a3141fd3SAndroid Build Coastguard Worker 13008*a3141fd3SAndroid Build Coastguard Worker void *(*xUserData)(Fts5Context*); 13009*a3141fd3SAndroid Build Coastguard Worker 13010*a3141fd3SAndroid Build Coastguard Worker int (*xColumnCount)(Fts5Context*); 13011*a3141fd3SAndroid Build Coastguard Worker int (*xRowCount)(Fts5Context*, sqlite3_int64 *pnRow); 13012*a3141fd3SAndroid Build Coastguard Worker int (*xColumnTotalSize)(Fts5Context*, int iCol, sqlite3_int64 *pnToken); 13013*a3141fd3SAndroid Build Coastguard Worker 13014*a3141fd3SAndroid Build Coastguard Worker int (*xTokenize)(Fts5Context*, 13015*a3141fd3SAndroid Build Coastguard Worker const char *pText, int nText, /* Text to tokenize */ 13016*a3141fd3SAndroid Build Coastguard Worker void *pCtx, /* Context passed to xToken() */ 13017*a3141fd3SAndroid Build Coastguard Worker int (*xToken)(void*, int, const char*, int, int, int) /* Callback */ 13018*a3141fd3SAndroid Build Coastguard Worker ); 13019*a3141fd3SAndroid Build Coastguard Worker 13020*a3141fd3SAndroid Build Coastguard Worker int (*xPhraseCount)(Fts5Context*); 13021*a3141fd3SAndroid Build Coastguard Worker int (*xPhraseSize)(Fts5Context*, int iPhrase); 13022*a3141fd3SAndroid Build Coastguard Worker 13023*a3141fd3SAndroid Build Coastguard Worker int (*xInstCount)(Fts5Context*, int *pnInst); 13024*a3141fd3SAndroid Build Coastguard Worker int (*xInst)(Fts5Context*, int iIdx, int *piPhrase, int *piCol, int *piOff); 13025*a3141fd3SAndroid Build Coastguard Worker 13026*a3141fd3SAndroid Build Coastguard Worker sqlite3_int64 (*xRowid)(Fts5Context*); 13027*a3141fd3SAndroid Build Coastguard Worker int (*xColumnText)(Fts5Context*, int iCol, const char **pz, int *pn); 13028*a3141fd3SAndroid Build Coastguard Worker int (*xColumnSize)(Fts5Context*, int iCol, int *pnToken); 13029*a3141fd3SAndroid Build Coastguard Worker 13030*a3141fd3SAndroid Build Coastguard Worker int (*xQueryPhrase)(Fts5Context*, int iPhrase, void *pUserData, 13031*a3141fd3SAndroid Build Coastguard Worker int(*)(const Fts5ExtensionApi*,Fts5Context*,void*) 13032*a3141fd3SAndroid Build Coastguard Worker ); 13033*a3141fd3SAndroid Build Coastguard Worker int (*xSetAuxdata)(Fts5Context*, void *pAux, void(*xDelete)(void*)); 13034*a3141fd3SAndroid Build Coastguard Worker void *(*xGetAuxdata)(Fts5Context*, int bClear); 13035*a3141fd3SAndroid Build Coastguard Worker 13036*a3141fd3SAndroid Build Coastguard Worker int (*xPhraseFirst)(Fts5Context*, int iPhrase, Fts5PhraseIter*, int*, int*); 13037*a3141fd3SAndroid Build Coastguard Worker void (*xPhraseNext)(Fts5Context*, Fts5PhraseIter*, int *piCol, int *piOff); 13038*a3141fd3SAndroid Build Coastguard Worker 13039*a3141fd3SAndroid Build Coastguard Worker int (*xPhraseFirstColumn)(Fts5Context*, int iPhrase, Fts5PhraseIter*, int*); 13040*a3141fd3SAndroid Build Coastguard Worker void (*xPhraseNextColumn)(Fts5Context*, Fts5PhraseIter*, int *piCol); 13041*a3141fd3SAndroid Build Coastguard Worker }; 13042*a3141fd3SAndroid Build Coastguard Worker 13043*a3141fd3SAndroid Build Coastguard Worker /* 13044*a3141fd3SAndroid Build Coastguard Worker ** CUSTOM AUXILIARY FUNCTIONS 13045*a3141fd3SAndroid Build Coastguard Worker *************************************************************************/ 13046*a3141fd3SAndroid Build Coastguard Worker 13047*a3141fd3SAndroid Build Coastguard Worker /************************************************************************* 13048*a3141fd3SAndroid Build Coastguard Worker ** CUSTOM TOKENIZERS 13049*a3141fd3SAndroid Build Coastguard Worker ** 13050*a3141fd3SAndroid Build Coastguard Worker ** Applications may also register custom tokenizer types. A tokenizer 13051*a3141fd3SAndroid Build Coastguard Worker ** is registered by providing fts5 with a populated instance of the 13052*a3141fd3SAndroid Build Coastguard Worker ** following structure. All structure methods must be defined, setting 13053*a3141fd3SAndroid Build Coastguard Worker ** any member of the fts5_tokenizer struct to NULL leads to undefined 13054*a3141fd3SAndroid Build Coastguard Worker ** behaviour. The structure methods are expected to function as follows: 13055*a3141fd3SAndroid Build Coastguard Worker ** 13056*a3141fd3SAndroid Build Coastguard Worker ** xCreate: 13057*a3141fd3SAndroid Build Coastguard Worker ** This function is used to allocate and initialize a tokenizer instance. 13058*a3141fd3SAndroid Build Coastguard Worker ** A tokenizer instance is required to actually tokenize text. 13059*a3141fd3SAndroid Build Coastguard Worker ** 13060*a3141fd3SAndroid Build Coastguard Worker ** The first argument passed to this function is a copy of the (void*) 13061*a3141fd3SAndroid Build Coastguard Worker ** pointer provided by the application when the fts5_tokenizer object 13062*a3141fd3SAndroid Build Coastguard Worker ** was registered with FTS5 (the third argument to xCreateTokenizer()). 13063*a3141fd3SAndroid Build Coastguard Worker ** The second and third arguments are an array of nul-terminated strings 13064*a3141fd3SAndroid Build Coastguard Worker ** containing the tokenizer arguments, if any, specified following the 13065*a3141fd3SAndroid Build Coastguard Worker ** tokenizer name as part of the CREATE VIRTUAL TABLE statement used 13066*a3141fd3SAndroid Build Coastguard Worker ** to create the FTS5 table. 13067*a3141fd3SAndroid Build Coastguard Worker ** 13068*a3141fd3SAndroid Build Coastguard Worker ** The final argument is an output variable. If successful, (*ppOut) 13069*a3141fd3SAndroid Build Coastguard Worker ** should be set to point to the new tokenizer handle and SQLITE_OK 13070*a3141fd3SAndroid Build Coastguard Worker ** returned. If an error occurs, some value other than SQLITE_OK should 13071*a3141fd3SAndroid Build Coastguard Worker ** be returned. In this case, fts5 assumes that the final value of *ppOut 13072*a3141fd3SAndroid Build Coastguard Worker ** is undefined. 13073*a3141fd3SAndroid Build Coastguard Worker ** 13074*a3141fd3SAndroid Build Coastguard Worker ** xDelete: 13075*a3141fd3SAndroid Build Coastguard Worker ** This function is invoked to delete a tokenizer handle previously 13076*a3141fd3SAndroid Build Coastguard Worker ** allocated using xCreate(). Fts5 guarantees that this function will 13077*a3141fd3SAndroid Build Coastguard Worker ** be invoked exactly once for each successful call to xCreate(). 13078*a3141fd3SAndroid Build Coastguard Worker ** 13079*a3141fd3SAndroid Build Coastguard Worker ** xTokenize: 13080*a3141fd3SAndroid Build Coastguard Worker ** This function is expected to tokenize the nText byte string indicated 13081*a3141fd3SAndroid Build Coastguard Worker ** by argument pText. pText may or may not be nul-terminated. The first 13082*a3141fd3SAndroid Build Coastguard Worker ** argument passed to this function is a pointer to an Fts5Tokenizer object 13083*a3141fd3SAndroid Build Coastguard Worker ** returned by an earlier call to xCreate(). 13084*a3141fd3SAndroid Build Coastguard Worker ** 13085*a3141fd3SAndroid Build Coastguard Worker ** The second argument indicates the reason that FTS5 is requesting 13086*a3141fd3SAndroid Build Coastguard Worker ** tokenization of the supplied text. This is always one of the following 13087*a3141fd3SAndroid Build Coastguard Worker ** four values: 13088*a3141fd3SAndroid Build Coastguard Worker ** 13089*a3141fd3SAndroid Build Coastguard Worker ** <ul><li> <b>FTS5_TOKENIZE_DOCUMENT</b> - A document is being inserted into 13090*a3141fd3SAndroid Build Coastguard Worker ** or removed from the FTS table. The tokenizer is being invoked to 13091*a3141fd3SAndroid Build Coastguard Worker ** determine the set of tokens to add to (or delete from) the 13092*a3141fd3SAndroid Build Coastguard Worker ** FTS index. 13093*a3141fd3SAndroid Build Coastguard Worker ** 13094*a3141fd3SAndroid Build Coastguard Worker ** <li> <b>FTS5_TOKENIZE_QUERY</b> - A MATCH query is being executed 13095*a3141fd3SAndroid Build Coastguard Worker ** against the FTS index. The tokenizer is being called to tokenize 13096*a3141fd3SAndroid Build Coastguard Worker ** a bareword or quoted string specified as part of the query. 13097*a3141fd3SAndroid Build Coastguard Worker ** 13098*a3141fd3SAndroid Build Coastguard Worker ** <li> <b>(FTS5_TOKENIZE_QUERY | FTS5_TOKENIZE_PREFIX)</b> - Same as 13099*a3141fd3SAndroid Build Coastguard Worker ** FTS5_TOKENIZE_QUERY, except that the bareword or quoted string is 13100*a3141fd3SAndroid Build Coastguard Worker ** followed by a "*" character, indicating that the last token 13101*a3141fd3SAndroid Build Coastguard Worker ** returned by the tokenizer will be treated as a token prefix. 13102*a3141fd3SAndroid Build Coastguard Worker ** 13103*a3141fd3SAndroid Build Coastguard Worker ** <li> <b>FTS5_TOKENIZE_AUX</b> - The tokenizer is being invoked to 13104*a3141fd3SAndroid Build Coastguard Worker ** satisfy an fts5_api.xTokenize() request made by an auxiliary 13105*a3141fd3SAndroid Build Coastguard Worker ** function. Or an fts5_api.xColumnSize() request made by the same 13106*a3141fd3SAndroid Build Coastguard Worker ** on a columnsize=0 database. 13107*a3141fd3SAndroid Build Coastguard Worker ** </ul> 13108*a3141fd3SAndroid Build Coastguard Worker ** 13109*a3141fd3SAndroid Build Coastguard Worker ** For each token in the input string, the supplied callback xToken() must 13110*a3141fd3SAndroid Build Coastguard Worker ** be invoked. The first argument to it should be a copy of the pointer 13111*a3141fd3SAndroid Build Coastguard Worker ** passed as the second argument to xTokenize(). The third and fourth 13112*a3141fd3SAndroid Build Coastguard Worker ** arguments are a pointer to a buffer containing the token text, and the 13113*a3141fd3SAndroid Build Coastguard Worker ** size of the token in bytes. The 4th and 5th arguments are the byte offsets 13114*a3141fd3SAndroid Build Coastguard Worker ** of the first byte of and first byte immediately following the text from 13115*a3141fd3SAndroid Build Coastguard Worker ** which the token is derived within the input. 13116*a3141fd3SAndroid Build Coastguard Worker ** 13117*a3141fd3SAndroid Build Coastguard Worker ** The second argument passed to the xToken() callback ("tflags") should 13118*a3141fd3SAndroid Build Coastguard Worker ** normally be set to 0. The exception is if the tokenizer supports 13119*a3141fd3SAndroid Build Coastguard Worker ** synonyms. In this case see the discussion below for details. 13120*a3141fd3SAndroid Build Coastguard Worker ** 13121*a3141fd3SAndroid Build Coastguard Worker ** FTS5 assumes the xToken() callback is invoked for each token in the 13122*a3141fd3SAndroid Build Coastguard Worker ** order that they occur within the input text. 13123*a3141fd3SAndroid Build Coastguard Worker ** 13124*a3141fd3SAndroid Build Coastguard Worker ** If an xToken() callback returns any value other than SQLITE_OK, then 13125*a3141fd3SAndroid Build Coastguard Worker ** the tokenization should be abandoned and the xTokenize() method should 13126*a3141fd3SAndroid Build Coastguard Worker ** immediately return a copy of the xToken() return value. Or, if the 13127*a3141fd3SAndroid Build Coastguard Worker ** input buffer is exhausted, xTokenize() should return SQLITE_OK. Finally, 13128*a3141fd3SAndroid Build Coastguard Worker ** if an error occurs with the xTokenize() implementation itself, it 13129*a3141fd3SAndroid Build Coastguard Worker ** may abandon the tokenization and return any error code other than 13130*a3141fd3SAndroid Build Coastguard Worker ** SQLITE_OK or SQLITE_DONE. 13131*a3141fd3SAndroid Build Coastguard Worker ** 13132*a3141fd3SAndroid Build Coastguard Worker ** SYNONYM SUPPORT 13133*a3141fd3SAndroid Build Coastguard Worker ** 13134*a3141fd3SAndroid Build Coastguard Worker ** Custom tokenizers may also support synonyms. Consider a case in which a 13135*a3141fd3SAndroid Build Coastguard Worker ** user wishes to query for a phrase such as "first place". Using the 13136*a3141fd3SAndroid Build Coastguard Worker ** built-in tokenizers, the FTS5 query 'first + place' will match instances 13137*a3141fd3SAndroid Build Coastguard Worker ** of "first place" within the document set, but not alternative forms 13138*a3141fd3SAndroid Build Coastguard Worker ** such as "1st place". In some applications, it would be better to match 13139*a3141fd3SAndroid Build Coastguard Worker ** all instances of "first place" or "1st place" regardless of which form 13140*a3141fd3SAndroid Build Coastguard Worker ** the user specified in the MATCH query text. 13141*a3141fd3SAndroid Build Coastguard Worker ** 13142*a3141fd3SAndroid Build Coastguard Worker ** There are several ways to approach this in FTS5: 13143*a3141fd3SAndroid Build Coastguard Worker ** 13144*a3141fd3SAndroid Build Coastguard Worker ** <ol><li> By mapping all synonyms to a single token. In this case, using 13145*a3141fd3SAndroid Build Coastguard Worker ** the above example, this means that the tokenizer returns the 13146*a3141fd3SAndroid Build Coastguard Worker ** same token for inputs "first" and "1st". Say that token is in 13147*a3141fd3SAndroid Build Coastguard Worker ** fact "first", so that when the user inserts the document "I won 13148*a3141fd3SAndroid Build Coastguard Worker ** 1st place" entries are added to the index for tokens "i", "won", 13149*a3141fd3SAndroid Build Coastguard Worker ** "first" and "place". If the user then queries for '1st + place', 13150*a3141fd3SAndroid Build Coastguard Worker ** the tokenizer substitutes "first" for "1st" and the query works 13151*a3141fd3SAndroid Build Coastguard Worker ** as expected. 13152*a3141fd3SAndroid Build Coastguard Worker ** 13153*a3141fd3SAndroid Build Coastguard Worker ** <li> By querying the index for all synonyms of each query term 13154*a3141fd3SAndroid Build Coastguard Worker ** separately. In this case, when tokenizing query text, the 13155*a3141fd3SAndroid Build Coastguard Worker ** tokenizer may provide multiple synonyms for a single term 13156*a3141fd3SAndroid Build Coastguard Worker ** within the document. FTS5 then queries the index for each 13157*a3141fd3SAndroid Build Coastguard Worker ** synonym individually. For example, faced with the query: 13158*a3141fd3SAndroid Build Coastguard Worker ** 13159*a3141fd3SAndroid Build Coastguard Worker ** <codeblock> 13160*a3141fd3SAndroid Build Coastguard Worker ** ... MATCH 'first place'</codeblock> 13161*a3141fd3SAndroid Build Coastguard Worker ** 13162*a3141fd3SAndroid Build Coastguard Worker ** the tokenizer offers both "1st" and "first" as synonyms for the 13163*a3141fd3SAndroid Build Coastguard Worker ** first token in the MATCH query and FTS5 effectively runs a query 13164*a3141fd3SAndroid Build Coastguard Worker ** similar to: 13165*a3141fd3SAndroid Build Coastguard Worker ** 13166*a3141fd3SAndroid Build Coastguard Worker ** <codeblock> 13167*a3141fd3SAndroid Build Coastguard Worker ** ... MATCH '(first OR 1st) place'</codeblock> 13168*a3141fd3SAndroid Build Coastguard Worker ** 13169*a3141fd3SAndroid Build Coastguard Worker ** except that, for the purposes of auxiliary functions, the query 13170*a3141fd3SAndroid Build Coastguard Worker ** still appears to contain just two phrases - "(first OR 1st)" 13171*a3141fd3SAndroid Build Coastguard Worker ** being treated as a single phrase. 13172*a3141fd3SAndroid Build Coastguard Worker ** 13173*a3141fd3SAndroid Build Coastguard Worker ** <li> By adding multiple synonyms for a single term to the FTS index. 13174*a3141fd3SAndroid Build Coastguard Worker ** Using this method, when tokenizing document text, the tokenizer 13175*a3141fd3SAndroid Build Coastguard Worker ** provides multiple synonyms for each token. So that when a 13176*a3141fd3SAndroid Build Coastguard Worker ** document such as "I won first place" is tokenized, entries are 13177*a3141fd3SAndroid Build Coastguard Worker ** added to the FTS index for "i", "won", "first", "1st" and 13178*a3141fd3SAndroid Build Coastguard Worker ** "place". 13179*a3141fd3SAndroid Build Coastguard Worker ** 13180*a3141fd3SAndroid Build Coastguard Worker ** This way, even if the tokenizer does not provide synonyms 13181*a3141fd3SAndroid Build Coastguard Worker ** when tokenizing query text (it should not - to do so would be 13182*a3141fd3SAndroid Build Coastguard Worker ** inefficient), it doesn't matter if the user queries for 13183*a3141fd3SAndroid Build Coastguard Worker ** 'first + place' or '1st + place', as there are entries in the 13184*a3141fd3SAndroid Build Coastguard Worker ** FTS index corresponding to both forms of the first token. 13185*a3141fd3SAndroid Build Coastguard Worker ** </ol> 13186*a3141fd3SAndroid Build Coastguard Worker ** 13187*a3141fd3SAndroid Build Coastguard Worker ** Whether it is parsing document or query text, any call to xToken that 13188*a3141fd3SAndroid Build Coastguard Worker ** specifies a <i>tflags</i> argument with the FTS5_TOKEN_COLOCATED bit 13189*a3141fd3SAndroid Build Coastguard Worker ** is considered to supply a synonym for the previous token. For example, 13190*a3141fd3SAndroid Build Coastguard Worker ** when parsing the document "I won first place", a tokenizer that supports 13191*a3141fd3SAndroid Build Coastguard Worker ** synonyms would call xToken() 5 times, as follows: 13192*a3141fd3SAndroid Build Coastguard Worker ** 13193*a3141fd3SAndroid Build Coastguard Worker ** <codeblock> 13194*a3141fd3SAndroid Build Coastguard Worker ** xToken(pCtx, 0, "i", 1, 0, 1); 13195*a3141fd3SAndroid Build Coastguard Worker ** xToken(pCtx, 0, "won", 3, 2, 5); 13196*a3141fd3SAndroid Build Coastguard Worker ** xToken(pCtx, 0, "first", 5, 6, 11); 13197*a3141fd3SAndroid Build Coastguard Worker ** xToken(pCtx, FTS5_TOKEN_COLOCATED, "1st", 3, 6, 11); 13198*a3141fd3SAndroid Build Coastguard Worker ** xToken(pCtx, 0, "place", 5, 12, 17); 13199*a3141fd3SAndroid Build Coastguard Worker **</codeblock> 13200*a3141fd3SAndroid Build Coastguard Worker ** 13201*a3141fd3SAndroid Build Coastguard Worker ** It is an error to specify the FTS5_TOKEN_COLOCATED flag the first time 13202*a3141fd3SAndroid Build Coastguard Worker ** xToken() is called. Multiple synonyms may be specified for a single token 13203*a3141fd3SAndroid Build Coastguard Worker ** by making multiple calls to xToken(FTS5_TOKEN_COLOCATED) in sequence. 13204*a3141fd3SAndroid Build Coastguard Worker ** There is no limit to the number of synonyms that may be provided for a 13205*a3141fd3SAndroid Build Coastguard Worker ** single token. 13206*a3141fd3SAndroid Build Coastguard Worker ** 13207*a3141fd3SAndroid Build Coastguard Worker ** In many cases, method (1) above is the best approach. It does not add 13208*a3141fd3SAndroid Build Coastguard Worker ** extra data to the FTS index or require FTS5 to query for multiple terms, 13209*a3141fd3SAndroid Build Coastguard Worker ** so it is efficient in terms of disk space and query speed. However, it 13210*a3141fd3SAndroid Build Coastguard Worker ** does not support prefix queries very well. If, as suggested above, the 13211*a3141fd3SAndroid Build Coastguard Worker ** token "first" is substituted for "1st" by the tokenizer, then the query: 13212*a3141fd3SAndroid Build Coastguard Worker ** 13213*a3141fd3SAndroid Build Coastguard Worker ** <codeblock> 13214*a3141fd3SAndroid Build Coastguard Worker ** ... MATCH '1s*'</codeblock> 13215*a3141fd3SAndroid Build Coastguard Worker ** 13216*a3141fd3SAndroid Build Coastguard Worker ** will not match documents that contain the token "1st" (as the tokenizer 13217*a3141fd3SAndroid Build Coastguard Worker ** will probably not map "1s" to any prefix of "first"). 13218*a3141fd3SAndroid Build Coastguard Worker ** 13219*a3141fd3SAndroid Build Coastguard Worker ** For full prefix support, method (3) may be preferred. In this case, 13220*a3141fd3SAndroid Build Coastguard Worker ** because the index contains entries for both "first" and "1st", prefix 13221*a3141fd3SAndroid Build Coastguard Worker ** queries such as 'fi*' or '1s*' will match correctly. However, because 13222*a3141fd3SAndroid Build Coastguard Worker ** extra entries are added to the FTS index, this method uses more space 13223*a3141fd3SAndroid Build Coastguard Worker ** within the database. 13224*a3141fd3SAndroid Build Coastguard Worker ** 13225*a3141fd3SAndroid Build Coastguard Worker ** Method (2) offers a midpoint between (1) and (3). Using this method, 13226*a3141fd3SAndroid Build Coastguard Worker ** a query such as '1s*' will match documents that contain the literal 13227*a3141fd3SAndroid Build Coastguard Worker ** token "1st", but not "first" (assuming the tokenizer is not able to 13228*a3141fd3SAndroid Build Coastguard Worker ** provide synonyms for prefixes). However, a non-prefix query like '1st' 13229*a3141fd3SAndroid Build Coastguard Worker ** will match against "1st" and "first". This method does not require 13230*a3141fd3SAndroid Build Coastguard Worker ** extra disk space, as no extra entries are added to the FTS index. 13231*a3141fd3SAndroid Build Coastguard Worker ** On the other hand, it may require more CPU cycles to run MATCH queries, 13232*a3141fd3SAndroid Build Coastguard Worker ** as separate queries of the FTS index are required for each synonym. 13233*a3141fd3SAndroid Build Coastguard Worker ** 13234*a3141fd3SAndroid Build Coastguard Worker ** When using methods (2) or (3), it is important that the tokenizer only 13235*a3141fd3SAndroid Build Coastguard Worker ** provide synonyms when tokenizing document text (method (3)) or query 13236*a3141fd3SAndroid Build Coastguard Worker ** text (method (2)), not both. Doing so will not cause any errors, but is 13237*a3141fd3SAndroid Build Coastguard Worker ** inefficient. 13238*a3141fd3SAndroid Build Coastguard Worker */ 13239*a3141fd3SAndroid Build Coastguard Worker typedef struct Fts5Tokenizer Fts5Tokenizer; 13240*a3141fd3SAndroid Build Coastguard Worker typedef struct fts5_tokenizer fts5_tokenizer; 13241*a3141fd3SAndroid Build Coastguard Worker struct fts5_tokenizer { 13242*a3141fd3SAndroid Build Coastguard Worker int (*xCreate)(void*, const char **azArg, int nArg, Fts5Tokenizer **ppOut); 13243*a3141fd3SAndroid Build Coastguard Worker void (*xDelete)(Fts5Tokenizer*); 13244*a3141fd3SAndroid Build Coastguard Worker int (*xTokenize)(Fts5Tokenizer*, 13245*a3141fd3SAndroid Build Coastguard Worker void *pCtx, 13246*a3141fd3SAndroid Build Coastguard Worker int flags, /* Mask of FTS5_TOKENIZE_* flags */ 13247*a3141fd3SAndroid Build Coastguard Worker const char *pText, int nText, 13248*a3141fd3SAndroid Build Coastguard Worker int (*xToken)( 13249*a3141fd3SAndroid Build Coastguard Worker void *pCtx, /* Copy of 2nd argument to xTokenize() */ 13250*a3141fd3SAndroid Build Coastguard Worker int tflags, /* Mask of FTS5_TOKEN_* flags */ 13251*a3141fd3SAndroid Build Coastguard Worker const char *pToken, /* Pointer to buffer containing token */ 13252*a3141fd3SAndroid Build Coastguard Worker int nToken, /* Size of token in bytes */ 13253*a3141fd3SAndroid Build Coastguard Worker int iStart, /* Byte offset of token within input text */ 13254*a3141fd3SAndroid Build Coastguard Worker int iEnd /* Byte offset of end of token within input text */ 13255*a3141fd3SAndroid Build Coastguard Worker ) 13256*a3141fd3SAndroid Build Coastguard Worker ); 13257*a3141fd3SAndroid Build Coastguard Worker }; 13258*a3141fd3SAndroid Build Coastguard Worker 13259*a3141fd3SAndroid Build Coastguard Worker /* Flags that may be passed as the third argument to xTokenize() */ 13260*a3141fd3SAndroid Build Coastguard Worker #define FTS5_TOKENIZE_QUERY 0x0001 13261*a3141fd3SAndroid Build Coastguard Worker #define FTS5_TOKENIZE_PREFIX 0x0002 13262*a3141fd3SAndroid Build Coastguard Worker #define FTS5_TOKENIZE_DOCUMENT 0x0004 13263*a3141fd3SAndroid Build Coastguard Worker #define FTS5_TOKENIZE_AUX 0x0008 13264*a3141fd3SAndroid Build Coastguard Worker 13265*a3141fd3SAndroid Build Coastguard Worker /* Flags that may be passed by the tokenizer implementation back to FTS5 13266*a3141fd3SAndroid Build Coastguard Worker ** as the third argument to the supplied xToken callback. */ 13267*a3141fd3SAndroid Build Coastguard Worker #define FTS5_TOKEN_COLOCATED 0x0001 /* Same position as prev. token */ 13268*a3141fd3SAndroid Build Coastguard Worker 13269*a3141fd3SAndroid Build Coastguard Worker /* 13270*a3141fd3SAndroid Build Coastguard Worker ** END OF CUSTOM TOKENIZERS 13271*a3141fd3SAndroid Build Coastguard Worker *************************************************************************/ 13272*a3141fd3SAndroid Build Coastguard Worker 13273*a3141fd3SAndroid Build Coastguard Worker /************************************************************************* 13274*a3141fd3SAndroid Build Coastguard Worker ** FTS5 EXTENSION REGISTRATION API 13275*a3141fd3SAndroid Build Coastguard Worker */ 13276*a3141fd3SAndroid Build Coastguard Worker typedef struct fts5_api fts5_api; 13277*a3141fd3SAndroid Build Coastguard Worker struct fts5_api { 13278*a3141fd3SAndroid Build Coastguard Worker int iVersion; /* Currently always set to 2 */ 13279*a3141fd3SAndroid Build Coastguard Worker 13280*a3141fd3SAndroid Build Coastguard Worker /* Create a new tokenizer */ 13281*a3141fd3SAndroid Build Coastguard Worker int (*xCreateTokenizer)( 13282*a3141fd3SAndroid Build Coastguard Worker fts5_api *pApi, 13283*a3141fd3SAndroid Build Coastguard Worker const char *zName, 13284*a3141fd3SAndroid Build Coastguard Worker void *pUserData, 13285*a3141fd3SAndroid Build Coastguard Worker fts5_tokenizer *pTokenizer, 13286*a3141fd3SAndroid Build Coastguard Worker void (*xDestroy)(void*) 13287*a3141fd3SAndroid Build Coastguard Worker ); 13288*a3141fd3SAndroid Build Coastguard Worker 13289*a3141fd3SAndroid Build Coastguard Worker /* Find an existing tokenizer */ 13290*a3141fd3SAndroid Build Coastguard Worker int (*xFindTokenizer)( 13291*a3141fd3SAndroid Build Coastguard Worker fts5_api *pApi, 13292*a3141fd3SAndroid Build Coastguard Worker const char *zName, 13293*a3141fd3SAndroid Build Coastguard Worker void **ppUserData, 13294*a3141fd3SAndroid Build Coastguard Worker fts5_tokenizer *pTokenizer 13295*a3141fd3SAndroid Build Coastguard Worker ); 13296*a3141fd3SAndroid Build Coastguard Worker 13297*a3141fd3SAndroid Build Coastguard Worker /* Create a new auxiliary function */ 13298*a3141fd3SAndroid Build Coastguard Worker int (*xCreateFunction)( 13299*a3141fd3SAndroid Build Coastguard Worker fts5_api *pApi, 13300*a3141fd3SAndroid Build Coastguard Worker const char *zName, 13301*a3141fd3SAndroid Build Coastguard Worker void *pUserData, 13302*a3141fd3SAndroid Build Coastguard Worker fts5_extension_function xFunction, 13303*a3141fd3SAndroid Build Coastguard Worker void (*xDestroy)(void*) 13304*a3141fd3SAndroid Build Coastguard Worker ); 13305*a3141fd3SAndroid Build Coastguard Worker }; 13306*a3141fd3SAndroid Build Coastguard Worker 13307*a3141fd3SAndroid Build Coastguard Worker /* 13308*a3141fd3SAndroid Build Coastguard Worker ** END OF REGISTRATION API 13309*a3141fd3SAndroid Build Coastguard Worker *************************************************************************/ 13310*a3141fd3SAndroid Build Coastguard Worker 13311*a3141fd3SAndroid Build Coastguard Worker #ifdef __cplusplus 13312*a3141fd3SAndroid Build Coastguard Worker } /* end of the 'extern "C"' block */ 13313*a3141fd3SAndroid Build Coastguard Worker #endif 13314*a3141fd3SAndroid Build Coastguard Worker 13315*a3141fd3SAndroid Build Coastguard Worker #endif /* _FTS5_H */ 13316*a3141fd3SAndroid Build Coastguard Worker 13317*a3141fd3SAndroid Build Coastguard Worker /******** End of fts5.h *********/ 13318