summaryrefslogtreecommitdiffstats
path: root/www/releaselog/3_19_1.html
blob: 40f4e1c982ff2555573c2dc11338a3f5a1d1f6c2 (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
<!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.19.1 On 2017-05-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.19.1 On 2017-05-24</h2><p><b>Prior changes from version 3.19.0 (2017-05-22):</b></p>
<p><ol class='lessindent'>
<li value='1'> The <a href="../c3ref/c_alter_table.html">SQLITE_READ</a> <a href="../c3ref/set_authorizer.html">authorizer callback</a> is invoked once
     with a column name that is an empty string
     for every table referenced in a query from which no columns are extracted.
<li> When using an index on an expression, try to use expression values already
     available in the index, rather than loading the original columns and recomputing
     the expression.
<li> Enhance the <a href="../optoverview.html#flattening">flattening optimization</a> so that it is able to flatten views
     on the right-hand side of a LEFT JOIN.
<li> Use <a href="../lang_corefunc.html#replace">replace()</a> instead of <a href="../lang_corefunc.html#char">char()</a> for escaping newline and carriage-return
     characters embedded in strings in the .dump output from the <a href="../cli.html">command-line shell</a>.
<li> Avoid unnecessary foreign key processing in UPDATE statements that do not
     touch the columns that are constrained by the foreign keys.
<li> On a DISTINCT query that uses an index, try to skip ahead to the next distinct
     entry using the index rather than stepping through rows, when an appropriate
     index is available.
<li> Avoid unnecessary invalidation of <a href="../c3ref/blob.html">sqlite3_blob</a> handles when making
     changes to unrelated tables.
<li> Transfer any terms of the HAVING clause that use only columns mentioned in
     the GROUP BY clause over to the WHERE clause for faster processing.
<li> Reuse the same materialization of a VIEW if that VIEW appears more than
     once in the same query.
<li> Enhance <a href="../pragma.html#pragma_integrity_check">PRAGMA integrity_check</a> so that it identifies tables that have two
     or more rows with the same <a href="../lang_createtable.html#rowid">rowid</a>.
<li> Enhance the <a href="../fts5.html">FTS5</a> query syntax so that <a href="../fts5.html#fts5_column_filters">column filters</a>
     may be applied to arbitrary expressions.
<li> Enhance the <a href="../json1.html#jex">json_extract()</a> function to cache and reuse parses of JSON
     input text.
<li> Added the <a href="https://sqlite.org/src/file/ext/misc/anycollseq.c">anycollseq.c</a>
     <a href="../loadext.html">loadable extension</a> that allows a generic SQLite database connection to
     read a schema that contains unknown and/or
     application-specific <a href="../datatype3.html#collation">collating sequences</a>.
<p><b>Bug Fixes:</b>
<li> Fix a problem in <a href="../lang_replace.html">REPLACE</a> that can result in a corrupt database containing
     two or more rows with the same <a href="../lang_createtable.html#rowid">rowid</a>.  Fix for ticket
     <a href="https://www.sqlite.org/src/info/f68dc596c4e6018d">f68dc596c4e6018d</a>.
<li> Fix a problem in <a href="../pragma.html#pragma_integrity_check">PRAGMA integrity_check</a> that was causing a subsequent
     <a href="../lang_vacuum.html">VACUUM</a> to behave suboptimally.
<li> Fix the <a href="../pragma.html#pragma_foreign_key_check">PRAGMA foreign_key_check</a> command so that it works correctly with
     foreign keys on <a href="../withoutrowid.html">WITHOUT ROWID</a> tables.
<li> Fix a bug in the b-tree logic that can result in incorrect duplicate answers
     for IN operator queries.  Ticket
     <a href="https://sqlite.org/src/info/61fe9745">61fe9745</a>
<li> Disallow leading zeros in numeric constants in JSON.  Fix for ticket
     <a href="https://www.sqlite.org/src/info/b93be8729a895a528e2">b93be8729a895a528e2</a>.
<li> Disallow control characters inside of strings in JSON.  Fix for ticket
     <a href="https://www.sqlite.org/src/info/6c9b5514077fed34551">6c9b5514077fed34551</a>.
<li> Limit the depth of recursion for JSON objects and arrays in order to avoid
     excess stack usage in the recursive descent parser.  Fix for ticket
     <a href="https://www.sqlite.org/src/info/981329adeef51011052">981329adeef51011052</a>.
</ol>
<p><b>Changes in this specific patch release, version 3.19.1 (2017-05-24):</b></p>
<p><ol class='lessindent'>
<li value='21'>Fix a bug in the LEFT JOIN <a href="../optoverview.html#flattening">flattening optimization</a>. Ticket
    <a href="https://www.sqlite.org/src/info/cad1ab4cb7b0fc">cad1ab4cb7b0fc</a>.
<li>Remove a surplus semicolon that was causing problems for older versions of MSVC.
<p><b>Hashes:</b>
<li>SQLITE_SOURCE_ID: "2017-05-24 13:08:33 f6d7b988f40217821a382bc298180e9e6794f3ed79a83c6ef5cae048989b3f86"
<li>SHA3-256 for sqlite3.c: 996b2aff37b6e0c6663d0312cd921bbdf6826c989cbbb07dadde5e9672889bca

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