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
|
<!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.23.1 On 2018-04-10</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.23.1 On 2018-04-10</h2><p><b>Prior changes from version 3.23.0 (2018-04-02):</b></p>
<p><ol class='lessindent'>
<li value='1'> Add the <a href="../c3ref/serialize.html">sqlite3_serialize()</a> and <a href="../c3ref/deserialize.html">sqlite3_deserialize()</a> interfaces when
the <a href="../compile.html#enable_deserialize">SQLITE_ENABLE_DESERIALIZE</a> compile-time option is used.
<li> Recognize TRUE and FALSE as constants. (For compatibility, if there
exist columns named "true" or "false", then the identifiers refer to the
columns rather than Boolean constants.)
<li> Support operators IS TRUE, IS FALSE, IS NOT TRUE, and IS NOT FALSE.
<li> Added the <a href="../c3ref/c_dbstatus_options.html#sqlitedbstatuscachespill">SQLITE_DBSTATUS_CACHE_SPILL</a> option to <a href="../c3ref/db_status.html">sqlite3_db_status()</a> for
reporting the number of cache spills that have occurred.
<li> The "alternate-form-2" flag ("!") on the <a href="../printf.html">built-in printf</a> implementation
now causes string substitutions to measure the width and precision in
characters instead of bytes.
<li> If the <a href="../vtab.html#xcolumn">xColumn</a> method in a <a href="../vtab.html">virtual table</a> implementation returns
an error message using <a href="../c3ref/result_blob.html">sqlite3_result_error()</a> then give that error
message preference over internally-generated messages.
<li> Added the -A command-line option to the <a href="../cli.html">CLI</a> to make it easier to manage
<a href="../sqlar.html">SQLite Archive files</a>.
<li> Add support for INSERT OR REPLACE, INSERT OR IGNORE, and UPDATE OR REPLACE
in the <a href="../zipfile.html">Zipfile virtual table</a>.
<li> Enhance the <a href="../session/sqlite3changeset_apply.html">sqlite3changeset_apply()</a> interface so that it is hardened
against attacks from deliberately corrupted <a href="../sessionintro.html#changeset">changeset</a> objects.
<li> Added the <a href="https://sqlite.org/src/file/ext/misc/normalize.c">sqlite3_normalize()</a>
extension function.
<li> Query optimizer enhancements:
<ol type='a'>
<li> Improve the <a href="../optoverview.html#omitnoopjoin">omit-left-join optimization</a> so that it works in cases where
the right-hand table is UNIQUE but not necessarily NOT NULL.
<li> Improve the <a href="../optoverview.html#pushdown">push-down optimization</a> so that it works for many LEFT JOINs.
<li> Add the <a href="../optoverview.html#leftjoinreduction">LEFT JOIN strength reduction optimization</a> that converts a LEFT
JOIN into an ordinary JOIN if there exist terms in the WHERE clause
that would prevent the extra all-NULL row of the LEFT JOIN from
appearing in the output set.
<li> Avoid unnecessary writes to the sqlite_sequence table when an
<a href="../autoinc.html">AUTOINCREMENT</a> table is updated with an rowid that is less than the
maximum.
</ol>
<li> Bug fixes:
<ol type='a'>
<li> Fix the parser to accept valid <a href="../rowvalue.html">row value</a> syntax.
Ticket <a href="https://www.sqlite.org/src/info/7310e2fb3d046a5">7310e2fb3d046a5</a>
<li> Fix the query planner so that it takes into account dependencies in
the arguments to table-valued functions in subexpressions in
the WHERE clause.
Ticket <a href="https://www.sqlite.org/src/info/80177f0c226ff54">80177f0c226ff54</a>
<li> Fix incorrect result with complex OR-connected WHERE and STAT4.
Ticket <a href="https://www.sqlite.org/src/info/ec32177c99ccac2">ec32177c99ccac2</a>
<li> Fix potential corruption in <a href="../expridx.html">indexes on expressions</a> due to automatic
datatype conversions.
Ticket <a href="https://www.sqlite.org/src/info/343634942dd54ab">343634942dd54ab</a>
<li> Assertion fault in FTS4.
Ticket <a href="https://www.sqlite.org/src/info/d6ec09eccf68cfc">d6ec09eccf68cfc</a>
<li> Incorrect result on the less-than operator in <a href="../rowvalue.html">row values</a>.
Ticket <a href="https://www.sqlite.org/src/info/f484b65f3d62305">f484b65f3d62305</a>
<li> Always interpret non-zero floating-point values as TRUE, even if
the integer part is zero.
Ticket <a href="https://www.sqlite.org/src/info/36fae083b450e3a">36fae083b450e3a</a>
<li> Fix an issue in the fsdir(PATH) <a href="../vtab.html#tabfunc2">table-valued function</a> to the
<a href="https://sqlite.org/src/file/ext/misc/fileio.c">fileio.c</a> extension,
that caused a segfault if the fsdir() table was used as the inner table
of a join. Problem reported on the mailing list and fixed by check-in
<a href="https://www.sqlite.org/src/info/7ce4e71c1b7251be">7ce4e71c1b7251be</a>
<li> Issue an error rather instead of an assertion-fault or null-pointer
dereference when the sqlite_master table is corrupted so that the
sqlite_sequence table root page is really a btree-index page. Check-in
<a href="https://www.sqlite.org/src/info/525deb7a67fbd647">525deb7a67fbd647</a>
<li> Fix the <a href="../lang_analyze.html">ANALYZE</a> command so that it computes statistics on tables
whose names begin with "sqlite". Check-in
<a href="https://sqlite.org/src/info/0249d9aecf69948d">0249d9aecf69948d</a>
</ol>
<li> Additional fixes for issues detected by
<a href="https://github.com/google/oss-fuzz">OSSFuzz</a>:
<ol type='a'>
<li> Fix a possible infinite loop on VACUUM for corrupt database files.
Check-in <a href="https://www.sqlite.org/src/info/27754b74ddf64">27754b74ddf64</a>
<li> Disallow <a href="../lang_expr.html#varparam">parameters</a> in the <a href="../lang_with.html">WITH clause</a> of triggers and views.
Check-in <a href="https://www.sqlite.org/src/info/b918d4b4e546d">b918d4b4e546d</a>
<li> Fix a potential memory leak in <a href="../rowvalue.html">row value</a> processing.
Check-in <a href="https://www.sqlite.org/src/info/2df6bbf1b8ca8">2df6bbf1b8ca8</a>
<li> Improve the performance of the <a href="../lang_corefunc.html#replace">replace() SQL function</a> for cases where
there are many substitutions on megabyte-sized strings, in an attempt
to avoid OSSFuzz timeouts during testing.
Check-in <a href="https://www.sqlite.org/src/info/fab2c2b07b5d3">fab2c2b07b5d3</a>
<li> Provide an appropriate error message when the sqlite_master table
contains a CREATE TABLE AS statement. Formerly this caused either an
assertion fault or null pointer dereference. Problem found by OSSFuzz
on the GDAL project. Check-in
<a href="https://www.sqlite.org/src/info/d75e67654aa96">d75e67654aa96</a>
<li> Incorrect assert() statement removed. Check-in
<a href="https://www.sqlite.org/src/info/823779d31eb09cda">823779d31eb09cda</a>.
<li> Fix a problem with using the <a href="../optoverview.html#like_opt">LIKE optimization</a> on an
<a href="../lang_createtable.html#rowid">INTEGER PRIMARY KEY</a>. Check-in
<a href="https://www.sqlite.org/src/info/b850dd159918af56">b850dd159918af56</a>.
</ol>
</ol>
<p><b>Changes in this specific patch release, version 3.23.1 (2018-04-10):</b></p>
<p><ol class='lessindent'>
<li value='14'> Fix two problems in the new <a href="../optoverview.html#leftjoinreduction">LEFT JOIN strength reduction optimization</a>.
Tickets <a href="https://sqlite.org/src/info/1e39b966ae9ee739">1e39b966ae9ee739</a>
and <a href="https://sqlite.org/src/info/fac496b61722daf2">fac496b61722daf2</a>.
<li> Fix misbehavior of the FTS5 xBestIndex method. Ticket
<a href="https://sqlite.org/src/info/2b8aed9f7c9e61e8">2b8aed9f7c9e61e8</a>.
<li> Fix a harmless reference to an uninitialized virtual machine register.
Ticket <a href="https://sqlite.org/src/info/093420fc0eb7cba7">093420fc0eb7cba7</a>.
<li> Fix the <a href="../cli.html">CLI</a> so that it builds with -DSQLITE_UNTESTABLE
<li> Fix the <a href="https://sqlite.org/src/file/ext/misc/eval.c">eval.c</a> extension
so that it works with <a href="../pragma.html#pragma_empty_result_callbacks">PRAGMA empty_result_callbacks=ON</a>.
<li> Fix the <a href="../series.html">generate_series</a> virtual table so that it correctly returns
no rows if any of its constraints are NULL.
<li> Performance enhancements in the parser.
<p><b>Hashes:</b>
<li>SQLITE_SOURCE_ID: "2018-04-10 17:39:29 4bb2294022060e61de7da5c227a69ccd846ba330e31626ebcd59a94efd148b3b"
<li>SHA3-256 for sqlite3.c: 65750d1e506f416a0b0b9dd22d171379679c733e3460549754dc68c92705b5dc
</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>
|