Documentation Source Text

Check-in [03760bb55c]
Login

Many hyperlinks are disabled.
Use anonymous login to enable hyperlinks.

Overview
Comment:Documentation updates for version 3.6.12.
Downloads: Tarball | ZIP archive
Timelines: family | ancestors | descendants | both | trunk
Files: files | file ages | folders
SHA1: 03760bb55c1de6065a01aed9405f66a4f9662645
User & Date: drh 2009-03-31 12:52:22.000
Context
2009-03-31
13:52
Fix a typo in the 3.6.12 release log. (check-in: 790056fe66 user: drh tags: trunk)
12:52
Documentation updates for version 3.6.12. (check-in: 03760bb55c user: drh tags: trunk)
2009-03-27
15:12
Make it clear that the case_sensitive_like pragma installs a new application-defined LIKE function. (check-in: e96456b379 user: drh tags: trunk)
Changes
Unified Diff Ignore Whitespace Patch
Changes to pages/about.in.
56
57
58
59
60
61
62


63
64
65
66
67
68
69
70
71
72
73
very little heap (100KiB), making SQLite a popular database engine 
choice on memory constrained gadgets such as cellphones, PDAs, and MP3 players.
There is a tradeoff between memory usage and speed.  
SQLite generally runs faster the more memory
you give it.  Nevertheless, performance is usually quite good even
in low-memory environments.</p>



<p>SQLite has a reputation for being very reliable.
Nearly three-fourths of the source code is devoted purely to testing and
verification.  An automated test suite runs hundreds of thousands of
tests involving millions of individual SQL statements and achieves
over 99% statement coverage.  SQLite responds gracefully to memory
allocation failures and disk I/O errors.  Transactions are
<a href="http://en.wikipedia.org/wiki/ACID">ACID</a>
even if interrupted by system crashes or power failures.  
All of this is verified by
the automated tests using special test harnesses which simulate 
system failures.







>
>
|
|
|
|







56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
very little heap (100KiB), making SQLite a popular database engine 
choice on memory constrained gadgets such as cellphones, PDAs, and MP3 players.
There is a tradeoff between memory usage and speed.  
SQLite generally runs faster the more memory
you give it.  Nevertheless, performance is usually quite good even
in low-memory environments.</p>

<p>SQLite is 
<a href="testing.html">very carefully tested</a> prior to every
release and has a reputation for being very reliable.
Most of the SQLite source code is devoted purely to testing and
verification.  An automated test suite runs millions of
tests involving hundreds of millions of individual SQL statements and achieves
over 99% statement coverage.  SQLite responds gracefully to memory
allocation failures and disk I/O errors.  Transactions are
<a href="http://en.wikipedia.org/wiki/ACID">ACID</a>
even if interrupted by system crashes or power failures.  
All of this is verified by
the automated tests using special test harnesses which simulate 
system failures.
Changes to pages/changes.in.
38
39
40
41
42
43
44
45


46
47
48
49
50
51
52
53

54
55
56
57
58
59
60
      http://www.sqlite.org/cvstrac/timeline</a>.</p>
    }
    hd_close_aux
    hd_enable_main 1
  }
}

chng {2009 March 23 (3.6.12)} {


<li>Added the [sqlite3_unlock_notify()] interface.
<li>Added the [reverse_unordered_selects pragma].
<li>The default page size on windows is automatically adjusted to match the
    capabilities of the underlying filesystem.
<li>Add the new ".genfkey" command in the [CLI] for generating triggers to
    implement foreign key constraints.
<li>Performance improvements for "count(*)" queries.
<li>Reduce the amount of heap memory used, especially by TRIGGERs.

}

chng {2009 Feb 18 (3.6.11)} {
<li>Added the [sqlite3_backup_init | hot-backup interface].
<li>Added new commands ".backup" and ".restore" to the [CLI].
<li>Added new methods <a href="tclsqlite.html#backup">backup</a> and
    <a href="tclsqlite.html#restore">restore</a> to the TCL interface.







|
>
>








>







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
      http://www.sqlite.org/cvstrac/timeline</a>.</p>
    }
    hd_close_aux
    hd_enable_main 1
  }
}

chng {2009 March 31 (3.6.12)} {
<li>Fixed a bug that cause database corruption an [incremental_vacuum] is
    rolled back in an in-memory database.  Ticket #3761.
<li>Added the [sqlite3_unlock_notify()] interface.
<li>Added the [reverse_unordered_selects pragma].
<li>The default page size on windows is automatically adjusted to match the
    capabilities of the underlying filesystem.
<li>Add the new ".genfkey" command in the [CLI] for generating triggers to
    implement foreign key constraints.
<li>Performance improvements for "count(*)" queries.
<li>Reduce the amount of heap memory used, especially by TRIGGERs.
<li>
}

chng {2009 Feb 18 (3.6.11)} {
<li>Added the [sqlite3_backup_init | hot-backup interface].
<li>Added new commands ".backup" and ".restore" to the [CLI].
<li>Added new methods <a href="tclsqlite.html#backup">backup</a> and
    <a href="tclsqlite.html#restore">restore</a> to the TCL interface.
Changes to pages/docs.in.
49
50
51
52
53
54
55




56
57
58
59
60
61
62
  Version 3.3.0 and later supports the ability for two or more
  database connections to share the same page and schema cache.
  This feature is useful for certain specialized applications.
}
doc {Tcl API} {tclsqlite.html} {
  A description of the TCL interface bindings for SQLite.
}





doc {Temporary Files Used By SQLite} {tempfiles.html} {
  SQLite can potentially use many different temporary files when
  processing certain SQL statements.  This document describes the
  many kinds of temporary files that SQLite uses and offers suggestions
  for avoiding them on systems where creating a temporary file is an
  expensive operation.







>
>
>
>







49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
  Version 3.3.0 and later supports the ability for two or more
  database connections to share the same page and schema cache.
  This feature is useful for certain specialized applications.
}
doc {Tcl API} {tclsqlite.html} {
  A description of the TCL interface bindings for SQLite.
}
doc {How SQLite Is Tested} {testing.html} {
  This document describes the extensive testing and verification
  procedures that SQLite undergoes prior to every release.
}

doc {Temporary Files Used By SQLite} {tempfiles.html} {
  SQLite can potentially use many different temporary files when
  processing certain SQL statements.  This document describes the
  many kinds of temporary files that SQLite uses and offers suggestions
  for avoiding them on systems where creating a temporary file is an
  expensive operation.
Changes to pages/download.in.
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
}
cd $::DEST

proc Heading {title} {
  set ::pending_heading $title
  # hd_puts "<tr><td colspan=4><big><b>$title</b></big></td></tr>"
}

Heading {Precompiled Binaries for Linux}

Product sqlite3-V3.bin.gz {
  A command-line program for accessing and modifying
  SQLite version 3.* databases.
  See <a href="sqlite.html">the documentation</a> for additional information.
}

Product sqlite-V3.bin.gz {
  A command-line program for accessing and modifying
  SQLite databases.
  See <a href="sqlite.html">the documentation</a> for additional information.
}

Product tclsqlite-V3.so.gz {
  Bindings for <a href="http://www.tcl.tk/">Tcl/Tk</a>.
  You can import this shared library into either
  tclsh or wish to get SQLite database access from Tcl/Tk.
  See <a href="tclsqlite.html">the documentation</a> for details.
}

Product sqlite-V3.so.gz {
  A precompiled shared-library for Linux without the TCL bindings.
}

Product fts1-V3.so.gz {
  A precompiled 
  <a href="http://www.sqlite.org/cvstrac/wiki?p=FtsOne">FTS1 Module</a> 
  for Linux.
}

Product fts2-V3.so.gz {
  A precompiled 
  <a href="http://www.sqlite.org/cvstrac/wiki?p=FtsTwo">FTS2 Module</a> 
  for Linux.
}

Product sqlite-devel-V3.i386.rpm {
  RPM containing documentation, header files, and static library for
  SQLite version VERSION.
}
Product sqlite-V3-1.i386.rpm {
  RPM containing shared libraries and the <b>sqlite</b> command-line
  program for SQLite version VERSION.
}

Product sqlite*_analyzer-V3.bin.gz {
  An analysis program for database files compatible with SQLite 
  version VERSION and later.
}

Heading {Precompiled Binaries For Mac OS X}

Product sqlite3-V3-osx-x86.bin.gz {
  A command-line program for accessing and modifying SQLite version 3.*
  databases.  For x86 Macs only.
}

Product sqlite*_analyzer-V3-osx-x86.bin.gz {
  An analysis program for database files compatible with SQLite 
  version VERSION and later.
}

Heading {Precompiled Binaries For Windows}

Product sqlite-V3.zip {
  A command-line program for accessing and modifying SQLite databases.
  See <a href="sqlite.html">the documentation</a> for additional information.
}
Product tclsqlite-V3.zip {
  Bindings for <a href="http://www.tcl.tk/">Tcl/Tk</a>.
  You can import this shared library into either
  tclsh or wish to get SQLite database access from Tcl/Tk.
  See <a href="tclsqlite.html">the documentation</a> for details.
}
Product sqlitedll-V3.zip {
  This is a DLL of the SQLite library without the TCL bindings.
  The only external dependency is MSVCRT.DLL.
}

Product fts1dll-V3.zip {
  A precompiled 
  <a href="http://www.sqlite.org/cvstrac/wiki?p=FtsOne">FTS1 Module</a> 
  for Win32 platforms.
}

Product fts2dll-V3.zip {
  A precompiled 
  <a href="http://www.sqlite.org/cvstrac/wiki?p=FtsTwo">FTS2 Module</a> 
  for Win32 platforms.
}

Product sqlite*_analyzer-V3.zip {
  An analysis program for database files compatible with SQLite version
  VERSION and later.
}


Heading {Source Code}

Product {sqlite-amalgamation-V3.zip} {
  This ZIP archive contains all preprocessed C code combined into a
  single source file (the <a href="amalgamation.html">amalgamation</a>).
  This is the <b>recommended</b> way of acquiring the SQLite







<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<







37
38
39
40
41
42
43


































































































44
45
46
47
48
49
50
}
cd $::DEST

proc Heading {title} {
  set ::pending_heading $title
  # hd_puts "<tr><td colspan=4><big><b>$title</b></big></td></tr>"
}



































































































Heading {Source Code}

Product {sqlite-amalgamation-V3.zip} {
  This ZIP archive contains all preprocessed C code combined into a
  single source file (the <a href="amalgamation.html">amalgamation</a>).
  This is the <b>recommended</b> way of acquiring the SQLite
202
203
204
205
206
207
208


































































































209
210
211
212
213
214
215
Heading {Documentation}

Product {sqlite_docs_V3.zip} {
  This ZIP archive contains most of the static HTML files that
  comprise this website, including all of the SQL Syntax and the
  C/C++ interface specs and other miscellaneous documentation.
}



































































































Heading {Historical Binaries And Source Code}

Product sqlite-V2.bin.gz {
  A command-line program for accessing and modifying
  SQLite version 2.* databases on Linux-x86.
}







>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>







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
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
Heading {Documentation}

Product {sqlite_docs_V3.zip} {
  This ZIP archive contains most of the static HTML files that
  comprise this website, including all of the SQL Syntax and the
  C/C++ interface specs and other miscellaneous documentation.
}

Heading {Precompiled Binaries for Linux}

Product sqlite3-V3.bin.gz {
  A command-line program for accessing and modifying
  SQLite version 3.* databases.
  See <a href="sqlite.html">the documentation</a> for additional information.
}

Product sqlite-V3.bin.gz {
  A command-line program for accessing and modifying
  SQLite databases.
  See <a href="sqlite.html">the documentation</a> for additional information.
}

Product tclsqlite-V3.so.gz {
  Bindings for <a href="http://www.tcl.tk/">Tcl/Tk</a>.
  You can import this shared library into either
  tclsh or wish to get SQLite database access from Tcl/Tk.
  See <a href="tclsqlite.html">the documentation</a> for details.
}

Product sqlite-V3.so.gz {
  A precompiled shared-library for Linux without the TCL bindings.
}

Product fts1-V3.so.gz {
  A precompiled 
  <a href="http://www.sqlite.org/cvstrac/wiki?p=FtsOne">FTS1 Module</a> 
  for Linux.
}

Product fts2-V3.so.gz {
  A precompiled 
  <a href="http://www.sqlite.org/cvstrac/wiki?p=FtsTwo">FTS2 Module</a> 
  for Linux.
}

Product sqlite-devel-V3.i386.rpm {
  RPM containing documentation, header files, and static library for
  SQLite version VERSION.
}
Product sqlite-V3-1.i386.rpm {
  RPM containing shared libraries and the <b>sqlite</b> command-line
  program for SQLite version VERSION.
}

Product sqlite*_analyzer-V3.bin.gz {
  An analysis program for database files compatible with SQLite 
  version VERSION and later.
}

Heading {Precompiled Binaries For Mac OS X}

Product sqlite3-V3-osx-x86.bin.gz {
  A command-line program for accessing and modifying SQLite version 3.*
  databases.  For x86 Macs running Leopard (OS 10.5) only.
}

Product sqlite*_analyzer-V3-osx-x86.bin.gz {
  An analysis program for database files compatible with SQLite 
  version VERSION and later.  For x86 Macs running Leopard (OS 10.5) only.
}

Heading {Precompiled Binaries For Windows}

Product sqlite-V3.zip {
  A command-line program for accessing and modifying SQLite databases.
  See <a href="sqlite.html">the documentation</a> for additional information.
}
Product tclsqlite-V3.zip {
  Bindings for <a href="http://www.tcl.tk/">Tcl/Tk</a>.
  You can import this shared library into either
  tclsh or wish to get SQLite database access from Tcl/Tk.
  See <a href="tclsqlite.html">the documentation</a> for details.
}
Product sqlitedll-V3.zip {
  This is a DLL of the SQLite library without the TCL bindings.
  The only external dependency is MSVCRT.DLL.
}

Product fts1dll-V3.zip {
  A precompiled 
  <a href="http://www.sqlite.org/cvstrac/wiki?p=FtsOne">FTS1 Module</a> 
  for Win32 platforms.
}

Product fts2dll-V3.zip {
  A precompiled 
  <a href="http://www.sqlite.org/cvstrac/wiki?p=FtsTwo">FTS2 Module</a> 
  for Win32 platforms.
}

Product sqlite*_analyzer-V3.zip {
  An analysis program for database files compatible with SQLite version
  VERSION and later.
}


Heading {Historical Binaries And Source Code}

Product sqlite-V2.bin.gz {
  A command-line program for accessing and modifying
  SQLite version 2.* databases on Linux-x86.
}
Changes to pages/index.in.
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
<td width="20"></td><td bgcolor="#80a796" width="1"></td><td width="20"></td>
<td valign="top">
<h3>Current Status</h3>

<p><ul>
<li><a href="releaselog/3_6_12.html">Version 3.6.12</a>
of SQLite is recommended for all new development.  Upgrading from
version 3.6.10 is optional.  Upgrading from versions prior to 3.6.10
is recommended.</li>
</ul></p>

<h3>Common Links</h3>

<p><ul>
<li> <a href="features.html">Features</a> </li>
<li> <a href="faq.html">Frequently Asked Questions</a> </li>







|
<







78
79
80
81
82
83
84
85

86
87
88
89
90
91
92
<td width="20"></td><td bgcolor="#80a796" width="1"></td><td width="20"></td>
<td valign="top">
<h3>Current Status</h3>

<p><ul>
<li><a href="releaselog/3_6_12.html">Version 3.6.12</a>
of SQLite is recommended for all new development.  Upgrading from
prior versions of SQLite is suggested for all users.</li>

</ul></p>

<h3>Common Links</h3>

<p><ul>
<li> <a href="features.html">Features</a> </li>
<li> <a href="faq.html">Frequently Asked Questions</a> </li>
Changes to pages/news.in.
14
15
16
17
18
19
20





















21
22
23
24
25
26
27
  hd_puts "<h3>$date - $title</h3>"
  regsub -all "\n( *\n)+" $text "</p>\n\n<p>" txt
  regsub -all {[Tt]icket #(\d+)} $txt \
      {<a href="http://www.sqlite.org/cvstrac/tktview?tn=\1">\0</a>} txt
  hd_resolve "<p>$txt</p>"
  hd_puts "<hr width=\"50%\">"
}






















newsitem {2009-Feb-18} {Version 3.6.11} {
  SQLite [version 3.6.11] adds support for the
  [sqlite3_backup_init | hot-backup] interface. This interface can be
  used to create a backup copy of an SQLite database while it is in use.
  The same interface can be used to initialize an in-memory database from
  a persistent disk image or to save an in-memory database into a







>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>







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
  hd_puts "<h3>$date - $title</h3>"
  regsub -all "\n( *\n)+" $text "</p>\n\n<p>" txt
  regsub -all {[Tt]icket #(\d+)} $txt \
      {<a href="http://www.sqlite.org/cvstrac/tktview?tn=\1">\0</a>} txt
  hd_resolve "<p>$txt</p>"
  hd_puts "<hr width=\"50%\">"
}

newsitem {2009-Mar-31} {Version 3.6.12} {
  SQLite [version 3.6.12] fixes a database corruption bug.  If an
  [incremental_vacuum] is rolled back in an in-memory database, the
  database will often go corrupt.  This only happens for in-memory
  databases.  On-disk databases are unaffected.  And the corruption
  only appears if an incremental vacuum is rolled back.  Nevertheless,
  upgrading is recommended for all applications, especially those that
  make use of in-memory databases and/or incremental vacuum.  See ticket #3761.

  SQLite [version 3.6.12] also adds support for the [sqlite3_unlock_notify()]
  interface and the [reverse_unordered_selects pragma] and the new
  ".genfkey" command in the CLI.  There are also performance improvements
  in many count(*) SQL statements.

  During testing of version 3.6.12, a bug in the [lookaside memory allocator]
  as it relates to [shared cache mode]
  was found that effects all prior versions of SQLite back to [version 3.6.1].
  If you are using shared cache mode you should either disable lookaside
  memory allocation or upgrade to version 3.6.12. See ticket #3743.
}

newsitem {2009-Feb-18} {Version 3.6.11} {
  SQLite [version 3.6.11] adds support for the
  [sqlite3_backup_init | hot-backup] interface. This interface can be
  used to create a backup copy of an SQLite database while it is in use.
  The same interface can be used to initialize an in-memory database from
  a persistent disk image or to save an in-memory database into a
Changes to pages/testing.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
<title>How SQLite Is Tested</title>

<tcl>
# This document contains many size statistics about SQLite, statistics
# that change frequently.  We want the document to be up-to-date.  To
# facilitate that, all the size values are defined by variables here
# which are then used as needed through the document.
#
# NOTE:  Also update the version number in the text!!!
#

set stat(coreSLOC)    62210  ;# Non-comment lines of amalgamation code 
set stat(tclcSLOC)    15710  ;# Non-comment lines of test C code
set stat(tclcNfile)      31  ;# Number of files of TCL C testcode + tclsqlite.c
set stat(tclcNByte)  747687  ;# Number of bytes of TCL C testcode + tclsqlite.c
set stat(tclsSLOC)   185697  ;# Non-comment lines of TCL test script
set stat(tclsNFile)     456  ;# Number of files of TCL test script
set stat(tclsNByte) 7924321  ;# Number of bytes of TCL test script
set stat(tclNTest)    23813  ;# Number of test cases in the TCL test suite
set stat(tclNEval)  1052056  ;# Number of test case evaluations
set stat(nSqlFuzz)   105234  ;# Number of SQL fuzz tests
set stat(vqNEval)     40637  ;# Number of test evaluations for veryquick.test
set stat(vqStmtCov)   96.94  ;# veryquick statement coverage
set stat(vqBrCov)     89.80  ;# veryquick branch coverage
set stat(allStmtCov)  99.37  ;# all.test statement coverage
set stat(allBrCov)    95.16  ;# all.test condition/decision coverage
set stat(th3SLOC)     34050  ;# Non-comment lines of TH3 script + mkth3.tcl
set stat(th3NByte)  2398737  ;# Number of bytes of TH3 test script + mkth3.tcl
set stat(th3NTest)     7014  ;# Number of test cases
set stat(th3NEval)  2251379  ;# Number of test case evaluations
set stat(sltsSLOC)    44332060 ;# Non-comment lines of SLT test script
set stat(sltsNByte) 1098986501 ;# Bytes of SLT test script
set stat(sltsNFile)        594 ;# Files of SLT test script
set stat(sltcSLOC)        1124 ;# Non-comment lines of SLT C code
set stat(sltNTest)     5830161 ;# Number of test cases in SLT
set stat(nAssert)         2442 ;# Number of assert statements


set stat(totalSLOC) [expr {$stat(tclcSLOC)+$stat(tclsSLOC)+
                           $stat(th3SLOC)+$stat(sltcSLOC)+$stat(sltsSLOC)}]

proc GB {expr} {
  set n [uplevel #0 expr $expr]











|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|







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
<title>How SQLite Is Tested</title>

<tcl>
# This document contains many size statistics about SQLite, statistics
# that change frequently.  We want the document to be up-to-date.  To
# facilitate that, all the size values are defined by variables here
# which are then used as needed through the document.
#
# NOTE:  Also update the version number in the text!!!
#

set stat(coreSLOC)    62881  ;# Non-comment lines of amalgamation code 
set stat(tclcSLOC)    14363  ;# Non-comment lines of test C code
set stat(tclcNfile)      22  ;# Number of files of TCL C testcode + tclsqlite.c
set stat(tclcNByte)  428101  ;# Number of bytes of TCL C testcode + tclsqlite.c
set stat(tclsSLOC)   216050  ;# Non-comment lines of TCL test script
set stat(tclsNFile)     473  ;# Number of files of TCL test script
set stat(tclsNByte) 8033724  ;# Number of bytes of TCL test script
set stat(tclNTest)    24003  ;# Number of test cases in the TCL test suite
set stat(tclNEval)  1675308  ;# Number of test case evaluations
set stat(nSqlFuzz)   103992  ;# Number of SQL fuzz tests
set stat(vqNEval)     40932  ;# Number of test evaluations for veryquick.test
set stat(vqStmtCov)   96.73  ;# veryquick statement coverage
set stat(vqBrCov)     81.07  ;# veryquick branch coverage
set stat(allStmtCov)  99+   ;# all.test statement coverage
set stat(allBrCov)    95+   ;# all.test condition/decision coverage
set stat(th3SLOC)    143280  ;# Non-comment lines of TH3 script + mkth3.tcl
set stat(th3NByte) 10003421  ;# Number of bytes of TH3 test script + mkth3.tcl
set stat(th3NTest)     7037  ;# Number of test cases
set stat(th3NEval)  2394072  ;# Number of test case evaluations
set stat(sltsSLOC)    45241898 ;# Non-comment lines of SLT test script
set stat(sltsNByte) 1120640686 ;# Bytes of SLT test script
set stat(sltsNFile)        617 ;# Files of SLT test script
set stat(sltcSLOC)        1113 ;# Non-comment lines of SLT C code
set stat(sltNTest)     7200160 ;# Number of test cases in SLT
set stat(nAssert)         2540 ;# Number of assert statements


set stat(totalSLOC) [expr {$stat(tclcSLOC)+$stat(tclsSLOC)+
                           $stat(th3SLOC)+$stat(sltcSLOC)+$stat(sltsSLOC)}]

proc GB {expr} {
  set n [uplevel #0 expr $expr]
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
<h1 align="center">How SQLite Is Tested</h1>

<h2>1.0 Introduction</h2>

<p>The reliability and robustness of SQLite is achieved in large part
by thorough and careful testing.</p>

<p>As of [version 3.6.11] (all statistics in the report are against that
release of SQLite),
the SQLite library consists of approximately
<tcl>KB {$stat(coreSLOC)}</tcl> KSLOC of C code.
(KSLOC means thousands of "Source Lines Of Code" or, in other words,
lines of code excluding blank lines and comments.)
By comparison, the project has
<tcl>







|







71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
<h1 align="center">How SQLite Is Tested</h1>

<h2>1.0 Introduction</h2>

<p>The reliability and robustness of SQLite is achieved in large part
by thorough and careful testing.</p>

<p>As of [version 3.6.12] (all statistics in the report are against that
release of SQLite),
the SQLite library consists of approximately
<tcl>KB {$stat(coreSLOC)}</tcl> KSLOC of C code.
(KSLOC means thousands of "Source Lines Of Code" or, in other words,
lines of code excluding blank lines and comments.)
By comparison, the project has
<tcl>
595
596
597
598
599
600
601
602

603
604
605
606
607
608
609
610
611
willing to do this because the other tests described above do an
excellent job of finding the bugs that are often introduced when
removing compiler warnings, so that product quality is probably not
decreased as a result.</p>

<h2>10.0 Summary</h2>

<p>SQLite is open source.  That give many people with the idea that

it is not well tested and is perhaps unreliable.  But that impression is
false.  SQLite has exhibited very high reliability in the field and
a very low defect rate, especially considering how rapidly it is evolving.
The quality of SQLite is achieved in part by careful code design and
implementation.  But extensive testing also plays a vital role in
maintaining and improving the quality of SQLite.  This document has
summarized the testing procedures that every release of SQLite undergoes
with the hopes of inspiring the reader to understand that SQLite is
suitable for use in mission-critical applications.</p>







|
>
|
|







595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
willing to do this because the other tests described above do an
excellent job of finding the bugs that are often introduced when
removing compiler warnings, so that product quality is probably not
decreased as a result.</p>

<h2>10.0 Summary</h2>

<p>SQLite is open source.  This gives many people with the idea that
it is not well tested as commercial software and is perhaps unreliable.
But that impression is false.  
SQLite has exhibited very high reliability in the field and
a very low defect rate, especially considering how rapidly it is evolving.
The quality of SQLite is achieved in part by careful code design and
implementation.  But extensive testing also plays a vital role in
maintaining and improving the quality of SQLite.  This document has
summarized the testing procedures that every release of SQLite undergoes
with the hopes of inspiring the reader to understand that SQLite is
suitable for use in mission-critical applications.</p>
Changes to pages/unlock_notify.in.
81
82
83
84
85
86
87









88
89
90
91
92
93
94

<p>
  The [sqlite3_unlock_notify()] API, which is only available if the library is
  compiled with the pre-processor symbol [SQLITE_ENABLE_UNLOCK_NOTIFY] defined,
  is [sqlite3_unlock_notify | documented here]. This page is no substitute for
  reading the full API documentation!










<p><b>The sqlite3_unlock_notify() API</b>

<p>
  After a call to [sqlite3_step()] or [sqlite3_prepare_v2()] returns 
  SQLITE_LOCKED, the [sqlite3_unlock_notify()] API may be invoked to register 
  for an unlock-notify callback. The unlock-notify callback is invoked by 
  SQLite after the database connection holding the table-lock that prevented







>
>
>
>
>
>
>
>
>







81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103

<p>
  The [sqlite3_unlock_notify()] API, which is only available if the library is
  compiled with the pre-processor symbol [SQLITE_ENABLE_UNLOCK_NOTIFY] defined,
  is [sqlite3_unlock_notify | documented here]. This page is no substitute for
  reading the full API documentation!

<p>
  The [sqlite3_unlock_notify()] interface is designed for use in systems
  that have a separate thread assigned to each [database connection].  There
  is nothing in the implementation that prevents a single thread from running
  multiple database connections.  However, the [sqlite3_unlock_notify()]
  interface only works on a single connection at a time, so the lock
  resolution logic presented here will only work for a single 
  database connection per thread.

<p><b>The sqlite3_unlock_notify() API</b>

<p>
  After a call to [sqlite3_step()] or [sqlite3_prepare_v2()] returns 
  SQLITE_LOCKED, the [sqlite3_unlock_notify()] API may be invoked to register 
  for an unlock-notify callback. The unlock-notify callback is invoked by 
  SQLite after the database connection holding the table-lock that prevented