1
0
mirror of https://github.com/sqlite/sqlite.git synced 2025-11-12 13:01:09 +03:00

Elaborate on the open-in-read-only fallback behavior of the SQLITE_OPEN_READWRITE flag, per user request. Unrelated trailing EOL whitespace cleanups.

FossilOrigin-Name: 1003144fc192e1531e1bc968d7e1d0ccc7ad31e501180f90e1479565a4abfb96
This commit is contained in:
stephan
2023-01-04 11:57:27 +00:00
parent 5d2a25b254
commit 373d34d610
3 changed files with 73 additions and 68 deletions

View File

@@ -1,5 +1,5 @@
C Remove\sthe\sJS-side\sSQLITE_WASM_DEALLOC\ssanity\scheck\swhich\striggers\sthe\sproblem\smentioned\sin\s[688c5c13d156]\sand\s[ae0196d86ee8],\sfor\sreasons\scovered\sin\sthe\scode\scomments,\sper\sdiscussion\sin\s[forum:e5b20e1feb|forum\spost\se5b20e1feb]. C Elaborate\son\sthe\sopen-in-read-only\sfallback\sbehavior\sof\sthe\sSQLITE_OPEN_READWRITE\sflag,\sper\suser\srequest.\sUnrelated\strailing\sEOL\swhitespace\scleanups.
D 2023-01-04T03:14:06.615 D 2023-01-04T11:57:27.127
F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1
F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea
F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724 F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724
@@ -647,7 +647,7 @@ F src/resolve.c efea4e5fbecfd6d0a9071b0be0d952620991673391b6ffaaf4c277b0bb674633
F src/rowset.c ba9515a922af32abe1f7d39406b9d35730ed65efab9443dc5702693b60854c92 F src/rowset.c ba9515a922af32abe1f7d39406b9d35730ed65efab9443dc5702693b60854c92
F src/select.c 83de67e4857be2866d048c98e93f65461d8a0408ca4ce88fec68ebfe030997ae F src/select.c 83de67e4857be2866d048c98e93f65461d8a0408ca4ce88fec68ebfe030997ae
F src/shell.c.in 01816a1e0eb3a2e9a9a4b11570d68058969c88b2ec5ecaf80c57d6ca1b8d46a4 F src/shell.c.in 01816a1e0eb3a2e9a9a4b11570d68058969c88b2ec5ecaf80c57d6ca1b8d46a4
F src/sqlite.h.in 7982c691e4647071a6df1ef45e7d704613225259414e153939b0928a9952a1ae F src/sqlite.h.in 973f6b2e9a6599b14eec6f88212d83a1d4e888bf62086e46b0580614f78cea7c
F src/sqlite3.rc 5121c9e10c3964d5755191c80dd1180c122fc3a8 F src/sqlite3.rc 5121c9e10c3964d5755191c80dd1180c122fc3a8
F src/sqlite3ext.h c4b9fa7a7e2bcdf850cfeb4b8a91d5ec47b7a00033bc996fd2ee96cbf2741f5f F src/sqlite3ext.h c4b9fa7a7e2bcdf850cfeb4b8a91d5ec47b7a00033bc996fd2ee96cbf2741f5f
F src/sqliteInt.h e0c0fdb6a475c8dcf94c48bc0521c7381ae28239ce9a23d8fbfdea249c0d2899 F src/sqliteInt.h e0c0fdb6a475c8dcf94c48bc0521c7381ae28239ce9a23d8fbfdea249c0d2899
@@ -2067,8 +2067,8 @@ F vsixtest/vsixtest.tcl 6a9a6ab600c25a91a7acc6293828957a386a8a93
F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc
F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e
F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0 F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0
P a19597b4fd2530a89363992b9179f9f3f0621a6e3861a91324f29311aafe09b9 P 65ff3200c6009a1649fc108d7ce36f5c014185ba46bbf98471ec86eaeb572656
R cf7736aed38ba8edc7ed369b784dbcd1 R ff536d5b4bd68ee026a95d2a22179954
U stephan U stephan
Z 0d48cca09eb0bd8b01ad4e4900dbb440 Z 24f9760adb78b1f8854f3748c7f5f544
# Remove this line to create a well-formed Fossil manifest. # Remove this line to create a well-formed Fossil manifest.

View File

@@ -1 +1 @@
65ff3200c6009a1649fc108d7ce36f5c014185ba46bbf98471ec86eaeb572656 1003144fc192e1531e1bc968d7e1d0ccc7ad31e501180f90e1479565a4abfb96

View File

@@ -174,8 +174,8 @@ extern "C" {
** function is provided for use in DLLs since DLL users usually do not have ** function is provided for use in DLLs since DLL users usually do not have
** direct access to string constants within the DLL. ^The ** direct access to string constants within the DLL. ^The
** sqlite3_libversion_number() function returns an integer equal to ** sqlite3_libversion_number() function returns an integer equal to
** [SQLITE_VERSION_NUMBER]. ^(The sqlite3_sourceid() function returns ** [SQLITE_VERSION_NUMBER]. ^(The sqlite3_sourceid() function returns
** a pointer to a string constant whose value is the same as the ** a pointer to a string constant whose value is the same as the
** [SQLITE_SOURCE_ID] C preprocessor macro. Except if SQLite is built ** [SQLITE_SOURCE_ID] C preprocessor macro. Except if SQLite is built
** using an edited copy of [the amalgamation], then the last four characters ** using an edited copy of [the amalgamation], then the last four characters
** of the hash might be different from [SQLITE_SOURCE_ID].)^ ** of the hash might be different from [SQLITE_SOURCE_ID].)^
@@ -190,20 +190,20 @@ int sqlite3_libversion_number(void);
/* /*
** CAPI3REF: Run-Time Library Compilation Options Diagnostics ** CAPI3REF: Run-Time Library Compilation Options Diagnostics
** **
** ^The sqlite3_compileoption_used() function returns 0 or 1 ** ^The sqlite3_compileoption_used() function returns 0 or 1
** indicating whether the specified option was defined at ** indicating whether the specified option was defined at
** compile time. ^The SQLITE_ prefix may be omitted from the ** compile time. ^The SQLITE_ prefix may be omitted from the
** option name passed to sqlite3_compileoption_used(). ** option name passed to sqlite3_compileoption_used().
** **
** ^The sqlite3_compileoption_get() function allows iterating ** ^The sqlite3_compileoption_get() function allows iterating
** over the list of options that were defined at compile time by ** over the list of options that were defined at compile time by
** returning the N-th compile time option string. ^If N is out of range, ** returning the N-th compile time option string. ^If N is out of range,
** sqlite3_compileoption_get() returns a NULL pointer. ^The SQLITE_ ** sqlite3_compileoption_get() returns a NULL pointer. ^The SQLITE_
** prefix is omitted from any strings returned by ** prefix is omitted from any strings returned by
** sqlite3_compileoption_get(). ** sqlite3_compileoption_get().
** **
** ^Support for the diagnostic functions sqlite3_compileoption_used() ** ^Support for the diagnostic functions sqlite3_compileoption_used()
** and sqlite3_compileoption_get() may be omitted by specifying the ** and sqlite3_compileoption_get() may be omitted by specifying the
** [SQLITE_OMIT_COMPILEOPTION_DIAGS] option at compile time. ** [SQLITE_OMIT_COMPILEOPTION_DIAGS] option at compile time.
** **
** See also: SQL functions [sqlite_compileoption_used()] and ** See also: SQL functions [sqlite_compileoption_used()] and
@@ -227,7 +227,7 @@ const char *sqlite3_compileoption_get(int N);
** SQLite can be compiled with or without mutexes. When ** SQLite can be compiled with or without mutexes. When
** the [SQLITE_THREADSAFE] C preprocessor macro is 1 or 2, mutexes ** the [SQLITE_THREADSAFE] C preprocessor macro is 1 or 2, mutexes
** are enabled and SQLite is threadsafe. When the ** are enabled and SQLite is threadsafe. When the
** [SQLITE_THREADSAFE] macro is 0, ** [SQLITE_THREADSAFE] macro is 0,
** the mutexes are omitted. Without the mutexes, it is not safe ** the mutexes are omitted. Without the mutexes, it is not safe
** to use SQLite concurrently from more than one thread. ** to use SQLite concurrently from more than one thread.
** **
@@ -284,14 +284,14 @@ typedef struct sqlite3 sqlite3;
** **
** ^The sqlite3_int64 and sqlite_int64 types can store integer values ** ^The sqlite3_int64 and sqlite_int64 types can store integer values
** between -9223372036854775808 and +9223372036854775807 inclusive. ^The ** between -9223372036854775808 and +9223372036854775807 inclusive. ^The
** sqlite3_uint64 and sqlite_uint64 types can store integer values ** sqlite3_uint64 and sqlite_uint64 types can store integer values
** between 0 and +18446744073709551615 inclusive. ** between 0 and +18446744073709551615 inclusive.
*/ */
#ifdef SQLITE_INT64_TYPE #ifdef SQLITE_INT64_TYPE
typedef SQLITE_INT64_TYPE sqlite_int64; typedef SQLITE_INT64_TYPE sqlite_int64;
# ifdef SQLITE_UINT64_TYPE # ifdef SQLITE_UINT64_TYPE
typedef SQLITE_UINT64_TYPE sqlite_uint64; typedef SQLITE_UINT64_TYPE sqlite_uint64;
# else # else
typedef unsigned SQLITE_INT64_TYPE sqlite_uint64; typedef unsigned SQLITE_INT64_TYPE sqlite_uint64;
# endif # endif
#elif defined(_MSC_VER) || defined(__BORLANDC__) #elif defined(_MSC_VER) || defined(__BORLANDC__)
@@ -323,7 +323,7 @@ typedef sqlite_uint64 sqlite3_uint64;
** resources are deallocated. ** resources are deallocated.
** **
** Ideally, applications should [sqlite3_finalize | finalize] all ** Ideally, applications should [sqlite3_finalize | finalize] all
** [prepared statements], [sqlite3_blob_close | close] all [BLOB handles], and ** [prepared statements], [sqlite3_blob_close | close] all [BLOB handles], and
** [sqlite3_backup_finish | finish] all [sqlite3_backup] objects associated ** [sqlite3_backup_finish | finish] all [sqlite3_backup] objects associated
** with the [sqlite3] object prior to attempting to close the object. ** with the [sqlite3] object prior to attempting to close the object.
** ^If the database connection is associated with unfinalized prepared ** ^If the database connection is associated with unfinalized prepared
@@ -367,7 +367,7 @@ typedef int (*sqlite3_callback)(void*,int,char**, char**);
** The sqlite3_exec() interface is a convenience wrapper around ** The sqlite3_exec() interface is a convenience wrapper around
** [sqlite3_prepare_v2()], [sqlite3_step()], and [sqlite3_finalize()], ** [sqlite3_prepare_v2()], [sqlite3_step()], and [sqlite3_finalize()],
** that allows an application to run multiple statements of SQL ** that allows an application to run multiple statements of SQL
** without having to use a lot of C code. ** without having to use a lot of C code.
** **
** ^The sqlite3_exec() interface runs zero or more UTF-8 encoded, ** ^The sqlite3_exec() interface runs zero or more UTF-8 encoded,
** semicolon-separate SQL statements passed into its 2nd argument, ** semicolon-separate SQL statements passed into its 2nd argument,
@@ -407,7 +407,7 @@ typedef int (*sqlite3_callback)(void*,int,char**, char**);
** from [sqlite3_column_name()]. ** from [sqlite3_column_name()].
** **
** ^If the 2nd parameter to sqlite3_exec() is a NULL pointer, a pointer ** ^If the 2nd parameter to sqlite3_exec() is a NULL pointer, a pointer
** to an empty string, or a pointer that contains only whitespace and/or ** to an empty string, or a pointer that contains only whitespace and/or
** SQL comments, then no SQL statements are evaluated and the database ** SQL comments, then no SQL statements are evaluated and the database
** is not changed. ** is not changed.
** **
@@ -766,7 +766,7 @@ struct sqlite3_file {
** requested lock, then the call to xLock() is a no-op. ** requested lock, then the call to xLock() is a no-op.
** xUnlock() downgrades the database file lock to either SHARED or NONE. ** xUnlock() downgrades the database file lock to either SHARED or NONE.
* If the lock is already at or below the requested lock state, then the call * If the lock is already at or below the requested lock state, then the call
** to xUnlock() is a no-op. ** to xUnlock() is a no-op.
** The xCheckReservedLock() method checks whether any database connection, ** The xCheckReservedLock() method checks whether any database connection,
** either in this process or in some other process, is holding a RESERVED, ** either in this process or in some other process, is holding a RESERVED,
** PENDING, or EXCLUSIVE lock on the file. It returns true ** PENDING, or EXCLUSIVE lock on the file. It returns true
@@ -894,7 +894,7 @@ struct sqlite3_io_methods {
** <li>[[SQLITE_FCNTL_CHUNK_SIZE]] ** <li>[[SQLITE_FCNTL_CHUNK_SIZE]]
** The [SQLITE_FCNTL_CHUNK_SIZE] opcode is used to request that the VFS ** The [SQLITE_FCNTL_CHUNK_SIZE] opcode is used to request that the VFS
** extends and truncates the database file in chunks of a size specified ** extends and truncates the database file in chunks of a size specified
** by the user. The fourth argument to [sqlite3_file_control()] should ** by the user. The fourth argument to [sqlite3_file_control()] should
** point to an integer (type int) containing the new chunk-size to use ** point to an integer (type int) containing the new chunk-size to use
** for the nominated database. Allocating database file space in large ** for the nominated database. Allocating database file space in large
** chunks (say 1MB at a time), may reduce file-system fragmentation and ** chunks (say 1MB at a time), may reduce file-system fragmentation and
@@ -917,24 +917,24 @@ struct sqlite3_io_methods {
** <li>[[SQLITE_FCNTL_SYNC]] ** <li>[[SQLITE_FCNTL_SYNC]]
** The [SQLITE_FCNTL_SYNC] opcode is generated internally by SQLite and ** The [SQLITE_FCNTL_SYNC] opcode is generated internally by SQLite and
** sent to the VFS immediately before the xSync method is invoked on a ** sent to the VFS immediately before the xSync method is invoked on a
** database file descriptor. Or, if the xSync method is not invoked ** database file descriptor. Or, if the xSync method is not invoked
** because the user has configured SQLite with ** because the user has configured SQLite with
** [PRAGMA synchronous | PRAGMA synchronous=OFF] it is invoked in place ** [PRAGMA synchronous | PRAGMA synchronous=OFF] it is invoked in place
** of the xSync method. In most cases, the pointer argument passed with ** of the xSync method. In most cases, the pointer argument passed with
** this file-control is NULL. However, if the database file is being synced ** this file-control is NULL. However, if the database file is being synced
** as part of a multi-database commit, the argument points to a nul-terminated ** as part of a multi-database commit, the argument points to a nul-terminated
** string containing the transactions super-journal file name. VFSes that ** string containing the transactions super-journal file name. VFSes that
** do not need this signal should silently ignore this opcode. Applications ** do not need this signal should silently ignore this opcode. Applications
** should not call [sqlite3_file_control()] with this opcode as doing so may ** should not call [sqlite3_file_control()] with this opcode as doing so may
** disrupt the operation of the specialized VFSes that do require it. ** disrupt the operation of the specialized VFSes that do require it.
** **
** <li>[[SQLITE_FCNTL_COMMIT_PHASETWO]] ** <li>[[SQLITE_FCNTL_COMMIT_PHASETWO]]
** The [SQLITE_FCNTL_COMMIT_PHASETWO] opcode is generated internally by SQLite ** The [SQLITE_FCNTL_COMMIT_PHASETWO] opcode is generated internally by SQLite
** and sent to the VFS after a transaction has been committed immediately ** and sent to the VFS after a transaction has been committed immediately
** but before the database is unlocked. VFSes that do not need this signal ** but before the database is unlocked. VFSes that do not need this signal
** should silently ignore this opcode. Applications should not call ** should silently ignore this opcode. Applications should not call
** [sqlite3_file_control()] with this opcode as doing so may disrupt the ** [sqlite3_file_control()] with this opcode as doing so may disrupt the
** operation of the specialized VFSes that do require it. ** operation of the specialized VFSes that do require it.
** **
** <li>[[SQLITE_FCNTL_WIN32_AV_RETRY]] ** <li>[[SQLITE_FCNTL_WIN32_AV_RETRY]]
** ^The [SQLITE_FCNTL_WIN32_AV_RETRY] opcode is used to configure automatic ** ^The [SQLITE_FCNTL_WIN32_AV_RETRY] opcode is used to configure automatic
@@ -1007,7 +1007,7 @@ struct sqlite3_io_methods {
** upper-most shim only. ** upper-most shim only.
** **
** <li>[[SQLITE_FCNTL_PRAGMA]] ** <li>[[SQLITE_FCNTL_PRAGMA]]
** ^Whenever a [PRAGMA] statement is parsed, an [SQLITE_FCNTL_PRAGMA] ** ^Whenever a [PRAGMA] statement is parsed, an [SQLITE_FCNTL_PRAGMA]
** file control is sent to the open [sqlite3_file] object corresponding ** file control is sent to the open [sqlite3_file] object corresponding
** to the database file to which the pragma statement refers. ^The argument ** to the database file to which the pragma statement refers. ^The argument
** to the [SQLITE_FCNTL_PRAGMA] file control is an array of ** to the [SQLITE_FCNTL_PRAGMA] file control is an array of
@@ -1018,7 +1018,7 @@ struct sqlite3_io_methods {
** of the char** argument point to a string obtained from [sqlite3_mprintf()] ** of the char** argument point to a string obtained from [sqlite3_mprintf()]
** or the equivalent and that string will become the result of the pragma or ** or the equivalent and that string will become the result of the pragma or
** the error message if the pragma fails. ^If the ** the error message if the pragma fails. ^If the
** [SQLITE_FCNTL_PRAGMA] file control returns [SQLITE_NOTFOUND], then normal ** [SQLITE_FCNTL_PRAGMA] file control returns [SQLITE_NOTFOUND], then normal
** [PRAGMA] processing continues. ^If the [SQLITE_FCNTL_PRAGMA] ** [PRAGMA] processing continues. ^If the [SQLITE_FCNTL_PRAGMA]
** file control returns [SQLITE_OK], then the parser assumes that the ** file control returns [SQLITE_OK], then the parser assumes that the
** VFS has handled the PRAGMA itself and the parser generates a no-op ** VFS has handled the PRAGMA itself and the parser generates a no-op
@@ -1058,7 +1058,7 @@ struct sqlite3_io_methods {
** The argument is a pointer to a value of type sqlite3_int64 that ** The argument is a pointer to a value of type sqlite3_int64 that
** is an advisory maximum number of bytes in the file to memory map. The ** is an advisory maximum number of bytes in the file to memory map. The
** pointer is overwritten with the old value. The limit is not changed if ** pointer is overwritten with the old value. The limit is not changed if
** the value originally pointed to is negative, and so the current limit ** the value originally pointed to is negative, and so the current limit
** can be queried by passing in a pointer to a negative number. This ** can be queried by passing in a pointer to a negative number. This
** file-control is used internally to implement [PRAGMA mmap_size]. ** file-control is used internally to implement [PRAGMA mmap_size].
** **
@@ -1102,7 +1102,7 @@ struct sqlite3_io_methods {
** <li>[[SQLITE_FCNTL_RBU]] ** <li>[[SQLITE_FCNTL_RBU]]
** The [SQLITE_FCNTL_RBU] opcode is implemented by the special VFS used by ** The [SQLITE_FCNTL_RBU] opcode is implemented by the special VFS used by
** the RBU extension only. All other VFS should return SQLITE_NOTFOUND for ** the RBU extension only. All other VFS should return SQLITE_NOTFOUND for
** this opcode. ** this opcode.
** **
** <li>[[SQLITE_FCNTL_BEGIN_ATOMIC_WRITE]] ** <li>[[SQLITE_FCNTL_BEGIN_ATOMIC_WRITE]]
** If the [SQLITE_FCNTL_BEGIN_ATOMIC_WRITE] opcode returns SQLITE_OK, then ** If the [SQLITE_FCNTL_BEGIN_ATOMIC_WRITE] opcode returns SQLITE_OK, then
@@ -1119,7 +1119,7 @@ struct sqlite3_io_methods {
** **
** <li>[[SQLITE_FCNTL_COMMIT_ATOMIC_WRITE]] ** <li>[[SQLITE_FCNTL_COMMIT_ATOMIC_WRITE]]
** The [SQLITE_FCNTL_COMMIT_ATOMIC_WRITE] opcode causes all write ** The [SQLITE_FCNTL_COMMIT_ATOMIC_WRITE] opcode causes all write
** operations since the previous successful call to ** operations since the previous successful call to
** [SQLITE_FCNTL_BEGIN_ATOMIC_WRITE] to be performed atomically. ** [SQLITE_FCNTL_BEGIN_ATOMIC_WRITE] to be performed atomically.
** This file control returns [SQLITE_OK] if and only if the writes were ** This file control returns [SQLITE_OK] if and only if the writes were
** all performed successfully and have been committed to persistent storage. ** all performed successfully and have been committed to persistent storage.
@@ -1131,7 +1131,7 @@ struct sqlite3_io_methods {
** **
** <li>[[SQLITE_FCNTL_ROLLBACK_ATOMIC_WRITE]] ** <li>[[SQLITE_FCNTL_ROLLBACK_ATOMIC_WRITE]]
** The [SQLITE_FCNTL_ROLLBACK_ATOMIC_WRITE] opcode causes all write ** The [SQLITE_FCNTL_ROLLBACK_ATOMIC_WRITE] opcode causes all write
** operations since the previous successful call to ** operations since the previous successful call to
** [SQLITE_FCNTL_BEGIN_ATOMIC_WRITE] to be rolled back. ** [SQLITE_FCNTL_BEGIN_ATOMIC_WRITE] to be rolled back.
** ^This file control takes the file descriptor out of batch write mode ** ^This file control takes the file descriptor out of batch write mode
** so that all subsequent write operations are independent. ** so that all subsequent write operations are independent.
@@ -1140,8 +1140,8 @@ struct sqlite3_io_methods {
** **
** <li>[[SQLITE_FCNTL_LOCK_TIMEOUT]] ** <li>[[SQLITE_FCNTL_LOCK_TIMEOUT]]
** The [SQLITE_FCNTL_LOCK_TIMEOUT] opcode is used to configure a VFS ** The [SQLITE_FCNTL_LOCK_TIMEOUT] opcode is used to configure a VFS
** to block for up to M milliseconds before failing when attempting to ** to block for up to M milliseconds before failing when attempting to
** obtain a file lock using the xLock or xShmLock methods of the VFS. ** obtain a file lock using the xLock or xShmLock methods of the VFS.
** The parameter is a pointer to a 32-bit signed integer that contains ** The parameter is a pointer to a 32-bit signed integer that contains
** the value that M is to be set to. Before returning, the 32-bit signed ** the value that M is to be set to. Before returning, the 32-bit signed
** integer is overwritten with the previous value of M. ** integer is overwritten with the previous value of M.
@@ -1345,14 +1345,14 @@ typedef const char *sqlite3_filename;
** the [sqlite3_file] can safely store a pointer to the ** the [sqlite3_file] can safely store a pointer to the
** filename if it needs to remember the filename for some reason. ** filename if it needs to remember the filename for some reason.
** If the zFilename parameter to xOpen is a NULL pointer then xOpen ** If the zFilename parameter to xOpen is a NULL pointer then xOpen
** must invent its own temporary name for the file. ^Whenever the ** must invent its own temporary name for the file. ^Whenever the
** xFilename parameter is NULL it will also be the case that the ** xFilename parameter is NULL it will also be the case that the
** flags parameter will include [SQLITE_OPEN_DELETEONCLOSE]. ** flags parameter will include [SQLITE_OPEN_DELETEONCLOSE].
** **
** The flags argument to xOpen() includes all bits set in ** The flags argument to xOpen() includes all bits set in
** the flags argument to [sqlite3_open_v2()]. Or if [sqlite3_open()] ** the flags argument to [sqlite3_open_v2()]. Or if [sqlite3_open()]
** or [sqlite3_open16()] is used, then flags includes at least ** or [sqlite3_open16()] is used, then flags includes at least
** [SQLITE_OPEN_READWRITE] | [SQLITE_OPEN_CREATE]. ** [SQLITE_OPEN_READWRITE] | [SQLITE_OPEN_CREATE].
** If xOpen() opens a file read-only then it sets *pOutFlags to ** If xOpen() opens a file read-only then it sets *pOutFlags to
** include [SQLITE_OPEN_READONLY]. Other bits in *pOutFlags may be set. ** include [SQLITE_OPEN_READONLY]. Other bits in *pOutFlags may be set.
** **
@@ -1394,10 +1394,10 @@ typedef const char *sqlite3_filename;
** ^The [SQLITE_OPEN_EXCLUSIVE] flag is always used in conjunction ** ^The [SQLITE_OPEN_EXCLUSIVE] flag is always used in conjunction
** with the [SQLITE_OPEN_CREATE] flag, which are both directly ** with the [SQLITE_OPEN_CREATE] flag, which are both directly
** analogous to the O_EXCL and O_CREAT flags of the POSIX open() ** analogous to the O_EXCL and O_CREAT flags of the POSIX open()
** API. The SQLITE_OPEN_EXCLUSIVE flag, when paired with the ** API. The SQLITE_OPEN_EXCLUSIVE flag, when paired with the
** SQLITE_OPEN_CREATE, is used to indicate that file should always ** SQLITE_OPEN_CREATE, is used to indicate that file should always
** be created, and that it is an error if it already exists. ** be created, and that it is an error if it already exists.
** It is <i>not</i> used to indicate the file should be opened ** It is <i>not</i> used to indicate the file should be opened
** for exclusive access. ** for exclusive access.
** **
** ^At least szOsFile bytes of memory are allocated by SQLite ** ^At least szOsFile bytes of memory are allocated by SQLite
@@ -1421,7 +1421,7 @@ typedef const char *sqlite3_filename;
** non-zero error code if there is an I/O error or if the name of ** non-zero error code if there is an I/O error or if the name of
** the file given in the second argument is illegal. If SQLITE_OK ** the file given in the second argument is illegal. If SQLITE_OK
** is returned, then non-zero or zero is written into *pResOut to indicate ** is returned, then non-zero or zero is written into *pResOut to indicate
** whether or not the file is accessible. ** whether or not the file is accessible.
** **
** ^SQLite will always allocate at least mxPathname+1 bytes for the ** ^SQLite will always allocate at least mxPathname+1 bytes for the
** output buffer xFullPathname. The exact size of the output buffer ** output buffer xFullPathname. The exact size of the output buffer
@@ -1441,16 +1441,16 @@ typedef const char *sqlite3_filename;
** method returns a Julian Day Number for the current date and time as ** method returns a Julian Day Number for the current date and time as
** a floating point value. ** a floating point value.
** ^The xCurrentTimeInt64() method returns, as an integer, the Julian ** ^The xCurrentTimeInt64() method returns, as an integer, the Julian
** Day Number multiplied by 86400000 (the number of milliseconds in ** Day Number multiplied by 86400000 (the number of milliseconds in
** a 24-hour day). ** a 24-hour day).
** ^SQLite will use the xCurrentTimeInt64() method to get the current ** ^SQLite will use the xCurrentTimeInt64() method to get the current
** date and time if that method is available (if iVersion is 2 or ** date and time if that method is available (if iVersion is 2 or
** greater and the function pointer is not NULL) and will fall back ** greater and the function pointer is not NULL) and will fall back
** to xCurrentTime() if xCurrentTimeInt64() is unavailable. ** to xCurrentTime() if xCurrentTimeInt64() is unavailable.
** **
** ^The xSetSystemCall(), xGetSystemCall(), and xNestSystemCall() interfaces ** ^The xSetSystemCall(), xGetSystemCall(), and xNestSystemCall() interfaces
** are not used by the SQLite core. These optional interfaces are provided ** are not used by the SQLite core. These optional interfaces are provided
** by some VFSes to facilitate testing of the VFS code. By overriding ** by some VFSes to facilitate testing of the VFS code. By overriding
** system calls with functions under its control, a test program can ** system calls with functions under its control, a test program can
** simulate faults and error conditions that would otherwise be difficult ** simulate faults and error conditions that would otherwise be difficult
** or impossible to induce. The set of system calls that can be overridden ** or impossible to induce. The set of system calls that can be overridden
@@ -1541,7 +1541,7 @@ struct sqlite3_vfs {
** </ul> ** </ul>
** **
** When unlocking, the same SHARED or EXCLUSIVE flag must be supplied as ** When unlocking, the same SHARED or EXCLUSIVE flag must be supplied as
** was given on the corresponding lock. ** was given on the corresponding lock.
** **
** The xShmLock method can transition between unlocked and SHARED or ** The xShmLock method can transition between unlocked and SHARED or
** between unlocked and EXCLUSIVE. It cannot transition between SHARED ** between unlocked and EXCLUSIVE. It cannot transition between SHARED
@@ -1704,7 +1704,7 @@ int sqlite3_db_config(sqlite3*, int op, ...);
** This object is used in only one place in the SQLite interface. ** This object is used in only one place in the SQLite interface.
** A pointer to an instance of this object is the argument to ** A pointer to an instance of this object is the argument to
** [sqlite3_config()] when the configuration option is ** [sqlite3_config()] when the configuration option is
** [SQLITE_CONFIG_MALLOC] or [SQLITE_CONFIG_GETMALLOC]. ** [SQLITE_CONFIG_MALLOC] or [SQLITE_CONFIG_GETMALLOC].
** By creating an instance of this object ** By creating an instance of this object
** and passing it to [sqlite3_config]([SQLITE_CONFIG_MALLOC]) ** and passing it to [sqlite3_config]([SQLITE_CONFIG_MALLOC])
** during configuration, an application can specify an alternative ** during configuration, an application can specify an alternative
@@ -1827,7 +1827,7 @@ struct sqlite3_mem_methods {
** SQLITE_CONFIG_SERIALIZED configuration option.</dd> ** SQLITE_CONFIG_SERIALIZED configuration option.</dd>
** **
** [[SQLITE_CONFIG_MALLOC]] <dt>SQLITE_CONFIG_MALLOC</dt> ** [[SQLITE_CONFIG_MALLOC]] <dt>SQLITE_CONFIG_MALLOC</dt>
** <dd> ^(The SQLITE_CONFIG_MALLOC option takes a single argument which is ** <dd> ^(The SQLITE_CONFIG_MALLOC option takes a single argument which is
** a pointer to an instance of the [sqlite3_mem_methods] structure. ** a pointer to an instance of the [sqlite3_mem_methods] structure.
** The argument specifies ** The argument specifies
** alternative low-level memory allocation routines to be used in place of ** alternative low-level memory allocation routines to be used in place of
@@ -1878,7 +1878,7 @@ struct sqlite3_mem_methods {
** [[SQLITE_CONFIG_PAGECACHE]] <dt>SQLITE_CONFIG_PAGECACHE</dt> ** [[SQLITE_CONFIG_PAGECACHE]] <dt>SQLITE_CONFIG_PAGECACHE</dt>
** <dd> ^The SQLITE_CONFIG_PAGECACHE option specifies a memory pool ** <dd> ^The SQLITE_CONFIG_PAGECACHE option specifies a memory pool
** that SQLite can use for the database page cache with the default page ** that SQLite can use for the database page cache with the default page
** cache implementation. ** cache implementation.
** This configuration option is a no-op if an application-defined page ** This configuration option is a no-op if an application-defined page
** cache implementation is loaded using the [SQLITE_CONFIG_PCACHE2]. ** cache implementation is loaded using the [SQLITE_CONFIG_PCACHE2].
** ^There are three arguments to SQLITE_CONFIG_PAGECACHE: A pointer to ** ^There are three arguments to SQLITE_CONFIG_PAGECACHE: A pointer to
@@ -1906,7 +1906,7 @@ struct sqlite3_mem_methods {
** additional cache line. </dd> ** additional cache line. </dd>
** **
** [[SQLITE_CONFIG_HEAP]] <dt>SQLITE_CONFIG_HEAP</dt> ** [[SQLITE_CONFIG_HEAP]] <dt>SQLITE_CONFIG_HEAP</dt>
** <dd> ^The SQLITE_CONFIG_HEAP option specifies a static memory buffer ** <dd> ^The SQLITE_CONFIG_HEAP option specifies a static memory buffer
** that SQLite will use for all of its dynamic memory allocation needs ** that SQLite will use for all of its dynamic memory allocation needs
** beyond those provided for by [SQLITE_CONFIG_PAGECACHE]. ** beyond those provided for by [SQLITE_CONFIG_PAGECACHE].
** ^The SQLITE_CONFIG_HEAP option is only available if SQLite is compiled ** ^The SQLITE_CONFIG_HEAP option is only available if SQLite is compiled
@@ -1961,7 +1961,7 @@ struct sqlite3_mem_methods {
** configuration on individual connections.)^ </dd> ** configuration on individual connections.)^ </dd>
** **
** [[SQLITE_CONFIG_PCACHE2]] <dt>SQLITE_CONFIG_PCACHE2</dt> ** [[SQLITE_CONFIG_PCACHE2]] <dt>SQLITE_CONFIG_PCACHE2</dt>
** <dd> ^(The SQLITE_CONFIG_PCACHE2 option takes a single argument which is ** <dd> ^(The SQLITE_CONFIG_PCACHE2 option takes a single argument which is
** a pointer to an [sqlite3_pcache_methods2] object. This object specifies ** a pointer to an [sqlite3_pcache_methods2] object. This object specifies
** the interface to a custom page cache implementation.)^ ** the interface to a custom page cache implementation.)^
** ^SQLite makes a copy of the [sqlite3_pcache_methods2] object.</dd> ** ^SQLite makes a copy of the [sqlite3_pcache_methods2] object.</dd>
@@ -1975,7 +1975,7 @@ struct sqlite3_mem_methods {
** <dd> The SQLITE_CONFIG_LOG option is used to configure the SQLite ** <dd> The SQLITE_CONFIG_LOG option is used to configure the SQLite
** global [error log]. ** global [error log].
** (^The SQLITE_CONFIG_LOG option takes two arguments: a pointer to a ** (^The SQLITE_CONFIG_LOG option takes two arguments: a pointer to a
** function with a call signature of void(*)(void*,int,const char*), ** function with a call signature of void(*)(void*,int,const char*),
** and a pointer to void. ^If the function pointer is not NULL, it is ** and a pointer to void. ^If the function pointer is not NULL, it is
** invoked by [sqlite3_log()] to process each logging event. ^If the ** invoked by [sqlite3_log()] to process each logging event. ^If the
** function pointer is NULL, the [sqlite3_log()] interface becomes a no-op. ** function pointer is NULL, the [sqlite3_log()] interface becomes a no-op.
@@ -2084,7 +2084,7 @@ struct sqlite3_mem_methods {
** [[SQLITE_CONFIG_STMTJRNL_SPILL]] ** [[SQLITE_CONFIG_STMTJRNL_SPILL]]
** <dt>SQLITE_CONFIG_STMTJRNL_SPILL ** <dt>SQLITE_CONFIG_STMTJRNL_SPILL
** <dd>^The SQLITE_CONFIG_STMTJRNL_SPILL option takes a single parameter which ** <dd>^The SQLITE_CONFIG_STMTJRNL_SPILL option takes a single parameter which
** becomes the [statement journal] spill-to-disk threshold. ** becomes the [statement journal] spill-to-disk threshold.
** [Statement journals] are held in memory until their size (in bytes) ** [Statement journals] are held in memory until their size (in bytes)
** exceeds this threshold, at which point they are written to disk. ** exceeds this threshold, at which point they are written to disk.
** Or if the threshold is -1, statement journals are always held ** Or if the threshold is -1, statement journals are always held
@@ -2106,7 +2106,7 @@ struct sqlite3_mem_methods {
** than the configured sorter-reference size threshold - then a reference ** than the configured sorter-reference size threshold - then a reference
** is stored in each sorted record and the required column values loaded ** is stored in each sorted record and the required column values loaded
** from the database as records are returned in sorted order. The default ** from the database as records are returned in sorted order. The default
** value for this option is to never use this optimization. Specifying a ** value for this option is to never use this optimization. Specifying a
** negative value for this option restores the default behaviour. ** negative value for this option restores the default behaviour.
** This option is only available if SQLite is compiled with the ** This option is only available if SQLite is compiled with the
** [SQLITE_ENABLE_SORTER_REFERENCES] compile-time option. ** [SQLITE_ENABLE_SORTER_REFERENCES] compile-time option.
@@ -2134,7 +2134,7 @@ struct sqlite3_mem_methods {
#define SQLITE_CONFIG_MEMSTATUS 9 /* boolean */ #define SQLITE_CONFIG_MEMSTATUS 9 /* boolean */
#define SQLITE_CONFIG_MUTEX 10 /* sqlite3_mutex_methods* */ #define SQLITE_CONFIG_MUTEX 10 /* sqlite3_mutex_methods* */
#define SQLITE_CONFIG_GETMUTEX 11 /* sqlite3_mutex_methods* */ #define SQLITE_CONFIG_GETMUTEX 11 /* sqlite3_mutex_methods* */
/* previously SQLITE_CONFIG_CHUNKALLOC 12 which is now unused. */ /* previously SQLITE_CONFIG_CHUNKALLOC 12 which is now unused. */
#define SQLITE_CONFIG_LOOKASIDE 13 /* int int */ #define SQLITE_CONFIG_LOOKASIDE 13 /* int int */
#define SQLITE_CONFIG_PCACHE 14 /* no-op */ #define SQLITE_CONFIG_PCACHE 14 /* no-op */
#define SQLITE_CONFIG_GETPCACHE 15 /* no-op */ #define SQLITE_CONFIG_GETPCACHE 15 /* no-op */
@@ -2169,7 +2169,7 @@ struct sqlite3_mem_methods {
** <dl> ** <dl>
** [[SQLITE_DBCONFIG_LOOKASIDE]] ** [[SQLITE_DBCONFIG_LOOKASIDE]]
** <dt>SQLITE_DBCONFIG_LOOKASIDE</dt> ** <dt>SQLITE_DBCONFIG_LOOKASIDE</dt>
** <dd> ^This option takes three additional arguments that determine the ** <dd> ^This option takes three additional arguments that determine the
** [lookaside memory allocator] configuration for the [database connection]. ** [lookaside memory allocator] configuration for the [database connection].
** ^The first argument (the third parameter to [sqlite3_db_config()] is a ** ^The first argument (the third parameter to [sqlite3_db_config()] is a
** pointer to a memory buffer to use for lookaside memory. ** pointer to a memory buffer to use for lookaside memory.
@@ -2187,7 +2187,7 @@ struct sqlite3_mem_methods {
** when the "current value" returned by ** when the "current value" returned by
** [sqlite3_db_status](D,[SQLITE_DBSTATUS_LOOKASIDE_USED],...) is zero. ** [sqlite3_db_status](D,[SQLITE_DBSTATUS_LOOKASIDE_USED],...) is zero.
** Any attempt to change the lookaside memory configuration when lookaside ** Any attempt to change the lookaside memory configuration when lookaside
** memory is in use leaves the configuration unchanged and returns ** memory is in use leaves the configuration unchanged and returns
** [SQLITE_BUSY].)^</dd> ** [SQLITE_BUSY].)^</dd>
** **
** [[SQLITE_DBCONFIG_ENABLE_FKEY]] ** [[SQLITE_DBCONFIG_ENABLE_FKEY]]
@@ -3394,7 +3394,7 @@ void sqlite3_progress_handler(sqlite3*, int, int(*)(void*), void*);
** CAPI3REF: Opening A New Database Connection ** CAPI3REF: Opening A New Database Connection
** CONSTRUCTOR: sqlite3 ** CONSTRUCTOR: sqlite3
** **
** ^These routines open an SQLite database file as specified by the ** ^These routines open an SQLite database file as specified by the
** filename argument. ^The filename argument is interpreted as UTF-8 for ** filename argument. ^The filename argument is interpreted as UTF-8 for
** sqlite3_open() and sqlite3_open_v2() and as UTF-16 in the native byte ** sqlite3_open() and sqlite3_open_v2() and as UTF-16 in the native byte
** order for sqlite3_open16(). ^(A [database connection] handle is usually ** order for sqlite3_open16(). ^(A [database connection] handle is usually
@@ -3423,13 +3423,18 @@ void sqlite3_progress_handler(sqlite3*, int, int(*)(void*), void*);
** **
** <dl> ** <dl>
** ^(<dt>[SQLITE_OPEN_READONLY]</dt> ** ^(<dt>[SQLITE_OPEN_READONLY]</dt>
** <dd>The database is opened in read-only mode. If the database does not ** <dd>The database is opened in read-only mode. If the database does
** already exist, an error is returned.</dd>)^ ** not already exist, an error is returned.</dd>)^
** **
** ^(<dt>[SQLITE_OPEN_READWRITE]</dt> ** ^(<dt>[SQLITE_OPEN_READWRITE]</dt>
** <dd>The database is opened for reading and writing if possible, or reading ** <dd>The database is opened for reading and writing if possible, or
** only if the file is write protected by the operating system. In either ** reading only if the file is write protected by the operating
** case the database must already exist, otherwise an error is returned.</dd>)^ ** system. In either case the database must already exist, otherwise
** an error is returned. For historical reasons, if opening in
** read-write mode fails due to OS-level permissions, an attempt is
** made to open it in read-only mode. [sqlite3_db_readonly()] can be
** used to determine whether the database is actually
** read-write.</dd>)^
** **
** ^(<dt>[SQLITE_OPEN_READWRITE] | [SQLITE_OPEN_CREATE]</dt> ** ^(<dt>[SQLITE_OPEN_READWRITE] | [SQLITE_OPEN_CREATE]</dt>
** <dd>The database is opened for reading and writing, and is created if ** <dd>The database is opened for reading and writing, and is created if