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
|
<!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>SQLite Release 3.20.1 On 2017-08-24</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>SQLite Release 3.20.1 On 2017-08-24</h2><p><b>Prior changes from version 3.20.0 (2017-08-01):</b></p>
<p><ol class='lessindent'>
<li value='1'> Update the text of error messages returned by <a href="../c3ref/errcode.html">sqlite3_errmsg()</a> for some
error codes.
<li> Add new <a href="../bindptr.html">pointer passing interfaces</a>.
<li> Backwards-incompatible changes to some extensions in order to take
advantage of the improved security offered by the new
<a href="../bindptr.html">pointer passing interfaces</a>:
<ol type='a'>
<li> <a href="../fts5.html#extending_fts5">Extending FTS5</a> → requires <a href="../c3ref/bind_blob.html">sqlite3_bind_pointer()</a> to find
the fts5_api pointer.
<li> <a href="../carray.html">carray(PTR,N)</a> → requires <a href="../c3ref/bind_blob.html">sqlite3_bind_pointer()</a> to set the PTR parameter.
<li> <a href="https://www.sqlite.org/src/file/ext/misc/remember.c">remember(V,PTR)</a>
→ requires <a href="../c3ref/bind_blob.html">sqlite3_bind_pointer()</a> to set the PTR parameter.
</ol>
<li> Added the <a href="../stmt.html">SQLITE_STMT virtual table</a> extension.
<li> Added the <a href="../completion.html">COMPLETION extension</a> - designed to suggest
tab-completions for interactive user interfaces. This is a work in progress.
Expect further enhancements in future releases.
<li> Added the <a href="../unionvtab.html">UNION virtual table</a> extension.
<li> The built-in <a href="../lang_datefunc.html">date and time functions</a> have been enhanced so that they can be
used in <a href="../lang_createtable.html#ckconst">CHECK constraints</a>, in <a href="../expridx.html">indexes on expressions</a>, and in the WHERE clauses
of <a href="../partialindex.html">partial indexes</a>, provided that they do not use the 'now', 'localtime', or
'utc' keywords. <a href="../deterministic.html#dtexception">More information</a>.
<li> Added the <a href="../c3ref/prepare.html">sqlite3_prepare_v3()</a> and <a href="../c3ref/prepare.html">sqlite3_prepare16_v3()</a> interfaces
with the extra "prepFlags" parameters.
<li> Provide the <a href="../c3ref/c_prepare_normalize.html#sqlitepreparepersistent">SQLITE_PREPARE_PERSISTENT</a> flag for <a href="../c3ref/prepare.html">sqlite3_prepare_v3()</a> and
use it to limit <a href="../malloc.html#lookaside">lookaside memory</a> misuse by <a href="../fts3.html">FTS3</a>, <a href="../fts5.html">FTS5</a>, and the
<a href="../rtree.html">R-Tree extension</a>.
<li> Added the <a href="../pragma.html#pragma_secure_delete">PRAGMA secure_delete=FAST</a> command. When secure_delete is
set to FAST, old content is overwritten with zeros as long as that does
not increase the amount of I/O. Deleted content might still persist on
the <a href="../fileformat2.html#freelist">free-page list</a> but will be purged from all b-tree pages.
<li> Enhancements to the <a href="../cli.html">command-line shell</a>:
<ol type='a'>
<li> Add support for tab-completion using the <a href="../completion.html">COMPLETION extension</a>, for
both readline and linenoise.
<li> Add the ".cd" command.
<li> Enhance the "<a href="../cli.html#dschema">.schema</a>" command to show the schema of all attached
databases.
<li> Enhance "<a href="../cli.html#dtables">.tables</a>" so that it shows the schema names for all attached
if the name is anything other than "main".
<li> The "<a href="../cli.html#csv">.import</a>" command ignores an initial UTF-8 BOM.
<li> Added the "--newlines" option to the "<a href="../cli.html#dump">.dump</a>" command to cause U+000a and
U+000d characters to be output literally rather than escaped using the
<a href="../lang_corefunc.html#replace">replace()</a> function.
</ol>
<li> Query planner enhancements:
<ol type='a'>
<li> When generating individual loops for each ORed term of an OR scan,
move any constant WHERE expressions outside of the loop, as is
done for top-level loops.
<li> The query planner examines the values of bound parameters to help
determine if a partial index is usable.
<li> When deciding between two plans with the same estimated cost, bias
the selection toward the one that does not use the sorter.
<li> Evaluate WHERE clause constraints involving correlated subqueries
last, in the hope that they never have be evaluated at all.
<li> Do not use the <a href="../optoverview.html#flattening">flattening optimization</a> for a sub-query on the RHS
of a LEFT JOIN if that subquery reads data from a <a href="../vtab.html">virtual table</a> as
doing so prevents the query planner from creating <a href="../optoverview.html#autoindex">automatic indexes</a>
on the results of the sub-query, which can slow down the query.
</ol>
<li> Add <a href="../c3ref/c_stmtstatus_counter.html#sqlitestmtstatusreprepare">SQLITE_STMTSTATUS_REPREPARE</a>, <a href="../c3ref/c_stmtstatus_counter.html#sqlitestmtstatusrun">SQLITE_STMTSTATUS_RUN</a>,
and <a href="../c3ref/c_stmtstatus_counter.html#sqlitestmtstatusmemused">SQLITE_STMTSTATUS_MEMUSED</a> options for the
<a href="../c3ref/stmt_status.html">sqlite3_stmt_status()</a> interface.
<li> Provide <a href="../pragma.html#pragfunc">PRAGMA functions</a> for
<a href="../pragma.html#pragma_integrity_check">PRAGMA integrity_check</a>, <a href="../pragma.html#pragma_quick_check">PRAGMA quick_check</a>, and
<a href="../pragma.html#pragma_foreign_key_check">PRAGMA foreign_key_check</a>.
<li> Add the -withoutnulls option to the <a href="../tclsqlite.html#eval">TCL interface eval method</a>.
<li> Enhance the <a href="../sqlanalyze.html">sqlite3_analyzer.exe</a> utility program so that it shows
the number of bytes of metadata on btree pages.
<li> The <a href="../c3ref/c_dbconfig_defensive.html#sqlitedbconfigenableqpsg">SQLITE_DBCONFIG_ENABLE_QPSG</a> run-time option and the
<a href="../compile.html#enable_qpsg">SQLITE_ENABLE_QPSG</a> compile-time option enable the
<a href="../queryplanner-ng.html#qpstab">query planner stability guarantee</a>. See also ticket
<a href="https://www.sqlite.org/src/info/892fc34f173e99d8">892fc34f173e99d8</a>
<li> Miscellaneous optimizations result in a 2% reduction in <a href="../cpu.html">CPU cycles used</a>.
<p><b>Bug Fixes:</b>
<li> Fix the behavior of <a href="../c3ref/column_name.html">sqlite3_column_name()</a> for queries that use the
<a href="../optoverview.html#flattening">flattening optimization</a> so that the result is consistent with other
queries that do not use that optimization, and with PostgreSQL, MySQL,
and SQLServer. Ticket <a href="https://sqlite.org/src/info/de3403bf5ae">de3403bf5ae</a>.
<li> Fix the query planner so that it knows not to use <a href="../optoverview.html#autoindex">automatic indexes</a>
on the right table of LEFT JOIN if the WHERE clause uses the <a href="../lang_expr.html#isisnot">IS operator</a>.
Fix for <a href="https://sqlite.org/src/info/ce68383bf6aba">ce68383bf6aba</a>.
<li> Ensure that the query planner knows that any column of a
<a href="../optoverview.html#flattening">flattened</a> LEFT JOIN can be NULL even
if that column is labeled with "NOT NULL". Fix for ticket
<a href="https://sqlite.org/src/info/892fc34f173e99d8">892fc34f173e99d8</a>.
<li> Fix rare false-positives in <a href="../pragma.html#pragma_integrity_check">PRAGMA integrity_check</a> when run on a database connection
with <a href="../lang_attach.html">attached databases</a>. Ticket
<a href="https://sqlite.org/src/info/a4e06e75a9ab61a12">a4e06e75a9ab61a12</a>
<li> Fix a bug (discovered by OSSFuzz) that causes an assertion fault if certain
dodgy CREATE TABLE declarations are used. Ticket
<a href="https://sqlite.org/src/info/bc115541132dad136">bc115541132dad136</a>
</ol>
<p><b>Changes in this specific patch release, version 3.20.1 (2017-08-24):</b></p>
<p><ol class='lessindent'>
<li value='24'> Fix a potential memory leak in the new <a href="../c3ref/result_blob.html">sqlite3_result_pointer()</a> interface.
Ticket <a href="https://sqlite.org/src/info/7486aa54b968e9b5">7486aa54b968e9b5</a>.
<p><b>Hashes:</b>
<li>SQLITE_SOURCE_ID: "2017-08-24 16:21:36 8d3a7ea6c5690d6b7c3767558f4f01b511c55463e3f9e64506801fe9b74dce34"
<li>SHA3-256 for sqlite3.c: 93b1a6d69b48dc39697d1d3a1e4c30b55da0bdd2cad0c054462f91081832954a
</ol></p>
<p>A <a href="../changes.html">complete list of SQLite releases</a>
in a single page and a <a href="../chronology.html">chronology</a> are both also available.
A detailed history of every
check-in is available at
<a href="https://www.sqlite.org/src/timeline">
SQLite version control site</a>.</p>
|