summaryrefslogtreecommitdiffstats
path: root/www/releaselog/3_9_3.html
blob: f354dd454a62edfbfb966e1f9114727a9e4f2036 (plain)
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
<!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.9.3 On 2016-04-01</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.9.3 On 2016-04-01</h2><p><b>Prior changes from version 3.9.0 (2015-10-14):</b></p>
<p><ol class='lessindent'>
<p><b>Policy Changes:</b>
<li value='1'>The <a href="../versionnumbers.html">version numbering conventions</a> for SQLite are revised to use the
    emerging standard of <a href="http://semver.org/">semantic versioning</a>.
<p><b>New Features And Enhancements:</b>
<li>Added <a href="../json1.html">the json1 extension</a> module in the source tree, and in the <a href="../amalgamation.html">amalgamation</a>.
    Enable support using the <a href="../compile.html#enable_json1">SQLITE_ENABLE_JSON1</a> compile-time option.
<li>Added <a href="../fts5.html">Full Text Search version 5 (FTS5)</a> to the <a href="../amalgamation.html">amalgamation</a>, enabled
    using <a href="../compile.html#enable_fts5">SQLITE_ENABLE_FTS5</a>.  FTS5 will be considered "experimental" (subject
    to incompatible changes) for at least one more release cycle.
<li>The <a href="../lang_createview.html">CREATE VIEW</a> statement now accepts an optional list of
    column names following the view name.
<li>Added support for <a href="../expridx.html">indexes on expressions</a>.
<li>Added support for <a href="../vtab.html#tabfunc2">table-valued functions</a> in the FROM clause of a
    <a href="../lang_select.html">SELECT</a> statement.
<li>Added support for <a href="../vtab.html#epovtab">eponymous virtual tables</a>.
<li>A <a href="../lang_createview.html">VIEW</a> may now reference undefined tables and functions when
    initially created.  Missing tables and functions are reported when
    the VIEW is used in a query.
<li>Added the <a href="../c3ref/value_subtype.html">sqlite3_value_subtype()</a> and <a href="../c3ref/result_subtype.html">sqlite3_result_subtype()</a>
    interfaced (used by <a href="../json1.html">the json1 extension</a>).
<li>The query planner is now able to use <a href="../partialindex.html">partial indexes</a> that contain
    AND-connected terms in the WHERE clause.
<li>The sqlite3_analyzer.exe utility is updated to report the depth of
    each btree and to show the average fanout for indexes and
    WITHOUT ROWID tables.
<li>Enhanced the <a href="../dbstat.html">dbstat virtual table</a> so that it can be used as a
    <a href="../vtab.html#tabfunc2">table-valued function</a> where the argument is the schema to be
    analyzed.
<p><b>Other changes:</b>
<li>The <a href="../c3ref/aggregate_count.html">sqlite3_memory_alarm()</a> interface, which has been deprecated and
    undocumented for 8 years, is changed into a no-op.
<p><b>Important fixes:</b>
<li>Fixed a critical bug in the
    <a href="https://www.sqlite.org/see/doc/trunk/www/readme.wiki">SQLite Encryption Extension</a> that
    could cause the database to become unreadable and unrecoverable if a <a href="../lang_vacuum.html">VACUUM</a> command
    changed the size of the encryption nonce.
<li>Added a memory barrier in the implementation of
    <a href="../c3ref/initialize.html">sqlite3_initialize()</a> to help ensure that it is thread-safe.
<li>Fix the <a href="../optoverview.html#or_opt">OR optimization</a> so that it always ignores subplans that
    do not use an index.
<li>Do not apply the WHERE-clause pushdown optimization on terms that originate
    in the ON or USING clause of a LEFT JOIN.  Fix for ticket
    <a href="https://www.sqlite.org/src/info/c2a19d81652f40568c">c2a19d81652f40568c</a>.

</ol>
<p><b>Prior changes from version 3.9.1 (2015-10-16):</b></p>
<p><ol class='lessindent'>
<li value='18'>Fix <a href="../json1.html">the json1 extension</a> so that it does <u>not</u> recognize ASCII form-feed as a
    whitespace character, in order to comply with RFC-7159.  Fix for ticket
    <a href="https://www.sqlite.org/src/info/57eec374ae1d0a1d">57eec374ae1d0a1d</a>
<li>Add a few #ifdef and build script changes to address compilation issues that
    appeared after the 3.9.0 release.

</ol>
<p><b>Prior changes from version 3.9.2 (2015-11-02):</b></p>
<p><ol class='lessindent'>
<li value='20'>Fix the schema parser so that it interprets certain
    (obscure and ill-formed)
    CREATE TABLE statements the same as legacy.  Fix for ticket
    <a href="https://www.sqlite.org/src/info/ac661962a2aeab3c331">ac661962a2aeab3c331</a>
<li>Fix a query planner problem that could result in an incorrect
    answer due to the use of <a href="../optoverview.html#autoindex">automatic indexing</a> in subqueries in
    the FROM clause of a correlated scalar subqueries.  Fix for ticket
    <a href="https://www.sqlite.org/src/info/8a2adec1">8a2adec1</a>.

</ol>
<p><b>Changes in this specific patch release, version 3.9.3 (2016-04-01):</b></p>
<p><ol class='lessindent'>
<li value='22'>Backport a
    <a href="https://www.sqlite.org/src/info/c648539b52ca28c0">simple query planner optimization</a>
    that allows the IS operator
    to drive an index on a LEFT OUTER JOIN.  No other changes from the
    <a href="../releaselog/3_9_2.html">version 3.9.2</a> baseline.

</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>