Beginning attempts at casting the sqlite.h.in documentation into

formal requirements. (CVS 4585)

FossilOrigin-Name: 2ea78d2cbd86edda6f998fbb364800d3ecf76479
This commit is contained in:
drh 2007-12-01 19:23:19 +00:00
parent afbd06bb93
commit 4dd022aba8
3 changed files with 157 additions and 99 deletions

View File

@ -1,5 +1,5 @@
C Bug\sfix\sto\sMakefile.in\sto\sallow\sit\sto\swork\swith\smingw.\s(CVS\s4584)
D 2007-12-01T09:32:54
C Beginning\sattempts\sat\scasting\sthe\ssqlite.h.in\sdocumentation\sinto\nformal\srequirements.\s(CVS\s4585)
D 2007-12-01T19:23:20
F Makefile.arm-wince-mingw32ce-gcc ac5f7b2cef0cd850d6f755ba6ee4ab961b1fadf7
F Makefile.in 44c3179a7dcf801bb49e2b523c500de513467ff5
F Makefile.linux-gcc d53183f4aa6a9192d249731c90dbdffbd2c68654
@ -134,7 +134,7 @@ F src/random.c 4a22746501bf36b0a088c66e38dde5daba6a35da
F src/select.c 7c0ab94b8f287eb94fdb1eb101be603832ecfc34
F src/server.c 087b92a39d883e3fa113cae259d64e4c7438bc96
F src/shell.c c97be281cfc3dcb14902f45e4b16f20038eb83ff
F src/sqlite.h.in 0d6d4b9d18f1d0b058a7a543ffa777bd5fbf4a99
F src/sqlite.h.in 44ae290a261b4498b921ed45f0eff16a72245c9b
F src/sqlite3ext.h a93f59cdee3638dc0c9c086f80df743a4e68c3cb
F src/sqliteInt.h f5d5b5f0dcfcd2098131c57c08ece6e314e47697
F src/sqliteLimit.h 15ffe2116746c27ace2b428a26a4fcd6dba6fa65
@ -595,7 +595,7 @@ F www/tclsqlite.tcl 8be95ee6dba05eabcd27a9d91331c803f2ce2130
F www/vdbe.tcl 87a31ace769f20d3627a64fa1fade7fed47b90d0
F www/version3.tcl 890248cf7b70e60c383b0e84d77d5132b3ead42b
F www/whentouse.tcl fc46eae081251c3c181bd79c5faef8195d7991a5
P b829a64515e88e83aecd339342bad3b140c86bb0
R 67436f0cc595ee00eb2a2a76c9d30ebf
P fdca98d1eb44c05ffb3c42acb9f87f57460c4cc8
R 3756a1c3115d4376eaeab07df26a7961
U drh
Z 748592aeb7ad96c8527969d784f95f97
Z 83858b2badc05c58fd14426d0ed4fe8f

View File

@ -1 +1 @@
fdca98d1eb44c05ffb3c42acb9f87f57460c4cc8
2ea78d2cbd86edda6f998fbb364800d3ecf76479

View File

@ -30,7 +30,20 @@
** the version number) and changes its name to "sqlite3.h" as
** part of the build process.
**
** @(#) $Id: sqlite.h.in,v 1.272 2007/11/30 01:06:17 drh Exp $
** This file is also used to generate some (but not all) of the formal
** requirements for SQLite. To this end, "shall" language is used.
** Requirements are specified as follows:
**
** {F00000} ... shall .... {EX} commentary {END}
**
** The requirement number comes first and is enclosed in curly
** braces. The F prefix identifies functional requirements.
** The requirement consists of all text up through the next
** {...} mark or until the end of the comment. Text following
** {EX} is an explanatory amplification of the preceding requirement.
** Both the {EX} and the {END} are optional.
**
** @(#) $Id: sqlite.h.in,v 1.273 2007/12/01 19:23:20 drh Exp $
*/
#ifndef _SQLITE3_H_
#define _SQLITE3_H_
@ -65,14 +78,12 @@ extern "C" {
/*
** CAPI3REF: Compile-Time Library Version Numbers {F10100}
**
** {F10101} The version of the SQLite library is contained in the sqlite3.h
** header file in a #define named SQLITE_VERSION. {F10102} The SQLITE_VERSION
** macro resolves to a string constant.
**
** {F10103} The format of the SQLITE_VERSION string is "X.Y.Z", where
** X is the major version number, Y is the minor version number and Z
** is the release number. The X.Y.Z might be followed by "alpha" or "beta".
** For example "3.1.1beta".
** {F10101} The SQLITE_VERSION #define in the sqlite3.h header file
** shall resolve to a string constant that identifies the SQLite library
** version in the format "X.Y.Z", where
** X is the major version number, Y is the minor version number, and Z
** is the release number or the release number followed by text "alpha"
** or "beta". {EX}
**
** The X value is always 3 in SQLite. The X value only changes when
** backwards compatibility is broken and we intend to never break
@ -81,11 +92,14 @@ extern "C" {
** but not backwards compatible. The Z value is incremented with
** each release but resets back to 0 when Y is incremented.
**
** {F10104} The #define named SQLITE_VERSION_NUMBER is an integer with
** the value (X*1000000 + Y*1000 + Z). For example, for version "3.5.3",
** SQLITE_VERSION_NUMBER is set to 3005003. To detect if they are using
** version 3.5.3 or greater at compile time, programs may use the test
** (SQLITE_VERSION_NUMBER>=3005003). {END}
** {F10104} The #define named SQLITE_VERSION_NUMBER shall resolve to
** an integer constant with
** the value (X*1000000 + Y*1000 + Z) where X, Y and Z are same as in
** the SQLITE_VERSION #define, though without the optional "alpha"
** or "beta" text on the end of Z. {EX} For example, for version "3.5.3",
** SQLITE_VERSION_NUMBER is set to 3005003. A test like
** (SQLITE_VERSION_NUMBER>=3005003) can be used to verify at
** compile-time that the SQLite version is 3.5.3 or later. {END}
**
** See also: [sqlite3_libversion()] and [sqlite3_libversion_number()].
*/
@ -95,19 +109,20 @@ extern "C" {
/*
** CAPI3REF: Run-Time Library Version Numbers {F10110}
**
** {F10111} The sqlite3_libversion() and sqlite3_libversion_number()
** routines return values equivalent to the header constants
** [SQLITE_VERSION] and [SQLITE_VERSION_NUMBER]. The values returned
** by this routines should only be different from the header values
** if you compile your program using an sqlite3.h header from a
** different version of SQLite that the version of the library you
** link against.
** {F10111} The sqlite3_libversion_number() interface shall return
** the value SQLITE_VERSION_NUMBER. {EX}
** Cautious programmers may want to put add code to
** their application that compares the value returned from
** sqlite3_libversion_number() against SQLITE_VERSION_NUMBER from
** the header, in order to insure that the library and header file
** are from the same release.
**
** {F10112} The sqlite3_version[] string constant contains the text of the
** [SQLITE_VERSION] string. The sqlite3_libversion() function returns
** a pointer to the sqlite3_version[] string constant. The function
** is provided for DLL users who can only access functions and not
** constants within the DLL.
** {F10112} The sqlite3_version[] string constant shall contain the text
** of the [SQLITE_VERSION] #define. {F10113} The sqlite3_libversion()
** function shall return a pointer to the sqlite3_version[] string
** constant. {EX} The sqlite3_libversion() function is provided for
** DLL users who can only access functions and not constants within
** the DLL and thus cannot access the sqlite3_version[] string directly.
*/
SQLITE_EXTERN const char sqlite3_version[];
const char *sqlite3_libversion(void);
@ -116,11 +131,9 @@ int sqlite3_libversion_number(void);
/*
** CAPI3REF: Test To See If The Library Is Threadsafe {F10200}
**
** {F10201} The sqlite3_threadsafe() routine returns TRUE (nonzero)
** if SQLite was compiled with
** all of its mutexes enabled and is thus threadsafe. It returns
** zero if the particular build is for single-threaded operation
** only.
** {F10201} The sqlite3_threadsafe() routine shall return TRUE (nonzero)
** if SQLite was compiled its mutexes enabled and FALSE (zero) if
** mutexes are disabled. {EX}
**
** Really all this routine does is return true if SQLite was compiled
** with the -DSQLITE_THREADSAFE=1 option and false if
@ -131,10 +144,7 @@ int sqlite3_libversion_number(void);
** threadsafe, then clearly the combination will not be threadsafe
** either. Hence, this routine never reports that the library
** is guaranteed to be threadsafe, only when it is guaranteed not
** to be.
**
** This is an experimental API and may go away or change in future
** releases.
** to be. {END}
*/
int sqlite3_threadsafe(void);
@ -161,6 +171,13 @@ typedef struct sqlite3 sqlite3;
**
** Many SQLite interface functions require a 64-bit integer arguments.
** Those interfaces are declared using this typedef.
**
** {F10301} Values of type sqlite_int64 or sqlite3_int64 shall be
** 64-bit twos-complement integers. {F10302} Values of type
** sqlite_uint64 or sqlite3_uint64 shall be 64-bit unsigned integers. {END}
** The sqlite3_int64 and sqlite3_uint64 typedefs are preferred.
** The sqlite_int64 and sqlite_uint64 typedefs are maintained for
** backwards compatibility only.
*/
#ifdef SQLITE_INT64_TYPE
typedef SQLITE_INT64_TYPE sqlite_int64;
@ -186,20 +203,28 @@ typedef sqlite_uint64 sqlite3_uint64;
/*
** CAPI3REF: Closing A Database Connection {F11100}
**
** {F11101} The sqlite3_close() interface is the destructor for
** the [sqlite3] object.
** The sqlite3_close() interface is the destructor for the [sqlite3] object.
** {F11101} A successful call to sqlite3_close() shall return SQLITE_OK.
** {F11102} A successful call to sqlite3_close() shall cause all database
** files associated with the [sqlite3] object to be closed and shall
** cause resources
** associated with the [sqlite3] object to be released.
** {F11103} A successful call to sqlite3_close()
** shall cause any pending transaction on the [sqlite3] object to be
** rolled back. {END}
**
** {F11102} All SQL statements prepared using [sqlite3_prepare_v2()] or
** All SQL statements prepared using [sqlite3_prepare_v2()] or
** [sqlite3_prepare16_v2()] must be destroyed using [sqlite3_finalize()]
** before sqlite3_close() is called. Otherwise, sqlite3_close() returns
** SQLITE_BUSY and database connection remains open.
** before sqlite3_close() is called. {F11104} If sqlite3_close() is
** called on a connection that has unfinalized [sqlite3_stmt] objects
** then sqlite3_close() shall return SQLITE_BUSY and the database
** connection shall remain open. {END}
**
** {U11103} Calling sqlite3_close on a database connection that has
** already been closed results in undefined behavior. {U11104} If
** {U11105} Calling sqlite3_close() on a database connection that has
** already been closed results in undefined behavior. {U11106} If
** other interfaces that reference the same database connection are
** pending (either in the same thread or in different threads) when
** sqlite3_close() is called, then the behavior is undefined and is
** almost certainly undesirable.
** sqlite3_close() is called, then the behavior is undefined.
*/
int sqlite3_close(sqlite3 *);
@ -211,47 +236,74 @@ int sqlite3_close(sqlite3 *);
typedef int (*sqlite3_callback)(void*,int,char**, char**);
/*
** CAPI3REF: One-Step Query Execution Interface
** CAPI3REF: One-Step Query Execution Interface {F11200}
**
** This interface is used to do a one-time evaluatation of zero
** or more SQL statements. UTF-8 text of the SQL statements to
** be evaluted is passed in as the second parameter. The statements
** are prepared one by one using [sqlite3_prepare()], evaluated
** using [sqlite3_step()], then destroyed using [sqlite3_finalize()].
** The sqlite3_exec() interface runs zero or more SQL statements
** passed as the 2nd parameter. The optional callback in the third parameter
** is invoked once for each row of result generated by the SQL statements.
** If an error occurs, sqlite3_exec() returns an appropriate error code
** and writes an error message into *errmsg if errmsg is not NULL.
**
** If one or more of the SQL statements are queries, then
** the callback function specified by the 3rd parameter is
** invoked once for each row of the query result. This callback
** should normally return 0. If the callback returns a non-zero
** value then the query is aborted, all subsequent SQL statements
** are skipped and the sqlite3_exec() function returns the [SQLITE_ABORT].
** <b>Details:</b>
**
** The 4th parameter to this interface is an arbitrary pointer that is
** passed through to the callback function as its first parameter.
** {F11201} The sqlite3_exec() interface shall evaluate semicolon separated
** UTF-8 encoded SQL statements passed in as the second argument,
** in order, until either all statements have been evaluated
** or until an error or interrupt occurs.
** {EX} The statements are prepared one by one using [sqlite3_prepare()],
** evaluated using [sqlite3_step()], then destroyed using [sqlite3_finalize()].
** {F11202} The sqlite3_exec() interface shall evaluate SQL statements using
** the database connection passed in as the first parameter.
**
** The 2nd parameter to the callback function is the number of
** columns in the query result. The 3rd parameter to the callback
** is an array of strings holding the values for each column
** as extracted using [sqlite3_column_text()].
** The 4th parameter to the callback is an array of strings
** obtained using [sqlite3_column_name()] and holding
** the names of each column.
** {F11203} The sqlite3_exec() interface shall retry statements
** that give an SQLITE_SCHEMA error and shall proceed normally
** if the retry works, or shall halt and return SQLITE_SCHEMA if
** the retry fails.
**
** The callback function may be NULL, even for queries. A NULL
** callback is not an error. It just means that no callback
** {F11204} If the 3rd parameter to sqlite3_exec() is not NULL then
** sqlite3_exec() shall invoke the callback function specified by
** that parameter once for each row in the result set of every query
** that sqlite3_exec() evaluates. {END} This callback
** should normally return 0. {F11205} If the callback on
** sqlite3_exec() returns a non-zero value then the query being
** evaluated shall abort and all subsequent SQL statements in the
** 2nd parameter to sqlite3_exec() shall be
** skipped and the sqlite3_exec() function shall return the [SQLITE_ABORT].
**
** {F11206} The sqlite3_exec() interface shall pass its 4th
** parameter through as the 1st parameter to its callback function.
**
** {F11207} The sqlite3_exec() routine shall cause the 2nd parameter
** to its callback function to be the number of columns in the current
** row of the query result.
** {F11206} The sqlite3_exec() routine shall cause the 3rd parameter to
** its callback function to be an array of N pointers where each pointers
** is the return value of [sqlite3_column_text()] for the corresponding
** result column. {F11207} The sqlite3_exec() routine shall cause
** the 4th parameter to its callback function to be an array of N pointers
** where the value of each element of the array pointer returned
** by [sqlite3_column_name()] for the corresponding column. {END}
**
** The sqlite3_exec() callback function may be NULL, even for
** queries. A NULL callback is not an error. It just means that no callback
** will be invoked.
**
** If an error occurs while parsing or evaluating the SQL (but
** not while executing the callback) then an appropriate error
** message is written into memory obtained from [sqlite3_malloc()] and
** *errmsg is made to point to that message. The calling function
** {F11209} If sqlite3_exec() encounters an error while parsing or evaluating
** the SQL and if the 5th parameter to sqlite3_exec() is not NULL,
** then an appropriate error message shall be written into memory obtained
** from [sqlite3_malloc()] and *errmsg shall be made to point to that
** message. {EX} The calling function
** is responsible for freeing the memory using [sqlite3_free()].
** If errmsg==NULL, then no error message is ever written.
** This processing apply only to error that occur during statement
** process, not to error that may occur within the callback routine itself.
** {F11210} If the call to [sqlite3_malloc()] fails while attempting to
** construct an error message for the 5th parameter of sqlite3_exec()
** then the *errmsg value is left unchanged.
**
** The return value is is SQLITE_OK if there are no errors and
** some other [SQLITE_OK | return code] if there is an error.
** The particular return value depends on the type of error.
**
** {F11211} The return value from sqlite3_exec() shall be SQLITE_OK if there
** are no errors. {EX} Some other [SQLITE_OK | return code] if there is
** an error. The particular return value depends on the type of error.
*/
int sqlite3_exec(
sqlite3*, /* An open database */
@ -262,7 +314,7 @@ int sqlite3_exec(
);
/*
** CAPI3REF: Result Codes
** CAPI3REF: Result Codes {F10120}
** KEYWORDS: SQLITE_OK
**
** Many SQLite functions return an integer result code from the set shown
@ -309,7 +361,7 @@ int sqlite3_exec(
/* end-of-error-codes */
/*
** CAPI3REF: Extended Result Codes
** CAPI3REF: Extended Result Codes {F10121}
**
** In its default configuration, SQLite API routines return one of 26 integer
** result codes described at result-codes. However, experience has shown that
@ -321,7 +373,7 @@ int sqlite3_exec(
** each database
** connection using the [sqlite3_extended_result_codes()] API.
**
** Some of the available extended result codes are listed above.
** Some of the available extended result codes are listed here.
** We expect the number of extended result codes will be expand
** over time. Software that uses extended result codes should expect
** to see new result codes in future releases of SQLite.
@ -349,7 +401,7 @@ int sqlite3_exec(
#define SQLITE_IOERR_NOMEM (SQLITE_IOERR | (12<<8))
/*
** CAPI3REF: Flags For File Open Operations
** CAPI3REF: Flags For File Open Operations {F10122}
**
** Combination of the following bit values are used as the
** third argument to the [sqlite3_open_v2()] interface and
@ -371,7 +423,7 @@ int sqlite3_exec(
#define SQLITE_OPEN_MASTER_JOURNAL 0x00004000
/*
** CAPI3REF: Device Characteristics
** CAPI3REF: Device Characteristics {F10123}
**
** The xDeviceCapabilities method of the [sqlite3_io_methods]
** object returns an integer which is a vector of the following
@ -403,7 +455,7 @@ int sqlite3_exec(
#define SQLITE_IOCAP_SEQUENTIAL 0x00000400
/*
** CAPI3REF: File Locking Levels
** CAPI3REF: File Locking Levels {F10124}
**
** SQLite uses one of the following integer values as the second
** argument to calls it makes to the xLock() and xUnlock() methods
@ -416,7 +468,7 @@ int sqlite3_exec(
#define SQLITE_LOCK_EXCLUSIVE 4
/*
** CAPI3REF: Synchronization Type Flags
** CAPI3REF: Synchronization Type Flags {F10125}
**
** When SQLite invokes the xSync() method of an [sqlite3_io_methods]
** object it uses a combination of the following integer values as
@ -434,7 +486,7 @@ int sqlite3_exec(
/*
** CAPI3REF: OS Interface Open File Handle
** CAPI3REF: OS Interface Open File Handle {F14100}
**
** An [sqlite3_file] object represents an open file in the OS
** interface layer. Individual OS interface implementations will
@ -449,18 +501,23 @@ struct sqlite3_file {
};
/*
** CAPI3REF: OS Interface File Virtual Methods Object
** CAPI3REF: OS Interface File Virtual Methods Object {F14110}
**
** Every file opened by the [sqlite3_vfs] xOpen method contains a pointer to
** an instance of the this object. This object defines the
** Every file opened by the [sqlite3_vfs] xOpen method
** contains a pointer to an instance of the the sqlite3_io_methods object.
** This object defines the
** methods used to perform various operations against the open file.
**
** The flags argument to xSync may be one of [SQLITE_SYNC_NORMAL] or
** [SQLITE_SYNC_FULL]. The first choice is the normal fsync().
* The second choice is an
** OS-X style fullsync. The SQLITE_SYNC_DATA flag may be ORed in to
** indicate that only the data of the file and not its inode needs to be
** synced.
** {F14111} Whenever the SQLite library invokes the xSync method of
** an [sqlite3_io_methods] object, it shall supply a flags argument
** which is one of [SQLITE_SYNC_NORMAL] or [SQLITE_SYNC_FULL] optionally
** ORed with [SQLITE_SYNC_DATA]. {EX}
** [SQLITE_SYNC_NORMAL] requests a normal fsync(). [SQLITE_SYNC_FULL]
** requests an OS-X style fullsync. The [SQLITE_SYNC_DATA] flag
** indicates that only the data of the file and not its inode needs to be
** synced. These flags serve as optimization hints to the underlying
** VFS and can be ignored by the VFS if they are not applicable to the
** specific application. {END}
**
** The integer values to xLock() and xUnlock() are one of
** <ul>
@ -734,6 +791,7 @@ struct sqlite3_vfs {
** much larger and can (hopefully) provide more detailed information
** about the cause of an error.
**
**
** The second argument is a boolean value that turns extended result
** codes on and off. Extended result codes are off by default for
** backwards compatibility with older versions of SQLite.