diff options
Diffstat (limited to 'www/changes.html')
-rw-r--r-- | www/changes.html | 7085 |
1 files changed, 7085 insertions, 0 deletions
diff --git a/www/changes.html b/www/changes.html new file mode 100644 index 0000000..b7f5e21 --- /dev/null +++ b/www/changes.html @@ -0,0 +1,7085 @@ +<!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="https://www.sqlite.org/src/timeline"> +https://www.sqlite.org/src/timeline</a> and +<a href="https://www.sqlite.org/src/timeline?t=release"> +https://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_45_1"></a> +<h3>2024-01-30 (3.45.1)</h3><p><ol class='lessindent'> +<li> Restore the <a href="json1.html#jblobbug">JSON BLOB input bug</a>, and promise to support the anomaly in + subsequent releases, for backward compatibility. +<li> Fix the <a href="pragma.html#pragma_integrity_check">PRAGMA integrity_check</a> command so that it works on read-only + databases that contain FTS3 and FTS5 tables. This resolves an issue + introduced in <a href="#version_3_44_0">version 3.44.0</a> but was undiscovered until after the 3.45.0 release. +<li> Fix issues associated with processing corrupt <a href="json1.html#jsonbx">JSONB</a> inputs: + <ol type="a"> + <li> Prevent exponential runtime when converting a corrupt JSONB into text. + <li> Fix a possible read of one byte past the end of the JSONB blob when converting + a corrupt JSONB into text. + <li> Enhanced testing using <a href="testing.html#dbsqlfuzz">jfuzz</a> to prevent any future JSONB problems such + as the above. + </ol> +<li> Fix a long-standing bug in which a read of a few bytes past the end of a + memory-mapped segment might occur when accessing a craftily corrupted database + using <a href="pragma.html#pragma_mmap_size">memory-mapped database</a>. +<li> Fix a long-standing bug in which a NULL pointer dereference might occur in + the <a href="opcode.html">bytecode engine</a> due to incorrect bytecode being generated for a class + of SQL statements that are deliberately designed to stress the query planner + but which are otherwise pointless. + +<p><b>Hashes:</b> +<li>SQLITE_SOURCE_ID: 2024-01-30 16:01:20 e876e51a0ed5c5b3126f52e532044363a014bc594cfefa87ffb5b82257cc467a +<li>SHA3-256 for sqlite3.c: 0474604df9e1b69a5544295dd046aad954749279780d557da80f44b958100295 + +</ol></p> +<a name="version_3_45_0"></a> +<h3>2024-01-15 (3.45.0)</h3><p><ol class='lessindent'> +<li> Added the <a href="c3ref/c_deterministic.html#sqliteresultsubtype">SQLITE_RESULT_SUBTYPE</a> property for + <a href="appfunc.html">application-defined SQL functions</a>. + All application defined SQL functions that invokes + <a href="c3ref/result_subtype.html">sqlite3_result_subtype()</a> must be registered with this new property. + Failure to do so might cause the call to sqlite3_result_subtype() to + behave as a no-op. Compile with <a href="compile.html#strict_subtype">-DSQLITE_STRICT_SUBTYPE=1</a> to cause an + SQL error to be raised if a function that is not <a href="c3ref/c_deterministic.html#sqliteresultsubtype">SQLITE_RESULT_SUBTYPE</a> + tries invokes <a href="c3ref/result_subtype.html">sqlite3_result_subtype()</a>. The use of <a href="compile.html#strict_subtype">-DSQLITE_STRICT_SUBTYPE=1</a> + is a recommended compile-time option for every application that makes + use of subtypes. +<li> Enhancements to the <a href="json1.html">JSON SQL functions</a>: + <ol type="a"> + <li> All JSON functions are rewritten to use a new internal parse tree + format called <a href="json1.html#jsonbx">JSONB</a>. The new parse-tree format is serializable + and hence can be stored in the database to avoid unnecessary re-parsing + whenever the JSON value is used. + <li> New versions of JSON-generating functions generate binary JSONB instead + of JSON text. + <li> The <a href="json1.html#jvalid">json_valid()</a> function adds an optional second argument that + specifies what it means for the first argument to be "well-formed". + </ol> +<li> Add the <a href="fts5.html#the_tokendata_option">FTS5 tokendata option</a> to the <a href="fts5.html">FTS5</a> virtual table. +<li> The <a href="compile.html#direct_overflow_read">SQLITE_DIRECT_OVERFLOW_READ</a> optimization is now enabled by default. + Disable it at compile-time using -DSQLITE_DIRECT_OVERFLOW_READ=0. +<li> Query planner improvements: + <ol type="a"> + <li> Do not allow the transitive constraint optimization to trick the + query planner into using a range constraint when a better equality + constraint is available. + (<a href="https://sqlite.org/forum/forumpost/2568d1f6e6">Forum post 2568d1f6e6</a>.) + <li> The query planner now does a better job of disregarding + indexes that <a href="lang_analyze.html">ANALYZE</a> identifies as low-quality. + (<a href="https://sqlite.org/forum/forumpost/6f0958b03b">Forum post 6f0958b03b</a>.) + </ol> +<li> Increase the default value for <a href="limits.html#max_page_count">SQLITE_MAX_PAGE_COUNT</a> from 1073741824 to + 4294967294. +<li> Enhancements to the <a href="cli.html">CLI</a>: + <ol type="a"> + <li> Improvements to the display of UTF-8 content on Windows + <li> Automatically detect playback of ".dump" scripts and make appropriate + changes to settings such as ".dbconfig defensive off" and + ".dbconfig dqs_dll on". + </ol> +<p><b>Hashes:</b> +<li>SQLITE_SOURCE_ID: 2024-01-15 17:01:13 1066602b2b1976fe58b5150777cced894af17c803e068f5918390d6915b46e1d +<li>SHA3-256 for sqlite3.c: f56d8e5e8c61d87b957f1cc60b3042c134d7bc0ca3aba002e6999e8f0af310a3 + +</ol></p> +<a name="version_3_44_2"></a> +<h3>2023-11-24 (3.44.2)</h3><p><ol class='lessindent'> +<li> Fix a mistake in the <a href="cli.html">CLI</a> that was introduced by the fix (item 15 above) in 3.44.1. +<li> Fix a problem in FTS5 that was discovered during internal fuzz testing only + minutes after the 3.44.1 release was tagged. +<li> Fix incomplete assert() statements that the fuzzer discovered the day after + the previous release. +<li> Fix a couple of harmless compiler warnings that appeared in debug builds with GCC 16. +<p><b>Hashes:</b> +<li>SQLITE_SOURCE_ID: 2023-11-24 11:41:44 ebead0e7230cd33bcec9f95d2183069565b9e709bf745c9b5db65cc0cbf92c0f +<li>SHA3-256 for sqlite3.c: bd70b012e2d1b3efa132d905224cd0ab476a69b892f8c6b21135756ec7ffbb13 + +</ol></p> +<a name="version_3_44_1"></a> +<h3>2023-11-22 (3.44.1)</h3><p><ol class='lessindent'> +<li> Change the <a href="cli.html">CLI</a> so that it uses UTF-16 for console I/O on Windows. This + enables proper display of unicode text on old Windows7 machines. +<li> Other obscure bug fixes. +<p><b>Hashes:</b> +<li>SQLITE_SOURCE_ID: 2023-11-22 14:18:12 d295f48e8f367b066b881780c98bdf980a1d550397d5ba0b0e49842c95b3e8b4 +<li>SHA3-256 for sqlite3.c: e359dc502a73f3a8ad8e976a51231134d25cb93ad557a724dd92fe0c5897113a + +</ol></p> +<a name="version_3_44_0"></a> +<h3>2023-11-01 (3.44.0)</h3><p><ol class='lessindent'> +<li> <a href="lang_aggfunc.html">Aggregate functions</a> can now include an ORDER BY clause after their last + parameter. The arguments to the function are processed in the order + specified. This can be important for functions like + <a href="lang_aggfunc.html#group_concat">string_agg()</a> and <a href="json1.html#jgrouparray">json_group_array()</a>. +<li> Add support for the <a href="lang_corefunc.html#concat">concat()</a> and <a href="lang_corefunc.html#concat_ws">concat_ws()</a> scalar SQL functions, + compatible with PostgreSQL, SQLServer, and MySQL. +<li> Add support for the <a href="lang_aggfunc.html#group_concat">string_agg()</a> aggregate SQL function, compatible + with PostgreSQL and SQLServer. +<li> New conversion letters on the <a href="lang_datefunc.html#strftm">strftime() SQL function</a>: %e %F %I %k %l %p %P %R %T %u +<li> Add new C-language APIs: <a href="c3ref/get_clientdata.html">sqlite3_get_clientdata()</a> and <a href="c3ref/get_clientdata.html">sqlite3_set_clientdata()</a>. +<li> Many errors associated with CREATE TABLE are now raised when the CREATE TABLE statement + itself is run, rather than being deferred until the first time the table is actually + used. +<li> The <a href="pragma.html#pragma_integrity_check">PRAGMA integrity_check</a> command now verifies the consistency of the + content in various built-in <a href="vtab.html">virtual tables</a> using the new <a href="vtab.html#xintegrity">xIntegrity method</a>. + This works for the <a href="fts3.html">FTS3</a>, <a href="fts3.html#fts4">FTS4</a>, <a href="fts5.html">FTS5</a>, <a href="rtree.html">RTREE</a>, and <a href="geopoly.html">GEOPOLY</a> extensions. +<li> The <a href="c3ref/c_dbconfig_defensive.html#sqlitedbconfigdefensive">SQLITE_DBCONFIG_DEFENSIVE</a> setting now prevents <a href="pragma.html#pragma_writable_schema">PRAGMA writable_schema</a> + from being turned on. Previously writable_schema could be turned on, but would + not actually allow the schema to be writable. Now it simply cannot be turned on. +<li> Tag the built-in <a href="fts3.html">FTS3</a>, <a href="fts3.html#fts4">FTS4</a>, <a href="fts5.html">FTS5</a>, <a href="rtree.html">RTREE</a>, and <a href="geopoly.html">GEOPOLY</a> virtual tables as + <a href="c3ref/c_vtab_constraint_support.html#sqlitevtabinnocuous">SQLITE_VTAB_INNOCUOUS</a> so that they can be used inside of triggers in + high-security deployments. +<li> The <a href="pragma.html#pragma_case_sensitive_like">PRAGMA case_sensitive_like</a> statement is deprecated, as its use when the + schema contains LIKE operators can lead to reports of database corruption + by <a href="pragma.html#pragma_integrity_check">PRAGMA integrity_check</a>. +<li> <a href="compile.html#use_seh">SQLITE_USE_SEH</a> (Structured Exception Handling) is now enabled by default whenever + SQLite is built using the Microsoft C compiler. It can be disabled using + -DSQLITE_USE_SEH=0 +<li> Query planner optimizations: + <ol type="a"> + <li> In partial index scans, if the WHERE clause implies a constant value for a table + column, replace occurrences of that table column with the constant. This + increases the likelihood of the partial index being a covering index. + <li> Disable the view-scan optimization (added in <a href="#version_3_42_0">version 3.42.0</a> - item 1c) + as it was causing multiple performance regressions. In its place, reduce + the estimated row count for DISTINCT subqueries by a factor of 8. + </ol> +<li> SQLite now performs run-time detection of whether or not the underlying hardware + supports "long double" with precision greater than "double" and uses appropriate + floating-point routines depending on what it discovered. +<li> The <a href="cli.html">CLI</a> for Windows now defaults to using UTF-8 for both input + and output on platforms that support it. The --no-utf8 option is available + to disable UTF8 support. +<p><b>Hashes:</b> +<li>SQLITE_SOURCE_ID: 2023-11-01 11:23:50 17129ba1ff7f0daf37100ee82d507aef7827cf38de1866e2633096ae6ad8130 +<li>SHA3-256 for sqlite3.c: d9e6530096136067644b1cb2057b3b0fa51070df99ec61971f73c9ba6aa9a36e + +</ol></p> +<a name="version_3_43_2"></a> +<h3>2023-10-10 (3.43.2)</h3><p><ol class='lessindent'> +<li> Fix a couple of obscure UAF errors and an obscure memory leak. +<li> Omit the use of the sprintf() function from the standard library + in the <a href="cli.html">CLI</a>, as this now generates warnings on some platforms. +<li> Avoid conversion of a double into unsigned long long integer, as + some platforms do not do such conversions correctly. +<p><b>Hashes:</b> +<li>SQLITE_SOURCE_ID: 2023-10-10 12:14:04 4310099cce5a487035fa535dd3002c59ac7f1d1bec68d7cf317fd3e769484790 +<li>SHA3-256 for sqlite3.c: e17a3dc69330bd109256fb5a6e2b3ce8fbec48892a800389eb7c0f8856703161 + +</ol></p> +<a name="version_3_43_1"></a> +<h3>2023-09-11 (3.43.1)</h3><p><ol class='lessindent'> +<li> Fix a regression in the way that the <a href="lang_aggfunc.html#sumunc">sum()</a>, <a href="lang_aggfunc.html#avg">avg()</a>, and <a href="lang_aggfunc.html#sumunc">total()</a> + aggregate functions handle infinities. +<li> Fix a bug in the <a href="json1.html#jarraylen">json_array_length()</a> function that occurs when the + argument comes directly from <a href="json1.html#jrm">json_remove()</a>. +<li> Fix the omit-unused-subquery-columns optimization (introduced in + in version 3.42.0) so that it works correctly if the subquery is a + compound where one arm is DISTINCT and the other is not. +<li> Other minor fixes. +<p><b>Hashes:</b> +<li>SQLITE_SOURCE_ID: 2023-09-11 12:01:27 2d3a40c05c49e1a49264912b1a05bc2143ac0e7c3df588276ce80a4cbc9bd1b0 +<li>SHA3-256 for sqlite3.c: 391af0a4755e31ae8b29776a4a060b678823ffe4c4db558567567c688a578589 + +</ol></p> +<a name="version_3_43_0"></a> +<h3>2023-08-24 (3.43.0)</h3><p><ol class='lessindent'> +<li> Add support for <a href="fts5.html#clssdeltab">Contentless-Delete FTS5 Indexes</a>. This is a variety + of <a href="fts5.html">FTS5</a> full-text search index that omits storing the content that is being indexed + while also allowing records to be deleted. +<li> Enhancements to the <a href="lang_datefunc.html">date and time functions</a>: + <ol type="a"> + <li> Added new <a href="lang_datefunc.html#tmshf">time shift modifiers</a> of the form <tt>±YYYY-MM-DD HH:MM:SS.SSS</tt>. + <li> Added the <a href="lang_datefunc.html#tmdif">timediff() SQL function</a>. + </ol> +<li> Added the <a href="lang_corefunc.html#octet_length">octet_length(X)</a> SQL function. +<li> Added the <a href="c3ref/stmt_explain.html">sqlite3_stmt_explain()</a> API. +<li> Query planner enhancements: + <ol type="a"> + <li> Generalize the LEFT JOIN strength reduction optimization so that it works + for RIGHT and FULL JOINs as well. Rename it to + <a href="optoverview.html#leftjoinreduction">OUTER JOIN strength reduction</a>. + <li> Enhance the theorem prover in the <a href="optoverview.html#leftjoinreduction">OUTER JOIN strength reduction</a> optimization + so that it returns fewer false-negatives. + </ol> +<li> Enhancements to the <a href="floatingpoint.html#decext">decimal extension</a>: + <ol type="a"> + <li> New function decimal_pow2(N) returns the N-th power of 2 for integer N + between -20000 and +20000. + <li> New function decimal_exp(X) works like decimal(X) except that it returns + the result in exponential notation - with a "e+NN" at the end. + <li> If X is a floating-point value, then the decimal(X) function now does a full + expansion of that value into its exact decimal equivalent. + </ol> +<li> Performance enhancements to <a href="json1.html">JSON processing</a> results in a 2x performance + improvement for some kinds of processing on large JSON strings. +<li> New makefile target "verify-source" checks to ensure that there are no + unintentional changes in the source tree. (Works for + <a href="getthecode.html">canonical source code</a> only - + not for <a href="amalgamation.html#amalgtarball">precompiled amalgamation tarballs</a>.) +<li> Added the <a href="compile.html#use_seh">SQLITE_USE_SEH</a> compile-time option that enables Structured + Exception Handling on Windows while working with the memory-mapped + <a href="walformat.html#shm">shm file</a> that is part of <a href="wal.html">WAL mode</a> processing. This option is enabled + by default when building on Windows using Makefile.msc. +<li> The <a href="vfs.html">VFS</a> for unix now assumes that the nanosleep() system call is + available unless compiled with -DHAVE_NANOSLEEP=0. +<p><b>Hashes:</b> +<li>SQLITE_SOURCE_ID: 2023-08-24 12:36:59 0f80b798b3f4b81a7bb4233c58294edd0f1156f36b6ecf5ab8e83631d468778c +<li>SHA3-256 for sqlite3.c: a6fc5379891d77b69a7d324cd24a437307af66cfdc3fef5dfceec3c82c8d4078 + +</ol></p> +<a name="version_3_42_0"></a> +<h3>2023-05-16 (3.42.0)</h3><p><ol class='lessindent'> +<li> Add the <a href="fts5.html#the_secure_delete_configuration_option">FTS5 secure-delete command</a>. This option causes all forensic traces + to be removed from the FTS5 inverted index when content is deleted. +<li> Enhance the <a href="json1.html">JSON SQL functions</a> to support <a href="json1.html#json5">JSON5 extensions</a>. +<li> The <a href="c3ref/c_config_covering_index_scan.html#sqliteconfiglog">SQLITE_CONFIG_LOG</a> and <a href="c3ref/c_config_covering_index_scan.html#sqliteconfigpcachehdrsz">SQLITE_CONFIG_PCACHE_HDRSZ</a> calls to <a href="c3ref/config.html">sqlite3_config()</a> + are now allowed to occur <i>after</i> <a href="c3ref/initialize.html">sqlite3_initialize()</a>. +<li> New <a href="c3ref/db_config.html">sqlite3_db_config()</a> options: <a href="c3ref/c_dbconfig_defensive.html#sqlitedbconfigstmtscanstatus">SQLITE_DBCONFIG_STMT_SCANSTATUS</a> and + <a href="c3ref/c_dbconfig_defensive.html#sqlitedbconfigreversescanorder">SQLITE_DBCONFIG_REVERSE_SCANORDER</a>. +<li> Query planner improvements: + <ol type="a"> + <li> Enable the "count-of-view" optimization by default. + <li> Avoid computing unused columns in subqueries. + <li> Improvements to the <a href="optoverview.html#pushdown">push-down optimization</a>. + </ol> +<li> Enhancements to the <a href="cli.html">CLI</a>: + <ol type="a"> + <li> Add the --unsafe-testing command-line option. Without this option, some + dot-commands (ex: ".testctrl") are now disabled because those commands + that are intended for testing only and can cause malfunctions if misused. + <li> Allow commands ".log on" and ".log off", even in --safe mode. + <li> "--" as a command-line argument means all subsequent arguments that + start with "-" are interpreted as normal non-option argument. + <li> Magic parameters ":inf" and ":nan" bind to floating point literals + Infinity and NaN, respectively. + <li> The --utf8 command-line option omits all translation to or from + MBCS on the Windows console for interactive sessions, and sets + the console code page for UTF-8 I/O during such sessions. + The --utf8 option is a no-op on all other platforms. + </ol> +<li> Add the ability for <a href="appfunc.html">application-defined SQL functions</a> to have the same name + as join keywords: CROSS, FULL, INNER, LEFT, NATURAL, OUTER, or RIGHT. +<li> Enhancements to <a href="pragma.html#pragma_integrity_check">PRAGMA integrity_check</a>: + <ol type="a"> + <li> Detect and raise an error when a NaN value is stored in a NOT NULL column. + <li> Improved error message output identifies the root page of a b-tree when + an error is found within a b-tree. + </ol> +<li> Allow the <a href="sessionintro.html">session extension</a> to be configured to capture changes from + tables that lack an explicit ROWID. +<li> Added the <a href="lang_datefunc.html#subsec">subsecond modifier</a> to the <a href="lang_datefunc.html">date and time functions</a>. +<li> Negative values passed into <a href="c3ref/sleep.html">sqlite3_sleep()</a> are henceforth interpreted as 0. +<li> The maximum recursion depth for JSON arrays and objects is lowered from 2000 + to 1000. +<li> Extended the <a href="printf.html">built-in printf()</a> function so the <a href="printf.html#comma">comma option</a> now works with + floating-point conversions in addition to integer conversions. +<li> Miscellaneous bug fixes and performance optimizations +<p><b>Hashes:</b> +<li>SQLITE_SOURCE_ID: 2023-05-16 12:36:15 831d0fb2836b71c9bc51067c49fee4b8f18047814f2ff22d817d25195cf350b0 +<li>SHA3-256 for sqlite3.c: 6aa3fadf000000625353bbaa1e83af114c40c240a0aa5a2c1c2aabcfc28d4f92 + +</ol></p> +<a name="version_3_41_2"></a> +<h3>2023-03-22 (3.41.2)</h3><p><ol class='lessindent'> +<li> Multiple fixes for reads past the end of memory buffers + (NB: <i>reads</i> not <i>writes</i>) in the following circumstances: + <ol type="a"> + <li> When processing a corrupt database file using the non-standard + <a href="compile.html#enable_stat4">SQLITE_ENABLE_STAT4</a> compile-time option. + <li> In the <a href="cli.html">CLI</a> when the <a href="c3ref/errcode.html">sqlite3_error_offset()</a> routine returns an out-of-range value + (see also the fix to sqlite3_error_offset() below). + <li> In the <a href="recovery.html">recovery extension</a>. + <li> In <a href="fts3.html">FTS3</a> when processing a corrupt database file. + </ol> +<li> Fix the <a href="c3ref/errcode.html">sqlite3_error_offset()</a> so that it does not return out-of-range values when + reporting errors associated with <a href="gencol.html">generated columns</a>. +<li> Multiple fixes in the query optimizer for problems that cause incorrect + results for bizarre, fuzzer-generated queries. +<li> Increase the size of the reference counter in the page cache object to 64 bits to + ensure that the counter never overflows. +<li> Fix a performance regression caused by a bug fix in patch release 3.41.1. +<li> Fix a few incorrect assert() statements. +<p><b>Hashes:</b> +<li>SQLITE_SOURCE_ID: 2023-03-22 11:56:21 0d1fc92f94cb6b76bffe3ec34d69cffde2924203304e8ffc4155597af0c191da +<li>SHA3-256 for sqlite3.c: c83f68b7aac1e7d3ed0fcdb9857742f024449e1300bfb3375131a6180b36cf7c + +</ol></p> +<a name="version_3_41_1"></a> +<h3>2023-03-10 (3.41.1)</h3><p><ol class='lessindent'> +<li> Provide compile-time options -DHAVE_LOG2=0 and -DHAVE_LOG10=0 to enable SQLite to be + compiled on systems that omit the standard library functions log2() and log10(), repectively. +<li> Ensure that the datatype for column t1.x in + "<tt>CREATE TABLE t1 AS SELECT CAST(7 AS INT) AS x;</tt>" continues to be INT and is not NUM, + for historical compatibility. +<li> Enhance <a href="pragma.html#pragma_integrity_check">PRAGMA integrity_check</a> to detect when extra bytes appear at the end of an + index record. +<li> Fix various obscure bugs reported by the user community. See the + <a href="https://sqlite.org/src/timeline?from=version-3.41.0&to=version-3.41.1">timeline of changes</a> + for details. + +<p><b>Hashes:</b> +<li>SQLITE_SOURCE_ID: 2023-03-10 12:13:52 20399f3eda5ec249d147ba9e48da6e87f969d7966a9a896764ca437ff7e737ff +<li>SHA3-256 for sqlite3.c: d0d9db8425570f4a57def04fb8f4ac84f5c3e4e71d3d4d10472e3639c5fdf09f + +</ol></p> +<a name="version_3_41_0"></a> +<h3>2023-02-21 (3.41.0)</h3><p><ol class='lessindent'> +<li>Query planner improvements: + <ol type="a"> + <li> Make use of <a href="expridx.html">indexed expressions</a> within an aggregate query that + includes a GROUP BY clause. + <li> The query planner has improved awareness of when an index is + a <a href="queryplanner.html#covidx">covering index</a> and adjusts predicted runtimes accordingly. + <li> The query planner is more aggressive about using <a href="optoverview.html#coroutines">co-routines</a> rather + than materializing subqueries and views. + <li> Queries against the built-in table-valued functions <a href="json1.html#jtree">json_tree()</a> and + <a href="json1.html#jeach">json_each()</a> will now usually treat "ORDER BY rowid" as a no-op. + <li> Enhance the ability of the query planner to use <a href="expridx.html">indexed expressions</a> + even if the expression has been modified by the + <a href="optoverview.html#constprop">constant-propagation optimization</a>. + (See <a href="https://sqlite.org/forum/forumpost/0a539c76db3b9e29">forum thread 0a539c7</a>.) + </ol> +<li>Add the built-in <a href="lang_corefunc.html#unhex">unhex()</a> SQL function. +<li>Add the base64 and base85 application-defined functions as an extension and + include that extension in the <a href="cli.html">CLI</a>. +<li>Add the <a href="c3ref/stmt_scanstatus.html">sqlite3_stmt_scanstatus_v2()</a> interface. (This interface is only + available if SQLite is compiled using <a href="compile.html#enable_stmt_scanstatus">SQLITE_ENABLE_STMT_SCANSTATUS</a>.) +<li>In-memory databases created using <a href="c3ref/deserialize.html">sqlite3_deserialize()</a> now report their + filename as an empty string, not as 'x'. +<li>Changes to the <a href="cli.html">CLI</a>: + <ol type="a"> + <li> Add the new base64() and base85() SQL functions + <li> Enhanced <a href="eqp.html">EXPLAIN QUERY PLAN</a> output using the new <a href="c3ref/stmt_scanstatus.html">sqlite3_stmt_scanstatus_v2()</a> + interface when compiled using <a href="compile.html#enable_stmt_scanstatus">SQLITE_ENABLE_STMT_SCANSTATUS</a>. + <li> The "<tt>.scanstats est</tt>" command provides query planner estimates in profiles. + <li> The continuation prompt indicates if the input is currently inside of a + string literal, identifier literal, comment, trigger definition, etc. + <li> Enhance the --safe command-line option to disallow dangerous SQL functions. + <li> The <a href="quirks.html#dblquote">double-quoted string misfeature</a> is now disabled by default for CLI + builds. Legacy use cases can reenable the misfeature at run-time using + the "<tt>.dbconfig dqs_dml on</tt>" and "<tt>.dbconfig dqs_ddl on</tt>" + commands. + </ol> +<li>Enhance the <a href="pragma.html#pragma_integrity_check">PRAGMA integrity_check</a> command so that it detects when text strings in + a table are equivalent to but not byte-for-byte identical to the same strings in the index. +<li>Enhance the <a href="carray.html">carray table-valued function</a> so that it is able to bind an array of + BLOB objects. +<li>Added the <a href="c3ref/interrupt.html">sqlite3_is_interrupted()</a> interface. +<li>Long-running calls to <a href="c3ref/prepare.html">sqlite3_prepare()</a> and similar now invoke the + <a href="c3ref/progress_handler.html">progress handler callback</a> and react to <a href="c3ref/interrupt.html">sqlite3_interrupt()</a>. +<li>The <a href="c3ref/vtab_in_first.html">sqlite3_vtab_in_first()</a> and <a href="c3ref/vtab_in_first.html">sqlite3_vtab_in_next()</a> functions are enhanced so that + they reliably detect if they are invoked on a parameter that was not selected for + multi-value IN processing using <a href="c3ref/vtab_in.html">sqlite3_vtab_in()</a>. + They return SQLITE_ERROR instead of SQLITE_MISUSE in this case. +<li>The parser now ignores excess parentheses around a subquery on the right-hand side + of an IN operator, so that SQLite now works the same as PostgreSQL in this regard. + Formerly, SQLite treated the subquery as an expression with an implied "LIMIT 1". +<li>Added the <a href="c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlresetcache">SQLITE_FCNTL_RESET_CACHE</a> option to the <a href="c3ref/file_control.html">sqlite3_file_control()</a> API. +<li>Makefile improvements: + <ol type="a"> + <li>The new makefile target "sqlite3r.c" builds an <a href="amalgamation.html">amalgamation</a> that includes + the <a href="recovery.html">recovery extension</a>. + <li>New makefile targets "devtest" and "releasetest" for running a + quick developmental test prior to doing a check-in and for doing a full + release test, respectively. + </ol> +<li>Miscellaneous performance enhancements. +<p><b>Hashes:</b> +<li>SQLITE_SOURCE_ID: 2023-02-21 18:09:37 05941c2a04037fc3ed2ffae11f5d2260706f89431f463518740f72ada350866d +<li>SHA3-256 for sqlite3.c: 02bd9e678460946810801565667fdb8f0c29c78e51240512d2e5bb3dbdee7464 + +</ol></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_encoding.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="https://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"><expr> PRECEDING</a>" and + "<a href="windowfunctions.html#exprrange"><expr> 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_fknoaction.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">"^" 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> → requires <a href="c3ref/bind_blob.html">sqlite3_bind_pointer()</a> to find + the fts5_api pointer. + <li> <a href="carray.html">carray(PTR,N)</a> → requires <a href="c3ref/bind_blob.html">sqlite3_bind_pointer()</a> to set the PTR parameter. + <li> <a href="https://www.sqlite.org/src/file/ext/misc/remember.c">remember(V,PTR)</a> + → requires <a href="c3ref/bind_blob.html">sqlite3_bind_pointer()</a> to set the PTR parameter. + </ol> +<li> Added the <a href="stmt.html">SQLITE_STMT virtual table</a> extension. +<li> Added the <a href="completion.html">COMPLETION extension</a> - designed to suggest + tab-completions for interactive user interfaces. This is a work in progress. + Expect further enhancements in future releases. +<li> Added the <a href="unionvtab.html">UNION virtual table</a> extension. +<li> The built-in <a href="lang_datefunc.html">date and time functions</a> have been enhanced so that they can be + used in <a href="lang_createtable.html#ckconst">CHECK constraints</a>, in <a href="expridx.html">indexes on expressions</a>, and in the WHERE clauses + of <a href="partialindex.html">partial indexes</a>, provided that they do not use the 'now', 'localtime', or + 'utc' keywords. <a href="deterministic.html#dtexception">More information</a>. +<li> Added the <a href="c3ref/prepare.html">sqlite3_prepare_v3()</a> and <a href="c3ref/prepare.html">sqlite3_prepare16_v3()</a> interfaces + with the extra "prepFlags" parameters. +<li> Provide the <a href="c3ref/c_prepare_normalize.html#sqlitepreparepersistent">SQLITE_PREPARE_PERSISTENT</a> flag for <a href="c3ref/prepare.html">sqlite3_prepare_v3()</a> and + use it to limit <a href="malloc.html#lookaside">lookaside memory</a> misuse by <a href="fts3.html">FTS3</a>, <a href="fts5.html">FTS5</a>, and the + <a href="rtree.html">R-Tree extension</a>. +<li> Added the <a href="pragma.html#pragma_secure_delete">PRAGMA secure_delete=FAST</a> command. When secure_delete is + set to FAST, old content is overwritten with zeros as long as that does + not increase the amount of I/O. Deleted content might still persist on + the <a href="fileformat2.html#freelist">free-page list</a> but will be purged from all b-tree pages. +<li> Enhancements to the <a href="cli.html">command-line shell</a>: +<ol type='a'> + <li> Add support for tab-completion using the <a href="completion.html">COMPLETION extension</a>, for + both readline and linenoise. + <li> Add the ".cd" command. + <li> Enhance the "<a href="cli.html#dschema">.schema</a>" command to show the schema of all attached + databases. + <li> Enhance "<a href="cli.html#dtables">.tables</a>" so that it shows the schema names for all attached + if the name is anything other than "main". + <li> The "<a href="cli.html#csv">.import</a>" command ignores an initial UTF-8 BOM. + <li> Added the "--newlines" option to the "<a href="cli.html#dump">.dump</a>" command to cause U+000a and + U+000d characters to be output literally rather than escaped using the + <a href="lang_corefunc.html#replace">replace()</a> function. +</ol> +<li> Query planner enhancements: +<ol type='a'> + <li> When generating individual loops for each ORed term of an OR scan, + move any constant WHERE expressions outside of the loop, as is + done for top-level loops. + <li> The query planner examines the values of bound parameters to help + determine if a partial index is usable. + <li> When deciding between two plans with the same estimated cost, bias + the selection toward the one that does not use the sorter. + <li> Evaluate WHERE clause constraints involving correlated subqueries + last, in the hope that they never have be evaluated at all. + <li> Do not use the <a href="optoverview.html#flattening">flattening optimization</a> for a sub-query on the RHS + of a LEFT JOIN if that subquery reads data from a <a href="vtab.html">virtual table</a> as + doing so prevents the query planner from creating <a href="optoverview.html#autoindex">automatic indexes</a> + on the results of the sub-query, which can slow down the query. +</ol> +<li> Add <a href="c3ref/c_stmtstatus_counter.html#sqlitestmtstatusreprepare">SQLITE_STMTSTATUS_REPREPARE</a>, <a href="c3ref/c_stmtstatus_counter.html#sqlitestmtstatusrun">SQLITE_STMTSTATUS_RUN</a>, + and <a href="c3ref/c_stmtstatus_counter.html#sqlitestmtstatusmemused">SQLITE_STMTSTATUS_MEMUSED</a> options for the + <a href="c3ref/stmt_status.html">sqlite3_stmt_status()</a> interface. +<li> Provide <a href="pragma.html#pragfunc">PRAGMA functions</a> for + <a href="pragma.html#pragma_integrity_check">PRAGMA integrity_check</a>, <a href="pragma.html#pragma_quick_check">PRAGMA quick_check</a>, and + <a href="pragma.html#pragma_foreign_key_check">PRAGMA foreign_key_check</a>. +<li> Add the -withoutnulls option to the <a href="tclsqlite.html#eval">TCL interface eval method</a>. +<li> Enhance the <a href="sqlanalyze.html">sqlite3_analyzer.exe</a> utility program so that it shows + the number of bytes of metadata on btree pages. +<li> The <a href="c3ref/c_dbconfig_defensive.html#sqlitedbconfigenableqpsg">SQLITE_DBCONFIG_ENABLE_QPSG</a> run-time option and the + <a href="compile.html#enable_qpsg">SQLITE_ENABLE_QPSG</a> compile-time option enable the + <a href="queryplanner-ng.html#qpstab">query planner stability guarantee</a>. See also ticket + <a href="https://www.sqlite.org/src/info/892fc34f173e99d8">892fc34f173e99d8</a> +<li> Miscellaneous optimizations result in a 2% reduction in <a href="cpu.html">CPU cycles used</a>. +<p><b>Bug Fixes:</b> +<li> Fix the behavior of <a href="c3ref/column_name.html">sqlite3_column_name()</a> for queries that use the + <a href="optoverview.html#flattening">flattening optimization</a> so that the result is consistent with other + queries that do not use that optimization, and with PostgreSQL, MySQL, + and SQLServer. Ticket <a href="https://sqlite.org/src/info/de3403bf5ae">de3403bf5ae</a>. +<li> Fix the query planner so that it knows not to use <a href="optoverview.html#autoindex">automatic indexes</a> + on the right table of LEFT JOIN if the WHERE clause uses the <a href="lang_expr.html#isisnot">IS operator</a>. + Fix for <a href="https://sqlite.org/src/info/ce68383bf6aba">ce68383bf6aba</a>. +<li> Ensure that the query planner knows that any column of a + <a href="optoverview.html#flattening">flattened</a> LEFT JOIN can be NULL even + if that column is labeled with "NOT NULL". Fix for ticket + <a href="https://sqlite.org/src/info/892fc34f173e99d8">892fc34f173e99d8</a>. +<li> Fix rare false-positives in <a href="pragma.html#pragma_integrity_check">PRAGMA integrity_check</a> when run on a database connection + with <a href="lang_attach.html">attached databases</a>. Ticket + <a href="https://sqlite.org/src/info/a4e06e75a9ab61a12">a4e06e75a9ab61a12</a> +<li> Fix a bug (discovered by OSSFuzz) that causes an assertion fault if certain + dodgy CREATE TABLE declarations are used. Ticket + <a href="https://sqlite.org/src/info/bc115541132dad136">bc115541132dad136</a> +<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>π</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="https://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="https://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="https://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="https://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="https://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="https://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="https://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="https://www.sqlite.org/src/info/11d5aa455e0d98f3c1e6a08">11d5aa455e0d98f3c1e6a08</a> +<li>Fix a faulty assert() statement. + Ticket <a href="https://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="https://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="https://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="https://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="https://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="https://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="https://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="https://www.sqlite.org/src/info/07d6a0453d">07d6a0453d</a> +<li>Assertion fault on queries involving expressions of the form + "x IN (?)". Ticket <a href="https://www.sqlite.org/src/info/e39d032577">e39d032577</a>. +<li>Incorrect column datatype reported. + Ticket <a href="https://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="https://www.sqlite.org/src/info/10fb063b11">10fb063b11</a> +<li>Partial index causes assertion fault on UPDATE OR REPLACE. + Ticket <a href="https://www.sqlite.org/src/info/2ea3e9fe63">2ea3e9fe63</a> +<li>Crash when calling undocumented SQL function sqlite_rename_parent() + with NULL parameters. + Ticket <a href="https://www.sqlite.org/src/info/264b970c4379fd">264b970c43</a> +<li>ORDER BY ignored if the query has an identical GROUP BY. + Ticket <a href="https://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="https://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="https://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="https://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="https://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="https://www.sqlite.org/src/info/fccbde530a">Ticket [fccbde530a]</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="https://www.sqlite.org/src/info/4c86b126f2">Ticket [4c86b126f2]</a> +<li>Bug fix: Make sure "rowid" columns are correctly resolved in joins between + normal tables and WITHOUT ROWID tables. + <a href="https://www.sqlite.org/src/info/c34d0557f7">Ticket [c34d0557f7]</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="https://www.sqlite.org/src/info/8c63ff0eca">Ticket [8c63ff0eca]</a> +<li>Bug fix: Ensure that "ORDER BY random()" clauses do not get optimized out. + <a href="https://www.sqlite.org/src/info/65bdeb9739">Ticket [65bdeb9739]</a> +<li>Bug fix: Repair a name-resolution error that can occur in sub-select statements + contained within a TRIGGER. + <a href="https://www.sqlite.org/src/info/4ef7e3cfca">Ticket [4ef7e3cfca]</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="https://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>←</big> 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="https://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="https://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="https://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="https://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="https://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="https://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="https://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="https://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="https://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="https://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="https://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="https://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="https://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="https://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="https://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="https://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="https://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="https://www.sqlite.org/src/tktview/d02e1406a58ea02d">[d02e1406a58ea02d]]</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="https://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="https://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="https://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="https://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="https://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="https://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="https://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 "^" 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="https://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="https://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="https://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="https://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="https://www.sqlite.org/src/info/51ae9cad317a1"> + Ticket [51ae9cad317a1]</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="https://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="https://www.sqlite.org/src/info/efc02f9779">[efc02f9779]</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 [5899] 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="https://www.sqlite.org/src/finfo?name=tool/genfkey.c"> + source code</a> and + <a href="https://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="https://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="https://icu.unicode.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_corefunc.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="https://icu.unicode.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_corefunc.html#randomblob">randomblob()</a> and +<a href="lang_corefunc.html#hex">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 "<expr> IN <table>" as a shorthand for + "<expr> IN (SELECT * FROM <table>".</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^41 bytes. The old limit + was 2^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: https://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 [410].</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 [410]). 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><</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>&</b> (bitwise-and) + <b>|</b> (bitwise-or), <b>~</b> (ones-complement), + <b><<</b> (shift left), <b>>></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[]</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> + + |