|
|
@@ -107,9 +107,9 @@ extern "C" {
|
|
|
** [sqlite3_libversion_number()], [sqlite3_sourceid()],
|
|
|
** [sqlite_version()] and [sqlite_source_id()].
|
|
|
*/
|
|
|
-#define SQLITE_VERSION "3.8.7"
|
|
|
-#define SQLITE_VERSION_NUMBER 3008007
|
|
|
-#define SQLITE_SOURCE_ID "2014-10-17 21:35:05 19fe4a0a475bd94f491031aea7a183f7c0515cf3"
|
|
|
+#define SQLITE_VERSION "3.8.8"
|
|
|
+#define SQLITE_VERSION_NUMBER 3008008
|
|
|
+#define SQLITE_SOURCE_ID "2014-11-05 21:34:56 272fddc14cc322655eeba670bc0f9fc30e5a804c"
|
|
|
|
|
|
/*
|
|
|
** CAPI3REF: Run-Time Library Version Numbers
|
|
|
@@ -1516,25 +1516,27 @@ struct sqlite3_mem_methods {
|
|
|
** SQLITE_CONFIG_SERIALIZED configuration option.</dd>
|
|
|
**
|
|
|
** [[SQLITE_CONFIG_MALLOC]] <dt>SQLITE_CONFIG_MALLOC</dt>
|
|
|
-** <dd> ^(This option takes a single argument which is a pointer to an
|
|
|
-** instance of the [sqlite3_mem_methods] structure. The argument specifies
|
|
|
+** <dd> ^(The SQLITE_CONFIG_MALLOC option takes a single argument which is
|
|
|
+** a pointer to an instance of the [sqlite3_mem_methods] structure.
|
|
|
+** The argument specifies
|
|
|
** alternative low-level memory allocation routines to be used in place of
|
|
|
** the memory allocation routines built into SQLite.)^ ^SQLite makes
|
|
|
** its own private copy of the content of the [sqlite3_mem_methods] structure
|
|
|
** before the [sqlite3_config()] call returns.</dd>
|
|
|
**
|
|
|
** [[SQLITE_CONFIG_GETMALLOC]] <dt>SQLITE_CONFIG_GETMALLOC</dt>
|
|
|
-** <dd> ^(This option takes a single argument which is a pointer to an
|
|
|
-** instance of the [sqlite3_mem_methods] structure. The [sqlite3_mem_methods]
|
|
|
+** <dd> ^(The SQLITE_CONFIG_GETMALLOC option takes a single argument which
|
|
|
+** is a pointer to an instance of the [sqlite3_mem_methods] structure.
|
|
|
+** The [sqlite3_mem_methods]
|
|
|
** structure is filled with the currently defined memory allocation routines.)^
|
|
|
** This option can be used to overload the default memory allocation
|
|
|
** routines with a wrapper that simulations memory allocation failure or
|
|
|
** tracks memory usage, for example. </dd>
|
|
|
**
|
|
|
** [[SQLITE_CONFIG_MEMSTATUS]] <dt>SQLITE_CONFIG_MEMSTATUS</dt>
|
|
|
-** <dd> ^This option takes single argument of type int, interpreted as a
|
|
|
-** boolean, which enables or disables the collection of memory allocation
|
|
|
-** statistics. ^(When memory allocation statistics are disabled, the
|
|
|
+** <dd> ^The SQLITE_CONFIG_MEMSTATUS option takes single argument of type int,
|
|
|
+** interpreted as a boolean, which enables or disables the collection of
|
|
|
+** memory allocation statistics. ^(When memory allocation statistics are disabled, the
|
|
|
** following SQLite interfaces become non-operational:
|
|
|
** <ul>
|
|
|
** <li> [sqlite3_memory_used()]
|
|
|
@@ -1548,47 +1550,57 @@ struct sqlite3_mem_methods {
|
|
|
** </dd>
|
|
|
**
|
|
|
** [[SQLITE_CONFIG_SCRATCH]] <dt>SQLITE_CONFIG_SCRATCH</dt>
|
|
|
-** <dd> ^This option specifies a static memory buffer that SQLite can use for
|
|
|
-** scratch memory. There are three arguments: A pointer an 8-byte
|
|
|
+** <dd> ^The SQLITE_CONFIG_SCRATCH option specifies a static memory buffer
|
|
|
+** that SQLite can use for scratch memory. ^(There are three arguments
|
|
|
+** to SQLITE_CONFIG_SCRATCH: A pointer an 8-byte
|
|
|
** aligned memory buffer from which the scratch allocations will be
|
|
|
** drawn, the size of each scratch allocation (sz),
|
|
|
-** and the maximum number of scratch allocations (N). The sz
|
|
|
-** argument must be a multiple of 16.
|
|
|
+** and the maximum number of scratch allocations (N).)^
|
|
|
** The first argument must be a pointer to an 8-byte aligned buffer
|
|
|
** of at least sz*N bytes of memory.
|
|
|
-** ^SQLite will use no more than two scratch buffers per thread. So
|
|
|
-** N should be set to twice the expected maximum number of threads.
|
|
|
-** ^SQLite will never require a scratch buffer that is more than 6
|
|
|
-** times the database page size. ^If SQLite needs needs additional
|
|
|
+** ^SQLite will not use more than one scratch buffers per thread.
|
|
|
+** ^SQLite will never request a scratch buffer that is more than 6
|
|
|
+** times the database page size.
|
|
|
+** ^If SQLite needs needs additional
|
|
|
** scratch memory beyond what is provided by this configuration option, then
|
|
|
-** [sqlite3_malloc()] will be used to obtain the memory needed.</dd>
|
|
|
+** [sqlite3_malloc()] will be used to obtain the memory needed.<p>
|
|
|
+** ^When the application provides any amount of scratch memory using
|
|
|
+** SQLITE_CONFIG_SCRATCH, SQLite avoids unnecessary large
|
|
|
+** [sqlite3_malloc|heap allocations].
|
|
|
+** This can help [Robson proof|prevent memory allocation failures] due to heap
|
|
|
+** fragmentation in low-memory embedded systems.
|
|
|
+** </dd>
|
|
|
**
|
|
|
** [[SQLITE_CONFIG_PAGECACHE]] <dt>SQLITE_CONFIG_PAGECACHE</dt>
|
|
|
-** <dd> ^This option specifies a static memory buffer that SQLite can use for
|
|
|
-** the database page cache with the default page cache implementation.
|
|
|
+** <dd> ^The SQLITE_CONFIG_PAGECACHE option specifies a static memory buffer
|
|
|
+** that SQLite can use for the database page cache with the default page
|
|
|
+** cache implementation.
|
|
|
** This configuration should not be used if an application-define page
|
|
|
-** cache implementation is loaded using the SQLITE_CONFIG_PCACHE2 option.
|
|
|
-** There are three arguments to this option: A pointer to 8-byte aligned
|
|
|
+** cache implementation is loaded using the [SQLITE_CONFIG_PCACHE2]
|
|
|
+** configuration option.
|
|
|
+** ^There are three arguments to SQLITE_CONFIG_PAGECACHE: A pointer to 8-byte aligned
|
|
|
** memory, the size of each page buffer (sz), and the number of pages (N).
|
|
|
** The sz argument should be the size of the largest database page
|
|
|
-** (a power of two between 512 and 32768) plus a little extra for each
|
|
|
-** page header. ^The page header size is 20 to 40 bytes depending on
|
|
|
-** the host architecture. ^It is harmless, apart from the wasted memory,
|
|
|
-** to make sz a little too large. The first
|
|
|
-** argument should point to an allocation of at least sz*N bytes of memory.
|
|
|
+** (a power of two between 512 and 32768) plus some extra bytes for each
|
|
|
+** page header. ^The number of extra bytes needed by the page header
|
|
|
+** can be determined using the [SQLITE_CONFIG_PCACHE_HDRSZ] option
|
|
|
+** to [sqlite3_config()].
|
|
|
+** ^It is harmless, apart from the wasted memory,
|
|
|
+** for the sz parameter to be larger than necessary. The first
|
|
|
+** argument should pointer to an 8-byte aligned block of memory that
|
|
|
+** is at least sz*N bytes of memory, otherwise subsequent behavior is
|
|
|
+** undefined.
|
|
|
** ^SQLite will use the memory provided by the first argument to satisfy its
|
|
|
** memory needs for the first N pages that it adds to cache. ^If additional
|
|
|
** page cache memory is needed beyond what is provided by this option, then
|
|
|
-** SQLite goes to [sqlite3_malloc()] for the additional storage space.
|
|
|
-** The pointer in the first argument must
|
|
|
-** be aligned to an 8-byte boundary or subsequent behavior of SQLite
|
|
|
-** will be undefined.</dd>
|
|
|
+** SQLite goes to [sqlite3_malloc()] for the additional storage space.</dd>
|
|
|
**
|
|
|
** [[SQLITE_CONFIG_HEAP]] <dt>SQLITE_CONFIG_HEAP</dt>
|
|
|
-** <dd> ^This option specifies a static memory buffer that SQLite will use
|
|
|
-** for all of its dynamic memory allocation needs beyond those provided
|
|
|
-** for by [SQLITE_CONFIG_SCRATCH] and [SQLITE_CONFIG_PAGECACHE].
|
|
|
-** There are three arguments: An 8-byte aligned pointer to the memory,
|
|
|
+** <dd> ^The SQLITE_CONFIG_HEAP option specifies a static memory buffer
|
|
|
+** that SQLite will use for all of its dynamic memory allocation needs
|
|
|
+** beyond those provided for by [SQLITE_CONFIG_SCRATCH] and [SQLITE_CONFIG_PAGECACHE].
|
|
|
+** ^There are three arguments to SQLITE_CONFIG_HEAP:
|
|
|
+** An 8-byte aligned pointer to the memory,
|
|
|
** the number of bytes in the memory buffer, and the minimum allocation size.
|
|
|
** ^If the first pointer (the memory pointer) is NULL, then SQLite reverts
|
|
|
** to using its default memory allocator (the system malloc() implementation),
|
|
|
@@ -1602,9 +1614,9 @@ struct sqlite3_mem_methods {
|
|
|
** for the minimum allocation size are 2**5 through 2**8.</dd>
|
|
|
**
|
|
|
** [[SQLITE_CONFIG_MUTEX]] <dt>SQLITE_CONFIG_MUTEX</dt>
|
|
|
-** <dd> ^(This option takes a single argument which is a pointer to an
|
|
|
-** instance of the [sqlite3_mutex_methods] structure. The argument specifies
|
|
|
-** alternative low-level mutex routines to be used in place
|
|
|
+** <dd> ^(The SQLITE_CONFIG_MUTEX option takes a single argument which is a
|
|
|
+** pointer to an instance of the [sqlite3_mutex_methods] structure.
|
|
|
+** The argument specifies alternative low-level mutex routines to be used in place
|
|
|
** the mutex routines built into SQLite.)^ ^SQLite makes a copy of the
|
|
|
** content of the [sqlite3_mutex_methods] structure before the call to
|
|
|
** [sqlite3_config()] returns. ^If SQLite is compiled with
|
|
|
@@ -1614,8 +1626,8 @@ struct sqlite3_mem_methods {
|
|
|
** return [SQLITE_ERROR].</dd>
|
|
|
**
|
|
|
** [[SQLITE_CONFIG_GETMUTEX]] <dt>SQLITE_CONFIG_GETMUTEX</dt>
|
|
|
-** <dd> ^(This option takes a single argument which is a pointer to an
|
|
|
-** instance of the [sqlite3_mutex_methods] structure. The
|
|
|
+** <dd> ^(The SQLITE_CONFIG_GETMUTEX option takes a single argument which
|
|
|
+** is a pointer to an instance of the [sqlite3_mutex_methods] structure. The
|
|
|
** [sqlite3_mutex_methods]
|
|
|
** structure is filled with the currently defined mutex routines.)^
|
|
|
** This option can be used to overload the default mutex allocation
|
|
|
@@ -1627,24 +1639,24 @@ struct sqlite3_mem_methods {
|
|
|
** return [SQLITE_ERROR].</dd>
|
|
|
**
|
|
|
** [[SQLITE_CONFIG_LOOKASIDE]] <dt>SQLITE_CONFIG_LOOKASIDE</dt>
|
|
|
-** <dd> ^(This option takes two arguments that determine the default
|
|
|
-** memory allocation for the lookaside memory allocator on each
|
|
|
-** [database connection]. The first argument is the
|
|
|
+** <dd> ^(The SQLITE_CONFIG_LOOKASIDE option takes two arguments that determine
|
|
|
+** the default size of lookaside memory on each [database connection].
|
|
|
+** The first argument is the
|
|
|
** size of each lookaside buffer slot and the second is the number of
|
|
|
-** slots allocated to each database connection.)^ ^(This option sets the
|
|
|
-** <i>default</i> lookaside size. The [SQLITE_DBCONFIG_LOOKASIDE]
|
|
|
-** verb to [sqlite3_db_config()] can be used to change the lookaside
|
|
|
+** slots allocated to each database connection.)^ ^(SQLITE_CONFIG_LOOKASIDE
|
|
|
+** sets the <i>default</i> lookaside size. The [SQLITE_DBCONFIG_LOOKASIDE]
|
|
|
+** option to [sqlite3_db_config()] can be used to change the lookaside
|
|
|
** configuration on individual connections.)^ </dd>
|
|
|
**
|
|
|
** [[SQLITE_CONFIG_PCACHE2]] <dt>SQLITE_CONFIG_PCACHE2</dt>
|
|
|
-** <dd> ^(This option takes a single argument which is a pointer to
|
|
|
-** an [sqlite3_pcache_methods2] object. This object specifies the interface
|
|
|
-** to a custom page cache implementation.)^ ^SQLite makes a copy of the
|
|
|
-** object and uses it for page cache memory allocations.</dd>
|
|
|
+** <dd> ^(The SQLITE_CONFIG_PCACHE2 option takes a single argument which is
|
|
|
+** a pointer to an [sqlite3_pcache_methods2] object. This object specifies
|
|
|
+** the interface to a custom page cache implementation.)^
|
|
|
+** ^SQLite makes a copy of the [sqlite3_pcache_methods2] object.</dd>
|
|
|
**
|
|
|
** [[SQLITE_CONFIG_GETPCACHE2]] <dt>SQLITE_CONFIG_GETPCACHE2</dt>
|
|
|
-** <dd> ^(This option takes a single argument which is a pointer to an
|
|
|
-** [sqlite3_pcache_methods2] object. SQLite copies of the current
|
|
|
+** <dd> ^(The SQLITE_CONFIG_GETPCACHE2 option takes a single argument which
|
|
|
+** is a pointer to an [sqlite3_pcache_methods2] object. SQLite copies of the current
|
|
|
** page cache implementation into that object.)^ </dd>
|
|
|
**
|
|
|
** [[SQLITE_CONFIG_LOG]] <dt>SQLITE_CONFIG_LOG</dt>
|
|
|
@@ -1668,10 +1680,10 @@ struct sqlite3_mem_methods {
|
|
|
** function must be threadsafe. </dd>
|
|
|
**
|
|
|
** [[SQLITE_CONFIG_URI]] <dt>SQLITE_CONFIG_URI
|
|
|
-** <dd>^(This option takes a single argument of type int. If non-zero, then
|
|
|
-** URI handling is globally enabled. If the parameter is zero, then URI handling
|
|
|
-** is globally disabled.)^ ^If URI handling is globally enabled, all filenames
|
|
|
-** passed to [sqlite3_open()], [sqlite3_open_v2()], [sqlite3_open16()] or
|
|
|
+** <dd>^(The SQLITE_CONFIG_URI option takes a single argument of type int.
|
|
|
+** If non-zero, then URI handling is globally enabled. If the parameter is zero,
|
|
|
+** then URI handling is globally disabled.)^ ^If URI handling is globally enabled,
|
|
|
+** all filenames passed to [sqlite3_open()], [sqlite3_open_v2()], [sqlite3_open16()] or
|
|
|
** specified as part of [ATTACH] commands are interpreted as URIs, regardless
|
|
|
** of whether or not the [SQLITE_OPEN_URI] flag is set when the database
|
|
|
** connection is opened. ^If it is globally disabled, filenames are
|
|
|
@@ -1681,9 +1693,10 @@ struct sqlite3_mem_methods {
|
|
|
** [SQLITE_USE_URI] symbol defined.)^
|
|
|
**
|
|
|
** [[SQLITE_CONFIG_COVERING_INDEX_SCAN]] <dt>SQLITE_CONFIG_COVERING_INDEX_SCAN
|
|
|
-** <dd>^This option takes a single integer argument which is interpreted as
|
|
|
-** a boolean in order to enable or disable the use of covering indices for
|
|
|
-** full table scans in the query optimizer. ^The default setting is determined
|
|
|
+** <dd>^The SQLITE_CONFIG_COVERING_INDEX_SCAN option takes a single integer
|
|
|
+** argument which is interpreted as a boolean in order to enable or disable
|
|
|
+** the use of covering indices for full table scans in the query optimizer.
|
|
|
+** ^The default setting is determined
|
|
|
** by the [SQLITE_ALLOW_COVERING_INDEX_SCAN] compile-time option, or is "on"
|
|
|
** if that compile-time option is omitted.
|
|
|
** The ability to disable the use of covering indices for full table scans
|
|
|
@@ -1731,11 +1744,20 @@ struct sqlite3_mem_methods {
|
|
|
**
|
|
|
** [[SQLITE_CONFIG_WIN32_HEAPSIZE]]
|
|
|
** <dt>SQLITE_CONFIG_WIN32_HEAPSIZE
|
|
|
-** <dd>^This option is only available if SQLite is compiled for Windows
|
|
|
-** with the [SQLITE_WIN32_MALLOC] pre-processor macro defined.
|
|
|
-** SQLITE_CONFIG_WIN32_HEAPSIZE takes a 32-bit unsigned integer value
|
|
|
+** <dd>^The SQLITE_CONFIG_WIN32_HEAPSIZE option is only available if SQLite is
|
|
|
+** compiled for Windows with the [SQLITE_WIN32_MALLOC] pre-processor macro defined.
|
|
|
+** ^SQLITE_CONFIG_WIN32_HEAPSIZE takes a 32-bit unsigned integer value
|
|
|
** that specifies the maximum size of the created heap.
|
|
|
** </dl>
|
|
|
+**
|
|
|
+** [[SQLITE_CONFIG_PCACHE_HDRSZ]]
|
|
|
+** <dt>SQLITE_CONFIG_PCACHE_HDRSZ
|
|
|
+** <dd>^The SQLITE_CONFIG_PCACHE_HDRSZ option takes a single parameter which
|
|
|
+** is a pointer to an integer and writes into that integer the number of extra
|
|
|
+** bytes per page required for each page in [SQLITE_CONFIG_PAGECACHE]. The amount of
|
|
|
+** extra space required can change depending on the compiler,
|
|
|
+** target platform, and SQLite version.
|
|
|
+** </dl>
|
|
|
*/
|
|
|
#define SQLITE_CONFIG_SINGLETHREAD 1 /* nil */
|
|
|
#define SQLITE_CONFIG_MULTITHREAD 2 /* nil */
|
|
|
@@ -1760,6 +1782,7 @@ struct sqlite3_mem_methods {
|
|
|
#define SQLITE_CONFIG_SQLLOG 21 /* xSqllog, void* */
|
|
|
#define SQLITE_CONFIG_MMAP_SIZE 22 /* sqlite3_int64, sqlite3_int64 */
|
|
|
#define SQLITE_CONFIG_WIN32_HEAPSIZE 23 /* int nByte */
|
|
|
+#define SQLITE_CONFIG_PCACHE_HDRSZ 24 /* int *psz */
|
|
|
|
|
|
/*
|
|
|
** CAPI3REF: Database Connection Configuration Options
|
|
|
@@ -1887,47 +1910,45 @@ SQLITE_API sqlite3_int64 sqlite3_last_insert_rowid(sqlite3*);
|
|
|
/*
|
|
|
** CAPI3REF: Count The Number Of Rows Modified
|
|
|
**
|
|
|
-** ^This function returns the number of database rows that were changed
|
|
|
-** or inserted or deleted by the most recently completed SQL statement
|
|
|
-** on the [database connection] specified by the first parameter.
|
|
|
-** ^(Only changes that are directly specified by the [INSERT], [UPDATE],
|
|
|
-** or [DELETE] statement are counted. Auxiliary changes caused by
|
|
|
-** triggers or [foreign key actions] are not counted.)^ Use the
|
|
|
-** [sqlite3_total_changes()] function to find the total number of changes
|
|
|
-** including changes caused by triggers and foreign key actions.
|
|
|
-**
|
|
|
-** ^Changes to a view that are simulated by an [INSTEAD OF trigger]
|
|
|
-** are not counted. Only real table changes are counted.
|
|
|
-**
|
|
|
-** ^(A "row change" is a change to a single row of a single table
|
|
|
-** caused by an INSERT, DELETE, or UPDATE statement. Rows that
|
|
|
-** are changed as side effects of [REPLACE] constraint resolution,
|
|
|
-** rollback, ABORT processing, [DROP TABLE], or by any other
|
|
|
-** mechanisms do not count as direct row changes.)^
|
|
|
-**
|
|
|
-** A "trigger context" is a scope of execution that begins and
|
|
|
-** ends with the script of a [CREATE TRIGGER | trigger].
|
|
|
-** Most SQL statements are
|
|
|
-** evaluated outside of any trigger. This is the "top level"
|
|
|
-** trigger context. If a trigger fires from the top level, a
|
|
|
-** new trigger context is entered for the duration of that one
|
|
|
-** trigger. Subtriggers create subcontexts for their duration.
|
|
|
-**
|
|
|
-** ^Calling [sqlite3_exec()] or [sqlite3_step()] recursively does
|
|
|
-** not create a new trigger context.
|
|
|
-**
|
|
|
-** ^This function returns the number of direct row changes in the
|
|
|
-** most recent INSERT, UPDATE, or DELETE statement within the same
|
|
|
-** trigger context.
|
|
|
-**
|
|
|
-** ^Thus, when called from the top level, this function returns the
|
|
|
-** number of changes in the most recent INSERT, UPDATE, or DELETE
|
|
|
-** that also occurred at the top level. ^(Within the body of a trigger,
|
|
|
-** the sqlite3_changes() interface can be called to find the number of
|
|
|
-** changes in the most recently completed INSERT, UPDATE, or DELETE
|
|
|
-** statement within the body of the same trigger.
|
|
|
-** However, the number returned does not include changes
|
|
|
-** caused by subtriggers since those have their own context.)^
|
|
|
+** ^This function returns the number of rows modified, inserted or
|
|
|
+** deleted by the most recently completed INSERT, UPDATE or DELETE
|
|
|
+** statement on the database connection specified by the only parameter.
|
|
|
+** ^Executing any other type of SQL statement does not modify the value
|
|
|
+** returned by this function.
|
|
|
+**
|
|
|
+** ^Only changes made directly by the INSERT, UPDATE or DELETE statement are
|
|
|
+** considered - auxiliary changes caused by [CREATE TRIGGER | triggers],
|
|
|
+** [foreign key actions] or [REPLACE] constraint resolution are not counted.
|
|
|
+**
|
|
|
+** Changes to a view that are intercepted by
|
|
|
+** [INSTEAD OF trigger | INSTEAD OF triggers] are not counted. ^The value
|
|
|
+** returned by sqlite3_changes() immediately after an INSERT, UPDATE or
|
|
|
+** DELETE statement run on a view is always zero. Only changes made to real
|
|
|
+** tables are counted.
|
|
|
+**
|
|
|
+** Things are more complicated if the sqlite3_changes() function is
|
|
|
+** executed while a trigger program is running. This may happen if the
|
|
|
+** program uses the [changes() SQL function], or if some other callback
|
|
|
+** function invokes sqlite3_changes() directly. Essentially:
|
|
|
+**
|
|
|
+** <ul>
|
|
|
+** <li> ^(Before entering a trigger program the value returned by
|
|
|
+** sqlite3_changes() function is saved. After the trigger program
|
|
|
+** has finished, the original value is restored.)^
|
|
|
+**
|
|
|
+** <li> ^(Within a trigger program each INSERT, UPDATE and DELETE
|
|
|
+** statement sets the value returned by sqlite3_changes()
|
|
|
+** upon completion as normal. Of course, this value will not include
|
|
|
+** any changes performed by sub-triggers, as the sqlite3_changes()
|
|
|
+** value will be saved and restored after each sub-trigger has run.)^
|
|
|
+** </ul>
|
|
|
+**
|
|
|
+** ^This means that if the changes() SQL function (or similar) is used
|
|
|
+** by the first INSERT, UPDATE or DELETE statement within a trigger, it
|
|
|
+** returns the value as set when the calling statement began executing.
|
|
|
+** ^If it is used by the second or subsequent such statement within a trigger
|
|
|
+** program, the value returned reflects the number of rows modified by the
|
|
|
+** previous INSERT, UPDATE or DELETE statement within the same trigger.
|
|
|
**
|
|
|
** See also the [sqlite3_total_changes()] interface, the
|
|
|
** [count_changes pragma], and the [changes() SQL function].
|
|
|
@@ -1941,20 +1962,17 @@ SQLITE_API int sqlite3_changes(sqlite3*);
|
|
|
/*
|
|
|
** CAPI3REF: Total Number Of Rows Modified
|
|
|
**
|
|
|
-** ^This function returns the number of row changes caused by [INSERT],
|
|
|
-** [UPDATE] or [DELETE] statements since the [database connection] was opened.
|
|
|
-** ^(The count returned by sqlite3_total_changes() includes all changes
|
|
|
-** from all [CREATE TRIGGER | trigger] contexts and changes made by
|
|
|
-** [foreign key actions]. However,
|
|
|
-** the count does not include changes used to implement [REPLACE] constraints,
|
|
|
-** do rollbacks or ABORT processing, or [DROP TABLE] processing. The
|
|
|
-** count does not include rows of views that fire an [INSTEAD OF trigger],
|
|
|
-** though if the INSTEAD OF trigger makes changes of its own, those changes
|
|
|
-** are counted.)^
|
|
|
-** ^The sqlite3_total_changes() function counts the changes as soon as
|
|
|
-** the statement that makes them is completed (when the statement handle
|
|
|
-** is passed to [sqlite3_reset()] or [sqlite3_finalize()]).
|
|
|
-**
|
|
|
+** ^This function returns the total number of rows inserted, modified or
|
|
|
+** deleted by all [INSERT], [UPDATE] or [DELETE] statements completed
|
|
|
+** since the database connection was opened, including those executed as
|
|
|
+** part of trigger programs. ^Executing any other type of SQL statement
|
|
|
+** does not affect the value returned by sqlite3_total_changes().
|
|
|
+**
|
|
|
+** ^Changes made as part of [foreign key actions] are included in the
|
|
|
+** count, but those made as part of REPLACE constraint resolution are
|
|
|
+** not. ^Changes to a view that are intercepted by INSTEAD OF triggers
|
|
|
+** are not counted.
|
|
|
+**
|
|
|
** See also the [sqlite3_changes()] interface, the
|
|
|
** [count_changes pragma], and the [total_changes() SQL function].
|
|
|
**
|
|
|
@@ -2448,13 +2466,14 @@ SQLITE_API sqlite3_int64 sqlite3_memory_highwater(int resetFlag);
|
|
|
** applications to access the same PRNG for other purposes.
|
|
|
**
|
|
|
** ^A call to this routine stores N bytes of randomness into buffer P.
|
|
|
-** ^If N is less than one, then P can be a NULL pointer.
|
|
|
+** ^The P parameter can be a NULL pointer.
|
|
|
**
|
|
|
** ^If this routine has not been previously called or if the previous
|
|
|
-** call had N less than one, then the PRNG is seeded using randomness
|
|
|
-** obtained from the xRandomness method of the default [sqlite3_vfs] object.
|
|
|
-** ^If the previous call to this routine had an N of 1 or more then
|
|
|
-** the pseudo-randomness is generated
|
|
|
+** call had N less than one or a NULL pointer for P, then the PRNG is
|
|
|
+** seeded using randomness obtained from the xRandomness method of
|
|
|
+** the default [sqlite3_vfs] object.
|
|
|
+** ^If the previous call to this routine had an N of 1 or more and a
|
|
|
+** non-NULL P then the pseudo-randomness is generated
|
|
|
** internally and without recourse to the [sqlite3_vfs] xRandomness
|
|
|
** method.
|
|
|
*/
|
|
|
@@ -7447,6 +7466,88 @@ SQLITE_API int sqlite3_vtab_on_conflict(sqlite3 *);
|
|
|
/* #define SQLITE_ABORT 4 // Also an error code */
|
|
|
#define SQLITE_REPLACE 5
|
|
|
|
|
|
+/*
|
|
|
+** CAPI3REF: Prepared Statement Scan Status Opcodes
|
|
|
+** KEYWORDS: {scanstatus options}
|
|
|
+**
|
|
|
+** The following constants can be used for the T parameter to the
|
|
|
+** [sqlite3_stmt_scanstatus(S,X,T,V)] interface. Each constant designates a
|
|
|
+** different metric for sqlite3_stmt_scanstatus() to return.
|
|
|
+**
|
|
|
+** <dl>
|
|
|
+** [[SQLITE_SCANSTAT_NLOOP]] <dt>SQLITE_SCANSTAT_NLOOP</dt>
|
|
|
+** <dd>^The [sqlite3_int64] variable pointed to by the T parameter will be set to the
|
|
|
+** total number of times that the X-th loop has run.</dd>
|
|
|
+**
|
|
|
+** [[SQLITE_SCANSTAT_NVISIT]] <dt>SQLITE_SCANSTAT_NVISIT</dt>
|
|
|
+** <dd>^The [sqlite3_int64] variable pointed to by the T parameter will be set to the
|
|
|
+** total number of rows visited by the X-th loop.</dd>
|
|
|
+**
|
|
|
+** [[SQLITE_SCANSTAT_EST]] <dt>SQLITE_SCANSTAT_EST</dt>
|
|
|
+** <dd>^The [sqlite3_int64] variable pointed to by the T parameter will be set to the
|
|
|
+** query planner's estimate for the number of rows visited for each
|
|
|
+** iteration of the X-th loop. If the query planner's estimate was accurate,
|
|
|
+** then this value should be approximately NVISIT/NLOOP.
|
|
|
+**
|
|
|
+** [[SQLITE_SCANSTAT_NAME]] <dt>SQLITE_SCANSTAT_NAME</dt>
|
|
|
+** <dd>^The "const char *" variable pointed to by the T parameter will be set to
|
|
|
+** a zero-terminated UTF-8 string containing the name of the index or table used
|
|
|
+** for the X-th loop.
|
|
|
+**
|
|
|
+** [[SQLITE_SCANSTAT_EXPLAIN]] <dt>SQLITE_SCANSTAT_EXPLAIN</dt>
|
|
|
+** <dd>^The "const char *" variable pointed to by the T parameter will be set to
|
|
|
+** a zero-terminated UTF-8 string containing the [EXPLAIN QUERY PLAN] description
|
|
|
+** for the X-th loop.
|
|
|
+** </dl>
|
|
|
+*/
|
|
|
+#define SQLITE_SCANSTAT_NLOOP 0
|
|
|
+#define SQLITE_SCANSTAT_NVISIT 1
|
|
|
+#define SQLITE_SCANSTAT_EST 2
|
|
|
+#define SQLITE_SCANSTAT_NAME 3
|
|
|
+#define SQLITE_SCANSTAT_EXPLAIN 4
|
|
|
+
|
|
|
+/*
|
|
|
+** CAPI3REF: Prepared Statement Scan Status
|
|
|
+**
|
|
|
+** Return status data for a single loop within query pStmt.
|
|
|
+**
|
|
|
+** The "iScanStatusOp" parameter determines which status information to return.
|
|
|
+** The "iScanStatusOp" must be one of the [scanstatus options] or the behavior of
|
|
|
+** this interface is undefined.
|
|
|
+** ^The requested measurement is written into a variable pointed to by
|
|
|
+** the "pOut" parameter.
|
|
|
+** Parameter "idx" identifies the specific loop to retrieve statistics for.
|
|
|
+** Loops are numbered starting from zero. ^If idx is out of range - less than
|
|
|
+** zero or greater than or equal to the total number of loops used to implement
|
|
|
+** the statement - a non-zero value is returned and the variable that pOut
|
|
|
+** points to is unchanged.
|
|
|
+**
|
|
|
+** ^Statistics might not be available for all loops in all statements. ^In cases
|
|
|
+** where there exist loops with no available statistics, this function behaves
|
|
|
+** as if the loop did not exist - it returns non-zero and leave the variable
|
|
|
+** that pOut points to unchanged.
|
|
|
+**
|
|
|
+** This API is only available if the library is built with pre-processor
|
|
|
+** symbol [SQLITE_ENABLE_STMT_SCANSTATUS] defined.
|
|
|
+**
|
|
|
+** See also: [sqlite3_stmt_scanstatus_reset()]
|
|
|
+*/
|
|
|
+SQLITE_API SQLITE_EXPERIMENTAL int sqlite3_stmt_scanstatus(
|
|
|
+ sqlite3_stmt *pStmt, /* Prepared statement for which info desired */
|
|
|
+ int idx, /* Index of loop to report on */
|
|
|
+ int iScanStatusOp, /* Information desired. SQLITE_SCANSTAT_* */
|
|
|
+ void *pOut /* Result written here */
|
|
|
+);
|
|
|
+
|
|
|
+/*
|
|
|
+** CAPI3REF: Zero Scan-Status Counters
|
|
|
+**
|
|
|
+** ^Zero all [sqlite3_stmt_scanstatus()] related event counters.
|
|
|
+**
|
|
|
+** This API is only available if the library is built with pre-processor
|
|
|
+** symbol [SQLITE_ENABLE_STMT_SCANSTATUS] defined.
|
|
|
+*/
|
|
|
+SQLITE_API SQLITE_EXPERIMENTAL void sqlite3_stmt_scanstatus_reset(sqlite3_stmt*);
|
|
|
|
|
|
|
|
|
/*
|