summaryrefslogtreecommitdiffstats
path: root/www/changes.html
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-05-05 17:28:19 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-05-05 17:28:19 +0000
commit18657a960e125336f704ea058e25c27bd3900dcb (patch)
tree17b438b680ed45a996d7b59951e6aa34023783f2 /www/changes.html
parentInitial commit. (diff)
downloadsqlite3-upstream.tar.xz
sqlite3-upstream.zip
Adding upstream version 3.40.1.upstream/3.40.1upstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'www/changes.html')
-rw-r--r--www/changes.html6700
1 files changed, 6700 insertions, 0 deletions
diff --git a/www/changes.html b/www/changes.html
new file mode 100644
index 0000000..eeaee2d
--- /dev/null
+++ b/www/changes.html
@@ -0,0 +1,6700 @@
+<!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>Release History Of SQLite</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>
+
+
+<h1 align=center>Release History</h1>
+
+<p>
+This page provides a high-level summary of changes to SQLite.
+For more detail, see the Fossil checkin logs at
+<a href="http://www.sqlite.org/src/timeline">
+http://www.sqlite.org/src/timeline</a> and
+<a href="http://www.sqlite.org/src/timeline?t=release">
+http://www.sqlite.org/src/timeline?t=release</a>.
+See the <a href="chronology.html">chronology</a> a succinct listing of releases.
+</p>
+
+<a name="version_3_40_1"></a>
+<h3>2022-12-28 (3.40.1)</h3><p><ol class='lessindent'>
+<li> Fix the <a href="cli.html#safemode">--safe command-line option</a> to the <a href="cli.html">CLI</a> such that it correctly disallows the
+ use of SQL functions like writefile() that can cause harmful side-effects.
+<li> Fix a potential infinite loop in the <a href="malloc.html#memsys5">memsys5</a> alternative memory allocator. This
+ bug was introduced by a performance optimization in version 3.39.0.
+<li> Various other obscure fixes.
+<p><b>Hashes:</b>
+<li>SQLITE_SOURCE_ID: 2022-12-28 14:03:47 df5c253c0b3dd24916e4ec7cf77d3db5294cc9fd45ae7b9c5e82ad8197f38a24
+<li>SHA3-256 for sqlite3.c: 4d6800e9032ff349376fe612e422b49ba5eb4e378fac0b3e405235d09dd366ab
+
+</ol></p>
+<a name="version_3_40_0"></a>
+<h3>2022-11-16 (3.40.0)</h3><p><ol class='lessindent'>
+<li> Add support for compiling <a href="https://sqlite.org/wasm">SQLite to WASM</a>
+ and running it in web browsers. NB: The WASM build and its interfaces
+ are considered "beta" and are subject to minor changes if the need
+ arises. We anticipate finalizing the interface for the next release.
+<li> Add the <a href="recovery.html">recovery extension</a> that might be able to recover some content
+ from a corrupt database file.
+<li> Query planner enhancements:
+ <ol type="a">
+ <li> Recognize <a href="queryplanner.html#covidx">covering indexes</a> on tables with more than 63 columns where
+ columns beyond the 63rd column are used in the query and/or are
+ referenced by the index.
+ <li> Extract the values of expressions contained within <a href="expridx.html">expression indexes</a>
+ where practical, rather than recomputing the expression.
+ <li> The NOT NULL and IS NULL operators (and their equivalents) avoid
+ loading the content of large strings and BLOB values from disk.
+ <li> Avoid materializing a view on which a full scan is performed
+ exactly once. Use and discard the rows of the view as they are computed.
+ <li> Allow flattening of a subquery that is the right-hand operand of
+ a LEFT JOIN in an aggregate query.
+ </ol>
+<li> A new typedef named <a href="c3ref/filename.html">sqlite3_filename</a> is added and used to represent
+ the name of a database file. Various interfaces are
+ modified to use the new typedef instead of "char*". This interface
+ change should be fully backwards compatible, though it might cause
+ (harmless) compiler warnings when rebuilding some legacy applications.
+<li> Add the <a href="c3ref/value_blob.html">sqlite3_value_encoding()</a> interface.
+<li> Security enhancement: <a href="c3ref/c_dbconfig_defensive.html#sqlitedbconfigdefensive">SQLITE_DBCONFIG_DEFENSIVE</a> is augmented to prohibit
+ changing the <a href="pragma.html#pragma_schema_version">schema_version</a>. The schema_version
+ becomes read-only in defensive mode.
+<li> Enhancements to the <a href="pragma.html#pragma_integrity_check">PRAGMA integrity_check</a> statement:
+ <ol type="a">
+ <li> Columns in non-STRICT tables with TEXT affinity should not contain numeric values.
+ <li> Columns in non-STRICT tables with NUMERIC affinity should not
+ contain TEXT values that could be converted into numbers.
+ <li> Verify that the rows of a <a href="withoutrowid.html">WITHOUT ROWID</a> table are in the correct order.
+ </ol>
+<li> Enhance the <a href="lang_vacuum.html#vacuuminto">VACUUM INTO</a> statement so that it honors the
+ <a href="pragma.html#pragma_synchronous">PRAGMA synchronous</a> setting.
+<li> Enhance the <a href="c3ref/strglob.html">sqlite3_strglob()</a> and <a href="c3ref/strlike.html">sqlite3_strlike()</a> APIs so that they are able
+ to accept NULL pointers for their string parameters and still generate a sensible
+ result.
+<li> Provide the new <a href="compile.html#max_allocation_size">SQLITE_MAX_ALLOCATION_SIZE</a> compile-time option for limiting
+ the size of memory allocations.
+<li> Change the algorithm used by SQLite's built-in pseudo-random number generator (PRNG)
+ from RC4 to Chacha20.
+<li> Allow two or more indexes to have the same name as long as they are all in
+ separate schemas.
+<li> Miscellaneous performance optimizations result in about 1% fewer CPU cycles
+ used on typical workloads.
+<p><b>Hashes:</b>
+<li>SQLITE_SOURCE_ID: 2022-11-16 12:10:08 89c459e766ea7e9165d0beeb124708b955a4950d0f4792f457465d71b158d318
+<li>SHA3-256 for sqlite3.c: ab8da6bc754642989e67d581f26683dc705b068cea671970f0a7d32cfacbad19
+
+</ol></p>
+<a name="version_3_39_4"></a>
+<h3>2022-09-29 (3.39.4)</h3><p><ol class='lessindent'>
+<li> Fix the build on Windows so that it works with -DSQLITE_OMIT_AUTOINIT
+<li> Fix a long-standing problem in the btree balancer that might, in rare cases,
+ cause database corruption if the application uses an
+ <a href="c3ref/pcache_methods2.html">application-defined page cache</a>.
+<li> Enhance <a href="c3ref/c_dbconfig_defensive.html#sqlitedbconfigdefensive">SQLITE_DBCONFIG_DEFENSIVE</a> so that it disallows <a href="lang_createtrigger.html">CREATE TRIGGER</a>
+ statements if one or more of the statements in the body of the trigger write
+ into <a href="vtab.html#xshadowname">shadow tables</a>.
+<li> Fix a possible integer overflow in the size computation for a memory allocation
+ in FTS3.
+<li> Fix a misuse of the <a href="c3ref/get_auxdata.html">sqlite3_set_auxdata()</a> interface in the
+ <a href="https://sqlite.org/src/dir/ext/icu">ICU Extension</a>.
+<p><b>Hashes:</b>
+<li>SQLITE_SOURCE_ID: 2022-09-29 15:55:41 a29f9949895322123f7c38fbe94c649a9d6e6c9cd0c3b41c96d694552f26b309
+<li>SHA3-256 for sqlite3.c: f65082298127e2ddae6539beb94f5204b591df64ba2c7da83c7d0faffd6959d8
+
+</ol></p>
+<a name="version_3_39_3"></a>
+<h3>2022-09-05 (3.39.3)</h3><p><ol class='lessindent'>
+<li> Use a statement journal on DML statement affecting two or more database
+ rows if the statement makes use of a SQL functions that might abort. See
+ <a href="https://sqlite.org/forum/forumpost/9b9e4716c0d7bbd1">forum thread 9b9e4716c0d7bbd1</a>.
+<li> Use a mutex to protect the <a href="pragma.html#pragma_temp_store_directory">PRAGMA temp_store_directory</a> and
+ <a href="pragma.html#pragma_data_store_directory">PRAGMA data_store_directory</a> statements, even though they are deprecated and
+ documented as not being threadsafe. See
+ <a href="https://sqlite.org/forum/forumpost/719a11e1314d1c70">forum post 719a11e1314d1c70</a>.
+<li> Other bug and warning fixes. See the
+ <a href="https://sqlite.org/src/timeline?p=version-3.39.3&bt=version-3.39.2">timeline</a>
+ for details.
+<p><b>Hashes:</b>
+<li>SQLITE_SOURCE_ID: 2022-09-05 11:02:23 4635f4a69c8c2a8df242b384a992aea71224e39a2ccab42d8c0b0602f1e826e8
+<li>SHA3-256 for sqlite3.c: 2fc273cf8032b601c9e06207efa0ae80eb73d5a1d283eb91096c815fa9640257
+
+</ol></p>
+<a name="version_3_39_2"></a>
+<h3>2022-07-21 (3.39.2)</h3><p><ol class='lessindent'>
+<li> Fix a performance regression in the query planner associated with rearranging
+ the order of FROM clause terms in the presences of a LEFT JOIN.
+<li> Apply fixes for CVE-2022-35737, Chromium bugs 1343348 and 1345947,
+ <a href="https://sqlite.org/forum/forumpost/3607259d3c">forum post 3607259d3c</a>, and
+ other minor problems discovered by internal testing.
+<p><b>Hashes:</b>
+<li>SQLITE_SOURCE_ID: 2022-07-21 15:24:47 698edb77537b67c41adc68f9b892db56bcf9a55e00371a61420f3ddd668e6603
+<li>SHA3-256 for sqlite3.c: bffbaafa94706f0ed234f183af3eb46e6485e7e2c75983173ded76e0da805f11
+
+</ol></p>
+<a name="version_3_39_1"></a>
+<h3>2022-07-13 (3.39.1)</h3><p><ol class='lessindent'>
+<li> Fix an incorrect result from a query that uses a view that contains a compound
+ SELECT in which only one arm contains a RIGHT JOIN and where the view is not
+ the first FROM clause term of the query that contains the view.
+ <a href="https://sqlite.org/forum/forumpost/174afeae5734d42d">forum post 174afeae5734d42d</a>.
+<li> Fix some harmless compiler warnings.
+<li> Fix a long-standing problem with <a href="lang_altertable.html#altertabrename">ALTER TABLE RENAME</a> that can only arise
+ if the <a href="c3ref/limit.html">sqlite3_limit</a>(<a href="c3ref/c_limit_attached.html#sqlitelimitsqllength">SQLITE_LIMIT_SQL_LENGTH</a>) is set to a very small value.
+<li> Fix a long-standing problem in <a href="fts3.html">FTS3</a> that can only arise when compiled with
+ the <a href="compile.html#enable_fts3_parenthesis">SQLITE_ENABLE_FTS3_PARENTHESIS</a> compile-time option.
+<li> Fix the build so that is works when the <a href="compile.html#debug">SQLITE_DEBUG</a> and
+ <a href="compile.html#omit_windowfunc">SQLITE_OMIT_WINDOWFUNC</a> compile-time options are both provided at the
+ same time.
+<li> Fix the initial-prefix optimization for the <a href="lang_expr.html#regexp">REGEXP</a> extension so that it works
+ correctly even if the prefix contains characters that require a 3-byte UTF8
+ encoding.
+<li> Enhance the <a href="stmt.html">sqlite_stmt</a> virtual table so that it buffers all of its output.
+<p><b>Hashes:</b>
+<li>SQLITE_SOURCE_ID: 2022-07-13 19:41:41 7c16541a0efb3985578181171c9f2bb3fdc4bad6a2ec85c6e31ab96f3eff201f
+<li>SHA3-256 for sqlite3.c: 6d13fcf1c31133da541d1eb8a83552d746f39b81a0657bd4077fed0221749511
+
+</ol></p>
+<a name="version_3_39_0"></a>
+<h3>2022-06-25 (3.39.0)</h3><p><ol class='lessindent'>
+<li> Add (long overdue) support for <a href="lang_select.html#rjoin">RIGHT and FULL OUTER JOIN</a>.
+<li> Add new binary comparison operators <a href="lang_expr.html#isdf">IS NOT DISTINCT FROM</a> and <a href="lang_expr.html#isdf">IS DISTINCT FROM</a>
+ that are equivalent to IS and IS NOT, respective, for compatibility with
+ PostgreSQL and SQL standards.
+<li> Add a new return code (value "3") from the <a href="c3ref/vtab_distinct.html">sqlite3_vtab_distinct()</a>
+ interface that indicates a query that has both DISTINCT and ORDER BY
+ clauses.
+<li> Added the <a href="c3ref/db_name.html">sqlite3_db_name()</a> interface.
+<li> The unix os interface resolves all symbolic links in database
+ filenames to create a canonical name for the database before the
+ file is opened.
+ If the <a href="c3ref/c_open_autoproxy.html">SQLITE_OPEN_NOFOLLOW</a> flag is used with <a href="c3ref/open.html">sqlite3_open_v2()</a>
+ or similar, the open will fail if any element of the path is a
+ symbolic link.
+<li> Defer materializing views until the materialization
+ is actually needed, thus avoiding unnecessary work if the materialization turns
+ out to never be used.
+<li> The <a href="lang_select.html#resultset">HAVING clause</a> of a <a href="lang_select.html">SELECT statement</a> is now allowed on any aggregate query,
+ even queries that do not have a <a href="lang_select.html#resultset">GROUP BY clause</a>.
+<li> Many <a href="cpu.html#microopt">microoptimizations</a> collectively reduce CPU cycles by about 2.3%.
+<p><b>Hashes:</b>
+<li>SQLITE_SOURCE_ID: 2022-06-25 14:57:57 14e166f40dbfa6e055543f8301525f2ca2e96a02a57269818b9e69e162e98918
+<li>SHA3-256 for sqlite3.c: d9c439cacad5e4992d0d25989cfd27a4c4f59a3183c97873bc03f0ad1aa78b7a
+
+</ol></p>
+<a name="version_3_38_5"></a>
+<h3>2022-05-06 (3.38.5)</h3><p><ol class='lessindent'>
+<li> Fix <a href="news.html#2022-05-06">a blunder</a> in the <a href="cli.html">CLI</a> of the 3.38.4 release.
+
+<p><b>Hashes:</b>
+<li>SQLITE_SOURCE_ID: 2022-05-06 15:25:27 78d9c993d404cdfaa7fdd2973fa1052e3da9f66215cff9c5540ebe55c407d9fe
+<li>SHA3-256 for sqlite3.c: b05ef42ed234009b4b3dfb36c5f5ccf6d728da80f25ee560291269cf6cfe635f
+
+</ol></p>
+<a name="version_3_38_4"></a>
+<h3>2022-05-04 (3.38.4)</h3><p><ol class='lessindent'>
+<li> Fix a byte-code problem in the Bloom filter pull-down optimization added by release
+ 3.38.0 in which an error in the byte code causes the byte code engine to enter an
+ infinite loop when the pull-down optimization encounters a NULL key.
+ <a href='https://sqlite.org/forum/forumpost/2482b32700384a0f'>Forum thread 2482b32700384a0f</a>.
+<li> Other minor patches. See the
+ <a href='https://sqlite.org/src/timeline?p=branch-3.38&bt=version-3.38.3'>timeline</a> for
+ details.
+
+<p><b>Hashes:</b>
+<li>SQLITE_SOURCE_ID: 2022-05-04 15:45:55 d402f49871152670a62f4f28cacb15d814f2c1644e9347ad7d258e562978e45e
+<li>SHA3-256 for sqlite3.c: e6a50effb021858c200e885664611ed3c5e949413ff2dca452ac7ee336b9de1d
+
+</ol></p>
+<a name="version_3_38_3"></a>
+<h3>2022-04-27 (3.38.3)</h3><p><ol class='lessindent'>
+<li> Fix a case of the query planner be overly aggressive with optimizing automatic-index
+ and Bloom-filter construction, using inappropriate ON clause terms to restrict the
+ size of the automatic-index or Bloom filter, and resulting in missing rows in the
+ output.
+ <a href='https://sqlite.org/forum/forumpost/0d3200f4f3bcd3a3'>Forum thread 0d3200f4f3bcd3a3</a>.
+<li> Other minor patches. See the
+ <a href='https://sqlite.org/src/timeline?p=version-3.38.3&bt=version-3.38.2'>timeline</a> for
+ details.
+
+<p><b>Hashes:</b>
+<li>SQLITE_SOURCE_ID: 2022-04-27 12:03:15 9547e2c38a1c6f751a77d4d796894dec4dc5d8f5d79b1cd39e1ffc50df7b3be4
+<li>SHA3-256 for sqlite3.c: d4d66feffad66ea82073fbb97ae9c84e3615887ebc5168226ccee28d82424517
+
+</ol></p>
+<a name="version_3_38_2"></a>
+<h3>2022-03-26 (3.38.2)</h3><p><ol class='lessindent'>
+<li> Fix a user-discovered problem with the new Bloom filter optimization
+ that might cause an incorrect answer when doing a LEFT JOIN with a WHERE
+ clause constraint that says that one of the columns on the right table of
+ the LEFT JOIN is NULL. See
+ <a href='https://sqlite.org/forum/forumpost/031e262a89b6a9d2'>forum thread 031e262a89b6a9d2</a>.
+<li> Other minor patches. See the
+ <a href='https://sqlite.org/src/timeline?p=version-3.38.2&bt=version-3.38.1'>timeline</a> for
+ details.
+
+<p><b>Hashes:</b>
+<li>SQLITE_SOURCE_ID: 2022-03-26 13:51:10 d33c709cc0af66bc5b6dc6216eba9f1f0b40960b9ae83694c986fbf4c1d6f08f
+<li>SHA3-256 for sqlite3.c: 0fbac6b6999f894184899431fb77b9792324c61246b2a010d736694ccaa6d613
+
+</ol></p>
+<a name="version_3_38_1"></a>
+<h3>2022-03-12 (3.38.1)</h3><p><ol class='lessindent'>
+<li> Fix problems with the new Bloom filter optimization that might cause
+ some obscure queries to get an incorrect answer.
+<li> Fix the <a href="lang_datefunc.html#localtime">localtime modifier</a> of the <a href="lang_datefunc.html">date and time functions</a> so that
+ it preserves fractional seconds.
+<li> Fix the <a href="lang_corefunc.html#sqlite_offset">sqlite_offset SQL function</a> so that it works correctly even
+ in corner cases such as when the argument is a virtual column or the
+ column of a view.
+<li> Fix <a href="rowvalue.html#rvinop">row value IN operator</a> constraints on <a href="vtab.html">virtual tables</a> so that they
+ work correctly even if the virtual table implementation relies on bytecode
+ to filter rows that do not satisfy the constraint.
+<li> Other minor fixes to assert() statements, test cases, and documentation.
+ See the <a href="https://sqlite.org/src/timeline?p=version-3.38.1&bt=version-3.38.0">source code timeline</a>
+ for details.
+
+<p><b>Hashes:</b>
+<li>SQLITE_SOURCE_ID: 2022-03-12 13:37:29 38c210fdd258658321c85ec9c01a072fda3ada94540e3239d29b34dc547a8cbc
+<li>SHA3-256 for sqlite3.c: 262ba071e960a8a0a6ce39307ae30244a2b0dc9fe1c4c09d0e1070d4353cd92c
+
+</ol></p>
+<a name="version_3_38_0"></a>
+<h3>2022-02-22 (3.38.0)</h3><p><ol class='lessindent'>
+<li> Added <a href="json1.html#jptr">the -> and ->> operators</a> for easier processing of JSON.
+ The new operators are compatible with MySQL and PostgreSQL.
+<li> The JSON functions are now built-ins. It is no longer necessary
+ to use the <a href="compile.html#enable_json1">-DSQLITE_ENABLE_JSON1</a> compile-time option to enable JSON
+ support. JSON is on by default. Disable the JSON interface using
+ the new <a href="compile.html#omit_json">-DSQLITE_OMIT_JSON</a> compile-time option.
+<li> Enhancements to <a href="lang_datefunc.html">date and time functions</a>:
+ <ol type="a">
+ <li> Added the <a href="lang_datefunc.html#uepch">unixepoch() function</a>.
+ <li> Added the <a href="lang_datefunc.html#automod">auto modifier</a> and the <a href="lang_datefunc.html#jdmod">julianday modifier</a>.
+ </ol>
+<li> Rename the <a href="lang_corefunc.html#printf">printf() SQL function</a> to <a href="lang_corefunc.html#format">format()</a> for better
+ compatibility. The original printf() name is retained as an alias
+ for backwards compatibility.
+<li> Added the <a href="c3ref/errcode.html">sqlite3_error_offset()</a> interface, which can sometimes
+ help to localize an SQL error to a specific character in the input
+ SQL text, so that applications can provide better error messages.
+<li> Enhanced the interface to <a href="vtab.html">virtual tables</a> as follows:
+ <ol type="a">
+ <li> Added the <a href="c3ref/vtab_distinct.html">sqlite3_vtab_distinct()</a> interface.
+ <li> Added the <a href="c3ref/vtab_rhs_value.html">sqlite3_vtab_rhs_value()</a> interface.
+ <li> Added new operator types <a href="c3ref/c_index_constraint_eq.html">SQLITE_INDEX_CONSTRAINT_LIMIT</a>
+ and <a href="c3ref/c_index_constraint_eq.html">SQLITE_INDEX_CONSTRAINT_OFFSET</a>.
+ <li> Added the <a href="c3ref/vtab_in.html">sqlite3_vtab_in()</a> interface (and related) to enable
+ a virtual table to process <a href="lang_expr.html#in_op">IN operator</a> constraints all at once,
+ rather than processing each value of the right-hand side of the
+ IN operator separately.
+ </ol>
+<li> <a href="cli.html">CLI</a> enhancements:
+ <ol type="a">
+ <li> <a href="cli.html#clmnr">Columnar output modes</a> are enhanced to correctly handle tabs
+ and newlines embedded in text.
+ <li> Added options like "--wrap N", "--wordwrap on", and "--quote"
+ to the <a href="cli.html#clmnr">columnar output modes</a>.
+ <li> Added the <a href="cli.html#qbox">.mode qbox</a> alias.
+ <li> The <a href="cli.html#csv">.import command</a> automatically disambiguates column names.
+ <li> Use the new <a href="c3ref/errcode.html">sqlite3_error_offset()</a> interface to provide better
+ error messages.
+ </ol>
+<li> Query planner enhancements:
+ <ol type="a">
+ <li> Use a Bloom filter to speed up large analytic queries.
+ <li> Use a balanced merge tree to evaluate UNION or UNION ALL
+ compound SELECT statements that have an ORDER BY clause.
+ </ol>
+<li> The <a href="lang_altertable.html">ALTER TABLE</a> statement is changed to silently ignores entries in the
+ <a href="schematab.html">sqlite_schema table</a> that do not parse when <a href="pragma.html#pragma_writable_schema">PRAGMA writable_schema=ON</a>.
+<p><b>Hashes:</b>
+<li>SQLITE_SOURCE_ID: 2022-02-22 18:58:40 40fa792d359f84c3b9e9d6623743e1a59826274e221df1bde8f47086968a1bab
+
+<li>SHA3-256 for sqlite3.c: a69af0a88d59271a2dd3c846a3e93cbd29e7c499864f6c0462a3b4160bee1762
+
+</ol></p>
+<a name="version_3_37_2"></a>
+<h3>2022-01-06 (3.37.2)</h3><p><ol class='lessindent'>
+<li> Fix <a href="https://sqlite.org/forum/forumpost/b03d86f9516cb3a2">a bug</a> introduced
+ in <a href="#version_3_35_0">version 3.35.0</a> (2021-03-12) that
+ <a href="howtocorrupt.html#svptbug">can cause database corruption</a>
+ if a <a href="lang_savepoint.html">SAVEPOINT</a> is rolled back while in <a href="pragma.html#pragma_temp_store">PRAGMA temp_store=MEMORY</a> mode,
+ and other changes are made, and then the outer transaction commits.
+ <a href="https://sqlite.org/src/info/73c2b50211d3ae26">Check-in 73c2b50211d3ae26</a>
+<li> Fix a long-standing problem with ON DELETE CASCADE and ON UPDATE CASCADE
+ in which a cache of the <a href="opcode.html">bytecode</a> used to implement the cascading change
+ was not being reset following a local DDL change.
+ <a href="https://sqlite.org/src/info/5232c9777fe4fb13">Check-in 5232c9777fe4fb13</a>.
+<li> Other minor fixes that should not impact production builds.
+
+<p><b>Hashes:</b>
+<li>SQLITE_SOURCE_ID: 2022-01-06 13:25:41 872ba256cbf61d9290b571c0e6d82a20c224ca3ad82971edc46b29818d5d17a0
+<li>SHA3-256 for sqlite3.c: 1bb01c382295cba85ec4685cedc52a7477cdae71cc37f1ad0f48719a17af1e1e
+
+</ol></p>
+<a name="version_3_37_1"></a>
+<h3>2021-12-30 (3.37.1)</h3><p><ol class='lessindent'>
+<li> Fix a bug introduced by the <a href="lang_upsert.html">UPSERT</a> enhancements of <a href="#version_3_35_0">version 3.35.0</a> that
+ can cause incorrect byte-code to be generated for some obscure but valid
+ SQL, possibly resulting in a NULL-pointer dereference.
+<li> Fix an OOB read that can occur in <a href="fts5.html">FTS5</a> when reading corrupt database files.
+<li> Improved robustness of the --safe option in the <a href="cli.html">CLI</a>.
+<li> Other minor fixes to assert() statements and test cases.
+
+<p><b>Hashes:</b>
+<li>SQLITE_SOURCE_ID: 2021-12-30 15:30:28 378629bf2ea546f73eee84063c5358439a12f7300e433f18c9e1bddd948dea62
+<li>SHA3-256 for sqlite3.c: 915afb3f29c2d217ea0c283326a9df7d505e6c73b40236f0b33ded91f812d174
+
+</ol></p>
+<a name="version_3_37_0"></a>
+<h3>2021-11-27 (3.37.0)</h3><p><ol class='lessindent'>
+<li> <a href="stricttables.html">STRICT tables</a> provide a prescriptive style of data type management,
+ for developers who prefer that kind of thing.
+<li> When adding columns that contain a
+ <a href="lang_createtable.html#ckconst">CHECK constraint</a> or a <a href="gencol.html">generated column</a> containing a <a href="lang_createtable.html#notnullconst">NOT NULL constraint</a>,
+ the <a href="lang_altertable.html#altertabaddcol">ALTER TABLE ADD COLUMN</a> now checks new constraints against
+ preexisting rows in the database and will only proceed if no constraints
+ are violated.
+<li> Added the <a href="pragma.html#pragma_table_list">PRAGMA table_list</a> statement.
+<li> <a href="cli.html">CLI</a> enhancements:
+ <ol type="a">
+ <li> Add the <a href="cli.html#dotconn">.connection</a> command, allowing the CLI to keep multiple database
+ connections open at the same time.
+ <li> Add the <a href="cli.html#safemode">--safe command-line option</a> that disables
+ <a href="cli.html#dotcmd">dot-commands</a> and SQL statements that might cause side-effects that extend
+ beyond the single database file named on the command-line.
+ <li> Performance improvements when reading SQL statements
+ that span many lines.
+ </ol>
+<li> Added the <a href="c3ref/autovacuum_pages.html">sqlite3_autovacuum_pages()</a> interface.
+<li> The <a href="c3ref/deserialize.html">sqlite3_deserialize()</a> does not and has never worked for the TEMP
+ database. That limitation is now noted in the documentation.
+<li> The query planner now omits ORDER BY clauses on subqueries and views
+ if removing those clauses does not change the semantics of the query.
+<li> The <a href="series.html">generate_series</a> table-valued function extension is modified so that
+ the first parameter ("START") is now required. This is done as a way to
+ demonstrate how to write table-valued functions with required parameters.
+ The legacy behavior is available using the -DZERO_ARGUMENT_GENERATE_SERIES
+ compile-time option.
+<li> Added new <a href="c3ref/changes.html">sqlite3_changes64()</a> and <a href="c3ref/total_changes.html">sqlite3_total_changes64()</a> interfaces.
+<li> Added the <a href="c3ref/c_open_autoproxy.html">SQLITE_OPEN_EXRESCODE</a> flag option to <a href="c3ref/open.html">sqlite3_open_v2()</a>.
+<li> Use less memory to hold the database schema.
+
+<p><b>Hashes:</b>
+<li>SQLITE_SOURCE_ID: 2021-11-27 14:13:22 bd41822c7424d393a30e92ff6cb254d25c26769889c1499a18a0b9339f5d6c8a
+<li>SHA3-256 for sqlite3.c: a202a950ab401cda052e81259e96d6e64ad91faaaaf5690d769f64c2ab962f27
+
+</ol></p>
+<a name="version_3_36_0"></a>
+<h3>2021-06-18 (3.36.0)</h3><p><ol class='lessindent'>
+<li> Improvement to the <a href="eqp.html">EXPLAIN QUERY PLAN</a> output to make it easier to
+ understand.
+<li> Byte-order marks at the start of a token are skipped as if they
+ were whitespace.
+<li> An error is raised on any attempt to access the <a href="lang_createtable.html#rowid">rowid</a> of a VIEW or subquery.
+ Formerly, the rowid of a VIEW would be indeterminate and often would be NULL.
+ The -DSQLITE_ALLOW_ROWID_IN_VIEW compile-time option is available to restore
+ the legacy behavior for applications that need it.
+<li> The <a href="c3ref/deserialize.html">sqlite3_deserialize()</a> and <a href="c3ref/serialize.html">sqlite3_serialize()</a> interfaces are now
+ enabled by default. The -DSQLITE_ENABLE_DESERIALIZE compile-time option is
+ no longer required. Instead, there is a new <a href="compile.html#omit_deserialize">-DSQLITE_OMIT_DESERIALIZE</a>
+ compile-time option to omit those interfaces.
+<li> The "memdb" VFS now allows the same in-memory database to be shared among
+ multiple database connections in the same process as long as the
+ database name begins with "/".
+<li> Back out the EXISTS-to-IN optimization (item 8b in the
+ <a href="#version_3_35_0">SQLite 3.35.0 change log</a>)
+ as it was found to slow down queries more often than speed them up.
+<li> Improve the <a href="optoverview.html#constprop">constant-propagation optimization</a> so that it works on
+ non-join queries.
+<li> The <a href="https://sqlite.org/src/file/ext/misc/regexp.c">REGEXP extension</a> is
+ now included in <a href="cli.html">CLI</a> builds.
+
+<p><b>Hashes:</b>
+<li>SQLITE_SOURCE_ID: 2021-06-18 18:36:39 5c9a6c06871cb9fe42814af9c039eb6da5427a6ec28f187af7ebfb62eafa66e5
+<li>SHA3-256 for sqlite3.c: 2a8e87aaa414ac2d45ace8eb74e710935423607a8de0fafcb36bbde5b952d157
+
+</ol></p>
+<a name="version_3_35_5"></a>
+<h3>2021-04-19 (3.35.5)</h3><p><ol class='lessindent'>
+<li> Fix defects in the new ALTER TABLE DROP COLUMN feature that could
+ corrupt the database file.
+<li> Fix an obscure query optimizer problem that might cause an incorrect
+ query result.
+<p><b>Hashes:</b>
+<li>SQLITE_SOURCE_ID: 2021-04-19 18:32:05 1b256d97b553a9611efca188a3d995a2fff712759044ba480f9a0c9e98fae886
+<li>SHA3-256 for sqlite3.c: e42291343e8f03940e57fffcf1631e7921013b94419c2f943e816d3edf4e1bbe
+
+</ol></p>
+<a name="version_3_35_4"></a>
+<h3>2021-04-02 (3.35.4)</h3><p><ol class='lessindent'>
+<li> Fix a defect in the query planner optimization identified by
+ item 8b above. Ticket
+ <a href="https://sqlite.org/src/info/de7db14784a08053">de7db14784a08053</a>.
+<li> Fix a defect in the new <a href="lang_returning.html">RETURNING</a> syntax. Ticket
+ <a href="https://sqlite.org/src/info/132994c8b1063bfb">132994c8b1063bfb</a>.
+<li> Fix the new <a href="lang_returning.html">RETURNING</a> feature so that it raises an error if one of
+ the terms in the RETURNING clause references a unknown table, instead
+ of silently ignoring that error.
+<li> Fix an assertion associated with aggregate function processing that
+ was incorrectly triggered by the <a href="optoverview.html#pushdown">push-down optimization</a>.
+<p><b>Hashes:</b>
+<li>SQLITE_SOURCE_ID: 2021-04-02 15:20:15 5d4c65779dab868b285519b19e4cf9d451d50c6048f06f653aa701ec212df45e
+<li>SHA3-256 for sqlite3.c: 528b8a26bf5ffd4c7b4647b5b799f86e8fb1a075f715b87a414e94fba3d09dbe
+
+</ol></p>
+<a name="version_3_35_3"></a>
+<h3>2021-03-26 (3.35.3)</h3><p><ol class='lessindent'>
+<li> Enhance the OP_OpenDup opcode of the <a href="opcode.html">bytecode engine</a> so that it works even if the
+ cursor being duplicated itself came from OP_OpenDup. Fix for
+ <a href="https://www.sqlite.org/src/info/bb8a9fd4a9b7fce5">ticket bb8a9fd4a9b7fce5</a>.
+ This problem only came to light due to the recent MATERIALIZED hint enhancement.
+<li> When materializing correlated <a href="lang_with.html">common table expressions</a>, do so separately for each
+ use case, as that is required for correctness. This fixes a problem that was
+ introduced by the MATERIALIZED hint enhancement.
+<li> Fix a problem in the filename normalizer of the unix <a href="vfs.html">VFS</a>.
+<li> Fix the <a href="cli.html#dotmode">"box" output mode</a> in the <a href="cli.html">CLI</a> so that it works with statements that
+ returns one or more rows of zero columns (such as <a href="pragma.html#pragma_incremental_vacuum">PRAGMA incremental_vacuum</a>).
+ <a href="https://sqlite.org/forum/forumpost/afbbcb5b72">Forum post afbbcb5b72</a>.
+<li> Improvements to error messages generated by faulty common table expressions.
+ <a href="https://sqlite.org/forum/forumpost/aa5a0431c99e631">Forum post aa5a0431c99e</a>.
+<li> Fix some incorrect assert() statements.
+<li> Fix to the <a href="syntax/select-stmt.html">SELECT statement syntax diagram</a> so that the FROM clause
+ syntax is shown correctly.
+ <a href="https://sqlite.org/forum/forumpost/9ed02582fe">Forum post 9ed02582fe</a>.
+<li> Fix the EBCDIC character classifier so that it understands newlines as whitespace.
+ <a href="https://sqlite.org/forum/forumpost/58540ce22dcd5fdcd">Forum post 58540ce22dcd</a>.
+<li> Improvements the <a href="vtab.html#xbestindex">xBestIndex</a> method in the implementation of the
+ (unsupported) <a href="https://sqlite.org/src/file/ext/misc/wholenumber.c">wholenumber virtual table</a>
+ extension so that it does a better job of convincing the query planner to
+ avoid trying to materialize a table with an infinite number of rows.
+ <a href="https://sqlite.org/forum/forumpost/b52a020ce4">Forum post b52a020ce4</a>.
+<p><b>Hashes:</b>
+<li>SQLITE_SOURCE_ID: 2021-03-26 12:12:52 4c5e6c200adc8afe0814936c67a971efc516d1bd739cb620235592f18f40be2a
+<li>SHA3-256 for sqlite3.c: 91ca6c0a30ebfdba4420bb35f4fd9149d13e45fc853d86ad7527db363e282683
+
+</ol></p>
+<a name="version_3_35_2"></a>
+<h3>2021-03-17 (3.35.2)</h3><p><ol class='lessindent'>
+<li> Fix a problem in the
+ <a href="http://www.sqlite.org/src/file/ext/misc/appendvfs.c">appendvfs.c</a>
+ extension that was introduced into version 3.35.0.
+<li> Ensure that date/time functions with no arguments (which generate
+ responses that depend on the current time) are treated as
+ <a href="deterministic.html">non-deterministic functions</a>. Ticket
+ <a href="https://sqlite.org/src/info/2c6c8689fb5f3d2f">2c6c8689fb5f3d2f</a>
+<li> Fix a problem in the <a href="sqldiff.html">sqldiff</a> utility program having to do with
+ unusual whitespace characters in a <a href="vtab.html">virtual table</a> definition.
+<li> Limit the new UNION ALL optimization described by item 8c in the
+ 3.35.0 release so that it does not try to make too many new subqueries.
+ See <a href="https://sqlite.org/forum/forumpost/140a67d3d2">forum thread 140a67d3d2</a>
+ for details.
+<p><b>Hashes:</b>
+<li>SQLITE_SOURCE_ID: 2021-03-17 19:07:21 ea80f3002f4120f5dcee76e8779dfdc88e1e096c5cdd06904c20fd26d50c3827
+<li>SHA3-256 for sqlite3.c: e8edc7b1512a2e050d548d0840bec6eef83cc297af1426c34c0ee8720f378a11
+
+</ol></p>
+<a name="version_3_35_1"></a>
+<h3>2021-03-15 (3.35.1)</h3><p><ol class='lessindent'>
+<li> Fix <a href="https://www.sqlite.org/src/info/1c24a659e6d7f3a1">a bug</a> in the new DROP COLUMN
+ feature when used on columns that are indexed and that are quoted in the index
+ definition.
+<li> Improve the built-in documentation for the <a href="cli.html#dump">.dump</a> command in the <a href="cli.html">CLI</a>.
+<p><b>Hashes:</b>
+<li>SQLITE_SOURCE_ID: 2021-03-15 16:53:57 aea12399bf1fdc76af43499d4624c3afa17c3e6c2459b71c195804bb98def66a
+<li>SHA3-256 for sqlite3.c: fc79e27fd030226c07691b7d7c23aa81c8d46bc3bef5af39060e1507c82b0523
+
+</ol></p>
+<a name="version_3_35_0"></a>
+<h3>2021-03-12 (3.35.0)</h3><p><ol class='lessindent'>
+<li> Added <a href="lang_mathfunc.html">built-in SQL math functions()</a>. (Requires the
+ <a href="compile.html#enable_math_functions">-DSQLITE_ENABLE_MATH_FUNCTIONS</a> compile-time option.)
+<li> Added support for <a href="lang_altertable.html#altertabdropcol">ALTER TABLE DROP COLUMN</a>.
+<li> Generalize <a href="lang_upsert.html">UPSERT</a>:
+ <ol type="a">
+ <li> Allow multiple ON CONFLICT clauses that are evaluated in order,
+ <li> The final ON CONFLICT clause may omit the conflict target and
+ yet still use DO UPDATE.
+ </ol>
+<li> Add support for the <a href="lang_returning.html">RETURNING</a> clause on <a href="lang_delete.html">DELETE</a>, <a href="lang_insert.html">INSERT</a>, and
+ <a href="lang_update.html">UPDATE</a> statements.
+<li> Use less memory when running <a href="lang_vacuum.html">VACUUM</a> on databases containing very large
+ TEXT or BLOB values. It is no longer necessary to hold the entire TEXT
+ or BLOB in memory all at once.
+<li> Add support for the <a href="lang_with.html#mathint">MATERIALIZED</a> and <a href="lang_with.html#mathint">NOT MATERIALIZED</a> hints when
+ specifying <a href="lang_with.html">common table expressions</a>. The default behavior was
+ formerly NOT MATERIALIZED, but is now changed to MATERIALIZED for
+ CTEs that are used more than once.
+<li> The <a href="c3ref/c_dbconfig_defensive.html#sqlitedbconfigenabletrigger">SQLITE_DBCONFIG_ENABLE_TRIGGER</a> and <a href="c3ref/c_dbconfig_defensive.html#sqlitedbconfigenableview">SQLITE_DBCONFIG_ENABLE_VIEW</a>
+ settings are modified so that they only control triggers and views
+ in the main database schema or in attached database schemas and not in
+ the TEMP schema. TEMP triggers and views are always allowed.
+<li> Query planner/optimizer improvements:
+ <ol type="a">
+ <li> Enhancements to the <a href="optoverview.html#minmax">min/max optimization</a> so that it works better
+ with the IN operator and the OP_SeekScan optimization of the
+ previous release.
+ <li> Attempt to process EXISTS operators in the WHERE clause as if
+ they were IN operators, in cases where this is a valid transformation
+ and seems likely to improve performance.
+ <li> Allow UNION ALL sub-queries to be <a href="optoverview.html#flattening">flattened</a> even if the parent query is a join.
+ <li> Use an index, if appropriate, on IS NOT NULL expressions in the WHERE clause,
+ even if STAT4 is disabled.
+ <li> Expressions of the form "x IS NULL" or "x IS NOT NULL" might be converted to simply
+ FALSE or TRUE, if "x" is a column that has a "NOT NULL" constraint and is not
+ involved in an outer join.
+ <li> Avoid checking foreign key constraints on an UPDATE statement if the UPDATE does
+ not modify any columns associated with the foreign key.
+ <li> Allow WHERE terms to be <a href="optoverview.html#pushdown">pushed down</a> into sub-queries
+ that contain window functions,
+ as long as the WHERE term is made up of entirely of constants and copies of expressions
+ found in the PARTITION BY clauses of all window functions in the sub-query.
+ </ol>
+<li> <a href="cli.html">CLI</a> enhancements:
+ <ol type="a">
+ <li> Enhance the ".stats" command to accept new arguments "stmt" and
+ "vmstep", causing prepare statement statistics and only the
+ virtual-machine step count to be shown, respectively.
+ <li> Add the ".filectrl data_version" command.
+ <li> Enhance the ".once" and ".output" commands so that if the destination argument
+ begins with "|" (indicating that output is redirected into a pipe) then the
+ argument does not need to be quoted.
+ </ol>
+<li> Bug fixes:
+ <ol type="a">
+ <li> Fix a potential NULL pointer dereference when processing a
+ syntactically incorrect SELECT statement with a correlated WHERE
+ clause and a "HAVING 0" clause. (Also fixed in the 3.34.1 patch release.)
+ <li> Fix a <a href="https://www.sqlite.org/src/info/ee51301f316c09e9">bug in the IN-operator optimization</a>
+ of version 3.33.0 that can cause an incorrect answer.
+ <li> Fix incorrect answers from the <a href="lang_expr.html#like">LIKE operator</a> if the pattern ends with "%" and there
+ is an "ESCAPE '_'" clause.
+ </ol>
+<p><b>Hashes:</b>
+<li>SQLITE_SOURCE_ID: 2021-03-12 15:10:09 acd63062eb06748bfe9e4886639e4f2b54ea6a496a83f10716abbaba4115500b
+<li>SHA3-256 for sqlite3.c: 73a740d881735bef9de7f7bce8c9e6b9e57fe3e77fa7d76a6e8fc5c262fbaedf
+
+</ol></p>
+<a name="version_3_34_1"></a>
+<h3>2021-01-20 (3.34.1)</h3><p><ol class='lessindent'>
+<li> Fix a potential use-after-free bug when processing a a subquery with both
+ a correlated WHERE clause and a "HAVING 0" clause and where the parent
+ query is an aggregate.
+<li> Fix documentation typos
+<li> Fix minor problems in extensions.
+<p><b>Hashes:</b>
+<li>SQLITE_SOURCE_ID: 2021-01-20 14:10:07 10e20c0b43500cfb9bbc0eaa061c57514f715d87238f4d835880cd846b9ebd1f
+<li>SHA3-256 for sqlite3.c: 799a7be90651fc7296113b641a70b028c142d767b25af1d0a78f93dcf1a2bf20
+
+</ol></p>
+<a name="version_3_34_0"></a>
+<h3>2020-12-01 (3.34.0)</h3><p><ol class='lessindent'>
+<li> Added the <a href="c3ref/txn_state.html">sqlite3_txn_state()</a> interface for reporting on the current
+ transaction state of the database connection.
+<li> Enhance <a href="lang_with.html#recursivecte">recursive common table expressions</a> to support two or more
+ recursive terms as is done by SQL Server, since this helps make
+ <a href="lang_with.html#rcex3">queries against graphs</a> easier to write and faster to execute.
+<li> Improved error messages on <a href="lang_createtable.html#ckconst">CHECK constraint</a> failures.
+<li> <a href="cli.html">CLI</a> enhancements:
+ <ol type="a">
+ <li> The <a href="cli.html#dotread">.read</a> dot-command now accepts a pipeline in addition to
+ a filename.
+ <li> Added options --data-only and --nosys to the <a href="cli.html#dump">.dump</a> dot-command.
+ <li> Added the --nosys option to the <a href="cli.html#dschema">.schema</a> dot-command.
+ <li> Table name quoting works correctly for the <a href="cli.html#csv">.import</a> dot-command.
+ <li> The <a href="series.html">generate_series(START,END,STEP)</a> table-valued function
+ extension is now built into the CLI.
+ <li> The <a href="cli.html#dotdatabases">.databases</a> dot-command now shows the status of each database
+ file as determined by <a href="c3ref/db_readonly.html">sqlite3_db_readonly()</a> and
+ <a href="c3ref/txn_state.html">sqlite3_txn_state()</a>.
+ <li> Added the --tabs command-line option that sets
+ <a href="cli.html#dotmode">.mode tabs</a>.
+ <li> The --init option reports an error if the file named as its argument
+ cannot be opened. The --init option also now honors the --bail option.
+ </ol>
+<li> Query planner improvements:
+ <ol type="a">
+ <li> Improved estimates for the cost of running a DISTINCT operator.
+ <li> When doing an UPDATE or DELETE using a multi-column index where
+ only a few of the earlier columns of the index are useful for the
+ index lookup, postpone doing the main table seek until after all
+ WHERE clause constraints have been evaluated, in case those
+ constraints can be covered by unused later terms of the index,
+ thus avoiding unnecessary main table seeks.
+ <li> The new OP_SeekScan opcode is used to improve performance of
+ multi-column index look-ups when later columns are constrained
+ by an IN operator.
+ </ol>
+<li> The <a href="lang_transaction.html#immediate">BEGIN IMMEDIATE</a> and <a href="lang_transaction.html#immediate">BEGIN EXCLUSIVE</a> commands now work even
+ if one or more attached database files are read-only.
+<li> Enhanced <a href="fts5.html">FTS5</a> to support <a href="fts5.html#trigramidx">trigram indexes</a>.
+<li> Improved performance of <a href="wal.html">WAL mode</a> locking primitives in cases where
+ there are hundreds of connections all accessing the same database file
+ at once.
+<li> Enhanced the <a href="carray.html">carray() table-valued function</a> to include a single-argument
+ form that is bound using the auxiliary <a href="carray.html#onearg">sqlite3_carray_bind()</a> interface.
+<li> The <a href="lang_corefunc.html#substr">substr() SQL function</a> can now also be called "substring()" for
+ compatibility with SQL Server.
+<li> The <a href="syntaxdiagrams.html">syntax diagrams</a> are now implemented as
+ <a href='https://pikchr.org/'>Pikchr</a> scripts and rendered
+ as SVG for improved legibility and ease of maintenance.
+<p><b>Hashes:</b>
+<li>SQLITE_SOURCE_ID: 2020-12-01 16:14:00 a26b6597e3ae272231b96f9982c3bcc17ddec2f2b6eb4df06a224b91089fed5b
+<li>SHA3-256 for sqlite3.c: fbd895b0655a337b2cd657675f314188a4e9fe614444cc63dfeb3f066f674514
+
+
+</ol></p>
+<a name="version_3_33_0"></a>
+<h3>2020-08-14 (3.33.0)</h3><p><ol class='lessindent'>
+<li> Support for <a href="lang_update.html#upfrom">UPDATE FROM</a> following the PostgreSQL syntax.
+<li> Increase the maximum size of database files to 281 TB.
+<li> Extended the <a href="pragma.html#pragma_integrity_check">PRAGMA integrity_check</a> statement so that it can optionally be
+ limited to verifying just a single table and its indexes, rather than the
+ entire database file.
+<li> Added the <a href="floatingpoint.html#decext">decimal extension</a> for doing arbitrary-precision decimal arithmetic.
+<li> Enhancements to the <a href="floatingpoint.html#ieee754ext">ieee754 extension</a> for working with IEEE 754 binary64 numbers.
+<li> <a href="cli.html">CLI</a> enhancements:
+ <ol type="a">
+ <li> Added four new <a href="cli.html#dotmode">output modes</a>: "box", "json", "markdown",
+ and "table".
+ <li> The "column" output mode automatically expands columns to
+ contain the longest output row and automatically turns
+ ".header" on if it has not been previously set.
+ <li> The "quote" output mode honors ".separator"
+ <li> The <a href="floatingpoint.html#decext">decimal extension</a> and the <a href="floatingpoint.html#ieee754ext">ieee754 extension</a> are built-in to the CLI
+ </ol>
+<li> Query planner improvements:
+ <ol type="a">
+ <li> Add the ability to find a
+ full-index-scan query plan for queries using <a href="lang_indexedby.html">INDEXED BY</a>
+ which previously would fail with "no query solution".
+ <li> Do a better job of
+ detecting missing, incomplete, and/or dodgy <a href="fileformat2.html#stat1tab">sqlite_stat1</a>
+ data and generates good query plans in spite of the
+ misinformation.
+ <li> Improved performance of queries like "SELECT min(x) FROM t WHERE y IN (?,?,?)"
+ assuming an index on t(x,y).
+ </ol>
+<li> In <a href="wal.html">WAL mode</a>, if a writer crashes and leaves the <a href="walformat.html#shm">shm file</a> in an inconsistent
+ state, subsequent transactions are now able to recover the shm file even if
+ there are active read transactions. Before this enhancement, shm file recovery
+ that scenario would result in an <a href="rescode.html#protocol">SQLITE_PROTOCOL</a> error.
+<p><b>Hashes:</b>
+<li>SQLITE_SOURCE_ID: 2020-08-14 13:23:32 fca8dc8b578f215a969cd899336378966156154710873e68b3d9ac5881b0ff3f
+<li>SHA3-256 for sqlite3.c: d00b7fffa6d33af2303430eaf394321da2960604d25a4471c7af566344f2abf9
+
+</ol></p>
+<a name="version_3_32_3"></a>
+<h3>2020-06-18 (3.32.3)</h3><p><ol class='lessindent'>
+<li> Various minor bug fixes including fixes for tickets
+ <a href="https://www.sqlite.org/src/info/8f157e8010b22af0">8f157e8010b22af0</a>,
+ <a href="https://www.sqlite.org/src/info/9fb26d37cefaba40">9fb26d37cefaba40</a>,
+ <a href="https://www.sqlite.org/src/info/e367f31901ea8700">e367f31901ea8700</a>,
+ <a href="https://www.sqlite.org/src/info/b706351ce2ecf59a">b706351ce2ecf59a</a>,
+ <a href="https://www.sqlite.org/src/info/7c6d876f84e6e7e2">7c6d876f84e6e7e2</a>, and
+ <a href="https://www.sqlite.org/src/info/c8d3b9f0a750a529">c8d3b9f0a750a529</a>.
+<p><b>Hashes:</b>
+<li>SQLITE_SOURCE_ID: 2020-06-18 14:00:33 7ebdfa80be8e8e73324b8d66b3460222eb74c7e9dfd655b48d6ca7e1933cc8fd
+<li>SHA3-256 for sqlite3.c: b62b77ee1c561a69a71bb557694aaa5141f1714c1ff6cc1ba8aa8733c92d4f52
+
+</ol></p>
+<a name="version_3_32_2"></a>
+<h3>2020-06-04 (3.32.2)</h3><p><ol class='lessindent'>
+<li> Fix a long-standing bug in the byte-code engine that can cause a
+ <a href="lang_transaction.html">COMMIT</a> command report as success when in fact it failed
+ to commit. Ticket
+ <a href="https://www.sqlite.org/src/info/810dc8038872e212">810dc8038872e212</a>
+<p><b>Hashes:</b>
+<li>SQLITE_SOURCE_ID: 2020-06-04 12:58:43 ec02243ea6ce33b090870ae55ab8aa2534b54d216d45c4aa2fdbb00e86861e8c
+<li>SHA3-256 for sqlite3.c: f17a2a57f7eebc72d405f3b640b4a49bcd02364a9c36e04feeb145eccafa3f8d
+
+</ol></p>
+<a name="version_3_32_1"></a>
+<h3>2020-05-25 (3.32.1)</h3><p><ol class='lessindent'>
+<li> Fix two long-standing bugs that allow malicious SQL statements
+ to crash the process that is running SQLite. These bugs were announced
+ by a third-party approximately 24 hours after the 3.32.0 release but are
+ not specific to the 3.32.0 release.
+<li> Other minor compiler-warning fixes and whatnot.
+<p><b>Hashes:</b>
+<li>SQLITE_SOURCE_ID: 2020-05-25 16:19:56 0c1fcf4711a2e66c813aed38cf41cd3e2123ee8eb6db98118086764c4ba83350
+<li>SHA3-256 for sqlite3.c: f695ae21abf045e4ee77980a67ab2c6e03275009e593ee860a2eabf840482372
+
+</ol></p>
+<a name="version_3_32_0"></a>
+<h3>2020-05-22 (3.32.0)</h3><p><ol class='lessindent'>
+<li> Added support for <a href="lang_analyze.html#approx">approximate ANALYZE</a> using the
+ <a href="pragma.html#pragma_analysis_limit">PRAGMA analysis_limit</a> command.
+<li> Added the <a href="bytecodevtab.html">bytecode virtual table</a>.
+<li> Add the <a href="cksumvfs.html">checksum VFS shim</a> to the set of run-time loadable
+ extensions included in the source tree.
+<li> Added the <a href="lang_corefunc.html#iif">iif() SQL function</a>.
+<li> INSERT and UPDATE statements now always apply <a href="datatype3.html#affinity">column affinity</a>
+ before computing <a href="lang_createtable.html#ckconst">CHECK constraints</a>. This bug fix could, in
+ theory, cause problems for legacy databases with unorthodox
+ CHECK constraints the require the input type for an INSERT
+ is different from the declared column type. See ticket
+ <a href="https://sqlite.org/src/info/86ba67afafded936">86ba67afafded936</a>
+ for more information.
+<li> Added the <a href="c3ref/create_filename.html">sqlite3_create_filename()</a>, <a href="c3ref/create_filename.html">sqlite3_free_filename()</a>,
+ and <a href="c3ref/database_file_object.html">sqlite3_database_file_object()</a>
+ interfaces to better support of <a href="vfs.html#shim">VFS shim</a> implementations.
+<li> Increase the <a href="limits.html#max_variable_number">default upper bound</a>
+ on the number of <a href="lang_expr.html#varparam">parameters</a> from 999 to 32766.
+<li> Added code for the <a href="uintcseq.html">UINT collating sequence</a> as an optional
+ <a href="loadext.html">loadable extension</a>.
+<li> Enhancements to the <a href="cli.html">CLI</a>:
+ <ol type="a">
+ <li> Add options to the <a href="cli.html#csv">.import</a> command: --csv, --ascii, --skip
+ <li> The <a href="cli.html#dump">.dump</a> command now accepts multiple LIKE-pattern arguments
+ and outputs the union of all matching tables.
+ <li> Add the .oom command in debugging builds
+ <li> Add the --bom option to the <a href="cli.html#dotexcel">.excel</a>, <a href="cli.html#dotoutput">.output</a>, and <a href="cli.html#dotoutput">.once</a>
+ commands.
+ <li> Enhance the .filectrl command to support the --schema option.
+ <li> The <a href="uintcseq.html">UINT collating sequence</a> extension is automatically loaded
+ </ol>
+<li> The <a href="lang_expr.html#like">ESCAPE</a> clause of a <a href="lang_expr.html#like">LIKE</a> operator now overrides wildcard
+ characters, so that the behavior matches what PostgreSQL does.
+<li>SQLITE_SOURCE_ID: 2020-05-22 17:46:16 5998789c9c744bce92e4cff7636bba800a75574243d6977e1fc8281e360f8d5a
+<li>SHA3-256 for sqlite3.c: 33ed868b21b62ce1d0352ed88bdbd9880a42f29046497a222df6459fc32a356f
+
+</ol></p>
+<a name="version_3_31_1"></a>
+<h3>2020-01-27 (3.31.1)</h3><p><ol class='lessindent'>
+<li> Revert the data layout for an internal-use-only SQLite data structure.
+ Applications that use SQLite should never reference internal SQLite
+ data structures, but some do anyhow, and a change to one such
+ data structure in 3.30.0 broke a popular and widely-deployed
+ application. Reverting that change in SQLite, at least temporarily,
+ gives developers of misbehaving applications time to fix their code.
+<li> Fix a typos in the sqlite3ext.h header file that prevented the
+ <a href="c3ref/stmt_isexplain.html">sqlite3_stmt_isexplain()</a> and <a href="c3ref/value_blob.html">sqlite3_value_frombind()</a> interfaces
+ from being called from <a href="loadext.html">run-time loadable extensions</a>.
+<p><b>Hashes:</b>
+<li>SQLITE_SOURCE_ID: 2020-01-27 19:55:54 3bfa9cc97da10598521b342961df8f5f68c7388fa117345eeb516eaa837bb4d6
+<li>SHA3-256 for sqlite3.c: de465c64f09529429a38cbdf637acce4dfda6897f93e3db3594009e0fed56d27
+
+</ol></p>
+<a name="version_3_31_0"></a>
+<h3>2020-01-22 (3.31.0)</h3><p><ol class='lessindent'>
+<li>Add support for <a href="gencol.html">generated columns</a>.
+<li>Add the <a href="c3ref/hard_heap_limit64.html">sqlite3_hard_heap_limit64()</a> interface and the corresponding
+ <a href="pragma.html#pragma_hard_heap_limit">PRAGMA hard_heap_limit</a> command.
+<li>Enhance the <a href="pragma.html#pragma_function_list">function_list pragma</a> to show the number of arguments on each
+ function, the type of function (scalar, aggregate, window), and the function
+ property flags <a href="c3ref/c_deterministic.html#sqlitedeterministic">SQLITE_DETERMINISTIC</a>, <a href="c3ref/c_deterministic.html#sqlitedirectonly">SQLITE_DIRECTONLY</a>,
+ <a href="c3ref/c_deterministic.html#sqliteinnocuous">SQLITE_INNOCUOUS</a>, and/or <a href="c3ref/c_deterministic.html#sqlitesubtype">SQLITE_SUBTYPE</a>.
+<li>Add the <a href="dbstat.html#dbstatagg">aggregated mode</a> feature to the
+ <a href="dbstat.html">DBSTAT virtual table</a>.
+<li>Add the <a href="c3ref/open.html#opennofollow">SQLITE_OPEN_NOFOLLOW</a> option to <a href="c3ref/open.html">sqlite3_open_v2()</a> that
+ prevents SQLite from opening symbolic links.
+<li>Added the "#-N" array notation for <a href="json1.html#jsonpath">JSON function path arguments</a>.
+<li>Added the <a href="c3ref/c_dbconfig_defensive.html#sqlitedbconfigtrustedschema">SQLITE_DBCONFIG_TRUSTED_SCHEMA</a> connection setting which is
+ also controllable via the new <a href="pragma.html#pragma_trusted_schema">trusted_schema pragma</a> and at compile-time
+ using the <a href="compile.html#trusted_schema">-DSQLITE_TRUSTED_SCHEMA</a> compile-time option.
+<li>Added APIs <a href="c3ref/filename_database.html">sqlite3_filename_database()</a>, <a href="c3ref/filename_database.html">sqlite3_filename_journal()</a>, and
+ <a href="c3ref/filename_database.html">sqlite3_filename_wal()</a> which are useful for specialized extensions.
+<li>Add the <a href="c3ref/uri_boolean.html">sqlite3_uri_key()</a> interface.
+<li>Upgraded the <a href="c3ref/uri_boolean.html">sqlite3_uri_parameter()</a> function so that it works with the
+ rollback journal or WAL filename in addition to the database filename.
+<li>Provide the ability to tag <a href="appfunc.html">application-defined SQL functions</a> with
+ new properties <a href="c3ref/c_deterministic.html#sqliteinnocuous">SQLITE_INNOCUOUS</a> or <a href="c3ref/c_deterministic.html#sqlitedirectonly">SQLITE_DIRECTONLY</a>.
+<li>Add new verbs to <a href="c3ref/vtab_config.html">sqlite3_vtab_config()</a> so that the <a href="vtab.html#xconnect">xConnect</a> method
+ of virtual tables can declare the virtual table as
+ <a href="c3ref/c_vtab_constraint_support.html#sqlitevtabinnocuous">SQLITE_VTAB_INNOCUOUS</a> or <a href="c3ref/c_vtab_constraint_support.html#sqlitevtabdirectonly">SQLITE_VTAB_DIRECTONLY</a>.
+<li>Faster response to <a href="c3ref/interrupt.html">sqlite3_interrupt()</a>.
+<li>Added the <a href="https://sqlite.org/src/file/ext/misc/uuid.c">uuid.c</a> extension module
+ implementing functions for processing RFC-4122 UUIDs.
+<li>The <a href="malloc.html#lookaside">lookaside memory allocator</a> is enhanced to support two separate memory
+ pools with different sized allocations in each pool. This allows more memory
+ allocations to be covered by lookaside while at the same time reducing the
+ heap memory usage to 48KB per connection, down from 120KB.
+<li>The <a href="pragma.html#pragma_legacy_file_format">legacy_file_format pragma</a> is deactivated. It is now a no-op. In its place,
+ the <a href="c3ref/c_dbconfig_defensive.html#sqlitedbconfiglegacyfileformat">SQLITE_DBCONFIG_LEGACY_FILE_FORMAT</a> option to <a href="c3ref/db_config.html">sqlite3_db_config()</a> is
+ provided. The legacy_file_format pragma is deactivated because (1) it is
+ rarely useful and (2) it is incompatible with <a href="lang_vacuum.html">VACUUM</a> in schemas that have
+ tables with both generated columns and descending indexes.
+ Ticket <a href="https://www.sqlite.org/src/info/6484e6ce678fffab">6484e6ce678fffab</a>
+<p><b>Hashes:</b>
+<li>SQLITE_SOURCE_ID: 2020-01-22 18:38:59 f6affdd41608946fcfcea914ece149038a8b25a62bbe719ed2561c649b86d824
+<li>SHA3-256 for sqlite3.c: a5fca0b9f8cbf80ac89b97193378c719d4af4b7d647729d8df9c0c0fca7b1388
+
+</ol></p>
+<a name="version_3_30_1"></a>
+<h3>2019-10-10 (3.30.1)</h3><p><ol class='lessindent'>
+<li> Fix a bug in the <a href="optoverview.html#flattening">query flattener</a> that might cause a segfault
+for nested queries that use the new
+<a href="lang_aggfunc.html#aggfilter">FILTER clause on aggregate functions</a>.
+Ticket <a href="https://www.sqlite.org/src/info/1079ad19993d13fa">1079ad19993d13fa</a>
+<li> Cherrypick fixes for other obscure problems found since the 3.30.0
+ release
+<p><b>Hashes:</b>
+<li>SQLITE_SOURCE_ID: 2019-10-10 20:19:45 18db032d058f1436ce3dea84081f4ee5a0f2259ad97301d43c426bc7f3df1b0b
+<li>SHA3-256 for sqlite3.c: f96fafe4c110ed7d77fc70a7d690e5edd1e64fefb84b3b5969a722d885de1f2d
+
+</ol></p>
+<a name="version_3_30_0"></a>
+<h3>2019-10-04 (3.30.0)</h3><p><ol class='lessindent'>
+<li> Add support for the <a href="lang_aggfunc.html#aggfilter">FILTER clause on aggregate functions</a>.
+<li> Add support for the <a href="lang_select.html#nullslast">NULLS FIRST</a> and <a href="lang_select.html#nullslast">NULLS LAST</a> syntax in <a href="lang_select.html#orderby">ORDER BY</a> clauses.
+<li> The <a href="pragma.html#pragma_index_info">index_info</a> and <a href="pragma.html#pragma_index_xinfo">index_xinfo</a> pragmas are enhanced to provide
+ information about the on-disk representation of <a href="withoutrowid.html">WITHOUT ROWID</a>
+ tables.
+<li> Add the <a href="c3ref/drop_modules.html">sqlite3_drop_modules()</a> interface, allowing applications
+ to disable automatically loaded virtual tables that they do not
+ need.
+<li> Improvements to the <a href="cli.html#recover">.recover dot-command</a> in the <a href="cli.html">CLI</a> so that
+ it recovers more content from corrupt database files.
+<li> Enhance the <a href="rbu.html">RBU</a> extension to support <a href="expridx.html">indexes on expressions</a>.
+<li> Change the schema parser so that it will error out if any of
+ the type, name, and tbl_name columns of the <a href="schematab.html">sqlite_master table</a>
+ have been corrupted and the database connection is not in
+ <a href="pragma.html#pragma_writable_schema">writable_schema</a> mode.
+<li> The <a href="pragma.html#pragma_function_list">PRAGMA function_list</a>, <a href="pragma.html#pragma_module_list">PRAGMA module_list</a>, and
+ <a href="pragma.html#pragma_pragma_list">PRAGMA pragma_list</a> commands are now
+ enabled in all builds by default. Disable them using
+ <a href="compile.html#omit_introspection_pragmas">-DSQLITE_OMIT_INTROSPECTION_PRAGMAS</a>.
+<li> Add the <a href="c3ref/c_dbconfig_defensive.html#sqlitedbconfigenableview">SQLITE_DBCONFIG_ENABLE_VIEW</a> option for <a href="c3ref/db_config.html">sqlite3_db_config()</a>.
+<li> Added the <a href="tclsqlite.html">TCL Interface</a> <a href="tclsqlite.html#config">config method</a> in order to be able to
+ disable <a href="c3ref/c_dbconfig_defensive.html#sqlitedbconfigenableview">SQLITE_DBCONFIG_ENABLE_VIEW</a> as well as control other
+ <a href="c3ref/db_config.html">sqlite3_db_config()</a> options from TCL.
+<li> Added the <a href="c3ref/c_deterministic.html#sqlitedirectonly">SQLITE_DIRECTONLY</a> flag for
+ <a href="appfunc.html">application-defined SQL functions</a> to prevent those functions from
+ being used inside triggers and views.
+<li> The legacy <a href="compile.html#enable_stat3">SQLITE_ENABLE_STAT3</a> compile-time option is now a no-op.
+<p><b>Hashes:</b>
+<li>SQLITE_SOURCE_ID: 2019-10-04 15:03:17 c20a35336432025445f9f7e289d0cc3e4003fb17f45a4ce74c6269c407c6e09f
+<li>SHA3-256 for sqlite3.c: f04393dd47205a4ee2b98ff737dc51a3fdbcc14c055b88d58f5b27d0672158f5
+
+</ol></p>
+<a name="version_3_29_0"></a>
+<h3>2019-07-10 (3.29.0)</h3><p><ol class='lessindent'>
+<li> Added 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 <a href="c3ref/db_config.html">sqlite3_db_config()</a> for activating and deactivating
+ the <a href="quirks.html#dblquote">double-quoted string literal</a> misfeature. Both default to "on"
+ for legacy compatibility, but developers are encouraged to turn them
+ "off", perhaps using the <a href="compile.html#dqs">-DSQLITE_DQS=0</a> compile-time option.
+<li> <a href="compile.html#dqs">-DSQLITE_DQS=0</a> is now a <a href="compile.html#rcmd">recommended compile-time option</a>.
+<li> Improvements to the <a href="optoverview.html">query planner</a>:
+<ol type="a">
+ <li> Improved optimization of AND and OR operators when one or the other
+ operand is a constant.
+ <li> Enhancements to the <a href="optoverview.html#like_opt">LIKE optimization</a> for cases when the left-hand
+ side column has numeric affinity.
+ </ol>
+ <li> Added the "<a href="https://sqlite.org/src/file/ext/misc/dbdata.c">sqlite_dbdata</a>"
+ virtual table for extracting raw low-level content from an SQLite database,
+ even a database that is corrupt.
+ <li> Improvements to rounding behavior, so that the results of rounding
+ binary numbers using the <a href="lang_corefunc.html#round">round()</a> function are closer to what people
+ who are used to thinking in decimal actually expect.
+ <li> Enhancements to the <a href="cli.html">CLI</a>:
+<ol type="a">
+ <li> Add the ".recover" command which tries to recover as much content
+ as possible from a corrupt database file.
+ <li> Add the ".filectrl" command useful for testing.
+ <li> Add the long-standing ".testctrl" command to the ".help" menu.
+ <li> Added the ".dbconfig" command
+</ol>
+<p><b>Hashes:</b>
+<li>SQLITE_SOURCE_ID: 2019-07-10 17:32:03 fc82b73eaac8b36950e527f12c4b5dc1e147e6f4ad2217ae43ad82882a88bfa6
+<li>SHA3-256 for sqlite3.c: d9a5daf7697a827f4b2638276ce639fa04e8e8bb5fd3a6b683cfad10f1c81b12
+
+</ol></p>
+<a name="version_3_28_0"></a>
+<h3>2019-04-16 (3.28.0)</h3><p><ol class='lessindent'>
+<li> Enhanced <a href="windowfunctions.html">window functions</a>:
+<ol type="a">
+ <li> Add support the <a href="windowfunctions.html#wexcls">EXCLUDE clause</a>.
+ <li> Add support for <a href="windowfunctions.html#wchaining">window chaining</a>.
+ <li> Add support for <a href="windowfunctions.html#grouptype">GROUPS frames</a>.
+ <li> Add support for "<a href="windowfunctions.html#exprrange">&lt;expr&gt; PRECEDING</a>" and
+ "<a href="windowfunctions.html#exprrange">&lt;expr&gt; FOLLOWING</a>" boundaries
+ in RANGE <a href="windowfunctions.html#framespec">frames</a>.
+</ol>
+<li> Added the new <a href="c3ref/stmt_isexplain.html">sqlite3_stmt_isexplain(S)</a> interface for determining
+ whether or not a <a href="c3ref/stmt.html">prepared statement</a> is an <a href="lang_explain.html">EXPLAIN</a>.
+<li> Enhanced <a href="lang_vacuum.html#vacuuminto">VACUUM INTO</a> so that it works for read-only databases.
+<li> New query optimizations:
+<ol type="a">
+ <li> Enable the <a href="optoverview.html#like_opt">LIKE optimization</a> for cases when the ESCAPE keyword
+ is present and <a href="pragma.html#pragma_case_sensitive_like">PRAGMA case_sensitive_like</a> is on.
+ <li> In queries that are driven by a <a href="partialindex.html">partial index</a>, avoid unnecessary
+ tests of the constraint named in the WHERE clause of the partial
+ index, since we know that constraint must always be true.
+</ol>
+<li> Enhancements to the <a href="tclsqlite.html">TCL Interface</a>:
+<ol type="a">
+ <li> Added the -returntype option to the <a href="tclsqlite.html#function">function method</a>.
+ <li> Added the new <a href="tclsqlite.html#bind_fallback">bind_fallback method</a>.
+</ol>
+<li> Enhancements to the <a href="cli.html">CLI</a>:
+<ol type="a">
+ <li> Added support for <a href="lang_expr.html#varparam">bound parameters</a> and the <a href="cli.html#param">.parameter command</a>.
+ <li> Fix the <a href="cli.html#fileio">readfile()</a> function so that it returns
+ an empty BLOB rather than throwing an out-of-memory error when
+ reading an empty file.
+ <li> Fix the <a href="cli.html#fileio">writefile()</a> function so that when it
+ creates new directories along the path of a new file, it gives them
+ umask permissions rather than the same permissions as the file.
+ <li> Change <a href="cli.html#arinsup">--update option</a> in the <a href="cli.html#sqlar">.archive command</a> so that it skips
+ files that are already in the archive and are unchanged. Add the
+ new --insert option that works like --update used to work.
+</ol>
+<li> Added the <a href="https://sqlite.org/src/file/ext/misc/fossildelta.c">fossildelta.c</a>
+ extension that can create, apply, and deconstruct the
+ <a href="https://fossil-scm.org/fossil/doc/trunk/www/delta_format.wiki">Fossil DVCS file delta format</a>
+ that is used by the <a href="rbu.html">RBU extension</a>.
+<li> Added the <a href="c3ref/c_dbconfig_defensive.html#sqlitedbconfigwritableschema">SQLITE_DBCONFIG_WRITABLE_SCHEMA</a> verb for the <a href="c3ref/db_config.html">sqlite3_db_config()</a>
+ interface, that does the same work as <a href="pragma.html#pragma_writable_schema">PRAGMA writable_schema</a> without using the
+ SQL parser.
+<li> Added the <a href="c3ref/value_blob.html">sqlite3_value_frombind()</a> API for determining if the argument
+ to an SQL function is from a <a href="lang_expr.html#varparam">bound parameter</a>.
+<li> Security and compatibilities enhancements to <a href="fts3.html#f3tknzr">fts3_tokenizer()</a>:
+<ol type="a">
+ <li> The <a href="fts3.html#f3tknzr">fts3_tokenizer()</a> function always returns NULL
+ unless either the legacy application-defined FTS3 tokenizers interface
+ are enabled using
+ the <a href="c3ref/db_config.html">sqlite3_db_config</a>(<a href="c3ref/c_dbconfig_defensive.html#sqlitedbconfigenablefts3tokenizer">SQLITE_DBCONFIG_ENABLE_FTS3_TOKENIZER</a>)
+ setting, or unless the first argument to fts3_tokenizer() is a <a href="lang_expr.html#varparam">bound parameter</a>.
+ <li> The two-argument version of <a href="fts3.html#f3tknzr">fts3_tokenizer()</a> accepts a pointer to the
+ tokenizer method object even without
+ the <a href="c3ref/db_config.html">sqlite3_db_config</a>(<a href="c3ref/c_dbconfig_defensive.html#sqlitedbconfigenablefts3tokenizer">SQLITE_DBCONFIG_ENABLE_FTS3_TOKENIZER</a>) setting
+ if the second argument is a <a href="lang_expr.html#varparam">bound parameter</a>
+</ol>
+<li> Improved robustness against corrupt database files.
+<li> Miscellaneous performance enhancements
+<li> Established a Git mirror of the offical SQLite source tree.
+ The canonical sources for SQLite are maintained using the
+ <a href="https://fossil-scm.org/">Fossil DVCS</a> at <a href="https://sqlite.org/src">https://sqlite.org/src</a>.
+ The Git mirror can be seen at <a href="https://github.com/sqlite/sqlite">https://github.com/sqlite/sqlite</a>.
+<p><b>Hashes:</b>
+<li>SQLITE_SOURCE_ID: 2019-04-16 19:49:53 884b4b7e502b4e991677b53971277adfaf0a04a284f8e483e2553d0f83156b50
+<li>SHA3-256 for sqlite3.c: 411efca996b65448d9798eb203d6ebe9627b7161a646f5d00911e2902a57b2e9
+
+</ol></p>
+<a name="version_3_27_2"></a>
+<h3>2019-02-25 (3.27.2)</h3><p><ol class='lessindent'>
+<li> Fix a bug in the IN operator that was introduced by an
+ attempted optimization in version 3.27.0. Ticket
+ <a href="https://www.sqlite.org/src/info/df46dfb631f75694">df46dfb631f75694</a>
+<li> Fix a bug causing a crash when a <a href="windowfunctions.html">window function</a> is misused. Ticket
+ <a href="https://www.sqlite.org/src/info/4feb3159c6bc3f7e33959">4feb3159c6bc3f7e33959</a>.
+<li> Fix various documentation typos
+<p><b>Hashes:</b>
+<li>SQLITE_SOURCE_ID: bd49a8271d650fa89e446b42e513b595a717b9212c91dd384aab871fc1d0f6d7
+<li>SHA3-256 for sqlite3.c: 1dbae33bff261f979d0042338f72c9e734b11a80720fb32498bae9150cc576e7
+
+</ol></p>
+<a name="version_3_27_1"></a>
+<h3>2019-02-08 (3.27.1)</h3><p><ol class='lessindent'>
+<li> Fix a bug in the query optimizer: an adverse interaction between
+the <a href="optoverview.html#or_opt">OR optimization</a> and the optimization that tries to use values
+read directly from an <a href="expridx.html">expression index</a> instead of recomputing the
+expression.
+Ticket <a href="https://www.sqlite.org/src/info/4e8e4857d32d401f">4e8e4857d32d401f</a>
+<p><b>Hashes:</b>
+<li>SQLITE_SOURCE_ID: 2019-02-08 13:17:39 0eca3dd3d38b31c92b49ca2d311128b74584714d9e7de895b1a6286ef959a1dd
+<li>SHA3-256 for sqlite3.c: 11c14992660d5ac713ea8bea48dc5e6123f26bc8d3075fe5585d1a217d090233
+
+</ol></p>
+<a name="version_3_27_0"></a>
+<h3>2019-02-07 (3.27.0)</h3><p><ol class='lessindent'>
+<li>Added the <a href="lang_vacuum.html#vacuuminto">VACUUM INTO</a> command
+<li>Issue an SQLITE_WARNING message on the <a href="errlog.html">error log</a> if a
+<a href="quirks.html#dblquote">double-quoted string literal</a> is used.
+<li>The <a href="c3ref/expanded_sql.html">sqlite3_normalized_sql()</a> interface works on any prepared statement
+created using <a href="c3ref/prepare.html">sqlite3_prepare_v2()</a> or <a href="c3ref/prepare.html">sqlite3_prepare_v3()</a>. It is no
+longer necessary to use <a href="c3ref/prepare.html">sqlite3_prepare_v3()</a> with <a href="c3ref/c_prepare_normalize.html#sqlitepreparenormalize">SQLITE_PREPARE_NORMALIZE</a>
+in order to use <a href="c3ref/expanded_sql.html">sqlite3_normalized_sql()</a>.
+<li>Added the remove_diacritics=2 option to <a href="fts3.html">FTS3</a> and <a href="fts5.html">FTS5</a>.
+<li>Added the <a href="c3ref/c_prepare_normalize.html#sqlitepreparenovtab">SQLITE_PREPARE_NO_VTAB</a> option to <a href="c3ref/prepare.html">sqlite3_prepare_v3()</a>.
+Use that option to prevent circular references to <a href="vtab.html#xshadowname">shadow tables</a> from
+causing resource leaks.
+<li>Enhancements to the <a href="c3ref/deserialize.html">sqlite3_deserialize()</a> interface:
+<ol type="a">
+ <li> Add the <a href="c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlsizelimit">SQLITE_FCNTL_SIZE_LIMIT</a> <a href="c3ref/file_control.html">file-control</a> for
+ setting an upper bound on the size of the in-memory database created
+ by sqlite3_deserialize. The default upper bound is 1GiB, or whatever
+ alternative value is specified by
+ <a href="c3ref/config.html">sqlite3_config</a>(<a href="c3ref/c_config_covering_index_scan.html#sqliteconfigmemdbmaxsize">SQLITE_CONFIG_MEMDB_MAXSIZE</a>)
+ and/or <a href="compile.html#memdb_default_maxsize">SQLITE_MEMDB_DEFAULT_MAXSIZE</a>.
+ <li> Honor the <a href="c3ref/c_deserialize_freeonclose.html">SQLITE_DESERIALIZE_READONLY</a> flag, which was previously described
+ in the documentation, but was previously a no-op.
+ <li> Enhance the "deserialize" command of the <a href="tclsqlite.html">TCL Interface</a> to give it
+ new "--maxsize N" and "--readonly BOOLEAN" options.
+</ol>
+<li>Enhancements to the <a href="cli.html">CLI</a>, mostly to support testing and debugging
+of the SQLite library itself:
+<ol type="a">
+ <li> Add support for ".open --hexdb". The
+ "<a href="https://sqlite.org/src/doc/trunk/tool/dbtotxt.md">dbtotxt</a>" utility
+ program used to generate the text for the "hexdb" is added to the
+ source tree.
+ <li> Add support for the "--maxsize N" option on ".open --deserialize".
+ <li> Add the "--memtrace" command-line option, to show all memory allocations
+ and deallocations.
+ <li> Add the ".eqp trace" option on builds with SQLITE_DEBUG, to enable
+ bytecode program listing with indentation and
+ <a href="pragma.html#pragma_vdbe_trace">PRAGMA vdbe_trace</a> all in one step.
+ <li> Add the ".progress" command for accessing
+ the <a href="c3ref/progress_handler.html">sqlite3_progress_handler()</a> interface.
+ <li> Add the "--async" option to the ".backup" command.
+ <li> Add options "--expanded", "--normalized", "--plain", "--profile", "--row",
+ "--stmt", and "--close" to the ".trace" command.
+</ol>
+<li> Increased robustness against malicious SQL that is run against a
+ maliciously corrupted database.
+ <p><b>Bug fixes:</b>
+<li>Do not use a partial index to do a table scan on an IN operator.
+Ticket <a href="https://www.sqlite.org/src/info/1d958d90596593a774">1d958d90596593a774</a>.
+<li>Fix the <a href="optoverview.html#flattening">query flattener</a> so that it works on queries that contain
+subqueries that use <a href="windowfunctions.html">window functions</a>.
+Ticket <a href="https://www.sqlite.org/src/info/f09fcd17810f65f717">709fcd17810f65f717</a>
+<li>Ensure that ALTER TABLE modifies table and column names embedded in WITH
+clauses that are part of views and triggers.
+<li>Fix a parser bug that prevented the use of parentheses around table-valued
+functions.
+<li>Fix a problem with the <a href="optoverview.html#or_opt">OR optimization</a> on <a href="expridx.html">indexes on expressions</a>.
+Ticket <a href="https://www.sqlite.org/src/info/d96eba87698a428c1d">d96eba87698a428c1d</a>.
+<li>Fix a problem with the
+<a href="optoverview.html#leftjoinreduction">LEFT JOIN strength reduction optimization</a> in which the optimization
+was being applied inappropriately due to an IS NOT NULL operator.
+Ticket <a href="https://www.sqlite.org/src/info/5948e09b8c415bc45d">5948e09b8c415bc45d</a>.
+<li>Fix the <a href="lang_replace.html">REPLACE</a> command so that it is no longer able to sneak a
+NULL value into a NOT NULL column even if the NOT NULL column has a default
+value of NULL.
+Ticket <a href="https://www.sqlite.org/src/info/e6f1f2e34dceeb1ed6">e6f1f2e34dceeb1ed6</a>
+<li>Fix a problem with the use of <a href="windowfunctions.html">window functions</a> used within
+<a href="lang_expr.html#cosub">correlated subqueries</a>.
+Ticket <a href="https://www.sqlite.org/src/info/d0866b26f83e9c55e3">d0866b26f83e9c55e3</a>
+<li>Fix the <a href="lang_altertable.html#altertabmvcol">ALTER TABLE RENAME COLUMN</a> command so that it works for tables
+that have redundant UNIQUE constraints.
+Ticket <a href="https://www.sqlite.org/src/info/bc8d94f0fbd633fd9a">bc8d94f0fbd633fd9a</a>
+<li>Fix a bug that caused <a href="lang_corefunc.html#zeroblob">zeroblob</a> values to be truncated when inserted into
+a table that uses an <a href="expridx.html">expression index</a>.
+Ticket <a href="https://www.sqlite.org/src/info/bb4bdb9f7f654b0bb9">bb4bdb9f7f654b0bb9</a>
+<p><b>Hashes:</b>
+<li>SQLITE_SOURCE_ID: "2019-02-07 17:02:52 97744701c3bd414e6c9d7182639d8c2ce7cf124c4fce625071ae65658ac61713
+"
+<li>SHA3-256 for sqlite3.c: ca011a10ee8515b33e5643444b98ee3d74dc45d3ac766c3700320def52bc6aba
+
+</ol></p>
+<a name="version_3_26_0"></a>
+<h3>2018-12-01 (3.26.0)</h3><p><ol class='lessindent'>
+<li>Optimization: When doing an <a href="lang_update.html">UPDATE</a> on a table with <a href="expridx.html">indexes on expressions</a>,
+ do not update the expression indexes if they do not refer to any of the columns
+ of the table being updated.
+<li>Allow the <a href="vtab.html#xbestindex">xBestIndex()</a> method of <a href="vtab.html">virtual table</a> implementations to return
+ <a href="rescode.html#constraint">SQLITE_CONSTRAINT</a> to indicate that the proposed query plan is unusable and
+ should not be given further consideration.
+<li>Added the <a href="c3ref/c_dbconfig_defensive.html#sqlitedbconfigdefensive">SQLITE_DBCONFIG_DEFENSIVE</a> option which disables the ability to
+ create corrupt database files using ordinary SQL.
+<li>Added support for read-only <a href="vtab.html#xshadowname">shadow tables</a> when the <a href="c3ref/c_dbconfig_defensive.html#sqlitedbconfigdefensive">SQLITE_DBCONFIG_DEFENSIVE</a>
+ option is enabled.
+<li>Added the <a href="pragma.html#pragma_legacy_alter_table">PRAGMA legacy_alter_table</a> command, which if enabled causes the
+ <a href="lang_altertable.html">ALTER TABLE</a> command to behave like older version of SQLite (prior to
+ version 3.25.0) for compatibility.
+<li>Added <a href="pragma.html#pragma_table_xinfo">PRAGMA table_xinfo</a> that works just like <a href="pragma.html#pragma_table_info">PRAGMA table_info</a>
+ except that it also shows <a href="vtab.html#hiddencol">hidden columns</a> in virtual tables.
+<li>Added the <a href="https://sqlite.org/src/file/ext/misc/explain.c">explain virtual table</a>
+ as a run-time loadable extension.
+<li>Add a limit counter to the query planner to prevent excessive
+ <a href="c3ref/prepare.html">sqlite3_prepare()</a> times for certain pathological SQL inputs.
+<li>Added support for the <a href="c3ref/expanded_sql.html">sqlite3_normalized_sql()</a> interface, when compiling
+ with SQLITE_ENABLE_NORMALIZE.
+<li>Enhanced triggers so that they can use <a href="vtab.html#tabfunc2">table-valued functions</a> that
+ exist in schemas other than the schema where the trigger is defined.
+<li>Enhancements to the <a href="cli.html">CLI</a>:
+<ol type="a">
+ <li>Improvements to the ".help" command.
+ <li>The SQLITE_HISTORY environment variable, if it exists,
+ specifies the name of the command-line editing history file
+ <li>The --deserialize option associated with opening a new database cause the
+ database file to be read into memory and accessed using the
+ <a href="c3ref/deserialize.html">sqlite3_deserialize()</a> API. This simplifies running tests on a database
+ without modifying the file on disk.
+</ol>
+<li>Enhancements to the <a href="geopoly.html">geopoly</a> extension:
+<ol type="a">
+ <li>Always stores polygons
+ using the binary format, which is faster and uses less space.
+ <li>Added the <a href="geopoly.html#regpoly">geopoly_regular()</a> function.
+ <li>Added the <a href="geopoly.html#ccw">geopoly_ccw()</a> function.
+</ol>
+<li>Enhancements to the <a href="sessionintro.html">session</a> extension:
+<ol type="a">
+ <li>Added the <a href="session/c_changesetapply_invert.html">SQLITE_CHANGESETAPPLY_INVERT</a> flag
+ <li>Added the <a href="session/sqlite3changeset_start.html">sqlite3changeset_start_v2()</a> interface and the
+ <a href="session/c_changesetstart_invert.html">SQLITE_CHANGESETSTART_INVERT</a> flag.
+ <li>Added the
+ <a href="https://sqlite.org/src/file/ext/session/changesetfuzz.c">changesetfuzz.c</a>
+ test-case generator utility.
+</ol>
+<p><b>Hashes:</b>
+<li>SQLITE_SOURCE_ID: "2018-12-01 12:34:55 bf8c1b2b7a5960c282e543b9c293686dccff272512d08865f4600fb58238b4f9"
+<li>SHA3-256 for sqlite3.c: 72c08830da9b5d1cb397c612c0e870d7f5eb41a323b41aa3d8aa5ae9ccedb2c4
+
+</ol></p>
+<a name="version_3_25_3"></a>
+<h3>2018-11-05 (3.25.3)</h3><p><ol class='lessindent'>
+<li> Disallow the use of <a href="windowfunctions.html">window functions</a> in the recursive part of
+ a CTE. Ticket <a href="https://sqlite.org/src/info/e8275b415a2f03bee">e8275b415a2f03bee</a>
+<li> Fix the behavior of typeof() and length() on virtual tables. Ticket
+ <a href="https://sqlite.org/src/info/69d642332d25aa3b7315a6d385">69d642332d25aa3b7315a6d385</a>
+<li> Strengthen defenses against deliberately corrupted database files.
+<li> Fix a problem in the query planner that results when a row-value expression
+ is used with a PRIMARY KEY with redundant columns. Ticket
+ <a href="https://sqlite.org/src/info/1a84668dcfdebaf12415d">1a84668dcfdebaf12415d</a>
+<li> Fix the query planner so that it works correctly for IS NOT NULL operators
+ in the ON clause of a LEFT JOIN with the SQLITE_ENABLE_STAT4 compile-time option.
+ <a href="https://sqlite.org/src/info/65eb38f6e46de8c75e188a17ec">65eb38f6e46de8c75e188a17ec</a>
+<p><b>Hashes:</b>
+<li>SQLITE_SOURCE_ID: "2018-11-05 20:37:38 89e099fbe5e13c33e683bef07361231ca525b88f7907be7092058007b75036f2"
+<li>SHA3-256 for sqlite3.c: 45586e4df74de3a43f3a1f8c7a78c3c3f02edce01af7d10cafe68bb94476a5c5
+
+</ol></p>
+<a name="version_3_25_2"></a>
+<h3>2018-09-25 (3.25.2)</h3><p><ol class='lessindent'>
+<li> Add the <a href="pragma.html#pragma_legacy_alter_table">PRAGMA legacy_alter_table=ON</a> command that causes the
+ "ALTER TABLE RENAME" command to behave as it did in SQLite versions 3.24.0
+ and earlier: references to the renamed table inside the bodies of triggers
+ and views are not updated. This new pragma provides a compatibility
+ work around for older programs that expected the older, wonky behavior
+ of ALTER TABLE RENAME.
+<li> Fix a problem with the new <a href="windowfunctions.html">window functions</a> implementation that caused
+ a malfunction when complicated expressions involving window functions were used
+ inside of a view.
+<li> Fixes for various other compiler warnings and minor problems associated
+ with obscure configurations.
+<p><b>Hashes:</b>
+<li>SQLITE_SOURCE_ID: "2018-09-25 19:08:10 fb90e7189ae6d62e77ba3a308ca5d683f90bbe633cf681865365b8e92792d1c7"
+<li>SHA3-256 for sqlite3.c: 34c23ff91631ae10354f8c9d62fd7d65732b3d7f3acfd0bbae31ff4a62fe28af
+
+</ol></p>
+<a name="version_3_25_1"></a>
+<h3>2018-09-18 (3.25.1)</h3><p><ol class='lessindent'>
+<li> Extra sanity checking added to ALTER TABLE in the 3.25.0 release
+ sometimes raises a false-positive
+ when the table being modified has a trigger that
+ updates a virtual table. The false-positive caused the ALTER
+ TABLE to rollback, thus leaving the schema unchanged.
+ Ticket <a href="https://sqlite.org/src/info/b41031ea2b537237">b41031ea2b537237</a>.
+<li> The fix in the 3.25.0 release for the endless-loop in the byte-code
+ associated with the ORDER BY LIMIT optimization did not work for
+ some queries involving window functions. An additional correction
+ is required. Ticket
+ <a href="https://sqlite.org/src/info/510cde277783b5fb">510cde277783b5fb</a>
+<p><b>Hashes:</b>
+<li>SQLITE_SOURCE_ID: "2018-09-18 20:20:44 2ac9003de44da7dafa3fbb1915ac5725a9275c86bf2f3b7aa19321bf1460b386"
+<li>SHA3-256 for sqlite3.c: 1b2302e7a54cc99c84ff699a299f61f069a28e1ed090b89e4430ca80ae2aab06
+
+</ol></p>
+<a name="version_3_25_0"></a>
+<h3>2018-09-15 (3.25.0)</h3><p><ol class='lessindent'>
+<li> Add support for <a href="windowfunctions.html">window functions</a>
+<li> Enhancements the <a href="lang_altertable.html">ALTER TABLE</a> command:
+<ol type="a">
+ <li> Add support for renaming columns within a table using
+ ALTER TABLE <i>table</i> RENAME COLUMN <i>oldname</i> TO <i>newname</i>.
+ <li> Fix table rename feature so that it also updates references
+ to the renamed table in <a href="lang_createtrigger.html">triggers</a> and <a href="lang_createview.html">views</a>.
+</ol>
+<li> Query optimizer improvements:
+<ol type="a">
+ <li> Avoid unnecessary loads of columns in an aggregate query that
+ are not within an aggregate function and that are not part
+ of the GROUP BY clause.
+ <li> The IN-early-out optimization: When doing a look-up on a
+ multi-column index and an IN operator is used on a column
+ other than the left-most column, then if no rows match against
+ the first IN value, check to make sure there exist rows that
+ match the columns to the right before continuing with the
+ next IN value.
+ <li> Use the transitive property to try to propagate constant
+ values within the WHERE clause. For example, convert
+ "a=99 AND b=a" into "a=99 AND b=99".
+</ol>
+<li> Use a separate mutex on every inode in the unix <a href="vfs.html">VFS</a>, rather than
+ a single mutex shared among them all, for slightly better concurrency
+ in multi-threaded environments.
+<li> Enhance the <a href="pragma.html#pragma_integrity_check">PRAGMA integrity_check</a> command for improved detection
+ of problems on the page freelist.
+<li> Output infinity as 1e999 in the ".dump" command of the
+ <a href="cli.html">command-line shell</a>.
+<li> Added the <a href="c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntldataversion">SQLITE_FCNTL_DATA_VERSION</a> file-control.
+<li> Added the <a href="geopoly.html">Geopoly module</a>
+<p><b>Bug fixes:</b>
+<li> The ORDER BY LIMIT optimization might have caused an infinite loop
+ in the byte code of the prepared statement under very obscure
+ circumstances,
+ due to a confluence of minor defects in the query optimizer.
+ Fix for ticket
+ <a href="https://www.sqlite.org/src/info/9936b2fa443fec03ff25">9936b2fa443fec03ff25</a>
+<li> On an UPSERT when the order of constraint checks is rearranged,
+ ensure that the affinity transformations on the inserted content
+ occur before any of the constraint checks. Fix for ticket
+ <a href="https://www.sqlite.org/src/info/79cad5e4b2e219dd197242e9e">79cad5e4b2e219dd197242e9e</a>.
+<li> Avoid using a prepared statement for ".stats on" command of the
+ <a href="cli.html">CLI</a> after it has been closed by the ".eqp full" logicc. Fix for ticket
+ <a href="https://www.sqlite.org/src/info/7be932dfa60a8a6b3b26bcf76">7be932dfa60a8a6b3b26bcf76</a>.
+<li> The LIKE optimization was generating incorrect byte-code and hence
+ getting the wrong answer
+ if the left-hand operand has numeric affinity and the right-hand-side
+ pattern is '/%' or if the pattern begins with the ESCAPE character.
+ Fix for ticket
+ <a href="https://www.sqlite.org/src/info/c94369cae9b561b1f996d0054b">c94369cae9b561b1f996d0054b</a>
+<p><b>Hashes:</b>
+<li>SQLITE_SOURCE_ID: "2018-09-15 04:01:47 b63af6c3bd33152742648d5d2e8dc5d5fcbcdd27df409272b6aea00a6f761760"
+<li>SHA3-256 for sqlite3.c: 989e3ff37f2b5eea8e42205f808ccf0ba86c6ea6aa928ad2c011f33a108ac45d
+
+</ol></p>
+<a name="version_3_24_0"></a>
+<h3>2018-06-04 (3.24.0)</h3><p><ol class='lessindent'>
+<li> Add support for PostgreSQL-style <a href="lang_upsert.html">UPSERT</a>.
+<li> Add support for <a href="rtree.html#auxcol">auxiliary columns in r-tree tables</a>.
+<li> Add C-language APIs for discovering SQL keywords used by
+ SQLite: <a href="c3ref/keyword_check.html">sqlite3_keyword_count()</a>, <a href="c3ref/keyword_check.html">sqlite3_keyword_name()</a>, and
+ <a href="c3ref/keyword_check.html">sqlite3_keyword_check()</a>.
+<li> Add C-language APIs for dynamic strings based on the
+ <a href="c3ref/str.html">sqlite3_str</a> object.
+<li> Enhance <a href="lang_altertable.html">ALTER TABLE</a> so that it recognizes "true" and "false" as
+ valid arguments to DEFAULT.
+<li> Add the sorter-reference optimization as a compile-time option.
+ Only available if compiled with SQLITE_ENABLE_SORTER_REFERENCES.
+<li> Improve the format of the <a href="eqp.html">EXPLAIN QUERY PLAN</a> raw output, so that
+ it gives better information about the query plan and about the
+ relationships between the various components of the plan.
+<li> Added the <a href="c3ref/c_dbconfig_defensive.html#sqlitedbconfigresetdatabase">SQLITE_DBCONFIG_RESET_DATABASE</a> option to the
+ <a href="c3ref/db_config.html">sqlite3_db_config()</a> API.
+<p><b><a href="cli.html">CLI</a> Enhancements:</b>
+<li> Automatically intercepts the raw <a href="eqp.html">EXPLAIN QUERY PLAN</a>
+ output and reformats it into an ASCII-art graph.
+<li> Lines that begin with "#" and that are not in the middle of an
+ SQL statement are interpreted as comments.
+<li> Added the --append option to the ".backup" command.
+<li> Added the ".dbconfig" command.
+<p><b>Performance:</b>
+<li> <a href="lang_update.html">UPDATE</a> avoids unnecessary low-level disk writes when the contents
+ of the database file do not actually change.
+ For example, "UPDATE t1 SET x=25 WHERE y=?" generates no extra
+ disk I/O if the value in column x is already 25. Similarly,
+ when doing <a href="lang_update.html">UPDATE</a> on records that span multiple pages, only
+ the subset of pages that actually change are written to disk.
+ This is a low-level performance optimization only and does not
+ affect the behavior of TRIGGERs or other higher level SQL
+ structures.
+<li> Queries that use ORDER BY and LIMIT now try to avoid computing
+ rows that cannot possibly come in under the LIMIT. This can greatly
+ improve performance of ORDER BY LIMIT queries, especially when the
+ LIMIT is small relative to the number of unrestricted output rows.
+<li> The <a href="optoverview.html#or_opt">OR optimization</a> is allowed to proceed
+ even if the OR expression has also been converted into an IN
+ expression. Uses of the OR optimization are now also
+ <a href="eqp.html#or-opt">more clearly shown</a> in the <a href="eqp.html">EXPLAIN QUERY PLAN</a> output.
+<li> The query planner is more aggressive about using
+ <a href="optoverview.html#autoindex">automatic indexes</a> for views and subqueries for which it is
+ not possible to create a persistent index.
+<li> Make use of the one-pass UPDATE and DELETE query plans in the
+ <a href="rtree.html">R-Tree extension</a> where appropriate.
+<li> Performance improvements in the LEMON-generated parser.
+<p><b>Bug fixes:</b>
+<li> For the right-hand table of a LEFT JOIN, compute the values
+ of expressions directly rather than loading precomputed values
+ out of an <a href="expridx.html">expression index</a> as the expression index might
+ not contain the correct value. Ticket
+ <a href="https://sqlite.org/src/info/7fa8049685b50b5aeb0c2">7fa8049685b50b5aeb0c2</a>
+<li> Do not attempt to use terms from the WHERE clause to enable
+ indexed lookup of the right-hand table of a LEFT JOIN. Ticket
+ <a href="https://sqlite.org/src/info/4ba5abf65c5b0f9a96a7a">4ba5abf65c5b0f9a96a7a</a>
+<li> Fix a memory leak that can occur following a failure to open error
+ in the <a href="csv.html">CSV virtual table</a>
+<li> Fix a long-standing problem wherein a corrupt schema on the
+ <a href="fileformat2.html#seqtab">sqlite_sequence</a> table used by <a href="autoinc.html">AUTOINCREMENT</a> can lead to
+ a crash. Ticket
+ <a href="https://www.sqlite.org/src/info/d8dc2b3a58cd5dc29">d8dc2b3a58cd5dc2918a1</a>
+<li> Fix the <a href="json1.html#jeach">json_each()</a> function so that it returns
+ valid results on its "fullkey" column when the input is a simple value
+ rather than an array or object.
+<p><b>Hashes:</b>
+<li>SQLITE_SOURCE_ID: "2018-06-04 19:24:41 c7ee0833225bfd8c5ec2f9bf62b97c4e04d03bd9566366d5221ac8fb199a87ca"
+<li>SHA3-256 for sqlite3.c: 0d384704e1c66026228336d1e91771d295bf688c9c44c7a44f25a4c16c26ab3c
+
+</ol></p>
+<a name="version_3_23_1"></a>
+<h3>2018-04-10 (3.23.1)</h3><p><ol class='lessindent'>
+<li> 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>
+<a name="version_3_23_0"></a>
+<h3>2018-04-02 (3.23.0)</h3><p><ol class='lessindent'>
+<li> 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>
+<p><b>Hashes:</b>
+<li>SQLITE_SOURCE_ID: "2018-04-02 11:04:16 736b53f57f70b23172c30880186dce7ad9baa3b74e3838cae5847cffb98f5cd2"
+<li>SHA3-256 for sqlite3.c: 4bed3dc2dc905ff55e2c21fd2725551fc0ca50912a9c96c6af712a4289cb24fa
+
+</ol></p>
+<a name="version_3_22_0"></a>
+<h3>2018-01-22 (3.22.0)</h3><p><ol class='lessindent'>
+<li> The output of <a href="c3ref/trace_v2.html">sqlite3_trace_v2()</a> now shows each individual SQL statement
+ run within a trigger.
+<li> Add the ability to read from <a href="wal.html">WAL mode</a> databases even if the application
+ lacks write permission on the database and its containing directory, as long as
+ the -shm and -wal files exist in that directory.
+<li> Added the <a href="rtree.html#rtreecheck">rtreecheck()</a> scalar SQL function to the <a href="rtree.html">R-Tree extension</a>.
+<li> Added the <a href="c3ref/vtab_nochange.html">sqlite3_vtab_nochange()</a> and <a href="c3ref/value_blob.html">sqlite3_value_nochange()</a> interfaces
+ to help virtual table implementations optimize UPDATE operations.
+<li> Added the <a href="c3ref/vtab_collation.html">sqlite3_vtab_collation()</a> interface.
+<li> Added support for the <a href="fts5.html#carrotq">"&#94;" initial token syntax</a> in FTS5.
+<li> New extensions:
+<ol type='a'>
+ <li> The <a href="zipfile.html">Zipfile virtual table</a> can read and write a
+ <a href="https://en.wikipedia.org/wiki/Zip_(file_format)">ZIP Archive</a>.
+ <li> Added 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,
+ for listing the files in a directory.
+ <li> The <a href="https://sqlite.org/src/file/ext/misc/btreeinfo.c">sqlite_btreeinfo</a>
+ eponymous virtual table for introspecting and estimating the sizes of
+ the btrees in a database.
+ <li> The <a href="https://sqlite.org/src/file/ext/misc/appendvfs.c">Append VFS</a> is a
+ <a href="vfs.html#shim">VFS shim</a> that allows an SQLite database to be appended to some other
+ file. This allows (for example) a database to be appended to an
+ executable that then opens and reads the database.
+</ol>
+<li> Query planner enhancements:
+<ol type='a'>
+ <li> The optimization that uses an index to quickly compute an
+ aggregate min() or max() is extended to work with
+ <a href="expridx.html">indexes on expressions</a>.
+ <li> The decision of whether to implement a FROM-clause subquery
+ as a co-routine or using <a href="optoverview.html#flattening">query flattening</a>
+ now considers whether
+ the result set of the outer query is "complex" (if it
+ contains functions or expression subqueries). A complex result
+ set biases the decision toward the use of co-routines.
+ <li> The planner avoids query plans that use indexes with unknown
+ collating functions.
+ <li> The planner omits unused LEFT JOINs even if they are not the
+ right-most joins of a query.
+</ol>
+<li> Other performance optimizations:
+<ol type='a'>
+ <li> A smaller and faster implementation of text to floating-point
+ conversion subroutine: sqlite3AtoF().
+ <li> The <a href="lemon.html">Lemon parser generator</a> creates a faster parser.
+ <li> Use the strcspn() C-library routine to speed up the LIKE and
+ GLOB operators.
+</ol>
+<li> Improvements to the <a href="cli.html">command-line shell</a>:
+<ol type='a'>
+ <li> The ".schema" command shows the structure of virtual tables.
+ <li> Added support for reading and writing
+ <a href="sqlar.html">SQLite Archive</a> files using
+ the <a href="cli.html#sqlar">.archive command</a>.
+ <li> Added the experimental <a href="cli.html#expert">.expert command</a>
+ <li> Added the ".eqp trigger" variant of the ".eqp" command
+ <li> Enhance the ".lint fkey-indexes" command so that it works with
+ <a href="withoutrowid.html">WITHOUT ROWID</a> tables.
+ <li> If the filename argument to the shell is a ZIP archive rather than
+ an SQLite database, then the shell automatically opens that ZIP
+ archive using the <a href="zipfile.html">Zipfile virtual table</a>.
+ <li> Added the <a href="cli.html#editfunc">edit() SQL function</a>.
+ <li> Added the <a href="cli.html#exexcel*">.excel command</a> to simplify exporting
+ database content to a spreadsheet.
+ <li> Databases are opened using
+ <a href="https://sqlite.org/src/file/ext/misc/appendvfs.c">Append VFS</a> when
+ the --append flag is used on the command line or with the
+ .open command.
+</ol>
+<li> Enhance the <a href="compile.html#enable_update_delete_limit">SQLITE_ENABLE_UPDATE_DELETE_LIMIT</a> compile-time option so
+ that it works for <a href="withoutrowid.html">WITHOUT ROWID</a> tables.
+<li> Provide the <a href="lang_corefunc.html#sqlite_offset">sqlite_offset(X)</a> SQL function that returns
+ the byte offset into the database file to the beginning of the record
+ holding value X, when compiling with <a href="compile.html#enable_offset_sql_func">-DSQLITE_ENABLE_OFFSET_SQL_FUNC</a>.
+<li> Bug fixes:
+<ol type='a'>
+ <li> Infinite loop on an UPDATE that uses an OR operator in the WHERE clause.
+ Problem introduced with 3.17.0 and reported on the mailing list about
+ one year later. Ticket
+ <a href="https://www.sqlite.org/src/info/47b2581aa9bfecec">47b2581aa9bfecec</a>.
+ <li> Incorrect query results when the skip-ahead-distinct optimization is
+ used.
+ Ticket <a href="https://sqlite.org/src/info/ef9318757b152e3a">ef9318757b152e3a</a>.
+ <li> Incorrect query results on a join with a ORDER BY DESC. Ticket
+ <a href="https://sqlite.org/src/info/123c9ba32130a6c9">123c9ba32130a6c9</a>.
+ <li> Inconsistent result set column names between CREATE TABLE AS
+ and a simple SELECT. Ticket
+ <a href="https://sqlite.org/src/info/3b4450072511e621">3b4450072511e621</a>
+ <li> Assertion fault when doing REPLACE on an index on an expression.
+ Ticket <a href="https://sqlite.org/src/info/dc3f932f5a147771">dc3f932f5a147771</a>
+ <li> Assertion fault when doing an IN operator on a constant index.
+ Ticket <a href="https://sqlite.org/src/info/aa98619ad08ddcab">aa98619ad08ddcab</a>
+</ol>
+<p><b>Hashes:</b>
+<li>SQLITE_SOURCE_ID: "2018-01-22 18:45:57 0c55d179733b46d8d0ba4d88e01a25e10677046ee3da1d5b1581e86726f2171d"
+<li>SHA3-256 for sqlite3.c: 206df47ebc49cd1710ac0dd716ce5de5854826536993f4feab7a49d136b85069
+
+
+</ol></p>
+<a name="version_3_21_0"></a>
+<h3>2017-10-24 (3.21.0)</h3><p><ol class='lessindent'>
+<li> Take advantage of the atomic-write capabilities in the
+ <a href="https://en.wikipedia.org/wiki/F2FS">F2FS filesystem</a> when available, for
+ greatly reduced transaction overhead. This currently requires the
+ <a href="compile.html#enable_batch_atomic_write">SQLITE_ENABLE_BATCH_ATOMIC_WRITE</a> compile-time option.
+<li> Allow <a href="lang_attach.html">ATTACH</a> and <a href="lang_detach.html">DETACH</a> commands to work inside of a transaction.
+<li> Allow <a href="vtab.html#worid">WITHOUT ROWID virtual tables</a> to be writable if the PRIMARY KEY
+ contains exactly one column.
+<li> The "fsync()" that occurs after the header is written in a WAL reset
+ now uses the sync settings for checkpoints. This means it will use a
+ "fullfsync" on macs if <a href="pragma.html#pragma_checkpoint_fullfsync">PRAGMA checkpoint_fullfsync</a> set on.
+<li> The <a href="c3ref/libversion.html">sqlite3_sourceid()</a> function tries to detect if the source code has
+ been modified from what is checked into version control and if there are
+ modifications, the last four characters of the version hash are shown as
+ "alt1" or "alt2". The objective is to detect accidental and/or careless
+ edits. A forger can subvert this feature.
+<li> Improved de-quoting of column names for <a href="lang_createtable.html#createtabas">CREATE TABLE AS</a> statements with
+ an aggregate query on the right-hand side.
+<li> Fewer "stat()" system calls issued by the unix VFS.
+<li> Enhanced the <a href="optoverview.html#like_opt">LIKE optimization</a> so that it works with an <a href="lang_expr.html#like">ESCAPE</a> clause.
+<li> Enhanced <a href="pragma.html#pragma_integrity_check">PRAGMA integrity_check</a> and <a href="pragma.html#pragma_quick_check">PRAGMA quick_check</a> to detect obscure
+ row corruption that they were formerly missing. Also update both pragmas
+ so that they return error text rather than SQLITE_CORRUPT when encountering
+ corruption in <a href="fileformat2.html#record_format">records</a>.
+<li> The query planner now prefers to implement FROM-clause subqueries using
+ <a href="optoverview.html#coroutines">co-routines</a> rather using the <a href="optoverview.html#flattening">query flattener</a> optimization. Support for
+ the use of co-routines for subqueries may no longer be disabled.
+<li> Pass information about !=, IS, IS NOT, NOT NULL, and IS NULL constraints
+ into the <a href="vtab.html#xbestindex">xBestIndex</a> method of virtual tables.
+<li> Enhanced the <a href="csv.html">CSV virtual table</a> so that it accepts the last row of
+ input if the final new-line character is missing.
+<li> Remove the rarely-used "scratch" memory allocator. Replace it with the
+ <a href="c3ref/c_config_covering_index_scan.html#sqliteconfigsmallmalloc">SQLITE_CONFIG_SMALL_MALLOC</a> configuration setting that gives SQLite
+ a hint that large memory allocations should be avoided when possible.
+<li> Added the
+ <a href="https://sqlite.org/src/file/ext/misc/unionvtab.c">swarm virtual table</a>
+ to the existing union virtual table extension.
+<li> Added the
+ <a href="https://sqlite.org/src/file/src/dbpage.c">sqlite_dbpage virtual table</a>
+ for providing direct access to pages
+ of the database file. The source code is built into the <a href="amalgamation.html">amalgamation</a> and
+ is activated using the <a href="compile.html#enable_dbpage_vtab">-DSQLITE_ENABLE_DBPAGE_VTAB</a> compile-time option.
+<li> Add a new type of fts5vocab virtual table - "instance" - that provides
+ direct access to an FTS5 full-text index at the lowest possible level.
+<li> Remove a call to rand_s() in the Windows VFS since it was causing problems
+ in Firefox on some older laptops.
+<li> The <a href="https://sqlite.org/src/finfo?name=src/shell.c">src/shell.c</a> source code
+ to the <a href="cli.html">command-line shell</a> is no longer under version control. That file
+ is now generated as part of the build process.
+<li> Miscellaneous <a href="cpu.html#microopt">microoptimizations</a> reduce CPU usage by about 2.1%.
+<li> Bug fixes:
+<ol type="a">
+ <li> Fix a faulty assert() statement discovered by OSSFuzz.
+ Ticket <a href="https://sqlite.org/src/info/cb91bf4290c211d">cb91bf4290c211d</a>
+ <li> Fix an obscure memory leak in <a href="c3ref/result_blob.html">sqlite3_result_pointer()</a>.
+ Ticket <a href="https://sqlite.org/src/info/7486aa54b968e9b">7486aa54b968e9b</a>
+ <li> Avoid a possible use-after-free error by deferring schema resets until
+ after the query planner has finished running.
+ Ticket <a href="https://sqlite.org/src/info/be436a7f4587ce5">be436a7f4587ce5</a>
+ <li> Only use indexes-on-expressions to optimize ORDER BY or GROUP BY if
+ the COLLATE is correct.
+ Ticket <a href="https://sqlite.org/src/info/e20dd54ab0e4383">e20dd54ab0e4383</a>
+ <li> Fix an assertion fault that was coming up when the expression in an
+ index-on-expressions is really a constant.
+ Ticket <a href="https://sqlite.org/src/info/aa98619ad08ddca">aa98619ad08ddca</a>
+ <li> Fix an assertion fault that could occur following
+ <a href="pragma.html#pragma_reverse_unordered_selects">PRAGMA reverse_unordered_selects</a>.
+ Ticket <a href="https://sqlite.org/src/info/cb91bf4290c211d">cb91bf4290c211d</a>
+ <li> Fix a segfault that can occur for queries that use table-valued functions
+ in an IN or EXISTS subquery.
+ Ticket <a href="https://sqlite.org/src/info/b899b6042f97f5">b899b6042f97f5</a>
+ <li> Fix a potential integer overflow problem when compiling a particular
+ horrendous common table expression. This was another problem discovered
+ by OSSFuzz. Check-in <a href="https://sqlite.org/src/info/6ee8cb6ae5">6ee8cb6ae5</a>.
+ <li> Fix a potential out-of-bound read when querying a corrupt database file,
+ a problem detected by Natalie Silvanovich of Google Project Zero.
+ Check-in <a href="https://sqlite.org/src/info/04925dee41a21f">04925dee41a21f</a>.
+</ol>
+<p><b>Hashes:</b>
+<li>SQLITE_SOURCE_ID: "2017-10-24 18:55:49 1a584e499906b5c87ec7d43d4abce641fdf017c42125b083109bc77c4de48827"
+<li>SHA3-256 for sqlite3.c: 84c181c0283d0320f488357fc8aab51898370c157601459ebee49d779036fe03
+
+</ol></p>
+<a name="version_3_20_1"></a>
+<h3>2017-08-24 (3.20.1)</h3><p><ol class='lessindent'>
+<li> 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>
+<a name="version_3_20_0"></a>
+<h3>2017-08-01 (3.20.0)</h3><p><ol class='lessindent'>
+<li> 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> &rarr; 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> &rarr; 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>
+ &rarr; 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>
+<p><b>Hashes:</b>
+<li>SQLITE_SOURCE_ID: "2017-08-01 13:24:15 9501e22dfeebdcefa783575e47c60b514d7c2e0cad73b2a496c0bc4b680900a8"
+<li>SHA3-256 for sqlite3.c: 79b7f3b977360456350219cba0ba0e5eb55910565eab68ea83edda2f968ebe95
+
+</ol></p>
+<a name="version_3_18_2"></a>
+<h3>2017-06-17 (3.18.2)</h3><p><ol class='lessindent'>
+<li>Fix a bug that might cause duplicate output rows when an IN operator is
+ used in the WHERE clause.
+ Ticket <a href="https://sqlite.org/src/info/61fe9745">61fe9745</a>.
+<p><b>Hashes:</b>
+<li>SQLITE_SOURCE_ID: "2017-06-17 09:59:36 036ebf729e4b21035d7f4f8e35a6f705e6bf99887889e2dc14ebf2242e7930dd"
+<li>SHA3-256 for sqlite3.c: b0bd014f2776b9f9508a3fc6432f70e2436bf54475369f88f0aeef75b0eec93e
+
+</ol></p>
+<a name="version_3_18_1"></a>
+<h3>2017-06-16 (3.18.1)</h3><p><ol class='lessindent'>
+<li>Fix a bug associated with <a href="pragma.html#pragma_auto_vacuum">auto_vacuum</a> that can lead to database
+ corruption. The bug was introduced in <a href="#version_3_16_0">version 3.16.0</a> (2017-01-02).
+ Ticket <a href="https://sqlite.org/src/info/fda22108">fda22108</a>.
+<p><b>Hashes:</b>
+<li>SQLITE_SOURCE_ID: "2017-06-16 13:41:15 77bb46233db03a3338bacf7e56f439be3dfd1926ea0c44d252eeafa7a7b31c06"
+<li>SHA3-256 for sqlite3.c: 334eaf776db9d09a4e69d6012c266bc837107edc2c981739ef82081cb11c5723
+
+</ol></p>
+<a name="version_3_19_3"></a>
+<h3>2017-06-08 (3.19.3)</h3><p><ol class='lessindent'>
+<li>Fix a bug associated with <a href="pragma.html#pragma_auto_vacuum">auto_vacuum</a> that can lead to database
+ corruption. The bug was introduced in <a href="#version_3_16_0">version 3.16.0</a> (2017-01-02).
+ Ticket <a href="https://sqlite.org/src/info/fda22108">fda22108</a>.
+<p><b>Hashes:</b>
+<li>SQLITE_SOURCE_ID: "2017-06-08 14:26:16 0ee482a1e0eae22e08edc8978c9733a96603d4509645f348ebf55b579e89636b"
+<li>SHA3-256 for sqlite3.c: 368f1d31272b1739f804bcfa5485e5de62678015c4adbe575003ded85c164bb8
+
+</ol></p>
+<a name="version_3_19_2"></a>
+<h3>2017-05-25 (3.19.2)</h3><p><ol class='lessindent'>
+<li>Fix more bugs in the LEFT JOIN <a href="optoverview.html#flattening">flattening optimization</a>. Ticket
+ <a href="https://www.sqlite.org/src/info/7fde638e94287d2c">7fde638e94287d2c</a>.
+<p><b>Hashes:</b>
+<li>SQLITE_SOURCE_ID: "2017-05-25 16:50:27 edb4e819b0c058c7d74d27ebd14cc5ceb2bad6a6144a486a970182b7afe3f8b9"
+<li>SHA3-256 for sqlite3.c: 1be0c457869c1f7eba58c3b5097b9ec307a15be338308bee8e5be8570bcf5d1e
+
+</ol></p>
+<a name="version_3_19_1"></a>
+<h3>2017-05-24 (3.19.1)</h3><p><ol class='lessindent'>
+<li>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>
+<a name="version_3_19_0"></a>
+<h3>2017-05-22 (3.19.0)</h3><p><ol class='lessindent'>
+<li> 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>.
+<p><b>Hashes:</b>
+<li>SQLITE_SOURCE_ID: "2017-05-22 13:58:13 28a94eb282822cad1d1420f2dad6bf65e4b8b9062eda4a0b9ee8270b2c608e40"
+<li>SHA3-256 for sqlite3.c: c30326aa1a9cc342061b755725eac9270109acf878bc59200dd4b1cea6bc2908
+
+</ol></p>
+<a name="version_3_18_0"></a>
+<h3>2017-03-30 (3.18.0)</h3><p><ol class='lessindent'>
+<li>Added the <a href="pragma.html#pragma_optimize">PRAGMA optimize</a> command
+<li>The SQLite version identifier returned by the <a href="lang_corefunc.html#sqlite_source_id">sqlite_source_id()</a> SQL function
+ and the <a href="c3ref/libversion.html">sqlite3_sourceid()</a> C API and found in the <a href="c3ref/c_source_id.html">SQLITE_SOURCE_ID</a> macro is
+ now a 64-digit SHA3-256 hash instead of a 40-digit SHA1 hash.
+<li>Added the <a href="json1.html#jpatch">json_patch()</a> SQL function to the <a href="json1.html">JSON1 extension</a>.
+<li>Enhance the <a href="optoverview.html#like_opt">LIKE optimization</a> so that it works for arbitrary expressions on
+ the left-hand side as long as the LIKE pattern on the right-hand side does not
+ begin with a digit or minus sign.
+<li>Added the <a href="c3ref/set_last_insert_rowid.html">sqlite3_set_last_insert_rowid()</a> interface and use the new interface in
+ the <a href="fts3.html">FTS3</a>, <a href="fts3.html#fts4">FTS4</a>, and <a href="fts5.html">FTS5</a> extensions to ensure that the <a href="c3ref/last_insert_rowid.html">sqlite3_last_insert_rowid()</a>
+ interface always returns reasonable values.
+<li>Enhance <a href="pragma.html#pragma_integrity_check">PRAGMA integrity_check</a> and <a href="pragma.html#pragma_quick_check">PRAGMA quick_check</a> so that they verify
+ <a href="lang_createtable.html#ckconst">CHECK constraints</a>.
+<li>Enhance the query plans for joins to detect empty tables early and
+ halt without doing unnecessary work.
+<li>Enhance the <a href="c3ref/mprintf.html">sqlite3_mprintf()</a> family of interfaces and the <a href="lang_corefunc.html#printf">printf SQL function</a>
+ to put comma separators at the thousands marks for integers, if the "," format modifier
+ is used in between the "%" and the "d" (example: "%,d").
+<li>Added the -D<a href="compile.html#max_memory">SQLITE_MAX_MEMORY</a>=<i>N</i> compile-time option.
+<li>Added the <a href="cli.html#sha3sum">.sha3sum dot-command</a> and the <a href="cli.html#selftest">.selftest dot-command</a>
+ to the <a href="cli.html">command-line shell</a>
+<li>Begin enforcing <a href="c3ref/c_limit_attached.html#sqlitelimitvdbeop">SQLITE_LIMIT_VDBE_OP</a>. This can be used, for example, to prevent
+ excessively large prepared statements in systems that accept SQL queries from
+ untrusted users.
+<li>Various performance improvements.
+<p><b>Bug Fixes:</b>
+<li>Ensure that indexed expressions with collating sequences are handled correctly.
+ Fix for ticket <a href="https://www.sqlite.org/src/info/eb703ba7b50c1a5">eb703ba7b50c1a5</a>.
+<li>Fix a bug in the 'start of ...' modifiers for the <a href="lang_datefunc.html">date and time functions</a>.
+ Ticket <a href="https://www.sqlite.org/src/info/6097cb92745327a1">6097cb92745327a1</a>
+<li>Fix a potential segfault in complex recursive triggers, resulting from a
+ bug in the OP_Once opcode introduced as part of a performance optimization in
+ version 3.15.0.
+ Ticket <a href="https://www.sqlite.org/src/info/06796225f59c057c">06796225f59c057c</a>
+<li>In the <a href="rbu.html">RBU extension</a>, add extra sync operations to avoid the possibility of
+ corruption following a power failure.
+<li>The <a href="c3ref/trace_v2.html">sqlite3_trace_v2()</a> output for nested SQL statements should always begin
+ with a "--" comment marker.
+<p><b>Hashes:</b>
+<li>SQLITE_SOURCE_ID: "2017-03-28 18:48:43 424a0d380332858ee55bdebc4af3789f74e70a2b3ba1cf29d84b9b4bcf3e2e37"
+<li>SHA3-256 for sqlite3.c: cbf322df1f76be57fb3be84f3da1fc71d1d3dfdb7e7c2757fb0ff630b3bc2e5d
+
+</ol></p>
+<a name="version_3_17_0"></a>
+<h3>2017-02-13 (3.17.0)</h3><p><ol class='lessindent'>
+<li>Approximately 25% better performance from the <a href="rtree.html">R-Tree extension</a>.
+ <ol type='a'>
+ <li> Uses compiler built-ins (ex: __builtin_bswap32() or _byteswap_ulong())
+ for byteswapping when available.
+ <li> Uses the <a href="c3ref/blob.html">sqlite3_blob</a> key/value access object instead of SQL
+ for pulling content out of R-Tree nodes
+ <li> Other miscellaneous enhancements such as loop unrolling.
+ </ol>
+<li>Add the <a href="compile.html#default_lookaside">SQLITE_DEFAULT_LOOKASIDE</a> compile-time option.
+<li>Increase the default <a href="malloc.html#lookaside">lookaside</a>
+ size from 512,125 to 1200,100
+ as this provides better performance while only adding 56KB
+ of extra memory per connection. Memory-sensitive
+ applications can restore the old
+ default at compile-time, start-time, or run-time.
+<li>Use compiler built-ins __builtin_sub_overflow(), __builtin_add_overflow(),
+ and __builtin_mul_overflow() when available. (All compiler
+ built-ins can be omitted with the <a href="compile.html#disable_intrinsic">SQLITE_DISABLE_INTRINSIC</a> compile-time
+ option.)
+<li>Added the <a href="compile.html#enable_null_trim">SQLITE_ENABLE_NULL_TRIM</a> compile-time option, which
+ can result in significantly smaller database files for some
+ applications, at the risk of being incompatible with older
+ versions of SQLite.
+<li>Change <a href="compile.html#default_pcache_initsz">SQLITE_DEFAULT_PCACHE_INITSZ</a> from 100 to 20, for
+ improved performance.
+<li>Added the SQLITE_UINT64_TYPE compile-time option as an
+ analog to SQLITE_INT64_TYPE.
+<li>Perform some <a href="lang_update.html">UPDATE</a> operations in a single pass instead of
+ in two passes.
+<li>Enhance the <a href="sessionintro.html">session extension</a> to support <a href="withoutrowid.html">WITHOUT ROWID</a>
+ tables.
+<li>Fixed performance problems and potential stack overflows
+ when creating <a href="lang_createview.html">views</a> from multi-row VALUES clauses with
+ hundreds of thousands of rows.
+<li>Added the <a href="https://www.sqlite.org/src/file/ext/misc/sha1.c">sha1.c</a>
+ extension.
+<li>In the <a href="cli.html">command-line shell</a>, enhance the ".mode" command so that it
+ restores the default column and row separators for modes "line",
+ "list", "column", and "tcl".
+<li>Enhance the <a href="compile.html#direct_overflow_read">SQLITE_DIRECT_OVERFLOW_READ</a> option so that it works
+ in <a href="wal.html">WAL mode</a> as long as the pages being read are not in the WAL file.
+<li>Enhance the
+ <a href="lemon.html">Lemon parser generator</a>
+ so that it can store the parser object as a stack variable rather than
+ allocating space from the heap and make use of that enhancement in
+ the <a href="amalgamation.html">amalgamation</a>.
+<li>Other performance improvements. Uses about <a href="cpu.html">6.5% fewer CPU cycles</a>.
+<p><b>Bug Fixes:</b>
+<li>Throw an error if the ON clause of a LEFT JOIN references tables
+ to the right of the ON clause. This is the same behavior as
+ PostgreSQL. Formerly, SQLite silently converted the LEFT JOIN
+ into an INNER JOIN. Fix for ticket
+ <a href="https://www.sqlite.org/src/info/25e335f802dd">25e335f802dd</a>.
+<li>Use the correct affinity for columns of automatic indexes. Ticket
+ <a href="https://www.sqlite.org/src/info/7ffd1ca1d2ad4ec">7ffd1ca1d2ad4ec</a>.
+<li>Ensure that the <a href="c3ref/blob_reopen.html">sqlite3_blob_reopen()</a> interface can correctly
+ handle short rows. Fix for ticket
+ <a href="https://www.sqlite.org/src/info/e6e962d6b0f06f46e">e6e962d6b0f06f46e</a>.
+<p><b>Hashes:</b>
+<li>SQLITE_SOURCE_ID: "2017-02-13 16:02:40 ada05cfa86ad7f5645450ac7a2a21c9aa6e57d2c"
+<li>SHA1 for sqlite3.c: cc7d708bb073c44102a59ed63ce6142da1f174d1
+
+
+</ol></p>
+<a name="version_3_16_2"></a>
+<h3>2017-01-06 (3.16.2)</h3><p><ol class='lessindent'>
+<li>Fix the <a href="lang_replace.html">REPLACE</a> statement for
+ <a href="withoutrowid.html">WITHOUT ROWID</a> tables that lack secondary indexes so that
+ it works correctly with triggers and foreign keys. This was a new bug
+ caused by performance optimizations added in version 3.16.0.
+ Ticket <a href="https://www.sqlite.org/src/info/30027b613b4">30027b613b4</a>
+<li>Fix the <a href="c3ref/value_blob.html">sqlite3_value_text()</a> interface so that it correctly
+ translates content generated by <a href="lang_corefunc.html#zeroblob">zeroblob()</a> into a string of all
+ 0x00 characters. This is a long-standing issue discovered after the
+ 3.16.1 release by <a href="https://github.com/google/oss-fuzz">OSS-Fuzz</a>
+<li>Fix the bytecode generator to deal with a subquery in the FROM clause
+ that is itself a UNION ALL where one side of the UNION ALL is a view
+ that contains an ORDER BY. This is a long-standing issue that was
+ discovered after the release of 3.16.1. See ticket
+ <a href="https://www.sqlite.org/src/info/190c2507">190c2507</a>.
+<li>Adjust the <a href="c3ref/column_count.html">sqlite3_column_count()</a> API so it more often returns the same
+ values for <a href="pragma.html#syntax">PRAGMA</a> statements as it did in prior releases, to
+ minimize disruption to applications that might be using that
+ interface in unexpected ways.
+<p><b>Hashes:</b>
+<li>SQLITE_SOURCE_ID: "2017-01-06 16:32:41 a65a62893ca8319e89e48b8a38cf8a59c69a8209"
+<li>SHA1 for sqlite3.c: 2bebdc3f24911c0d12b6d6c0123c3f84d6946b08
+
+</ol></p>
+<a name="version_3_16_1"></a>
+<h3>2017-01-03 (3.16.1)</h3><p><ol class='lessindent'>
+<li>Fix a bug concerning the use of <a href="rowvalue.html">row values</a> within <a href="lang_createtrigger.html">triggers</a>
+ (see ticket <a href="https://www.sqlite.org/src/info/8c9458e7">8c9458e7</a>)
+ that was in version 3.15.0 but was not reported until moments after the 3.16.0
+ release was published.
+<p><b>Hashes:</b>
+<li>SQLITE_SOURCE_ID: "2017-01-03 18:27:03 979f04392853b8053817a3eea2fc679947b437fd"
+<li>SHA1 for sqlite3.c: 354f6223490b30fd5320b4066b1535e4ce33988d
+
+</ol></p>
+<a name="version_3_16_0"></a>
+<h3>2017-01-02 (3.16.0)</h3><p><ol class='lessindent'>
+<li>Uses 9% fewer CPU cycles. (See the <a href="cpu.html">CPU performance measurement</a> report for
+ details on how this performance increase was computed.)
+<li>Added experimental support for <a href="pragma.html#pragfunc">PRAGMA functions</a>.
+<li>Added the <a href="c3ref/c_dbconfig_defensive.html#sqlitedbconfignockptonclose">SQLITE_DBCONFIG_NO_CKPT_ON_CLOSE</a> option to <a href="c3ref/db_config.html">sqlite3_db_config()</a>.
+<li>Enhance the <a href="lang_datefunc.html">date and time functions</a> so that the 'unixepoch' modifier works
+ for the full span of supported dates.
+<li>Changed the default configuration of the <a href="malloc.html#lookaside">lookaside memory allocator</a> from
+ 500 slots of 128 bytes each into 125 slots of 512 bytes each.
+<li>Enhanced "WHERE x NOT NULL" <a href="partialindex.html">partial indexes</a> so that they are usable if
+ the "x" column appears in a LIKE or GLOB operator.
+<li>Enhanced <a href="c3ref/interrupt.html">sqlite3_interrupt()</a> so that it interrupts <a href="wal.html#ckpt">checkpoint</a> operations that
+ are in process.
+<li>Enhanced the <a href="lang_expr.html#like">LIKE</a> and <a href="lang_expr.html#glob">GLOB</a> matching algorithm to be faster
+ for cases when the pattern contains multiple wildcards.
+<li>Added the <a href="c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlwin32gethandle">SQLITE_FCNTL_WIN32_GET_HANDLE</a> file control opcode.
+<li>Added ".mode quote" to the <a href="cli.html">command-line shell</a>.
+<li>Added ".lint fkey-indexes" to the <a href="cli.html">command-line shell</a>.
+<li>Added the <a href="imposter.html#dotimposter">.imposter dot-command</a> to the <a href="cli.html">command-line shell</a>.
+<li>Added the <a href="https://www.sqlite.org/src/file/ext/misc/remember.c">remember(V,PTR)</a>
+ SQL function as a <a href="loadext.html">loadable extension</a>.
+<li>Rename the <a href="compile.html#omit_builtin_test">SQLITE_OMIT_BUILTIN_TEST</a> compile-time option to
+ <a href="compile.html#untestable">SQLITE_UNTESTABLE</a> to better reflect the implications of using it.
+<p><b>Bug Fixes:</b>
+<li>Fix a long-standing bug in the query planner that caused incorrect results
+ on a LEFT JOIN where the left-hand table is a subquery and the join constraint
+ is a bare column name coming from the left-hand subquery. Ticket
+ <a href="https://www.sqlite.org/src/info/2df0107b">2df0107b</a>.
+<li>Correctly handle the integer literal -0x8000000000000000 in the query planner.
+<p><b>Hashes:</b>
+<li>SQLITE_SOURCE_ID: "2017-01-02 11:57:58 04ac0b75b1716541b2b97704f4809cb7ef19cccf"
+<li>SHA1 for sqlite3.c: e2920fb885569d14197c9b7958e6f1db573ee669
+
+</ol></p>
+<a name="version_3_15_2"></a>
+<h3>2016-11-28 (3.15.2)</h3><p><ol class='lessindent'>
+<li> Multiple bug fixes to the <a href="rowvalue.html">row value</a> logic that was introduced in version 3.15.0.
+<li> Fix a NULL pointer dereference in ATTACH/DETACH following a maliciously constructed
+ syntax error. Ticket
+ <a href="https://www.sqlite.org/src/info/2f1b168ab4d4844">2f1b168ab4d4844</a>.
+<li> Fix a crash that can occur following an out-of-memory condition
+ in the built-in <a href="lang_corefunc.html#instr">instr()</a> function.
+<li> In the <a href="json1.html">JSON extension</a>, fix the JSON validator so that it correctly rejects
+ invalid backslash escapes within strings.
+<p><b>Hashes:</b>
+<li>SQLITE_SOURCE_ID: "2016-11-28 19:13:37 bbd85d235f7037c6a033a9690534391ffeacecc8"
+<li>SHA1 for sqlite3.c: 06d77b42a3e70609f8d4bbb97caf53652f1082cb
+
+</ol></p>
+<a name="version_3_15_1"></a>
+<h3>2016-11-04 (3.15.1)</h3><p><ol class='lessindent'>
+<li> Added <a href="c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlwin32gethandle">SQLITE_FCNTL_WIN32_GET_HANDLE</a> file control opcode.
+<li> Fix the <a href="lang_vacuum.html">VACUUM</a> command so that it spills excess content to disk rather
+ than holding everything in memory, and possible causing an out-of-memory
+ error for larger database files. This fixes an issue introduced by
+ version 3.15.0.
+<li> Fix a case (present since 3.8.0 - 2013-08-26)
+ where OR-connected terms in the ON clause of a LEFT JOIN
+ might cause incorrect results. Ticket
+ <a href="https://www.sqlite.org/src/info/34a579141b2c5ac">34a579141b2c5ac</a>.
+<li> Fix a case where the use of <a href="rowvalue.html">row values</a> in the ON clause of a LEFT JOIN
+ might cause incorrect results. Ticket
+ <a href="https://www.sqlite.org/src/info/fef4bb4bd9185ec8f">fef4bb4bd9185ec8f</a>.
+<p><b>Hashes:</b>
+<li>SQLITE_SOURCE_ID: "2016-11-04 12:08:49 1136863c76576110e710dd5d69ab6bf347c65e36"
+<li>SHA1 for sqlite3.c: e7c26a7be3e431dd06898f8d262c4ef240c07366
+
+</ol></p>
+<a name="version_3_15_0"></a>
+<h3>2016-10-14 (3.15.0)</h3><p><ol class='lessindent'>
+<li> Added support for <a href="rowvalue.html">row values</a>.
+<li> Allow <a href="deterministic.html">deterministic SQL functions</a> in the WHERE clause of a <a href="partialindex.html">partial index</a>.
+<li> Added the "<a href="uri.html#urimodeof">modeof=<i>filename</i></a>" URI parameter on the unix VFS
+<li> Added support for <a href="c3ref/c_dbconfig_defensive.html#sqlitedbconfigmaindbname">SQLITE_DBCONFIG_MAINDBNAME</a>.
+<li> Added the ability to <a href="lang_vacuum.html">VACUUM</a> an <a href="lang_attach.html">ATTACH-ed</a> database.
+<li> Enhancements to the <a href="cli.html">command-line shell</a>:
+ <ol type='a'>
+ <li> Add the ".testcase" and ".check" <a href="cli.html#dotcmd">dot-commands</a>.
+ <li> Added the --new option to the ".open" dot-command, causing
+ any prior content in the database to be purged prior to
+ opening.
+ </ol>
+<li> Enhance the <a href="fts5.html#the_fts5vocab_virtual_table_module">fts5vocab</a> virtual table to handle "ORDER BY term" efficiently.
+<li> Miscellaneous micro-optimizations reduce CPU usage by more than 7%
+ on common workloads. Most optimization in this release has been on the
+ front-end (<a href="c3ref/prepare.html">sqlite3_prepare_v2()</a>).
+<p><b>Bug Fixes:</b>
+<li> The multiply operator now correctly detects 64-bit integer overflow
+ and promotes to floating point in all corner-cases. Fix for ticket
+ <a href="https://www.sqlite.org/src/info/1ec41379c9c1e400">1ec41379c9c1e400</a>.
+<li> Correct handling of columns with redundant unique indexes when those
+ columns are used on the LHS of an <a href="lang_expr.html#in_op">IN operator</a>. Fix for ticket
+ <a href="https://www.sqlite.org/src/info/0eab1ac759">0eab1ac759</a>.
+<li> Skip NULL entries on range queries in <a href="expridx.html">indexes on expressions</a>.
+ Fix for ticket
+ <a href="https://www.sqlite.org/src/tktview/4baa46491212947">4baa46491212947</a>.
+<li> Ensure that the <a href="autoinc.html">AUTOINCREMENT</a> counters in the sqlite_sequence
+ table are initialized doing "Xfer Optimization" on "INSERT ... SELECT"
+ statements. Fix for ticket
+ <a href="https://www.sqlite.org/src/info/7b3328086a5c116c">7b3328086a5c116c</a>.
+<li> Make sure the ORDER BY LIMIT optimization
+ (from check-in <a href="https://www.sqlite.org/src/info/559733b09e9630fa">559733b09e</a>)
+ works with IN operators on INTEGER PRIMARY KEYs. Fix for ticket
+ <a href="https://www.sqlite.org/src/info/96c1454cbfd9509">96c1454c</a>
+<p><b>Hashes:</b>
+<li>SQLITE_SOURCE_ID: "2016-10-14 10:20:30 707875582fcba352b4906a595ad89198d84711d8"
+<li>SHA1 for sqlite3.c: fba106f8f6493c66eeed08a2dfff0907de54ae76
+
+</ol></p>
+<a name="version_3_14_2"></a>
+<h3>2016-09-12 (3.14.2)</h3><p><ol class='lessindent'>
+<li> Improved support for using the STDCALL calling convention in winsqlite3.dll.
+<li> Fix the <a href="c3ref/trace_v2.html">sqlite3_trace_v2()</a> interface so that it is disabled if either the
+callback or the mask arguments are zero, in accordance with the documentation.
+<li> Fix commenting errors and improve the comments generated on <a href="lang_explain.html">EXPLAIN</a> listings
+when the <a href="compile.html#enable_explain_comments">-DSQLITE_ENABLE_EXPLAIN_COMMENTS</a> compile-time option is used.
+<li> Fix the ".read" command in the <a href="cli.html">command-line shell</a> so that it understands
+that its input is not interactive.
+<li> Correct affinity computations for a SELECT on the RHS of an IN operator.
+Fix for ticket <a href="https://sqlite.org/src/info/199df4168c">199df4168c</a>.
+<li> The ORDER BY LIMIT optimization is not valid unless the inner-most IN operator
+loop is actually used by the query plan. Fix for
+ticket <a href="https://sqlite.org/src/info/0c4df46116e90f92">0c4df46116e90f92</a>.
+<li> Fix an internal code generator problem that was causing some <a href="lang_delete.html">DELETE</a> operations
+to no-op. Ticket <a href="https://sqlite.org/src/info/ef360601">ef360601</a>
+<p><b>Hashes:</b>
+<li>SQLITE_SOURCE_ID: "2016-09-12 18:50:49 29dbef4b8585f753861a36d6dd102ca634197bd6"
+<li>SHA1 for sqlite3.c: bcc4a1989db45e7f223191f2d0f66c1c28946383
+
+</ol></p>
+<a name="version_3_14_1"></a>
+<h3>2016-08-11 (3.14.1)</h3><p><ol class='lessindent'>
+<li>A performance enhancement to the page-cache "truncate" operation
+ reduces <a href="lang_transaction.html">COMMIT</a> time by dozens of milliseconds on systems with a
+ large <a href="pragma.html#pragma_cache_size">page cache</a>.
+<li>Fix to the --rbu option of <a href="sqldiff.html">sqldiff</a>.
+<p><b>Hashes:</b>
+<li>SQLITE_SOURCE_ID: "2016-08-11 18:53:32 a12d8059770df4bca59e321c266410344242bf7b"
+<li>SHA1 for sqlite3.c: d545b24892278272ce4e40e0567d69c8babf12ea
+
+</ol></p>
+<a name="version_3_14"></a>
+<h3>2016-08-08 (3.14)</h3><p><ol class='lessindent'>
+<div style="width:280px;float:right;padding:10px;margin:0px 10px;">
+<img src='images/sqlitepie.jpg' width=280 height=250></img><br>
+<center>Celebrating the SQLite "<big>&pi;</big> release"
+with a home-baked pie.</center>
+</div>
+<li>Added support for <a href="vtab.html#worid">WITHOUT ROWID virtual tables</a>.
+<li>Improved the query planner so that the <a href="optoverview.html#or_opt">OR optimization</a> can
+ be used on <a href="vtab.html">virtual tables</a> even if one or more of the disjuncts
+ use the <a href="lang_expr.html#like">LIKE</a>, <a href="lang_expr.html#glob">GLOB</a>, <a href="lang_expr.html#regexp">REGEXP</a>, <a href="lang_expr.html#match">MATCH</a> operators.
+<li>Added the <a href="csv.html">CSV virtual table</a> for reading
+ <a href="https://www.ietf.org/rfc/rfc4180.txt">RFC 4180</a> formatted comma-separated
+ value files.
+<li>Added the <a href="carray.html">carray() table-valued function</a> extension.
+<li>Enabled <a href="loadext.html#persist">persistent loadable extensions</a> using the new
+ <a href="rescode.html#ok_load_permanently">SQLITE_OK_LOAD_PERMANENTLY</a> return code from the extension
+ entry point.
+<li>Added the <a href="c3ref/c_dbstatus_options.html#sqlitedbstatuscacheusedshared">SQLITE_DBSTATUS_CACHE_USED_SHARED</a> option to <a href="c3ref/db_status.html">sqlite3_db_status()</a>.
+<li>Add the
+ <a href="https://www.sqlite.org/src/artifact?ci=trunk&filename=ext/misc/vfsstat.c">vfsstat.c</a>
+ loadable extension - a VFS shim that measures I/O
+ together with an <a href="vtab.html#epovtab">eponymous virtual table</a> that provides access to the measurements.
+<li>Improved algorithm for running queries with both an ORDER BY and a LIMIT where
+ only the inner-most loop naturally generates rows in the correct order.
+<li>Enhancements to <a href="lemon.html">Lemon parser generator</a>, so that it generates a
+ faster parser.
+<li>The <a href="pragma.html#pragma_compile_options">PRAGMA compile_options</a> command now attempts to show the version number
+ of the compiler that generated the library.
+<li>Enhance <a href="pragma.html#pragma_table_info">PRAGMA table_info</a> so that it provides information about
+ <a href="vtab.html#epovtab">eponymous virtual tables</a>.
+<li>Added the "win32-none" VFS, analogous to the "unix-none" VFS, that works like
+ the default "win32" VFS except that it ignores all file locks.
+<li>The query planner uses a full scan of a <a href="partialindex.html">partial index</a> instead of a
+ full scan of the main table, in cases where that makes sense.
+<li>Allow <a href="vtab.html#tabfunc2">table-valued functions</a> to appear on the right-hand side of an <a href="lang_expr.html#in_op">IN operator</a>.
+<li>Created the <a href="dbhash.html">dbhash.exe</a> command-line utility.
+<li>Added two new C-language interfaces: <a href="c3ref/expanded_sql.html">sqlite3_expanded_sql()</a> and
+ <a href="c3ref/trace_v2.html">sqlite3_trace_v2()</a>. These new interfaces subsume the functions of
+ <a href="c3ref/profile.html">sqlite3_trace()</a> and <a href="c3ref/profile.html">sqlite3_profile()</a> which are now deprecated.
+<li>Added the <a href="json1.html#jquote">json_quote()</a> SQL function to <a href="json1.html">the json1 extension</a>.
+<li>Disable the <a href="c3ref/set_authorizer.html">authorizer callback</a> while reparsing the schema.
+<li>Added the <a href="compile.html#enable_unknown_sql_function">SQLITE_ENABLE_UNKNOWN_SQL_FUNCTION</a> compile-time option and turned that
+ option on by default when building the <a href="cli.html">command-line shell</a>.
+<p><b>Bug Fixes:</b>
+<li>Fix the <a href="lang_altertable.html">ALTER TABLE</a> command so that it does not corrupt <a href="lang_createindex.html#descidx">descending indexes</a>
+ when adding a column to a <a href="pragma.html#pragma_legacy_file_format">legacy file format</a> database. Ticket
+ <a href="https://www.sqlite.org/src/info/f68bf68513a1c15f">f68bf68513a1c15f</a>
+<li>Fix a NULL-pointer dereference/crash that could occurs when a transitive WHERE
+ clause references a non-existent collating sequence. Ticket
+ <a href="https://www.sqlite.org/src/info/e8d439c77685eca6">e8d439c77685eca6</a>.
+<li>Improved the cost estimation for an index scan which includes a WHERE clause
+ that can be partially or fully evaluated using columns in the index and without
+ having to do a table lookup. This fixes a performance regression that occurred
+ for some obscure queries following the ORDER BY LIMIT optimization introduced
+ in <a href="#version_3_12_0">version 3.12.0</a>.
+<p><b>Hashes:</b>
+<li>SQLITE_SOURCE_ID: "2016-08-08 13:40:27 d5e98057028abcf7217d0d2b2e29bbbcdf09d6de"
+<li>SHA1 for sqlite3.c: 234a3275d03a287434ace3ccdf1afb208e6b0e92
+
+</ol></p>
+<a name="version_3_13_0"></a>
+<h3>2016-05-18 (3.13.0)</h3><p><ol class='lessindent'>
+<li>Postpone I/O associated with TEMP files for as long as possible, with the hope
+ that the I/O can ultimately be avoided completely.
+<li>Merged the <a href="sessionintro.html">session</a> extension into trunk.
+<li>Added the ".auth ON|OFF" command to the <a href="cli.html">command-line shell</a>.
+<li>Added the "--indent" option to the ".schema" and ".fullschema" commands of
+ the <a href="cli.html">command-line shell</a>, to turn on pretty-printing.
+<li>Added the ".eqp full" option to the <a href="cli.html">command-line shell</a>, that does both <a href="lang_explain.html">EXPLAIN</a>
+ and <a href="eqp.html">EXPLAIN QUERY PLAN</a> on each statement that is evaluated.
+<li>Improved unicode filename handling in the <a href="cli.html">command-line shell</a> on Windows.
+<li>Improved resistance against goofy query planner decisions caused by
+ incomplete or incorrect modifications to the <a href="fileformat2.html#stat1tab">sqlite_stat1</a>
+ table by the application.
+<li>Added the <a href="c3ref/db_config.html">sqlite3_db_config</a>(db,<a href="c3ref/c_dbconfig_defensive.html#sqlitedbconfigenableloadextension">SQLITE_DBCONFIG_ENABLE_LOAD_EXTENSION</a>) interface
+ which allows the <a href="c3ref/load_extension.html">sqlite3_load_extension()</a> C-API to be enabled while keeping the
+ <a href="lang_corefunc.html#load_extension">load_extension()</a> SQL function disabled for security.
+<li>Change the <a href="tempfiles.html#tempdir">temporary directory search algorithm</a> on Unix to allow directories with
+ write and execute permission, but without read permission, to serve as temporary
+ directories. Apply this same standard to the "." fallback directory.
+<p><b>Bug Fixes:</b>
+<li>Fix a problem with the multi-row one-pass DELETE optimization that was
+ causing it to compute incorrect answers with a self-referential subquery in
+ the WHERE clause. Fix for ticket
+ <a href="https://www.sqlite.org/src/info/dc6ebeda9396087">dc6ebeda9396087</a>
+<li>Fix a possible segfault with DELETE when table is a <a href="rowidtable.html">rowid table</a> with an
+ <a href="lang_createtable.html#rowid">INTEGER PRIMARY KEY</a> and the WHERE clause contains a OR and
+ the table has one or more indexes that are able to trigger the OR optimization,
+ but none of the indexes reference any table columns other than the INTEGER PRIMARY KEY.
+ Ticket <a href="https://www.sqlite.org/src/info/16c9801ceba49">16c9801ceba49</a>.
+<li>When checking for the WHERE-clause push-down optimization, verify that all terms
+ of the compound inner SELECT are non-aggregate, not just the last term. Fix for ticket
+ <a href="https://www.sqlite.org/src/info/f7f8c97e97597">f7f8c97e97597</a>.
+<li>Fix a locking race condition in Windows that can occur when two or more processes
+ attempt to recover the same <a href="fileformat2.html#hotjrnl">hot journal</a> at the same time.
+<p><b>Hashes:</b>
+<li>SQLITE_SOURCE_ID: "2016-05-18 10:57:30 fc49f556e48970561d7ab6a2f24fdd7d9eb81ff2"
+<li>SHA1 for sqlite3.c: 9b9171b1e6ce7a980e6b714e9c0d9112657ad552
+
+<p><b>Bug fixes backported into patch release 3.12.2 (2016-04-18):</b></p>
+
+<li>Fix a backwards compatibility problem in version 3.12.0 and 3.12.1:
+ Columns declared as <tt>"INTEGER" PRIMARY KEY</tt> (with quotes around
+ the datatype keyword) were not being recognized as an
+ <a href="lang_createtable.html#rowid">INTEGER PRIMARY KEY</a>, which resulted in an incompatible database file.
+ Ticket <a href="https://www.sqlite.org/src/info/7d7525cb01b68">7d7525cb01b68</a>
+<li>Fix a bug (present since <a href="#version_3_9_0">version 3.9.0</a>) that can cause the <a href="lang_delete.html">DELETE</a>
+ operation to miss rows if <a href="pragma.html#pragma_reverse_unordered_selects">PRAGMA reverse_unordered_selects</a> is turned on.
+ Ticket <a href="https://www.sqlite.org/src/info/a306e56ff68b8fa5">a306e56ff68b8fa5</a>
+<li>Fix a bug in the code generator that can cause incorrect results if
+ two or more <a href="vtab.html">virtual tables</a> are joined and the virtual table used in
+ outer loop of the join has an <a href="lang_expr.html#in_op">IN operator</a> constraint.
+<li>Correctly interpret negative "PRAGMA cache_size" values when determining
+ the cache size used for sorting large amounts of data.
+
+<p><b>Bug fixes backported into patch release 3.12.1 (2016-04-08):</b></p>
+
+<li>Fix a boundary condition error introduced by version 3.12.0
+ that can result in a crash during heavy <a href="lang_savepoint.html">SAVEPOINT</a> usage.
+ Ticket <a href="https://www.sqlite.org/src/info/7f7f8026eda38">7f7f8026eda38</a>.
+<li>Fix <a href="lang_createview.html">views</a> so that they inherit column datatypes from the
+ table that they are defined against, when possible.
+<li>Fix the query planner so that IS and IS NULL operators are able
+ to drive an index on a LEFT OUTER JOIN.
+
+</ol></p>
+<a name="version_3_12_2"></a>
+<h3>2016-04-18 (3.12.2)</h3><p><ol class='lessindent'>
+<li>Fix a backwards compatibility problem in version 3.12.0 and 3.12.1:
+ Columns declared as <tt>"INTEGER" PRIMARY KEY</tt> (with quotes around
+ the datatype keyword) were not being recognized as an
+ <a href="lang_createtable.html#rowid">INTEGER PRIMARY KEY</a>, which resulted in an incompatible database file.
+ Ticket <a href="https://www.sqlite.org/src/info/7d7525cb01b68">7d7525cb01b68</a>
+<li>Fix a bug (present since <a href="#version_3_9_0">version 3.9.0</a>) that can cause the <a href="lang_delete.html">DELETE</a>
+ operation to miss rows if <a href="pragma.html#pragma_reverse_unordered_selects">PRAGMA reverse_unordered_selects</a> is turned on.
+ Ticket <a href="https://www.sqlite.org/src/info/a306e56ff68b8fa5">a306e56ff68b8fa5</a>
+<li>Fix a bug in the code generator that can cause incorrect results if
+ two or more <a href="vtab.html">virtual tables</a> are joined and the virtual table used in
+ outer loop of the join has an <a href="lang_expr.html#in_op">IN operator</a> constraint.
+<li>Correctly interpret negative "PRAGMA cache_size" values when determining
+ the cache size used for sorting large amounts of data.
+<p><b>Hashes:</b>
+<li>SQLITE_SOURCE_ID: "2016-04-18 17:30:31 92dc59fd5ad66f646666042eb04195e3a61a9e8e"
+<li>SHA1 for sqlite3.c: de5a5898ebd3a3477d4652db143746d008b24c83
+
+</ol></p>
+<a name="version_3_12_1"></a>
+<h3>2016-04-08 (3.12.1)</h3><p><ol class='lessindent'>
+<li>Fix a boundary condition error introduced by version 3.12.0
+ that can result in a crash during heavy <a href="lang_savepoint.html">SAVEPOINT</a> usage.
+ Ticket <a href="https://www.sqlite.org/src/info/7f7f8026eda38">7f7f8026eda38</a>.
+<li>Fix <a href="lang_createview.html">views</a> so that they inherit column datatypes from the
+ table that they are defined against, when possible.
+<li>Fix the query planner so that IS and IS NULL operators are able
+ to drive an index on a LEFT OUTER JOIN.
+<p><b>Hashes:</b>
+<li>SQLITE_SOURCE_ID: "2016-04-08 15:09:49 fe7d3b75fe1bde41511b323925af8ae1b910bc4d"
+<li>SHA1 for sqlite3.c: ebb18593350779850e3e1a930eb84a70fca8c1d1
+
+</ol></p>
+<a name="version_3_9_3"></a>
+<h3>2016-04-01 (3.9.3)</h3><p><ol class='lessindent'>
+<li>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="#version_3_9_2">version 3.9.2</a> baseline.
+
+</ol></p>
+<a name="version_3_12_0"></a>
+<h3>2016-03-29 (3.12.0)</h3><p><ol class='lessindent'>
+<p><b>Potentially Disruptive Change:</b>
+<li>The <a href="compile.html#default_page_size">SQLITE_DEFAULT_PAGE_SIZE</a> is increased from 1024 to 4096.
+ The <a href="compile.html#default_cache_size">SQLITE_DEFAULT_CACHE_SIZE</a> is changed from 2000 to -2000 so
+ the same amount of cache memory is used by default.
+ See the application note on the
+ <a href="pgszchng2016.html">version 3.12.0 page size change</a> for further information.
+<p><b>Performance enhancements:</b>
+<li>Enhancements to the <a href="lemon.html">Lemon parser generator</a>
+ so that it creates a smaller and faster SQL parser.
+<li>Only create <a href="tempfiles.html#superjrnl">master journal</a> files if two or more attached databases are all
+ modified, do not have <a href="pragma.html#pragma_synchronous">PRAGMA synchronous</a> set to OFF, and
+ do not have the <a href="pragma.html#pragma_journal_mode">journal_mode</a> set to OFF, MEMORY, or WAL.
+<li>Only create <a href="tempfiles.html#stmtjrnl">statement journal</a> files when their size exceeds a threshold.
+ Otherwise the journal is held in memory and no I/O occurs. The threshold
+ can be configured at compile-time using <a href="compile.html#stmtjrnl_spill">SQLITE_STMTJRNL_SPILL</a> or at
+ start-time using <a href="c3ref/config.html">sqlite3_config</a>(<a href="c3ref/c_config_covering_index_scan.html#sqliteconfigstmtjrnlspill">SQLITE_CONFIG_STMTJRNL_SPILL</a>).
+<li>The query planner is able to optimize IN operators on <a href="vtab.html">virtual tables</a>
+ even if the <a href="vtab.html#xbestindex">xBestIndex</a> method does not set the
+ sqlite3_index_constraint_usage.omit flag of the
+ virtual table column to the left of the IN operator.
+<li>The query planner now does a better job of optimizing <a href="vtab.html">virtual table</a>
+ accesses in a 3-way or higher join where constraints on the virtual
+ table are split across two or more other tables of the join.
+<li>More efficient handling of <a href="appfunc.html">application-defined SQL functions</a>, especially
+ in cases where the application defines hundreds or thousands of
+ custom functions.
+<li>The query planner considers the LIMIT clause when estimating the cost
+ of ORDER BY.
+<li>The configure script (on unix) automatically detects
+ pread() and pwrite() and sets compile-time options to use those OS
+ interfaces if they are available.
+<li>Reduce the amount of memory needed to hold the schema.
+<li>Other miscellaneous micro-optimizations for improved performance and reduced
+ memory usage.
+<p><b>New Features:</b>
+<li>Added the <a href="c3ref/c_dbconfig_defensive.html#sqlitedbconfigenablefts3tokenizer">SQLITE_DBCONFIG_ENABLE_FTS3_TOKENIZER</a> option to <a href="c3ref/db_config.html">sqlite3_db_config()</a>
+ which allows the two-argument version of the <a href="fts3.html#f3tknzr">fts3_tokenizer()</a> SQL function to
+ be enabled or disabled at run-time.
+<li>Added the <a href="https://www.sqlite.org/src/artifact/d7cc99350?ln=403-443">sqlite3rbu_bp_progress()</a>
+ interface to the <a href="rbu.html">RBU</a> extension.
+<li>The <a href="pragma.html#pragma_defer_foreign_keys">PRAGMA defer_foreign_keys=ON</a> statement now also disables
+ <a href="foreignkeys.html#fk_actions">RESTRICT actions</a> on foreign key.
+<li>Added the <a href="c3ref/system_errno.html">sqlite3_system_errno()</a> interface.
+<li>Added the <a href="compile.html#default_synchronous">SQLITE_DEFAULT_SYNCHRONOUS</a> and <a href="compile.html#default_wal_synchronous">SQLITE_DEFAULT_WAL_SYNCHRONOUS</a>
+ compile-time options. The <a href="compile.html#default_synchronous">SQLITE_DEFAULT_SYNCHRONOUS</a> compile-time option
+ replaces the <a href="compile.html#extra_durable">SQLITE_EXTRA_DURABLE</a> option, which is no longer supported.
+<li>Enhanced the ".stats" command in the <a href="cli.html">command-line shell</a> to show more
+ information about I/O performance obtained from /proc, when available.
+<p><b>Bug fixes:</b>
+<li>Make sure the <a href="c3ref/get_auxdata.html">sqlite3_set_auxdata()</a> values from multiple triggers
+ within a single statement do not interfere with one another.
+ Ticket <a href="https://www.sqlite.org/src/info/dc9b1c91">dc9b1c91</a>.
+<li>Fix the code generator for expressions of the form "x IN (SELECT...)" where
+ the SELECT statement on the RHS is a correlated subquery.
+ Ticket <a href="https://www.sqlite.org/src/info/5e3c886796e5512e">5e3c886796e5512e</a>.
+<li>Fix a harmless TSAN warning associated with the <a href="c3ref/db_readonly.html">sqlite3_db_readonly()</a> interface.
+<p><b>Hashes:</b>
+<li>SQLITE_SOURCE_ID: "2016-03-29 10:14:15 e9bb4cf40f4971974a74468ef922bdee481c988b"
+<li>SHA1 for sqlite3.c: cba2be96d27cb51978cd4a200397a4ad178986eb
+
+</ol></p>
+<a name="version_3_11_1"></a>
+<h3>2016-03-03 (3.11.1)</h3><p><ol class='lessindent'>
+<li>Improvements to the Makefiles and build scripts used by VisualStudio.
+<li>Fix an <a href="fts5.html">FTS5</a> issue in which the 'optimize' command could cause index corruption.
+<li>Fix a buffer overread that might occur if <a href="fts5.html">FTS5</a> is used to query a corrupt
+ database file.
+<li>Increase the maximum "scope" value for the <a href="spellfix1.html">spellfix1</a> extension from 6 to 30.
+<li>SQLITE_SOURCE_ID: "2016-03-03 16:17:53 f047920ce16971e573bc6ec9a48b118c9de2b3a7"
+<li>SHA1 for sqlite3.c: 3da832fd2af36eaedb05d61a8f4c2bb9f3d54265
+
+</ol></p>
+<a name="version_3_11_0"></a>
+<h3>2016-02-15 (3.11.0)</h3><p><ol class='lessindent'>
+<p><b>General improvements:</b>
+<li>Enhanced <a href="wal.html">WAL mode</a> so that it works efficiently with transactions that are
+ larger than the <a href="pragma.html#pragma_cache_size">cache_size</a>.
+<li>Added the <a href="fts5.html#the_detail_option">FTS5 detail option</a>.
+<li>Added the "EXTRA" option to <a href="pragma.html#pragma_synchronous">PRAGMA synchronous</a> that does a sync of the
+ containing directory when a rollback journal is unlinked in DELETE mode,
+ for better durability. The <a href="compile.html#extra_durable">SQLITE_EXTRA_DURABLE</a> compile-time option enables
+ <a href="pragma.html#pragma_synchronous">PRAGMA synchronous=EXTRA</a> by default.
+<li>Enhanced the <a href="optoverview.html">query planner</a> so that it is able to use
+ a <a href="queryplanner.html#covidx">covering index</a> as part of the <a href="optoverview.html#or_opt">OR optimization</a>.
+<li>Avoid recomputing <a href="lang_createtable.html#notnullconst">NOT NULL</a> and <a href="lang_createtable.html#ckconst">CHECK constraints</a> on unchanged
+ columns in <a href="lang_update.html">UPDATE</a> statement.
+<li>Many micro-optimizations, resulting in a library that is
+ faster than the previous release.
+<p><b>Enhancements to the <a href="cli.html">command-line shell</a>:</b>
+<li>By default, the shell is now in "auto-explain" mode. The output of
+ <a href="lang_explain.html">EXPLAIN</a> commands is automatically formatted.
+<li>Added the ".vfslist" <a href="cli.html#dotcmd">dot-command</a>.
+<li>The <a href="compile.html#enable_explain_comments">SQLITE_ENABLE_EXPLAIN_COMMENTS</a> compile-time option is now turned
+ on by default in the standard builds.
+<p><b>Enhancements to the <a href="tclsqlite.html">TCL Interface</a>:</b>
+<li>If a database connection is opened with the "-uri 1" option, then
+ <a href="uri.html">URI filenames</a> are honored by the "backup" and "restore" commands.
+<li>Added the "-sourceid" option to the "sqlite3" command.
+<p><b>Makefile improvements:</b>
+<li>Improved pthreads detection in configure scripts.
+<li>Add the ability to do MSVC Windows builds from the <a href="download.html">amalgamation tarball</a>.
+<p><b>Bug fixes</b>
+<li>Fix an issue with incorrect sharing of VDBE temporary registers between
+ co-routines that could cause incorrect query results in obscure cases. Ticket
+ <a href="https://www.sqlite.org/src/info/d06a25c84454a">d06a25c84454a</a>.
+<li>Fix a problem in the <a href="c3ref/result_subtype.html">sqlite3_result_subtype()</a> interface that could
+ cause problems for the <a href="json1.html">json1</a> extension under obscure circumstances.
+ Fix for ticket
+ <a href="https://www.sqlite.org/src/info/f45ac567eaa9f9">f45ac567eaa9f9</a>.
+<li>Escape control characters in JSON strings. Fix for ticket
+ <a href="https://www.sqlite.org/src/info/ad2559db380abf8">ad2559db380abf8</a>.
+<li>Reenable the xCurrentTime and xGetLastError methods in the built-in
+ unix <a href="vfs.html">VFSes</a> as long as <a href="compile.html#omit_deprecated">SQLITE_OMIT_DEPRECATED</a> is not defined.
+<p><b>Backwards Compatibility:</b>
+<li>Because of continuing security concerns, the two-argument version
+ of the seldom-used and little-known <a href="fts3.html#f3tknzr">fts3_tokenizer()</a> function is
+ disabled unless SQLite is compiled with the <a href="compile.html#enable_fts3_tokenizer">SQLITE_ENABLE_FTS3_TOKENIZER</a>.
+<p><b>Hashes:</b>
+<li>SQLITE_SOURCE_ID: "2016-02-15 17:29:24 3d862f207e3adc00f78066799ac5a8c282430a5f"
+<li>SHA1 for sqlite3.c: df01436c5fcfe72d1a95bc172158219796e1a90b
+
+
+</ol></p>
+<a name="version_3_10_2"></a>
+<h3>2016-01-20 (3.10.2)</h3><p><ol class='lessindent'>
+<p><b>Critical bug fix:</b>
+<li>Version 3.10.0 introduced a case-folding bug in the <a href="lang_expr.html#like">LIKE</a> operator which is fixed
+ by this patch release. Ticket
+ <a href="https://www.sqlite.org/src/info/80369eddd5c94">80369eddd5c94</a>.
+<p><b>Other miscellaneous bug fixes:</b>
+<li>Fix a use-after-free that can occur when SQLite is compiled with -DSQLITE_HAS_CODEC.
+<li>Fix the build so that it works with -DSQLITE_OMIT_WAL.
+<li>Fix the configure script for the amalgamation so that the --readline option works again
+ on Raspberry PIs.
+<p><b>Hashes:</b>
+<li>SQLITE_SOURCE_ID: "2016-01-20 15:27:19 17efb4209f97fb4971656086b138599a91a75ff9"
+<li>SHA1 for sqlite3.c: f7088b19d97cd7a1c805ee95c696abd54f01de4f
+
+</ol></p>
+<a name="version_3_10_1"></a>
+<h3>2016-01-14 (3.10.1)</h3><p><ol class='lessindent'>
+<p><b>New feature:</b>
+<li>Add the <a href="c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntljournalpointer">SQLITE_FCNTL_JOURNAL_POINTER</a> file control.
+<p><b>Bug fix:</b>
+<li>Fix a 16-month-old bug in the query planner that could generate incorrect results
+ when a scalar subquery attempts to use the <a href="queryplanner.html#partialsort">block sorting</a> optimization. Ticket
+ <a href="https://www.sqlite.org/src/info/cb3aa0641d9a4">cb3aa0641d9a4</a>.
+<p><b>Hashes:</b>
+<li>SQLITE_SOURCE_ID: "2016-01-13 21:41:56 254419c36766225ca542ae873ed38255e3fb8588"
+<li>SHA1 for sqlite3.c: 1398ba8e4043550a533cdd0834bfdad1c9eab0f4
+
+</ol></p>
+<a name="version_3_10_0"></a>
+<h3>2016-01-06 (3.10.0)</h3><p><ol class='lessindent'>
+<p><b>General improvements:</b>
+<li>Added support for <a href="lang_expr.html#like">LIKE</a>, <a href="lang_expr.html#glob">GLOB</a>, and <a href="lang_expr.html#regexp">REGEXP</a> operators on <a href="vtab.html">virtual tables</a>.
+<li>Added the <a href="vtab.html#colUsed">colUsed field</a> to <a href="c3ref/index_info.html">sqlite3_index_info</a> for use by
+ the <a href="vtab.html#xbestindex">sqlite3_module.xBestIndex</a> method.
+<li>Enhance the <a href="pragma.html#pragma_cache_spill">PRAGMA cache_spill</a> statement to accept a 32-bit integer
+ parameter which is the threshold below which cache spilling is prohibited.
+<li>On unix, if a symlink to a database file is opened, then the corresponding
+ journal files are based on the actual filename, not the symlink name.
+<li>Added the "--transaction" option to <a href="sqldiff.html">sqldiff</a>.
+<li>Added the <a href="c3ref/db_cacheflush.html">sqlite3_db_cacheflush()</a> interface.
+<li>Added the <a href="c3ref/strlike.html">sqlite3_strlike()</a> interface.
+<li>When using <a href="mmap.html">memory-mapped I/O</a> map the database file read-only so that stray pointers
+ and/or array overruns in the application cannot accidentally modify the database file.
+<li>Added the <em>experimental</em> <a href="c3ref/snapshot_get.html">sqlite3_snapshot_get()</a>, <a href="c3ref/snapshot_open.html">sqlite3_snapshot_open()</a>,
+ and <a href="c3ref/snapshot_free.html">sqlite3_snapshot_free()</a> interfaces. These are subject to change or removal in
+ a subsequent release.
+<li>Enhance the <a href="lang_datefunc.html#localtime">'utc' modifier</a> in the <a href="lang_datefunc.html">date and time functions</a> so that it is a no-op if
+ the date/time is known to already be in UTC. (This is not a compatibility break since
+ the behavior has long been documented as "undefined" in that case.)
+<li>Added the <a href="json1.html#jgrouparray">json_group_array()</a> and <a href="json1.html#jgroupobject">json_group_object()</a> SQL functions in the
+ <a href="json1.html#jmini">json</a> extension.
+<li>Added the <a href="compile.html#like_doesnt_match_blobs">SQLITE_LIKE_DOESNT_MATCH_BLOBS</a> compile-time option.
+<li>Many small performance optimizations.
+<p><b>Portability enhancements:</b>
+<li>Work around a sign-extension bug in the optimizer of the HP C compiler on HP/UX.
+ <a href="https://www.sqlite.org/src/fdiff?sbs=1&v1=869c95b0fc73026d&v2=232c242a0ccb3d67">(details)</a>
+<p><b>Enhancements to the <a href="cli.html">command-line shell</a>:</b>
+<li>Added the ".changes ON|OFF" and ".vfsinfo" <a href="cli.html#dotcmd">dot-commands</a>.
+<li>Translate between MBCS and UTF8 when
+ running in <a href="https://en.wikipedia.org/wiki/Cmd.exe">cmd.exe</a> on Windows.
+<p><b>Enhancements to makefiles:</b>
+<li>Added the --enable-editline and --enable-static-shell options
+ to the various autoconf-generated configure scripts.
+<li>Omit all use of "awk" in the makefiles, to make building easier for MSVC users.
+<p><b>Important fixes:</b>
+<li>Fix inconsistent integer to floating-point comparison operations that
+ could result in a corrupt index if the index is created on a table
+ column that contains both large integers and floating point values
+ of similar magnitude. Ticket
+ <a href="https://www.sqlite.org/src/tktview?name=38a97a87a6">38a97a87a6</a>.
+<li>Fix an infinite-loop in the query planner that could occur on
+ malformed <a href="lang_with.html">common table expressions</a>.
+<li>Various bug fixes in the <a href="sqldiff.html">sqldiff</a> tool.
+<p><b>Hashes:</b>
+<li>SQLITE_SOURCE_ID: "2016-01-06 11:01:07 fd0a50f0797d154fefff724624f00548b5320566"
+<li>SHA1 for sqlite3.c: b92ca988ebb6df02ac0c8f866dbf3256740408ac
+
+
+</ol></p>
+<a name="version_3_9_2"></a>
+<h3>2015-11-02 (3.9.2)</h3><p><ol class='lessindent'>
+<li>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>.
+
+<li>SQLITE_SOURCE_ID: "2015-11-02 18:31:45 bda77dda9697c463c3d0704014d51627fceee328"
+<li>SHA1 for sqlite3.c: 1c4013876f50bbaa3e6f0f98e0147c76287684c1
+
+</ol></p>
+<a name="version_3_9_1"></a>
+<h3>2015-10-16 (3.9.1)</h3><p><ol class='lessindent'>
+<li>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.
+
+<li>SQLITE_SOURCE_ID: ""2015-10-16 17:31:12 767c1727fec4ce11b83f25b3f1bfcfe68a2c8b02"
+<li>SHA1 for sqlite3.c: 5e6d1873a32d82c2cf8581f143649940cac8ae49
+
+</ol></p>
+<a name="version_3_9_0"></a>
+<h3>2015-10-14 (3.9.0)</h3><p><ol class='lessindent'>
+<p><b>Policy Changes:</b>
+<li>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>.
+
+<li>SQLITE_SOURCE_ID: "2015-10-14 12:29:53 a721fc0d89495518fe5612e2e3bbc60befd2e90d"
+<li>SHA1 for sqlite3.c: c03e47e152ddb9c342b84ffb39448bf4a2bd4288
+
+</ol></p>
+<a name="version_3_8_11_1"></a>
+<h3>2015-07-29 (3.8.11.1)</h3><p><ol class='lessindent'>
+<li>Restore an undocumented side-effect of <a href="pragma.html#pragma_cache_size">PRAGMA cache_size</a>: force
+ the database schema to be parsed if the database has not been previously accessed.
+<li>Fix a long-standing problem in <a href="c3ref/changes.html">sqlite3_changes()</a> for <a href="withoutrowid.html">WITHOUT ROWID</a>
+ tables that was reported a few hours after the 3.8.11 release.
+<li>SQLITE_SOURCE_ID: "2015-07-29 20:00:57 cf538e2783e468bbc25e7cb2a9ee64d3e0e80b2f"
+<li>SHA1 for sqlite3.c: 3be71d99121fe5b17f057011025bcf84e7cc6c84
+
+</ol></p>
+<a name="version_3_8_11"></a>
+<h3>2015-07-27 (3.8.11)</h3><p><ol class='lessindent'>
+<li>Added the experimental <a href="rbu.html">RBU</a> extension. Note that this extension is experimental
+ and subject to change in incompatible ways.
+<li>Added the experimental <a href="fts5.html">FTS5</a> extension. Note that this extension is experimental
+ and subject to change in incompatible ways.
+<li>Added the <a href="c3ref/value_dup.html">sqlite3_value_dup()</a> and <a href="c3ref/value_dup.html">sqlite3_value_free()</a> interfaces.
+<li>Enhance the <a href="spellfix1.html">spellfix1</a> extension to support <a href="lang_conflict.html">ON CONFLICT</a> clauses.
+<li>The <a href="lang_expr.html#isisnot">IS operator</a> is now able to drive indexes.
+<li>Enhance the query planner to permit <a href="optoverview.html#autoindex">automatic indexing</a> on FROM-clause
+ subqueries that are implemented by co-routine.
+<li>Disallow the use of "rowid" in <a href="lang_with.html">common table expressions</a>.
+<li>Added the <a href="pragma.html#pragma_cell_size_check">PRAGMA cell_size_check</a> command for better and earlier
+ detection of database file corruption.
+<li>Added the <a href="fts3.html#matchinfo-b">matchinfo 'b' flag</a> to the <a href="fts3.html#matchinfo">matchinfo()</a> function in <a href="fts3.html">FTS3</a>.
+<li>Improved fuzz-testing of database files, with fixes for problems found.
+<li>Add the fuzzcheck test program and automatically run this program
+ using both SQL and database test cases on "make test".
+<li>Added the <a href="c3ref/c_mutex_fast.html">SQLITE_MUTEX_STATIC_VFS1</a> static mutex and use it in the
+ Windows <a href="vfs.html">VFS</a>.
+<li>The <a href="c3ref/profile.html">sqlite3_profile()</a> callback is invoked (by <a href="c3ref/reset.html">sqlite3_reset()</a> or
+ <a href="c3ref/finalize.html">sqlite3_finalize()</a>) for statements that did not run to completion.
+<li>Enhance the page cache so that it can preallocate a block of memory to
+ use for the initial set page cache lines. Set the default preallocation
+ to 100 pages. Yields about a 5% performance increase on common workloads.
+<li>Miscellaneous micro-optimizations result in 22.3% more work for the same
+ number of CPU cycles relative to the previous release.
+ SQLite now runs twice as fast as <a href="#version_3_8_0">version 3.8.0</a> and three times as
+ fast as <a href="#version_3_3_9">version 3.3.9</a>.
+ (Measured using
+ <a href="http://valgrind.org/docs/manual/cg-manual.html">cachegrind</a> on the
+ <a href="http://www.sqlite.org/src/artifact/83f6b3318f7ee">speedtest1.c</a> workload on
+ Ubuntu 14.04 x64 with gcc 4.8.2 and -Os. Your performance may vary.)
+<li>Added the <a href="c3ref/result_blob.html">sqlite3_result_zeroblob64()</a> and <a href="c3ref/bind_blob.html">sqlite3_bind_zeroblob64()</a>
+ interfaces.
+<p><b>Important bug fixes:</b>
+<li>Fix <a href="lang_createtable.html#createtabas">CREATE TABLE AS</a> so that columns of type TEXT never end up
+ holding an INT value. Ticket
+ <a href="https://www.sqlite.org/src/info/f2ad7de056ab1dc9200">f2ad7de056ab1dc9200</a>
+<li>Fix <a href="lang_createtable.html#createtabas">CREATE TABLE AS</a> so that it does not leave NULL entries in the
+ <a href="schematab.html">sqlite_master table</a> if the SELECT statement on the right-hand side
+ aborts with an error. Ticket
+ <a href="https://www.sqlite.org/src/info/873cae2b6e25b">873cae2b6e25b</a>
+<li>Fix the <a href="optoverview.html#skipscan">skip-scan optimization</a> so that it works correctly when
+ the <a href="optoverview.html#or_opt">OR optimization</a> is used on <a href="withoutrowid.html">WITHOUT ROWID</a> tables. Ticket
+ <a href="https://www.sqlite.org/src/info/8fd39115d8f46">8fd39115d8f46</a>
+<li>Fix the <a href="c3ref/memory_highwater.html">sqlite3_memory_used()</a> and <a href="c3ref/memory_highwater.html">sqlite3_memory_highwater()</a> interfaces
+ so that they actually do provide a 64-bit answer.
+
+<p><b>Hashes:</b>
+<li>SQLITE_SOURCE_ID: "2015-07-27 13:49:41 b8e92227a469de677a66da62e4361f099c0b79d0"
+<li>SHA1 for sqlite3.c: 719f6891abcd9c459b5460b191d731cd12a3643e
+
+</ol></p>
+<a name="version_3_8_10_2"></a>
+<h3>2015-05-20 (3.8.10.2)</h3><p><ol class='lessindent'>
+<li>Fix an index corruption issue introduced by <a href="#version_3_8_7">version 3.8.7</a>. An index
+ with a TEXT key can be corrupted by an <a href="lang_insert.html">INSERT</a> into the corresponding
+ table if the table has two nested triggers that convert the key value to INTEGER
+ and back to TEXT again.
+ Ticket <a href="https://www.sqlite.org/src/info/34cd55d68e0e6e7c9a0711aab81a2ee3c354b4c0">34cd55d68e0</a>
+
+<li>SQLITE_SOURCE_ID: "2015-05-20 18:17:19 2ef4f3a5b1d1d0c4338f8243d40a2452cc1f7fe4"
+<li>SHA1 for sqlite3.c: 638abb77965332c956dbbd2c8e4248e84da4eb63
+
+</ol></p>
+<a name="version_3_8_10_1"></a>
+<h3>2015-05-09 (3.8.10.1)</h3><p><ol class='lessindent'>
+<li>Make <a href="c3ref/compileoption_get.html">sqlite3_compileoption_used()</a> responsive to the <a href="compile.html#enable_dbstat_vtab">SQLITE_ENABLE_DBSTAT_VTAB</a>
+ compile-time option.
+<li>Fix a harmless warning in the <a href="cli.html">command-line shell</a> on some versions of MSVC.
+<li>Fix minor issues with the <a href="dbstat.html">dbstat virtual table</a>.
+
+<li>SQLITE_SOURCE_ID: "2015-05-09 12:14:55 05b4b1f2a937c06c90db70c09890038f6c98ec40"
+<li>SHA1 for sqlite3.c: 85e4e1c08c7df28ef61bb9759a0d466e0eefbaa2
+
+</ol></p>
+<a name="version_3_8_10"></a>
+<h3>2015-05-07 (3.8.10)</h3><p><ol class='lessindent'>
+<li>Added the <a href="sqldiff.html">sqldiff.exe</a> utility program for computing the differences between two
+ SQLite database files.
+<li>Added the <a href="fts3.html#matchinfo-y">matchinfo y flag</a> to the
+ <a href="fts3.html#matchinfo">matchinfo()</a> function of <a href="fts3.html">FTS3</a>.
+<li>Performance improvements for <a href="lang_select.html#orderby">ORDER BY</a>, <a href="lang_vacuum.html">VACUUM</a>, <a href="lang_createindex.html">CREATE INDEX</a>,
+ <a href="pragma.html#pragma_integrity_check">PRAGMA integrity_check</a>, and <a href="pragma.html#pragma_quick_check">PRAGMA quick_check</a>.
+<li>Fix many obscure problems discovered while <a href="testing.html#fuzztesting">SQL fuzzing</a>.
+<li>Identify all methods for important objects in the interface documentation.
+ (<a href="c3ref/context.html">example</a>)
+<li>Made the <a href="testing.html#aflfuzz">American Fuzzy Lop fuzzer</a>
+ a standard part of SQLite's <a href="testing.html">testing strategy</a>.
+<li>Add the ".binary" and ".limits" commands to the <a href="cli.html">command-line shell</a>.
+<li>Make the <a href="dbstat.html">dbstat virtual table</a> part of standard builds when
+ compiled with the <a href="compile.html#enable_dbstat_vtab">SQLITE_ENABLE_DBSTAT_VTAB</a> option.
+
+<li>SQLITE_SOURCE_ID: "2015-05-07 11:53:08 cf975957b9ae671f34bb65f049acf351e650d437"
+<li>SHA1 for sqlite3.c: 0b34f0de356a3f21b9dfc761f3b7821b6353c570
+
+</ol></p>
+<a name="version_3_8_9"></a>
+<h3>2015-04-08 (3.8.9)</h3><p><ol class='lessindent'>
+<li>Add VxWorks-7 as an officially supported and tested platform.
+<li>Added the <a href="c3ref/status.html">sqlite3_status64()</a> interface.
+<li>Fix memory size tracking so that it works even if SQLite uses more
+ than 2GiB of memory.
+<li>Added the <a href="pragma.html#pragma_index_xinfo">PRAGMA index_xinfo</a> command.
+<li>Fix a potential 32-bit integer overflow problem in the
+ <a href="c3ref/blob_read.html">sqlite3_blob_read()</a> and <a href="c3ref/blob_write.html">sqlite3_blob_write()</a> interfaces.
+<li>Ensure that prepared statements automatically reset on extended
+ error codes of SQLITE_BUSY and SQLITE_LOCKED even when compiled
+ using <a href="compile.html#omit_autoreset">SQLITE_OMIT_AUTORESET</a>.
+<li>Correct miscounts in the sqlite3_analyzer.exe utility related
+ to WITHOUT ROWID tables.
+<li>Added the ".dbinfo" command to the <a href="cli.html">command-line shell</a>.
+<li>Improve the performance of fts3/4 queries that use the OR operator
+ and at least one auxiliary fts function.
+<li>Fix a bug in the fts3 snippet() function causing it to omit
+ leading separator characters from snippets that begin with the
+ first token in a column.
+<li>SQLITE_SOURCE_ID: "2015-04-08 12:16:33 8a8ffc862e96f57aa698f93de10dee28e69f6e09"
+<li>SHA1 for sqlite3.c: 49f1c3ae347e1327b5aaa6c7f76126bdf09c6f42
+
+</ol></p>
+<a name="version_3_8_8_3"></a>
+<h3>2015-02-25 (3.8.8.3)</h3><p><ol class='lessindent'>
+<li>Fix a bug (ticket
+ <a href="https://www.sqlite.org/src/info/2326c258d02ead33">2326c258d02ead33</a>) that can lead
+ to incorrect results if the qualifying constraint of a <a href="partialindex.html">partial index</a> appears in the
+ ON clause of a LEFT JOIN.
+<li>Added the ability to link against the
+ "<a href="https://github.com/antirez/linenoise">linenoise</a>"
+ command-line editing library in unix builds of the <a href="cli.html">command-line shell</a>.
+
+<li>SQLITE_SOURCE_ID: "2015-02-25 13:29:11 9d6c1880fb75660bbabd693175579529785f8a6b"
+<li>SHA1 for sqlite3.c: 74ee38c8c6fd175ec85a47276dfcefe8a262827a
+
+</ol></p>
+<a name="version_3_8_8_2"></a>
+<h3>2015-01-30 (3.8.8.2)</h3><p><ol class='lessindent'>
+<li>Enhance <a href="c3ref/wal_checkpoint_v2.html">sqlite3_wal_checkpoint_v2(TRUNCATE)</a> interface so that it truncates the
+ WAL file even if there is no checkpoint work to be done.
+
+<li>SQLITE_SOURCE_ID: "2015-01-30 14:30:45 7757fc721220e136620a89c9d28247f28bbbc098"
+<li>SHA1 for sqlite3.c: 85ce79948116aa9a087ec345c9d2ce2c1d3cd8af
+
+
+</ol></p>
+<a name="version_3_8_8_1"></a>
+<h3>2015-01-20 (3.8.8.1)</h3><p><ol class='lessindent'>
+<li>Fix a bug in the sorting logic, present since version 3.8.4, that can cause
+ output to appear in the wrong order on queries that contains an ORDER BY clause,
+ a LIMIT clause, and that have approximately 60 or more columns in the result set.
+ Ticket <a href="https://www.sqlite.org/src/tktview?name=f97c4637102a3ae72b79">f97c4637102a3ae72b79</a>.
+
+<li>SQLITE_SOURCE_ID: "2015-01-20 16:51:25 f73337e3e289915a76ca96e7a05a1a8d4e890d55"
+<li>SHA1 for sqlite3.c: 33987fb50dcc09f1429a653d6b47672f5a96f19e
+
+</ol></p>
+<a name="version_3_8_8"></a>
+<h3>2015-01-16 (3.8.8)</h3><p><ol class='lessindent'>
+<p><b>New Features:</b>
+<li>Added the <a href="pragma.html#pragma_data_version">PRAGMA data_version</a> command that can be used to determine if
+ a database file has been modified by another process.
+<li>Added the <a href="c3ref/c_checkpoint_full.html">SQLITE_CHECKPOINT_TRUNCATE</a> option to the
+ <a href="c3ref/wal_checkpoint_v2.html">sqlite3_wal_checkpoint_v2()</a> interface, with corresponding enhancements
+ to <a href="pragma.html#pragma_wal_checkpoint">PRAGMA wal_checkpoint</a>.
+<li>Added the <a href="c3ref/stmt_scanstatus.html">sqlite3_stmt_scanstatus()</a> interface, available only when
+ compiled with <a href="compile.html#enable_stmt_scanstatus">SQLITE_ENABLE_STMT_SCANSTATUS</a>.
+<li>The <a href="c3ref/table_column_metadata.html">sqlite3_table_column_metadata()</a> is enhanced to work correctly on
+ <a href="withoutrowid.html">WITHOUT ROWID</a> tables and to check for the existence of a
+ a table if the column name parameter is NULL. The interface is now
+ also included in the build by default, without requiring
+ the <a href="compile.html#enable_column_metadata">SQLITE_ENABLE_COLUMN_METADATA</a> compile-time option.
+<li>Added the <a href="compile.html#enable_api_armor">SQLITE_ENABLE_API_ARMOR</a> compile-time option.
+<li>Added the <a href="compile.html#reverse_unordered_selects">SQLITE_REVERSE_UNORDERED_SELECTS</a> compile-time option.
+<li>Added the <a href="compile.html#sorter_pmasz">SQLITE_SORTER_PMASZ</a> compile-time option and <a href="c3ref/c_config_covering_index_scan.html#sqliteconfigpmasz">SQLITE_CONFIG_PMASZ</a>
+ start-time option.
+<li>Added the <a href="c3ref/c_config_covering_index_scan.html#sqliteconfigpcachehdrsz">SQLITE_CONFIG_PCACHE_HDRSZ</a> option to <a href="c3ref/config.html">sqlite3_config()</a>
+ which makes it easier for applications to determine the appropriate
+ amount of memory for use with <a href="c3ref/c_config_covering_index_scan.html#sqliteconfigpagecache">SQLITE_CONFIG_PAGECACHE</a>.
+<li>The number of rows in a <a href="lang_select.html#values">VALUES clause</a> is no longer limited by
+ <a href="c3ref/c_limit_attached.html#sqlitelimitcompoundselect">SQLITE_LIMIT_COMPOUND_SELECT</a>.
+<li>Added the <a href="https://www.sqlite.org/src/artifact/f971962e92ebb8b0">eval.c</a>
+ <a href="loadext.html">loadable extension</a> that implements an eval() SQL function that will recursively
+ evaluate SQL.
+<p><b>Performance Enhancements:</b>
+<li>Reduce the number of memcpy() operations involved in balancing a b-tree,
+ for 3.2% overall performance boost.
+<li>Improvements to cost estimates for the <a href="optoverview.html#skipscan">skip-scan optimization</a>.
+<li>The <a href="optoverview.html#autoindex">automatic indexing</a> optimization is now capable of generating
+ a <a href="partialindex.html">partial index</a> if that is appropriate.
+<p><b>Bug fixes:</b>
+<li>Ensure durability following a power loss with
+ "PRAGMA journal_mode=TRUNCATE" by calling fsync() right after truncating
+ the journal file.
+<li>The query planner now recognizes that any column in the right-hand
+ table of a LEFT JOIN can be NULL, even if that column has a NOT NULL
+ constraint. Avoid trying to optimize out NULL tests in those cases.
+ Fix for ticket
+ <a href="https://www.sqlite.org/src/info/6f2222d550f5b0ee7ed">6f2222d550f5b0ee7ed</a>.
+<li>Make sure ORDER BY puts rows in ascending order even if the DISTINCT
+ operator is implemented using a descending index. Fix for ticket
+ <a href="https://www.sqlite.org/src/info/c5ea805691bfc4204b1cb9e">c5ea805691bfc4204b1cb9e</a>.
+<li>Fix data races that might occur under stress when running with many threads
+ in <a href="sharedcache.html">shared cache mode</a> where some of the threads are opening and
+ closing connections.
+<li>Fix obscure crash bugs found by
+ <a href="http://lcamtuf.coredump.cx/afl/">american fuzzy lop</a>. Ticket
+ <a href="https://www.sqlite.org/src/info/a59ae93ee990a55">a59ae93ee990a55</a>.
+<li>Work around a GCC optimizer bug (for gcc 4.2.1 on MacOS 10.7) that caused the
+ <a href="rtree.html">R-Tree extension</a> to compute incorrect results when compiled with -O3.
+<p><b>Other changes:</b>
+<li>Disable the use of the strchrnul() C-library routine unless it is
+ specifically enabled using the -DHAVE_STRCHRNULL compile-time option.
+<li>Improvements to the effectiveness and accuracy of the
+ <a href="lang_corefunc.html#likelihood">likelihood()</a>, <a href="lang_corefunc.html#likely">likely()</a>, and <a href="lang_corefunc.html#unlikely">unlikely()</a> SQL hint functions.
+
+<li>SQLITE_SOURCE_ID: "2015-01-16 12:08:06 7d68a42face3ab14ed88407d4331872f5b243fdf"
+<li>SHA1 for sqlite3.c: 91aea4cc722371d58aae3d22e94d2a4165276905
+
+</ol></p>
+<a name="version_3_8_7_4"></a>
+<h3>2014-12-09 (3.8.7.4)</h3><p><ol class='lessindent'>
+<li>Bug fix: Add in a mutex that was omitted from the previous release.
+<li>SQLITE_SOURCE_ID: "2014-12-09 01:34:36 f66f7a17b78ba617acde90fc810107f34f1a1f2e"
+<li>SHA1 for sqlite3.c: 0a56693a3c24aa3217098afab1b6fecccdedfd23
+
+</ol></p>
+<a name="version_3_8_7_3"></a>
+<h3>2014-12-05 (3.8.7.3)</h3><p><ol class='lessindent'>
+<li>Bug fix: Ensure the cached KeyInfo objects (an internal abstraction not visible to the
+ application) do not go stale when operating in <a href="sharedcache.html">shared cache mode</a> and frequently closing
+ and reopening some database connections while leaving other database connections on the
+ same shared cache open continuously. Ticket
+ <a href="https://www.sqlite.org/src/info/e4a18565a36884b00edf">e4a18565a36884b00edf</a>.
+<li>Bug fix: Recognize that any column in the right-hand table of a LEFT JOIN can be
+ NULL even if the column has a NOT NULL constraint. Do not apply optimizations that
+ assume the column is never NULL. Ticket
+ <a href="https://www.sqlite.org/src/info/6f2222d550f5b0ee7ed">6f2222d550f5b0ee7ed</a>.
+
+<li>SQLITE_SOURCE_ID: "2014-12-05 22:29:24 647e77e853e81a5effeb4c33477910400a67ba86"
+<li>SHA1 for sqlite3.c: 3ad2f5ba3a4a3e3e51a1dac9fda9224b359f0261
+
+</ol></p>
+<a name="version_3_8_7_2"></a>
+<h3>2014-11-18 (3.8.7.2)</h3><p><ol class='lessindent'>
+<li>Enhance the <a href="lang_transaction.html">ROLLBACK</a> command so that pending queries are allowed to continue as long
+ as the schema is unchanged. Formerly, a ROLLBACK would cause all pending queries to
+ fail with an <a href="rescode.html#abort">SQLITE_ABORT</a> or <a href="rescode.html#abort_rollback">SQLITE_ABORT_ROLLBACK</a> error. That error is still returned
+ if the ROLLBACK modifies the schema.
+<li>Bug fix: Make sure that NULL results from OP_Column are fully and completely NULL and
+ do not have the MEM_Ephem bit set.
+ Ticket <a href="http://www.sqlite.org/src/info/094d39a4c95ee4">094d39a4c95ee4</a>.
+<li>Bug fix: The %c format in sqlite3_mprintf() is able to handle precisions greater than 70.
+<li>Bug fix: Do not automatically remove the DISTINCT keyword from a SELECT that forms
+ the right-hand side of an IN operator since it is necessary if the SELECT also
+ contains a LIMIT.
+ Ticket <a href="http://www.sqlite.org/src/info/db87229497">db87229497</a>.
+
+<li>SQLITE_SOURCE_ID: "2014-11-18 20:57:56 2ab564bf9655b7c7b97ab85cafc8a48329b27f93"
+<li>SHA1 for sqlite3.c: b2a68d5783f48dba6a8cb50d8bf69b238c5ec53a
+
+</ol></p>
+<a name="version_3_8_7_1"></a>
+<h3>2014-10-29 (3.8.7.1)</h3><p><ol class='lessindent'>
+<li>In <a href="pragma.html#pragma_journal_mode">PRAGMA journal_mode=TRUNCATE</a> mode, call fsync() immediately after truncating
+ the journal file to ensure that the transaction is durable across a power loss.
+<li>Fix an assertion fault that can occur when updating the NULL value of a field
+ at the end of a table that was added using <a href="lang_altertable.html">ALTER TABLE ADD COLUMN</a>.
+<li>Do not attempt to use the strchrnul() function from the standard C library unless
+ the HAVE_STRCHRNULL compile-time option is set.
+<li>Fix a couple of problems associated with running an UPDATE or DELETE on a
+ <a href="lang_createview.html">VIEW</a> with a <a href="lang_createtable.html#rowid">rowid</a> in the WHERE clause.
+
+<li>SQLITE_SOURCE_ID: "2014-10-29 13:59:56 3b7b72c4685aa5cf5e675c2c47ebec10d9704221"
+<li>SHA1 for sqlite3.c: 2d25bd1a73dc40f538f3a81c28e6efa5999bdf0c
+
+</ol></p>
+<a name="version_3_8_7"></a>
+<h3>2014-10-17 (3.8.7)</h3><p><ol class='lessindent'>
+<p><b>Performance Enhancements:</b>
+<li>Many micro-optimizations result in 20.3% more work for the same number
+ of CPU cycles relative to the previous release.
+ The cumulative performance increase since <a href="#version_3_8_0">version 3.8.0</a> is 61%.
+ (Measured using
+ <a href="http://valgrind.org/docs/manual/cg-manual.html">cachegrind</a> on the
+ <a href="http://www.sqlite.org/src/artifact/83f6b3318f7ee">speedtest1.c</a> workload on
+ Ubuntu 13.10 x64 with gcc 4.8.1 and -Os. Your performance may vary.)
+<li>The sorter can use auxiliary helper threads to increase real-time response.
+ This feature is off by default and may be
+ enabled using the <a href="pragma.html#pragma_threads">PRAGMA threads</a> command or the <a href="compile.html#default_worker_threads">SQLITE_DEFAULT_WORKER_THREADS</a>
+ compile-time option.
+<li>Enhance the <a href="optoverview.html#skipscan">skip-scan</a> optimization so that it is able to skip index terms that
+ occur in the middle of the index, not just as the left-hand side of the index.
+<li>Improved optimization of <a href="lang_expr.html#castexpr">CAST</a> operators.
+<li>Various improvements in how the query planner uses <a href="fileformat2.html#stat4tab">sqlite_stat4</a>
+ information to estimate plan costs.
+<p><b>New Features:</b>
+<li>Added new interfaces with 64-bit length parameters:
+ <a href="c3ref/free.html">sqlite3_malloc64()</a>,
+ <a href="c3ref/free.html">sqlite3_realloc64()</a>,
+ <a href="c3ref/bind_blob.html">sqlite3_bind_blob64()</a>,
+ <a href="c3ref/result_blob.html">sqlite3_result_blob64()</a>,
+ <a href="c3ref/bind_blob.html">sqlite3_bind_text64()</a>, and
+ <a href="c3ref/result_blob.html">sqlite3_result_text64()</a>.
+<li>Added the new interface <a href="c3ref/free.html">sqlite3_msize()</a> that returns the size of a memory allocation
+ obtained from <a href="c3ref/free.html">sqlite3_malloc64()</a> and its variants.
+<li>Added the <a href="c3ref/c_limit_attached.html#sqlitelimitworkerthreads">SQLITE_LIMIT_WORKER_THREADS</a> option to <a href="c3ref/limit.html">sqlite3_limit()</a> and
+ <a href="pragma.html#pragma_threads">PRAGMA threads</a> command for configuring the number of available worker threads.
+<li>The <a href="spellfix1.html">spellfix1</a> extension allows the application to optionally specify the rowid for
+ each INSERT.
+<li>Added the <a href="http://www.sqlite.org/src/doc/trunk/ext/userauth/user-auth.txt">User Authentication</a>
+ extension.
+<p><b>Bug Fixes:</b>
+<li>Fix a bug in the <a href="partialindex.html">partial index</a> implementation that might result in an incorrect
+ answer if a partial index is used in a subquery or in a <a href="lang_createview.html">view</a>.
+ Ticket <a href="http://www.sqlite.org/src/info/98d973b8f5">98d973b8f5</a>.
+<li>Fix a query planner bug that might cause a table to be scanned in the wrong direction
+ (thus reversing the order of output) when a DESC index is used to implement the ORDER BY
+ clause on a query that has an identical GROUP BY clause.
+ Ticket <a href="http://www.sqlite.org/src/info/ba7cbfaedc7e6">ba7cbfaedc7e6</a>.
+<li>Fix a bug in <a href="c3ref/profile.html">sqlite3_trace()</a> that was causing it to sometimes fail to print
+ an SQL statement if that statement needed to be re-prepared.
+ Ticket <a href="http://www.sqlite.org/src/info/11d5aa455e0d98f3c1e6a08">11d5aa455e0d98f3c1e6a08</a>
+<li>Fix a faulty assert() statement.
+ Ticket <a href="http://www.sqlite.org/src/info/369d57fb8e5ccdff06f1">369d57fb8e5ccdff06f1</a>
+<p><b>Test, Debug, and Analysis Changes:</b>
+<li>Show ASCII-art abstract syntax tree diagrams using the ".selecttrace"
+ and ".wheretrace" commands in the
+ <a href="cli.html">command-line shell</a> when compiled with <a href="compile.html#debug">SQLITE_DEBUG</a>, SQLITE_ENABLE_SELECTTRACE,
+ and SQLITE_ENABLE_WHERETRACE. Also provide the sqlite3TreeViewExpr() and
+ sqlite3TreeViewSelect() entry points that can be invoked from with the
+ debugger to show the parse tree when stopped at a breakpoint.
+<li>Drop support for SQLITE_ENABLE_TREE_EXPLAIN. The SELECTTRACE mechanism provides
+ more useful diagnostics information.
+<li>New options to the <a href="cli.html">command-line shell</a> for configuring auxiliary
+ memory usage: --pagecache, --lookaside, and --scratch.
+<li>SQLITE_SOURCE_ID: "2014-10-17 11:24:17 e4ab094f8afce0817f4074e823fabe59fc29ebb4"
+<li>SHA1 for sqlite3.c: 56dcf5e931a9e1fa12fc2d600cd91d3bf9b639cd
+
+
+</ol></p>
+<a name="version_3_8_6"></a>
+<h3>2014-08-15 (3.8.6)</h3><p><ol class='lessindent'>
+<li>Added support for <a href="lang_expr.html#hexint">hexadecimal integer literals</a> in the SQL parser.
+ (Ex: 0x123abc)
+<li>Enhanced the <a href="pragma.html#pragma_integrity_check">PRAGMA integrity_check</a> command to detect <a href="lang_createtable.html#uniqueconst">UNIQUE</a> and
+ <a href="lang_createtable.html#notnullconst">NOT NULL</a> constraint violations.
+<li>Increase the maximum value of <a href="limits.html#max_attached">SQLITE_MAX_ATTACHED</a> from 62 to 125.
+<li>Increase the timeout in <a href="wal.html">WAL mode</a> before issuing an <a href="rescode.html#protocol">SQLITE_PROTOCOL</a>
+ error from 1 second to 10 seconds.
+<li>Added the <a href="lang_corefunc.html#likely">likely(X)</a> SQL function.
+<li>The <a href="fts3.html#unicode61">unicode61</a> tokenizer is now included in <a href="fts3.html#fts4">FTS4</a> by default.
+<li>Trigger automatic reprepares on all prepared statements when <a href="lang_analyze.html">ANALYZE</a> is
+ run.
+<li>Added a new
+ <a href="loadext.html">loadable extension</a> source code file to the source tree:
+ <a href="http://www.sqlite.org/src/finfo?name=ext/misc/fileio.c">fileio.c</a>
+<li>Add extension functions <a href="cli.html#fileio">readfile(X) and writefile(X,Y)</a>
+ (using code copy/pasted from fileio.c in the previous bullet) to the
+ <a href="cli.html">command-line shell</a>.
+<li>Added the <a href="cli.html#fullschema">.fullschema</a> dot-command to the <a href="cli.html">command-line shell</a>.
+<p><b>Performance Enhancements:</b>
+<li>Deactivate the <a href="lang_select.html#distinct">DISTINCT</a> keyword on subqueries on the
+ right-hand side of the <a href="lang_expr.html#in_op">IN operator</a>.
+<li>Add the capability of evaluating an <a href="lang_expr.html#in_op">IN operator</a> as a sequence
+ of comparisons as an alternative to using a table lookup. Use the sequence
+ of comparisons implementation in circumstances where it is likely to be
+ faster, such as when the right-hand side of the IN operator
+ is small and/or changes frequently.
+<li>The query planner now uses <a href="fileformat2.html#stat4tab">sqlite_stat4</a> information (created by <a href="lang_analyze.html">ANALYZE</a>)
+ to help determine if the <a href="optoverview.html#skipscan">skip-scan optimization</a> is appropriate.
+<li>Ensure that the query planner never tries to use a self-made transient
+ index in place of a schema-defined index.
+<li>Other minor tweaks to improve the quality of <a href="opcode.html">VDBE</a> code.
+<p><b>Bug Fixes:</b>
+<li>Fix a bug in <a href="lang_createindex.html">CREATE UNIQUE INDEX</a>, introduced when <a href="withoutrowid.html">WITHOUT ROWID</a>
+ support added in version 3.8.2, that allows a non-unique NOT NULL column to be
+ given a UNIQUE index.
+ Ticket <a href="http://www.sqlite.org/src/info/9a6daf340df99ba93c">9a6daf340df99ba93c</a>
+<li>Fix a bug in <a href="rtree.html">R-Tree extension</a>, introduced in the previous release,
+ that can cause an
+ incorrect results for queries that use the rowid of the R-Tree on the
+ left-hand side of an <a href="lang_expr.html#in_op">IN operator</a>.
+ Ticket <a href="http://www.sqlite.org/src/info/d2889096e7bdeac6">d2889096e7bdeac6</a>.
+<li>Fix the <a href="c3ref/stmt_busy.html">sqlite3_stmt_busy()</a> interface so that it gives the correct answer
+ for <a href="lang_transaction.html">ROLLBACK</a> statements that have been stepped but never reset.
+<li>Fix a bug in that would cause a null pointer to be dereferenced
+ if a column with a DEFAULT that is an aggregate function tried to usee its
+ DEFAULT.
+ Ticket <a href="http://www.sqlite.org/src/info/3a88d85f36704eebe1">3a88d85f36704eebe1</a>
+<li>CSV output from the <a href="cli.html">command-line shell</a> now always uses CRNL for the
+ row separator and avoids inserting CR in front of NLs contained in
+ data.
+<li>Fix a <a href="datatype3.html#affinity">column affinity</a> problem with the <a href="lang_expr.html#in_op">IN operator</a>.
+ Ticket <a href="http://www.sqlite.org/src/info/9a8b09f8e6">9a8b09f8e6</a>.
+<li>Fix the <a href="lang_analyze.html">ANALYZE</a> command so that it adds correct samples for
+ <a href="withoutrowid.html">WITHOUT ROWID</a> tables in the <a href="fileformat2.html#stat4tab">sqlite_stat4</a> table.
+ Ticket <a href="http://www.sqlite.org/src/info/b2fa5424e6fcb15">b2fa5424e6fcb15</a>.
+
+<li>SQLITE_SOURCE_ID: "2014-08-15 11:46:33 9491ba7d738528f168657adb43a198238abde19e"
+<li>SHA1 for sqlite3.c: 72c64f05cd9babb9c0f9b3c82536d83be7804b1c
+
+</ol></p>
+<a name="version_3_8_5"></a>
+<h3>2014-06-04 (3.8.5)</h3><p><ol class='lessindent'>
+<li>Added support for <a href="queryplanner.html#partialsort">partial sorting by index</a>.
+<li>Enhance the query planner so that it always prefers an index that uses a superset of
+ WHERE clause terms relative to some other index.
+<li>Improvements to the <a href="fts3.html#*fts4automergecmd">automerge command</a> of <a href="fts3.html#fts4">FTS4</a> to better control the index size
+ for a full-text index that is subject to a large number of updates.
+<li>Added the <a href="rtree.html#xquery">sqlite3_rtree_query_callback()</a> interface to <a href="rtree.html">R-Tree extension</a>
+<li>Added new <a href="uri.html#coreqp">URI query parameters</a> "nolock" and "immutable".
+<li>Use less memory by not remembering CHECK constraints on read-only
+ database connections.
+<li>Enable the <a href="queryplanner.html#or_in_where">OR optimization</a> for <a href="withoutrowid.html">WITHOUT ROWID</a> tables.
+<li>Render expressions of the form "x IN (?)" (with a single value in
+ the list on the right-hand side of the IN operator) as if they where "x==?",
+ Similarly optimize "x NOT IN (?)"
+<li>Add the ".system" and ".once" commands to the <a href="cli.html">command-line shell</a>.
+<li>Added the <a href="c3ref/c_iocap_atomic.html">SQLITE_IOCAP_IMMUTABLE</a> bit to the set of bits that can be returned by
+ the xDeviceCharacteristics method of a <a href="vfs.html">VFS</a>.
+<li>Added the <a href="c3ref/c_testctrl_always.html">SQLITE_TESTCTRL_BYTEORDER</a> test control.
+<p><b>Bug Fixes:</b>
+<li>OFFSET clause ignored on queries without a FROM clause.
+ Ticket <a href="http://www.sqlite.org/src/info/07d6a0453d">07d6a0453d</a>
+<li>Assertion fault on queries involving expressions of the form
+ "x IN (?)". Ticket <a href="http://www.sqlite.org/src/info/e39d032577">e39d032577</a>.
+<li>Incorrect column datatype reported.
+ Ticket <a href="http://www.sqlite.org/src/info/a8a0d2996a">a8a0d2996a</a>
+<li>Duplicate row returned on a query against a table with more than
+ 16 indices, each on a separate column, and all used via OR-connected constraints.
+ Ticket <a href="http://www.sqlite.org/src/info/10fb063b11">10fb063b11</a>
+<li>Partial index causes assertion fault on UPDATE OR REPLACE.
+ Ticket <a href="http://www.sqlite.org/src/info/2ea3e9fe63">2ea3e9fe63</a>
+<li>Crash when calling undocumented SQL function sqlite_rename_parent()
+ with NULL parameters.
+ Ticket <a href="http://www.sqlite.org/src/info/264b970c4379fd">264b970c43</a>
+<li>ORDER BY ignored if the query has an identical GROUP BY.
+ Ticket <a href="http://www.sqlite.org/src/info/b75a9ca6b0499">b75a9ca6b0</a>
+<li>The group_concat(x,'') SQL function returns NULL instead of an empty string
+ when all inputs are empty strings.
+ Ticket <a href="http://www.sqlite.org/src/info/55746f9e65f85">55746f9e65</a>
+<li>Fix a bug in the VDBE code generator that caused crashes when
+ doing an INSERT INTO ... SELECT statement where the number of columns
+ being inserted is larger than the number of columns in the destination
+ table.
+ Ticket <a href="http://www.sqlite.org/src/info/e9654505cfda9">e9654505cfd</a>
+<li>Fix a problem in CSV import in the <a href="cli.html">command-line shell</a>
+ where if the leftmost field of the first row
+ in the CSV file was both zero bytes in size and unquoted no data would
+ be imported.
+<li>Fix a problem in FTS4 where the left-most column that contained
+ the <a href="fts3.html#fts4notindexed">notindexed column</a> name as a prefix
+ was not indexed rather than the column whose name matched exactly.
+<li>Fix the <a href="c3ref/db_readonly.html">sqlite3_db_readonly()</a> interface so that it returns true if
+ the database is read-only due to the file format write version number
+ being too large.
+
+<li>SQLITE_SOURCE_ID: "2014-06-04 14:06:34 b1ed4f2a34ba66c29b130f8d13e9092758019212"
+<li>SHA1 for sqlite3.c: 7bc194957238c61b1a47f301270286be5bc5208c
+
+</ol></p>
+<a name="version_3_8_4_3"></a>
+<h3>2014-04-03 (3.8.4.3)</h3><p><ol class='lessindent'>
+<li>Add a
+ <a href="http://www.sqlite.org/src/fdiff?sbs=1&v1=7d539cedb1c&v2=ebad891b7494d&smhdr">one-character fix</a>
+ for a problem that might cause incorrect query results on a query that mixes
+ DISTINCT, GROUP BY in a subquery, and ORDER BY.
+ <a href="http://www.sqlite.org/src/info/98825a79ce1456863">Ticket 98825a79ce14</a>.
+<li>SQLITE_SOURCE_ID: "2014-04-03 16:53:12 a611fa96c4a848614efe899130359c9f6fb889c3"
+<li>SHA1 for sqlite3.c: 310a1faeb9332a3cd8d1f53b4a2e055abf537bdc
+
+</ol></p>
+<a name="version_3_8_4_2"></a>
+<h3>2014-03-26 (3.8.4.2)</h3><p><ol class='lessindent'>
+<li>Fix a potential buffer overread that could result when trying to search a
+ corrupt database file.
+<li>SQLITE_SOURCE_ID: "2014-03-26 18:51:19 02ea166372bdb2ef9d8dfbb05e78a97609673a8e"
+<li>SHA1 for sqlite3.c: 4685ca86c2ea0649ed9f59a500013e90b3fe6d03
+
+</ol></p>
+<a name="version_3_8_4_1"></a>
+<h3>2014-03-11 (3.8.4.1)</h3><p><ol class='lessindent'>
+<li>Work around a C-preprocessor macro conflict that breaks the build for some
+ configurations with Microsoft Visual Studio.
+<li>When computing the cost of the <a href="optoverview.html#skipscan">skip-scan optimization</a>, take into account the
+ fact that multiple seeks are required.
+<li>SQLITE_SOURCE_ID: "2014-03-11 15:27:36 018d317b1257ce68a92908b05c9c7cf1494050d0"
+<li>SHA1 for sqlite3.c: d5cd1535053a50aa8633725e3595740b33709ac5
+
+</ol></p>
+<a name="version_3_8_4"></a>
+<h3>2014-03-10 (3.8.4)</h3><p><ol class='lessindent'>
+<li>Code optimization and refactoring for improved performance.
+<li>Add the ".clone" and ".save" commands to the command-line shell.
+<li>Update the banner on the command-line shell to alert novice users when they
+ are using an ephemeral in-memory database.
+<li>Fix editline support in the command-line shell.
+<li>Add support for coverage testing of VDBE programs using the
+ <a href="c3ref/c_testctrl_always.html">SQLITE_TESTCTRL_VDBE_COVERAGE</a> verb of <a href="c3ref/test_control.html">sqlite3_test_control()</a>.
+<li>Update the _FILE_OFFSET_BITS macro so that builds work again on QNX.
+<li>Change the datatype of SrcList.nSrc from type u8 to type int to work around
+ an issue in the C compiler on AIX.
+<li>Get extension loading working on Cygwin.
+<li>Bug fix: Fix the <a href="lang_corefunc.html#char">char()</a> SQL function so that it returns an empty string
+ rather than an "out of memory" error when called with zero arguments.
+<li>Bug fix: DISTINCT now recognizes that a <a href="lang_corefunc.html#zeroblob">zeroblob</a> and a blob of all
+ 0x00 bytes are the same thing.
+ <a href="http://www.sqlite.org/src/info/fccbde530a">Ticket &#91;fccbde530a&#93;</a>
+<li>Bug fix: Compute the correct answer for queries that contain an IS NOT NULL
+ term in the WHERE clause and also contain an OR term in the WHERE clause and
+ are compiled with <a href="compile.html#enable_stat4">SQLITE_ENABLE_STAT4</a>.
+ <a href="http://www.sqlite.org/src/info/4c86b126f2">Ticket &#91;4c86b126f2&#93;</a>
+<li>Bug fix: Make sure "rowid" columns are correctly resolved in joins between
+ normal tables and WITHOUT ROWID tables.
+ <a href="http://www.sqlite.org/src/info/c34d0557f7">Ticket &#91;c34d0557f7&#93;</a>
+<li>Bug fix: Make sure the same temporary registers are not used in concurrent
+ co-routines used to implement compound SELECT statements containing ORDER
+ BY clauses, as such use can lead to incorrect answers.
+ <a href="http://www.sqlite.org/src/info/8c63ff0eca">Ticket &#91;8c63ff0eca&#93;</a>
+<li>Bug fix: Ensure that "ORDER BY random()" clauses do not get optimized out.
+ <a href="http://www.sqlite.org/src/info/65bdeb9739">Ticket &#91;65bdeb9739&#93;</a>
+<li>Bug fix: Repair a name-resolution error that can occur in sub-select statements
+ contained within a TRIGGER.
+ <a href="http://www.sqlite.org/src/info/4ef7e3cfca">Ticket &#91;4ef7e3cfca&#93;</a>
+<li>Bug fix: Fix column default values expressions of the form
+ "DEFAULT(-(-9223372036854775808))" so that they work correctly, initializing
+ the column to a floating point value approximately equal to
+ +9223372036854775808.0.
+<li>SQLITE_SOURCE_ID: "2014-03-10 12:20:37 530a1ee7dc2435f80960ce4710a3c2d2bfaaccc5"
+<li>SHA1 for sqlite3.c: b0c22e5f15f5ba2afd017ecd990ea507918afe1c
+
+</ol></p>
+<a name="version_3_8_3_1"></a>
+<h3>2014-02-11 (3.8.3.1)</h3><p><ol class='lessindent'>
+<li>Fix a bug (ticket <a href="http://www.sqlite.org/src/info/4c86b126f2">4c86b126f2</a>)
+ that causes rows to go missing on some queries with OR clauses and
+ IS NOT NULL operators in the WHERE clause, when the <a href="compile.html#enable_stat3">SQLITE_ENABLE_STAT3</a>
+ or <a href="compile.html#enable_stat4">SQLITE_ENABLE_STAT4</a> compile-time options are used.
+<li>Fix a harmless compiler warning that was causing problems for VS2013.
+<li>SQLITE_SOURCE_ID: "2014-02-11 14:52:19 ea3317a4803d71d88183b29f1d3086f46d68a00e"
+<li>SHA1 for sqlite3.c: 990004ef2d0eec6a339e4caa562423897fe02bf0
+
+</ol></p>
+<a name="version_3_8_3"></a>
+<h3>2014-02-03 (3.8.3)</h3><p><ol class='lessindent'>
+<li>Added support for <a href="lang_with.html">common table expressions</a> and the <a href="lang_with.html">WITH clause</a>.
+<li>Added the <a href="lang_corefunc.html#printf">printf()</a> SQL function.
+<li>Added <a href="c3ref/c_deterministic.html#sqlitedeterministic">SQLITE_DETERMINISTIC</a> as an optional bit in the 4th argument to the
+ <a href="c3ref/create_function.html">sqlite3_create_function()</a> and related interfaces, providing applications with
+ the ability to create new functions that can be factored out of inner loops when
+ they have constant arguments.
+<li>Add <a href="rescode.html#readonly_dbmoved">SQLITE_READONLY_DBMOVED</a> error code, returned at the beginning of a
+ transaction, to indicate that the underlying database file has been renamed
+ or moved out from under SQLite.
+<li>Allow arbitrary expressions, including function calls and subqueries, in
+ the filename argument to <a href="lang_attach.html">ATTACH</a>.
+<li>Allow a <a href="lang_select.html#values">VALUES clause</a> to be used anywhere a <a href="lang_select.html">SELECT</a> statement is valid.
+<li>Reseed the PRNG used by <a href="c3ref/randomness.html">sqlite3_randomness(N,P)</a> when invoked with N==0.
+ Automatically reseed after a fork() on unix.
+<li>Enhance the <a href="spellfix1.html">spellfix1</a> virtual table so that it can search efficiently by rowid.
+<li>Performance enhancements.
+<li>Improvements to the comments in the VDBE byte-code display when running <a href="lang_explain.html">EXPLAIN</a>.
+<li>Add the "%token_class" directive to <a href="lemon.html">Lemon parser generator</a> and use it to simplify
+ the grammar.
+<li>Change the <a href="lemon.html">Lemon</a> source code to avoid calling C-library functions that OpenBSD
+ considers dangerous. (Ex: sprintf).
+<li>Bug fix: In the <a href="cli.html">command-line shell</a> CSV import feature, do not end a field
+ when an escaped double-quote occurs at the end of a CRLN line.
+<li>SQLITE_SOURCE_ID:
+ "2014-02-03 13:52:03 e816dd924619db5f766de6df74ea2194f3e3b538"
+<li>SHA1 for sqlite3.c: 98a07da78f71b0275e8d9c510486877adc31dbee
+
+</ol></p>
+<a name="version_3_8_2"></a>
+<h3>2013-12-06 (3.8.2)</h3><p><ol class='lessindent'>
+<li>Changed the defined behavior for the <a href="lang_expr.html#castexpr">CAST expression</a> when floating point values
+ greater than +9223372036854775807 are cast into integers so that the
+ result is the largest possible integer, +9223372036854775807, instead of
+ the smallest possible integer, -9223372036854775808. After this change,
+ CAST(9223372036854775809.0 as INT) yields +9223372036854775807 instead
+ of -9223372036854775808.
+ <b><big>&larr;</big>&nbsp;Potentially Incompatible Change!</b>
+<li>Added support for <a href="withoutrowid.html">WITHOUT ROWID</a> tables.
+<li>Added the <a href="optoverview.html#skipscan">skip-scan optimization</a> to the query planner.
+<li>Extended the <a href="vtab.html">virtual table</a> interface, and in particular the
+ <a href="c3ref/index_info.html">sqlite3_index_info</a> object to allow a virtual table to report its estimate
+ on the number of rows that will be returned by a query.
+<li>Update the <a href="rtree.html">R-Tree extension</a> to make use of the enhanced virtual table
+ interface.
+<li>Add the <a href="compile.html#enable_explain_comments">SQLITE_ENABLE_EXPLAIN_COMMENTS</a> compile-time option.
+<li>Enhanced the comments that are inserted into <a href="lang_explain.html">EXPLAIN</a> output when the
+ <a href="compile.html#enable_explain_comments">SQLITE_ENABLE_EXPLAIN_COMMENTS</a> compile-time option is enabled.
+<li>Performance enhancements in the VDBE, especially to the OP_Column opcode.
+<li>Factor constant subexpressions in inner loops out to the initialization code
+ in prepared statements.
+<li>Enhanced the ".explain" output formatting of the <a href="cli.html">command-line shell</a>
+ so that loops are indented to better show the structure of the program.
+<li>Enhanced the ".timer" feature of the <a href="cli.html">command-line shell</a> so that it
+ shows wall-clock time in addition to system and user times.
+
+<li>SQLITE_SOURCE_ID:
+ "2013-12-06 14:53:30 27392118af4c38c5203a04b8013e1afdb1cebd0d"
+<li>SHA1 for sqlite3.c: 6422c7d69866f5ea3db0968f67ee596e7114544e
+
+</ol></p>
+<a name="version_3_8_1"></a>
+<h3>2013-10-17 (3.8.1)</h3><p><ol class='lessindent'>
+<li>Added the <a href="lang_corefunc.html#unlikely">unlikely()</a> and <a href="lang_corefunc.html#likelihood">likelihood()</a> SQL functions to be used
+ as hints to the query planner.
+<li>Enhancements to the query planner:
+<ol type='a'>
+ <li>Take into account the fact WHERE clause terms that cannot be used with indices
+ still probably reduce the number of output rows.
+ <li>Estimate the sizes of table and index rows and use the smallest applicable B-Tree
+ for full scans and "count(*)" operations.
+</ol>
+<li>Added the <a href="pragma.html#pragma_soft_heap_limit">soft_heap_limit pragma</a>.
+<li>Added support for <a href="compile.html#enable_stat4">SQLITE_ENABLE_STAT4</a>
+<li>Added support for "sz=NNN" parameters at the end of
+ <a href="fileformat2.html#stat1tab">sqlite_stat1.stat</a> fields
+ used to specify the average length in bytes for table and index rows.
+<li>Avoid running foreign-key constraint checks on an UPDATE if none of the
+ modified columns are associated with foreign keys.
+<li>Added the <a href="compile.html#minimum_file_descriptor">SQLITE_MINIMUM_FILE_DESCRIPTOR</a> compile-time option
+<li>Added the win32-longpath VFS on windows, permitting filenames up to 32K
+ characters in length.
+<li>The <a href="lang_datefunc.html">Date And Time Functions</a> are enhanced so that the current time
+ (ex: julianday('now')) is always the same for multiple function invocations
+ within the same <a href="c3ref/step.html">sqlite3_step()</a> call.
+<li>Add the "totype.c" extension, implementing the tointeger() and toreal()
+ SQL functions.
+<li><a href="fts3.html#fts4">FTS4</a> queries are better able to make use of docid<$limit constraints to
+ limit the amount of I/O required.
+<li>Added the hidden <a href="fts3.html#f4alid">fts4aux languageid column</a> to the <a href="fts3.html#fts4aux">fts4aux</a> virtual table.
+<li>The <a href="lang_vacuum.html">VACUUM</a> command packs the database about 1% tighter.
+<li>The sqlite3_analyzer utility program is updated to provide better descriptions
+ and to compute a more accurate estimate for "Non-sequential pages"
+<li>Refactor the implementation of PRAGMA statements to improve parsing performance.
+<li>The directory used to hold temporary files on unix can now be set using
+ the SQLITE_TMPDIR environment variable, which takes precedence over the
+ TMPDIR environment variable. The <a href="c3ref/temp_directory.html">sqlite3_temp_directory</a> global variable
+ still has higher precedence than both environment variables, however.
+<li>Added the <a href="pragma.html#pragma_stats">PRAGMA stats</a> statement.
+<li><b>Bug fix:</b> Return the correct answer for "SELECT count(*) FROM table" even if
+ there is a <a href="partialindex.html">partial index</a> on the table. Ticket
+ <a href="http://www.sqlite.org/src/info/a5c8ed66ca">a5c8ed66ca</a>.
+
+<li>SQLITE_SOURCE_ID:
+ "2013-10-17 12:57:35 c78be6d786c19073b3a6730dfe3fb1be54f5657a"
+<li>SHA1 for sqlite3.c: 0a54d76566728c2ba96292a49b138e4f69a7c391
+
+</ol></p>
+<a name="version_3_8_0_2"></a>
+<h3>2013-09-03 (3.8.0.2)</h3><p><ol class='lessindent'>
+<li>Fix a bug in the optimization that attempts to omit unused LEFT JOINs
+
+<li>SQLITE_SOURCE_ID:
+ "2013-09-03 17:11:13 7dd4968f235d6e1ca9547cda9cf3bd570e1609ef"
+<li>SHA1 for sqlite3.c: 6cf0c7b46975a87a0dc3fba69c229a7de61b0c21
+
+</ol></p>
+<a name="version_3_8_0_1"></a>
+<h3>2013-08-29 (3.8.0.1)</h3><p><ol class='lessindent'>
+<li>Fix an off-by-one error that caused quoted empty string at the end of a
+CRNL-terminated line of CSV input to be misread by the command-line shell.
+<li>Fix a query planner bug involving a LEFT JOIN with a BETWEEN or LIKE/GLOB
+constraint and then another INNER JOIN to the right that involves an OR constraint.
+<li>Fix a query planner bug that could result in a segfault when querying tables
+with a UNIQUE or PRIMARY KEY constraint with more than four columns.
+
+<li>SQLITE_SOURCE_ID:
+ "2013-08-29 17:35:01 352362bc01660edfbda08179d60f09e2038a2f49"
+<li>SHA1 for sqlite3.c: 99906bf63e6cef63d6f3d7f8526ac4a70e76559e
+
+</ol></p>
+<a name="version_3_8_0"></a>
+<h3>2013-08-26 (3.8.0)</h3><p><ol class='lessindent'>
+<li>Add support for <a href="partialindex.html">partial indexes</a></li>
+<li>Cut-over to the <a href="queryplanner-ng.html">next generation query planner</a> for faster and better query plans.
+<li>The <a href="eqp.html">EXPLAIN QUERY PLAN</a> output no longer shows an estimate of the number of
+ rows generated by each loop in a join.
+<li>Added the <a href="fts3.html#fts4notindexed">FTS4 notindexed option</a>, allowing non-indexed columns in an FTS4 table.
+<li>Added the <a href="c3ref/c_stmtstatus_counter.html#sqlitestmtstatusvmstep">SQLITE_STMTSTATUS_VM_STEP</a> option to <a href="c3ref/stmt_status.html">sqlite3_stmt_status()</a>.
+<li>Added the <a href="pragma.html#pragma_cache_spill">cache_spill pragma</a>.
+<li>Added the <a href="pragma.html#pragma_query_only">query_only pragma</a>.
+<li>Added the <a href="pragma.html#pragma_defer_foreign_keys">defer_foreign_keys pragma</a> and the
+ <a href="c3ref/db_status.html">sqlite3_db_status</a>(db, <a href="c3ref/c_dbstatus_options.html#sqlitedbstatusdeferredfks">SQLITE_DBSTATUS_DEFERRED_FKS</a>,...) C-language interface.
+<li>Added the "percentile()" function as a <a href="loadext.html">loadable extension</a> in the ext/misc
+ subdirectory of the source tree.
+<li>Added the <a href="compile.html#allow_uri_authority">SQLITE_ALLOW_URI_AUTHORITY</a> compile-time option.
+<li>Add the <a href="c3ref/cancel_auto_extension.html">sqlite3_cancel_auto_extension(X)</a> interface.
+<li>A running SELECT statement that lacks a FROM clause (or any other statement that
+ never reads or writes from any database file) will not prevent a read
+ transaction from closing.
+<li>Add the <a href="compile.html#default_automatic_index">SQLITE_DEFAULT_AUTOMATIC_INDEX</a> compile-time option. Setting this option
+ to 0 disables automatic indices by default.
+<li>Issue an <a href="rescode.html#warning_autoindex">SQLITE_WARNING_AUTOINDEX</a> warning on the <a href="c3ref/c_config_covering_index_scan.html#sqliteconfiglog">SQLITE_CONFIG_LOG</a> whenever
+ the query planner uses an automatic index.
+<li>Added the <a href="compile.html#fts3_max_expr_depth">SQLITE_FTS3_MAX_EXPR_DEPTH</a> compile-time option.
+<li>Added an optional 5th parameter defining the collating sequence to the
+ next_char() extension SQL function.
+<li>The <a href="rescode.html#busy_snapshot">SQLITE_BUSY_SNAPSHOT</a> extended error code is returned in WAL mode when
+ a read transaction cannot be upgraded to a write transaction because the read is
+ on an older snapshot.
+<li>Enhancements to the sqlite3_analyzer utility program to provide size
+ information separately for each individual index of a table, in addition to
+ the aggregate size.
+<li>Allow read transactions to be freely opened and closed by SQL statements run
+ from within the implementation of <a href="appfunc.html">application-defined SQL functions</a> if the
+ function is called by a SELECT statement that does not access any database table.
+<li>Disable the use of posix_fallocate() on all (unix) systems unless the
+ HAVE_POSIX_FALLOCATE compile-time option is used.
+<li>Update the ".import" command in the <a href="cli.html">command-line shell</a> to support multi-line
+ fields and correct RFC-4180 quoting and to issue warning and/or error messages
+ if the input text is not strictly RFC-4180 compliant.
+<li>Bug fix: In the <a href="fts3.html#unicode61">unicode61</a> tokenizer of <a href="fts3.html#fts4">FTS4</a>, treat all private code points
+ as identifier symbols.
+<li>Bug fix: Bare identifiers in ORDER BY clauses bind more tightly to output column
+ names, but identifiers in expressions bind more tightly to input column names.
+ Identifiers in GROUP BY clauses always prefer output column names, however.
+<li>Bug fixes: Multiple problems in the legacy query optimizer were fixed by the
+ move to <a href="queryplanner-ng.html">NGQP</a>.
+
+<li>SQLITE_SOURCE_ID:
+ "2013-08-26 04:50:08 f64cd21e2e23ed7cff48f7dafa5e76adde9321c2"
+<li>SHA1 for sqlite3.c: b7347f4b4c2a840e6ba12040093d606bd16ea21e
+
+</ol></p>
+<a name="version_3_7_17"></a>
+<h3>2013-05-20 (3.7.17)</h3><p><ol class='lessindent'>
+<li>Add support for <a href="mmap.html">memory-mapped I/O</a>.
+<li>Add the <a href="c3ref/strglob.html">sqlite3_strglob()</a> convenience interface.
+<li>Assigned the integer at offset 68 in the <a href="fileformat2.html#database_header">database header</a> as the
+ <a href="fileformat2.html#appid">Application ID</a> for when SQLite is used as an <a href="appfileformat.html">application file-format</a>.
+ Added the <a href="pragma.html#pragma_application_id">PRAGMA application_id</a> command to query and set the Application ID.
+<li>Report rollback recovery in the <a href="errlog.html">error log</a> as SQLITE_NOTICE_RECOVER_ROLLBACK.
+ Change the error log code for WAL recover from
+ SQLITE_OK to SQLITE_NOTICE_RECOVER_WAL.
+<li>Report the risky uses of <a href="howtocorrupt.html#unlink">unlinked database files</a> and
+ <a href="howtocorrupt.html#alias">database filename aliasing</a> as SQLITE_WARNING messages in the <a href="errlog.html">error log</a>.
+<li>Added the <a href="compile.html#trace_size_limit">SQLITE_TRACE_SIZE_LIMIT</a> compile-time option.
+<li>Increase the default value of <a href="compile.html#max_schema_retry">SQLITE_MAX_SCHEMA_RETRY</a> to 50 and make sure
+ that it is honored in every place that a schema change might force a statement
+ retry.
+<li>Add a new test harness called "mptester" used to verify correct operation
+ when multiple processes are using the same database file at the same time.
+<li>Enhance the <a href="loadext.html">extension loading</a> mechanism to be more flexible (while
+ still maintaining backwards compatibility) in two ways:
+ <ol>
+ <li>If the default entry point "sqlite3_extension_init" is not present in
+ the loadable extension, also try an entry point "sqlite3_X_init" where
+ "X" is based on the shared library filename. This allows every extension
+ to have a different entry point, which allows them to be statically linked
+ with no code changes.
+ <li>The shared library filename passed to <a href="c3ref/load_extension.html">sqlite3_load_extension()</a> may
+ omit the filename suffix, and an appropriate architecture-dependent
+ suffix (".so", ".dylib", or ".dll") will be added automatically.
+ </ol>
+<li>Added many new loadable extensions to the source tree, including
+ amatch, closure, fuzzer, ieee754, nextchar, regexp, spellfix,
+ and wholenumber. See header comments on each extension source file
+ for further information about what that extension does.
+<li>Enhance <a href="fts3.html">FTS3</a> to avoid using excess stack space when there are a huge
+ number of terms on the right-hand side of the MATCH operator. A side-effect
+ of this change is that the MATCH operator can only accommodate 12 NEAR
+ operators at a time.
+<li>Enhance the <a href="fts3.html#fts4aux">fts4aux</a> virtual table so that it can be a TEMP table.
+<li>Added the <a href="fts3.html#fts3tok">fts3tokenize virtual table</a> to the <a href="fts3.html">full-text search</a> logic.
+<li>Query planner enhancement: Use the transitive property of constraints
+ to move constraints into the outer loops of a join whenever possible,
+ thereby reducing the amount of work that needs to occur in inner loops.
+<li>Discontinue the use of posix_fallocate() on unix, as it does not work on all
+ filesystems.
+<li>Improved tracing and debugging facilities in the Windows <a href="vfs.html">VFS</a>.
+<li>Bug fix: Fix a potential <b>database corruption bug</b>
+ in <a href="sharedcache.html">shared cache mode</a> when one
+ <a href="c3ref/sqlite3.html">database connection</a> is closed while another is in the middle of a write
+ transaction.
+ Ticket <a href="http://www.sqlite.org/src/info/e636a050b7">e636a050b7</a>
+<li>Bug fix:
+ Only consider AS names from the result set as candidates for resolving
+ identifiers in the WHERE clause if there are no other matches. In the
+ ORDER BY clause, AS names take priority over any column names.
+ Ticket <a href="http://www.sqlite.org/src/info/2500cdb9be05">2500cdb9be05</a>
+<li>Bug fix: Do not allow a virtual table to cancel the ORDER BY clause unless
+ all outer loops are guaranteed to return no more than one row result.
+ Ticket <a href="http://www.sqlite.org/src/info/ba82a4a41eac1">ba82a4a41eac1</a>.
+<li>Bug fix: Do not suppress the ORDER BY clause on a virtual table query if
+ an IN constraint is used.
+ Ticket <a href="http://www.sqlite.org/src/info/f69b96e3076e">f69b96e3076e</a>.
+<li>Bug fix: The <a href="cli.html">command-line shell</a> gives an exit code of 0 when terminated
+ using the ".quit" command.
+<li>Bug fix: Make sure <a href="pragma.html#syntax">PRAGMA</a> statements appear in <a href="c3ref/profile.html">sqlite3_trace()</a> output.
+<li>Bug fix: When a <a href="lang_select.html#compound">compound query</a> that uses an ORDER BY clause
+ with a <a href="lang_expr.html#collateop">COLLATE operator</a>, make sure that the sorting occurs
+ according to the specified collation and that the comparisons associate with
+ the compound query use the native collation. Ticket
+ <a href="http://www.sqlite.org/src/info/6709574d2a8d8">6709574d2a8d8</a>.
+<li>Bug fix: Makes sure the <a href="c3ref/set_authorizer.html">authorizer</a> callback gets
+ a valid pointer to the string "ROWID" for the column-name parameter when
+ doing an <a href="lang_update.html">UPDATE</a> that changes the rowid. Ticket
+ <a href="http://www.sqlite.org/src/info/0eb70d77cb05bb2272">0eb70d77cb05bb2272</a>
+<li>Bug fix: Do not move WHERE clause terms inside OR expressions that are
+ contained within an ON clause of a LEFT JOIN. Ticket
+ <a href="http://www.sqlite.org/src/info/f2369304e4">f2369304e4</a>
+<li>Bug fix: Make sure an error is always reported when attempting to preform
+ an operation that requires a <a href="datatype3.html#collation">collating sequence</a> that is missing.
+ Ticket <a href="http://www.sqlite.org/src/info/0fc59f908b">0fc59f908b</a>
+
+<li>SQLITE_SOURCE_ID:
+ "2013-05-20 00:56:22 118a3b35693b134d56ebd780123b7fd6f1497668"
+<li>SHA1 for sqlite3.c: 246987605d0503c700a08b9ee99a6b5d67454aab
+
+</ol></p>
+<a name="version_3_7_16_2"></a>
+<h3>2013-04-12 (3.7.16.2)</h3><p><ol class='lessindent'>
+<li>Fix a bug (present since version 3.7.13) that could result in database corruption
+ on windows if two or more processes try to access the same database file at the
+ same time and immediately after third process crashed in the middle of committing
+ to that same file. See ticket
+ <a href="http://www.sqlite.org/src/info/7ff3120e4f">7ff3120e4f</a> for further
+ information.
+
+<li>SQLITE_SOURCE_ID:
+ "2013-04-12 11:52:43 cbea02d93865ce0e06789db95fd9168ebac970c7"
+<li>SHA1 for sqlite3.c: d466b54789dff4fb0238b9232e74896deaefab94
+
+</ol></p>
+<a name="version_3_7_16_1"></a>
+<h3>2013-03-29 (3.7.16.1)</h3><p><ol class='lessindent'>
+<li>Fix for a bug in the ORDER BY optimizer that was introduced in
+ <a href="#version_3_7_15">version 3.7.15</a> which would sometimes optimize out the sorting step
+ when in fact the sort was required.
+ Ticket <a href="http://www.sqlite.org/src/info/a179fe7465">a179fe7465</a>
+<li>Fix a long-standing bug in the <a href="lang_expr.html#castexpr">CAST expression</a> that would recognize UTF16
+ characters as digits even if their most-significant-byte was not zero.
+ Ticket <a href="http://www.sqlite.org/src/info/689137afb6da41">689137afb6da41</a>.
+<li>Fix a bug in the NEAR operator of <a href="fts3.html">FTS3</a> when applied to subfields.
+ Ticket <a href="http://www.sqlite.org/src/info/38b1ae018f">38b1ae018f</a>.
+<li>Fix a long-standing bug in the storage engine that would (very rarely)
+ cause a spurious report of an SQLITE_CORRUPT error but which was otherwise
+ harmless.
+ Ticket <a href="http://www.sqlite.org/src/info/6bfb98dfc0c">6bfb98dfc0c</a>.
+<li>The SQLITE_OMIT_MERGE_SORT option has been removed. The merge sorter is
+ now a required component of SQLite.
+<li>Fixed lots of spelling errors in the source-code comments
+<li>SQLITE_SOURCE_ID:
+ "2013-03-29 13:44:34 527231bc67285f01fb18d4451b28f61da3c4e39d"
+<li>SHA1 for sqlite3.c: 7a91ceceac9bcf47ceb8219126276e5518f7ff5a
+
+</ol></p>
+<a name="version_3_7_16"></a>
+<h3>2013-03-18 (3.7.16)</h3><p><ol class='lessindent'>
+<li>Added the <a href="pragma.html#pragma_foreign_key_check">PRAGMA foreign_key_check</a> command.
+<li>Added new extended error codes for all SQLITE_CONSTRAINT errors
+<li>Added the SQLITE_READONLY_ROLLBACK extended error code for when a database
+ cannot be opened because it needs rollback recovery but is read-only.
+<li>Added SQL functions <a href="lang_corefunc.html#unicode">unicode(A)</a> and <a href="lang_corefunc.html#char">char(X1,...,XN)</a>.
+<li>Performance improvements for <a href="pragma.html#pragma_incremental_vacuum">PRAGMA incremental_vacuum</a>, especially in
+ cases where the number of free pages is greater than what will fit on a
+ single trunk page of the freelist.
+<li>Improved optimization of queries containing aggregate min() or max().
+<li>Enhance virtual tables so that they can potentially use an index when
+ the WHERE clause contains the IN operator.
+<li>Allow indices to be used for sorting even if prior terms of the index
+ are constrained by IN operators in the WHERE clause.
+<li>Enhance the <a href="pragma.html#pragma_table_info">PRAGMA table_info</a> command so that the "pk" column is an
+ increasing integer to show the order of columns in the primary key.
+<li>Enhance the query optimizer to exploit transitive join constraints.
+<li>Performance improvements in the query optimizer.
+<li>Allow the error message from <a href="pragma.html#pragma_integrity_check">PRAGMA integrity_check</a> to be longer than
+ 20000 bytes.
+<li>Improved name resolution for deeply nested queries.
+<li>Added the test_regexp.c module as a demonstration of how to implement
+ the REGEXP operator.
+<li>Improved error messages in the <a href="rtree.html">RTREE</a> extension.
+<li>Enhance the <a href="cli.html">command-line shell</a> so that a non-zero argument to the
+ ".exit" command causes the shell to exit immediately without cleanly
+ shutting down the database connection.
+<li>Improved error messages for invalid boolean arguments to dot-commands
+ in the <a href="cli.html">command-line shell</a>.
+<li>Improved error messages for "foreign key mismatch" showing the names of
+ the two tables involved.
+<li>Remove all uses of umask() in the unix VFS.
+<li>Added the <a href="pragma.html#pragma_vdbe_addoptrace">PRAGMA vdbe_addoptrace</a> and <a href="pragma.html#pragma_vdbe_debug">PRAGMA vdbe_debug</a> commands.
+<li>Change to use strncmp() or the equivalent instead of memcmp() when
+ comparing non-zero-terminated strings.
+<li>Update cygwin interfaces to omit deprecated API calls.
+<li>Enhance the <a href="spellfix1.html">spellfix1</a> extension so that the edit distance cost table can
+ be changed at runtime by inserting a string like 'edit_cost_table=TABLE'
+ into the "command" field.
+
+<li>Bug fix: repair a long-standing problem that could cause incorrect query
+ results in a 3-way or larger join that compared INTEGER fields against TEXT
+ fields in two or more places.
+ Ticket <a href="http://www.sqlite.org/src/info/fc7bd6358f">fc7bd6358f</a>
+<li>Bug fix: Issue an error message if the 16-bit reference counter on a
+ view overflows due to an overly complex query.
+<li>Bug fix: Avoid leaking memory on LIMIT and OFFSET clauses in deeply
+ nested UNION ALL queries.
+<li>Bug fix: Make sure the schema is up-to-date prior to running pragmas
+ table_info, index_list, index_info, and foreign_key_list.
+
+<li>SQLITE_SOURCE_ID:
+ "2013-03-18 11:39:23 66d5f2b76750f3520eb7a495f6247206758f5b90"
+<li>SHA1 for sqlite3.c: 7308ab891ca1b2ebc596025cfe4dc36f1ee89cf6
+
+</ol></p>
+<a name="version_3_7_15_2"></a>
+<h3>2013-01-09 (3.7.15.2)</h3><p><ol class='lessindent'>
+<li>Fix a bug, introduced in <a href="#version_3_7_15">version 3.7.15</a>, that causes an ORDER BY clause
+ to be optimized out of a three-way join when the ORDER BY is actually
+ required.
+ Ticket <a href="http://www.sqlite.org/src/info/598f5f7596b055">598f5f7596b055</a>
+
+<li>SQLITE_SOURCE_ID:
+ "2013-01-09 11:53:05 c0e09560d26f0a6456be9dd3447f5311eb4f238f"
+<li>SHA1 for sqlite3.c: 5741f47d1bc38aa0a8c38f09e60a5fe0031f272d
+
+</ol></p>
+<a name="version_3_7_15_1"></a>
+<h3>2012-12-19 (3.7.15.1)</h3><p><ol class='lessindent'>
+<li>Fix a bug, introduced in <a href="#version_3_7_15">version 3.7.15</a>, that causes a segfault if
+ the AS name of a result column of a SELECT statement is used as a logical
+ term in the WHERE clause. Ticket
+ <a href="http://www.sqlite.org/src/info/a7b7803e8d1e869">a7b7803e8d1e869</a>.
+
+<li>SQLITE_SOURCE_ID:
+ "2012-12-19 20:39:10 6b85b767d0ff7975146156a99ad673f2c1a23318"
+<li>SHA1 for sqlite3.c: bbbaa68061e925bd4d7d18d7e1270935c5f7e39a
+
+</ol></p>
+<a name="version_3_7_15"></a>
+<h3>2012-12-12 (3.7.15)</h3><p><ol class='lessindent'>
+<li>Added the <a href="c3ref/errcode.html">sqlite3_errstr()</a> interface.
+<li>Avoid invoking the <a href="c3ref/profile.html">sqlite3_trace()</a> callback multiple times when a
+ statement is automatically reprepared due to <a href="rescode.html#schema">SQLITE_SCHEMA</a> errors.
+<li>Added support for Windows Phone 8 platforms
+<li>Enhance IN operator processing to make use of indices with numeric
+ affinities.
+<li>Do full-table scans using covering indices when possible, under the
+ theory that an index will be smaller and hence can be scanned with
+ less I/O.
+<li>Enhance the query optimizer so that ORDER BY clauses are more aggressively
+ optimized, especially in joins where various terms of the ORDER BY clause
+ come from separate tables of the join.
+<li>Add the ability to implement FROM clause subqueries as coroutines rather
+ that manifesting the subquery into a temporary table.
+<li>Enhancements the command-line shell:
+ <ol type='a'>
+ <li>Added the ".print" command
+ <li>Negative numbers in the ".width" command cause right-alignment
+ <li>Add the ".wheretrace" command when compiled with SQLITE_DEBUG
+ </ol>
+<li>Added the <a href="pragma.html#pragma_busy_timeout">busy_timeout pragma</a>.
+<li>Added the <a href="lang_corefunc.html#instr">instr()</a> SQL function.
+<li>Added the <a href="c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlbusyhandler">SQLITE_FCNTL_BUSYHANDLER</a> file control, used to allow VFS
+ implementations to get access to the busy handler callback.
+<li>The xDelete method in the built-in <a href="vfs.html">VFSes</a> now return
+ SQLITE_IOERR_DELETE_NOENT if the file to be deleted does not exist.
+<li>Enhanced support for QNX.
+<li>Work around an optimizer bug in the MSVC compiler when targeting ARM.
+<li>Bug fix: Avoid various concurrency problems in <a href="sharedcache.html">shared cache mode</a>.
+<li>Bug fix: Avoid a deadlock or crash if the <a href="backup.html">backup API</a>, <a href="sharedcache.html">shared cache</a>,
+ and the SQLite Encryption Extension are all used at once.
+<li>Bug fix: SQL functions created using the TCL interface honor the
+ "nullvalue" setting.
+<li>Bug fix: Fix a 32-bit overflow problem on CREATE INDEX for databases
+ larger than 16GB.
+<li>Bug fix: Avoid segfault when using the <a href="lang_expr.html#collateop">COLLATE operator</a> inside of a
+ <a href="lang_createtable.html#ckconst">CHECK constraint</a> or <a href="lang_createview.html">view</a> in <a href="sharedcache.html">shared cache mode</a>.
+
+<li>SQLITE_SOURCE_ID:
+ "2012-12-12 13:36:53 cd0b37c52658bfdf992b1e3dc467bae1835a94ae"
+<li>SHA1 for sqlite3.c: 2b413611f5e3e3b6ef5f618f2a9209cdf25cbcff"
+
+</ol></p>
+<a name="version_3_7_14_1"></a>
+<h3>2012-10-04 (3.7.14.1)</h3><p><ol class='lessindent'>
+<li>Fix a bug (ticket
+<a href="www.sqlite.org/src/tktview/d02e1406a58ea02d">&#91;d02e1406a58ea02d]&#93;</a>)
+that causes a segfault on a LEFT JOIN that includes an OR in the ON clause.
+<li>Work around a bug in the optimizer in the VisualStudio-2012 compiler that
+causes invalid code to be generated when compiling SQLite on ARM.
+<li>Fix the TCL interface so that the "nullvalue" setting is honored for
+TCL implementations of SQL functions.
+<li>SQLITE_SOURCE_ID:
+ "2012-10-04 19:37:12 091570e46d04e84b67228e0bdbcd6e1fb60c6bdb"
+<li>SHA1 for sqlite3.c: 62aaecaacab3a4bf4a8fe4aec1cfdc1571fe9a44
+
+</ol></p>
+<a name="version_3_7_14"></a>
+<h3>2012-09-03 (3.7.14)</h3><p><ol class='lessindent'>
+<li>Drop built-in support for OS/2. If you need to upgrade an OS/2
+ application to use this or a later version of SQLite,
+ then add an application-defined <a href="vfs.html">VFS</a> using the
+ <a href="c3ref/vfs_find.html">sqlite3_vfs_register()</a> interface. The code removed in this release can
+ serve as a baseline for the application-defined VFS.
+<li>Ensure that floating point values are preserved exactly when reconstructing
+ a database from the output of the ".dump" command of the
+ <a href="cli.html">command-line shell</a>.
+<li>Added the <a href="c3ref/close.html">sqlite3_close_v2()</a> interface.
+<li>Updated the <a href="cli.html">command-line shell</a> so that it can be built using
+ <a href="compile.html#omit_floating_point">SQLITE_OMIT_FLOATING_POINT</a> and <a href="compile.html#omit_autoinit">SQLITE_OMIT_AUTOINIT</a>.
+<li>Improvements to the windows makefiles and build processes.
+<li>Enhancements to <a href="pragma.html#pragma_integrity_check">PRAGMA integrity_check</a> and <a href="pragma.html#pragma_quick_check">PRAGMA quick_check</a> so that
+ they can optionally check just a single attached database instead of all
+ attached databases.
+<li>Enhancements to <a href="wal.html">WAL mode</a> processing that ensure that at least one
+ valid read-mark is available at all times, so that read-only processes
+ can always read the database.
+<li>Performance enhancements in the sorter used by ORDER BY and CREATE INDEX.
+<li>Added the <a href="compile.html#disable_fts4_deferred">SQLITE_DISABLE_FTS4_DEFERRED</a> compile-time option.
+<li>Better handling of aggregate queries where the aggregate functions are
+ contained within subqueries.
+<li>Enhance the query planner so that it will try to use a <a href="queryplanner.html#covidx">covering index</a>
+ on queries that make use of <a href="optoverview.html#or_opt">or optimization</a>.
+<li>SQLITE_SOURCE_ID:
+ "2012-09-03 15:42:36 c0d89d4a9752922f9e367362366efde4f1b06f2a"
+<li>SHA1 for sqlite3.c: 5fdf596b29bb426001f28b488ff356ae14d5a5a6
+
+</ol></p>
+<a name="version_3_7_13"></a>
+<h3>2012-06-11 (3.7.13)</h3><p><ol class='lessindent'>
+<li><a href="inmemorydb.html">In-memory databases</a> that are specified using
+ <a href="uri.html">URI filenames</a> are allowed to use <a href="sharedcache.html#inmemsharedcache">shared cache</a>,
+ so that the same
+ in-memory database can be accessed from multiple database connections.
+<li>Recognize and use the <a href="uri.html#coreqp">mode=memory</a> query parameter in
+ <a href="uri.html">URI filenames</a>.
+<li>Avoid resetting the schema of <a href="sharedcache.html">shared cache</a> connections when any one
+ connection closes. Instead, wait for the last connection to close before
+ resetting the schema.
+<li>In the <a href="rtree.html">RTREE</a> extension, when rounding 64-bit floating point numbers
+ to 32-bit for storage, always round in a direction that causes the
+ bounding box to get larger.
+<li>Adjust the unix driver to avoid unnecessary calls to fchown().
+<li>Add interfaces sqlite3_quota_ferror() and sqlite3_quota_file_available()
+ to the test_quota.c module.
+<li>The <a href="c3ref/create_module.html">sqlite3_create_module()</a> and <a href="c3ref/create_module.html">sqlite3_create_module_v2()</a> interfaces
+ return SQLITE_MISUSE on any attempt to overload or replace a <a href="vtab.html">virtual table</a>
+ module. The destructor is always called in this case, in accordance with
+ historical and current documentation.
+<li>SQLITE_SOURCE_ID:
+ "2012-06-11 02:05:22 f5b5a13f7394dc143aa136f1d4faba6839eaa6dc"
+<li>SHA1 for sqlite3.c: ff0a771d6252545740ba9685e312b0e3bb6a641b
+
+</ol></p>
+<a name="version_3_7_12_1"></a>
+<h3>2012-05-22 (3.7.12.1)</h3><p><ol class='lessindent'>
+<li>Fix a bug
+ <a href="http://www.sqlite.org/src/info/c2ad16f997ee9c">(ticket c2ad16f997)</a>
+ in the 3.7.12 release that can cause a segfault for certain
+ obscure nested aggregate queries.
+<li>Fix various other minor test script problems.
+<li>SQLITE_SOURCE_ID:
+ "2012-05-22 02:45:53 6d326d44fd1d626aae0e8456e5fa2049f1ce0789"
+<li>SHA1 for sqlite3.c: d494e8d81607f0515d4f386156fb0fd86d5ba7df
+
+</ol></p>
+<a name="version_3_7_12"></a>
+<h3>2012-05-14 (3.7.12)</h3><p><ol class='lessindent'>
+<li>Add the <a href="c3ref/c_dbstatus_options.html#sqlitedbstatuscachewrite">SQLITE_DBSTATUS_CACHE_WRITE</a> option for <a href="c3ref/db_status.html">sqlite3_db_status()</a>.
+<li>Optimize the <a href="lang_corefunc.html#typeof">typeof()</a> and <a href="lang_corefunc.html#length">length()</a> SQL functions so that they avoid
+ unnecessary reading of database content from disk.
+<li>Add the <a href="fts3.html#*fts4mergecmd">FTS4 "merge" command</a>, the <a href="fts3.html#*fts4automergecmd">FTS4 "automerge" command</a>, and
+ the <a href="fts3.html#*fts4ickcmd">FTS4 "integrity-check" command</a>.
+<li>Report the name of specific <a href="lang_createtable.html#ckconst">CHECK</a> constraints that fail.
+<li>In the command-line shell, use popen() instead of fopen() if the first
+ character of the argument to the ".output" command is "|".
+<li>Make use of OVERLAPPED in the windows <a href="vfs.html">VFS</a> to avoid some system calls
+ and thereby obtain a performance improvement.
+<li>More aggressive optimization of the AND operator when one side or the
+ other is always false.
+<li>Improved performance of queries with many OR-connected terms in the
+ WHERE clause that can all be indexed.
+<li>Add the <a href="compile.html#rtree_int_only">SQLITE_RTREE_INT_ONLY</a> compile-time option to force the
+ <a href="rtree.html">R*Tree Extension Module</a> to use integer instead of
+ floating point values for both storage and computation.
+<li>Enhance the <a href="pragma.html#pragma_integrity_check">PRAGMA integrity_check</a> command to use much less memory when
+ processing multi-gigabyte databases.
+<li>New interfaces added to the test_quota.c add-on module.
+<li>Added the ".trace" dot-command to the command-line shell.
+<li>Allow virtual table constructors to be invoked recursively.
+<li>Improved optimization of ORDER BY clauses on compound queries.
+<li>Improved optimization of aggregate subqueries contained within an
+ aggregate query.
+<li>Bug fix: Fix the <a href="lang_savepoint.html">RELEASE</a> command so that it does not cancel pending
+ queries. This repairs a problem introduced in 3.7.11.
+<li>Bug fix: Do not discard the DISTINCT as superfluous unless a subset of
+ the result set is subject to a UNIQUE constraint <em>and</em> it none
+ of the columns in that subset can be NULL.
+ Ticket <a href="http://www.sqlite.org/src/info/385a5b56b9">385a5b56b9</a>.
+<li>Bug fix: Do not optimize away an ORDER BY clause that has the same terms
+ as a UNIQUE index unless those terms are also NOT NULL.
+ Ticket <a href="http://www.sqlite.org/src/info/2a5629202f">2a5629202f</a>.
+<li>SQLITE_SOURCE_ID:
+ "2012-05-14 01:41:23 8654aa9540fe9fd210899d83d17f3f407096c004"
+<li>SHA1 for sqlite3.c: 57e2104a0f7b3f528e7f6b7a8e553e2357ccd2e1
+
+
+</ol></p>
+<a name="version_3_7_11"></a>
+<h3>2012-03-20 (3.7.11)</h3><p><ol class='lessindent'>
+<li>Enhance the <a href="lang_insert.html">INSERT</a> syntax to allow multiple rows to be inserted
+ via the VALUES clause.
+<li>Enhance the <a href="lang_createvtab.html">CREATE VIRTUAL TABLE</a> command to support the
+ IF NOT EXISTS clause.
+<li>Added the <a href="c3ref/stricmp.html">sqlite3_stricmp()</a> interface as a counterpart to
+ <a href="c3ref/stricmp.html">sqlite3_strnicmp()</a>.
+<li>Added the <a href="c3ref/db_readonly.html">sqlite3_db_readonly()</a> interface.
+<li>Added the <a href="c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlpragma">SQLITE_FCNTL_PRAGMA</a> file control, giving <a href="vfs.html">VFS</a> implementations
+ the ability to add new <a href="pragma.html#syntax">PRAGMA</a> statements or to override built-in
+ PRAGMAs.
+<li>Queries of the form: "SELECT max(x), y FROM table" returns the
+ value of y on the same row that contains the maximum x value.
+<li>Added support for the <a href="fts3.html#*fts4languageid">FTS4 languageid option</a>.
+<li>Documented support for the <a href="fts3.html#*fts4content">FTS4 content option</a>. This feature has
+ actually been in the code since <a href="#version_3_7_9">version 3.7.9</a> but is only now considered
+ to be officially supported.
+<li>Pending statements no longer block <a href="lang_transaction.html">ROLLBACK</a>. Instead, the pending
+ statement will return SQLITE_ABORT upon next access after the ROLLBACK.
+<li>Improvements to the handling of CSV inputs in the <a href="cli.html">command-line shell</a>
+<li>Fix a <a href="http://www.sqlite.org/src/info/b7c8682cc1">bug</a> introduced
+ in <a href="#version_3_7_10">version 3.7.10</a> that might cause a LEFT JOIN
+ to be incorrectly converted into an INNER JOIN if the WHERE clause
+ indexable terms connected by OR.
+
+<li>SQLITE_SOURCE_ID:
+ "2012-03-20 11:35:50 00bb9c9ce4f465e6ac321ced2a9d0062dc364669"
+<li>SHA1 for sqlite3.c: d460d7eda3a9dccd291aed2a9fda868b9b120a10
+
+</ol></p>
+<a name="version_3_7_10"></a>
+<h3>2012-01-16 (3.7.10)</h3><p><ol class='lessindent'>
+<li>The default <a href="fileformat2.html#schemaformat">schema format number</a> is changed from 1 to 4.
+ This means that, unless
+ the <a href="pragma.html#pragma_legacy_file_format">PRAGMA legacy_file_format=ON</a> statement is
+ run, newly created database files will be unreadable by version of SQLite
+ prior to 3.3.0 (2006-01-10). It also means that the <a href="lang_createindex.html#descidx">descending indices</a>
+ are enabled by default.
+<li>The sqlite3_pcache_methods structure and the <a href="c3ref/c_config_covering_index_scan.html#sqliteconfigpcache">SQLITE_CONFIG_PCACHE</a>
+ and <a href="c3ref/c_config_covering_index_scan.html#sqliteconfiggetpcache">SQLITE_CONFIG_GETPCACHE</a> configuration parameters are deprecated.
+ They are replaced by a new <a href="c3ref/pcache_methods2.html">sqlite3_pcache_methods2</a> structure and
+ <a href="c3ref/c_config_covering_index_scan.html#sqliteconfigpcache2">SQLITE_CONFIG_PCACHE2</a> and <a href="c3ref/c_config_covering_index_scan.html#sqliteconfiggetpcache2">SQLITE_CONFIG_GETPCACHE2</a> configuration
+ parameters.
+<li>Added the <a href="psow.html">powersafe overwrite</a> property to the VFS interface. Provide
+ the <a href="c3ref/c_iocap_atomic.html">SQLITE_IOCAP_POWERSAFE_OVERWRITE</a> I/O capability, the
+ <a href="compile.html#powersafe_overwrite">SQLITE_POWERSAFE_OVERWRITE</a> compile-time option, and the
+ "psow=BOOLEAN" query parameter for <a href="uri.html">URI filenames</a>.
+<li>Added the <a href="c3ref/db_release_memory.html">sqlite3_db_release_memory()</a> interface and the
+ <a href="pragma.html#pragma_shrink_memory">shrink_memory pragma</a>.
+<li>Added the <a href="c3ref/db_filename.html">sqlite3_db_filename()</a> interface.
+<li>Added the <a href="c3ref/stmt_busy.html">sqlite3_stmt_busy()</a> interface.
+<li>Added the <a href="c3ref/uri_boolean.html">sqlite3_uri_boolean()</a> and <a href="c3ref/uri_boolean.html">sqlite3_uri_int64()</a> interfaces.
+<li>If the argument to <a href="pragma.html#pragma_cache_size">PRAGMA cache_size</a> is negative N, that means to use
+ approximately -1024*N bytes of memory for the page cache regardless of
+ the page size.
+<li>Enhanced the default memory allocator to make use of _msize() on windows,
+ malloc_size() on Mac, and malloc_usable_size() on Linux.
+<li>Enhanced the query planner to support index queries with range constraints
+ on the rowid.
+<li>Enhanced the query planner flattening logic to allow UNION ALL compounds
+ to be promoted upwards to replace a simple wrapper SELECT even if the
+ compounds are joins.
+<li>Enhanced the query planner so that the xfer optimization can be used with
+ INTEGER PRIMARY KEY ON CONFLICT as long as the destination table is
+ initially empty.
+<li>Enhanced the windows <a href="vfs.html">VFS</a> so that all system calls can be overridden
+ using the xSetSystemCall interface.
+<li>Updated the "unix-dotfile" <a href="vfs.html">VFS</a> to use locking directories with mkdir()
+ and rmdir() instead of locking files with open() and unlink().
+<li>Enhancements to the test_quota.c extension to support stdio-like interfaces
+ with quotas.
+<li>Change the unix <a href="vfs.html">VFS</a> to be tolerant of read() system calls that return
+ less then the full number of requested bytes.
+<li>Change both unix and windows <a href="vfs.html">VFSes</a> to report a sector size of 4096
+ instead of the old default of 512.
+<li>In the <a href="tclsqlite.html">TCL Interface</a>, add the -uri option to the "sqlite3" TCL command
+ used for creating new database connection objects.
+<li>Added the <a href="c3ref/c_testctrl_always.html">SQLITE_TESTCTRL_EXPLAIN_STMT</a> test-control option with the
+ <a href="compile.html#enable_tree_explain">SQLITE_ENABLE_TREE_EXPLAIN</a> compile-time option to enable the
+ <a href="cli.html">command-line shell</a> to display ASCII-art parse trees of SQL statements
+ that it processes, for debugging and analysis.
+<li><b>Bug fix:</b>
+ Add an additional xSync when restarting a WAL in order to prevent an
+ exceedingly unlikely but theoretically possible
+ database corruption following power-loss.
+ Ticket <a href="http://www.sqlite.org/src/info/ff5be73dee">ff5be73dee</a>.
+<li><b>Bug fix:</b>
+ Change the VDBE so that all registers are initialized to Invalid
+ instead of NULL.
+ Ticket <a href="http://www.sqlite.org/src/info/7bbfb7d442">7bbfb7d442</a>
+<li><b>Bug fix:</b>
+ Fix problems that can result from 32-bit integer overflow.
+ Ticket <a href="http://www.sqlite.org/src/info/ac0ff496b7e2">ac00f496b7e2</a>
+<li>SQLITE_SOURCE_ID:
+ "2012-01-16 13:28:40 ebd01a8deffb5024a5d7494eef800d2366d97204"
+<li>SHA1 for sqlite3.c: 6497cbbaad47220bd41e2e4216c54706e7ae95d4
+
+</ol></p>
+<a name="version_3_7_9"></a>
+<h3>2011-11-01 (3.7.9)</h3><p><ol class='lessindent'>
+<li>If a search token (on the right-hand side of the MATCH operator) in
+ <a href="fts3.html#fts4">FTS4</a> begins with "&#94;" then that token must be the first in its field
+ of the document. <b>** Potentially Incompatible Change **</b>
+<li>Added options <a href="c3ref/c_dbstatus_options.html#sqlitedbstatuscachehit">SQLITE_DBSTATUS_CACHE_HIT</a> and <a href="c3ref/c_dbstatus_options.html#sqlitedbstatuscachemiss">SQLITE_DBSTATUS_CACHE_MISS</a>
+ to the <a href="c3ref/db_status.html">sqlite3_db_status()</a> interface.
+<li>Removed support for <a href="compile.html#enable_stat2">SQLITE_ENABLE_STAT2</a>, replacing it with the much
+ more capable <a href="compile.html#enable_stat3">SQLITE_ENABLE_STAT3</a> option.
+<li>Enhancements to the sqlite3_analyzer utility program, including the
+ --pageinfo and --stats options and support for multiplexed databases.
+<li>Enhance the <a href="c3ref/data_count.html">sqlite3_data_count()</a> interface so that it can be used to
+ determine if SQLITE_DONE has been seen on the prepared statement.
+<li>Added the <a href="c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntloverwrite">SQLITE_FCNTL_OVERWRITE</a> file-control by which the SQLite core
+ indicates to the VFS that the current transaction will overwrite the
+ entire database file.
+<li>Increase the default <a href="malloc.html#lookaside">lookaside memory allocator</a> allocation size from
+ 100 to 128 bytes.
+<li>Enhanced the query planner so that it can factor terms in and out of
+ OR expressions in the WHERE clause in an effort to find better indices.
+<li>Added the <a href="compile.html#direct_overflow_read">SQLITE_DIRECT_OVERFLOW_READ</a> compile-time option, causing
+ <a href="fileformat2.html#ovflpgs">overflow pages</a> to be read directly from the database file,
+ bypassing the <a href="c3ref/pcache_methods2.html">page cache</a>.
+<li>Remove limits on the magnitude of precision and width value in the
+ format specifiers of the <a href="c3ref/mprintf.html">sqlite3_mprintf()</a> family of string rendering
+ routines.
+<li>Fix a bug that prevent <a href="lang_altertable.html">ALTER TABLE ... RENAME</a> from working
+ on some virtual tables in a database with a UTF16 encoding.
+<li>Fix a bug in ASCII-to-float conversion that causes slow performance and
+ incorrect results when converting numbers with ridiculously large exponents.
+<li>Fix a bug that causes incorrect results in aggregate queries that use
+ multiple aggregate functions whose arguments contain complicated expressions
+ that differ only in the case of string literals contained within those
+ expressions.
+<li>Fix a bug that prevented the <a href="pragma.html#pragma_page_count">page_count</a> and <a href="pragma.html#pragma_quick_check">quick_check</a> pragmas from
+ working correctly if their names were capitalized.
+<li>Fix a bug that caused <a href="lang_vacuum.html">VACUUM</a> to fail if the <a href="pragma.html#pragma_count_changes">count_changes pragma</a> was
+ engaged.
+<li>Fix a bug in <a href="vtab.html">virtual table</a> implementation that causes a crash if
+ an <a href="fts3.html#fts4">FTS4</a> table is <a href="lang_droptable.html">dropped</a> inside a transaction and
+ a <a href="lang_savepoint.html">SAVEPOINT</a> occurs afterwards.
+<li>SQLITE_SOURCE_ID:
+ "2011-11-01 00:52:41 c7c6050ef060877ebe77b41d959e9df13f8c9b5e"
+<li>SHA1 for sqlite3.c: becd16877f4f9b281b91c97e106089497d71bb47
+
+</ol></p>
+<a name="version_3_7_8"></a>
+<h3>2011-09-19 (3.7.8)</h3><p><ol class='lessindent'>
+<li> Orders of magnitude performance improvement for <a href="lang_createindex.html">CREATE INDEX</a> on
+ very large tables.
+<li> Improved the windows VFS to better defend against interference
+ from anti-virus software.
+<li> Improved query plan optimization when the DISTINCT keyword is present.
+<li> Allow more system calls to be overridden in the unix VFS - to provide
+ better support for chromium sandboxes.
+<li> Increase the default size of a lookahead cache line from 100 to 128 bytes.
+<li> Enhancements to the test_quota.c module so that it can track
+ preexisting files.
+<li> Bug fix: Virtual tables now handle IS NOT NULL constraints correctly.
+<li> Bug fixes: Correctly handle nested correlated subqueries used with
+ indices in a WHERE clause.
+<li> SQLITE_SOURCE_ID:
+ "2011-09-19 14:49:19 3e0da808d2f5b4d12046e05980ca04578f581177"
+<li> SHA1 for sqlite3.c: bfcd74a655636b592c5dba6d0d5729c0f8e3b4de
+
+</ol></p>
+<a name="version_3_7_7_1"></a>
+<h3>2011-06-28 (3.7.7.1)</h3><p><ol class='lessindent'>
+<li> Fix <a href="http://www.sqlite.org/src/info/25ee812710">a bug</a> causing
+ <a href="pragma.html#pragma_case_sensitive_like">PRAGMA case_sensitive_like</a> statements compiled using sqlite3_prepare()
+ to fail with an <a href="rescode.html#schema">SQLITE_SCHEMA</a> error.
+<li> SQLITE_SOURCE_ID:
+ "2011-06-28 17:39:05 af0d91adf497f5f36ec3813f04235a6e195a605f"
+<li> SHA1 for sqlite3.c: d47594b8a02f6cf58e91fb673e96cb1b397aace0
+
+</ol></p>
+<a name="version_3_7_7"></a>
+<h3>2011-06-23 (3.7.7)</h3><p><ol class='lessindent'>
+<li> Add support for <a href="uri.html">URI filenames</a>
+<li> Add the <a href="c3ref/vtab_config.html">sqlite3_vtab_config()</a> interface in
+ support of <a href="lang_conflict.html">ON CONFLICT</a> clauses with <a href="vtab.html">virtual tables</a>.
+<li> Add the <a href="vtab.html#xsavepoint">xSavepoint</a>, <a href="vtab.html#xsavepoint">xRelease</a> and <a href="vtab.html#xsavepoint">xRollbackTo</a> methods in
+ <a href="vtab.html">virtual tables</a> in support of <a href="lang_savepoint.html">SAVEPOINT</a> for virtual tables.
+<li> Update the built-in <a href="fts3.html">FTS3/FTS4</a> and <a href="rtree.html">RTREE</a> virtual tables to support
+ <a href="lang_conflict.html">ON CONFLICT</a> clauses and <a href="lang_replace.html">REPLACE</a>.
+<li> Avoid unnecessary reparsing of the database schema.
+<li> Added support for the <a href="fts3.html#fts4prefix">FTS4 prefix option</a> and the <a href="fts3.html#fts4order">FTS4 order option</a>.
+<li> Allow <a href="wal.html">WAL-mode</a> databases to be opened read-only as long as
+ there is an existing read/write connection.
+<li> Added support for <a href="shortnames.html">short filenames</a>.
+<li> SQLITE_SOURCE_ID:
+ "2011-06-23 19:49:22 4374b7e83ea0a3fbc3691f9c0c936272862f32f2"
+<li> SHA1 for sqlite3.c: 5bbe79e206ae5ffeeca760dbd0d66862228db551
+
+</ol></p>
+<a name="version_3_7_6_3"></a>
+<h3>2011-05-19 (3.7.6.3)</h3><p><ol class='lessindent'>
+<li> Fix a problem with <a href="wal.html">WAL mode</a> which could cause transactions to
+ silently rollback if the <a href="pragma.html#pragma_cache_size">cache_size</a> is set very small (less than 10)
+ and SQLite comes under memory pressure.
+
+</ol></p>
+<a name="version_3_7_6_2"></a>
+<h3>2011-04-17 (3.7.6.2)</h3><p><ol class='lessindent'>
+<li> Fix the function prototype for the open(2) system call to agree with
+ POSIX. Without this fix, pthreads does not work correctly on NetBSD.
+<li> SQLITE_SOURCE_ID:
+ "2011-04-17 17:25:17 154ddbc17120be2915eb03edc52af1225eb7cb5e"
+<li> SHA1 for sqlite3.c: 806577fd524dd5f3bfd8d4d27392ed2752bc9701
+
+
+</ol></p>
+<a name="version_3_7_6_1"></a>
+<h3>2011-04-13 (3.7.6.1)</h3><p><ol class='lessindent'>
+<li> Fix a bug in 3.7.6 that only appears if the <a href="c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlsizehint">SQLITE_FCNTL_SIZE_HINT</a>
+ file control is used with a build of SQLite that makes use of the
+ HAVE_POSIX_FALLOCATE compile-time option and which has
+ SQLITE_ENABLE_LOCKING_MODE turned off.
+<li> SQLITE_SOURCE_ID:
+ "2011-04-13 14:40:25 a35e83eac7b185f4d363d7fa51677f2fdfa27695"
+<li> SHA1 for sqlite3.c: b81bfa27d3e09caf3251475863b1ce6dd9f6ab66
+
+</ol></p>
+<a name="version_3_7_6"></a>
+<h3>2011-04-12 (3.7.6)</h3><p><ol class='lessindent'>
+<li> Added the <a href="c3ref/wal_checkpoint_v2.html">sqlite3_wal_checkpoint_v2()</a> interface and enhanced the
+ <a href="pragma.html#pragma_wal_checkpoint">wal_checkpoint pragma</a> to support blocking checkpoints.
+<li> Improvements to the query planner so that it makes better estimates of
+ plan costs and hence does a better job of choosing the right plan,
+ especially when <a href="compile.html#enable_stat2">SQLITE_ENABLE_STAT2</a> is used.
+<li> Fix a bug which prevented deferred foreign key constraints from being
+ enforced when <a href="c3ref/finalize.html">sqlite3_finalize()</a> was not
+ called by one statement with a failed foreign key constraint prior to
+ another statement with foreign key constraints running.
+<li> Integer arithmetic operations that would have resulted in overflow
+ are now performed using floating-point instead.
+<li> Increased the version number on the <a href="c3ref/vfs.html">VFS object</a> to
+ 3 and added new methods xSetSysCall, xGetSysCall, and xNextSysCall
+ used for doing full-coverage testing.
+<li> Increase the maximum value of <a href="limits.html#max_attached">SQLITE_MAX_ATTACHED</a> from 30 to 62
+ (though the default value remains at 10).
+<li> Enhancements to FTS4:
+ <ol type="a">
+ <li> Added the <a href="fts3.html#fts4aux">fts4aux</a> table
+ <li> Added support for <a href="fts3.html#*fts4compression">compressed FTS4 content</a>
+ </ol>
+<li> Enhance the <a href="lang_analyze.html">ANALYZE</a> command to support the name of an index
+ as its argument, in order to analyze just that one index.
+<li> Added the "unix-excl" built-in VFS on unix and unix-like platforms.
+<li> SQLITE_SOURCE_ID:
+ "2011-04-12 01:58:40 f9d43fa363d54beab6f45db005abac0a7c0c47a7"
+<li> SHA1 for sqlite3.c: f38df08547efae0ff4343da607b723f588bbd66b
+
+</ol></p>
+<a name="version_3_7_5"></a>
+<h3>2011-02-01 (3.7.5)</h3><p><ol class='lessindent'>
+<li> Added the <a href="c3ref/mprintf.html">sqlite3_vsnprintf()</a> interface.
+<li> Added the <a href="c3ref/c_dbstatus_options.html#sqlitedbstatuslookasidehit">SQLITE_DBSTATUS_LOOKASIDE_HIT</a>,
+ <a href="c3ref/c_dbstatus_options.html#sqlitedbstatuslookasidemisssize">SQLITE_DBSTATUS_LOOKASIDE_MISS_SIZE</a>, and
+ <a href="c3ref/c_dbstatus_options.html#sqlitedbstatuslookasidemissfull">SQLITE_DBSTATUS_LOOKASIDE_MISS_FULL</a> options for the
+ <a href="c3ref/db_status.html">sqlite3_db_status()</a> interface.
+<li> Added the <a href="compile.html#omit_autoreset">SQLITE_OMIT_AUTORESET</a> compile-time option.
+<li> Added the <a href="compile.html#default_foreign_keys">SQLITE_DEFAULT_FOREIGN_KEYS</a> compile-time option.
+<li> Updates to <a href="c3ref/stmt_readonly.html">sqlite3_stmt_readonly()</a> so that its result is well-defined
+ for all prepared statements and so that it works with <a href="lang_vacuum.html">VACUUM</a>.
+<li> Added the "-heap" option to the <a href="cli.html">command-line shell</a>
+<li> Fix <a href="http://www.sqlite.org/src/info/5d863f876e">a bug</a> involving
+ frequent changes in and out of WAL mode and
+ VACUUM that could (in theory) cause database corruption.
+<li> Enhance the <a href="c3ref/profile.html">sqlite3_trace()</a> mechanism so that nested SQL statements
+ such as might be generated by virtual tables are shown but are shown
+ in comments and without parameter expansion. This
+ greatly improves tracing output when using the FTS3/4 and/or RTREE
+ virtual tables.
+<li> Change the xFileControl() methods on all built-in VFSes to return
+ <a href="rescode.html#notfound">SQLITE_NOTFOUND</a> instead of <a href="rescode.html#error">SQLITE_ERROR</a> for an unrecognized
+ operation code.
+<li> The SQLite core invokes the <a href="c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlsyncomitted">SQLITE_FCNTL_SYNC_OMITTED</a>
+ <a href="c3ref/file_control.html">file control</a>
+ to the VFS in place of a call to xSync if the database has
+ <a href="pragma.html#pragma_synchronous">PRAGMA synchronous</a> set to OFF.
+
+</ol></p>
+<a name="version_3_7_4"></a>
+<h3>2010-12-07 (3.7.4)</h3><p><ol class='lessindent'>
+<li> Added the <a href="c3ref/blob_reopen.html">sqlite3_blob_reopen()</a> interface to allow an existing
+ <a href="c3ref/blob.html">sqlite3_blob</a> object to be rebound to a new row.
+<li> Use the new <a href="c3ref/blob_reopen.html">sqlite3_blob_reopen()</a> interface to improve the performance
+ of FTS.
+<li> <a href="c3ref/vfs.html">VFSes</a> that do not support shared memory are allowed
+ to access <a href="wal.html">WAL</a> databases if <a href="pragma.html#pragma_locking_mode">PRAGMA locking_mode</a> is set to EXCLUSIVE.
+<li> Enhancements to <a href="eqp.html">EXPLAIN QUERY PLAN</a>.
+<li> Added the <a href="c3ref/stmt_readonly.html">sqlite3_stmt_readonly()</a> interface.
+<li> Added <a href="pragma.html#pragma_checkpoint_fullfsync">PRAGMA checkpoint_fullfsync</a>.
+<li> Added the <a href="c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlfilepointer">SQLITE_FCNTL_FILE_POINTER</a> option
+ to <a href="c3ref/file_control.html">sqlite3_file_control()</a>.
+<li> Added support for <a href="fts3.html#fts4">FTS4</a> and enhancements
+ to the FTS <a href="fts3.html#matchinfo">matchinfo()</a> function.
+<li> Added the test_superlock.c module which provides example
+ code for obtaining an exclusive lock to a rollback
+ or WAL database.
+<li> Added the test_multiplex.c module which provides
+ an example VFS that provides multiplexing (sharding)
+ of a DB, splitting it over multiple files of fixed size.
+<li> A <a href="http://www.sqlite.org/src/info/80ba201079">very obscure bug</a>
+ associated with the <a href="optoverview.html#or_opt">or optimization</a> was fixed.
+
+</ol></p>
+<a name="version_3_7_3"></a>
+<h3>2010-10-08 (3.7.3)</h3><p><ol class='lessindent'>
+<li> Added the <a href="c3ref/create_function.html">sqlite3_create_function_v2()</a> interface that includes a
+ destructor callback.
+<li> Added support for <a href="rtree.html#customquery">custom r-tree queries</a> using application-supplied
+ callback routines to define the boundary of the query region.
+<li> The default page cache strives more diligently to avoid using memory
+ beyond what is allocated to it by <a href="c3ref/c_config_covering_index_scan.html#sqliteconfigpagecache">SQLITE_CONFIG_PAGECACHE</a>. Or if
+ using page cache is allocating from the heap, it strives to avoid
+ going over the <a href="c3ref/hard_heap_limit64.html">sqlite3_soft_heap_limit64()</a>, even if
+ <a href="compile.html#enable_memory_management">SQLITE_ENABLE_MEMORY_MANAGEMENT</a> is not set.
+<li> Added the <a href="c3ref/hard_heap_limit64.html">sqlite3_soft_heap_limit64()</a> interface as a replacement for
+ <a href="c3ref/soft_heap_limit.html">sqlite3_soft_heap_limit()</a>.
+<li> The <a href="lang_analyze.html">ANALYZE</a> command now gathers statistics on tables even if they
+ have no indices.
+<li> Tweaks to the query planner to help it do a better job of finding the
+ most efficient query plan for each query.
+<li> Enhanced the internal text-to-numeric conversion routines so that they
+ work with UTF8 or UTF16, thereby avoiding some UTF16-to-UTF8 text
+ conversions.
+<li> Fix a problem that was causing excess memory usage with large <a href="wal.html">WAL</a>
+ transactions in win32 systems.
+<li> The interface between the VDBE and B-Tree layer is enhanced such that
+ the VDBE provides hints to the B-Tree layer letting the B-Tree layer
+ know when it is safe to use hashing instead of B-Trees for transient
+ tables.
+<li> Miscellaneous documentation enhancements.
+
+</ol></p>
+<a name="version_3_7_2"></a>
+<h3>2010-08-24 (3.7.2)</h3><p><ol class='lessindent'>
+<li> Fix an <a href="http://www.sqlite.org/src/info/5e10420e8d">
+ old and very obscure bug</a> that can lead to corruption of the
+ database <a href="fileformat2.html#freelist">free-page list</a> when <a href="pragma.html#pragma_incremental_vacuum">incremental_vacuum</a> is used.
+
+</ol></p>
+<a name="version_3_7_1"></a>
+<h3>2010-08-23 (3.7.1)</h3><p><ol class='lessindent'>
+<li> Added new commands <a href="c3ref/c_dbstatus_options.html#sqlitedbstatusschemaused">SQLITE_DBSTATUS_SCHEMA_USED</a> and
+ <a href="c3ref/c_dbstatus_options.html#sqlitedbstatusstmtused">SQLITE_DBSTATUS_STMT_USED</a> to the <a href="c3ref/db_status.html">sqlite3_db_status()</a> interface, in
+ order to report out the amount of memory used to hold the schema and
+ prepared statements of a connection.
+<li> Increase the maximum size of a database pages from 32KiB to 64KiB.
+<li> Use the <a href="optoverview.html#like_opt">LIKE optimization</a> even if the right-hand side string contains
+ no wildcards.
+<li> Added the <a href="c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlchunksize">SQLITE_FCNTL_CHUNK_SIZE</a> verb to the <a href="c3ref/file_control.html">sqlite3_file_control()</a>
+ interface for both unix and windows, to cause database files to grow in
+ large chunks in order to reduce disk fragmentation.
+<li> Fixed a bug in the query planner that caused performance regressions
+ relative to 3.6.23.1 on some complex joins.
+<li> Fixed a typo in the OS/2 backend.
+<li> Refactored the pager module.
+<li> The SQLITE_MAX_PAGE_SIZE compile-time option is now silently ignored.
+ The maximum page size is hard-coded at 65536 bytes.
+
+</ol></p>
+<a name="version_3_7_0_1"></a>
+<h3>2010-08-04 (3.7.0.1)</h3><p><ol class='lessindent'>
+<li> Fix a potential database corruption bug that can occur if version 3.7.0
+ and version 3.6.23.1 alternately write to the same database file.
+ <a href="http://www.sqlite.org/src/info/51ae9cad317a1">
+ Ticket &#91;51ae9cad317a1&#93;</a>
+<li> Fix a performance regression related to the query planner enhancements
+ of version 3.7.0.
+
+</ol></p>
+<a name="version_3_7_0"></a>
+<h3>2010-07-21 (3.7.0)</h3><p><ol class='lessindent'>
+<li> Added support for <a href="wal.html">write-ahead logging</a>.
+<li> Query planner enhancement - automatic transient indices are created
+ when doing so reduces the estimated query time.
+<li> Query planner enhancement - the ORDER BY becomes a no-op if the query
+ also contains a GROUP BY clause that forces the correct output order.
+<li> Add the <a href="c3ref/c_dbstatus_options.html#sqlitedbstatuscacheused">SQLITE_DBSTATUS_CACHE_USED</a> verb for <a href="c3ref/db_status.html">sqlite3_db_status()</a>.
+<li> The logical database size is now stored in the database header so that
+ bytes can be appended to the end of the database file without corrupting
+ it and so that SQLite will work correctly on systems that lack support
+ for ftruncate().
+
+</ol></p>
+<a name="version_3_6_23_1"></a>
+<h3>2010-03-26 (3.6.23.1)</h3><p><ol class='lessindent'>
+<li> Fix a bug in the offsets() function of <a href="fts3.html">FTS3</a>
+<li> Fix a missing "sync" that when omitted could lead to database
+ corruption if a power failure or OS crash occurred just as a
+ ROLLBACK operation was finishing.
+
+</ol></p>
+<a name="version_3_6_23"></a>
+<h3>2010-03-09 (3.6.23)</h3><p><ol class='lessindent'>
+<li> Added the <a href="pragma.html#pragma_secure_delete">secure_delete pragma</a>.
+<li> Added the <a href="c3ref/compileoption_get.html">sqlite3_compileoption_used()</a> and
+ <a href="c3ref/compileoption_get.html">sqlite3_compileoption_get()</a> interfaces as well as the
+ <a href="pragma.html#pragma_compile_options">compile_options pragma</a> and the <a href="lang_corefunc.html#sqlite_compileoption_used">sqlite_compileoption_used()</a> and
+ <a href="lang_corefunc.html#sqlite_compileoption_get">sqlite_compileoption_get()</a> SQL functions.
+<li> Added the <a href="c3ref/log.html">sqlite3_log()</a> interface together with the
+ <a href="c3ref/c_config_covering_index_scan.html#sqliteconfiglog">SQLITE_CONFIG_LOG</a> verb to <a href="c3ref/config.html">sqlite3_config()</a>. The ".log" command
+ is added to the <a href="cli.html">Command Line Interface</a>.
+<li> Improvements to <a href="fts3.html">FTS3</a>.
+<li> Improvements and bug-fixes in support for <a href="compile.html#omit_floating_point">SQLITE_OMIT_FLOATING_POINT</a>.
+<li> The <a href="pragma.html#pragma_integrity_check">integrity_check pragma</a> is enhanced to detect out-of-order rowids.
+<li> The ".genfkey" operator has been removed from the
+ <a href="cli.html">Command Line Interface</a>.
+<li> Updates to the co-hosted <a href="lemon.html">Lemon LALR(1) parser generator</a>. (These
+ updates did not affect SQLite.)
+<li> Various minor bug fixes and performance enhancements.
+
+</ol></p>
+<a name="version_3_6_22"></a>
+<h3>2010-01-06 (3.6.22)</h3><p><ol class='lessindent'>
+<li>Fix bugs that can (rarely) lead to incorrect query results when
+ the CAST or OR operators are used in the WHERE clause of a query.
+<li>Continuing enhancements and improvements to <a href="fts3.html">FTS3</a>.
+<li>Other miscellaneous bug fixes.
+
+</ol></p>
+<a name="version_3_6_21"></a>
+<h3>2009-12-07 (3.6.21)</h3><p><ol class='lessindent'>
+<li>The SQL output resulting from <a href="c3ref/profile.html">sqlite3_trace()</a> is now modified to include
+the values of <a href="lang_expr.html#varparam">bound parameters</a>.
+<li>Performance optimizations targeting a specific use case from
+a single high-profile user of SQLite. A 12% reduction in the number of
+CPU operations is achieved (as measured by Valgrind). Actual performance
+improvements in practice may vary depending on workload. Changes
+include:
+<ol type='a'>
+ <li>The <a href="lang_corefunc.html#ifnull">ifnull()</a> and <a href="lang_corefunc.html#coalesce">coalesce()</a> SQL functions are now implemented
+ using in-line VDBE code rather than calling external functions, so that
+ unused arguments need never be evaluated.
+ <li>The <a href="lang_corefunc.html#substr">substr()</a> SQL function does not bother to measure the length
+ its entire input string if it is only computing a prefix
+ <li>Unnecessary OP_IsNull, OP_Affinity, and OP_MustBeInt VDBE opcodes
+ are suppressed
+ <li>Various code refactorizations for performance
+</ol>
+<li>The FTS3 extension has undergone a major rework and cleanup.
+New <a href="fts3.html">FTS3 documentation</a> is now available.
+<li>The <a href="compile.html#secure_delete">SQLITE_SECURE_DELETE</a> compile-time option fixed to make sure that
+content is deleted even when the <a href="lang_delete.html#truncateopt">truncate optimization</a> applies.
+<li>Improvements to "dot-command" handling in the
+<a href="cli.html">Command Line Interface</a>.
+<li>Other minor bug fixes and documentation enhancements.
+
+</ol></p>
+<a name="version_3_6_20"></a>
+<h3>2009-11-04 (3.6.20)</h3><p><ol class='lessindent'>
+<li>Optimizer enhancement: <a href="c3ref/stmt.html">prepared statements</a> are automatically
+re-compiled when a binding on the RHS of a LIKE operator changes or
+when any range constraint changes under <a href="compile.html#enable_stat2">SQLITE_ENABLE_STAT2</a>.
+<li>Various minor bug fixes and documentation enhancements.
+
+</ol></p>
+<a name="version_3_6_16_1"></a>
+<h3>2009-10-30 (3.6.16.1)</h3><p><ol class='lessindent'>
+<li>A small patch to version 3.6.16 to fix
+<a href="http://www.sqlite.org/src/info/6b00e0a34c">the OP_If bug</a>.
+
+</ol></p>
+<a name="version_3_6_19"></a>
+<h3>2009-10-14 (3.6.19)</h3><p><ol class='lessindent'>
+<li>Added support for <a href="foreignkeys.html">foreign key constraints</a>. Foreign key constraints
+ are disabled by default. Use the <a href="pragma.html#pragma_foreign_keys">foreign_keys pragma</a> to turn them on.
+<li>Generalized the IS and IS NOT operators to take arbitrary expressions
+ on their right-hand side.
+<li>The <a href="tclsqlite.html">TCL Interface</a> has been enhanced to use the
+ <a href="http://www.tcl-lang.org/cgi-bin/tct/tip/322.html">Non-Recursive Engine (NRE)</a>
+ interface to the TCL interpreter when linked against TCL 8.6 or later.
+<li>Fix a bug introduced in 3.6.18 that can lead to a segfault when an
+ attempt is made to write on a read-only database.
+
+</ol></p>
+<a name="version_3_6_18"></a>
+<h3>2009-09-11 (3.6.18)</h3><p><ol class='lessindent'>
+<li>Versioning of the SQLite source code has transitioned from CVS to
+ <a href="http://www.fossil-scm.org/">Fossil</a>.
+<li>Query planner enhancements.
+<li>The <a href="compile.html#enable_stat2">SQLITE_ENABLE_STAT2</a> compile-time option causes the <a href="lang_analyze.html">ANALYZE</a>
+ command to collect a small histogram of each index, to help SQLite better
+ select among competing range query indices.
+<li>Recursive triggers can be enabled using the <a href="pragma.html#pragma_recursive_triggers">PRAGMA recursive_triggers</a>
+ statement.
+<li>Delete triggers fire when rows are removed due to a
+ <a href="lang_conflict.html">REPLACE conflict resolution</a>. This feature is only
+ enabled when recursive triggers are enabled.
+<li>Added the <a href="c3ref/c_open_autoproxy.html">SQLITE_OPEN_SHAREDCACHE</a> and <a href="c3ref/c_open_autoproxy.html">SQLITE_OPEN_PRIVATECACHE</a>
+ flags for <a href="c3ref/open.html">sqlite3_open_v2()</a> used to override the global
+ <a href="sharedcache.html">shared cache mode</a> settings for individual database connections.
+<li>Added improved version identification features:
+ C-Preprocessor macro <a href="c3ref/c_source_id.html">SQLITE_SOURCE_ID</a>,
+ C/C++ interface <a href="c3ref/libversion.html">sqlite3_sourceid()</a>, and SQL function <a href="lang_corefunc.html#sqlite_source_id">sqlite_source_id()</a>.
+<li>Obscure bug fix on triggers
+(<a href="http://www.sqlite.org/src/info/efc02f9779">&#91;efc02f9779&#93;</a>).
+
+</ol></p>
+<a name="version_3_6_17"></a>
+<h3>2009-08-10 (3.6.17)</h3><p><ol class='lessindent'>
+<li>Expose the <a href="c3ref/stricmp.html">sqlite3_strnicmp()</a> interface for use by extensions and
+ applications.
+<li>Remove the restriction on <a href="vtab.html">virtual tables</a> and <a href="sharedcache.html">shared cache mode</a>.
+ Virtual tables and shared cache can now be used at the same time.
+<li>Many code simplifications and obscure bug fixes in support of
+ providing <a href="testing.html#coverage">100% branch test coverage</a>.
+
+</ol></p>
+<a name="version_3_6_16"></a>
+<h3>2009-06-27 (3.6.16)</h3><p><ol class='lessindent'>
+<li>Fix a bug (ticket #3929) that occasionally causes INSERT or UPDATE
+ operations to fail on an indexed table that has a self-modifying trigger.
+<li>Other minor bug fixes and performance optimizations.
+
+</ol></p>
+<a name="version_3_6_15"></a>
+<h3>2009-06-15 (3.6.15)</h3><p><ol class='lessindent'>
+<li>Refactor the internal representation of SQL expressions so that they
+ use less memory on embedded platforms.
+<li>Reduce the amount of stack space used
+<li>Fix an 64-bit alignment bug on HP/UX and Sparc
+<li>The <a href="c3ref/create_function.html">sqlite3_create_function()</a> family of interfaces now return
+ <a href="rescode.html#misuse">SQLITE_MISUSE</a> instead of <a href="rescode.html#error">SQLITE_ERROR</a> when passed invalid
+ parameter combinations.
+<li>When new tables are created using CREATE TABLE ... AS SELECT ... the
+ datatype of the columns is the simplified SQLite datatype (TEXT, INT,
+ REAL, NUMERIC, or BLOB) instead of a copy of the original datatype from
+ the source table.
+<li>Resolve race conditions when checking for a hot rollback journal.
+<li>The <a href="c3ref/initialize.html">sqlite3_shutdown()</a> interface frees all mutexes under windows.
+<li>Enhanced robustness against corrupt database files
+<li>Continuing improvements to the test suite and fixes to obscure
+ bugs and inconsistencies that the test suite improvements are
+ uncovering.
+
+
+</ol></p>
+<a name="version_3_6_14_2"></a>
+<h3>2009-05-25 (3.6.14.2)</h3><p><ol class='lessindent'>
+<li>Fix a code generator bug introduced in <a href="#version_3_6_14">version 3.6.14</a>. This bug
+ can cause incorrect query results under obscure circumstances.
+ Ticket #3879.
+
+</ol></p>
+<a name="version_3_6_14_1"></a>
+<h3>2009-05-19 (3.6.14.1)</h3><p><ol class='lessindent'>
+<li>Fix a bug in <a href="lang_aggfunc.html#group_concat">group_concat()</a>, ticket #3841
+<li>Fix a performance bug in the pager cache, ticket #3844
+<li>Fix a bug in the <a href="c3ref/backup.html">sqlite3_backup</a> implementation that can lead
+ to a corrupt backup database. Ticket #3858.
+
+</ol></p>
+<a name="version_3_6_14"></a>
+<h3>2009-05-07 (3.6.14)</h3><p><ol class='lessindent'>
+<li>Added the optional <a href="asyncvfs.html">asynchronous VFS</a> module.</li>
+<li>Enhanced the query optimizer so that <a href="vtab.html">virtual tables</a> are able to
+ make use of OR and IN operators in the WHERE clause.</li>
+<li>Speed improvements in the btree and pager layers.</li>
+<li>Added the <a href="compile.html#have_isnan">SQLITE_HAVE_ISNAN</a> compile-time option which will cause
+ the isnan() function from the standard math library to be used instead
+ of SQLite's own home-brew NaN checker.</li>
+<li>Countless minor bug fixes, documentation improvements, new and
+ improved test cases, and code simplifications and cleanups.</p>
+
+</ol></p>
+<a name="version_3_6_13"></a>
+<h3>2009-04-13 (3.6.13)</h3><p><ol class='lessindent'>
+<li>Fix a bug in <a href="#version_3_6_12">version 3.6.12</a> that causes a segfault when running
+ a count(*) on the sqlite_master table of an empty database. Ticket #3774.
+<li>Fix a bug in <a href="#version_3_6_12">version 3.6.12</a> that causes a segfault that when
+ inserting into a table using a DEFAULT value where there is a
+ function as part of the DEFAULT value expression. Ticket #3791.
+<li>Fix data structure alignment issues on Sparc. Ticket #3777.
+<li>Other minor bug fixes.
+
+</ol></p>
+<a name="version_3_6_12"></a>
+<h3>2009-03-31 (3.6.12)</h3><p><ol class='lessindent'>
+<li>Fixed a bug that caused database corruption when an <a href="pragma.html#pragma_incremental_vacuum">incremental_vacuum</a> is
+ rolled back in an in-memory database. Ticket #3761.
+<li>Added the <a href="c3ref/unlock_notify.html">sqlite3_unlock_notify()</a> interface.
+<li>Added the <a href="pragma.html#pragma_reverse_unordered_selects">reverse_unordered_selects pragma</a>.
+<li>The default page size on windows is automatically adjusted to match the
+ capabilities of the underlying filesystem.
+<li>Add the new ".genfkey" command in the <a href="cli.html">CLI</a> for generating triggers to
+ implement foreign key constraints.
+<li>Performance improvements for "count(*)" queries.
+<li>Reduce the amount of heap memory used, especially by TRIGGERs.
+<li>
+
+</ol></p>
+<a name="version_3_6_11"></a>
+<h3>2009-02-18 (3.6.11)</h3><p><ol class='lessindent'>
+<li>Added the <a href="c3ref/backup_finish.html#sqlite3backupinit">hot-backup interface</a>.
+<li>Added new commands ".backup" and ".restore" to the <a href="cli.html">CLI</a>.
+<li>Added new methods <a href="tclsqlite.html#backup">backup</a> and
+ <a href="tclsqlite.html#restore">restore</a> to the TCL interface.
+<li>Improvements to the <a href="syntaxdiagrams.html">syntax bubble
+ diagrams</a>
+<li>Various minor bug fixes
+
+</ol></p>
+<a name="version_3_6_10"></a>
+<h3>2009-01-15 (3.6.10)</h3><p><ol class='lessindent'>
+<li>Fix a cache coherency problem that could lead to database corruption.
+ Ticket #3584.
+
+</ol></p>
+<a name="version_3_6_9"></a>
+<h3>2009-01-14 (3.6.9)</h3><p><ol class='lessindent'>
+<li>Fix two bugs, which when combined might result in incorrect
+ query results. Both bugs were harmless by themselves; only when
+ they team up do they cause problems. Ticket #3581.
+
+</ol></p>
+<a name="version_3_6_8"></a>
+<h3>2009-01-12 (3.6.8)</h3><p><ol class='lessindent'>
+<li>Added support for <a href="lang_savepoint.html">nested transactions</a></li>
+<li>Enhanced the query optimizer so that it is able to use
+ multiple indices to efficiently process
+ <a href="optoverview.html#or_opt">OR-connected constraints</a>
+ in a WHERE clause.</li>
+<li>Added support for parentheses in FTS3 query patterns using the
+ <a href="compile.html#enable_fts3_parenthesis">SQLITE_ENABLE_FTS3_PARENTHESIS</a> compile-time option.</li>
+
+</ol></p>
+<a name="version_3_6_7"></a>
+<h3>2008-12-16 (3.6.7)</h3><p><ol class='lessindent'>
+<li>Reorganize the Unix interface in os_unix.c</li>
+<li>Added support for "Proxy Locking" on Mac OS X.</li>
+<li>Changed the prototype of the <a href="c3ref/auto_extension.html">sqlite3_auto_extension()</a> interface in a
+ way that is backwards compatible but which might cause warnings in new
+ builds of applications that use that interface.</li>
+<li>Changed the signature of the xDlSym method of the <a href="c3ref/vfs.html">sqlite3_vfs</a> object
+ in a way that is backwards compatible but which might cause
+ compiler warnings.</li>
+<li>Added superfluous casts and variable initializations in order
+ to suppress nuisance compiler warnings.</li>
+<li>Fixes for various minor bugs.</li>
+
+</ol></p>
+<a name="version_3_6_6_2"></a>
+<h3>2008-11-26 (3.6.6.2)</h3><p><ol class='lessindent'>
+<li>Fix a bug in the b-tree delete algorithm that seems like it might be
+ able to cause database corruption. The bug was first introduced in
+ <a href="#version_3_6_6">version 3.6.6</a> by check-in &#91;5899&#93; on 2008-11-13.</li>
+<li>Fix a memory leak that can occur following a disk I/O error.</li>
+
+</ol></p>
+<a name="version_3_6_6_1"></a>
+<h3>2008-11-22 (3.6.6.1)</h3><p><ol class='lessindent'>
+<li>Fix a bug in the page cache that can lead database corruption following
+ a rollback. This bug was first introduced in <a href="#version_3_6_4">version 3.6.4</a>.</li>
+<li>Two other very minor bug fixes</li>
+
+</ol></p>
+<a name="version_3_6_6"></a>
+<h3>2008-11-19 (3.6.6)</h3><p><ol class='lessindent'>
+<li>Fix a #define that prevented <a href="malloc.html#memsys5">memsys5</a> from compiling</li>
+<li>Fix a problem in the virtual table commit mechanism that was causing
+ a crash in FTS3. Ticket #3497.</li>
+<li>Add the <a href="c3ref/pcache_methods2.html">application-defined page cache</a></li>
+<li>Added built-in support for VxWorks</li>
+
+</ol></p>
+<a name="version_3_6_5"></a>
+<h3>2008-11-12 (3.6.5)</h3><p><ol class='lessindent'>
+<li>Add the MEMORY option to the <a href="pragma.html#pragma_journal_mode">journal_mode pragma</a>.</li>
+<li>Added the <a href="c3ref/db_mutex.html">sqlite3_db_mutex()</a> interface.</li>
+<li>Added the <a href="compile.html#omit_truncate_optimization">SQLITE_OMIT_TRUNCATE_OPTIMIZATION</a> compile-time option.</li>
+<li>Fixed the <a href="lang_delete.html#truncateopt">truncate optimization</a> so that <a href="c3ref/changes.html">sqlite3_changes()</a> and
+ <a href="c3ref/total_changes.html">sqlite3_total_changes()</a> interfaces and the <a href="pragma.html#pragma_count_changes">count_changes pragma</a>
+ return the correct values.</li>
+<li>Added the <a href="c3ref/errcode.html">sqlite3_extended_errcode()</a> interface.</li>
+<li>The <a href="lang_transaction.html">COMMIT</a> command now succeeds even if there are pending queries.
+ It returns <a href="rescode.html#busy">SQLITE_BUSY</a> if there are pending incremental BLOB I/O requests.
+<li>The error code is changed to <a href="rescode.html#busy">SQLITE_BUSY</a> (instead of <a href="rescode.html#error">SQLITE_ERROR</a>)
+ when an attempt is made to <a href="lang_transaction.html">ROLLBACK</a> while one or more queries are
+ still pending.</li>
+<li>Drop all support for the <a href="malloc.html#memsysx">experimental memory allocators</a> memsys4 and
+ memsys6.</li>
+<li>Added the <a href="compile.html#zero_malloc">SQLITE_ZERO_MALLOC</a> compile-time option.</li>
+
+</ol></p>
+<a name="version_3_6_4"></a>
+<h3>2008-10-15 (3.6.4)</h3><p><ol class='lessindent'>
+<li>Add option support for LIMIT and ORDER BY clauses on <a href="lang_delete.html">DELETE</a> and
+ <a href="lang_update.html">UPDATE</a> statements. Only works if SQLite is compiled with
+ <a href="compile.html#enable_update_delete_limit">SQLITE_ENABLE_UPDATE_DELETE_LIMIT</a>.
+<li>Added the <a href="c3ref/stmt_status.html">sqlite3_stmt_status()</a> interface for performance monitoring.</li>
+<li>Add the <a href="lang_indexedby.html">INDEXED BY</a> clause.</li>
+<li>The LOCKING_STYLE extension is now enabled by default on Mac OS X</li>
+<li>Added the TRUNCATE option to <a href="pragma.html#pragma_journal_mode">PRAGMA journal_mode</a></li>
+<li>Performance enhancements to tree balancing logic in the B-Tree layer.</li>
+<li>Added the
+ <a href="http://www.sqlite.org/src/finfo?name=tool/genfkey.c">
+ source code</a> and
+ <a href="http://www.sqlite.org/src/finfo?name=tool/genfkey.README">
+ documentation</a> for the <b>genfkey</b> program for automatically generating
+ triggers to enforce foreign key constraints.</li>
+<li>Added the <a href="compile.html#omit_truncate_optimization">SQLITE_OMIT_TRUNCATE_OPTIMIZATION</a> compile-time option.</li>
+<li>The <a href="lang.html">SQL language documentation</a> is converted to use
+<a href="syntaxdiagrams.html">syntax diagrams</a> instead of BNF.</li>
+<li>Other minor bug fixes</li>
+
+</ol></p>
+<a name="version_3_6_3"></a>
+<h3>2008-09-22 (3.6.3)</h3><p><ol class='lessindent'>
+<li>Fix for a bug in the SELECT DISTINCT logic that was introduced by the
+ prior version.</li>
+<li>Other minor bug fixes</li>
+
+</ol></p>
+<a name="version_3_6_2"></a>
+<h3>2008-08-30 (3.6.2)</h3><p><ol class='lessindent'>
+<li>Split the pager subsystem into separate pager and pcache subsystems.</li>
+<li>Factor out identifier resolution procedures into separate files.</li>
+<li>Bug fixes</li>
+
+</ol></p>
+<a name="version_3_6_1"></a>
+<h3>2008-08-06 (3.6.1)</h3><p><ol class='lessindent'>
+<li>Added the <a href="malloc.html#lookaside">lookaside memory allocator</a> for a speed improvement in excess
+ of 15% on some workloads. (Your mileage may vary.)</li>
+<li>Added the <a href="c3ref/c_config_covering_index_scan.html#sqliteconfiglookaside">SQLITE_CONFIG_LOOKASIDE</a> verb to <a href="c3ref/config.html">sqlite3_config()</a> to control
+ the default lookaside configuration.</li>
+<li>Added verbs <a href="c3ref/c_status_malloc_count.html#sqlitestatuspagecachesize">SQLITE_STATUS_PAGECACHE_SIZE</a> and
+ <a href="c3ref/c_status_malloc_count.html#sqlitestatusscratchsize">SQLITE_STATUS_SCRATCH_SIZE</a> to the <a href="c3ref/status.html">sqlite3_status()</a> interface.
+<li>Modified <a href="c3ref/c_config_covering_index_scan.html#sqliteconfigpagecache">SQLITE_CONFIG_PAGECACHE</a> and <a href="c3ref/c_config_covering_index_scan.html#sqliteconfigscratch">SQLITE_CONFIG_SCRATCH</a> to remove
+ the "+4" magic number in the buffer size computation.
+<li>Added the <a href="c3ref/db_config.html">sqlite3_db_config()</a> and <a href="c3ref/db_status.html">sqlite3_db_status()</a> interfaces for
+ controlling and monitoring the lookaside allocator separately on each
+ <a href="c3ref/sqlite3.html">database connection</a>.</li>
+<li>Numerous other performance enhancements</li>
+<li>Miscellaneous minor bug fixes</li>
+
+</ol></p>
+<h3>2008-07-16 (3.6.0 beta)</h3><p><ol class='lessindent'>
+<li>Modifications to the <a href="c3ref/vfs.html">virtual file system</a> interface
+ to support a wider range of embedded systems.
+ See <a href="35to36.html">35to36.html</a> for additional information.
+ <font color="red">*** Potentially incompatible change ***</font></li>
+<li>All C-preprocessor macros used to control compile-time options
+ now begin with the prefix "SQLITE_". This may require changes to
+ applications that compile SQLite using their own makefiles and with
+ custom compile-time options, hence we mark this as a
+ <font color="red">*** Potentially incompatible change ***</font></li>
+<li>The SQLITE_MUTEX_APPDEF compile-time option is no longer supported.
+ Alternative mutex implementations can now be added at run-time using
+ the <a href="c3ref/config.html">sqlite3_config()</a> interface with the <a href="c3ref/c_config_covering_index_scan.html#sqliteconfigmutex">SQLITE_CONFIG_MUTEX</a> verb.
+ <font color="red">*** Potentially incompatible change ***</font></li>
+<li>The handling of IN and NOT IN operators that contain a NULL on their
+ right-hand side expression is brought into compliance with the SQL
+ standard and with other SQL database engines. This is a bug fix,
+ but as it has the potential to break legacy applications that depend
+ on the older buggy behavior, we mark that as a
+ <font color="red">*** Potentially incompatible change ***</font></li>
+<li>The result column names generated for compound subqueries have been
+ simplified to show only the name of the column of the original table and
+ omit the table name. This makes SQLite operate more like other SQL
+ database engines.</li>
+<li>Added the <a href="c3ref/config.html">sqlite3_config()</a> interface for doing run-time configuration
+ of the entire SQLite library.</li>
+<li>Added the <a href="c3ref/status.html">sqlite3_status()</a> interface used for querying run-time status
+ information about the overall SQLite library and its subsystems.</li>
+<li>Added the <a href="c3ref/initialize.html">sqlite3_initialize()</a> and <a href="c3ref/initialize.html">sqlite3_shutdown()</a> interfaces.</li>
+<li>The <a href="c3ref/c_open_autoproxy.html">SQLITE_OPEN_NOMUTEX</a> option was added to <a href="c3ref/open.html">sqlite3_open_v2()</a>.</li>
+<li>Added the <a href="pragma.html#pragma_page_count">PRAGMA page_count</a> command.</li>
+<li>Added the <a href="c3ref/next_stmt.html">sqlite3_next_stmt()</a> interface.</li>
+<li>Added a new <a href="rtree.html">R*Tree virtual table</a></li>
+
+</ol></p>
+<a name="version_3_5_9"></a>
+<h3>2008-05-14 (3.5.9)</h3><p><ol class='lessindent'>
+<li>Added <em>experimental</em>
+ support for the <a href="pragma.html#pragma_journal_mode">journal_mode</a> PRAGMA and persistent journal.</li>
+<li><a href="pragma.html#pragma_journal_mode">Journal mode PERSIST</a> is the default behavior in
+ <a href="pragma.html#pragma_locking_mode">exclusive locking mode</a>.</li>
+<li>Fix a performance regression on LEFT JOIN (see ticket #3015)
+ that was mistakenly introduced in <a href="#version_3_5_8">version 3.5.8</a>.</li>
+<li>Performance enhancement: Reengineer the internal routines used
+ to interpret and render variable-length integers.</li>
+<li>Fix a buffer-overrun problem in <a href="c3ref/mprintf.html">sqlite3_mprintf()</a> which occurs
+ when a string without a zero-terminator is passed to "%.*s".</li>
+<li>Always convert IEEE floating point NaN values into NULL during
+ processing. (Ticket #3060)</li>
+<li>Make sure that when a connection blocks on a RESERVED lock that
+ it is able to continue after the lock is released. (Ticket #3093)</li>
+<li>The "configure" scripts should now automatically configure Unix
+ systems for large file support. Improved error messages for
+ when large files are encountered and large file support is disabled.</li>
+<li>Avoid cache pages leaks following disk-full or I/O errors</li>
+<li>And, many more minor bug fixes and performance enhancements....</li>
+
+</ol></p>
+<a name="version_3_5_8"></a>
+<h3>2008-04-16 (3.5.8)</h3><p><ol class='lessindent'>
+<li>Expose SQLite's internal pseudo-random number generator (PRNG)
+ via the <a href="c3ref/randomness.html">sqlite3_randomness()</a> interface</li>
+<li>New interface <a href="c3ref/context_db_handle.html">sqlite3_context_db_handle()</a> that returns the
+ <a href="c3ref/sqlite3.html">database connection</a> handle that has invoked an application-defined
+ SQL function.</li>
+<li>New interface <a href="c3ref/limit.html">sqlite3_limit()</a> allows size and length limits to be
+ set on a per-connection basis and at run-time.</li>
+<li>Improved crash-robustness: write the database page size into the rollback
+ journal header.</li>
+<li>Allow the <a href="lang_vacuum.html">VACUUM</a> command to change the page size of a database file.</li>
+<li>The xAccess() method of the VFS is allowed to return -1 to signal
+ a memory allocation error.</li>
+<li>Performance improvement: The OP_IdxDelete opcode uses unpacked records,
+ obviating the need for one OP_MakeRecord opcode call for each index
+ record deleted.</li>
+<li>Performance improvement: Constant subexpressions are factored out of
+ loops.</li>
+<li>Performance improvement: Results of OP_Column are reused rather than
+ issuing multiple OP_Column opcodes.</li>
+<li>Fix a bug in the RTRIM collating sequence.</li>
+<li>Fix a bug in the SQLITE_SECURE_DELETE option that was causing
+ Firefox crashes. Make arrangements to always test SQLITE_SECURE_DELETE
+ prior to each release.</li>
+<li>Other miscellaneous performance enhancements.</li>
+<li>Other miscellaneous minor bug fixes.</li>
+
+</ol></p>
+<a name="version_3_5_7"></a>
+<h3>2008-03-17 (3.5.7)</h3><p><ol class='lessindent'>
+<li>Fix a bug (ticket #2927) in the register allocation for
+compound selects - introduced by the new VM code in version 3.5.5.</li>
+<li>ALTER TABLE uses double-quotes instead of single-quotes for quoting
+filenames.</li>
+<li>Use the WHERE clause to reduce the size of a materialized VIEW in
+an UPDATE or DELETE statement. (Optimization)</li>
+<li>Do not apply the flattening optimization if the outer query is an
+aggregate and the inner query contains ORDER BY. (Ticket #2943)</li>
+<li>Additional OS/2 updates</li>
+<li>Added an experimental power-of-two, first-fit memory allocator.</li>
+<li>Remove all instances of sprintf() from the code</li>
+<li>Accept "Z" as the zulu timezone at the end of date strings</li>
+<li>Fix a bug in the LIKE optimizer that occurs when the last character
+before the first wildcard is an upper-case "Z"</li>
+<li>Added the "bitvec" object for keeping track of which pages have
+been journalled. Improves speed and reduces memory consumption, especially
+for large database files.</li>
+<li>Get the SQLITE_ENABLE_LOCKING_STYLE macro working again on Mac OS X.</li>
+<li>Store the statement journal in the temporary file directory instead of
+collocated with the database file.</li>
+<li>Many improvements and cleanups to the configure script</li>
+
+</ol></p>
+<a name="version_3_5_6"></a>
+<h3>2008-02-06 (3.5.6)</h3><p><ol class='lessindent'>
+<li>Fix a bug (ticket #2913)
+that prevented virtual tables from working in a LEFT JOIN.
+The problem was introduced into shortly before the 3.5.5 release.</li>
+<li>Bring the OS/2 porting layer up-to-date.</li>
+<li>Add the new <a href="c3ref/result_blob.html">sqlite3_result_error_code()</a> API and use it in the
+implementation of <a href="lang_attach.html">ATTACH</a> so that proper error codes are returned
+when an <a href="lang_attach.html">ATTACH</a> fails.</li>
+
+</ol></p>
+<a name="version_3_5_5"></a>
+<h3>2008-01-31 (3.5.5)</h3><p><ol class='lessindent'>
+<li>Convert the underlying virtual machine to be a register-based machine
+rather than a stack-based machine. The only user-visible change
+is in the output of EXPLAIN.</li>
+<li>Add the build-in RTRIM collating sequence.</li>
+
+</ol></p>
+<a name="version_3_5_4"></a>
+<h3>2007-12-14 (3.5.4)</h3><p><ol class='lessindent'>
+<li>Fix a critical bug in UPDATE or DELETE that occurs when an
+OR REPLACE clause or a trigger causes rows in the same table to
+be deleted as side effects. (See ticket #2832.) The most likely
+result of this bug is a segmentation fault, though database
+corruption is a possibility.</li>
+<li>Bring the processing of ORDER BY into compliance with the
+SQL standard for case where a result alias and a table column name
+are in conflict. Correct behavior is to prefer the result alias.
+Older versions of SQLite incorrectly picked the table column.
+(See ticket #2822.)</li>
+<li>The <a href="lang_vacuum.html">VACUUM</a> command preserves
+the setting of the
+<a href="pragma.html#pragma_legacy_file_format">legacy_file_format pragma</a>.
+(Ticket #2804.)</li>
+<li>Productize and officially support the group_concat() SQL function.</li>
+<li>Better optimization of some IN operator expressions.</li>
+<li>Add the ability to change the
+<a href="pragma.html#pragma_auto_vacuum">auto_vacuum</a> status of a
+database by setting the auto_vaccum pragma and VACUUMing the database.</li>
+<li>Prefix search in FTS3 is much more efficient.</li>
+<li>Relax the SQL statement length restriction in the CLI so that
+the ".dump" output of databases with very large BLOBs and strings can
+be played back to recreate the database.</li>
+<li>Other small bug fixes and optimizations.</li>
+
+</ol></p>
+<a name="version_3_5_3"></a>
+<h3>2007-11-27 (3.5.3)</h3><p><ol class='lessindent'>
+<li>Move website and documentation files out of the source tree into
+a <a href="http://www.sqlite.org/docsrc/">separate CM system</a>.
+<li>Fix a long-standing bug in INSERT INTO ... SELECT ... statements
+where the SELECT is compound.
+<li>Fix a long-standing bug in RAISE(IGNORE) as used in BEFORE triggers.
+<li>Fixed the operator precedence for the ~ operator.
+<li>On Win32, do not return an error when attempting to delete a file
+that does not exist.
+<li>Allow collating sequence names to be quoted.
+<li>Modify the TCL interface to use <a href="c3ref/prepare.html">sqlite3_prepare_v2()</a>.
+<li>Fix multiple bugs that can occur following a malloc() failure.
+<li><a href="c3ref/step.html">sqlite3_step()</a> returns <a href="rescode.html#misuse">SQLITE_MISUSE</a> instead of crashing when
+called with a NULL parameter.
+<li>FTS3 now uses the SQLite memory allocator exclusively. The
+FTS3 amalgamation can now be appended to the SQLite amalgamation to
+generate a super-amalgamation containing both.
+<li>The DISTINCT keyword now will sometimes use an INDEX if an
+appropriate index is available and the optimizer thinks its use
+might be advantageous.
+
+</ol></p>
+<a name="version_3_5_2"></a>
+<h3>2007-11-05 (3.5.2)</h3><p><ol class='lessindent'>
+<li>Dropped support for the <a href="compile.html#omitfeatures">SQLITE_OMIT_MEMORY_ALLOCATION</a> compile-time
+option.
+<li>Always open files using FILE_FLAG_RANDOM_ACCESS under Windows.
+<li>The 3rd parameter of the built-in SUBSTR() function is now optional.
+<li>Bug fix: do not invoke the authorizer when reparsing the schema after
+a schema change.
+<li>Added the experimental malloc-free memory allocator in mem3.c.
+<li>Virtual machine stores 64-bit integer and floating point constants
+in binary instead of text for a performance boost.
+<li>Fix a race condition in test_async.c.
+<li>Added the ".timer" command to the CLI
+
+</ol></p>
+<a name="version_3_5_1"></a>
+<h3>2007-10-04 (3.5.1)</h3><p><ol class='lessindent'>
+<li><i><b>Nota Bene:</b> We are not using terms "alpha" or "beta" on this
+ release because the code is stable and because if we use those terms,
+ nobody will upgrade. However, we still reserve the right to make
+ incompatible changes to the new VFS interface in future releases.</i></li>
+
+<li>Fix a bug in the handling of <a href="rescode.html#full">SQLITE_FULL</a> errors that could lead
+ to database corruption. Ticket #2686.
+<li>The test_async.c drive now does full file locking and works correctly
+ when used simultaneously by multiple processes on the same database.
+<li>The CLI ignores whitespace (including comments) at the end of lines
+<li>Make sure the query optimizer checks dependencies on all terms of
+ a compound SELECT statement. Ticket #2640.
+<li>Add demonstration code showing how to build a VFS for a raw
+ mass storage without a filesystem.
+<li>Added an output buffer size parameter to the xGetTempname() method
+ of the VFS layer.
+<li>Sticky <a href="rescode.html#full">SQLITE_FULL</a> or <a href="rescode.html#ioerr">SQLITE_IOERR</a> errors in the pager are reset
+ when a new transaction is started.
+
+</ol></p>
+<a name="version_3_5_0"></a>
+<h3>2007-09-04 (3.5.0) alpha</h3><p><ol class='lessindent'>
+<li>Redesign the OS interface layer. See
+ <a href="34to35.html">34to35.html</a> for details.
+ <font color="red">*** Potentially incompatible change ***</font>
+<li>The <a href="c3ref/release_memory.html">sqlite3_release_memory()</a>, <a href="c3ref/soft_heap_limit.html">sqlite3_soft_heap_limit()</a>,
+ and <a href="c3ref/enable_shared_cache.html">sqlite3_enable_shared_cache()</a> interfaces now work cross all
+ threads in the process, not just the single thread in which they
+ are invoked.
+ <font color="red">*** Potentially incompatible change ***</font>
+<li>Added the <a href="c3ref/open.html">sqlite3_open_v2()</a> interface.
+<li>Reimplemented the memory allocation subsystem and made it
+ replaceable at compile-time.
+<li>Created a new mutex subsystem and made it replicable at
+ compile-time.
+<li>The same database connection may now be used simultaneously by
+ separate threads.
+
+</ol></p>
+<a name="version_3_4_2"></a>
+<h3>2007-08-13 (3.4.2)</h3><p><ol class='lessindent'>
+<li>Fix a database corruption bug that might occur if a ROLLBACK command
+is executed in <a href="pragma.html#pragma_auto_vacuum">auto-vacuum mode</a>
+and a very small <a href="c3ref/soft_heap_limit.html">sqlite3_soft_heap_limit</a> is set.
+Ticket #2565.
+
+<li>Add the ability to run a full regression test with a small
+<a href="c3ref/soft_heap_limit.html">sqlite3_soft_heap_limit</a>.
+
+<li>Fix other minor problems with using small soft heap limits.
+
+<li>Work-around for
+<a href="http://gcc.gnu.org/bugzilla/show_bug.cgi?id=32575">GCC bug 32575</a>.
+
+<li>Improved error detection of misused aggregate functions.
+
+<li>Improvements to the amalgamation generator script so that all symbols
+are prefixed with either SQLITE_PRIVATE or SQLITE_API.
+
+</ol></p>
+<a name="version_3_4_1"></a>
+<h3>2007-07-20 (3.4.1)</h3><p><ol class='lessindent'>
+<li>Fix a bug in <a href="lang_vacuum.html">VACUUM</a> that can lead to
+ database corruptio if two
+ processes are connected to the database at the same time and one
+ VACUUMs then the other then modifies the database.</li>
+<li>The expression "+column" is now considered the same as "column"
+ when computing the collating sequence to use on the expression.</li>
+<li>In the <a href="tclsqlite.html">TCL language interface</a>,
+ "@variable" instead of "$variable" always binds as a blob.</li>
+<li>Added <a href="pragma.html#pragma_freelist_count">PRAGMA freelist_count</a>
+ for determining the current size of the freelist.</li>
+<li>The <a href="pragma.html#pragma_auto_vacuum">
+ PRAGMA auto_vacuum=incremental</a> setting is now persistent.</li>
+<li>Add FD_CLOEXEC to all open files under Unix.</li>
+<li>Fix a bug in the <a href="optoverview.html#minmax">
+ min()/max() optimization</a> when applied to
+ descending indices.</li>
+<li>Make sure the TCL language interface works correctly with 64-bit
+ integers on 64-bit machines.</li>
+<li>Allow the value -9223372036854775808 as an integer literal in SQL
+ statements.</li>
+<li>Add the capability of "hidden" columns in virtual tables.</li>
+<li>Use the macro SQLITE_PRIVATE (defaulting to "static") on all
+ internal functions in the amalgamation.</li>
+<li>Add pluggable tokenizers and <a href="http://www.icu-project.org/">ICU</a>
+ tokenization support to FTS2</li>
+<li>Other minor bug fixes and documentation enhancements</li>
+
+</ol></p>
+<a name="version_3_4_0"></a>
+<h3>2007-06-18 (3.4.0)</h3><p><ol class='lessindent'>
+<li>Fix a bug that can lead to database corruption if an <a href="rescode.html#busy">SQLITE_BUSY</a> error
+ occurs in the middle of an explicit transaction and that transaction
+ is later committed. Ticket #2409.
+<li>Fix a bug that can lead to database corruption if autovacuum mode is
+ on and a malloc() failure follows a CREATE TABLE or CREATE INDEX statement
+ which itself follows a cache overflow inside a transaction. See
+ ticket #2418.
+ </li>
+<li>Added explicit <a href="limits.html">upper bounds</a> on the sizes and
+ quantities of things SQLite can process. This change might cause
+ compatibility problems for
+ applications that use SQLite in the extreme, which is why the current
+ release is 3.4.0 instead of 3.3.18.</li>
+<li>Added support for <a href="c3ref/blob_open.html">Incremental BLOB I/O</a>.</li>
+<li>Added the <a href="c3ref/bind_blob.html">sqlite3_bind_zeroblob()</a> API</a>
+ and the <a href="lang_expr.html#zeroblob">zeroblob()</a> SQL function.</li>
+<li>Added support for <a href="pragma.html#pragma_incremental_vacuum">
+ Incremental Vacuum</a>.</li>
+<li>Added the SQLITE_MIXED_ENDIAN_64BIT_FLOAT compile-time option to support
+ ARM7 processors with goofy endianness.</li>
+<li>Removed all instances of sprintf() and strcpy() from the core library.</li>
+<li>Added support for
+ <a href="http://www.icu-project.org/">International Components for Unicode (ICU)</a>
+ to the full-text search extensions.
+<li>In the Windows OS driver, reacquire a SHARED lock if an attempt to
+ acquire an EXCLUSIVE lock fails. Ticket #2354</li>
+<li>Fix the REPLACE() function so that it returns NULL if the second argument
+ is an empty string. Ticket #2324.</li>
+<li>Document the hazards of type conversions in
+ <a href="c3ref/column_blob.html">sqlite3_column_blob()</a>
+ and related APIs. Fix unnecessary type conversions. Ticket #2321.</li>
+<li>Internationalization of the TRIM() function. Ticket #2323</li>
+<li>Use memmove() instead of memcpy() when moving between memory regions
+ that might overlap. Ticket #2334</li>
+<li>Fix an optimizer bug involving subqueries in a compound SELECT that has
+ both an ORDER BY and a LIMIT clause. Ticket #2339.</li>
+<li>Make sure the <a href="c3ref/mprintf.html">sqlite3_snprintf()</a>
+ interface does not zero-terminate the buffer if the buffer size is
+ less than 1. Ticket #2341</li>
+<li>Fix the built-in printf logic so that it prints "NaN" not "Inf" for
+ floating-point NaNs. Ticket #2345</li>
+<li>When converting BLOB to TEXT, use the text encoding of the main database.
+ Ticket #2349</li>
+<li>Keep the full precision of integers (if possible) when casting to
+ NUMERIC. Ticket #2364</li>
+<li>Fix a bug in the handling of UTF16 codepoint 0xE000</li>
+<li>Consider explicit collate clauses when matching WHERE constraints
+ to indices in the query optimizer. Ticket #2391</li>
+<li>Fix the query optimizer to correctly handle constant expressions in
+ the ON clause of a LEFT JOIN. Ticket #2403</li>
+<li>Fix the query optimizer to handle rowid comparisons to NULL
+ correctly. Ticket #2404</li>
+<li>Fix many potential segfaults that could be caused by malicious SQL
+ statements.</li>
+
+</ol></p>
+<a name="version_3_3_17"></a>
+<h3>2007-04-25 (3.3.17)</h3><p><ol class='lessindent'>
+<li>When the "write_version" value of the database header is larger than
+ what the library understands, make the database read-only instead of
+ unreadable.</li>
+<li>Other minor bug fixes</li>
+
+</ol></p>
+<a name="version_3_3_16"></a>
+<h3>2007-04-18 (3.3.16)</h3><p><ol class='lessindent'>
+<li>Fix a bug that caused VACUUM to fail if NULLs appeared in a
+ UNIQUE column.</li>
+<li>Reinstate performance improvements that were added in
+ <a href="#version_3_3_14">Version 3.3.14</a>
+ but regressed in <a href="#version_3_3_15">Version 3.3.15</a>.</li>
+<li>Fix problems with the handling of ORDER BY expressions on
+ compound SELECT statements in subqueries.</li>
+<li>Fix a potential segfault when destroying locks on WinCE in
+ a multi-threaded environment.</li>
+<li>Documentation updates.</li>
+
+</ol></p>
+<a name="version_3_3_15"></a>
+<h3>2007-04-09 (3.3.15)</h3><p><ol class='lessindent'>
+<li>Fix a bug introduced in 3.3.14 that caused a rollback of
+ CREATE TEMP TABLE to leave the database connection wedged.</li>
+<li>Fix a bug that caused an extra NULL row to be returned when
+ a descending query was interrupted by a change to the database.</li>
+<li>The FOR EACH STATEMENT clause on a trigger now causes a syntax
+ error. It used to be silently ignored.</li>
+<li>Fix an obscure and relatively harmless problem that might have caused
+ a resource leak following an I/O error.</li>
+<li>Many improvements to the test suite. Test coverage now exceeded 98%</li>
+
+</ol></p>
+<a name="version_3_3_14"></a>
+<h3>2007-04-02 (3.3.14)</h3><p><ol class='lessindent'>
+<li>Fix a bug (ticket #2273)
+ that could cause a segfault when the IN operator
+ is used one term of a two-column index and the right-hand side of
+ the IN operator contains a NULL.</li>
+<li>Added a new OS interface method for determining the sector size
+ of underlying media: sqlite3OsSectorSize().</li>
+<li>A new algorithm for statements of the form
+ INSERT INTO <i>table1</i> SELECT * FROM <i>table2</i>
+ is faster and reduces fragmentation. VACUUM uses statements of
+ this form and thus runs faster and defragments better.</li>
+<li>Performance enhancements through reductions in disk I/O:
+<ol type='a'>
+ <li>Do not read the last page of an overflow chain when
+ deleting the row - just add that page to the freelist.</li>
+ <li>Do not store pages being deleted in the
+ rollback journal.</li>
+ <li>Do not read in the (meaningless) content of
+ pages extracted from the freelist.</li>
+ <li>Do not flush the page cache (and thus avoiding
+ a cache refill) unless another process changes the underlying
+ database file.</li>
+ <li>Truncate rather than delete the rollback journal when committing
+ a transaction in exclusive access mode, or when committing the TEMP
+ database.</li>
+</ol></li>
+<li>Added support for exclusive access mode using
+ <a href="pragma.html#pragma_locking_mode">
+ "PRAGMA locking_mode=EXCLUSIVE"</a></li>
+<li>Use heap space instead of stack space for large buffers in the
+ pager - useful on embedded platforms with stack-space
+ limitations.</li>
+<li>Add a makefile target "sqlite3.c" that builds an amalgamation containing
+ the core SQLite library C code in a single file.</li>
+<li>Get the library working correctly when compiled
+ with GCC option "-fstrict-aliasing".</li>
+<li>Removed the vestigal SQLITE_PROTOCOL error.</li>
+<li>Improvements to test coverage, other minor bugs fixed,
+ memory leaks plugged,
+ code refactored and/or recommended in places for easier reading.</li>
+
+</ol></p>
+<a name="version_3_3_13"></a>
+<h3>2007-02-13 (3.3.13)</h3><p><ol class='lessindent'>
+<li>Add a "fragmentation" measurement in the output of sqlite3_analyzer.</li>
+<li>Add the COLLATE operator used to explicitly set the collating sequence
+used by an expression. This feature is considered experimental pending
+additional testing.</li>
+<li>Allow up to 64 tables in a join - the old limit was 32.</li>
+<li>Added two new experimental functions:
+<a href="lang_expr.html#randomblobFunc">randomBlob()</a> and
+<a href="lang_expr.html#hexFunc">hex()</a>.
+Their intended use is to facilitate generating
+<a href="http://en.wikipedia.org/wiki/UUID">UUIDs</a>.
+</li>
+<li>Fix a problem where
+<a href="pragma.html#pragma_count_changes">PRAGMA count_changes</a> was
+causing incorrect results for updates on tables with triggers</li>
+<li>Fix a bug in the ORDER BY clause optimizer for joins where the
+left-most table in the join is constrained by a UNIQUE index.</li>
+<li>Fixed a bug in the "copy" method of the TCL interface.</li>
+<li>Bug fixes in fts1 and fts2 modules.</li>
+
+</ol></p>
+<a name="version_3_3_12"></a>
+<h3>2007-01-27 (3.3.12)</h3><p><ol class='lessindent'>
+<li>Fix another bug in the IS NULL optimization that was added in
+version 3.3.9.</li>
+<li>Fix an assertion fault that occurred on deeply nested views.</li>
+<li>Limit the amount of output that
+<a href="pragma.html#pragma_integrity_check">PRAGMA integrity_check</a>
+generates.</li>
+<li>Minor syntactic changes to support a wider variety of compilers.</li>
+
+</ol></p>
+<a name="version_3_3_11"></a>
+<h3>2007-01-22 (3.3.11)</h3><p><ol class='lessindent'>
+<li>Fix another bug in the implementation of the new
+<a href="c3ref/prepare.html">sqlite3_prepare_v2()</a> API.
+We'll get it right eventually...</li>
+<li>Fix a bug in the IS NULL optimization that was added in version 3.3.9 -
+the bug was causing incorrect results on certain LEFT JOINs that included
+in the WHERE clause an IS NULL constraint for the right table of the
+LEFT JOIN.</li>
+<li>Make AreFileApisANSI() a no-op macro in WinCE since WinCE does not
+support this function.</li>
+
+</ol></p>
+<a name="version_3_3_10"></a>
+<h3>2007-01-09 (3.3.10)</h3><p><ol class='lessindent'>
+<li>Fix bugs in the implementation of the new
+<a href="c3ref/prepare.html">sqlite3_prepare_v2()</a> API
+that can lead to segfaults.</li>
+<li>Fix 1-second round-off errors in the
+strftime() function</li>
+<li>Enhance the Windows OS layer to provide detailed error codes</li>
+<li>Work around a win2k problem so that SQLite can use single-character
+database file names</li>
+<li>The
+<a href="pragma.html#pragma_user_version">user_version</a> and
+<a href="pragma.html#pragma_schema_version">schema_version</a> pragmas
+correctly set their column names in the result set</li>
+<li>Documentation updates</li>
+
+</ol></p>
+<a name="version_3_3_9"></a>
+<h3>2007-01-04 (3.3.9)</h3><p><ol class='lessindent'>
+<li>Fix bugs in pager.c that could lead to database corruption if two
+processes both try to recover a hot journal at the same instant</li>
+<li>Added the <a href="c3ref/prepare.html">sqlite3_prepare_v2()</a>
+API.</li>
+<li>Fixed the ".dump" command in the command-line shell to show
+indices, triggers and views again.</li>
+<li>Change the table_info pragma so that it returns NULL for the default
+value if there is no default value</li>
+<li>Support for non-ASCII characters in win95 filenames</li>
+<li>Query optimizer enhancements:
+<ol type='a'>
+ <li>Optimizer does a better job of using indices to satisfy ORDER BY
+ clauses that sort on the integer primary key</li>
+ <li>Use an index to satisfy an IS NULL operator in the WHERE clause</li>
+ <li>Fix a bug that was causing the optimizer to miss an OR optimization
+ opportunity</li>
+ <li>The optimizer has more freedom to reorder tables in the FROM clause
+ even in there are LEFT joins.</li>
+</ol>
+<li>Extension loading supported added to WinCE</li>
+<li>Allow constraint names on the DEFAULT clause in a table definition</li>
+<li>Added the ".bail" command to the command-line shell</li>
+<li>Make CSV (comma separate value) output from the command-line shell
+more closely aligned to accepted practice</li>
+<li>Experimental FTS2 module added</li>
+<li>Use sqlite3_mprintf() instead of strdup() to avoid libc dependencies</li>
+<li>VACUUM uses a temporary file in the official TEMP folder, not in the
+same directory as the original database</li>
+<li>The prefix on temporary filenames on Windows is changed from "sqlite"
+to "etilqs".</li>
+
+</ol></p>
+<a name="version_3_3_8"></a>
+<h3>2006-10-09 (3.3.8)</h3><p><ol class='lessindent'>
+<li>Support for full text search using the FTS1 module (beta)</li>
+<li>Added Mac OS X locking patches (beta - disabled by default)</li>
+<li>Introduce extended error codes and add error codes for various
+kinds of I/O errors.</li>
+<li>Added support for IF EXISTS on CREATE/DROP TRIGGER/VIEW</li>
+<li>Fix the regression test suite so that it works with Tcl8.5</li>
+<li>Enhance sqlite3_set_authorizer() to provide notification of calls to
+ SQL functions.</li>
+<li>Added experimental API: sqlite3_auto_extension()</li>
+<li>Various minor bug fixes</li>
+
+</ol></p>
+<a name="version_3_3_7"></a>
+<h3>2006-08-12 (3.3.7)</h3><p><ol class='lessindent'>
+<li>Added support for virtual tables (beta)</li>
+<li>Added support for dynamically loaded extensions (beta)</li>
+<li>The
+<a href="c3ref/interrupt.html">sqlite3_interrupt()</a>
+routine can be called for a different thread</li>
+<li>Added the <a href="lang_expr.html#match">MATCH</a> operator.</li>
+<li>The default file format is now 1.
+
+</ol></p>
+<a name="version_3_3_6"></a>
+<h3>2006-06-06 (3.3.6)</h3><p><ol class='lessindent'>
+<li>Plays better with virus scanners on Windows</li>
+<li>Faster :memory: databases</li>
+<li>Fix an obscure segfault in UTF-8 to UTF-16 conversions</li>
+<li>Added driver for OS/2</li>
+<li>Correct column meta-information returned for aggregate queries</li>
+<li>Enhanced output from EXPLAIN QUERY PLAN</li>
+<li>LIMIT 0 now works on subqueries</li>
+<li>Bug fixes and performance enhancements in the query optimizer</li>
+<li>Correctly handle NULL filenames in ATTACH and DETACH</li>
+<li>Improved syntax error messages in the parser</li>
+<li>Fix type coercion rules for the IN operator</li>
+
+</ol></p>
+<a name="version_3_3_5"></a>
+<h3>2006-04-05 (3.3.5)</h3><p><ol class='lessindent'>
+<li>CHECK constraints use conflict resolution algorithms correctly.</li>
+<li>The SUM() function throws an error on integer overflow.</li>
+<li>Choose the column names in a compound query from the left-most SELECT
+ instead of the right-most.</li>
+<li>The sqlite3_create_collation() function
+ honors the SQLITE_UTF16_ALIGNED flag.</li>
+<li>SQLITE_SECURE_DELETE compile-time option causes deletes to overwrite
+ old data with zeros.</li>
+<li>Detect integer overflow in abs().</li>
+<li>The random() function provides 64 bits of randomness instead of
+ only 32 bits.</li>
+<li>Parser detects and reports automaton stack overflow.</li>
+<li>Change the round() function to return REAL instead of TEXT.</li>
+<li>Allow WHERE clause terms on the left table of a LEFT OUTER JOIN to
+ contain aggregate subqueries.</li>
+<li>Skip over leading spaces in text to numeric conversions.</li>
+<li>Various minor bug and documentation typo fixes and
+ performance enhancements.</li>
+
+</ol></p>
+<a name="version_3_3_4"></a>
+<h3>2006-02-11 (3.3.4)</h3><p><ol class='lessindent'>
+<li>Fix a blunder in the Unix mutex implementation that can lead to
+deadlock on multithreaded systems.</li>
+<li>Fix an alignment problem on 64-bit machines</li>
+<li>Added the fullfsync pragma.</li>
+<li>Fix an optimizer bug that could have caused some unusual LEFT OUTER JOINs
+to give incorrect results.</li>
+<li>The SUM function detects integer overflow and converts to accumulating
+an approximate result using floating point numbers</li>
+<li>Host parameter names can begin with '@' for compatibility with SQL Server.
+</li>
+<li>Other miscellaneous bug fixes</li>
+
+</ol></p>
+<a name="version_3_3_3"></a>
+<h3>2006-01-31 (3.3.3)</h3><p><ol class='lessindent'>
+<li>Removed support for an ON CONFLICT clause on CREATE INDEX - it never
+worked correctly so this should not present any backward compatibility
+problems.</li>
+<li>Authorizer callback now notified of ALTER TABLE ADD COLUMN commands</li>
+<li>After any changes to the TEMP database schema, all prepared statements
+are invalidated and must be recreated using a new call to
+sqlite3_prepare()</li>
+<li>Other minor bug fixes in preparation for the first stable release
+of version 3.3</li>
+
+</ol></p>
+<h3>2006-01-24 (3.3.2 beta)</h3><p><ol class='lessindent'>
+<li>Bug fixes and speed improvements. Improved test coverage.</li>
+<li>Changes to the OS-layer interface: mutexes must now be recursive.</li>
+<li>Discontinue the use of thread-specific data for out-of-memory
+exception handling</li>
+
+</ol></p>
+<h3>2006-01-16 (3.3.1 alpha)</h3><p><ol class='lessindent'>
+<li>Countless bug fixes</li>
+<li>Speed improvements</li>
+<li>Database connections can now be used by multiple threads, not just
+the thread in which they were created.</li>
+
+</ol></p>
+<h3>2006-01-11 (3.3.0 alpha)</h3><p><ol class='lessindent'>
+<li>CHECK constraints</li>
+<li>IF EXISTS and IF NOT EXISTS clauses on CREATE/DROP TABLE/INDEX.</li>
+<li>DESC indices</li>
+<li>More efficient encoding of boolean values resulting in smaller database
+files</li>
+<li>More aggressive <a href="compile.html#omit_floating_point">SQLITE_OMIT_FLOATING_POINT</a></li>
+<li>Separate INTEGER and REAL affinity</li>
+<li>Added a virtual function layer for the OS interface</li>
+<li>"exists" method added to the TCL interface</li>
+<li>Improved response to out-of-memory errors</li>
+<li>Database cache can be optionally shared between connections
+in the same thread</li>
+<li>Optional READ UNCOMMITTED isolation (instead of the default
+isolation level of SERIALIZABLE) and table level locking when
+database connections share a common cache.</li>
+
+</ol></p>
+<a name="version_3_2_8"></a>
+<h3>2005-12-19 (3.2.8)</h3><p><ol class='lessindent'>
+<li>Fix an obscure bug that can cause database corruption under the
+following unusual circumstances: A large INSERT or UPDATE statement which
+is part of an even larger transaction fails due to a uniqueness constraint
+but the containing transaction commits.</li>
+
+</ol></p>
+<a name="version_2_8_17"></a>
+<h3>2005-12-19 (2.8.17)</h3><p><ol class='lessindent'>
+<li>Fix an obscure bug that can cause database corruption under the
+following unusual circumstances: A large INSERT or UPDATE statement which
+is part of an even larger transaction fails due to a uniqueness contraint
+but the containing transaction commits.</li>
+
+</ol></p>
+<a name="version_3_2_7"></a>
+<h3>2005-09-24 (3.2.7)</h3><p><ol class='lessindent'>
+<li>GROUP BY now considers NULLs to be equal again, as it should
+</li>
+<li>Now compiles on Solaris and OpenBSD and other Unix variants
+that lack the fdatasync() function</li>
+<li>Now compiles on MSVC++6 again</li>
+<li>Fix uninitialized variables causing malfunctions for various obscure
+queries</li>
+<li>Correctly compute a LEFT OUTER JOINs that is constrained on the
+left table only</li>
+
+</ol></p>
+<a name="version_3_2_6"></a>
+<h3>2005-09-17 (3.2.6)</h3><p><ol class='lessindent'>
+<li>Fix a bug that can cause database corruption if a VACUUM (or
+ autovacuum) fails and is rolled back on a database that is
+ larger than 1GiB</li>
+<li>LIKE optimization now works for columns with COLLATE NOCASE</li>
+<li>ORDER BY and GROUP BY now use bounded memory</li>
+<li>Added support for COUNT(DISTINCT expr)</li>
+<li>Change the way SUM() handles NULL values in order to comply with
+ the SQL standard</li>
+<li>Use fdatasync() instead of fsync() where possible in order to speed
+ up commits slightly</li>
+<li>Use of the CROSS keyword in a join turns off the table reordering
+ optimization</li>
+<li>Added the experimental and undocumented EXPLAIN QUERY PLAN capability</li>
+<li>Use the unicode API in Windows</li>
+
+</ol></p>
+<a name="version_3_2_5"></a>
+<h3>2005-08-27 (3.2.5)</h3><p><ol class='lessindent'>
+<li>Fix a bug effecting DELETE and UPDATE statements that changed
+more than 40960 rows.</li>
+<li>Change the makefile so that it no longer requires GNUmake extensions</li>
+<li>Fix the --enable-threadsafe option on the configure script</li>
+<li>Fix a code generator bug that occurs when the left-hand side of an IN
+operator is constant and the right-hand side is a SELECT statement</li>
+<li>The PRAGMA synchronous=off statement now disables syncing of the
+master journal file in addition to the normal rollback journals</li>
+
+</ol></p>
+<a name="version_3_2_4"></a>
+<h3>2005-08-24 (3.2.4)</h3><p><ol class='lessindent'>
+<li>Fix a bug introduced in the previous release
+that can cause a segfault while generating code
+for complex WHERE clauses.</li>
+<li>Allow floating point literals to begin or end with a decimal point.</li>
+
+</ol></p>
+<a name="version_3_2_3"></a>
+<h3>2005-08-21 (3.2.3)</h3><p><ol class='lessindent'>
+<li>Added support for the CAST operator</li>
+<li>Tcl interface allows BLOB values to be transferred to user-defined
+functions</li>
+<li>Added the "transaction" method to the Tcl interface</li>
+<li>Allow the DEFAULT value of a column to call functions that have constant
+operands</li>
+<li>Added the ANALYZE command for gathering statistics on indices and
+using those statistics when picking an index in the optimizer</li>
+<li>Remove the limit (formerly 100) on the number of terms in the
+WHERE clause</li>
+<li>The right-hand side of the IN operator can now be a list of expressions
+instead of just a list of constants</li>
+<li>Rework the optimizer so that it is able to make better use of indices</li>
+<li>The order of tables in a join is adjusted automatically to make
+better use of indices</li>
+<li>The IN operator is now a candidate for optimization even if the left-hand
+side is not the left-most term of the index. Multiple IN operators can be
+used with the same index.</li>
+<li>WHERE clause expressions using BETWEEN and OR are now candidates
+for optimization</li>
+<li>Added the "case_sensitive_like" pragma and the SQLITE_CASE_SENSITIVE_LIKE
+compile-time option to set its default value to "on".</li>
+<li>Use indices to help with GLOB expressions and LIKE expressions too
+when the case_sensitive_like pragma is enabled</li>
+<li>Added support for grave-accent quoting for compatibility with MySQL</li>
+<li>Improved test coverage</li>
+<li>Dozens of minor bug fixes</li>
+
+</ol></p>
+<a name="version_3_2_2"></a>
+<h3>2005-06-12 (3.2.2)</h3><p><ol class='lessindent'>
+<li>Added the sqlite3_db_handle() API</li>
+<li>Added the sqlite3_get_autocommit() API</li>
+<li>Added a REGEXP operator to the parser. There is no function to back
+up this operator in the standard build but users can add their own using
+sqlite3_create_function()</li>
+<li>Speed improvements and library footprint reductions.</li>
+<li>Fix byte alignment problems on 64-bit architectures.</li>
+<li>Many, many minor bug fixes and documentation updates.</li>
+
+</ol></p>
+<a name="version_3_2_1"></a>
+<h3>2005-03-29 (3.2.1)</h3><p><ol class='lessindent'>
+<li>Fix a memory allocation error in the new ADD COLUMN comment.</li>
+<li>Documentation updates</li>
+
+</ol></p>
+<a name="version_3_2_0"></a>
+<h3>2005-03-21 (3.2.0)</h3><p><ol class='lessindent'>
+<li>Added support for ALTER TABLE ADD COLUMN.</li>
+<li>Added support for the "T" separator in ISO-8601 date/time strings.</li>
+<li>Improved support for Cygwin.</li>
+<li>Numerous bug fixes and documentation updates.</li>
+
+</ol></p>
+<a name="version_3_1_6"></a>
+<h3>2005-03-17 (3.1.6)</h3><p><ol class='lessindent'>
+<li>Fix a bug that could cause database corruption when inserting
+ record into tables with around 125 columns.</li>
+<li>sqlite3_step() is now much more likely to invoke the busy handler
+ and less likely to return SQLITE_BUSY.</li>
+<li>Fix memory leaks that used to occur after a malloc() failure.</li>
+
+</ol></p>
+<a name="version_3_1_5"></a>
+<h3>2005-03-11 (3.1.5)</h3><p><ol class='lessindent'>
+<li>The ioctl on Mac OS X to control syncing to disk is F_FULLFSYNC,
+ not F_FULLSYNC. The previous release had it wrong.</li>
+
+</ol></p>
+<a name="version_3_1_4"></a>
+<h3>2005-03-11 (3.1.4)</h3><p><ol class='lessindent'>
+<li>Fix a bug in autovacuum that could cause database corruption if
+a CREATE UNIQUE INDEX fails because of a constraint violation.
+This problem only occurs if the new autovacuum feature introduced in
+version 3.1 is turned on.</li>
+<li>The F_FULLSYNC ioctl (currently only supported on Mac OS X) is disabled
+if the synchronous pragma is set to something other than "full".</li>
+<li>Add additional forward compatibility to the future version 3.2 database
+file format.</li>
+<li>Fix a bug in WHERE clauses of the form (rowid<'2')</li>
+<li>New <a href="compile.html#omitfeatures">SQLITE_OMIT_...</a> compile-time options added</li>
+<li>Updates to the man page</li>
+<li>Remove the use of strcasecmp() from the shell</li>
+<li>Windows DLL exports symbols Tclsqlite_Init and Sqlite_Init</li>
+
+</ol></p>
+<a name="version_3_1_3"></a>
+<h3>2005-02-19 (3.1.3)</h3><p><ol class='lessindent'>
+<li>Fix a problem with VACUUM on databases from which tables containing
+AUTOINCREMENT have been dropped.</li>
+<li>Add forward compatibility to the future version 3.2 database file
+format.</li>
+<li>Documentation updates</li>
+
+</ol></p>
+<a name="version_3_1_2"></a>
+<h3>2005-02-15 (3.1.2)</h3><p><ol class='lessindent'>
+<li>Fix a bug that can lead to database corruption if there are two
+open connections to the same database and one connection does a VACUUM
+and the second makes some change to the database.</li>
+<li>Allow "?" parameters in the LIMIT clause.</li>
+<li>Fix VACUUM so that it works with AUTOINCREMENT.</li>
+<li>Fix a race condition in AUTOVACUUM that can lead to corrupt databases</li>
+<li>Add a numeric version number to the sqlite3.h include file.</li>
+<li>Other minor bug fixes and performance enhancements.</li>
+
+</ol></p>
+<a name="version_2_8_16"></a>
+<h3>2005-02-15 (2.8.16)</h3><p><ol class='lessindent'>
+<li>Fix a bug that can lead to database corruption if there are two
+open connections to the same database and one connection does a VACUUM
+and the second makes some change to the database.</li>
+<li>Correctly handle quoted names in CREATE INDEX statements.</li>
+<li>Fix a naming conflict between sqlite.h and sqlite3.h.</li>
+<li>Avoid excess heap usage when copying expressions.</li>
+<li>Other minor bug fixes.</li>
+
+</ol></p>
+<h3>2005-02-01 (3.1.1 BETA)</h3><p><ol class='lessindent'>
+<li>Automatic caching of prepared statements in the TCL interface</li>
+<li>ATTACH and DETACH as well as some other operations cause existing
+ prepared statements to expire.</li>
+<li>Numerous minor bug fixes</li>
+
+</ol></p>
+<h3>2005-01-21 (3.1.0 ALPHA)</h3><p><ol class='lessindent'>
+<li>Autovacuum support added</li>
+<li>CURRENT_TIME, CURRENT_DATE, and CURRENT_TIMESTAMP added</li>
+<li>Support for the EXISTS clause added.</li>
+<li>Support for correlated subqueries added.</li>
+<li>Added the ESCAPE clause on the LIKE operator.</li>
+<li>Support for ALTER TABLE ... RENAME TABLE ... added</li>
+<li>AUTOINCREMENT keyword supported on INTEGER PRIMARY KEY</li>
+<li>Many SQLITE_OMIT_ macros inserts to omit features at compile-time
+ and reduce the library footprint.</li>
+<li>The REINDEX command was added.</li>
+<li>The engine no longer consults the main table if it can get
+ all the information it needs from an index.</li>
+<li>Many nuisance bugs fixed.</li>
+
+</ol></p>
+<a name="version_3_0_8"></a>
+<h3>2004-10-12 (3.0.8)</h3><p><ol class='lessindent'>
+<li>Add support for DEFERRED, IMMEDIATE, and EXCLUSIVE transactions.</li>
+<li>Allow new user-defined functions to be created when there are
+already one or more precompiled SQL statements.<li>
+<li>Fix portability problems for MinGW/MSYS.</li>
+<li>Fix a byte alignment problem on 64-bit Sparc machines.</li>
+<li>Fix the ".import" command of the shell so that it ignores \r
+characters at the end of lines.</li>
+<li>The "csv" mode option in the shell puts strings inside double-quotes.</li>
+<li>Fix typos in documentation.</li>
+<li>Convert array constants in the code to have type "const".</li>
+<li>Numerous code optimizations, specially optimizations designed to
+make the code footprint smaller.</li>
+
+</ol></p>
+<a name="version_3_0_7"></a>
+<h3>2004-09-18 (3.0.7)</h3><p><ol class='lessindent'>
+<li>The BTree module allocates large buffers using malloc() instead of
+ off of the stack, in order to play better on machines with limited
+ stack space.</li>
+<li>Fixed naming conflicts so that versions 2.8 and 3.0 can be
+ linked and used together in the same ANSI-C source file.</li>
+<li>New interface: sqlite3_bind_parameter_index()</li>
+<li>Add support for wildcard parameters of the form: "?nnn"</li>
+<li>Fix problems found on 64-bit systems.</li>
+<li>Removed encode.c file (containing unused routines) from the
+ version 3.0 source tree.</li>
+<li>The sqlite3_trace() callbacks occur before each statement
+ is executed, not when the statement is compiled.</li>
+<li>Makefile updates and miscellaneous bug fixes.</li>
+
+</ol></p>
+<h3>2004-09-02 (3.0.6 beta)</h3><p><ol class='lessindent'>
+<li>Better detection and handling of corrupt database files.</li>
+<li>The sqlite3_step() interface returns SQLITE_BUSY if it is unable
+ to commit a change because of a lock</li>
+<li>Combine the implementations of LIKE and GLOB into a single
+ pattern-matching subroutine.</li>
+<li>Miscellaneous code size optimizations and bug fixes</li>
+
+</ol></p>
+<h3>2004-08-29 (3.0.5 beta)</h3><p><ol class='lessindent'>
+<li>Support for ":AAA" style bind parameter names.</li>
+<li>Added the new sqlite3_bind_parameter_name() interface.</li>
+<li>Support for TCL variable names embedded in SQL statements in the
+ TCL bindings.</li>
+<li>The TCL bindings transfer data without necessarily doing a conversion
+ to a string.</li>
+<li>The database for TEMP tables is not created until it is needed.</li>
+<li>Add the ability to specify an alternative temporary file directory
+ using the "sqlite_temp_directory" global variable.</li>
+<li>A compile-time option (SQLITE_BUSY_RESERVED_LOCK) causes the busy
+ handler to be called when there is contention for a RESERVED lock.</li>
+<li>Various bug fixes and optimizations</li>
+
+</ol></p>
+<h3>2004-08-09 (3.0.4 beta)</h3><p><ol class='lessindent'>
+<li>CREATE TABLE and DROP TABLE now work correctly as prepared statements.</li>
+<li>Fix a bug in VACUUM and UNIQUE indices.</li>
+<li>Add the ".import" command to the command-line shell.</li>
+<li>Fix a bug that could cause index corruption when an attempt to
+ delete rows of a table is blocked by a pending query.</li>
+<li>Library size optimizations.</li>
+<li>Other minor bug fixes.</li>
+
+</ol></p>
+<a name="version_2_8_15"></a>
+<h3>2004-07-22 (2.8.15)</h3><p><ol class='lessindent'>
+<li>This is a maintenance release only. Various minor bugs have been
+fixed and some portability enhancements are added.</li>
+
+</ol></p>
+<h3>2004-07-22 (3.0.3 beta)</h3><p><ol class='lessindent'>
+<li>The second beta release for SQLite 3.0.</li>
+<li>Add support for "PRAGMA page_size" to adjust the page size of
+the database.</li>
+<li>Various bug fixes and documentation updates.</li>
+
+</ol></p>
+<h3>2004-06-30 (3.0.2 beta)</h3><p><ol class='lessindent'>
+<li>The first beta release for SQLite 3.0.</li>
+
+</ol></p>
+<h3>2004-06-22 (3.0.1 alpha)</h3><p><ol class='lessindent'>
+<li><font color="red"><b>
+ *** Alpha Release - Research And Testing Use Only ***</b></font>
+<li>Lots of bug fixes.</li>
+
+</ol></p>
+<h3>2004-06-18 (3.0.0 alpha)</h3><p><ol class='lessindent'>
+<li><font color="red"><b>
+ *** Alpha Release - Research And Testing Use Only ***</b></font>
+<li>Support for internationalization including UTF-8, UTF-16, and
+ user defined collating sequences.</li>
+<li>New file format that is 25% to 35% smaller for typical use.</li>
+<li>Improved concurrency.</li>
+<li>Atomic commits for ATTACHed databases.</li>
+<li>Remove cruft from the APIs.</li>
+<li>BLOB support.</li>
+<li>64-bit rowids.</li>
+<li><a href="version3.html">More information</a>.
+
+</ol></p>
+<a name="version_2_8_14"></a>
+<h3>2004-06-09 (2.8.14)</h3><p><ol class='lessindent'>
+<li>Fix the min() and max() optimizer so that it works when the FROM
+ clause consists of a subquery.</li>
+<li>Ignore extra whitespace at the end of "." commands in the shell.</li>
+<li>Bundle sqlite_encode_binary() and sqlite_decode_binary() with the
+ library.</li>
+<li>The TEMP_STORE and DEFAULT_TEMP_STORE pragmas now work.</li>
+<li>Code changes to compile cleanly using OpenWatcom.</li>
+<li>Fix VDBE stack overflow problems with INSTEAD OF triggers and
+ NULLs in IN operators.</li>
+<li>Add the global variable sqlite_temp_directory which if set defines the
+ directory in which temporary files are stored.</li>
+<li>sqlite_interrupt() plays well with VACUUM.</li>
+<li>Other minor bug fixes.</li>
+
+</ol></p>
+<a name="version_2_8_13"></a>
+<h3>2004-03-08 (2.8.13)</h3><p><ol class='lessindent'>
+<li>Refactor parts of the code in order to make the code footprint
+ smaller. The code is now also a little bit faster.</li>
+<li>sqlite_exec() is now implemented as a wrapper around sqlite_compile()
+ and sqlite_step().</li>
+<li>The built-in min() and max() functions now honor the difference between
+ NUMERIC and TEXT datatypes. Formerly, min() and max() always assumed
+ their arguments were of type NUMERIC.</li>
+<li>New HH:MM:SS modifier to the built-in date/time functions.</li>
+<li>Experimental sqlite_last_statement_changes() API added. Fixed
+ the last_insert_rowid() function so that it works correctly with
+ triggers.</li>
+<li>Add functions prototypes for the database encryption API.</li>
+<li>Fix several nuisance bugs.</li>
+
+</ol></p>
+<a name="version_2_8_12"></a>
+<h3>2004-02-08 (2.8.12)</h3><p><ol class='lessindent'>
+<li>Fix a bug that will might corrupt the rollback journal if a power failure
+ or external program halt occurs in the middle of a COMMIT. The corrupt
+ journal can lead to database corruption when it is rolled back.</li>
+<li>Reduce the size and increase the speed of various modules, especially
+ the virtual machine.</li>
+<li>Allow "&lt;expr&gt; IN &lt;table&gt;" as a shorthand for
+ "&lt;expr&gt; IN (SELECT * FROM &lt;table&gt;".</li>
+<li>Optimizations to the sqlite_mprintf() routine.</li>
+<li>Make sure the MIN() and MAX() optimizations work within subqueries.</li>
+
+</ol></p>
+<a name="version_2_8_11"></a>
+<h3>2004-01-14 (2.8.11)</h3><p><ol class='lessindent'>
+<li>Fix a bug in how the IN operator handles NULLs in subqueries. The bug
+ was introduced by the previous release.</li>
+
+</ol></p>
+<a name="version_2_8_10"></a>
+<h3>2004-01-14 (2.8.10)</h3><p><ol class='lessindent'>
+<li>Fix a potential database corruption problem on Unix caused by the fact
+ that all POSIX advisory locks are cleared whenever you close() a file.
+ The work around it to embargo all close() calls while locks are
+ outstanding.</li>
+<li>Performance enhancements on some corner cases of COUNT(*).</li>
+<li>Make sure the in-memory backend response sanely if malloc() fails.</li>
+<li>Allow sqlite_exec() to be called from within user-defined SQL
+ functions.</li>
+<li>Improved accuracy of floating-point conversions using "long double".</li>
+<li>Bug fixes in the experimental date/time functions.</li>
+
+</ol></p>
+<a name="version_2_8_9"></a>
+<h3>2004-01-06 (2.8.9)</h3><p><ol class='lessindent'>
+<li>Fix a 32-bit integer overflow problem that could result in corrupt
+ indices in a database if large negative numbers (less than -2147483648)
+ were inserted into an indexed numeric column.</li>
+<li>Fix a locking problem on multi-threaded Linux implementations.</li>
+<li>Always use "." instead of "," as the decimal point even if the locale
+ requests ",".</li>
+<li>Added UTC to localtime conversions to the experimental date/time
+ functions.</li>
+<li>Bug fixes to date/time functions.</li>
+
+</ol></p>
+<a name="version_2_8_8"></a>
+<h3>2003-12-18 (2.8.8)</h3><p><ol class='lessindent'>
+<li>Fix a critical bug introduced into 2.8.0 which could cause
+ database corruption.</li>
+<li>Fix a problem with 3-way joins that do not use indices</li>
+<li>The VACUUM command now works with the non-callback API</li>
+<li>Improvements to the "PRAGMA integrity_check" command</li>
+
+</ol></p>
+<a name="version_2_8_7"></a>
+<h3>2003-12-04 (2.8.7)</h3><p><ol class='lessindent'>
+<li>Added experimental sqlite_bind() and sqlite_reset() APIs.</li>
+<li>If the name of the database is an empty string, open a new database
+ in a temporary file that is automatically deleted when the database
+ is closed.</li>
+<li>Performance enhancements in the <a href="lemon.html">Lemon</a>-generated parser</li>
+<li>Experimental date/time functions revised.</li>
+<li>Disallow temporary indices on permanent tables.</li>
+<li>Documentation updates and typo fixes</li>
+<li>Added experimental sqlite_progress_handler() callback API</li>
+<li>Removed support for the Oracle8 outer join syntax.</li>
+<li>Allow GLOB and LIKE operators to work as functions.</li>
+<li>Other minor documentation and makefile changes and bug fixes.</li>
+
+</ol></p>
+<a name="version_2_8_6"></a>
+<h3>2003-08-22 (2.8.6)</h3><p><ol class='lessindent'>
+<li>Moved the CVS repository to www.sqlite.org</li>
+<li>Update the NULL-handling documentation.</li>
+<li>Experimental date/time functions added.</li>
+<li>Bug fix: correctly evaluate a view of a view without segfaulting.</li>
+<li>Bug fix: prevent database corruption if you dropped a
+ trigger that had the same name as a table.</li>
+<li>Bug fix: allow a VACUUM (without segfaulting) on an empty
+ database after setting the EMPTY_RESULT_CALLBACKS pragma.</li>
+<li>Bug fix: if an integer value will not fit in a 32-bit int, store it in
+ a double instead.</li>
+<li>Bug fix: Make sure the journal file directory entry is committed to disk
+ before writing the database file.</li>
+
+</ol></p>
+<a name="version_2_8_5"></a>
+<h3>2003-07-22 (2.8.5)</h3><p><ol class='lessindent'>
+<li>Make LIMIT work on a compound SELECT statement.</li>
+<li>LIMIT 0 now shows no rows. Use LIMIT -1 to see all rows.</li>
+<li>Correctly handle comparisons between an INTEGER PRIMARY KEY and
+ a floating point number.</li>
+<li>Fix several important bugs in the new ATTACH and DETACH commands.</li>
+<li>Updated the <a href="nulls.html">NULL-handling document</a>.</li>
+<li>Allow NULL arguments in sqlite_compile() and sqlite_step().</li>
+<li>Many minor bug fixes</li>
+
+</ol></p>
+<a name="version_2_8_4"></a>
+<h3>2003-06-29 (2.8.4)</h3><p><ol class='lessindent'>
+<li>Enhanced the "PRAGMA integrity_check" command to verify indices.</li>
+<li>Added authorization hooks for the new ATTACH and DETACH commands.</li>
+<li>Many documentation updates</li>
+<li>Many minor bug fixes</li>
+
+</ol></p>
+<a name="version_2_8_3"></a>
+<h3>2003-06-04 (2.8.3)</h3><p><ol class='lessindent'>
+<li>Fix a problem that will corrupt the indices on a table if you
+ do an INSERT OR REPLACE or an UPDATE OR REPLACE on a table that
+ contains an INTEGER PRIMARY KEY plus one or more indices.</li>
+<li>Fix a bug in Windows locking code so that locks work correctly
+ when simultaneously accessed by Win95 and WinNT systems.</li>
+<li>Add the ability for INSERT and UPDATE statements to refer to the
+ "rowid" (or "_rowid_" or "oid") columns.</li>
+<li>Other important bug fixes</li>
+
+</ol></p>
+<a name="version_2_8_2"></a>
+<h3>2003-05-17 (2.8.2)</h3><p><ol class='lessindent'>
+<li>Fix a problem that will corrupt the database file if you drop a
+ table from the main database that has a TEMP index.</li>
+
+</ol></p>
+<a name="version_2_8_1"></a>
+<h3>2003-05-17 (2.8.1)</h3><p><ol class='lessindent'>
+<li>Reactivated the VACUUM command that reclaims unused disk space in
+ a database file.</li>
+<li>Added the ATTACH and DETACH commands to allow interacting with multiple
+ database files at the same time.</li>
+<li>Added support for TEMP triggers and indices.</li>
+<li>Added support for in-memory databases.</li>
+<li>Removed the experimental sqlite_open_aux_file(). Its function is
+ subsumed in the new ATTACH command.</li>
+<li>The precedence order for ON CONFLICT clauses was changed so that
+ ON CONFLICT clauses on BEGIN statements have a higher precedence than
+ ON CONFLICT clauses on constraints.
+<li>Many, many bug fixes and compatibility enhancements.</li>
+
+</ol></p>
+<a name="version_2_8_0"></a>
+<h3>2003-02-16 (2.8.0)</h3><p><ol class='lessindent'>
+<li>Modified the journal file format to make it more resistant to corruption
+ that can occur after an OS crash or power failure.</li>
+<li>Added a new C/C++ API that does not use callback for returning data.</li>
+
+</ol></p>
+<a name="version_2_7_6"></a>
+<h3>2003-01-25 (2.7.6)</h3><p><ol class='lessindent'>
+<li>Performance improvements. The library is now much faster.</li>
+<li>Added the <b>sqlite_set_authorizer()</b> API. Formal documentation has
+ not been written - see the source code comments for instructions on
+ how to use this function.</li>
+<li>Fix a bug in the GLOB operator that was preventing it from working
+ with upper-case letters.</li>
+<li>Various minor bug fixes.</li>
+
+</ol></p>
+<a name="version_2_7_5"></a>
+<h3>2002-12-28 (2.7.5)</h3><p><ol class='lessindent'>
+<li>Fix an uninitialized variable in pager.c which could (with a probability
+ of about 1 in 4 billion) result in a corrupted database.</li>
+
+</ol></p>
+<a name="version_2_7_4"></a>
+<h3>2002-12-17 (2.7.4)</h3><p><ol class='lessindent'>
+<li>Database files can now grow to be up to 2&#94;41 bytes. The old limit
+ was 2&#94;31 bytes.</li>
+<li>The optimizer will now scan tables in the reverse if doing so will
+ satisfy an ORDER BY ... DESC clause.</li>
+<li>The full pathname of the database file is now remembered even if
+ a relative path is passed into sqlite_open(). This allows
+ the library to continue operating correctly after a chdir().</li>
+<li>Speed improvements in the VDBE.</li>
+<li>Lots of little bug fixes.</li>
+
+</ol></p>
+<a name="version_2_7_3"></a>
+<h3>2002-10-31 (2.7.3)</h3><p><ol class='lessindent'>
+<li>Various compiler compatibility fixes.</li>
+<li>Fix a bug in the "expr IN ()" operator.</li>
+<li>Accept column names in parentheses.</li>
+<li>Fix a problem with string memory management in the VDBE</li>
+<li>Fix a bug in the "table_info" pragma"</li>
+<li>Export the sqlite_function_type() API function in the Windows DLL</li>
+<li>Fix locking behavior under Windows</li>
+<li>Fix a bug in LEFT OUTER JOIN</li>
+
+</ol></p>
+<a name="version_2_7_2"></a>
+<h3>2002-09-25 (2.7.2)</h3><p><ol class='lessindent'>
+<li>Prevent journal file overflows on huge transactions.</li>
+<li>Fix a memory leak that occurred when sqlite_open() failed.</li>
+<li>Honor the ORDER BY and LIMIT clause of a SELECT even if the
+ result set is used for an INSERT.</li>
+<li>Do not put write locks on the file used to hold TEMP tables.</li>
+<li>Added documentation on SELECT DISTINCT and on how SQLite handles NULLs.</li>
+<li>Fix a problem that was causing poor performance when many thousands
+ of SQL statements were executed by a single sqlite_exec() call.</li>
+
+</ol></p>
+<a name="version_2_7_1"></a>
+<h3>2002-08-31 (2.7.1)</h3><p><ol class='lessindent'>
+<li>Fix a bug in the ORDER BY logic that was introduced in version 2.7.0</li>
+<li>C-style comments are now accepted by the tokenizer.</li>
+<li>INSERT runs a little faster when the source is a SELECT statement.</li>
+
+</ol></p>
+<a name="version_2_7_0"></a>
+<h3>2002-08-25 (2.7.0)</h3><p><ol class='lessindent'>
+<li>Make a distinction between numeric and text values when sorting.
+ Text values sort according to memcmp(). Numeric values sort in
+ numeric order.</li>
+<li>Allow multiple simultaneous readers under Windows by simulating
+ the reader/writers locks that are missing from Win95/98/ME.</li>
+<li>An error is now returned when trying to start a transaction if
+ another transaction is already active.</li>
+
+</ol></p>
+<a name="version_2_6_3"></a>
+<h3>2002-08-13 (2.6.3)</h3><p><ol class='lessindent'>
+<li>Add the ability to read both little-endian and big-endian databases.
+ So a database created under SunOS or Mac OS X can be read and written
+ under Linux or Windows and vice versa.</li>
+<li>Convert to the new website: http://www.sqlite.org/</li>
+<li>Allow transactions to span Linux Threads</li>
+<li>Bug fix in the processing of the ORDER BY clause for GROUP BY queries</li>
+
+</ol></p>
+<a name="version_2_6_2"></a>
+<h3>2002-07-31 (2.6.2)</h3><p><ol class='lessindent'>
+<li>Text files read by the COPY command can now have line terminators
+ of LF, CRLF, or CR.</li>
+<li>SQLITE_BUSY is handled correctly if encountered during database
+ initialization.</li>
+<li>Fix to UPDATE triggers on TEMP tables.</li>
+<li>Documentation updates.</li>
+
+</ol></p>
+<a name="version_2_6_1"></a>
+<h3>2002-07-19 (2.6.1)</h3><p><ol class='lessindent'>
+<li>Include a static string in the library that responds to the RCS
+ "ident" command and which contains the library version number.</li>
+<li>Fix an assertion failure that occurred when deleting all rows of
+ a table with the "count_changes" pragma turned on.</li>
+<li>Better error reporting when problems occur during the automatic
+ 2.5.6 to 2.6.0 database format upgrade.</li>
+
+</ol></p>
+<a name="version_2_6_0"></a>
+<h3>2002-07-18 (2.6.0)</h3><p><ol class='lessindent'>
+<li>Change the format of indices to correct a design flaw the originated
+ with version 2.1.0. <font color="red">*** This is an incompatible
+ file format change ***</font> When version 2.6.0 or later of the
+ library attempts to open a database file created by version 2.5.6 or
+ earlier, it will automatically and irreversibly convert the file format.
+ <b>Make backup copies of older database files before opening them with
+ version 2.6.0 of the library.</b>
+ </li>
+
+</ol></p>
+<a name="version_2_5_6"></a>
+<h3>2002-07-07 (2.5.6)</h3><p><ol class='lessindent'>
+<li>Fix more problems with rollback. Enhance the test suite to exercise
+ the rollback logic extensively in order to prevent any future problems.
+ </li>
+
+</ol></p>
+<a name="version_2_5_5"></a>
+<h3>2002-07-06 (2.5.5)</h3><p><ol class='lessindent'>
+<li>Fix a bug which could cause database corruption during a rollback.
+ This bugs was introduced in version 2.4.0 by the freelist
+ optimization of checkin &#91;410&#93;.</li>
+<li>Fix a bug in aggregate functions for VIEWs.</li>
+<li>Other minor changes and enhancements.</li>
+
+</ol></p>
+<a name="version_2_5_4"></a>
+<h3>2002-07-01 (2.5.4)</h3><p><ol class='lessindent'>
+<li>Make the "AS" keyword optional again.</li>
+<li>The datatype of columns now appear in the 4th argument to the
+ callback.</li>
+<li>Added the <b>sqlite_open_aux_file()</b> API, though it is still
+ mostly undocumented and untested.</li>
+<li>Added additional test cases and fixed a few bugs that those
+ test cases found.</li>
+
+</ol></p>
+<a name="version_2_5_3"></a>
+<h3>2002-06-25 (2.5.3)</h3><p><ol class='lessindent'>
+<li>Bug fix: Database corruption can occur due to the optimization
+ that was introduced in version 2.4.0 (check-in &#91;410&#93;). The problem
+ should now be fixed. The use of versions 2.4.0 through 2.5.2 is
+ not recommended.</li>
+
+</ol></p>
+<a name="version_2_5_2"></a>
+<h3>2002-06-25 (2.5.2)</h3><p><ol class='lessindent'>
+<li>Added the new <b>SQLITE_TEMP_MASTER</b> table which records the schema
+ for temporary tables in the same way that <b>SQLITE_MASTER</b> does for
+ persistent tables.</li>
+<li>Added an optimization to UNION ALL</li>
+<li>Fixed a bug in the processing of LEFT OUTER JOIN</li>
+<li>The LIMIT clause now works on subselects</li>
+<li>ORDER BY works on subselects</li>
+<li>There is a new TypeOf() function used to determine if an expression
+ is numeric or text.</li>
+<li>Autoincrement now works for INSERT from a SELECT.</li>
+
+</ol></p>
+<a name="version_2_5_1"></a>
+<h3>2002-06-19 (2.5.1)</h3><p><ol class='lessindent'>
+<li>The query optimizer now attempts to implement the ORDER BY clause
+ using an index. Sorting is still used if not suitable index is
+ available.</li>
+
+</ol></p>
+<a name="version_2_5_0"></a>
+<h3>2002-06-17 (2.5.0)</h3><p><ol class='lessindent'>
+<li>Added support for row triggers.</li>
+<li>Added SQL-92 compliant handling of NULLs.</li>
+<li>Add support for the full SQL-92 join syntax and LEFT OUTER JOINs.</li>
+<li>Double-quoted strings interpreted as column names not text literals.</li>
+<li>Parse (but do not implement) foreign keys.</li>
+<li>Performance improvements in the parser, pager, and WHERE clause code
+ generator.</li>
+<li>Make the LIMIT clause work on subqueries. (ORDER BY still does not
+ work, though.)</li>
+<li>Added the "%Q" expansion to sqlite_*_printf().</li>
+<li>Bug fixes too numerous to mention (see the change log).</li>
+
+</ol></p>
+<a name="version_2_4_12"></a>
+<h3>2002-05-10 (2.4.12)</h3><p><ol class='lessindent'>
+<li>Added logic to detect when the library API routines are called out
+ of sequence.</li>
+
+</ol></p>
+<a name="version_2_4_11"></a>
+<h3>2002-05-08 (2.4.11)</h3><p><ol class='lessindent'>
+<li>Bug fix: Column names in the result set were not being generated
+ correctly for some (rather complex) VIEWs. This could cause a
+ segfault under certain circumstances.</li>
+
+</ol></p>
+<a name="version_2_4_10"></a>
+<h3>2002-05-03 (2.4.10)</h3><p><ol class='lessindent'>
+<li>Bug fix: Generate correct column headers when a compound SELECT is used
+ as a subquery.</li>
+<li>Added the sqlite_encode_binary() and sqlite_decode_binary() functions to
+ the source tree. But they are not yet linked into the library.</li>
+<li>Documentation updates.</li>
+<li>Export the sqlite_changes() function from Windows DLLs.</li>
+<li>Bug fix: Do not attempt the subquery flattening optimization on queries
+ that lack a FROM clause. To do so causes a segfault.</li>
+
+</ol></p>
+<a name="version_2_4_9"></a>
+<h3>2002-04-22 (2.4.9)</h3><p><ol class='lessindent'>
+<li>Fix a bug that was causing the precompiled binary of SQLITE.EXE to
+ report "out of memory" under Windows 98.</li>
+
+</ol></p>
+<a name="version_2_4_8"></a>
+<h3>2002-04-20 (2.4.8)</h3><p><ol class='lessindent'>
+<li>Make sure VIEWs are created after their corresponding TABLEs in the
+ output of the <b>.dump</b> command in the shell.</li>
+<li>Speed improvements: Do not do synchronous updates on TEMP tables.</li>
+<li>Many improvements and enhancements to the shell.</li>
+<li>Make the GLOB and LIKE operators functions that can be overridden
+ by a programmer. This allows, for example, the LIKE operator to
+ be changed to be case sensitive.</li>
+
+</ol></p>
+<a name="version_2_4_7"></a>
+<h3>2002-04-12 (2.4.7)</h3><p><ol class='lessindent'>
+<li>Add the ability to put TABLE.* in the column list of a
+ SELECT statement.</li>
+<li>Permit SELECT statements without a FROM clause.</li>
+<li>Added the <b>last_insert_rowid()</b> SQL function.</li>
+<li>Do not count rows where the IGNORE conflict resolution occurs in
+ the row count.</li>
+<li>Make sure functions expressions in the VALUES clause of an INSERT
+ are correct.</li>
+<li>Added the <b>sqlite_changes()</b> API function to return the number
+ of row that changed in the most recent operation.</li>
+
+</ol></p>
+<a name="version_2_4_6"></a>
+<h3>2002-04-02 (2.4.6)</h3><p><ol class='lessindent'>
+<li>Bug fix: Correctly handle terms in the WHERE clause of a join that
+ do not contain a comparison operator.</li>
+
+</ol></p>
+<a name="version_2_4_5"></a>
+<h3>2002-04-02 (2.4.5)</h3><p><ol class='lessindent'>
+<li>Bug fix: Correctly handle functions that appear in the WHERE clause
+ of a join.</li>
+<li>When the PRAGMA vdbe_trace=ON is set, correctly print the P3 operand
+ value when it is a pointer to a structure rather than a pointer to
+ a string.</li>
+<li>When inserting an explicit NULL into an INTEGER PRIMARY KEY, convert
+ the NULL value into a unique key automatically.</li>
+
+</ol></p>
+<a name="version_2_4_4"></a>
+<h3>2002-03-30 (2.4.4)</h3><p><ol class='lessindent'>
+<li>Allow "VIEW" to be a column name</li>
+<li>Added support for CASE expressions (patch from Dan Kennedy)</li>
+<li>Added RPMS to the delivery (patches from Doug Henry)</li>
+<li>Fix typos in the documentation</li>
+<li>Cut over configuration management to a new CVS repository with
+ its own CVSTrac bug tracking system.</li>
+
+</ol></p>
+<a name="version_2_4_3"></a>
+<h3>2002-03-23 (2.4.3)</h3><p><ol class='lessindent'>
+<li>Fix a bug in SELECT that occurs when a compound SELECT is used as a
+ subquery in the FROM of a SELECT.</li>
+<li>The <b>sqlite_get_table()</b> function now returns an error if you
+ give it two or more SELECTs that return different numbers of columns.</li>
+
+</ol></p>
+<a name="version_2_4_2"></a>
+<h3>2002-03-20 (2.4.2)</h3><p><ol class='lessindent'>
+<li>Bug fix: Fix an assertion failure that occurred when ROWID was a column
+ in a SELECT statement on a view.</li>
+<li>Bug fix: Fix an uninitialized variable in the VDBE that would could an
+ assert failure.</li>
+<li>Make the os.h header file more robust in detecting when the compile is
+ for Windows and when it is for Unix.</li>
+
+</ol></p>
+<a name="version_2_4_1"></a>
+<h3>2002-03-13 (2.4.1)</h3><p><ol class='lessindent'>
+<li>Using an unnamed subquery in a FROM clause would cause a segfault.</li>
+<li>The parser now insists on seeing a semicolon or the end of input before
+ executing a statement. This avoids an accidental disaster if the
+ WHERE keyword is misspelled in an UPDATE or DELETE statement.</li>
+
+</ol></p>
+<a name="version_2_4_0"></a>
+<h3>2002-03-11 (2.4.0)</h3><p><ol class='lessindent'>
+<li>Change the name of the sanity_check PRAGMA to <b>integrity_check</b>
+ and make it available in all compiles.</li>
+<li>SELECT min() or max() of an indexed column with no WHERE or GROUP BY
+ clause is handled as a special case which avoids a complete table scan.</li>
+<li>Automatically generated ROWIDs are now sequential.</li>
+<li>Do not allow dot-commands of the command-line shell to occur in the
+ middle of a real SQL command.</li>
+<li>Modifications to the <a href="lemon.html">Lemon parser generator</a> so that the parser tables
+ are 4 times smaller.</li>
+<li>Added support for user-defined functions implemented in C.</li>
+<li>Added support for new functions: <b>coalesce()</b>, <b>lower()</b>,
+ <b>upper()</b>, and <b>random()</b>
+<li>Added support for VIEWs.</li>
+<li>Added the subquery flattening optimizer.</li>
+<li>Modified the B-Tree and Pager modules so that disk pages that do not
+ contain real data (free pages) are not journaled and are not
+ written from memory back to the disk when they change. This does not
+ impact database integrity, since the
+ pages contain no real data, but it does make large INSERT operations
+ about 2.5 times faster and large DELETEs about 5 times faster.</li>
+<li>Made the CACHE_SIZE pragma persistent</li>
+<li>Added the SYNCHRONOUS pragma</li>
+<li>Fixed a bug that was causing updates to fail inside of transactions when
+ the database contained a temporary table.</li>
+
+</ol></p>
+<a name="version_2_3_3"></a>
+<h3>2002-02-19 (2.3.3)</h3><p><ol class='lessindent'>
+<li>Allow identifiers to be quoted in square brackets, for compatibility
+ with MS-Access.</li>
+<li>Added support for sub-queries in the FROM clause of a SELECT.</li>
+<li>More efficient implementation of sqliteFileExists() under Windows.
+ (by Joel Luscy)</li>
+<li>The VALUES clause of an INSERT can now contain expressions, including
+ scalar SELECT clauses.</li>
+<li>Added support for CREATE TABLE AS SELECT</li>
+<li>Bug fix: Creating and dropping a table all within a single
+ transaction was not working.</li>
+
+</ol></p>
+<a name="version_2_3_2"></a>
+<h3>2002-02-14 (2.3.2)</h3><p><ol class='lessindent'>
+<li>Bug fix: There was an incorrect assert() in pager.c. The real code was
+ all correct (as far as is known) so everything should work OK if you
+ compile with -DNDEBUG=1. When asserts are not disabled, there
+ could be a fault.</li>
+
+</ol></p>
+<a name="version_2_3_1"></a>
+<h3>2002-02-13 (2.3.1)</h3><p><ol class='lessindent'>
+<li>Bug fix: An assertion was failing if "PRAGMA full_column_names=ON;" was
+ set and you did a query that used a rowid, like this:
+ "SELECT rowid, * FROM ...".</li>
+
+</ol></p>
+<a name="version_2_3_0"></a>
+<h3>2002-02-03 (2.3.0)</h3><p><ol class='lessindent'>
+<li>Fix a serious bug in the INSERT command which was causing data to go
+ into the wrong columns if the data source was a SELECT and the INSERT
+ clauses specified its columns in some order other than the default.</li>
+<li>Added the ability to resolve constraint conflicts is ways other than
+ an abort and rollback. See the documentation on the "ON CONFLICT"
+ clause for details.</li>
+<li>Temporary files are now automatically deleted by the operating system
+ when closed. There are no more dangling temporary files on a program
+ crash. (If the OS crashes, fsck will delete the file after reboot
+ under Unix. I do not know what happens under Windows.)</li>
+<li>NOT NULL constraints are honored.</li>
+<li>The COPY command puts NULLs in columns whose data is '\N'.</li>
+<li>In the COPY command, backslash can now be used to escape a newline.</li>
+<li>Added the SANITY_CHECK pragma.</li>
+
+</ol></p>
+<a name="version_2_2_5"></a>
+<h3>2002-01-28 (2.2.5)</h3><p><ol class='lessindent'>
+<li>Important bug fix: the IN operator was not working if either the
+ left-hand or right-hand side was derived from an INTEGER PRIMARY KEY.</li>
+<li>Do not escape the backslash '\' character in the output of the
+ <b>sqlite</b> command-line access program.</li>
+
+</ol></p>
+<a name="version_2_2_4"></a>
+<h3>2002-01-22 (2.2.4)</h3><p><ol class='lessindent'>
+<li>The label to the right of an AS in the column list of a SELECT can now
+ be used as part of an expression in the WHERE, ORDER BY, GROUP BY, and/or
+ HAVING clauses.</li>
+<li>Fix a bug in the <b>-separator</b> command-line option to the <b>sqlite</b>
+ command.</li>
+<li>Fix a problem with the sort order when comparing upper-case strings against
+ characters greater than 'Z' but less than 'a'.</li>
+<li>Report an error if an ORDER BY or GROUP BY expression is constant.</li>
+
+</ol></p>
+<a name="version_2_2_3"></a>
+<h3>2002-01-16 (2.2.3)</h3><p><ol class='lessindent'>
+<li>Fix warning messages in VC++ 7.0. (Patches from nicolas352001)</li>
+<li>Make the library thread-safe. (The code is there and appears to work
+ but has not been stressed.)</li>
+<li>Added the new <b>sqlite_last_insert_rowid()</b> API function.</li>
+
+</ol></p>
+<a name="version_2_2_2"></a>
+<h3>2002-01-14 (2.2.2)</h3><p><ol class='lessindent'>
+<li>Bug fix: An assertion was failing when a temporary table with an index
+ had the same name as a permanent table created by a separate process.</li>
+<li>Bug fix: Updates to tables containing an INTEGER PRIMARY KEY and an
+ index could fail.</li>
+
+</ol></p>
+<a name="version_2_2_1"></a>
+<h3>2002-01-09 (2.2.1)</h3><p><ol class='lessindent'>
+<li>Bug fix: An attempt to delete a single row of a table with a WHERE
+ clause of "ROWID=x" when no such rowid exists was causing an error.</li>
+<li>Bug fix: Passing in a NULL as the 3rd parameter to <b>sqlite_open()</b>
+ would sometimes cause a coredump.</li>
+<li>Bug fix: DROP TABLE followed by a CREATE TABLE with the same name all
+ within a single transaction was causing a coredump.</li>
+<li>Makefile updates from A. Rottmann</li>
+
+</ol></p>
+<a name="version_2_2_0"></a>
+<h3>2001-12-22 (2.2.0)</h3><p><ol class='lessindent'>
+<li>Columns of type INTEGER PRIMARY KEY are actually used as the primary
+ key in underlying B-Tree representation of the table.</li>
+<li>Several obscure, unrelated bugs were found and fixed while
+ implemented the integer primary key change of the previous bullet.</li>
+<li>Added the ability to specify "*" as part of a larger column list in
+ the result section of a SELECT statement. For example:
+ <nobr>"<b>SELECT rowid, * FROM table1;</b>"</nobr>.</li>
+<li>Updates to comments and documentation.</li>
+
+</ol></p>
+<a name="version_2_1_7"></a>
+<h3>2001-12-15 (2.1.7)</h3><p><ol class='lessindent'>
+<li>Fix a bug in <b>CREATE TEMPORARY TABLE</b> which was causing the
+ table to be initially allocated in the main database file instead
+ of in the separate temporary file. This bug could cause the library
+ to suffer an assertion failure and it could cause "page leaks" in the
+ main database file.
+<li>Fix a bug in the b-tree subsystem that could sometimes cause the first
+ row of a table to be repeated during a database scan.</li>
+
+</ol></p>
+<a name="version_2_1_6"></a>
+<h3>2001-12-14 (2.1.6)</h3><p><ol class='lessindent'>
+<li>Fix the locking mechanism yet again to prevent
+ <b>sqlite_exec()</b> from returning SQLITE_PROTOCOL
+ unnecessarily. This time the bug was a race condition in
+ the locking code. This change affects both POSIX and Windows users.</li>
+
+</ol></p>
+<a name="version_2_1_5"></a>
+<h3>2001-12-06 (2.1.5)</h3><p><ol class='lessindent'>
+<li>Fix for another problem (unrelated to the one fixed in 2.1.4)
+ that sometimes causes <b>sqlite_exec()</b> to return SQLITE_PROTOCOL
+ unnecessarily. This time the bug was
+ in the POSIX locking code and should not effect Windows users.</li>
+
+</ol></p>
+<a name="version_2_1_4"></a>
+<h3>2001-12-05 (2.1.4)</h3><p><ol class='lessindent'>
+<li>Sometimes <b>sqlite_exec()</b> would return SQLITE_PROTOCOL when it
+ should have returned SQLITE_BUSY.</li>
+<li>The fix to the previous bug uncovered a deadlock which was also
+ fixed.</li>
+<li>Add the ability to put a single .command in the second argument
+ of the sqlite shell</li>
+<li>Updates to the FAQ</li>
+
+</ol></p>
+<a name="version_2_1_3"></a>
+<h3>2001-11-24 (2.1.3)</h3><p><ol class='lessindent'>
+<li>Fix the behavior of comparison operators
+ (ex: "<b>&lt;</b>", "<b>==</b>", etc.)
+ so that they are consistent with the order of entries in an index.</li>
+<li>Correct handling of integers in SQL expressions that are larger than
+ what can be represented by the machine integer.</li>
+
+</ol></p>
+<a name="version_2_1_2"></a>
+<h3>2001-11-23 (2.1.2)</h3><p><ol class='lessindent'>
+<li>Changes to support 64-bit architectures.</li>
+<li>Fix a bug in the locking protocol.</li>
+<li>Fix a bug that could (rarely) cause the database to become
+ unreadable after a DROP TABLE due to corruption to the SQLITE_MASTER
+ table.</li>
+<li>Change the code so that version 2.1.1 databases that were rendered
+ unreadable by the above bug can be read by this version of
+ the library even though the SQLITE_MASTER table is (slightly)
+ corrupted.</li>
+
+</ol></p>
+<a name="version_2_1_1"></a>
+<h3>2001-11-13 (2.1.1)</h3><p><ol class='lessindent'>
+<li>Bug fix: Sometimes arbitrary strings were passed to the callback
+ function when the actual value of a column was NULL.</li>
+
+</ol></p>
+<a name="version_2_1_0"></a>
+<h3>2001-11-12 (2.1.0)</h3><p><ol class='lessindent'>
+<li>Change the format of data records so that records up to 16MB in size
+ can be stored.</li>
+<li>Change the format of indices to allow for better query optimization.</li>
+<li>Implement the "LIMIT ... OFFSET ..." clause on SELECT statements.</li>
+
+</ol></p>
+<a name="version_2_0_8"></a>
+<h3>2001-11-03 (2.0.8)</h3><p><ol class='lessindent'>
+<li>Made selected parameters in API functions <b>const</b>. This should
+ be fully backwards compatible.</li>
+<li>Documentation updates</li>
+<li>Simplify the design of the VDBE by restricting the number of sorters
+ and lists to 1.
+ In practice, no more than one sorter and one list was ever used anyhow.
+ </li>
+
+</ol></p>
+<a name="version_2_0_7"></a>
+<h3>2001-10-22 (2.0.7)</h3><p><ol class='lessindent'>
+<li>Any UTF-8 character or ISO8859 character can be used as part of
+ an identifier.</li>
+<li>Patches from Christian Werner to improve ODBC compatibility and to
+ fix a bug in the round() function.</li>
+<li>Plug some memory leaks that use to occur if malloc() failed.
+ We have been and continue to be memory leak free as long as
+ malloc() works.</li>
+<li>Changes to some test scripts so that they work on Windows in
+ addition to Unix.</li>
+
+</ol></p>
+<a name="version_2_0_6"></a>
+<h3>2001-10-19 (2.0.6)</h3><p><ol class='lessindent'>
+<li>Added the EMPTY_RESULT_CALLBACKS pragma</li>
+<li>Support for UTF-8 and ISO8859 characters in column and table names.</li>
+<li>Bug fix: Compute correct table names with the FULL_COLUMN_NAMES pragma
+ is turned on.</li>
+
+</ol></p>
+<a name="version_2_0_5"></a>
+<h3>2001-10-15 (2.0.5)</h3><p><ol class='lessindent'>
+<li>Added the COUNT_CHANGES pragma.</li>
+<li>Changes to the FULL_COLUMN_NAMES pragma to help out the ODBC driver.</li>
+<li>Bug fix: "SELECT count(*)" was returning NULL for empty tables.
+ Now it returns 0.</li>
+
+</ol></p>
+<a name="version_2_0_4"></a>
+<h3>2001-10-13 (2.0.4)</h3><p><ol class='lessindent'>
+<li>Bug fix: an obscure and relatively harmless bug was causing one of
+ the tests to fail when gcc optimizations are turned on. This release
+ fixes the problem.</li>
+
+</ol></p>
+<a name="version_2_0_3"></a>
+<h3>2001-10-13 (2.0.3)</h3><p><ol class='lessindent'>
+<li>Bug fix: the <b>sqlite_busy_timeout()</b> function was delaying 1000
+ times too long before failing.</li>
+<li>Bug fix: an assertion was failing if the disk holding the database
+ file became full or stopped accepting writes for some other reason.
+ New tests were added to detect similar problems in the future.</li>
+<li>Added new operators: <b>&amp;</b> (bitwise-and)
+ <b>|</b> (bitwise-or), <b>~</b> (ones-complement),
+ <b>&lt;&lt;</b> (shift left), <b>&gt;&gt;</b> (shift right).</li>
+<li>Added new functions: <b>round()</b> and <b>abs()</b>.</li>
+
+</ol></p>
+<a name="version_2_0_2"></a>
+<h3>2001-10-09 (2.0.2)</h3><p><ol class='lessindent'>
+<li>Fix two bugs in the locking protocol. (One was masking the other.)</li>
+<li>Removed some unused "#include <unistd.h>" that were causing problems
+ for VC++.</li>
+<li>Fixed <b>sqlite.h</b> so that it is usable from C++</li>
+<li>Added the FULL_COLUMN_NAMES pragma. When set to "ON", the names of
+ columns are reported back as TABLE.COLUMN instead of just COLUMN.</li>
+<li>Added the TABLE_INFO() and INDEX_INFO() pragmas to help support the
+ ODBC interface.</li>
+<li>Added support for TEMPORARY tables and indices.</li>
+
+</ol></p>
+<a name="version_2_0_1"></a>
+<h3>2001-10-02 (2.0.1)</h3><p><ol class='lessindent'>
+<li>Remove some C++ style comments from btree.c so that it will compile
+ using compilers other than gcc.</li>
+<li>The ".dump" output from the shell does not work if there are embedded
+ newlines anywhere in the data. This is an old bug that was carried
+ forward from version 1.0. To fix it, the ".dump" output no longer
+ uses the COPY command. It instead generates INSERT statements.</li>
+<li>Extend the expression syntax to support "expr NOT NULL" (with a
+ space between the "NOT" and the "NULL") in addition to "expr NOTNULL"
+ (with no space).</li>
+
+</ol></p>
+<a name="version_2_0_0"></a>
+<h3>2001-09-28 (2.0.0)</h3><p><ol class='lessindent'>
+<li>Automatically build binaries for Linux and Windows and put them on
+ the website.</li>
+
+</ol></p>
+<h3>2001-09-28 (2.0-alpha-4)</h3><p><ol class='lessindent'>
+<li>Incorporate makefile patches form A. Rottmann to use LIBTOOL</li>
+
+</ol></p>
+<h3>2001-09-27 (2.0-alpha-3)</h3><p><ol class='lessindent'>
+<li>SQLite now honors the UNIQUE keyword in CREATE UNIQUE INDEX. Primary
+ keys are required to be unique.</li>
+<li>File format changed back to what it was for alpha-1</li>
+<li>Fixes to the rollback and locking behavior</li>
+
+</ol></p>
+<h3>2001-09-20 (2.0-alpha-2)</h3><p><ol class='lessindent'>
+<li>Initial release of version 2.0. The idea of renaming the library
+ to "SQLus" was abandoned in favor of keeping the "SQLite" name and
+ bumping the major version number.</li>
+<li>The pager and btree subsystems added back. They are now the only
+ available backend.</li>
+<li>The Dbbe abstraction and the GDBM and memory drivers were removed.</li>
+<li>Copyright on all code was disclaimed. The library is now in the
+ public domain.</li>
+
+</ol></p>
+<a name="version_1_0_32"></a>
+<h3>2001-07-23 (1.0.32)</h3><p><ol class='lessindent'>
+<li>Pager and btree subsystems removed. These will be used in a follow-on
+ SQL server library named "SQLus".</li>
+<li>Add the ability to use quoted strings as table and column names in
+ expressions.</li>
+
+</ol></p>
+<a name="version_1_0_31"></a>
+<h3>2001-04-15 (1.0.31)</h3><p><ol class='lessindent'>
+<li>Pager subsystem added but not yet used.</li>
+<li>More robust handling of out-of-memory errors.</li>
+<li>New tests added to the test suite.</li>
+
+</ol></p>
+<a name="version_1_0_30"></a>
+<h3>2001-04-06 (1.0.30)</h3><p><ol class='lessindent'>
+<li>Remove the <b>sqlite_encoding</b> TCL variable that was introduced
+ in the previous version.</li>
+<li>Add options <b>-encoding</b> and <b>-tcl-uses-utf</b> to the
+ <b>sqlite</b> TCL command.</li>
+<li>Add tests to make sure that tclsqlite was compiled using Tcl header
+ files and libraries that match.</li>
+
+</ol></p>
+<a name="version_1_0_29"></a>
+<h3>2001-04-05 (1.0.29)</h3><p><ol class='lessindent'>
+<li>The library now assumes data is stored as UTF-8 if the --enable-utf8
+ option is given to configure. The default behavior is to assume
+ iso8859-x, as it has always done. This only makes a difference for
+ LIKE and GLOB operators and the LENGTH and SUBSTR functions.</li>
+<li>If the library is not configured for UTF-8 and the Tcl library
+ is one of the newer ones that uses UTF-8 internally,
+ then a conversion from UTF-8 to iso8859 and
+ back again is done inside the TCL interface.</li>
+
+</ol></p>
+<a name="version_1_0_28"></a>
+<h3>2001-04-04 (1.0.28)</h3><p><ol class='lessindent'>
+<li>Added limited support for transactions. At this point, transactions
+ will do table locking on the GDBM backend. There is no support (yet)
+ for rollback or atomic commit.</li>
+<li>Added special column names ROWID, OID, and _ROWID_ that refer to the
+ unique random integer key associated with every row of every table.</li>
+<li>Additional tests added to the regression suite to cover the new ROWID
+ feature and the TCL interface bugs mentioned below.</li>
+<li>Changes to the <a href="lemon.html">Lemon parser generator</a> to help it work better when
+ compiled using MSVC.</li>
+<li>Bug fixes in the TCL interface identified by Oleg Oleinick.</li>
+
+</ol></p>
+<a name="version_1_0_27"></a>
+<h3>2001-03-20 (1.0.27)</h3><p><ol class='lessindent'>
+<li>When doing DELETE and UPDATE, the library used to write the record
+ numbers of records to be deleted or updated into a temporary file.
+ This is changed so that the record numbers are held in memory.</li>
+<li>The DELETE command without a WHILE clause just removes the database
+ files from the disk, rather than going through and deleting record
+ by record.</li>
+
+</ol></p>
+<a name="version_1_0_26"></a>
+<h3>2001-03-20 (1.0.26)</h3><p><ol class='lessindent'>
+<li>A serious bug fixed on Windows. Windows users should upgrade.
+ No impact to Unix.</li>
+
+</ol></p>
+<a name="version_1_0_25"></a>
+<h3>2001-03-15 (1.0.25)</h3><p><ol class='lessindent'>
+<li>Modify the test scripts to identify tests that depend on system
+ load and processor speed and
+ to warn the user that a failure of one of those (rare) tests does
+ not necessarily mean the library is malfunctioning. No changes to
+ code.
+ </li>
+
+</ol></p>
+<a name="version_1_0_24"></a>
+<h3>2001-03-14 (1.0.24)</h3><p><ol class='lessindent'>
+<li>Fix a bug which was causing
+ the UPDATE command to fail on systems where "malloc(0)" returns
+ NULL. The problem does not appear on Windows, Linux, or HPUX but does
+ cause the library to fail on QNX.
+ </li>
+
+</ol></p>
+<a name="version_1_0_23"></a>
+<h3>2001-02-20 (1.0.23)</h3><p><ol class='lessindent'>
+<li>An unrelated (and minor) bug from Mark Muranwski fixed. The algorithm
+ for figuring out where to put temporary files for a "memory:" database
+ was not working quite right.
+ </li>
+
+</ol></p>
+<a name="version_1_0_22"></a>
+<h3>2001-02-19 (1.0.22)</h3><p><ol class='lessindent'>
+<li>The previous fix was not quite right. This one seems to work better.
+ </li>
+
+</ol></p>
+<a name="version_1_0_21"></a>
+<h3>2001-02-19 (1.0.21)</h3><p><ol class='lessindent'>
+<li>The UPDATE statement was not working when the WHERE clause contained
+ some terms that could be satisfied using indices and other terms that
+ could not. Fixed.</li>
+
+</ol></p>
+<a name="version_1_0_20"></a>
+<h3>2001-02-11 (1.0.20)</h3><p><ol class='lessindent'>
+<li>Merge development changes into the main trunk. Future work toward
+ using a BTree file structure will use a separate CVS source tree. This
+ CVS tree will continue to support the GDBM version of SQLite only.</li>
+
+</ol></p>
+<a name="version_1_0_19"></a>
+<h3>2001-02-06 (1.0.19)</h3><p><ol class='lessindent'>
+<li>Fix a strange (but valid) C declaration that was causing problems
+ for QNX. No logical changes.</li>
+
+</ol></p>
+<a name="version_1_0_18"></a>
+<h3>2001-01-04 (1.0.18)</h3><p><ol class='lessindent'>
+<li>Print the offending SQL statement when an error occurs.</li>
+<li>Do not require commas between constraints in CREATE TABLE statements.</li>
+<li>Added the "-echo" option to the shell.</li>
+<li>Changes to comments.</li>
+
+</ol></p>
+<a name="version_1_0_17"></a>
+<h3>2000-12-10 (1.0.17)</h3><p><ol class='lessindent'>
+<li>Rewrote <b>sqlite_complete()</b> to make it faster.</li>
+<li>Minor tweaks to other code to make it run a little faster.</li>
+<li>Added new tests for <b>sqlite_complete()</b> and for memory leaks.</li>
+
+</ol></p>
+<a name="version_1_0_16"></a>
+<h3>2000-11-28 (1.0.16)</h3><p><ol class='lessindent'>
+<li>Documentation updates. Mostly fixing of typos and spelling errors.</li>
+
+</ol></p>
+<a name="version_1_0_15"></a>
+<h3>2000-10-23 (1.0.15)</h3><p><ol class='lessindent'>
+<li>Documentation updates</li>
+<li>Some sanity checking code was removed from the inner loop of vdbe.c
+ to help the library to run a little faster. The code is only
+ removed if you compile with -DNDEBUG.</li>
+
+</ol></p>
+<a name="version_1_0_14"></a>
+<h3>2000-10-19 (1.0.14)</h3><p><ol class='lessindent'>
+<li>Added a "memory:" backend driver that stores its database in an
+ in-memory hash table.</li>
+
+</ol></p>
+<a name="version_1_0_13"></a>
+<h3>2000-10-19 (1.0.13)</h3><p><ol class='lessindent'>
+<li>Break out the GDBM driver into a separate file in anticipation
+ to added new drivers.</li>
+<li>Allow the name of a database to be prefixed by the driver type.
+ For now, the only driver type is "gdbm:".</li>
+
+</ol></p>
+<a name="version_1_0_12"></a>
+<h3>2000-10-17 (1.0.12)</h3><p><ol class='lessindent'>
+<li>Fixed an off-by-one error that was causing a coredump in
+ the '%q' format directive of the new
+ <b>sqlite_..._printf()</b> routines.</li>
+<li>Added the <b>sqlite_interrupt()</b> interface.</li>
+<li>In the shell, <b>sqlite_interrupt()</b> is invoked when the
+ user presses Control-C</li>
+<li>Fixed some instances where <b>sqlite_exec()</b> was
+ returning the wrong error code.</li>
+
+</ol></p>
+<a name="version_1_0_10"></a>
+<h3>2000-10-11 (1.0.10)</h3><p><ol class='lessindent'>
+<li>Added notes on how to compile for Windows95/98.</li>
+<li>Removed a few variables that were not being used. Etc.</li>
+
+</ol></p>
+<a name="version_1_0_9"></a>
+<h3>2000-10-09 (1.0.9)</h3><p><ol class='lessindent'>
+<li>Added the <b>sqlite_..._printf()</b> interface routines.</li>
+<li>Modified the <b>sqlite</b> shell program to use the new interface
+ routines.</li>
+<li>Modified the <b>sqlite</b> shell program to print the schema for
+ the built-in SQLITE_MASTER table, if explicitly requested.</li>
+
+</ol></p>
+<a name="version_1_0_8"></a>
+<h3>2000-09-30 (1.0.8)</h3><p><ol class='lessindent'>
+<li>Begin writing documentation on the TCL interface.</li>
+
+</ol></p>
+<h3>2000-09-29 (Not Released)</h3><p><ol class='lessindent'>
+<li>Added the <b>sqlite_get_table()</b> API</li>
+<li>Updated the documentation for due to the above change.</li>
+<li>Modified the <b>sqlite</b> shell to make use of the new
+ sqlite_get_table() API in order to print a list of tables
+ in multiple columns, similar to the way "ls" prints filenames.</li>
+<li>Modified the <b>sqlite</b> shell to print a semicolon at the
+ end of each CREATE statement in the output of the ".schema" command.</li>
+
+</ol></p>
+<h3>2000-09-21 (Not Released)</h3><p><ol class='lessindent'>
+<li>Change the tclsqlite "eval" method to return a list of results if
+ no callback script is specified.</li>
+<li>Change tclsqlite.c to use the Tcl_Obj interface</li>
+<li>Add tclsqlite.c to the libsqlite.a library</li>
+
+</ol></p>
+<a name="version_1_0_5"></a>
+<h3>2000-09-14 (1.0.5)</h3><p><ol class='lessindent'>
+<li>Changed the print format for floating point values from "%g" to "%.15g".
+ </li>
+<li>Changed the comparison function so that numbers in exponential notation
+ (ex: 1.234e+05) sort in numerical order.</li>
+
+</ol></p>
+<a name="version_1_0_4"></a>
+<h3>2000-08-28 (1.0.4)</h3><p><ol class='lessindent'>
+<li>Added functions <b>length()</b> and <b>substr()</b>.</li>
+<li>Fix a bug in the <b>sqlite</b> shell program that was causing
+ a coredump when the output mode was "column" and the first row
+ of data contained a NULL.</li>
+
+</ol></p>
+<a name="version_1_0_3"></a>
+<h3>2000-08-22 (1.0.3)</h3><p><ol class='lessindent'>
+<li>In the sqlite shell, print the "Database opened READ ONLY" message
+ to stderr instead of stdout.</li>
+<li>In the sqlite shell, now print the version number on initial startup.</li>
+<li>Add the <b>sqlite_version&#91;&#93;</b> string constant to the library</li>
+<li>Makefile updates</li>
+<li>Bug fix: incorrect VDBE code was being generated for the following
+ circumstance: a query on an indexed table containing a WHERE clause with
+ an IN operator that had a subquery on its right-hand side.</li>
+
+</ol></p>
+<a name="version_1_0_1"></a>
+<h3>2000-08-18 (1.0.1)</h3><p><ol class='lessindent'>
+<li>Fix a bug in the configure script.</li>
+<li>Minor revisions to the website.</li>
+
+</ol></p>
+<a name="version_1_0"></a>
+<h3>2000-08-17 (1.0)</h3><p><ol class='lessindent'>
+<li>Change the <b>sqlite</b> program so that it can read
+ databases for which it lacks write permission. (It used to
+ refuse all access if it could not write.)</li>
+
+</ol></p>
+<h3>2000-08-09</h3><p><ol class='lessindent'>
+<li>Treat carriage returns as white space.</li>
+
+</ol></p>
+<h3>2000-08-08</h3><p><ol class='lessindent'>
+<li>Added pattern matching to the ".table" command in the "sqlite"
+command shell.</li>
+
+</ol></p>
+<h3>2000-08-04</h3><p><ol class='lessindent'>
+<li>Documentation updates</li>
+<li>Added "busy" and "timeout" methods to the Tcl interface</li>
+
+</ol></p>
+<h3>2000-08-03</h3><p><ol class='lessindent'>
+<li>File format version number was being stored in sqlite_master.tcl
+ multiple times. This was harmless, but unnecessary. It is now fixed.</li>
+
+</ol></p>
+<h3>2000-08-02</h3><p><ol class='lessindent'>
+<li>The file format for indices was changed slightly in order to work
+ around an inefficiency that can sometimes come up with GDBM when
+ there are large indices having many entries with the same key.
+ <font color="red">** Incompatible Change **</font></li>
+
+</ol></p>
+<h3>2000-08-01</h3><p><ol class='lessindent'>
+<li>The parser's stack was overflowing on a very long UPDATE statement.
+ This is now fixed.</li>
+
+</ol></p>
+<h3>2000-07-31</h3><p><ol class='lessindent'>
+<li>Finish the <a href="vdbe.html">VDBE tutorial</a>.</li>
+<li>Added documentation on compiling to WinNT.</li>
+<li>Fix a configuration program for WinNT.</li>
+<li>Fix a configuration problem for HPUX.</li>
+
+</ol></p>
+<h3>2000-07-29</h3><p><ol class='lessindent'>
+<li>Better labels on column names of the result.</li>
+
+</ol></p>
+<h3>2000-07-28</h3><p><ol class='lessindent'>
+<li>Added the <b>sqlite_busy_handler()</b>
+ and <b>sqlite_busy_timeout()</b> interface.</li>
+
+</ol></p>
+<h3>2000-06-23</h3><p><ol class='lessindent'>
+<li>Begin writing the <a href="vdbe.html">VDBE tutorial</a>.</li>
+
+</ol></p>
+<h3>2000-06-21</h3><p><ol class='lessindent'>
+<li>Clean up comments and variable names. Changes to documentation.
+ No functional changes to the code.</li>
+
+</ol></p>
+<h3>2000-06-19</h3><p><ol class='lessindent'>
+<li>Column names in UPDATE statements were case sensitive.
+ This mistake has now been fixed.</li>
+
+</ol></p>
+<h3>2000-06-18</h3><p><ol class='lessindent'>
+<li>Added the concatenate string operator (||)</li>
+
+</ol></p>
+<h3>2000-06-12</h3><p><ol class='lessindent'>
+<li>Added the fcnt() function to the SQL interpreter. The fcnt() function
+ returns the number of database "Fetch" operations that have occurred.
+ This function is designed for use in test scripts to verify that
+ queries are efficient and appropriately optimized. Fcnt() has no other
+ useful purpose, as far as I know.</li>
+<li>Added a bunch more tests that take advantage of the new fcnt() function.
+ The new tests did not uncover any new problems.</li>
+
+</ol></p>
+<h3>2000-06-08</h3><p><ol class='lessindent'>
+<li>Added lots of new test cases</li>
+<li>Fix a few bugs discovered while adding test cases</li>
+<li>Begin adding lots of new documentation</li>
+
+</ol></p>
+<h3>2000-06-06</h3><p><ol class='lessindent'>
+<li>Added compound select operators: <B>UNION</b>, <b>UNION ALL</B>,
+<b>INTERSECT</b>, and <b>EXCEPT</b></li>
+<li>Added support for using <b>(SELECT ...)</b> within expressions</li>
+<li>Added support for <b>IN</b> and <b>BETWEEN</b> operators</li>
+<li>Added support for <b>GROUP BY</b> and <b>HAVING</b></li>
+<li>NULL values are now reported to the callback as a NULL pointer
+ rather than an empty string.</li>
+
+</ol></p>
+<h3>2000-06-03</h3><p><ol class='lessindent'>
+<li>Added support for default values on columns of a table.</li>
+<li>Improved test coverage. Fixed a few obscure bugs found by the
+improved tests.</li>
+
+</ol></p>
+<h3>2000-06-02</h3><p><ol class='lessindent'>
+<li>All database files to be modified by an UPDATE, INSERT or DELETE are
+now locked before any changes are made to any files.
+This makes it safe (I think) to access
+the same database simultaneously from multiple processes.</li>
+<li>The code appears stable so we are now calling it "beta".</li>
+
+</ol></p>
+<h3>2000-06-01</h3><p><ol class='lessindent'>
+<li>Better support for file locking so that two or more processes
+(or threads)
+can access the same database simultaneously. More work needed in
+this area, though.</li>
+
+</ol></p>
+<h3>2000-05-31</h3><p><ol class='lessindent'>
+<li>Added support for aggregate functions (Ex: <b>COUNT(*)</b>, <b>MIN(...)</b>)
+to the SELECT statement.</li>
+<li>Added support for <B>SELECT DISTINCT ...</B></li>
+
+</ol></p>
+<h3>2000-05-30</h3><p><ol class='lessindent'>
+<li>Added the <b>LIKE</b> operator.</li>
+<li>Added a <b>GLOB</b> operator: similar to <B>LIKE</B>
+but it uses Unix shell globbing wildcards instead of the '%'
+and '_' wildcards of SQL.</li>
+<li>Added the <B>COPY</b> command patterned after
+<a href="http://www.postgresql.org/">PostgreSQL</a> so that SQLite
+can now read the output of the <b>pg_dump</b> database dump utility
+of PostgreSQL.</li>
+<li>Added a <B>VACUUM</B> command that calls the
+<b>gdbm_reorganize()</b> function on the underlying database
+files.</li>
+<li>And many, many bug fixes...</li>
+
+</ol></p>
+<h3>2000-05-29</h3><p><ol class='lessindent'>
+<li>Initial Public Release of Alpha code</li>
+
+</ol></p>
+
+</dl>
+
+