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
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
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
|
<!DOCTYPE html>
<html><head>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<link href="sqlite.css" rel="stylesheet">
<title>Recent SQLite News</title>
<!-- path= -->
</head>
<body>
<div class=nosearch>
<a href="index.html">
<img class="logo" src="images/sqlite370_banner.gif" alt="SQLite" border="0">
</a>
<div><!-- IE hack to prevent disappearing logo --></div>
<div class="tagline desktoponly">
Small. Fast. Reliable.<br>Choose any three.
</div>
<div class="menu mainmenu">
<ul>
<li><a href="index.html">Home</a>
<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
<li class='wideonly'><a href='about.html'>About</a>
<li class='desktoponly'><a href="docs.html">Documentation</a>
<li class='desktoponly'><a href="download.html">Download</a>
<li class='wideonly'><a href='copyright.html'>License</a>
<li class='desktoponly'><a href="support.html">Support</a>
<li class='desktoponly'><a href="prosupport.html">Purchase</a>
<li class='search' id='search_menubutton'>
<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
</ul>
</div>
<div class="menu submenu" id="submenu">
<ul>
<li><a href='about.html'>About</a>
<li><a href='docs.html'>Documentation</a>
<li><a href='download.html'>Download</a>
<li><a href='support.html'>Support</a>
<li><a href='prosupport.html'>Purchase</a>
</ul>
</div>
<div class="searchmenu" id="searchmenu">
<form method="GET" action="search">
<select name="s" id="searchtype">
<option value="d">Search Documentation</option>
<option value="c">Search Changelog</option>
</select>
<input type="text" name="q" id="searchbox" value="">
<input type="submit" value="Go">
</form>
</div>
</div>
<script>
function toggle_div(nm) {
var w = document.getElementById(nm);
if( w.style.display=="block" ){
w.style.display = "none";
}else{
w.style.display = "block";
}
}
function toggle_search() {
var w = document.getElementById("searchmenu");
if( w.style.display=="block" ){
w.style.display = "none";
} else {
w.style.display = "block";
setTimeout(function(){
document.getElementById("searchbox").focus()
}, 30);
}
}
function div_off(nm){document.getElementById(nm).style.display="none";}
window.onbeforeunload = function(e){div_off("submenu");}
/* Disable the Search feature if we are not operating from CGI, since */
/* Search is accomplished using CGI and will not work without it. */
if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
document.getElementById("search_menubutton").style.display = "none";
}
/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
function hideorshow(btn,obj){
var x = document.getElementById(obj);
var b = document.getElementById(btn);
if( x.style.display!='none' ){
x.style.display = 'none';
b.innerHTML='show';
}else{
x.style.display = '';
b.innerHTML='hide';
}
return false;
}
var antiRobot = 0;
function antiRobotGo(){
if( antiRobot!=3 ) return;
antiRobot = 7;
var j = document.getElementById("mtimelink");
if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
}
function antiRobotDefense(){
document.body.onmousedown=function(){
antiRobot |= 2;
antiRobotGo();
document.body.onmousedown=null;
}
document.body.onmousemove=function(){
antiRobot |= 2;
antiRobotGo();
document.body.onmousemove=null;
}
setTimeout(function(){
antiRobot |= 1;
antiRobotGo();
}, 100)
antiRobotGo();
}
antiRobotDefense();
</script>
<h2>Recent News</h2>
<a name="2022_12_28"></a><h3>2022-12-28 - <a href="releaselog/3_40_1.html">Version 3.40.1</a></h3><blockquote>
Version 3.40.1 is a patch release that fixes some obscure problems
in version 3.40.0. The problems fixed have no impact on most applications.
Upgrading is only necessary if you encounter problems.
<p>
The two most important fixes are these:
<ul>
<li><p>
Fix the <a href="cli.html#safemode">--safe command-line option</a> on the <a href="cli.html">CLI</a> so that it
correctly disallows functions with side-effects. This is a bug
in the CLI — <i>not</i> a bug in the
SQLite library — and it only affects the --safe command-line
option, making that option less than fully "safe". As the number
of systems that use the --safe command-line option in the CLI is
approximately zero, this is not considered an important bug. However,
a third-party wrote a CVE against it which caused considerable angst
among maintainers, so it seems good to get the fix into circulation
sooner rather than wait on the next major release.
<li><p>
The optional <a href="malloc.html#memsys5">memsys5</a> memory allocator picked up a bug that might
put it into an infinite loop for very large (500MiB) allocations.
Almost all systems use their native memory allocator, not memsys5.
Memsys5 is only used if SQLite is compiled using SQLITE_ENABLE_MEMSYS5
and then initialized using <a href="c3ref/config.html">sqlite3_config</a>(<a href="c3ref/c_config_covering_index_scan.html#sqliteconfigheap">SQLITE_CONFIG_HEAP</a>).
Very, very few systems do this, and so the problem is not considered
to be serious.
</ul>
<p>
See the <a href="https://sqlite.org/src/timeline?r=branch-3.40">branch-3.40 timeline</a>
for a complete listing of changes that have gone into this patch release.
</blockquote><hr width="50%"><a name="2022_11_16"></a><h3>2022-11-16 - <a href="releaselog/3_40_0.html">Version 3.40.0</a></h3><blockquote>
Version 3.40.0 is a new feature release of SQLite. See the
<a href="releaselog/3_40_0.html">change log</a> for details.
Key enhancements in this release include:
<ol>
<li><p>
Official support for compiling
<a href="https://sqlite.org/wasm/doc/trunk/index.md">SQLite to WASM</a>
and running it in a web browser.
<li><p>
New and improved <a href="recovery.html">recovery extension</a> for extracting
data from corrupted database files.
</ol>
<p>
This release also includes performance enhancements and
improvements to the query planner.
<p>
A psychological milestone: The performance benchmark that
the SQLite developers have used for many years has for
the first time dropped below 1 billion CPU cycles
(measured using cachegrind) when run in <a href="wal.html">WAL mode</a>.
This is less than half the number of CPU cycles used as
recently as 8 years ago. (The graph below shows SQLite using
a <a href="lockingv3.html#rollback">rollback journal</a> which uses fewer CPU cycles at the expense
of extra I/O. The benchmark passed through the 1 billion cycle
barrier for rollback journals for the previous release.)
<p align="center">
<img src="images/sschart20221116.jpg" align="center" style="margin:1px solid grey;"></img>
</p>
</blockquote><hr width="50%"><a name="2022_09_29"></a><h3>2022-09-29 - <a href="releaselog/3_39_4.html">Version 3.39.4</a></h3><blockquote>
Version 3.39.4 is a security release that addresses a single
long-standing problem in the <a href="fts3.html">FTS3 extension</a>. An attacker
who is able to execute arbitrary SQL statements and who can create
a corrupt database that is 2GB or larger in size might be able to trick
FTS3 into overflowing an integer used to size a memory allocation,
causing the allocation to be too small and ultimately resulting in
a buffer overrun. The release also includes fixes for other
obscure weaknesses, as described in the release notes.
</blockquote><hr width="50%"><a name="2022_09_05"></a><h3>2022-09-05 - <a href="releaselog/3_39_3.html">Version 3.39.3</a></h3><blockquote>
Version 3.39.3 is a patch release that fixes a few obscure problems
in the 3.39.0 release. See the release notes for details.
</blockquote><hr width="50%"><a name="2022_07_21"></a><h3>2022-07-21 - <a href="releaselog/3_39_2.html">Version 3.39.2</a></h3><blockquote>
Version 3.39.2 is a security release that addresses multiple long-standing
issues in SQLite. The most severe problem is identified by CVE-2022-35737.
That issue is associated with the auxiliary C-language APIs
of SQLite and cannot be reached using SQL or database inputs, and hence is
unlikely to affect your application. Nevertheless, upgrading is recommended.
The other issues are comparatively minor.
This release also fixes a performance regression that appeared in version
3.39.0 that might affect some multi-way joins that use LEFT JOIN.
</blockquote><hr width="50%"><a name="2022_07_13"></a><h3>2022-07-13 - <a href="releaselog/3_39_1.html">Version 3.39.1</a></h3><blockquote>
Version 3.39.1 is a patch release that fixes a few minor problem in version
3.39.0. Upgrading is optional.
</blockquote><hr width="50%"><a name="2022_06_25"></a><h3>2022-06-25 - <a href="releaselog/3_39_0.html">Version 3.39.0</a></h3><blockquote>
Version 3.39.0 is regular maintenance release of SQLite. The key enhancement
in this release is added support for RIGHT and FULL JOIN. There are other
language and performance enhancements as well — see the
<a href="releaselog/3_39_0.html">release notes</a> for details.
</blockquote><hr width="50%"><a name="2022_05_06"></a><h3>2022-05-06 - <a href="releaselog/3_38_5.html">Version 3.38.5</a></h3><blockquote>
The 3.38.4 patch release included a minor change to the <a href="cli.html">CLI</a> source code
that did not work. The release manager only ran a subset of the normal
release tests, and hence did not catch the problem. As a result, the CLI
will segfault when using columnar output modes in version 3.38.4. This
blunder did not affect the core SQLite library. It only affected the CLI.
<p>
Take-away lesson: <b>Always</b> run <b>all</b> of your tests prior to
a release - even a trival patch release. <b>Always</b>.
<p>
The 3.38.5 patch release fixes the 3.38.4 blunder.
</blockquote><hr width="50%"><a name="2022_05_04"></a><h3>2022-05-04 - <a href="releaselog/3_38_4.html">Version 3.38.4</a></h3><blockquote>
Another user-discovered problem in the new Bloom filter optimization
is fixed in this patch release. Without the fix, it is possible for
a multi-way join that uses a Bloom filters for two or more tables in
the join to enter an infinite loop if the key constraint on one of those
tables contains a NULL value.
</blockquote><hr width="50%"><a name="2022_04_27"></a><h3>2022-04-27 - <a href="releaselog/3_38_3.html">Version 3.38.3</a></h3><blockquote>
Version 3.38.3 fixes a bug in the automatic-index and Bloom filter
construction logic that might cause SQLite to be overly aggressive
in the use of ON clause constraints, resulting in a incorret
automatic-index or Bloom filter that excludes some valid rows from
output. The bug was introduced in version 3.38.0. Other minor
changes were tossed in to complete the patch.
</blockquote><hr width="50%"><a name="2022_03_26"></a><h3>2022-03-26 - <a href="releaselog/3_38_2.html">Version 3.38.2</a></h3><blockquote>
Version 3.38.2 fixes another bug in the new Bloom filter
optimization that might cause incorrect answers for a
LEFT JOIN that has an IS NULL constraint on the right-hand
table.
</blockquote><hr width="50%"><a name="2022_03_12"></a><h3>2022-03-12 - <a href="releaselog/3_38_1.html">Version 3.38.1</a></h3><blockquote>
Version 3.38.1 fixes a pair of bugs in the Bloom filter
optimization that was introduced in version 3.38.0. These
bugs might cause incorrect answers for some obscure queries.
Various other minor problems and documentation typos were
fixed at the same time.
</blockquote><hr width="50%"><a name="2022_02_22"></a><h3>2022-02-22 - <a href="releaselog/3_38_0.html">Version 3.38.0</a></h3><blockquote>
Version 3.38.0 is a routine maintenance release of
SQLite. There are various minor enhancements and
about a 0.5% reduction in the number of CPU cycles
used. See the
<a href="releaselog/3_38_0.html">release notes</a> for
more detail.
</blockquote><hr width="50%"><a name="2022_01_06"></a><h3>2022-01-06 - <a href="releaselog/3_37_2.html">Version 3.37.2</a></h3><blockquote>
Version 3.37.2 fixes a
<a href="howtocorrupt.html#svptbug">database corruption bug</a>. You are
encouraged to upgrade, especially if you are using <a href="lang_savepoint.html">SAVEPOINT</a>.</p>
<p>The problem first appeared in version 3.35.0 (2021-03-12) and
affects all subsequent releases through 3.37.1.
If temporary files are store in memory (which is not the default
behavior, but is sometimes selected by applications using either
<a href="compile.html#temp_store">-DSQLITE_TEMP_STORE</a> or <a href="pragma.html#pragma_temp_store">PRAGMA temp_store</a>) and
if a <a href="lang_savepoint.html">SAVEPOINT</a> is rolled back and then subsequent changes
within the same transaction are committed, the database file might
(with low but non-zero probability) go corrupt.
</blockquote><hr width="50%"><a name="2021_12_30"></a><h3>2021-12-30 - <a href="releaselog/3_37_1.html">Version 3.37.1</a></h3><blockquote>
Version 3.37.1 fixes a bug in the <a href="lang_upsert.html">UPSERT</a> logic, introduced by
the UPSERT enhancements of <a href="releaselog/3_35_0.html">version 3.35.0</a>, that can cause
incorrect byte-code to be generated in some cases, resulting
in an infinite loop in the byte code, or a NULL-pointer dereference.
This patch release also fixes some other minor problems with
assert() statements and in the <a href="cli.html">CLI</a>.
</blockquote><hr width="50%"><a name="2021_11_27"></a><h3>2021-11-27 - <a href="releaselog/3_37_0.html">Version 3.37.0</a></h3><blockquote>
Version 3.37.0 is a routine maintenance release of SQLite.
The biggest new feature in this release is support for
<a href="stricttables.html">STRICT tables</a>. Other enhancements are described in
the <a href="releaselog/3_37_0.html">release notes</a>.
</blockquote><hr width="50%"><a name="2021_06_18"></a><h3>2021-06-18 - <a href="releaselog/3_36_0.html">Version 3.36.0</a></h3><blockquote>
Version 3.36.0 is a routine maintenance release of SQLite.
There are no new major features, only incremental improvements
to existing features and small performance improvements.
</blockquote><hr width="50%"><a name="2021_04_19"></a><h3>2021-04-19 - Patch release 3.35.5</h3><blockquote>
The new ALTER TABLE DROP COLUMN capability that was added
in the 3.35.0 release contained a bug that might cause the
table content to go corrupt when the table was rewritten
to remove the dropped column. Fixed by this patch.
</blockquote><hr width="50%"><a name="2021_04_02"></a><h3>2021-04-02 - Patch release 3.35.4</h3><blockquote>
Version 3.35.4 is yet another patch release to fix
obscure problems in features associated with the 3.35.0.
</blockquote><hr width="50%"><a name="2021_03_26"></a><h3>2021-03-26 - Patch release 3.35.3</h3><blockquote>
Version 3.35.3 contains patches for a handful of minor
problems discovered in prior releases.
</blockquote><hr width="50%"><a name="2021_03_17"></a><h3>2021-03-17 - Patch release 3.35.2</h3><blockquote>
Version 3.35.2 is a small patch release to fix some minor problems
that were discovered shortly after the 3.35.1 release.
</blockquote><hr width="50%"><a name="2021_03_15"></a><h3>2021-03-15 - Patch release 3.35.1</h3><blockquote>
A user discovered an issue with the new DROP COLUMN capability
in version 3.35.0, and so version 3.35.1 was created to fix it.
No need to upgrade if you are not using DROP COLUMN.
</blockquote><hr width="50%"><a name="2021_03_12"></a><h3>2021-03-12 - Release 3.35.0</h3><blockquote>
SQLite version 3.35.0 is a routine maintenance release. This
release adds a number of new language features, including
support for ALTER TABLE DROP COLUMN, built-in math functions,
generalized UPSERT, and the MATERIALIZED hint on common table
expressions. There are also query planner optimizations and
incremental CLI improvements.
</blockquote><hr width="50%"><a name="2020_01_20"></a><h3>2020-01-20 - Release 3.34.1</h3><blockquote>
SQLite version 3.34.1 is a patch releases that fixes a possible
use-after-free bug that can be provoked by malicious SQL. Other
minor issues in extensions and documentation are also fixed.
</blockquote><hr width="50%"><a name="2020_12_01"></a><h3>2020-12-01 - Release 3.34.0</h3><blockquote>
SQLite version 3.34.0 is a routine maintenance release. This
release adds incremental improvements to performance and features,
including enhancements to the query planner, multiple recursive
SELECTS in recursive common table expressions, and better error messages
from CHECK constraint failures. See the change log for details.
</blockquote><hr width="50%"><a name="2020_08_14"></a><h3>2020-08-14 - Release 3.33.0</h3><blockquote>
SQLite version 3.33.0 is a routine maintenance release. This
release features added support for "UPDATE FROM" following the
PostgreSQL syntax, and a doubling of the maximum database size
to 281 TB, as well as many other improvements. See the change
log for details.
</blockquote><hr width="50%"><a name="2020_06_18"></a><h3>2020-06-18 - Release 3.32.3</h3><blockquote>
The 3.32.3 release is a patch release that contains fixes for
various issues discovered by fuzzers. None of the issues fixed
are likely to be encountered by applications that use SQLite in
ordinary ways, though upgrading never hurts.
<p>
Map of all changes since the 3.32.0 release:
<a href="https://www.sqlite.org/src/timeline?p=version-3.32.3&bt=version-3.32.0">https://www.sqlite.org/src/timeline?p=version-3.32.3&bt=version-3.32.0</a>
</blockquote><hr width="50%"><a name="2020_06_04"></a><h3>2020-06-04 - Release 3.32.2</h3><blockquote>
The 3.32.2 release is a one-line change relative to 3.32.1
that fixes a long-standing bug in the COMMIT command. Since
<a href="releaselog/3_17_0.html">version 3.17.0</a>, if you were to retry a COMMIT command over
and over after it returns <a href="rescode.html#busy">SQLITE_BUSY</a>, it might eventually
report success, even though it was still blocked. This patch
fixes the problem.
</blockquote><hr width="50%"><a name="2020_05_25"></a><h3>2020-05-25 - Release 3.32.1</h3><blockquote>
<a href="https://en.wikipedia.org/wiki/Grey_hat">Grey-hats</a> published
information about two SQLite bugs approximately 24 hours after
the release of version 3.32.0. These bugs enable maliciously
crafted SQL to crash the process that is running SQLite. Both
bugs are long-standing problems that affect releases prior to
3.32.0. The 3.32.1 release fixes both problems.
</blockquote><hr width="50%"><a name="2020_05_22"></a><h3>2020-05-22 - Release 3.32.0</h3><blockquote>
Version 3.32.0 is an ordinary maintenance release of SQLite.
This release features the ability to run an
<a href="lang_analyze.html#approx">approximate ANALYZE</a> to gather database statistics for
use by the query planner, without having to scan every row
of every index.
See the <a href="releaselog/3_32_0.html">change log</a> for additional enhancements
and improvements.
</blockquote><hr width="50%"><a name="2020_01_27"></a><h3>2020-01-27 - Release 3.31.1</h3><blockquote>
Applications that use SQLite should only interface with SQLite
through the officially published APIs. Applications should not
depend upon or use the internal data structures of SQLite as those
structures might change from one release to another. However, there
is a popular application that does depend on the details of the
internal layout of data in an internal SQLite data structure, and
those details changed in version 3.31.0, breaking the application.
This is, technically, a bug in the application, not in SQLite.
But it is within the power of SQLite to fix it, by reverting the
internal data structure change, and so that is what we have done
for the 3.31.1 release.
</blockquote><hr width="50%"><a name="2020_01_22"></a><h3>2020-01-22 - Release 3.31.0</h3><blockquote>
Version 3.31.0 is an ordinary maintenance release of SQLite.
This release features the ability to define
<a href="gencol.html">generated columns</a> for tables as well as many other enhancements.
See the <a href="releaselog/3_31_0.html">change log</a> for additional information.
</blockquote><hr width="50%"><a name="2019_10_11"></a><h3>2019-10-11 - Release 3.30.1</h3><blockquote>
Version 3.30.1 is a bug-fix release that addresses a problem
that can occur when an aggregate function in a nested query
makes use of the new FILTER clause capability. Some addition
patches for various obscure issues are also included, for
completeness.
</blockquote><hr width="50%"><a name="2019_10_04"></a><h3>2019-10-04 - Release 3.30.0</h3><blockquote>
Version 3.30.0 is a regularly scheduled maintenance release
of SQLite containing miscellaneous performance and feature
enhancements. This release adds support fo the NULLS FIRST
and NULLS LAST clauses on ORDER BY statements and the
addition of FILTER clauses on all aggregate functions.
See the <a href="releaselog/3_30_0.html">change log</a> for details.
</blockquote><hr width="50%"><a name="2019_07_10"></a><h3>2019-07-10 - Release 3.29.0</h3><blockquote>
Version 3.29.0 is a regularly scheduled maintenance release
of SQLite containing miscellaneous performance and feature
enhancements. See the <a href="releaselog/3_29_0.html">change log</a> for
details.
<p>
Beginning with this release, the
<a href="quirks.html#dblquote">double-quoted string literal</a> misfeature is deprecated.
The misfeature is still enabled by default, for legacy
compatibility, however developers are encouraged to
disable it at compile-time using the
<a href="compile.html#dqs">-DSQLITE_DQS=0</a> option, or at run-time using
the <a href="c3ref/c_dbconfig_defensive.html#sqlitedbconfigdqsdml">SQLITE_DBCONFIG_DQS_DML</a> and <a href="c3ref/c_dbconfig_defensive.html#sqlitedbconfigdqsddl">SQLITE_DBCONFIG_DQS_DDL</a>
actions to the <a href="c3ref/db_config.html">sqlite3_db_config()</a> interface. This is
especially true for double-quoted string literals in
CREATE TABLE and CREATE INDEX statements, as those elements
can cause unexpected problems following an ALTER TABLE.
See ticket <a href="https://www.sqlite.org/src/info/9b78184be266fd70">9b78184be266fd70</a>
for an example.
</blockquote><hr width="50%"><a name="2019_04_16"></a><h3>2019-04-16 - Release 3.28.0</h3><blockquote>
Version 3.28.0 is a regularly scheduled maintenance release
of SQLite containing miscellaneous performance and feature
enhancements. See the <a href="releaselog/3_28_0.html">change log</a> for
details.
<p>
This release fixes an obscure security issue. Applications
using older versions of SQLite may be vulnerable if
<ol>
<li> SQLite is compiled with certain optional extensions
enabled, and
<li> the attacker is able to inject arbitrary SQL.
</ol>
We are not aware of any applications that are vulnerable to
this problem. On the other hand, we do not know about
every application that uses SQLite.
If your application allows unauthenticated users on the internet
(and hence potential attackers) to run arbitrary SQL and if
you build SQLite with any of the optional extensions enabled,
then you should take this upgrade at your earliest opportunity.
<p>
For further information about improving SQLite's robustness
in internet-facing applications, see the our
<a href="security.html">security recommendations</a>.
</blockquote><hr width="50%"><a name="2019_02_25"></a><h3>2019-02-25 - Release 3.27.2</h3><blockquote>
Version 3.27.2 is a patch release that
fixes a two bugs and various documentation
errors found in the version 3.27.1. The
changes from version 3.27.1 and 3.27.0 are
minimal.
</blockquote><hr width="50%"><a name="2019_02_08"></a><h3>2019-02-08 - Release 3.27.1</h3><blockquote>
After release 3.27.0 was tagged, but before the build could
be completed and uploaded, a
<a href="https://www.sqlite.org/src/info/4e8e4857d32d401f">long-standing bug</a>
in the query optimizer was reported via System.Data.SQLite.
Since people will be upgrading anyhow, we decided
publish the fix for this newly discovered problems right
away. Hence, 3.27.1 was released less than 24 hours after
3.27.0.
<p>
It would have been better if the query optimizer bug had come to
our attention one day earlier, so that we could have incorporated
a fix into 3.27.0, but sometimes that's the way things go.
</blockquote><hr width="50%"><a name="2019_02_07"></a><h3>2019-02-07 - Release 3.27.0</h3><blockquote>
SQLite <a href="releaselog/3_27_0.html">version 3.27.0</a> is a routine maintenance release with various
performance and feature enhancements. See the
<a href="releaselog/3_27_0.html">release notes</a> for details.
</blockquote><hr width="50%"><a name="2018_12_01"></a><h3>2018-12-01 - Release 3.26.0</h3><blockquote>
SQLite <a href="releaselog/3_26_0.html">version 3.26.0</a> is a routine maintenance release with various
performance and feature enhancements. See the
<a href="releaselog/3_26_0.html">release notes</a> for details.
</blockquote><hr width="50%"><a name="2018_11_05"></a><h3>2018-11-05 - Release 3.25.3</h3><blockquote>
SQLite <a href="releaselog/3_25_3.html">version 3.25.3</a> is a third patch against 3.25.0 that fixes various
problems that have come to light and which seem serious enough to
justify a patch.
</blockquote><hr width="50%"><a name="2018_09_25"></a><h3>2018-09-25 - Release 3.25.2</h3><blockquote>
SQLite <a href="releaselog/3_25_2.html">version 3.25.2</a> is another patch against 3.25.0 that fixes still
more problems associated with the new <a href="windowfunctions.html">window function</a> feature and the
<a href="lang_altertable.html">ALTER TABLE</a> enhancements. Of particular note is the new
<a href="pragma.html#pragma_legacy_alter_table">PRAGMA legacy_alter_table=ON</a> command, which causes the ALTER TABLE RENAME
command to behave in the same goofy way that it did before the enhancements
found in version 3.25.0 → references to renamed tables that are inside
the bodies of triggers and views are not updated. The legacy behavior is
arguably a bug, but some programs depend on the older buggy behavior. The
3.25.2 release also contains a fix to <a href="windowfunctions.html">window function</a> processing for
VIEWs. There also a slew of other minor fixes that affect obscure
compile-time options. See the
<a href="https://sqlite.org/src/timeline?r=branch-3.25">Fossil Timeline</a> for
details.
</blockquote><hr width="50%"><a name="2018_09_18"></a><h3>2018-09-18 - Release 3.25.1</h3><blockquote>
SQLite <a href="releaselog/3_25_1.html">version 3.25.1</a> is a patch against version 3.25.0 that contains
two one-line fixes for bug that were introduced in version 3.25.0.
See the change log for details. Upgrading from 3.25.0 is recommended.
</blockquote><hr width="50%"><a name="2018_09_15"></a><h3>2018-09-15 - Release 3.25.0</h3><blockquote>
SQLite <a href="releaselog/3_25_0.html">version 3.25.0</a> is a regularly scheduled maintenance release.
Two big enhancements in this release:
<ol>
<li><p>
Support for <a href="windowfunctions.html">window functions</a> was added, using the PostgreSQL documentation
as the baseline.
<li><p>
The <a href="lang_altertable.html">ALTER TABLE</a> command was enhanced to support renaming of columns, and
so that column and table renames are propagated into trigger bodies and views.
</ol>
<p>In addition, there are various performance enhancements and minor fixes.
<p>One bug of note is
<a href="https://www.sqlite.org/src/info/9936b2fa443fec03ff25">ticket 9936b2fa443fec</a>
which describes a hard-to-reach condition where the ORDER BY LIMIT
optimization might cause an infinite loop during query evaluation.
This ticket raised a lot of
concern on
<a href="https://news.ycombinator.com/item?id=17964243">HackerNews</a> and
<a href="https://www.reddit.com/r/programming/comments/9ezy8c/serious_bug_causing_infinite_loop_in_some_queries/">Reddit</a>,
probably due to my choice of the ticket
title. "Infinite Loop" sounds scary. But I argue that the bug isn't really
all that bad in that it is very difficult to reach, will show up during
testing (rather than magically appearing after a product is
deployed), does not cause any data loss, and does not return an
incorrect result. It was an important error, but not nearly as dire
as many people interpreted it to be. And, in any event, it is fixed now.
</blockquote><hr width="50%"><a name="2018_06_04"></a><h3>2018-06-04 - Release 3.24.0</h3><blockquote>
SQLite <a href="releaselog/3_24_0.html">version 3.24.0</a> is a regularly scheduled maintenance release.
Highlights of this release include support for PostgreSQL-style
UPSERT and improved performance, especially for ORDER BY LIMIT queries.
</blockquote><hr width="50%"><a name="2018_04_10"></a><h3>2018-04-10 - Release 3.23.1</h3><blockquote>
The <a href="releaselog/3_23_1.html">version 3.23.1</a> release fixes a bug in the new
<a href="optoverview.html#leftjoinreduction">LEFT JOIN strength reduction optimization</a> added to version 3.23.0.
A few other minor and obscure fixes were also inserted, as well as
a small performance optimization. Code changes relative to
version 3.23.0 are minimal.
</blockquote><hr width="50%"><a name="2018_04_02"></a><h3>2018-04-02 - Release 3.23.0</h3><blockquote>
The <a href="releaselog/3_23_0.html">version 3.23.0</a> release is a regularly scheduled maintenance release.
See the <a href="releaselog/3_23_0.html">change log</a> for a list of enhancements and bug
fixes.
</blockquote><hr width="50%"><a name="2018_01_22"></a><h3>2018-01-22 - Release 3.22.0</h3><blockquote>
The <a href="releaselog/3_22_0.html">version 3.22.0</a> release is a regularly scheduled maintenance release.
There are many minor, though interesting, enhancements in this release.
See the <a href="releaselog/3_22_0.html">change log</a> for details.
</blockquote><hr width="50%"><a name="2017_10_24"></a><h3>2017-10-24 - Release 3.21.0</h3><blockquote>
The <a href="releaselog/3_21_0.html">version 3.21.0</a> release is a regularly scheduled maintenance release.
There are lots of enhancements in this release.
See the <a href="releaselog/3_21_0.html">change log</a> for details.
</blockquote><hr width="50%"><a name="2017_08_24"></a><h3>2017-08-24 - Release 3.20.1</h3><blockquote>
The <a href="releaselog/3_20_1.html">version 3.20.1</a> patch release changes two lines of code in
the <a href="c3ref/result_blob.html">sqlite3_result_pointer()</a> interface in order to fix a rare
memory leak. There are no other changes relative to <a href="releaselog/3_20_0.html">version 3.20.0</a>.
</blockquote><hr width="50%"><a name="2017_08_01"></a><h3>2017-08-01 - Release 3.20.0</h3><blockquote>
SQLite <a href="releaselog/3_20_0.html">version 3.20.0</a> is a regularly scheduled maintenance release
of SQLite.
<p>
This release contains many minor enhancements, including:
<ul>
<li> Several new extensions
<li> Enhancements to the "sqlite3.exe" command-line shell
<li> Query planner enhancements
<li> Miscellaneous code optimizations for improved performance
<li> Fixes for some obscure bugs
</ul>
<p>
See the <a href="releaselog/3_20_0.html">release notes</a> for more information.
</blockquote><hr width="50%"><a name="2017_06_17"></a><h3>2017-06-17 - Release 3.18.2</h3><blockquote>
SQLite <a href="releaselog/3_18_2.html">version 3.18.2</a> is another backport of a bug fix found
in SQLite <a href="releaselog/3_19_0.html">version 3.19.0</a>, specifically the fix for
ticket <a href="https://sqlite.org/src/info/61fe9745">61fe9745</a>. Changes
against <a href="releaselog/3_18_0.html">version 3.18.0</a> are minimal.
</blockquote><hr width="50%"><a name="2017_06_16"></a><h3>2017-06-16 - Release 3.18.1</h3><blockquote>
SQLite <a href="releaselog/3_18_1.html">version 3.18.1</a> is a bug-fix release against <a href="releaselog/3_18_0.html">version 3.18.0</a>
that fixes the <a href="pragma.html#pragma_auto_vacuum">auto_vacuum</a> corruption bug described in ticket
<a href="https://sqlite.org/src/info/fda22108">fda22108</a>. This release was
created for users who need that bug fix but do not yet want to upgrade
to <a href="releaselog/3_19_3.html">version 3.19.3</a>.
</blockquote><hr width="50%"><a name="2017_06_08"></a><h3>2017-06-08 - Release 3.19.3</h3><blockquote>
<a href="releaselog/3_19_3.html">Version 3.19.3</a> is an emergency patch release to fix a
<a href="https://sqlite.org/src/info/fda22108">bug</a> in
<a href="pragma.html#pragma_auto_vacuum">auto_vacuum</a> logic that can lead to database corruption.
The bug was introduced in <a href="releaselog/3_16_0.html">version 3.16.0</a>
(2017-01-02). Though the bug is obscure and rarely
encountered, upgrading is recommended for all users, and
especially for users who turn on <a href="pragma.html#pragma_auto_vacuum">auto_vacuum</a>.
</blockquote><hr width="50%"><a name="2017_05_25"></a><h3>2017-05-25 - Release 3.19.2</h3><blockquote>
Still more problems have been found in the LEFT JOIN
<a href="https://sqlite.org/optoverview.html#flattening">flattening</a> optimization
that was added in the 3.19.0 release. This patch release fixes all known
issues with that optimization and adds new test cases. Hopefully this
will be the last patch.
</blockquote><hr width="50%"><a name="2017_05_24"></a><h3>2017-05-24 - Release 3.19.1</h3><blockquote>
One of the new query planner optimizations in the 3.19.0 release contained
bugs. The 3.19.1 patch release fixes them.
<p>
Beginning with 3.19.0, subqueries and views on the right-hand side of
a LEFT JOIN operator could sometimes be
<a href="https://sqlite.org/optoverview.html#flattening">flattened</a> into the
main query. The new optimization worked well for all of the test cases
that the developers devised, and for millions of legacy test cases, but
once 3.19.0 was released, users found some other cases where the optimization
failed. Ticket
<a href="https://sqlite.org/src/info/cad1ab4cb7b0fc344">cad1ab4cb7b0fc344</a> contains
examples.
<p>
These problems exist only in 3.19.0. Users of SQLite 3.19.0 should
upgrade, but users of all prior versions of SQLite are safe.
</blockquote><hr width="50%"><a name="2017_05_22"></a><h3>2017-05-22 - Release 3.19.0</h3><blockquote>
SQLite <a href="releaselog/3_19_0.html">version 3.19.0</a> is a regularly scheduled maintenance release.
<p>
The emphasis on this release is improvements to the query planner.
There are also some obscure bug fixes. There is no reason to upgrade
unless you are having problems with a prior release.
</blockquote><hr width="50%"><a name="2017_03_30"></a><h3>2017-03-30 - Release 3.18.0</h3><blockquote>
SQLite <a href="releaselog/3_18_0.html">version 3.18.0</a> is a regularly scheduled maintenance release.
<p>
This release features an initial implementation the
"<a href="pragma.html#pragma_optimize">PRAGMA optimize</a>" command. This command can now be used to cause
<a href="lang_analyze.html">ANALYZE</a> to be run on an as-needed basis. Applications should invoke
"PRAGMA optimize" just before closing the <a href="c3ref/sqlite3.html">database connection</a>.
The "PRAGMA optimize" statement will likely be enhanced to do other
kinds of automated database maintenance in future releases.
<p>
The <a href="https://www.fossil-scm.org/">Fossil</a> version control system that is
used to manage the SQLite project has been upgraded to use SHA3-256 hashes
instead of SHA1. Therefore, the version identifications for SQLite now
show a 64-hex-digit SHA3-256 hash rather than the 40-hex-digit SHA1 hash.
<p>
See the <a href="releaselog/3_18_0.html">change log</a> for other enhancements and optimizations
in this release.
</blockquote><hr width="50%"><a name="2017_02_13"></a><h3>2017-02-13 - Release 3.17.0</h3><blockquote>
SQLite <a href="releaselog/3_17_0.html">version 3.17.0</a> is a regularly scheduled maintenance release.
<p>
Most of the changes in this release are performance optimizations.
Optimizations to the <a href="rtree.html">R-Tree extension</a> are especially noticeable.
<p>
In this release, the default size of the
<a href="malloc.html#lookaside">lookaside buffer</a> allocated for each database connection
is increased from 64,000 to 120,000 bytes. This provides improved
performance on many common workloads in exchange for a small increase
in memory usage.
Applications that value a small memory footprint over raw speed
can change the lookaside buffer size back to its old value (or to zero)
using the <a href="compile.html#default_lookaside">SQLITE_DEFAULT_LOOKASIDE</a> compile-time option, or the
<a href="c3ref/c_config_covering_index_scan.html#sqliteconfiglookaside">sqlite3_config(SQLITE_CONFIG_LOOKASIDE)</a>
start-time setting, or the
<a href="c3ref/c_dbconfig_defensive.html#sqlitedbconfiglookaside">sqlite3_db_config(SQLITE_DBCONFIG_LOOKASIDE)</a>
run-time setting.
</blockquote><hr width="50%"><a name="2017_01_06"></a><h3>2017-01-06 - Release 3.16.2</h3><blockquote>
One of the performance optimizations added in 3.16.0 caused triggers
and foreign keys to malfunction for the <a href="lang_replace.html">REPLACE</a> statement on
<a href="withoutrowid.html">WITHOUT ROWID</a> tables that lack secondary indexes. This patch
release fixes the problem. See ticket
<a href="https://www.sqlite.org/src/info/30027b613b4">30027b613b4</a> for details.
</blockquote><hr width="50%"><a name="2017_01_03"></a><h3>2017-01-03 - Release 3.16.1</h3><blockquote>
SQLite <a href="releaselog/3_16_1.html">version 3.16.1</a> fixes a bug in the row-value logic for UPDATE
statements inside of triggers. The bug has been there since row-values
were added by release 3.15.0, but was not discovered until just a few
minutes after the 3.16.0 release was published, and so it was not fixed
by 3.16.0. This patch release is version 3.16.0 with the row-value bug fix.
</blockquote><hr width="50%"><a name="2017_01_02"></a><h3>2017-01-02 - Release 3.16.0</h3><blockquote>
SQLite <a href="releaselog/3_16_0.html">version 3.16.0</a> is a regularly schedule maintenance release.</p>
<p><p>
This release includes many <a href="cpu.html#microopt">microoptimizations</a> that collectively reduce
the CPU cycle count by about 9%,
add there have been important enhancements to the <a href="cli.html">command-line shell</a>.</p>
<p><p>Support for <a href="pragma.html#pragfunc">PRAGMA functions</a> 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 <a href="pragma.html#pragfunc">PRAGMA function</a> interface, but
will keep continue to call this interface "experimental" for a few release
cycles in case unforeseen issues arise.</p>
<p><p>See the <a href="releaselog/3_16_0.html">change log</a> for other enhancements.
</blockquote><hr width="50%"><a name="2016_11_28"></a><h3>2016-11-28 - Release 3.15.2</h3><blockquote>
SQLite <a href="releaselog/3_15_2.html">version 3.15.2</a> is a bug-fix patch release that fixes several minor
issues in the 3.15.0 and 3.15.1 releases.
</blockquote><hr width="50%"><a name="2016_11_04"></a><h3>2016-11-04 - Release 3.15.1</h3><blockquote>
SQLite <a href="releaselog/3_15_1.html">version 3.15.1</a> is a bug-fix patch release that fixes some minor
issues in the 3.15.0 release.
</blockquote><hr width="50%"><a name="2016_10_14"></a><h3>2016-10-14 - Release 3.15.0</h3><blockquote>
SQLite <a href="releaselog/3_15_0.html">version 3.15.0</a> is a regularly scheduled maintenance release.
The key feature in this release is the added support for
<a href="rowvalue.html">row values</a>. There are also other enhancements and
fixes for a number of obscure bugs.
<p>
The 3.15.0 release uses about 7% fewer CPU cycles than 3.14.2.
Most of the improvement in this release
is in the SQL parser, query planner, and
byte-code generator (the front-end) corresponding
to the <a href="c3ref/prepare.html">sqlite3_prepare_v2()</a> interface. Overall,
version 3.15.0 uses about half as much CPU time as
version 3.8.1 (2013-10-17). These
performance measurements are made using the "speedtest1.c"
workload on x64 compiled with gcc and -Os. Performance
improvements may vary with different platforms and
workloads.
</blockquote><hr width="50%"><a name="2016_09_12"></a><h3>2016-09-12 - Release 3.14.2</h3><blockquote>
SQLite <a href="releaselog/3_14_2.html">version 3.14.2</a> fixes several obscure bugs and adds
improved support for building SQLite using the STDCALL calling
convention on 32-bit windows systems. Upgrading from versions
3.14 and 3.14.1 is optional.
</blockquote><hr width="50%"><a name="2016_08_11"></a><h3>2016-08-11 - Release 3.14.1</h3><blockquote>
SQLite <a href="releaselog/3_14_1.html">version 3.14.1</a> adds a small patch to improve the performance
of the pcache1TruncateUnsafe() routine for cases when the only a few
pages on the end of the cache are being removed. This causes COMMITs
to run faster when there is a very large page cache. Upgrading from
version 3.14 is optional.
</blockquote><hr width="50%"><a name="2016_08_08"></a><h3>2016-08-08 - Release 3.14</h3><blockquote>
SQLite <a href="releaselog/3_14.html">version 3.14</a> (the "π" release)
is a regularly scheduled maintenance
release containing performance enhancements, new features, and fixes for
obscure bugs.
</blockquote><hr width="50%"><a name="2016_05_18"></a><h3>2016-05-18 - Release 3.13.0</h3><blockquote>
SQLite <a href="releaselog/3_13_0.html">version 3.13.0</a> is a regularly schedule maintenance release containing
performance enhancements and fixes for obscure bugs.
</blockquote><hr width="50%"><a name="2016_04_18"></a><h3>2016-04-18 - Release 3.12.2</h3><blockquote>
<p>Yikes! The 3.12.0 and 3.12.1 releases contain a backwards compatibility bug!
Tables that declare a column with type <tt>"INTEGER" PRIMARY KEY</tt>
(where the datatype name INTEGER is quoted) generate an incompatible
database file. The mistake came about because the developers have never
thought to put a typename in quotes before, and so there was no documentation
of that capability nor any tests. (There are tests now, though, of course.)
Instances of quoting the datatype name are probably infrequent in the wild,
so we do not expect the impact of this bug to be too severe.
Upgrading is still strongly recommended.
<p>Fixes for three other minor issues were included in this patch release.
The other issues would have normally been deferred until the next scheduled
release, but since a patch release is being issued anyhow, they might as
well be included.
</blockquote><hr width="50%"><a name="2016_04_08"></a><h3>2016-04-08 - Release 3.12.1</h3><blockquote>
<p>SQLite <a href="releaselog/3_12_1.html">version 3.12.1</a> is an emergency patch release to address a
<a href="https://www.sqlite.org/src/info/7f7f8026eda38">crash bug</a> that snuck
into <a href="releaselog/3_12_0.html">version 3.12.0</a>. Upgrading from version 3.12.0 is highly
recommended.
<p>Another minor problem involving datatypes on <a href="lang_createview.html">view</a> columns, and
a query planner deficiency are fixed at the same time. These two
issues did not justify a new release on their own, but since a release
is being issued to deal with the crash bug, we included these other
fixes for good measure.
</blockquote><hr width="50%"><a name="2016_03_29"></a><h3>2016-03-29 - Release 3.12.0</h3><blockquote>
<p>SQLite <a href="releaselog/3_12_0.html">version 3.12.0</a> is a regularly scheduled maintenance release.
A notable change in this release is an
<a href="pgszchng2016.html">increase in the default page size</a> for newly created database files.
There are also various performance improvements.
See the <a href="releaselog/3_12_0.html">change log</a> for details.
</blockquote><hr width="50%"><a name="2016_03_03"></a><h3>2016-03-03 - Release 3.11.1</h3><blockquote>
<p>SQLite <a href="releaselog/3_11_1.html">version 3.11.1</a> is a patch release that fixes problems in the
new <a href="fts5.html">FTS5</a> extension and increases a default setting in the <a href="spellfix1.html">spellfix1</a>
extension, and implements enhancements to some of the Windows makefiles.
The SQLite core is unchanged from 3.11.0. Upgrading is optional.
</blockquote><hr width="50%"><a name="2016_02_15"></a><h3>2016-02-15 - Release 3.11.0</h3><blockquote>
<p>SQLite <a href="releaselog/3_11_0.html">version 3.11.0</a> is a regularly scheduled maintenance release.
</blockquote><hr width="50%"><a name="2016_01_20"></a><h3>2016-01-20 - Release 3.10.2</h3><blockquote>
<p>Yikes! An optimization attempt gone bad resulted in a
<a href="https://www.sqlite.org/src/info/80369eddd5c94">bug in the LIKE operator</a>
which is fixed by this patch release.
Three other minor but low-risk fixes are also included in the patch.
</blockquote><hr width="50%"><a name="2016_01_14"></a><h3>2016-01-14 - Release 3.10.1</h3><blockquote>
<p>SQLite <a href="releaselog/3_10_1.html">version 3.10.1</a> is a bug-fix release primarily targeting the
fix for the query planner bug
<a href="https://www.sqlite.org/src/info/cb3aa0641d9a4">cb3aa0641d9a4</a> discovered by
Mapscape. Also included is a minor API enhancement requested by
the Firefox developers at Mozilla. The differences from version
3.10.0 are minimal.
</blockquote><hr width="50%"><a name="2016_01_06"></a><h3>2016-01-06 - Release 3.10.0</h3><blockquote>
<p>SQLite <a href="releaselog/3_10_0.html">version 3.10.0</a> is a regularly scheduled maintenance release.
</blockquote><hr width="50%">
<a href="oldnews.html">Old news...</a>
<p align="center"><small><i>This page last modified on <a href="https://sqlite.org/docsrc/honeypot" id="mtimelink" data-href="https://sqlite.org/docsrc/finfo/pages/news.in?m=28ed87cc897e1a850">2022-12-27 17:04:09</a> UTC </small></i></p>
|