Documentation Source Text

Check-in [eb70d3b295]
Login

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

Overview
Comment:Added news for 3.16.0. Typo fixes and last-minute changes.
Downloads: Tarball | ZIP archive
Timelines: family | ancestors | descendants | both | trunk
Files: files | file ages | folders
SHA1: eb70d3b29565e88954dfd71db5885cd2eed93387
User & Date: drh 2017-01-02 11:56:44.744
Context
2017-01-02
12:02
Add hashes and a chronology entry for the 3.16.0 release. (check-in: b01be9ce27 user: drh tags: trunk, release, version-3.16.0)
11:56
Added news for 3.16.0. Typo fixes and last-minute changes. (check-in: eb70d3b295 user: drh tags: trunk)
2016-12-31
19:55
Remove the not-found.html document. (check-in: 35ec903c39 user: drh tags: trunk)
Changes
Unified Diff Ignore Whitespace Patch
Changes to pages/changes.in.
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
proc chng {date desc {options {}}} {
  global nChng aChng xrefChng
  set aChng($nChng) [list $date $desc $options]
  set xrefChng($date) $nChng
  incr nChng
}

chng {2017-00-00 (3.16.0)} {
<li>Uses 9% fewer CPU cycles. (See the [CPU performance measurement] report for
    details on how the this performance increase was computed.)
<li>Added experimental support for [PRAGMA functions].
<li>Added the [SQLITE_DBCONFIG_NO_CKPT_ON_CLOSE] option to [sqlite3_db_config()].
<li>Enhance the [date and time functions] so that the 'unixepoch' modifier works
    for the full span of supported dates.
<li>Changed the default configuration of the [lookaside memory allocator] from
    500 slots of 128 bytes each into 125 slots of 512 bytes each.
<li>Enhanced "WHERE x NOT NULL" [partial indexes] so that they are usable if 
    the "x" column appears in a LIKE or GLOB operator.
<li>Enhanced [sqlite3_interrupt()] so that it interrupts [checkpoint] operations that
    are in process.
<li>Enhanced the [LIKE] and [GLOB] matching algorithm to be faster
    for cases when the pattern contains multiple wildcards.
<li>Added [SQLITE_FCNTL_WIN32_GET_HANDLE] file control opcode.
<li>Added ".mode quote" to the [command-line shell].
<li>Added ".lint fkey-indexes" to the [command-line shell].
<li>Added the [.imposter dot-command] to the [command-line shell].
<li>Added the [https://www.sqlite.org/src/file/ext/misc/remember.c | remember(V,PTR)]
    SQL function as a [loadable extension].
<li>Rename the [SQLITE_OMIT_BUILTIN_TEST] compile-time option to
    [SQLITE_UNTESTABLE] to better reflect the implications of using it.







|














|







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
proc chng {date desc {options {}}} {
  global nChng aChng xrefChng
  set aChng($nChng) [list $date $desc $options]
  set xrefChng($date) $nChng
  incr nChng
}

chng {2017-01-02 (3.16.0)} {
<li>Uses 9% fewer CPU cycles. (See the [CPU performance measurement] report for
    details on how the this performance increase was computed.)
<li>Added experimental support for [PRAGMA functions].
<li>Added the [SQLITE_DBCONFIG_NO_CKPT_ON_CLOSE] option to [sqlite3_db_config()].
<li>Enhance the [date and time functions] so that the 'unixepoch' modifier works
    for the full span of supported dates.
<li>Changed the default configuration of the [lookaside memory allocator] from
    500 slots of 128 bytes each into 125 slots of 512 bytes each.
<li>Enhanced "WHERE x NOT NULL" [partial indexes] so that they are usable if 
    the "x" column appears in a LIKE or GLOB operator.
<li>Enhanced [sqlite3_interrupt()] so that it interrupts [checkpoint] operations that
    are in process.
<li>Enhanced the [LIKE] and [GLOB] matching algorithm to be faster
    for cases when the pattern contains multiple wildcards.
<li>Added the [SQLITE_FCNTL_WIN32_GET_HANDLE] file control opcode.
<li>Added ".mode quote" to the [command-line shell].
<li>Added ".lint fkey-indexes" to the [command-line shell].
<li>Added the [.imposter dot-command] to the [command-line shell].
<li>Added the [https://www.sqlite.org/src/file/ext/misc/remember.c | remember(V,PTR)]
    SQL function as a [loadable extension].
<li>Rename the [SQLITE_OMIT_BUILTIN_TEST] compile-time option to
    [SQLITE_UNTESTABLE] to better reflect the implications of using it.
Changes to pages/cpu.in.
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
no test program can exactly mirror the behavior of all applications.

<p>
The speedtest1.c program is updated from time to time as the SQLite
developers' understanding of what constitutes "typical" usage evolves.


<tcl>hd_fragment microopt {micro-optimizations}</tcl>
<h2>Performance Measurement</h2>

<p>
[http://valgrind.org/docs/manual/cg-manual.html|Cachegrind] is used to
measure performance because it gives answers that are repeatable to 
7 or more significant digits.  In comparison, actual (wall-clock)
run times are scarcely repeatable beyond one significant digit.




<p>
The high repeatability of cachegrind allows the SQLite developers to
implement and measure "micro-optimizations".  A micro-optimization is
a change to the code that results in a very small performance increase.
Typical micro-optimizations reduce the number of CPU cycles by
about 0.05% or 0.1%.  Such improvements are impossible to measure with
real-world timings.  But hundreds or thousands of micro-optimizations
add up, resulting in measurable real-world performance gains.

<h1>Performance Measurement Workflow</h1>

<p>
As SQLite developers edit the SQLite source code, they run the
[https://www.sqlite.org/src/file/tool/speed-check.sh | speed-check.sh]







<








>
>
>


|

|
|
|







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
no test program can exactly mirror the behavior of all applications.

<p>
The speedtest1.c program is updated from time to time as the SQLite
developers' understanding of what constitutes "typical" usage evolves.



<h2>Performance Measurement</h2>

<p>
[http://valgrind.org/docs/manual/cg-manual.html|Cachegrind] is used to
measure performance because it gives answers that are repeatable to 
7 or more significant digits.  In comparison, actual (wall-clock)
run times are scarcely repeatable beyond one significant digit.

<tcl>hd_fragment microopt microoptimizations</tcl>
<h2>Microoptimizations</h2>

<p>
The high repeatability of cachegrind allows the SQLite developers to
implement and measure "microoptimizations".  A microoptimization is
a change to the code that results in a very small performance increase.
Typical micro-optimizations reduce the number of CPU cycles by 0.1% or
0.05% or even less.  Such improvements are impossible to measure with
real-world timings.  But hundreds or thousands of microoptimizations
add up, resulting in measurable real-world performance gains.

<h1>Performance Measurement Workflow</h1>

<p>
As SQLite developers edit the SQLite source code, they run the
[https://www.sqlite.org/src/file/tool/speed-check.sh | speed-check.sh]
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 "<blockquote>$txt</blockquote>"
  hd_puts "<hr width=\"50%\">"
}



















newsitem {2016-11-28} {Release 3.15.2} {
SQLite [version 3.15.2] is a bug-fix patch release that fixes several minor
issues in the 3.15.0 and 3.15.1 releases.
}

newsitem {2016-11-04} {Release 3.15.1} {







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







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
  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 "<blockquote>$txt</blockquote>"
  hd_puts "<hr width=\"50%\">"
}

newsitem {2017-01-02} {Release 3.16.0} {
SQLite [version 3.16.0] is a regularly schedule maintenance release.

<p>
This release includes many [microoptimizations] that collectively reduce
the CPU cycle count by about 9%,
add there have been important enhancements to the [command-line shell].

<p>Support for [PRAGMA functions] is added,
so that many pragma statements can be used as part of a larger SQL query.
This is considered an experimental feature.
We do not anticipate any changes to the [PRAGMA function] interface, but
will keep continue to call this interface "experimental" for a few release
cycles in case unforeseen issues arise.

<p>See the [version 3.16.0|change log] for other enhancements.
}

newsitem {2016-11-28} {Release 3.15.2} {
SQLite [version 3.15.2] is a bug-fix patch release that fixes several minor
issues in the 3.15.0 and 3.15.1 releases.
}

newsitem {2016-11-04} {Release 3.15.1} {
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
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
the Firefox developers at Mozilla.  The differences from version 
3.10.0 are minimal.
}

newsitem {2016-01-06} {Release 3.10.0} {
<p>SQLite [version 3.10.0] is a regularly scheduled maintenance release.
}

newsitem {2015-11-02} {Release 3.9.2} {
<p>SQLite [version 3.9.2] is a patch release fixing two obscure bugs.
(Details: [https://www.sqlite.org/src/tktview?name=8a2adec166|(1)],
[https://www.sqlite.org/src/tktview?name=ac661962a2|(2)]).
Upgrade only if you are having problems.
}

newsitem {2015-10-16} {Release 3.9.1} {
<p>SQLite [version 3.9.1] is a
[https://www.sqlite.org/src/vpatch?from=version-3.9.0&to=version-3.9.1|small patch]
to [version 3.9.0] that includes
a few simple build script and #ifdef tweaks to make the code easier to 
compile on a wider variety of platform.  There are no functional changes, 
except for a single
[https://www.sqlite.org/src/info/57eec374ae1d0a1d4a|minor bug-fix] in 
[the json1 extension] to stop it from recognizing form-feed 
(ASCII 0x0c) as a whitespace character, in conformance with 
[http://www.rfc-editor.org/rfc/rfc7159.txt|RFC7159].
}

newsitem {2015-10-14} {Release 3.9.0} {
<p>SQLite version 3.9.0 is a regularly schedule maintenance release.
Key changes include:
<ul>
<li>Begin using [http://semver.org/|semantic versioning].
<li>[json1|JSON SQL functions]
<li>The [FTS5] full-text search engine
<li>Support for [indexes on expressions]
<li>Support for [table-valued functions]
</ul>
See the [version 3.9.0|change log] for a long and more complete list
of changes.
}

newsitem {2015-07-29} {Release 3.8.11.1} {
<p>SQLite version 3.8.11.1 is a patch release that fixes two arcane
   issues that were reported shortly after 3.8.11 was released.  Upgrade
   from 3.8.11 only in the unlikely event that one of these obscure
   issues affect your code.
}

newsitem {2015-07-27} {Release 3.8.11} {
<p>SQLite version 3.8.11 is a regularly scheduled maintenance release.
   See the [version 3.8.11|change log] for details.
}

newsitem {2015-05-20} {Release 3.8.10.2} {
<p>Yikes!  Index corruption after a sequence of valid SQL statements!
<p>It has been many years since anything like 
   [https://www.sqlite.org/src/info/34cd55d6|this bug] has snuck into
   an official SQLite release.  But for the pasts seven months
   ([version 3.8.7] through [version 3.8.10.1])
   if you do an INSERT into a carefully
   crafted schema in which there are two nested triggers that convert
   an index key value from TEXT to INTEGER and then back
   to TEXT again, the INTEGER value might get inserted as the index
   key instead of the correct TEXT, resulting in index corruption.
   This patch release adds a single line of code to fix the problem.
<p>If you do actually encounter this problem, running [REINDEX] on the
   damaged indexes will clear it.
}

newsitem {2015-05-09} {Release 3.8.10.1} {
<p>The 3.8.10 release did not add the new [SQLITE_ENABLE_DBSTAT_VTAB]
   compile-time option to the [sqlite3_compileoption_used()] interface.
   This patch release fixes that omission.  And while we are at it,
   the associated [dbstat virtual table] was enhanced slightly and a
   harmless compiler warning was fixed.

   <p>There is no reason to upgrade from version 3.8.10 unless you are
   using the new [SQLITE_ENABLE_DBSTAT_VTAB] compile-time option.
}

newsitem {2015-05-07} {Release 3.8.10} {
<p>SQLite version 3.8.10 is a regularly scheduled maintenance release.
   This release features performance improvements, fixes to several
   arcane bugs found by the AFL fuzzer, the new "sqldiff.exe" command-line
   utility, improvements to the documentation, and other enhancements.
   See the <a href='releaselog/3_8_10.html'>release notes</a> for 
   additional information.
}

newsitem {2015-04-08} {Release 3.8.9} {
<p>SQLite version 3.8.9 is a regularly scheduled maintenance release.
   New features in this release include the 
   [PRAGMA index_xinfo] command, the [sqlite3_status64()] interface,
   and the ".dbinfo" command of the [command-line shell].
   See the <a href='releaselog/3_8_9.html'>release notes</a> for
   additional information.
}

newsitem {2015-02-25} {Release 3.8.8.3} {
<p>The 3.8.8.3 patch release fixes an obscure problem in the SQLite code
   generator that can cause incorrect results when the qualifying expression
   of a [partial index] is used inside the ON clause of a LEFT JOIN.
   This problem has been in the code since support for partial indexes
   was first added in version 3.8.0.  However, it is difficult to imagine
   a valid reason to every put the qualifying constraint inside the ON
   clause of a LEFT JOIN, and so this issue has never come up before.

<p>Any applications that is vulnerable to this bug would have encountered
   problems already.  Hence, upgrading from the previous release is optional.
}

newsitem {2015-01-30} {Release 3.8.8.2} {
<p>The 3.8.8.2 patch release fixes a single minor problem:  It ensures
   that the [sqlite3_wal_checkpoint(TRUNCATE)] operation will always truncate
   the [write-ahead log] even if log had already been reset and contained
   no new content.  It is unclear if this is a bug fix or a new feature.

<p>Something like this would normally go into the next regularly scheduled
   release, but a prominent SQLite user needed the change in a hurry so
   we were happy to rush it out via this patch.

<p>There is no reason to upgrade unless you actually need the enhanced
   behavior of [sqlite3_wal_checkpoint(TRUNCATE)].
}

newsitem {2015-01-20} {Release 3.8.8.1} {
<p>Within hours of releasing version 3.8.8, a bug was reported against
   the 10-month-old 3.8.4 release.  As that bug exists in all subsequent
   releases, the decision was made to issue a small patch to the
   3.8.8 before it came into widespread use.

<p>See ticket
   [https://www.sqlite.org/src/info/f97c4637102a3ae72b7911|f97c4637102a3ae72b7911]
   for a description of the bug.

<p>The changes between versions 3.8.8 and 3.8.8.1 are minimal.
}   

newsitem {2015-01-16} {Release 3.8.8} {
<p>SQLite [version 3.8.8] is a regularly schedule maintenance release of
   SQLite.

<p>There are no dramatic new features or performance enhancements in this
   release, merely incremental improvements.  Most of the performance gain
   in this release comes from refactoring the B-Tree rebalancing logic to
   avoid unnecessary memcpy() operations.  New features include the
   [PRAGMA data_version] statement and the ability to accept a
   [VALUES clause] with no arbitrary limit on the number of rows.
   Several obscure bugs have been fixed, including some multithreading
   races and a work-around for a compiler bug on some Macs.

<p>See the [version 3.8.8|change log] for a longer list of
   enhancements and bug fixes.
}



</tcl>

<a href="oldnews.html">Old news...</a>








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



155
156
157
158
159
160
161
162






















































































































































163
164
165
the Firefox developers at Mozilla.  The differences from version 
3.10.0 are minimal.
}

newsitem {2016-01-06} {Release 3.10.0} {
<p>SQLite [version 3.10.0] is a regularly scheduled maintenance release.
}























































































































































</tcl>

<a href="oldnews.html">Old news...</a>
Changes to pages/oldnews.in.
1
2
3
4
5
6
7
8
9
10
11
12
13



















































































































































14
15
16
17
18
19
20
<?xml version="1.0" encoding="Windows-1252"?>
<title>SQLite Older News</title>

<tcl>
proc newsitem {date title text} {
  regsub -all {[^a-z0-9]} $date _ tag
  hd_puts "<a name=\"$tag\"></a>"
  hd_puts "<h3>$date - $title</h3>"
  regsub -all "\n( *\n)+" $text "</p>\n\n<p>" txt
  hd_resolve "<blockquote>$txt</blockquote>"
  hd_puts "<hr width=\"50%\">"
}





















































































































































newsitem {2014-12-09} {Release 3.8.7.4} {
<p>SQLite [version 3.8.7.4] an unscheduled bug-fix release.  Changes from
   the previous release and from [version 3.8.7] are minimal.

<p>This release fixes adds in a mutex that is required by the changes of
   the 3.8.7.3 patch but was accidentally omitted.  The mutex was not required













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







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
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
<?xml version="1.0" encoding="Windows-1252"?>
<title>SQLite Older News</title>

<tcl>
proc newsitem {date title text} {
  regsub -all {[^a-z0-9]} $date _ tag
  hd_puts "<a name=\"$tag\"></a>"
  hd_puts "<h3>$date - $title</h3>"
  regsub -all "\n( *\n)+" $text "</p>\n\n<p>" txt
  hd_resolve "<blockquote>$txt</blockquote>"
  hd_puts "<hr width=\"50%\">"
}

newsitem {2015-11-02} {Release 3.9.2} {
<p>SQLite [version 3.9.2] is a patch release fixing two obscure bugs.
(Details: [https://www.sqlite.org/src/tktview?name=8a2adec166|(1)],
[https://www.sqlite.org/src/tktview?name=ac661962a2|(2)]).
Upgrade only if you are having problems.
}

newsitem {2015-10-16} {Release 3.9.1} {
<p>SQLite [version 3.9.1] is a
[https://www.sqlite.org/src/vpatch?from=version-3.9.0&to=version-3.9.1|small patch]
to [version 3.9.0] that includes
a few simple build script and #ifdef tweaks to make the code easier to 
compile on a wider variety of platform.  There are no functional changes, 
except for a single
[https://www.sqlite.org/src/info/57eec374ae1d0a1d4a|minor bug-fix] in 
[the json1 extension] to stop it from recognizing form-feed 
(ASCII 0x0c) as a whitespace character, in conformance with 
[http://www.rfc-editor.org/rfc/rfc7159.txt|RFC7159].
}

newsitem {2015-10-14} {Release 3.9.0} {
<p>SQLite version 3.9.0 is a regularly schedule maintenance release.
Key changes include:
<ul>
<li>Begin using [http://semver.org/|semantic versioning].
<li>[json1|JSON SQL functions]
<li>The [FTS5] full-text search engine
<li>Support for [indexes on expressions]
<li>Support for [table-valued functions]
</ul>
See the [version 3.9.0|change log] for a long and more complete list
of changes.
}

newsitem {2015-07-29} {Release 3.8.11.1} {
<p>SQLite version 3.8.11.1 is a patch release that fixes two arcane
   issues that were reported shortly after 3.8.11 was released.  Upgrade
   from 3.8.11 only in the unlikely event that one of these obscure
   issues affect your code.
}

newsitem {2015-07-27} {Release 3.8.11} {
<p>SQLite version 3.8.11 is a regularly scheduled maintenance release.
   See the [version 3.8.11|change log] for details.
}

newsitem {2015-05-20} {Release 3.8.10.2} {
<p>Yikes!  Index corruption after a sequence of valid SQL statements!
<p>It has been many years since anything like 
   [https://www.sqlite.org/src/info/34cd55d6|this bug] has snuck into
   an official SQLite release.  But for the pasts seven months
   ([version 3.8.7] through [version 3.8.10.1])
   if you do an INSERT into a carefully
   crafted schema in which there are two nested triggers that convert
   an index key value from TEXT to INTEGER and then back
   to TEXT again, the INTEGER value might get inserted as the index
   key instead of the correct TEXT, resulting in index corruption.
   This patch release adds a single line of code to fix the problem.
<p>If you do actually encounter this problem, running [REINDEX] on the
   damaged indexes will clear it.
}

newsitem {2015-05-09} {Release 3.8.10.1} {
<p>The 3.8.10 release did not add the new [SQLITE_ENABLE_DBSTAT_VTAB]
   compile-time option to the [sqlite3_compileoption_used()] interface.
   This patch release fixes that omission.  And while we are at it,
   the associated [dbstat virtual table] was enhanced slightly and a
   harmless compiler warning was fixed.

   <p>There is no reason to upgrade from version 3.8.10 unless you are
   using the new [SQLITE_ENABLE_DBSTAT_VTAB] compile-time option.
}

newsitem {2015-05-07} {Release 3.8.10} {
<p>SQLite version 3.8.10 is a regularly scheduled maintenance release.
   This release features performance improvements, fixes to several
   arcane bugs found by the AFL fuzzer, the new "sqldiff.exe" command-line
   utility, improvements to the documentation, and other enhancements.
   See the <a href='releaselog/3_8_10.html'>release notes</a> for 
   additional information.
}

newsitem {2015-04-08} {Release 3.8.9} {
<p>SQLite version 3.8.9 is a regularly scheduled maintenance release.
   New features in this release include the 
   [PRAGMA index_xinfo] command, the [sqlite3_status64()] interface,
   and the ".dbinfo" command of the [command-line shell].
   See the <a href='releaselog/3_8_9.html'>release notes</a> for
   additional information.
}

newsitem {2015-02-25} {Release 3.8.8.3} {
<p>The 3.8.8.3 patch release fixes an obscure problem in the SQLite code
   generator that can cause incorrect results when the qualifying expression
   of a [partial index] is used inside the ON clause of a LEFT JOIN.
   This problem has been in the code since support for partial indexes
   was first added in version 3.8.0.  However, it is difficult to imagine
   a valid reason to every put the qualifying constraint inside the ON
   clause of a LEFT JOIN, and so this issue has never come up before.

<p>Any applications that is vulnerable to this bug would have encountered
   problems already.  Hence, upgrading from the previous release is optional.
}

newsitem {2015-01-30} {Release 3.8.8.2} {
<p>The 3.8.8.2 patch release fixes a single minor problem:  It ensures
   that the [sqlite3_wal_checkpoint(TRUNCATE)] operation will always truncate
   the [write-ahead log] even if log had already been reset and contained
   no new content.  It is unclear if this is a bug fix or a new feature.

<p>Something like this would normally go into the next regularly scheduled
   release, but a prominent SQLite user needed the change in a hurry so
   we were happy to rush it out via this patch.

<p>There is no reason to upgrade unless you actually need the enhanced
   behavior of [sqlite3_wal_checkpoint(TRUNCATE)].
}

newsitem {2015-01-20} {Release 3.8.8.1} {
<p>Within hours of releasing version 3.8.8, a bug was reported against
   the 10-month-old 3.8.4 release.  As that bug exists in all subsequent
   releases, the decision was made to issue a small patch to the
   3.8.8 before it came into widespread use.

<p>See ticket
   [https://www.sqlite.org/src/info/f97c4637102a3ae72b7911|f97c4637102a3ae72b7911]
   for a description of the bug.

<p>The changes between versions 3.8.8 and 3.8.8.1 are minimal.
}   

newsitem {2015-01-16} {Release 3.8.8} {
<p>SQLite [version 3.8.8] is a regularly schedule maintenance release of
   SQLite.

<p>There are no dramatic new features or performance enhancements in this
   release, merely incremental improvements.  Most of the performance gain
   in this release comes from refactoring the B-Tree rebalancing logic to
   avoid unnecessary memcpy() operations.  New features include the
   [PRAGMA data_version] statement and the ability to accept a
   [VALUES clause] with no arbitrary limit on the number of rows.
   Several obscure bugs have been fixed, including some multithreading
   races and a work-around for a compiler bug on some Macs.

<p>See the [version 3.8.8|change log] for a longer list of
   enhancements and bug fixes.
}

newsitem {2014-12-09} {Release 3.8.7.4} {
<p>SQLite [version 3.8.7.4] an unscheduled bug-fix release.  Changes from
   the previous release and from [version 3.8.7] are minimal.

<p>This release fixes adds in a mutex that is required by the changes of
   the 3.8.7.3 patch but was accidentally omitted.  The mutex was not required
Changes to pages/pragma.in.
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
or "main" or "temp" for the main and the TEMP databases.  ^If the optional
schema name is omitted, "main" is assumed.  ^In some pragmas, the schema
name is meaningless and is simply ignored.  In the documentation below,
pragmas for which the schema name is meaningful are shown with a
"<i>schema.</i>" prefix.</p>

<tcl>
Section {PRAGMA functions} pragfunc {{PRAGMA functions}}
</tcl>

<p>
PRAGMAs that return results and that have no side-effects can be 
accessed from ordinary [SELECT] statements as [table-valued functions].
For each participating PRAGMA, the corresponding table-valued function
has the same name as the PRAGMA with a 7-character "pragma_" prefix.







|







150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
or "main" or "temp" for the main and the TEMP databases.  ^If the optional
schema name is omitted, "main" is assumed.  ^In some pragmas, the schema
name is meaningless and is simply ignored.  In the documentation below,
pragmas for which the schema name is meaningful are shown with a
"<i>schema.</i>" prefix.</p>

<tcl>
Section {PRAGMA functions} pragfunc {{PRAGMA functions} {PRAGMA function}}
</tcl>

<p>
PRAGMAs that return results and that have no side-effects can be 
accessed from ordinary [SELECT] statements as [table-valued functions].
For each participating PRAGMA, the corresponding table-valued function
has the same name as the PRAGMA with a 7-character "pragma_" prefix.
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
<li><p>
This feature could be used to implement
[https://en.wikipedia.org/wiki/Information_schema | information schema]
by first creating a separate schema using
<blockquote><pre>
[ATTACH] ':memory:' AS 'information_schema';
</pre></blockquote>
Then creating a
[VIEW|VIEWs] in that schema that implement the official information schema
tables using table-valued PRAGMA functions.
<li><p>
This feature is experimental and is subject to change.  Further documentation
will become available if and when the table-valued functions for PRAGMAs
feature becomes officially supported.
<li><p>







|







206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
<li><p>
This feature could be used to implement
[https://en.wikipedia.org/wiki/Information_schema | information schema]
by first creating a separate schema using
<blockquote><pre>
[ATTACH] ':memory:' AS 'information_schema';
</pre></blockquote>
Then creating
[VIEW|VIEWs] in that schema that implement the official information schema
tables using table-valued PRAGMA functions.
<li><p>
This feature is experimental and is subject to change.  Further documentation
will become available if and when the table-valued functions for PRAGMAs
feature becomes officially supported.
<li><p>
Changes to pages/selfcontained.in.
32
33
34
35
36
37
38
39
40
41
42
43
44
<li>realloc()
<li>free()
</ul>
<p>But those routines are optional can can be omitted
using a [SQLITE_ZERO_MALLOC|compile-time option].

<p>
Default buildsof SQLite also contain appropriate [VFS|VFS objects] for talking
to underlying operating system, and those VFS objects will contain
operating system calls such as open(), read(), write(), fsync(), and
so forth.  All of these interfaces are readily available on most platforms,
and custom VFSes can be designed to run SQLite on even the most
austere embedded devices.







|





32
33
34
35
36
37
38
39
40
41
42
43
44
<li>realloc()
<li>free()
</ul>
<p>But those routines are optional can can be omitted
using a [SQLITE_ZERO_MALLOC|compile-time option].

<p>
Default SQLite builds contain appropriate [VFS|VFS objects] for talking
to underlying operating system, and those VFS objects will contain
operating system calls such as open(), read(), write(), fsync(), and
so forth.  All of these interfaces are readily available on most platforms,
and custom VFSes can be designed to run SQLite on even the most
austere embedded devices.