Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Overview
Comment: | Working on global [...]-style hyperlinks. This is an interim check-in in order to transfer from one machine to another. |
---|---|
Downloads: | Tarball | ZIP archive |
Timelines: | family | ancestors | descendants | both | trunk |
Files: | files | file ages | folders |
SHA1: |
a1c70893c60bfd0166be3ccfa3292509 |
User & Date: | drh 2007-12-16 00:42:24.000 |
Context
2007-12-18
| ||
18:09 | SQLite does not have an ! operator. CVSTrac ticket #2849. (check-in: 253e0c9a09 user: drh tags: trunk) | |
2007-12-16
| ||
00:42 | Working on global [...]-style hyperlinks. This is an interim check-in in order to transfer from one machine to another. (check-in: a1c70893c6 user: drh tags: trunk) | |
2007-12-15
| ||
14:44 | Updates to the distinctive features page. (check-in: ceb449161d user: drh tags: trunk) | |
Changes
Changes to pages/capi3ref.in.
1 2 3 4 5 | <title>C/C++ Interface For SQLite Version 3</title> <h2 class=pdf_section>C/C++ Interface For SQLite Version 3</h2> <tcl> | | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 | <title>C/C++ Interface For SQLite Version 3</title> <h2 class=pdf_section>C/C++ Interface For SQLite Version 3</h2> <tcl> set in [open sqlite3.h] set title {} ;# title of a section of interface definition set type {} ;# one of: constant datatype function set body {} ;# human-readable description set code {} ;# C code of the definition set phase 0 ;# Phase used by the parser set content {} ;# List of records, one record per definition set dcnt 0 ;# Number of individual declarations set lineno 0 ;# input file line number set intab 0 ;# In a covenents or limitations table set inrow 0 ;# In a row of a table set rowbody {} ;# Content of a row # End a table row or the complete table. # proc endrow {} { global inrow body rowbody if {$inrow} { append body [string trim $rowbody]</td></tr>\n set inrow 0 set rowbody {} } } proc endtab {} { global intab body endrow if {$intab} { append body "</table>\n" set intab 0 } } proc starttab {} { global intab body endtab append body {<table border="0" cellpadding="5" cellspacing="0">} append body \n set intab 1 } # Read sqlite3.h line by line and extract interface definition # information. # while {![eof $in]} { set line [gets $in] incr lineno |
︙ | ︙ | |||
31 32 33 34 35 36 37 38 39 40 41 | set lx [string trim [string range $line 3 end]] if {[regexp {^CATEGORY: +([a-z]*)} $lx all cx]} { set type $cx } elseif {[regexp {^KEYWORDS: +(.*)} $lx all kx]} { foreach k $kx { set keyword($k) 1 } } else { append body $lx\n } } elseif {[string range $line 0 1]=="*/"} { | > > > > > > > > | > > > > > > > > > > > > > > > > > > > > > > > > > | 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 | set lx [string trim [string range $line 3 end]] if {[regexp {^CATEGORY: +([a-z]*)} $lx all cx]} { set type $cx } elseif {[regexp {^KEYWORDS: +(.*)} $lx all kx]} { foreach k $kx { set keyword($k) 1 } } elseif {[regexp {^COVENANTS:$} $lx]} { append body "\n<h3>Covenants:</h3>\n" starttab set phase 2 } elseif {[regexp {^LIMITATIONS:$} $lx]} { append body "\n<h3>Limitations:</h3>\n" starttab set phase 2 } else { append body $lx\n } } elseif {[string range $line 0 1]=="*/"} { set phase 3 } } elseif {$phase==2} { if {[string range $line 0 1]=="**"} { set lx [string trim [string range $line 3 end]] if {[regexp {\{([\w.]+)\}\s+(.+)$} $lx all tag lxtail]} { endrow append body "<tr><td valign=\"top\">$tag</td>\ \n<td valign=\"top\">\n" set rowbody $lxtail\n set inrow 1 } elseif {[regexp {^COVENANTS:$} $lx]} { endtab append body "\n<h3>Covenants:</h3>\n" starttab } elseif {[regexp {^LIMITATIONS:$} $lx]} { endtab append body "\n<h3>Limitations:</h3>\n" starttab set phase 2 } else { append rowbody $lx\n } } elseif {[string range $line 0 1]=="*/"} { endtab set phase 3 } } elseif {$phase==3} { if {$line==""} { set kwlist [lsort [array names keyword]] unset -nocomplain keyword set key $type:$kwlist regsub { *\{[\w.]+\}} $title {} title regsub -all { *\{[\w.]+\}} $body {} body set body [string map \ |
︙ | ︙ | |||
349 350 351 352 353 354 355 | set body [subst -novar -noback $body] puts "$body" puts "<hr>" set fkey [lindex $keywords 0] if {![info exists keyword_to_file($fkey)]} { real_puts fkey=$fkey real_puts c=$c | | | 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 | set body [subst -novar -noback $body] puts "$body" puts "<hr>" set fkey [lindex $keywords 0] if {![info exists keyword_to_file($fkey)]} { real_puts fkey=$fkey real_puts c=$c error "no such key: $fkey" } c3ref_open_file $::keyword_to_file($fkey) $title puts "<blockquote><pre>" puts "$code" puts "</pre></blockquote>" set body [lindex $c 4] regsub -all "\n\n+" $body "</p>\n\n<p>" body |
︙ | ︙ |
Changes to pages/conflict.in.
1 2 3 4 5 6 7 8 | <title>Constraint Conflict Resolution in SQLite</title> <h1>Constraint Conflict Resolution in SQLite</h1> <p> In most SQL databases, if you have a UNIQUE constraint on a table and you try to do an UPDATE or INSERT that violates the constraint, the database will abort the operation in | | | | < | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | <title>Constraint Conflict Resolution in SQLite</title> <h1>Constraint Conflict Resolution in SQLite</h1> <p> In most SQL databases, if you have a UNIQUE constraint on a table and you try to do an UPDATE or INSERT that violates the constraint, the database will abort the operation in progress, back out any prior changes associated with the same UPDATE or INSERT statement, and return an error. This is the default behavior of SQLite, though SQLite also allows one to define alternative ways for dealing with constraint violations. This article describes those alternatives and how to use them. </p> <h2>Conflict Resolution Algorithms</h2> <p> |
︙ | ︙ | |||
39 40 41 42 43 44 45 | <dt><b>FAIL</b></dt> <dd><p>When a constraint violation occurs, the command aborts with a return code SQLITE_CONSTRAINT. But any changes to the database that the command made prior to encountering the constraint violation are preserved and are not backed out. For example, if an UPDATE statement encountered a constraint violation on the 100th row that it attempts to update, then the first 99 row changes are preserved | | < < < < < < < < < < < < < < < < < < < < < < < | 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 | <dt><b>FAIL</b></dt> <dd><p>When a constraint violation occurs, the command aborts with a return code SQLITE_CONSTRAINT. But any changes to the database that the command made prior to encountering the constraint violation are preserved and are not backed out. For example, if an UPDATE statement encountered a constraint violation on the 100th row that it attempts to update, then the first 99 row changes are preserved but change to rows 100 and beyond never occur.</p></dd> <dt><b>IGNORE</b></dt> <dd><p>When a constraint violation occurs, the one row that contains the constraint violation is not inserted or changed. But the command continues executing normally. Other rows before and after the row that contained the constraint violation continue to be inserted or updated normally. No error is returned.</p></dd> <dt><b>REPLACE</b></dt> <dd><p>When a UNIQUE constraint violation occurs, the pre-existing row that caused the constraint violation is removed prior to inserting or updating the current row. Thus the insert or update always occurs. The command continues executing normally. No error is returned.</p></dd> </dl> |
Deleted pages/requirements.in.
|
| < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < |
Added pages/specification.in.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 | <title>SQLite Requirements</title> <h2>SQLite Specifications</h2> <p>This document is a work in progress.</p> <p>The goal of this document is to provide an precise and exact definition of what SQLite does, how it works, and what to expect from SQLite for any given input. When completed, this document will become the authoritative reference for using SQLite.</p> <h3>The C/C++ Interface</h3> <table cellspacing="20" border="0"> <tcl> # Initialization the specification array # unset -nocomplain spec # Extract specifications from the sqlite3.h header file # set in [open sqlite3.h] set title {} ;# title of a section of interface definition set code {} ;# C code of the definition set phase 0 ;# Phase used by the parser set dcnt 0 ;# Number of individual declarations set lineno 0 ;# input file line number set spectag {} ;# Current specification tag number set specbody {} ;# Text of current specification proc endspec {} { global spectag specbody spec if {$spectag!="" && $specbody!=""} { if {[info exists spec($spectag)]} { real_puts "WARNING: duplicate specification: $spectag" } set body [string map \ {<todo> {<font color="red">(TODO: } </todo> )</font>} $specbody] set spec($spectag) [string trim $body] } set spectag {} set specbody {} } proc beginspec {tag body} { global spectag specbody endspec set spectag $tag set specbody $body } # Read sqlite3.h line by line and extract interface definition # information. # while {![eof $in]} { set line [gets $in] incr lineno if {$phase==0} { # Looking for the CAPI3REF: keyword if {[regexp {^\*\* CAPI3REF: +(.*)} $line all tx]} { set title $tx set title_lineno $lineno set phase 1 } } elseif {$phase==1} { if {[string range $line 0 1]=="**"} { set lx [string trim [string range $line 3 end]] if {[regexp {^COVENANTS:$} $lx]} { set phase 2 } elseif {[regexp {^LIMITATIONS:$} $lx]} { set phase 2 } } elseif {[string range $line 0 1]=="*/"} { set phase 3 } } elseif {$phase==2} { if {[string range $line 0 1]=="**"} { set lx [string trim [string range $line 3 end]] if {[regexp {\{([\w.]+)\}\s+(.+)$} $lx all tag lxtail]} { endspec beginspec $tag $lxtail\n } elseif {[regexp {^COVENANTS:$} $lx]} { endspec } elseif {[regexp {^LIMITATIONS:$} $lx]} { endspec } else { append specbody $lx\n } } elseif {[string range $line 0 1]=="*/"} { endspec set phase 3 } } elseif {$phase==3} { if {$line==""} { if {[regexp {\{([\w.]+)\}} $title all tag]} { set bx "The following C/C++ interfaces are defined:\n" append bx <blockquote><pre>\n" set code [string map {& & < < > >} $code] append bx [string trim $code]\n append bx "</pre></blockquote" beginspec $tag $bx endspec } lappend content [list $key $title $type $kwlist $body $code] set title {} set keywords {} set type {} set body {} set code {} set phase 0 set dcnt 0 } else { if {[regexp {^#define (SQLITE_[A-Z0-9_]+)} $line all kx]} { set type constant set keyword($kx) 1 incr dcnt } elseif {[regexp {^typedef .*(sqlite[0-9a-z_]+);} $line all kx]} { set type datatype set keyword($kx) 1 incr dcnt } elseif {[regexp {^[a-z].*[ *](sqlite3_[a-z0-9_]+)\(} $line all kx]} { set type function set keyword($kx) 1 incr dcnt } elseif {[regexp {^SQLITE_EXTERN .*(sqlite[0-9a-z_]+);} $line all kx]} { set type datatype set keyword($kx) 1 incr dcnt } append code $line\n } } } # Convert a tag name into the filename used for the # multi-file version. # # Constants begin with SQLITE_. The names are converted # to lower case and prefixed with "c_". If we did not # do this, then the names "SQLITE_BLOB" and "sqlite3_blob" # would collide. # proc convert_tag_name {oldname} { set oldname [string tolower $oldname] regsub {^sqlite_} $oldname {c_} oldname regsub {^sqlite3_} $oldname {} name return $name.html } </tcl> </table> |
Changes to sqlite.h.in.
︙ | ︙ | |||
79 80 81 82 83 84 85 | ** there are major feature enhancements that are forwards compatible ** but not backwards compatible. The Z value is release number ** and is incremented with ** each release but resets back to 0 when Y is incremented. ** ** See also: [sqlite3_libversion()] and [sqlite3_libversion_number()]. ** | | | 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 | ** there are major feature enhancements that are forwards compatible ** but not backwards compatible. The Z value is release number ** and is incremented with ** each release but resets back to 0 when Y is incremented. ** ** See also: [sqlite3_libversion()] and [sqlite3_libversion_number()]. ** ** COVENANTS: ** ** {F10011} The SQLITE_VERSION #define in the sqlite3.h header file ** evaluates to a string literal that is the SQLite version ** with which the header file is associated. ** ** {F10014} The SQLITE_VERSION_NUMBER #define resolves to an integer ** with the value (X*1000000 + Y*1000 + Z) where X, Y, and |
︙ | ︙ | |||
107 108 109 110 111 112 113 | ** [SQLITE_VERSION_NUMBER]. ** ** The sqlite3_libversion() function returns the same information as is ** in the sqlite3_version[] string constant. The function is provided ** for use in DLLs since DLL users usually do not have direct access to string ** constants within the DLL. ** | | | 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 | ** [SQLITE_VERSION_NUMBER]. ** ** The sqlite3_libversion() function returns the same information as is ** in the sqlite3_version[] string constant. The function is provided ** for use in DLLs since DLL users usually do not have direct access to string ** constants within the DLL. ** ** COVENANTS: ** ** {F10021} The [sqlite3_libversion_number()] interface returns an integer ** equal to [SQLITE_VERSION_NUMBER]. ** ** {F10022} The [sqlite3_version] string constant contains the text of the ** [SQLITE_VERSION] string. ** |
︙ | ︙ | |||
140 141 142 143 144 145 146 | ** the mutexes. But for maximum safety, mutexes should be enabled. ** The default behavior is for mutexes to be enabled. ** ** This interface can be used by a program to make sure that the ** version of SQLite that it is linking against was compiled with ** the desired setting of the SQLITE_THREADSAFE macro. ** | | | 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 | ** the mutexes. But for maximum safety, mutexes should be enabled. ** The default behavior is for mutexes to be enabled. ** ** This interface can be used by a program to make sure that the ** version of SQLite that it is linking against was compiled with ** the desired setting of the SQLITE_THREADSAFE macro. ** ** COVENANTS: ** ** {F10101} The [sqlite3_threadsafe()] function returns nonzero if ** SQLite was compiled with its mutexes enabled or zero ** if SQLite was compiled with mutexes disabled. */ int sqlite3_threadsafe(void); |
︙ | ︙ | |||
173 174 175 176 177 178 179 | ** Because there is no cross-platform way to specify 64-bit integer types ** SQLite includes typedefs for 64-bit signed and unsigned integers. ** ** The sqlite3_int64 and sqlite3_uint64 are the preferred type ** definitions. The sqlite_int64 and sqlite_uint64 types are ** supported for backwards compatibility only. ** | | | 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 | ** Because there is no cross-platform way to specify 64-bit integer types ** SQLite includes typedefs for 64-bit signed and unsigned integers. ** ** The sqlite3_int64 and sqlite3_uint64 are the preferred type ** definitions. The sqlite_int64 and sqlite_uint64 types are ** supported for backwards compatibility only. ** ** COVENANTS: ** ** {F10201} The [sqlite_int64] and [sqlite3_int64] types specify a ** 64-bit signed integer. ** ** {F10202} The [sqlite_uint64] and [sqlite3_uint64] types specify ** a 64-bit unsigned integer. */ |
︙ | ︙ | |||
216 217 218 219 220 221 222 | ** [sqlite3_blob_close | close] all [sqlite3_blob | BLOBs] ** associated with the [sqlite3] object prior ** to attempting to close the [sqlite3] object. ** ** <todo>What happens to pending transactions? Are they ** rolled back, or abandoned?</todo> ** | | | 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 | ** [sqlite3_blob_close | close] all [sqlite3_blob | BLOBs] ** associated with the [sqlite3] object prior ** to attempting to close the [sqlite3] object. ** ** <todo>What happens to pending transactions? Are they ** rolled back, or abandoned?</todo> ** ** COVENANTS: ** ** {F12011} The [sqlite3_close()] interface destroys an [sqlite3] object ** allocated by a prior call to [sqlite3_open()], ** [sqlite3_open16()], or [sqlite3_open_v2()]. ** ** {F12012} The [sqlite3_close()] function releases all memory used by the ** connection and closes all open files. |
︙ | ︙ | |||
269 270 271 272 273 274 275 | ** ** The sqlite3_exec() interface is implemented in terms of ** [sqlite3_prepare_v2()], [sqlite3_step()], and [sqlite3_finalize()]. ** The sqlite3_exec() routine does nothing that cannot be done ** by [sqlite3_prepare_v2()], [sqlite3_step()], and [sqlite3_finalize()]. ** The sqlite3_exec() is just a convenient wrapper. ** | | | 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 | ** ** The sqlite3_exec() interface is implemented in terms of ** [sqlite3_prepare_v2()], [sqlite3_step()], and [sqlite3_finalize()]. ** The sqlite3_exec() routine does nothing that cannot be done ** by [sqlite3_prepare_v2()], [sqlite3_step()], and [sqlite3_finalize()]. ** The sqlite3_exec() is just a convenient wrapper. ** ** COVENANTS: ** ** {F12101} The [sqlite3_exec()] interface evaluates zero or more UTF-8 ** encoded, semicolon-separated, SQL statements in the ** zero-terminated string of its 2nd parameter within the ** context of the [sqlite3] object given in the 1st parameter. ** ** {F12104} The return value of [sqlite3_exec()] is SQLITE_OK if all |
︙ | ︙ | |||
338 339 340 341 342 343 344 | ** {U12142} The database connection must not be closed while ** [sqlite3_exec()] is running. ** ** {U12143} The calling function is should use [sqlite3_free()] to free ** the memory that *errmsg is left pointing at once the error ** message is no longer needed. ** | | | 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 | ** {U12142} The database connection must not be closed while ** [sqlite3_exec()] is running. ** ** {U12143} The calling function is should use [sqlite3_free()] to free ** the memory that *errmsg is left pointing at once the error ** message is no longer needed. ** ** {U12145} The SQL statement text in the 2nd parameter to [sqlite3_exec()] ** must remain unchanged while [sqlite3_exec()] is running. */ int sqlite3_exec( sqlite3*, /* An open database */ const char *sql, /* SQL to be evaluted */ int (*callback)(void*,int,char**,char**), /* Callback function */ void *, /* 1st argument to callback */ |
︙ | ︙ | |||
361 362 363 364 365 366 367 | ** here in order to indicates success or failure. ** ** See also: [SQLITE_IOERR_READ | extended result codes] */ #define SQLITE_OK 0 /* Successful result */ /* beginning-of-error-codes */ #define SQLITE_ERROR 1 /* SQL error or missing database */ | | | 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 | ** here in order to indicates success or failure. ** ** See also: [SQLITE_IOERR_READ | extended result codes] */ #define SQLITE_OK 0 /* Successful result */ /* beginning-of-error-codes */ #define SQLITE_ERROR 1 /* SQL error or missing database */ #define SQLITE_INTERNAL 2 /* Internal logic error in SQLite */ #define SQLITE_PERM 3 /* Access permission denied */ #define SQLITE_ABORT 4 /* Callback routine requested an abort */ #define SQLITE_BUSY 5 /* The database file is locked */ #define SQLITE_LOCKED 6 /* A table in the database is locked */ #define SQLITE_NOMEM 7 /* A malloc() failed */ #define SQLITE_READONLY 8 /* Attempt to write a readonly database */ #define SQLITE_INTERRUPT 9 /* Operation terminated by sqlite3_interrupt()*/ |
︙ | ︙ | |||
411 412 413 414 415 416 417 | ** One may 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. ** ** The SQLITE_OK result code will never be extended. It will always ** be exactly zero. ** | | | 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 | ** One may 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. ** ** The SQLITE_OK result code will never be extended. It will always ** be exactly zero. ** ** COVENANTS: ** ** {F10223} The symbolic name for an extended result code always contains ** a related primary result code as a prefix. ** ** {F10224} Primary result code names contain a single "_" character. ** ** {F10225} Extended result code names contain two or more "_" characters. |
︙ | ︙ | |||
821 822 823 824 825 826 827 | ** CAPI3REF: Enable Or Disable Extended Result Codes {F12200} ** ** The sqlite3_extended_result_codes() routine enables or disables the ** [SQLITE_IOERR_READ | extended result codes] feature of SQLite. ** The extended result codes are disabled by default for historical ** compatibility. ** | | | 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 | ** CAPI3REF: Enable Or Disable Extended Result Codes {F12200} ** ** The sqlite3_extended_result_codes() routine enables or disables the ** [SQLITE_IOERR_READ | extended result codes] feature of SQLite. ** The extended result codes are disabled by default for historical ** compatibility. ** ** COVENANTS: ** ** {F12201} New [sqlite3 | database connections] have the ** [SQLITE_IOERR_READ | extended result codes] feature ** disabled by default. ** ** {F12202} The [sqlite3_extended_result_codes()] interface will enable ** [SQLITE_IOERR_READ | extended result codes] for the |
︙ | ︙ | |||
869 870 871 872 873 874 875 | ** INSERT continues to completion after deleting rows that caused ** the constraint problem so INSERT OR REPLACE will always change ** the return value of this interface. ** ** For the purposes of this routine, an insert is considered to ** be successful even if it is subsequently rolled back. ** | | | 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 | ** INSERT continues to completion after deleting rows that caused ** the constraint problem so INSERT OR REPLACE will always change ** the return value of this interface. ** ** For the purposes of this routine, an insert is considered to ** be successful even if it is subsequently rolled back. ** ** COVENANTS: ** ** {F12221} The [sqlite3_last_insert_rowid()] function returns the ** rowid of the most recent successful insert done ** on the same database connection and within the same ** trigger context, or zero if there have ** been no qualifying inserts on that connection. ** |
︙ | ︙ | |||
942 943 944 945 946 947 948 | ** faster than going through and deleting individual elements from the ** table.) Because of this optimization, the deletions in ** "DELETE FROM table" are not row changes and will not be counted ** by the sqlite3_changes() or [sqlite3_total_changes()] functions. ** To get an accurate count of the number of rows deleted, use ** "DELETE FROM table WHERE 1" instead. ** | | | 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 | ** faster than going through and deleting individual elements from the ** table.) Because of this optimization, the deletions in ** "DELETE FROM table" are not row changes and will not be counted ** by the sqlite3_changes() or [sqlite3_total_changes()] functions. ** To get an accurate count of the number of rows deleted, use ** "DELETE FROM table WHERE 1" instead. ** ** COVENANTS: ** ** {F12241} The [sqlite3_changes()] function returns the number of ** row changes caused by the most recent INSERT, UPDATE, ** or DELETE statement on the same database connection and ** within the same trigger context, or zero if there have ** not been any qualifying row changes. ** |
︙ | ︙ | |||
983 984 985 986 987 988 989 | ** this optimization, the change count for "DELETE FROM table" will be ** zero regardless of the number of elements that were originally in the ** table. To get an accurate count of the number of rows deleted, use ** "DELETE FROM table WHERE 1" instead. ** ** See also the [sqlite3_change()] interface. ** | | | 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 | ** this optimization, the change count for "DELETE FROM table" will be ** zero regardless of the number of elements that were originally in the ** table. To get an accurate count of the number of rows deleted, use ** "DELETE FROM table WHERE 1" instead. ** ** See also the [sqlite3_change()] interface. ** ** COVENANTS: ** ** {F12261} The [sqlite3_total_changes()] returns the total number ** of row changes caused by INSERT, UPDATE, and/or DELETE ** statements on the same [sqlite3 | database connection], in any ** trigger context, since the database connection was ** created. ** |
︙ | ︙ | |||
1023 1024 1025 1026 1027 1028 1029 | ** An SQL operation that is interrupted will return ** [SQLITE_INTERRUPT]. If the interrupted SQL operation is an ** INSERT, UPDATE, or DELETE that is inside an explicit transaction, ** then the entire transaction will be rolled back automatically. ** A call to sqlite3_interrupt() has no effect on SQL statements ** that are started after sqlite3_interrupt() returns. ** | | | 1023 1024 1025 1026 1027 1028 1029 1030 1031 1032 1033 1034 1035 1036 1037 | ** An SQL operation that is interrupted will return ** [SQLITE_INTERRUPT]. If the interrupted SQL operation is an ** INSERT, UPDATE, or DELETE that is inside an explicit transaction, ** then the entire transaction will be rolled back automatically. ** A call to sqlite3_interrupt() has no effect on SQL statements ** that are started after sqlite3_interrupt() returns. ** ** COVENANTS: ** ** {F12271} The [sqlite3_interrupt()] interface will force all running ** SQL statements associated with the same database connection ** to halt after processing at most one additional row of ** data. ** ** {F12272} Any SQL statement that is interrupted by [sqlite3_interrupt()] |
︙ | ︙ | |||
1057 1058 1059 1060 1061 1062 1063 | ** string literals or quoted identifier names or comments are not ** independent tokens (they are part of the token in which they are ** embedded) and thus do not count as a statement terminator. ** ** These routines do not parse the SQL and ** so will not detect syntactically incorrect SQL. ** | | | 1057 1058 1059 1060 1061 1062 1063 1064 1065 1066 1067 1068 1069 1070 1071 | ** string literals or quoted identifier names or comments are not ** independent tokens (they are part of the token in which they are ** embedded) and thus do not count as a statement terminator. ** ** These routines do not parse the SQL and ** so will not detect syntactically incorrect SQL. ** ** COVENANTS: ** ** {F10511} The sqlite3_complete() and sqlite3_complete16() functions ** return true (non-zero) if and only if the last ** non-whitespace token in their input is a semicolon that ** is not in between the BEGIN and END of a CREATE TRIGGER ** statement. ** |
︙ | ︙ | |||
1135 1136 1137 1138 1139 1140 1141 | ** this is important. ** ** There can only be a single busy handler defined for each database ** connection. Setting a new busy handler clears any previous one. ** Note that calling [sqlite3_busy_timeout()] will also set or clear ** the busy handler. ** | | | 1135 1136 1137 1138 1139 1140 1141 1142 1143 1144 1145 1146 1147 1148 1149 | ** this is important. ** ** There can only be a single busy handler defined for each database ** connection. Setting a new busy handler clears any previous one. ** Note that calling [sqlite3_busy_timeout()] will also set or clear ** the busy handler. ** ** COVENANTS: ** ** {F12311} The [sqlite3_busy_handler()] function replaces the busy handler ** callback in the database connection identified by the 1st ** parameter with a new busy handler identified by the 2nd and 3rd ** parameters. ** ** {F12312} The default busy handler for new database connections is NULL. |
︙ | ︙ | |||
1182 1183 1184 1185 1186 1187 1188 | ** turns off all busy handlers. ** ** There can only be a single busy handler for a particular database ** connection. If another busy handler was defined ** (using [sqlite3_busy_handler()]) prior to calling ** this routine, that other busy handler is cleared. ** | | | 1182 1183 1184 1185 1186 1187 1188 1189 1190 1191 1192 1193 1194 1195 1196 | ** turns off all busy handlers. ** ** There can only be a single busy handler for a particular database ** connection. If another busy handler was defined ** (using [sqlite3_busy_handler()]) prior to calling ** this routine, that other busy handler is cleared. ** ** COVENANTS: ** ** {F12341} The [sqlite3_busy_timeout()] function overrides any prior ** [sqlite3_busy_timeout()] or [sqlite3_busy_handler()] setting ** on the same database connection. ** ** {F12343} If the 2nd parameter to [sqlite3_busy_timeout()] is less than ** or equal to zero, then the busy handler is cleared so that |
︙ | ︙ | |||
1263 1264 1265 1266 1267 1268 1269 | ** After the calling function has finished using the result, it should ** pass the pointer to the result table to sqlite3_free_table() in order to ** release the memory that was malloc-ed. Because of the way the ** [sqlite3_malloc()] happens within sqlite3_get_table(), the calling ** function must not try to call [sqlite3_free()] directly. Only ** [sqlite3_free_table()] is able to release the memory properly and safely. ** | | | 1263 1264 1265 1266 1267 1268 1269 1270 1271 1272 1273 1274 1275 1276 1277 | ** After the calling function has finished using the result, it should ** pass the pointer to the result table to sqlite3_free_table() in order to ** release the memory that was malloc-ed. Because of the way the ** [sqlite3_malloc()] happens within sqlite3_get_table(), the calling ** function must not try to call [sqlite3_free()] directly. Only ** [sqlite3_free_table()] is able to release the memory properly and safely. ** ** COVENANTS: ** ** {F12371} If a [sqlite3_get_table()] fails a memory allocation, then ** it frees the result table under construction, aborts the ** query in process, skips any subsequent queries, sets the ** *resultp output pointer to NULL and returns [SQLITE_NOMEM]. ** ** {F12373} If the ncolumn parameter to [sqlite3_get_table()] is not NULL |
︙ | ︙ | |||
1389 1390 1391 1392 1393 1394 1395 | ** The code above will render a correct SQL statement in the zSQL ** variable even if the zText variable is a NULL pointer. ** ** The "%z" formatting option works exactly like "%s" with the ** addition that after the string has been read and copied into ** the result, [sqlite3_free()] is called on the input string. {END} ** | | | 1389 1390 1391 1392 1393 1394 1395 1396 1397 1398 1399 1400 1401 1402 1403 | ** The code above will render a correct SQL statement in the zSQL ** variable even if the zText variable is a NULL pointer. ** ** The "%z" formatting option works exactly like "%s" with the ** addition that after the string has been read and copied into ** the result, [sqlite3_free()] is called on the input string. {END} ** ** COVENANTS: ** ** */ char *sqlite3_mprintf(const char*,...); char *sqlite3_vmprintf(const char*, va_list); char *sqlite3_snprintf(int,char*,const char*, ...); |
︙ | ︙ | |||
2560 2561 2562 2563 2564 2565 2566 | int sqlite3_finalize(sqlite3_stmt *pStmt); /* ** CAPI3REF: Reset A Prepared Statement Object {F13330} ** ** The sqlite3_reset() function is called to reset a ** [sqlite3_stmt | compiled SQL statement] object. | | | 2560 2561 2562 2563 2564 2565 2566 2567 2568 2569 2570 2571 2572 2573 2574 | int sqlite3_finalize(sqlite3_stmt *pStmt); /* ** CAPI3REF: Reset A Prepared Statement Object {F13330} ** ** The sqlite3_reset() function is called to reset a ** [sqlite3_stmt | compiled SQL statement] object. ** back to its initial state, ready to be re-executed. ** Any SQL statement variables that had values bound to them using ** the [sqlite3_bind_blob | sqlite3_bind_*() API] retain their values. ** Use [sqlite3_clear_bindings()] to reset the bindings. */ int sqlite3_reset(sqlite3_stmt *pStmt); /* |
︙ | ︙ |
Changes to wrap.tcl.
︙ | ︙ | |||
16 17 18 19 20 21 22 23 24 25 26 27 28 29 | # * An appropriate header is prepended to the file. # * Any <title>...</title> in the input is moved into the prepended # header. # * An appropriate footer is appended. # * Scripts within <tcl>...</tcl> are evaluated. Output that # is emitted from these scripts by "puts" appears in place of # the original script. # set DOC [lindex $argv 0] set SRC [lindex $argv 1] set DEST [lindex $argv 2] set HOMEDIR [pwd] ;# Also remember our home directory. # We are going to overload the puts command, so remember the | > > > | 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 | # * An appropriate header is prepended to the file. # * Any <title>...</title> in the input is moved into the prepended # header. # * An appropriate footer is appended. # * Scripts within <tcl>...</tcl> are evaluated. Output that # is emitted from these scripts by "puts" appears in place of # the original script. # * Hyperlinks within [...] are resolved. # # # set DOC [lindex $argv 0] set SRC [lindex $argv 1] set DEST [lindex $argv 2] set HOMEDIR [pwd] ;# Also remember our home directory. # We are going to overload the puts command, so remember the |
︙ | ︙ |