6048 lines
		
	
	
		
			349 KiB
		
	
	
	
		
			HTML
		
	
	
	
	
	
			
		
		
	
	
			6048 lines
		
	
	
		
			349 KiB
		
	
	
	
		
			HTML
		
	
	
	
	
	
| <!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;
 | |
| }
 | |
| </script>
 | |
| </div>
 | |
| 
 | |
| 
 | |
| <h1 align=center>Release History</h1>
 | |
| 
 | |
| <p>
 | |
| This page provides a high-level summary of changes to SQLite.
 | |
| For more detail, see the Fossil checkin logs at
 | |
| <a href="http://www.sqlite.org/src/timeline">
 | |
| http://www.sqlite.org/src/timeline</a> and
 | |
| <a href="http://www.sqlite.org/src/timeline?t=release">
 | |
| http://www.sqlite.org/src/timeline?t=release</a>.
 | |
| See the <a href="chronology.html">chronology</a> a succinct listing of releases.
 | |
| </p>
 | |
| 
 | |
| <a name="version_3_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_invert.html">SQLITE_CHANGESETAPPLY_INVERT</a> flag
 | |
|   <li>Added the <a href="session/sqlite3changeset_start.html">sqlite3changeset_start_v2()</a> interface and the
 | |
|       <a href="session/c_changesetstart_invert.html">SQLITE_CHANGESETSTART_INVERT</a> flag.
 | |
|   <li>Added the 
 | |
|       <a href="https://sqlite.org/src/file/ext/session/changesetfuzz.c">changesetfuzz.c</a>
 | |
|       test-case generator utility.
 | |
| </ol>
 | |
| <p><b>Hashes:</b>
 | |
| <li>SQLITE_SOURCE_ID: "2018-12-01 12:34:55 bf8c1b2b7a5960c282e543b9c293686dccff272512d08865f4600fb58238b4f9"
 | |
| <li>SHA3-256 for sqlite3.c: 72c08830da9b5d1cb397c612c0e870d7f5eb41a323b41aa3d8aa5ae9ccedb2c4
 | |
| 
 | |
| </ol></p>
 | |
| <a name="version_3_25_3"></a>
 | |
| <h3>2018-11-05 (3.25.3)</h3><p><ol class='lessindent'>
 | |
| <li> Disallow the use of <a href="windowfunctions.html">window functions</a> in the recursive part of
 | |
|      a CTE. Ticket <a href="https://sqlite.org/src/info/e8275b415a2f03bee">e8275b415a2f03bee</a>
 | |
| <li> Fix the behavior of typeof() and length() on virtual tables.  Ticket
 | |
|      <a href="https://sqlite.org/src/info/69d642332d25aa3b7315a6d385">69d642332d25aa3b7315a6d385</a>
 | |
| <li> Strengthen defenses against deliberately corrupted database files.
 | |
| <li> Fix a problem in the query planner that results when a row-value expression
 | |
|      is used with a PRIMARY KEY with redundant columns.  Ticket
 | |
|      <a href="https://sqlite.org/src/info/1a84668dcfdebaf12415d">1a84668dcfdebaf12415d</a>
 | |
| <li> Fix the query planner so that it works correctly for IS NOT NULL operators
 | |
|      in the ON clause of a LEFT JOIN with the SQLITE_ENABLE_STAT4 compile-time option.
 | |
|      <a href="https://sqlite.org/src/info/65eb38f6e46de8c75e188a17ec">65eb38f6e46de8c75e188a17ec</a>
 | |
| <p><b>Hashes:</b>
 | |
| <li>SQLITE_SOURCE_ID: "2018-11-05 20:37:38 89e099fbe5e13c33e683bef07361231ca525b88f7907be7092058007b75036f2"
 | |
| <li>SHA3-256 for sqlite3.c: 45586e4df74de3a43f3a1f8c7a78c3c3f02edce01af7d10cafe68bb94476a5c5
 | |
| 
 | |
| </ol></p>
 | |
| <a name="version_3_25_2"></a>
 | |
| <h3>2018-09-25 (3.25.2)</h3><p><ol class='lessindent'>
 | |
| <li> Add the <a href="pragma.html#pragma_legacy_alter_table">PRAGMA legacy_alter_table=ON</a> command that causes the
 | |
|      "ALTER TABLE RENAME" command to behave as it did in SQLite versions 3.24.0
 | |
|      and earlier: references to the renamed table inside the bodies of triggers
 | |
|      and views are not updated.  This new pragma provides a compatibility
 | |
|      work around for older programs that expected the older, wonky behavior
 | |
|      of ALTER TABLE RENAME.
 | |
| <li> Fix a problem with the new <a href="windowfunctions.html">window functions</a> implementation that caused
 | |
|      a malfunction when complicated expressions involving window functions were used
 | |
|      inside of a view.
 | |
| <li> Fixes for various other compiler warnings and minor problems associated
 | |
|      with obscure configurations.
 | |
| <p><b>Hashes:</b>
 | |
| <li>SQLITE_SOURCE_ID: "2018-09-25 19:08:10 fb90e7189ae6d62e77ba3a308ca5d683f90bbe633cf681865365b8e92792d1c7"
 | |
| <li>SHA3-256 for sqlite3.c: 34c23ff91631ae10354f8c9d62fd7d65732b3d7f3acfd0bbae31ff4a62fe28af
 | |
| 
 | |
| </ol></p>
 | |
| <a name="version_3_25_1"></a>
 | |
| <h3>2018-09-18 (3.25.1)</h3><p><ol class='lessindent'>
 | |
| <li> Extra sanity checking added to ALTER TABLE in the 3.25.0 release
 | |
|      sometimes raises a false-positive
 | |
|      when the table being modified has a trigger that
 | |
|      updates a virtual table.  The false-positive caused the ALTER
 | |
|      TABLE to rollback, thus leaving the schema unchanged.
 | |
|      Ticket <a href="https://sqlite.org/src/info/b41031ea2b537237">b41031ea2b537237</a>.
 | |
| <li> The fix in the 3.25.0 release for the endless-loop in the byte-code 
 | |
|      associated with the ORDER BY LIMIT optimization did not work for
 | |
|      some queries involving window functions.  An additional correction
 | |
|      is required.  Ticket
 | |
|      <a href="https://sqlite.org/src/info/510cde277783b5fb">510cde277783b5fb</a>
 | |
| <p><b>Hashes:</b>
 | |
| <li>SQLITE_SOURCE_ID: "2018-09-18 20:20:44 2ac9003de44da7dafa3fbb1915ac5725a9275c86bf2f3b7aa19321bf1460b386"
 | |
| <li>SHA3-256 for sqlite3.c: 1b2302e7a54cc99c84ff699a299f61f069a28e1ed090b89e4430ca80ae2aab06
 | |
| 
 | |
| </ol></p>
 | |
| <a name="version_3_25_0"></a>
 | |
| <h3>2018-09-15 (3.25.0)</h3><p><ol class='lessindent'>
 | |
| <li> Add support for <a href="windowfunctions.html">window functions</a>
 | |
| <li> Enhancements the <a href="lang_altertable.html">ALTER TABLE</a> command:
 | |
| <ol type="a">
 | |
|   <li> Add support for renaming columns within a table using
 | |
|        ALTER TABLE <i>table</i> RENAME COLUMN <i>oldname</i> TO <i>newname</i>.
 | |
|   <li> Fix table rename feature so that it also updates references
 | |
|        to the renamed table in <a href="lang_createtrigger.html">triggers</a> and <a href="lang_createview.html">views</a>.
 | |
| </ol>
 | |
| <li> Query optimizer improvements:
 | |
| <ol type="a">
 | |
|   <li> Avoid unnecessary loads of columns in an aggregate query that
 | |
|        are not within an aggregate function and that are not part
 | |
|        of the GROUP BY clause.
 | |
|   <li> The IN-early-out optimization: When doing a look-up on a
 | |
|        multi-column index and an IN operator is used on a column
 | |
|        other than the left-most column, then if no rows match against
 | |
|        the first IN value, check to make sure there exist rows that
 | |
|        match the columns to the right before continuing with the
 | |
|        next IN value.
 | |
|   <li> Use the transitive property to try to propagate constant
 | |
|        values within the WHERE clause.  For example, convert
 | |
|        "a=99 AND b=a" into "a=99 AND b=99".
 | |
| </ol>
 | |
| <li> Use a separate mutex on every inode in the unix <a href="vfs.html">VFS</a>, rather than
 | |
|      a single mutex shared among them all, for slightly better concurrency
 | |
|      in multi-threaded environments.
 | |
| <li> Enhance the <a href="pragma.html#pragma_integrity_check">PRAGMA integrity_check</a> command for improved detection
 | |
|      of problems on the page freelist.
 | |
| <li> Output infinity as 1e999 in the ".dump" command of the
 | |
|      <a href="cli.html">command-line shell</a>.
 | |
| <li> Added the <a href="c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntldataversion">SQLITE_FCNTL_DATA_VERSION</a> file-control.
 | |
| <li> Added the <a href="geopoly.html">Geopoly module</a>
 | |
| <p><b>Bug fixes:</b>
 | |
| <li> The ORDER BY LIMIT optimization might have caused an infinite loop
 | |
|      in the byte code of the prepared statement under very obscure
 | |
|      circumstances,
 | |
|      due to a confluence of minor defects in the query optimizer.
 | |
|      Fix for ticket
 | |
|      <a href="https://www.sqlite.org/src/info/9936b2fa443fec03ff25">9936b2fa443fec03ff25</a>
 | |
| <li> On an UPSERT when the order of constraint checks is rearranged,
 | |
|      ensure that the affinity transformations on the inserted content
 | |
|      occur before any of the constraint checks. Fix for ticket
 | |
|      <a href="https://www.sqlite.org/src/info/79cad5e4b2e219dd197242e9e">79cad5e4b2e219dd197242e9e</a>.
 | |
| <li> Avoid using a prepared statement for ".stats on" command of the
 | |
|      <a href="cli.html">CLI</a> after it has been closed by the ".eqp full" logicc. Fix for ticket
 | |
|      <a href="https://www.sqlite.org/src/info/7be932dfa60a8a6b3b26bcf76">7be932dfa60a8a6b3b26bcf76</a>.
 | |
| <li> The LIKE optimization was generating incorrect byte-code and hence
 | |
|      getting the wrong answer
 | |
|      if the left-hand operand has numeric affinity and the right-hand-side
 | |
|      pattern is '/%' or if the pattern begins with the ESCAPE character.
 | |
|      Fix for ticket
 | |
|      <a href="https://www.sqlite.org/src/info/c94369cae9b561b1f996d0054b">c94369cae9b561b1f996d0054b</a>
 | |
| <p><b>Hashes:</b>
 | |
| <li>SQLITE_SOURCE_ID: "2018-09-15 04:01:47 b63af6c3bd33152742648d5d2e8dc5d5fcbcdd27df409272b6aea00a6f761760"
 | |
| <li>SHA3-256 for sqlite3.c: 989e3ff37f2b5eea8e42205f808ccf0ba86c6ea6aa928ad2c011f33a108ac45d
 | |
| 
 | |
| </ol></p>
 | |
| <a name="version_3_24_0"></a>
 | |
| <h3>2018-06-04 (3.24.0)</h3><p><ol class='lessindent'>
 | |
| <li> Add support for PostgreSQL-style <a href="lang_upsert.html">UPSERT</a>.
 | |
| <li> Add support for <a href="rtree.html#auxcol">auxiliary columns in r-tree tables</a>.
 | |
| <li> Add C-language APIs for discovering SQL keywords used by
 | |
|      SQLite: <a href="c3ref/keyword_check.html">sqlite3_keyword_count()</a>, <a href="c3ref/keyword_check.html">sqlite3_keyword_name()</a>, and
 | |
|      <a href="c3ref/keyword_check.html">sqlite3_keyword_check()</a>.
 | |
| <li> Add C-language APIs for dynamic strings based on the
 | |
|      <a href="c3ref/str.html">sqlite3_str</a> object.
 | |
| <li> Enhance <a href="lang_altertable.html">ALTER TABLE</a> so that it recognizes "true" and "false" as
 | |
|      valid arguments to DEFAULT.
 | |
| <li> Add the sorter-reference optimization as a compile-time option.
 | |
|      Only available if compiled with SQLITE_ENABLE_SORTER_REFERENCES.
 | |
| <li> Improve the format of the <a href="eqp.html">EXPLAIN QUERY PLAN</a> raw output, so that
 | |
|      it gives better information about the query plan and about the
 | |
|      relationships between the various components of the plan.
 | |
| <li> Added the <a href="c3ref/c_dbconfig_defensive.html#sqlitedbconfigresetdatabase">SQLITE_DBCONFIG_RESET_DATABASE</a> option to the
 | |
|      <a href="c3ref/db_config.html">sqlite3_db_config()</a> API.
 | |
| <p><b><a href="cli.html">CLI</a> Enhancements:</b>
 | |
| <li> Automatically intercepts the raw <a href="eqp.html">EXPLAIN QUERY PLAN</a> 
 | |
|      output and reformats it into an ASCII-art graph.
 | |
| <li> Lines that begin with "#" and that are not in the middle of an
 | |
|      SQL statement are interpreted as comments.
 | |
| <li> Added the --append option to the ".backup" command.
 | |
| <li> Added the ".dbconfig" command.
 | |
| <p><b>Performance:</b>
 | |
| <li> <a href="lang_update.html">UPDATE</a> avoids unnecessary low-level disk writes when the contents
 | |
|      of the database file do not actually change.
 | |
|      For example, "UPDATE t1 SET x=25 WHERE y=?" generates no extra 
 | |
|      disk I/O if the value in column x is already 25.  Similarly, 
 | |
|      when doing <a href="lang_update.html">UPDATE</a> on records that span multiple pages, only
 | |
|      the subset of pages that actually change are written to disk.
 | |
|      This is a low-level performance optimization only and does not
 | |
|      affect the behavior of TRIGGERs or other higher level SQL
 | |
|      structures.
 | |
| <li> Queries that use ORDER BY and LIMIT now try to avoid computing
 | |
|      rows that cannot possibly come in under the LIMIT. This can greatly
 | |
|      improve performance of ORDER BY LIMIT queries, especially when the
 | |
|      LIMIT is small relative to the number of unrestricted output rows.
 | |
| <li> The <a href="optoverview.html#or_opt">OR optimization</a> is allowed to proceed
 | |
|      even if the OR expression has also been converted into an IN
 | |
|      expression.  Uses of the OR optimization are now also 
 | |
|      <a href="eqp.html#or-opt">more clearly shown</a> in the <a href="eqp.html">EXPLAIN QUERY PLAN</a> output.
 | |
| <li> The query planner is more aggressive about using
 | |
|      <a href="optoverview.html#autoindex">automatic indexes</a> for views and subqueries for which it is
 | |
|      not possible to create a persistent index.
 | |
| <li> Make use of the one-pass UPDATE and DELETE query plans in the
 | |
|      <a href="rtree.html">R-Tree extension</a> where appropriate.
 | |
| <li> Performance improvements in the LEMON-generated parser.
 | |
| <p><b>Bug fixes:</b>
 | |
| <li> For the right-hand table of a LEFT JOIN, compute the values
 | |
|      of expressions directly rather than loading precomputed values
 | |
|      out of an <a href="expridx.html">expression index</a> as the expression index might
 | |
|      not contain the correct value.  Ticket
 | |
|      <a href="https://sqlite.org/src/info/7fa8049685b50b5aeb0c2">7fa8049685b50b5aeb0c2</a>
 | |
| <li> Do not attempt to use terms from the WHERE clause to enable
 | |
|      indexed lookup of the right-hand table of a LEFT JOIN.  Ticket
 | |
|      <a href="https://sqlite.org/src/info/4ba5abf65c5b0f9a96a7a">4ba5abf65c5b0f9a96a7a</a>
 | |
| <li> Fix a memory leak that can occur following a failure to open error
 | |
|      in the <a href="csv.html">CSV virtual table</a>
 | |
| <li> Fix a long-standing problem wherein a corrupt schema on the
 | |
|      <a href="fileformat2.html#seqtab">sqlite_sequence</a> table used by <a href="autoinc.html">AUTOINCREMENT</a> can lead to
 | |
|      a crash. Ticket
 | |
|      <a href="https://www.sqlite.org/src/info/d8dc2b3a58cd5dc29">d8dc2b3a58cd5dc2918a1</a>
 | |
| <li> Fix the <a href="json1.html#jeach">json_each()</a> function so that it returns
 | |
|      valid results on its "fullkey" column when the input is a simple value
 | |
|      rather than an array or object.
 | |
| <p><b>Hashes:</b>
 | |
| <li>SQLITE_SOURCE_ID: "2018-06-04 19:24:41 c7ee0833225bfd8c5ec2f9bf62b97c4e04d03bd9566366d5221ac8fb199a87ca"
 | |
| <li>SHA3-256 for sqlite3.c: 0d384704e1c66026228336d1e91771d295bf688c9c44c7a44f25a4c16c26ab3c
 | |
| 
 | |
| </ol></p>
 | |
| <a name="version_3_23_1"></a>
 | |
| <h3>2018-04-10 (3.23.1)</h3><p><ol class='lessindent'>
 | |
| <li> Fix two problems in the new <a href="optoverview.html#leftjoinreduction">LEFT JOIN strength reduction optimization</a>.
 | |
|      Tickets <a href="https://sqlite.org/src/info/1e39b966ae9ee739">1e39b966ae9ee739</a>
 | |
|      and <a href="https://sqlite.org/src/info/fac496b61722daf2">fac496b61722daf2</a>.
 | |
| <li> Fix misbehavior of the FTS5 xBestIndex method.  Ticket
 | |
|      <a href="https://sqlite.org/src/info/2b8aed9f7c9e61e8">2b8aed9f7c9e61e8</a>.
 | |
| <li> Fix a harmless reference to an uninitialized virtual machine register.
 | |
|      Ticket <a href="https://sqlite.org/src/info/093420fc0eb7cba7">093420fc0eb7cba7</a>.
 | |
| <li> Fix the <a href="cli.html">CLI</a> so that it builds with -DSQLITE_UNTESTABLE
 | |
| <li> Fix the <a href="https://sqlite.org/src/file/ext/misc/eval.c">eval.c</a> extension
 | |
|      so that it works with <a href="pragma.html#pragma_empty_result_callbacks">PRAGMA empty_result_callbacks=ON</a>.
 | |
| <li> Fix the <a href="series.html">generate_series</a> virtual table so that it correctly returns
 | |
|      no rows if any of its constraints are NULL.
 | |
| <li> Performance enhancements in the parser.
 | |
| <p><b>Hashes:</b>
 | |
| <li>SQLITE_SOURCE_ID: "2018-04-10 17:39:29 4bb2294022060e61de7da5c227a69ccd846ba330e31626ebcd59a94efd148b3b"
 | |
| <li>SHA3-256 for sqlite3.c: 65750d1e506f416a0b0b9dd22d171379679c733e3460549754dc68c92705b5dc
 | |
| 
 | |
| </ol></p>
 | |
| <a name="version_3_23_0"></a>
 | |
| <h3>2018-04-02 (3.23.0)</h3><p><ol class='lessindent'>
 | |
| <li> Add the <a href="c3ref/serialize.html">sqlite3_serialize()</a> and <a href="c3ref/deserialize.html">sqlite3_deserialize()</a> interfaces when
 | |
|      the <a href="compile.html#enable_deserialize">SQLITE_ENABLE_DESERIALIZE</a> compile-time option is used.
 | |
| <li> Recognize TRUE and FALSE as constants.  (For compatibility, if there
 | |
|      exist columns named "true" or "false", then the identifiers refer to the
 | |
|      columns rather than Boolean constants.)
 | |
| <li> Support operators IS TRUE, IS FALSE, IS NOT TRUE, and IS NOT FALSE.
 | |
| <li> Added the <a href="c3ref/c_dbstatus_options.html#sqlitedbstatuscachespill">SQLITE_DBSTATUS_CACHE_SPILL</a> option to <a href="c3ref/db_status.html">sqlite3_db_status()</a> for
 | |
|      reporting the number of cache spills that have occurred.
 | |
| <li> The "alternate-form-2" flag ("!") on the <a href="printf.html">built-in printf</a> implementation
 | |
|      now causes string substitutions to measure the width and precision in
 | |
|      characters instead of bytes.
 | |
| <li> If the <a href="vtab.html#xcolumn">xColumn</a> method in a <a href="vtab.html">virtual table</a> implementation returns
 | |
|      an error message using <a href="c3ref/result_blob.html">sqlite3_result_error()</a> then give that error
 | |
|      message preference over internally-generated messages.
 | |
| <li> Added the -A command-line option to the <a href="cli.html">CLI</a> to make it easier to manage
 | |
|      <a href="sqlar.html">SQLite Archive files</a>.
 | |
| <li> Add support for INSERT OR REPLACE, INSERT OR IGNORE, and UPDATE OR REPLACE
 | |
|      in the <a href="zipfile.html">Zipfile virtual table</a>.
 | |
| <li> Enhance the <a href="session/sqlite3changeset_apply.html">sqlite3changeset_apply()</a> interface so that it is hardened
 | |
|      against attacks from deliberately corrupted <a href="sessionintro.html#changeset">changeset</a> objects.
 | |
| <li> Added the <a href="https://sqlite.org/src/file/ext/misc/normalize.c">sqlite3_normalize()</a>
 | |
|      extension function.
 | |
| <li> Query optimizer enhancements:
 | |
| <ol type='a'>
 | |
|   <li> Improve the <a href="optoverview.html#omitnoopjoin">omit-left-join optimization</a> so that it works in cases where
 | |
|        the right-hand table is UNIQUE but not necessarily NOT NULL.
 | |
|   <li> Improve the <a href="optoverview.html#pushdown">push-down optimization</a> so that it works for many LEFT JOINs.
 | |
|   <li> Add the <a href="optoverview.html#leftjoinreduction">LEFT JOIN strength reduction optimization</a> that converts a LEFT
 | |
|        JOIN into an ordinary JOIN if there exist terms in the WHERE clause
 | |
|        that would prevent the extra all-NULL row of the LEFT JOIN from
 | |
|        appearing in the output set.
 | |
|   <li> Avoid unnecessary writes to the sqlite_sequence table when an
 | |
|        <a href="autoinc.html">AUTOINCREMENT</a> table is updated with an rowid that is less than the
 | |
|        maximum.
 | |
| </ol>
 | |
| <li> Bug fixes:
 | |
| <ol type='a'>
 | |
|   <li> Fix the parser to accept valid <a href="rowvalue.html">row value</a> syntax.
 | |
|        Ticket <a href="https://www.sqlite.org/src/info/7310e2fb3d046a5">7310e2fb3d046a5</a>
 | |
|   <li> Fix the query planner so that it takes into account dependencies in
 | |
|        the arguments to table-valued functions in subexpressions in 
 | |
|        the WHERE clause.
 | |
|        Ticket <a href="https://www.sqlite.org/src/info/80177f0c226ff54">80177f0c226ff54</a>
 | |
|   <li> Fix incorrect result with complex OR-connected WHERE and STAT4.
 | |
|        Ticket <a href="https://www.sqlite.org/src/info/ec32177c99ccac2">ec32177c99ccac2</a>
 | |
|   <li> Fix potential corruption in <a href="expridx.html">indexes on expressions</a> due to automatic
 | |
|        datatype conversions.
 | |
|        Ticket <a href="https://www.sqlite.org/src/info/343634942dd54ab">343634942dd54ab</a>
 | |
|   <li> Assertion fault in FTS4.
 | |
|        Ticket <a href="https://www.sqlite.org/src/info/d6ec09eccf68cfc">d6ec09eccf68cfc</a>
 | |
|   <li> Incorrect result on the less-than operator in <a href="rowvalue.html">row values</a>.
 | |
|        Ticket <a href="https://www.sqlite.org/src/info/f484b65f3d62305">f484b65f3d62305</a>
 | |
|   <li> Always interpret non-zero floating-point values as TRUE, even if
 | |
|        the integer part is zero.
 | |
|        Ticket <a href="https://www.sqlite.org/src/info/36fae083b450e3a">36fae083b450e3a</a>
 | |
|   <li> Fix an issue in the fsdir(PATH) <a href="vtab.html#tabfunc2">table-valued function</a> to the
 | |
|        <a href="https://sqlite.org/src/file/ext/misc/fileio.c">fileio.c</a> extension,
 | |
|        that caused a segfault if the fsdir() table was used as the inner table
 | |
|        of a join. Problem reported on the mailing list and fixed by check-in
 | |
|        <a href="https://www.sqlite.org/src/info/7ce4e71c1b7251be">7ce4e71c1b7251be</a>
 | |
|   <li> Issue an error rather instead of an assertion-fault or null-pointer
 | |
|        dereference when the sqlite_master table is corrupted so that the
 | |
|        sqlite_sequence table root page is really a btree-index page. Check-in
 | |
|        <a href="https://www.sqlite.org/src/info/525deb7a67fbd647">525deb7a67fbd647</a>
 | |
|   <li> Fix the <a href="lang_analyze.html">ANALYZE</a> command so that it computes statistics on tables
 | |
|        whose names begin with "sqlite".  Check-in
 | |
|        <a href="https://sqlite.org/src/info/0249d9aecf69948d">0249d9aecf69948d</a>
 | |
| </ol>
 | |
| <li> Additional fixes for issues detected by
 | |
|      <a href="https://github.com/google/oss-fuzz">OSSFuzz</a>:
 | |
| <ol type='a'>
 | |
|   <li> Fix a possible infinite loop on VACUUM for corrupt database files.
 | |
|        Check-in <a href="https://www.sqlite.org/src/info/27754b74ddf64">27754b74ddf64</a>
 | |
|   <li> Disallow <a href="lang_expr.html#varparam">parameters</a> in the <a href="lang_with.html">WITH clause</a> of triggers and views.
 | |
|        Check-in <a href="https://www.sqlite.org/src/info/b918d4b4e546d">b918d4b4e546d</a>
 | |
|   <li> Fix a potential memory leak in <a href="rowvalue.html">row value</a> processing.
 | |
|        Check-in <a href="https://www.sqlite.org/src/info/2df6bbf1b8ca8">2df6bbf1b8ca8</a>
 | |
|   <li> Improve the performance of the <a href="lang_corefunc.html#replace">replace() SQL function</a> for cases where
 | |
|        there are many substitutions on megabyte-sized strings, in an attempt
 | |
|        to avoid OSSFuzz timeouts during testing.
 | |
|        Check-in <a href="https://www.sqlite.org/src/info/fab2c2b07b5d3">fab2c2b07b5d3</a>
 | |
|   <li> Provide an appropriate error message when the sqlite_master table
 | |
|        contains a CREATE TABLE AS statement. Formerly this caused either an
 | |
|        assertion fault or null pointer dereference.  Problem found by OSSFuzz
 | |
|        on the GDAL project. Check-in
 | |
|        <a href="https://www.sqlite.org/src/info/d75e67654aa96">d75e67654aa96</a>
 | |
|   <li> Incorrect assert() statement removed. Check-in
 | |
|        <a href="https://www.sqlite.org/src/info/823779d31eb09cda">823779d31eb09cda</a>.
 | |
|   <li> Fix a problem with using the <a href="optoverview.html#like_opt">LIKE optimization</a> on an
 | |
|        <a href="lang_createtable.html#rowid">INTEGER PRIMARY KEY</a>.  Check-in
 | |
|        <a href="https://www.sqlite.org/src/info/b850dd159918af56">b850dd159918af56</a>.
 | |
| </ol>
 | |
| <p><b>Hashes:</b>
 | |
| <li>SQLITE_SOURCE_ID: "2018-04-02 11:04:16 736b53f57f70b23172c30880186dce7ad9baa3b74e3838cae5847cffb98f5cd2"
 | |
| <li>SHA3-256 for sqlite3.c: 4bed3dc2dc905ff55e2c21fd2725551fc0ca50912a9c96c6af712a4289cb24fa
 | |
| 
 | |
| </ol></p>
 | |
| <a name="version_3_22_0"></a>
 | |
| <h3>2018-01-22 (3.22.0)</h3><p><ol class='lessindent'>
 | |
| <li> The output of <a href="c3ref/trace_v2.html">sqlite3_trace_v2()</a> now shows each individual SQL statement
 | |
|      run within a trigger.
 | |
| <li> Add the ability to read from <a href="wal.html">WAL mode</a> databases even if the application 
 | |
|      lacks write permission on the database and its containing directory, as long as
 | |
|      the -shm and -wal files exist in that directory.
 | |
| <li> Added the <a href="rtree.html#rtreecheck">rtreecheck()</a> scalar SQL function to the <a href="rtree.html">R-Tree extension</a>.
 | |
| <li> Added the <a href="c3ref/vtab_nochange.html">sqlite3_vtab_nochange()</a> and <a href="c3ref/value_blob.html">sqlite3_value_nochange()</a> interfaces
 | |
|      to help virtual table implementations optimize UPDATE operations.
 | |
| <li> Added the <a href="c3ref/vtab_collation.html">sqlite3_vtab_collation()</a> interface.
 | |
| <li> Added support for the <a href="fts5.html#carrotq">"^" 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 <font color="red">master journal</font> 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
 | |
|     of the seldom-used and little-known <a href="fts3.html#f3tknzr">fts3_tokenizer()</a> function is
 | |
|     disabled unless SQLite is compiled with the <a href="compile.html#enable_fts3_tokenizer">SQLITE_ENABLE_FTS3_TOKENIZER</a>.
 | |
| <p><b>Hashes:</b>
 | |
| <li>SQLITE_SOURCE_ID: "2016-02-15 17:29:24 3d862f207e3adc00f78066799ac5a8c282430a5f"
 | |
| <li>SHA1 for sqlite3.c: df01436c5fcfe72d1a95bc172158219796e1a90b
 | |
| 
 | |
| 
 | |
| </ol></p>
 | |
| <a name="version_3_10_2"></a>
 | |
| <h3>2016-01-20 (3.10.2)</h3><p><ol class='lessindent'>
 | |
| <p><b>Critical bug fix:</b>
 | |
| <li>Version 3.10.0 introduced a case-folding bug in the <a href="lang_expr.html#like">LIKE</a> operator which is fixed
 | |
|     by this patch release.  Ticket 
 | |
|     <a href="https://www.sqlite.org/src/info/80369eddd5c94">80369eddd5c94</a>.
 | |
| <p><b>Other miscellaneous bug fixes:</b>
 | |
| <li>Fix a use-after-free that can occur when SQLite is compiled with -DSQLITE_HAS_CODEC.
 | |
| <li>Fix the build so that it works with -DSQLITE_OMIT_WAL.
 | |
| <li>Fix the configure script for the amalgamation so that the --readline option works again
 | |
|     on Raspberry PIs.
 | |
| <p><b>Hashes:</b>
 | |
| <li>SQLITE_SOURCE_ID: "2016-01-20 15:27:19 17efb4209f97fb4971656086b138599a91a75ff9"
 | |
| <li>SHA1 for sqlite3.c: f7088b19d97cd7a1c805ee95c696abd54f01de4f
 | |
| 
 | |
| </ol></p>
 | |
| <a name="version_3_10_1"></a>
 | |
| <h3>2016-01-14 (3.10.1)</h3><p><ol class='lessindent'>
 | |
| <p><b>New feature:</b>
 | |
| <li>Add the <a href="c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntljournalpointer">SQLITE_FCNTL_JOURNAL_POINTER</a> file control.
 | |
| <p><b>Bug fix:</b>
 | |
| <li>Fix a 16-month-old bug in the query planner that could generate incorrect results
 | |
|     when a scalar subquery attempts to use the <a href="queryplanner.html#partialsort">block sorting</a> optimization.  Ticket
 | |
|     <a href="https://www.sqlite.org/src/info/cb3aa0641d9a4">cb3aa0641d9a4</a>.
 | |
| <p><b>Hashes:</b>
 | |
| <li>SQLITE_SOURCE_ID: "2016-01-13 21:41:56 254419c36766225ca542ae873ed38255e3fb8588"
 | |
| <li>SHA1 for sqlite3.c: 1398ba8e4043550a533cdd0834bfdad1c9eab0f4
 | |
| 
 | |
| </ol></p>
 | |
| <a name="version_3_10_0"></a>
 | |
| <h3>2016-01-06 (3.10.0)</h3><p><ol class='lessindent'>
 | |
| <p><b>General improvements:</b>
 | |
| <li>Added support for <a href="lang_expr.html#like">LIKE</a>, <a href="lang_expr.html#glob">GLOB</a>, and <a href="lang_expr.html#regexp">REGEXP</a> operators on <a href="vtab.html">virtual tables</a>.
 | |
| <li>Added the <a href="vtab.html#colUsed">colUsed field</a> to <a href="c3ref/index_info.html">sqlite3_index_info</a> for use by
 | |
|     the <a href="vtab.html#xbestindex">sqlite3_module.xBestIndex</a> method.
 | |
| <li>Enhance the <a href="pragma.html#pragma_cache_spill">PRAGMA cache_spill</a> statement to accept a 32-bit integer
 | |
|     parameter which is the threshold below which cache spilling is prohibited.
 | |
| <li>On unix, if a symlink to a database file is opened, then the corresponding
 | |
|     journal files are based on the actual filename, not the symlink name.
 | |
| <li>Added the "--transaction" option to <a href="sqldiff.html">sqldiff</a>.
 | |
| <li>Added the <a href="c3ref/db_cacheflush.html">sqlite3_db_cacheflush()</a> interface.
 | |
| <li>Added the <a href="c3ref/strlike.html">sqlite3_strlike()</a> interface.
 | |
| <li>When using <a href="mmap.html">memory-mapped I/O</a> map the database file read-only so that stray pointers
 | |
|     and/or array overruns in the application cannot accidentally modify the database file.
 | |
| <li>Added the <em>experimental</em> <a href="c3ref/snapshot_get.html">sqlite3_snapshot_get()</a>, <a href="c3ref/snapshot_open.html">sqlite3_snapshot_open()</a>,
 | |
|     and <a href="c3ref/snapshot_free.html">sqlite3_snapshot_free()</a> interfaces.  These are subject to change or removal in
 | |
|     a subsequent release.
 | |
| <li>Enhance the <a href="lang_datefunc.html#localtime">'utc' modifier</a> in the <a href="lang_datefunc.html">date and time functions</a> so that it is a no-op if
 | |
|     the date/time is known to already be in UTC.  (This is not a compatibility break since
 | |
|     the behavior has long been documented as "undefined" in that case.)
 | |
| <li>Added the <a href="json1.html#jgrouparray">json_group_array()</a> and <a href="json1.html#jgroupobject">json_group_object()</a> SQL functions in the
 | |
|     <a href="json1.html#jmini">json</a> extension.
 | |
| <li>Added the <a href="compile.html#like_doesnt_match_blobs">SQLITE_LIKE_DOESNT_MATCH_BLOBS</a> compile-time option.
 | |
| <li>Many small performance optimizations.
 | |
| <p><b>Portability enhancements:</b>
 | |
| <li>Work around a sign-extension bug in the optimizer of the HP C compiler on HP/UX.
 | |
|     <a href="https://www.sqlite.org/src/fdiff?sbs=1&v1=869c95b0fc73026d&v2=232c242a0ccb3d67">(details)</a>
 | |
| <p><b>Enhancements to the <a href="cli.html">command-line shell</a>:</b>
 | |
| <li>Added the ".changes ON|OFF" and ".vfsinfo" <a href="cli.html#dotcmd">dot-commands</a>.
 | |
| <li>Translate between MBCS and UTF8 when
 | |
|     running in <a href="https://en.wikipedia.org/wiki/Cmd.exe">cmd.exe</a> on Windows.
 | |
| <p><b>Enhancements to makefiles:</b>
 | |
| <li>Added the --enable-editline and --enable-static-shell options
 | |
|     to the various autoconf-generated configure scripts.
 | |
| <li>Omit all use of "awk" in the makefiles, to make building easier for MSVC users.
 | |
| <p><b>Important fixes:</b>
 | |
| <li>Fix inconsistent integer to floating-point comparison operations that
 | |
|     could result in a corrupt index if the index is created on a table
 | |
|     column that contains both large integers and floating point values
 | |
|     of similar magnitude.  Ticket 
 | |
|     <a href="https://www.sqlite.org/src/tktview?name=38a97a87a6">38a97a87a6</a>.
 | |
| <li>Fix an infinite-loop in the query planner that could occur on
 | |
|     malformed <a href="lang_with.html">common table expressions</a>.
 | |
| <li>Various bug fixes in the <a href="sqldiff.html">sqldiff</a> tool.
 | |
| <p><b>Hashes:</b>
 | |
| <li>SQLITE_SOURCE_ID: "2016-01-06 11:01:07 fd0a50f0797d154fefff724624f00548b5320566"
 | |
| <li>SHA1 for sqlite3.c: b92ca988ebb6df02ac0c8f866dbf3256740408ac
 | |
| 
 | |
| 
 | |
| </ol></p>
 | |
| <a name="version_3_9_2"></a>
 | |
| <h3>2015-11-02 (3.9.2)</h3><p><ol class='lessindent'>
 | |
| <li>Fix the schema parser so that it interprets certain 
 | |
|     (obscure and ill-formed)
 | |
|     CREATE TABLE statements the same as legacy.  Fix for ticket
 | |
|     <a href="https://www.sqlite.org/src/info/ac661962a2aeab3c331">ac661962a2aeab3c331</a>
 | |
| <li>Fix a query planner problem that could result in an incorrect
 | |
|     answer due to the use of <a href="optoverview.html#autoindex">automatic indexing</a> in subqueries in
 | |
|     the FROM clause of a correlated scalar subqueries.  Fix for ticket
 | |
|     <a href="https://www.sqlite.org/src/info/8a2adec1">8a2adec1</a>.
 | |
| 
 | |
| <li>SQLITE_SOURCE_ID: "2015-11-02 18:31:45 bda77dda9697c463c3d0704014d51627fceee328"
 | |
| <li>SHA1 for sqlite3.c: 1c4013876f50bbaa3e6f0f98e0147c76287684c1
 | |
| 
 | |
| </ol></p>
 | |
| <a name="version_3_9_1"></a>
 | |
| <h3>2015-10-16 (3.9.1)</h3><p><ol class='lessindent'>
 | |
| <li>Fix <a href="json1.html">the json1 extension</a> so that it does <u>not</u> recognize ASCII form-feed as a
 | |
|     whitespace character, in order to comply with RFC-7159.  Fix for ticket
 | |
|     <a href="https://www.sqlite.org/src/info/57eec374ae1d0a1d">57eec374ae1d0a1d</a>
 | |
| <li>Add a few #ifdef and build script changes to address compilation issues that
 | |
|     appeared after the 3.9.0 release.
 | |
| 
 | |
| <li>SQLITE_SOURCE_ID: ""2015-10-16 17:31:12 767c1727fec4ce11b83f25b3f1bfcfe68a2c8b02"
 | |
| <li>SHA1 for sqlite3.c: 5e6d1873a32d82c2cf8581f143649940cac8ae49
 | |
| 
 | |
| </ol></p>
 | |
| <a name="version_3_9_0"></a>
 | |
| <h3>2015-10-14 (3.9.0)</h3><p><ol class='lessindent'>
 | |
| <p><b>Policy Changes:</b>
 | |
| <li>The <a href="versionnumbers.html">version numbering conventions</a> for SQLite are revised to use the
 | |
|     emerging standard of <a href="http://semver.org/">semantic versioning</a>.
 | |
| <p><b>New Features And Enhancements:</b>
 | |
| <li>Added <a href="json1.html">the json1 extension</a> module in the source tree, and in the <a href="amalgamation.html">amalgamation</a>.
 | |
|     Enable support using the <a href="compile.html#enable_json1">SQLITE_ENABLE_JSON1</a> compile-time option.
 | |
| <li>Added <a href="fts5.html">Full Text Search version 5 (FTS5)</a> to the <a href="amalgamation.html">amalgamation</a>, enabled
 | |
|     using <a href="compile.html#enable_fts5">SQLITE_ENABLE_FTS5</a>.  FTS5 will be considered "experimental" (subject
 | |
|     to incompatible changes) for at least one more release cycle.
 | |
| <li>The <a href="lang_createview.html">CREATE VIEW</a> statement now accepts an optional list of
 | |
|     column names following the view name.
 | |
| <li>Added support for <a href="expridx.html">indexes on expressions</a>.
 | |
| <li>Added support for <a href="vtab.html#tabfunc2">table-valued functions</a> in the FROM clause of a
 | |
|     <a href="lang_select.html">SELECT</a> statement.
 | |
| <li>Added support for <a href="vtab.html#epovtab">eponymous virtual tables</a>.
 | |
| <li>A <a href="lang_createview.html">VIEW</a> may now reference undefined tables and functions when
 | |
|     initially created.  Missing tables and functions are reported when
 | |
|     the VIEW is used in a query.
 | |
| <li>Added the <a href="c3ref/value_subtype.html">sqlite3_value_subtype()</a> and <a href="c3ref/result_subtype.html">sqlite3_result_subtype()</a>
 | |
|     interfaced (used by <a href="json1.html">the json1 extension</a>).
 | |
| <li>The query planner is now able to use <a href="partialindex.html">partial indexes</a> that contain
 | |
|     AND-connected terms in the WHERE clause.
 | |
| <li>The sqlite3_analyzer.exe utility is updated to report the depth of
 | |
|     each btree and to show the average fanout for indexes and 
 | |
|     WITHOUT ROWID tables.
 | |
| <li>Enhanced the <a href="dbstat.html">dbstat virtual table</a> so that it can be used as a
 | |
|     <a href="vtab.html#tabfunc2">table-valued function</a> where the argument is the schema to be
 | |
|     analyzed.
 | |
| <p><b>Other changes:</b>
 | |
| <li>The <a href="c3ref/aggregate_count.html">sqlite3_memory_alarm()</a> interface, which has been deprecated and
 | |
|     undocumented for 8 years, is changed into a no-op.
 | |
| <p><b>Important fixes:</b>
 | |
| <li>Fixed a critical bug in the 
 | |
|     <a href="https://www.sqlite.org/see/doc/trunk/www/readme.wiki">SQLite Encryption Extension</a> that
 | |
|     could cause the database to become unreadable and unrecoverable if a <a href="lang_vacuum.html">VACUUM</a> command 
 | |
|     changed the size of the encryption nonce.
 | |
| <li>Added a memory barrier in the implementation of
 | |
|     <a href="c3ref/initialize.html">sqlite3_initialize()</a> to help ensure that it is thread-safe.
 | |
| <li>Fix the <a href="optoverview.html#or_opt">OR optimization</a> so that it always ignores subplans that
 | |
|     do not use an index.
 | |
| <li>Do not apply the WHERE-clause pushdown optimization on terms that originate
 | |
|     in the ON or USING clause of a LEFT JOIN.  Fix for ticket
 | |
|     <a href="https://www.sqlite.org/src/info/c2a19d81652f40568c">c2a19d81652f40568c</a>.
 | |
| 
 | |
| <li>SQLITE_SOURCE_ID: "2015-10-14 12:29:53 a721fc0d89495518fe5612e2e3bbc60befd2e90d"
 | |
| <li>SHA1 for sqlite3.c: c03e47e152ddb9c342b84ffb39448bf4a2bd4288
 | |
| 
 | |
| </ol></p>
 | |
| <a name="version_3_8_11_1"></a>
 | |
| <h3>2015-07-29 (3.8.11.1)</h3><p><ol class='lessindent'>
 | |
| <li>Restore an undocumented side-effect of <a href="pragma.html#pragma_cache_size">PRAGMA cache_size</a>: force
 | |
|     the database schema to be parsed if the database has not been previously accessed.
 | |
| <li>Fix a long-standing problem in <a href="c3ref/changes.html">sqlite3_changes()</a> for <a href="withoutrowid.html">WITHOUT ROWID</a>
 | |
|     tables that was reported a few hours after the 3.8.11 release.
 | |
| <li>SQLITE_SOURCE_ID: "2015-07-29 20:00:57 cf538e2783e468bbc25e7cb2a9ee64d3e0e80b2f"
 | |
| <li>SHA1 for sqlite3.c: 3be71d99121fe5b17f057011025bcf84e7cc6c84
 | |
| 
 | |
| </ol></p>
 | |
| <a name="version_3_8_11"></a>
 | |
| <h3>2015-07-27 (3.8.11)</h3><p><ol class='lessindent'>
 | |
| <li>Added the experimental <a href="rbu.html">RBU</a> extension.  Note that this extension is experimental
 | |
|     and subject to change in incompatible ways.
 | |
| <li>Added the experimental <a href="fts5.html">FTS5</a> extension.  Note that this extension is experimental
 | |
|     and subject to change in incompatible ways.
 | |
| <li>Added the <a href="c3ref/value_dup.html">sqlite3_value_dup()</a> and <a href="c3ref/value_dup.html">sqlite3_value_free()</a> interfaces.
 | |
| <li>Enhance the <a href="spellfix1.html">spellfix1</a> extension to support <a href="lang_conflict.html">ON CONFLICT</a> clauses.
 | |
| <li>The <a href="lang_expr.html#isisnot">IS operator</a> is now able to drive indexes.
 | |
| <li>Enhance the query planner to permit <a href="optoverview.html#autoindex">automatic indexing</a> on FROM-clause
 | |
|     subqueries that are implemented by co-routine.
 | |
| <li>Disallow the use of "rowid" in <a href="lang_with.html">common table expressions</a>.
 | |
| <li>Added the <a href="pragma.html#pragma_cell_size_check">PRAGMA cell_size_check</a> command for better and earlier
 | |
|     detection of database file corruption.
 | |
| <li>Added the <a href="fts3.html#matchinfo-b">matchinfo 'b' flag</a> to the <a href="fts3.html#matchinfo">matchinfo()</a> function in <a href="fts3.html">FTS3</a>.
 | |
| <li>Improved fuzz-testing of database files, with fixes for problems found.
 | |
| <li>Add the fuzzcheck test program and automatically run this program
 | |
|     using both SQL and database test cases on "make test".
 | |
| <li>Added the <a href="c3ref/c_mutex_fast.html">SQLITE_MUTEX_STATIC_VFS1</a> static mutex and use it in the
 | |
|     Windows <a href="vfs.html">VFS</a>.
 | |
| <li>The <a href="c3ref/profile.html">sqlite3_profile()</a> callback is invoked (by <a href="c3ref/reset.html">sqlite3_reset()</a> or
 | |
|     <a href="c3ref/finalize.html">sqlite3_finalize()</a>) for statements that did not run to completion.
 | |
| <li>Enhance the page cache so that it can preallocate a block of memory to
 | |
|     use for the initial set page cache lines.  Set the default preallocation
 | |
|     to 100 pages.  Yields about a 5% performance increase on common workloads.
 | |
| <li>Miscellaneous micro-optimizations result in 22.3% more work for the same
 | |
|     number of CPU cycles relative to the previous release. 
 | |
|     SQLite now runs twice as fast as <a href="#version_3_8_0">version 3.8.0</a> and three times as
 | |
|     fast as <a href="#version_3_3_9">version 3.3.9</a>.
 | |
|     (Measured using 
 | |
|     <a href="http://valgrind.org/docs/manual/cg-manual.html">cachegrind</a> on the
 | |
|     <a href="http://www.sqlite.org/src/artifact/83f6b3318f7ee">speedtest1.c</a> workload on
 | |
|     Ubuntu 14.04 x64 with gcc 4.8.2 and -Os. Your performance may vary.)
 | |
| <li>Added the <a href="c3ref/result_blob.html">sqlite3_result_zeroblob64()</a> and <a href="c3ref/bind_blob.html">sqlite3_bind_zeroblob64()</a>
 | |
|     interfaces.
 | |
| <p><b>Important bug fixes:</b>
 | |
| <li>Fix <a href="lang_createtable.html#createtabas">CREATE TABLE AS</a> so that columns of type TEXT never end up
 | |
|     holding an INT value.  Ticket
 | |
|     <a href="https://www.sqlite.org/src/info/f2ad7de056ab1dc9200">f2ad7de056ab1dc9200</a>
 | |
| <li>Fix <a href="lang_createtable.html#createtabas">CREATE TABLE AS</a> so that it does not leave NULL entries in the
 | |
|     <a href="schematab.html">sqlite_master table</a> if the SELECT statement on the right-hand side
 | |
|     aborts with an error.  Ticket
 | |
|     <a href="https://www.sqlite.org/src/info/873cae2b6e25b">873cae2b6e25b</a>
 | |
| <li>Fix the <a href="optoverview.html#skipscan">skip-scan optimization</a> so that it works correctly when
 | |
|     the <a href="optoverview.html#or_opt">OR optimization</a> is used on <a href="withoutrowid.html">WITHOUT ROWID</a> tables.  Ticket
 | |
|     <a href="https://www.sqlite.org/src/info/8fd39115d8f46">8fd39115d8f46</a>
 | |
| <li>Fix the <a href="c3ref/memory_highwater.html">sqlite3_memory_used()</a> and <a href="c3ref/memory_highwater.html">sqlite3_memory_highwater()</a> interfaces
 | |
|     so that they actually do provide a 64-bit answer.
 | |
| 
 | |
| <p><b>Hashes:</b>
 | |
| <li>SQLITE_SOURCE_ID: "2015-07-27 13:49:41 b8e92227a469de677a66da62e4361f099c0b79d0"
 | |
| <li>SHA1 for sqlite3.c: 719f6891abcd9c459b5460b191d731cd12a3643e
 | |
| 
 | |
| </ol></p>
 | |
| <a name="version_3_8_10_2"></a>
 | |
| <h3>2015-05-20 (3.8.10.2)</h3><p><ol class='lessindent'>
 | |
| <li>Fix an index corruption issue introduced by <a href="#version_3_8_7">version 3.8.7</a>.  An index
 | |
|     with a TEXT key can be corrupted by an <a href="lang_insert.html">INSERT</a> into the corresponding 
 | |
|     table if the table has two nested triggers that convert the key value to INTEGER
 | |
|     and back to TEXT again.
 | |
|     Ticket <a href="https://www.sqlite.org/src/info/34cd55d68e0e6e7c9a0711aab81a2ee3c354b4c0">34cd55d68e0</a>
 | |
| 
 | |
| <li>SQLITE_SOURCE_ID: "2015-05-20 18:17:19 2ef4f3a5b1d1d0c4338f8243d40a2452cc1f7fe4"
 | |
| <li>SHA1 for sqlite3.c: 638abb77965332c956dbbd2c8e4248e84da4eb63
 | |
| 
 | |
| </ol></p>
 | |
| <a name="version_3_8_10_1"></a>
 | |
| <h3>2015-05-09 (3.8.10.1)</h3><p><ol class='lessindent'>
 | |
| <li>Make <a href="c3ref/compileoption_get.html">sqlite3_compileoption_used()</a> responsive to the <a href="compile.html#enable_dbstat_vtab">SQLITE_ENABLE_DBSTAT_VTAB</a>
 | |
|     compile-time option.
 | |
| <li>Fix a harmless warning in the <a href="cli.html">command-line shell</a> on some versions of MSVC.
 | |
| <li>Fix minor issues with the <a href="dbstat.html">dbstat virtual table</a>.
 | |
| 
 | |
| <li>SQLITE_SOURCE_ID: "2015-05-09 12:14:55 05b4b1f2a937c06c90db70c09890038f6c98ec40"
 | |
| <li>SHA1 for sqlite3.c: 85e4e1c08c7df28ef61bb9759a0d466e0eefbaa2
 | |
| 
 | |
| </ol></p>
 | |
| <a name="version_3_8_10"></a>
 | |
| <h3>2015-05-07 (3.8.10)</h3><p><ol class='lessindent'>
 | |
| <li>Added the <a href="sqldiff.html">sqldiff.exe</a> utility program for computing the differences between two
 | |
|     SQLite database files.
 | |
| <li>Added the <a href="fts3.html#matchinfo-y">matchinfo y flag</a> to the 
 | |
|     <a href="fts3.html#matchinfo">matchinfo()</a> function of <a href="fts3.html">FTS3</a>.
 | |
| <li>Performance improvements for <a href="lang_select.html#orderby">ORDER BY</a>, <a href="lang_vacuum.html">VACUUM</a>, <a href="lang_createindex.html">CREATE INDEX</a>,
 | |
|     <a href="pragma.html#pragma_integrity_check">PRAGMA integrity_check</a>, and <a href="pragma.html#pragma_quick_check">PRAGMA quick_check</a>.
 | |
| <li>Fix many obscure problems discovered while <a href="testing.html#fuzztesting">SQL fuzzing</a>.
 | |
| <li>Identify all methods for important objects in the interface documentation.
 | |
|     (<a href="c3ref/context.html">example</a>)
 | |
| <li>Made the <a href="testing.html#aflfuzz">American Fuzzy Lop fuzzer</a>
 | |
|     a standard part of SQLite's <a href="testing.html">testing strategy</a>.
 | |
| <li>Add the ".binary" and ".limits" commands to the <a href="cli.html">command-line shell</a>.
 | |
| <li>Make the <a href="dbstat.html">dbstat virtual table</a> part of standard builds when
 | |
|     compiled with the <a href="compile.html#enable_dbstat_vtab">SQLITE_ENABLE_DBSTAT_VTAB</a> option.
 | |
| 
 | |
| <li>SQLITE_SOURCE_ID: "2015-05-07 11:53:08 cf975957b9ae671f34bb65f049acf351e650d437"
 | |
| <li>SHA1 for sqlite3.c: 0b34f0de356a3f21b9dfc761f3b7821b6353c570
 | |
| 
 | |
| </ol></p>
 | |
| <a name="version_3_8_9"></a>
 | |
| <h3>2015-04-08 (3.8.9)</h3><p><ol class='lessindent'>
 | |
| <li>Add VxWorks-7 as an officially supported and tested platform.
 | |
| <li>Added the <a href="c3ref/status.html">sqlite3_status64()</a> interface.
 | |
| <li>Fix memory size tracking so that it works even if SQLite uses more
 | |
|     than 2GiB of memory.
 | |
| <li>Added the <a href="pragma.html#pragma_index_xinfo">PRAGMA index_xinfo</a> command.
 | |
| <li>Fix a potential 32-bit integer overflow problem in the
 | |
|     <a href="c3ref/blob_read.html">sqlite3_blob_read()</a> and <a href="c3ref/blob_write.html">sqlite3_blob_write()</a> interfaces.
 | |
| <li>Ensure that prepared statements automatically reset on extended
 | |
|     error codes of SQLITE_BUSY and SQLITE_LOCKED even when compiled
 | |
|     using <a href="compile.html#omit_autoreset">SQLITE_OMIT_AUTORESET</a>.
 | |
| <li>Correct miscounts in the sqlite3_analyzer.exe utility related
 | |
|     to WITHOUT ROWID tables.
 | |
| <li>Added the ".dbinfo" command to the <a href="cli.html">command-line shell</a>.
 | |
| <li>Improve the performance of fts3/4 queries that use the OR operator 
 | |
|     and at least one auxiliary fts function.
 | |
| <li>Fix a bug in the fts3 snippet() function causing it to omit
 | |
|     leading separator characters from snippets that begin with the
 | |
|     first token in a column.
 | |
| <li>SQLITE_SOURCE_ID: "2015-04-08 12:16:33 8a8ffc862e96f57aa698f93de10dee28e69f6e09"
 | |
| <li>SHA1 for sqlite3.c: 49f1c3ae347e1327b5aaa6c7f76126bdf09c6f42
 | |
| 
 | |
| </ol></p>
 | |
| <a name="version_3_8_8_3"></a>
 | |
| <h3>2015-02-25 (3.8.8.3)</h3><p><ol class='lessindent'>
 | |
| <li>Fix a bug (ticket
 | |
|     <a href="https://www.sqlite.org/src/info/2326c258d02ead33">2326c258d02ead33</a>) that can lead
 | |
|     to incorrect results if the qualifying constraint of a <a href="partialindex.html">partial index</a> appears in the
 | |
|     ON clause of a LEFT JOIN.
 | |
| <li>Added the ability to link against the 
 | |
|     "<a href="https://github.com/antirez/linenoise">linenoise</a>"
 | |
|     command-line editing library in unix builds of the <a href="cli.html">command-line shell</a>.
 | |
| 
 | |
| <li>SQLITE_SOURCE_ID: "2015-02-25 13:29:11 9d6c1880fb75660bbabd693175579529785f8a6b"
 | |
| <li>SHA1 for sqlite3.c: 74ee38c8c6fd175ec85a47276dfcefe8a262827a
 | |
| 
 | |
| </ol></p>
 | |
| <a name="version_3_8_8_2"></a>
 | |
| <h3>2015-01-30 (3.8.8.2)</h3><p><ol class='lessindent'>
 | |
| <li>Enhance <a href="c3ref/wal_checkpoint_v2.html">sqlite3_wal_checkpoint_v2(TRUNCATE)</a> interface so that it truncates the
 | |
|     WAL file even if there is no checkpoint work to be done.
 | |
| 
 | |
| <li>SQLITE_SOURCE_ID: "2015-01-30 14:30:45 7757fc721220e136620a89c9d28247f28bbbc098"
 | |
| <li>SHA1 for sqlite3.c: 85ce79948116aa9a087ec345c9d2ce2c1d3cd8af
 | |
| 
 | |
| 
 | |
| </ol></p>
 | |
| <a name="version_3_8_8_1"></a>
 | |
| <h3>2015-01-20 (3.8.8.1)</h3><p><ol class='lessindent'>
 | |
| <li>Fix a bug in the sorting logic, present since version 3.8.4, that can cause
 | |
|     output to appear in the wrong order on queries that contains an ORDER BY clause,
 | |
|     a LIMIT clause, and that have approximately 60 or more columns in the result set.
 | |
|     Ticket <a href="https://www.sqlite.org/src/tktview?name=f97c4637102a3ae72b79">f97c4637102a3ae72b79</a>.
 | |
| 
 | |
| <li>SQLITE_SOURCE_ID: "2015-01-20 16:51:25 f73337e3e289915a76ca96e7a05a1a8d4e890d55"
 | |
| <li>SHA1 for sqlite3.c: 33987fb50dcc09f1429a653d6b47672f5a96f19e
 | |
| 
 | |
| </ol></p>
 | |
| <a name="version_3_8_8"></a>
 | |
| <h3>2015-01-16 (3.8.8)</h3><p><ol class='lessindent'>
 | |
| <p><b>New Features:</b>
 | |
| <li>Added the <a href="pragma.html#pragma_data_version">PRAGMA data_version</a> command that can be used to determine if
 | |
|     a database file has been modified by another process.
 | |
| <li>Added the <a href="c3ref/c_checkpoint_full.html">SQLITE_CHECKPOINT_TRUNCATE</a> option to the
 | |
|     <a href="c3ref/wal_checkpoint_v2.html">sqlite3_wal_checkpoint_v2()</a> interface, with corresponding enhancements
 | |
|     to <a href="pragma.html#pragma_wal_checkpoint">PRAGMA wal_checkpoint</a>.
 | |
| <li>Added the <a href="c3ref/stmt_scanstatus.html">sqlite3_stmt_scanstatus()</a> interface, available only when
 | |
|     compiled with <a href="compile.html#enable_stmt_scanstatus">SQLITE_ENABLE_STMT_SCANSTATUS</a>.
 | |
| <li>The <a href="c3ref/table_column_metadata.html">sqlite3_table_column_metadata()</a> is enhanced to work correctly on
 | |
|     <a href="withoutrowid.html">WITHOUT ROWID</a> tables and to check for the existence of a
 | |
|     a table if the column name parameter is NULL.  The interface is now
 | |
|     also included in the build by default, without requiring
 | |
|     the <a href="compile.html#enable_column_metadata">SQLITE_ENABLE_COLUMN_METADATA</a> compile-time option.
 | |
| <li>Added the <a href="compile.html#enable_api_armor">SQLITE_ENABLE_API_ARMOR</a> compile-time option.
 | |
| <li>Added the <a href="compile.html#reverse_unordered_selects">SQLITE_REVERSE_UNORDERED_SELECTS</a> compile-time option.
 | |
| <li>Added the <a href="compile.html#sorter_pmasz">SQLITE_SORTER_PMASZ</a> compile-time option and <a href="c3ref/c_config_covering_index_scan.html#sqliteconfigpmasz">SQLITE_CONFIG_PMASZ</a>
 | |
|     start-time option.
 | |
| <li>Added the <a href="c3ref/c_config_covering_index_scan.html#sqliteconfigpcachehdrsz">SQLITE_CONFIG_PCACHE_HDRSZ</a> option to <a href="c3ref/config.html">sqlite3_config()</a>
 | |
|     which makes it easier for applications to determine the appropriate
 | |
|     amount of memory for use with <a href="c3ref/c_config_covering_index_scan.html#sqliteconfigpagecache">SQLITE_CONFIG_PAGECACHE</a>.
 | |
| <li>The number of rows in a <a href="lang_select.html#values">VALUES clause</a> is no longer limited by
 | |
|     <a href="c3ref/c_limit_attached.html#sqlitelimitcompoundselect">SQLITE_LIMIT_COMPOUND_SELECT</a>.
 | |
| <li>Added the <a href="https://www.sqlite.org/src/artifact/f971962e92ebb8b0">eval.c</a>
 | |
|     <a href="loadext.html">loadable extension</a> that implements an eval() SQL function that will recursively
 | |
|     evaluate SQL.
 | |
| <p><b>Performance Enhancements:</b>
 | |
| <li>Reduce the number of memcpy() operations involved in balancing a b-tree,
 | |
|     for 3.2% overall performance boost.
 | |
| <li>Improvements to cost estimates for the <a href="optoverview.html#skipscan">skip-scan optimization</a>.
 | |
| <li>The <a href="optoverview.html#autoindex">automatic indexing</a> optimization is now capable of generating
 | |
|     a <a href="partialindex.html">partial index</a> if that is appropriate.
 | |
| <p><b>Bug fixes:</b>
 | |
| <li>Ensure durability following a power loss with
 | |
|     "PRAGMA journal_mode=TRUNCATE" by calling fsync() right after truncating
 | |
|     the journal file.
 | |
| <li>The query planner now recognizes that any column in the right-hand
 | |
|     table of a LEFT JOIN can be NULL, even if that column has a NOT NULL
 | |
|     constraint.  Avoid trying to optimize out NULL tests in those cases.
 | |
|     Fix for ticket
 | |
|     <a href="https://www.sqlite.org/src/info/6f2222d550f5b0ee7ed">6f2222d550f5b0ee7ed</a>.
 | |
| <li>Make sure ORDER BY puts rows in ascending order even if the DISTINCT
 | |
|     operator  is implemented using a descending index.  Fix for ticket
 | |
|     <a href="https://www.sqlite.org/src/info/c5ea805691bfc4204b1cb9e">c5ea805691bfc4204b1cb9e</a>.
 | |
| <li>Fix data races that might occur under stress when running with many threads
 | |
|     in <a href="sharedcache.html">shared cache mode</a> where some of the threads are opening and
 | |
|     closing connections.
 | |
| <li>Fix obscure crash bugs found by
 | |
|     <a href="http://lcamtuf.coredump.cx/afl/">american fuzzy lop</a>.  Ticket
 | |
|     <a href="https://www.sqlite.org/src/info/a59ae93ee990a55">a59ae93ee990a55</a>.
 | |
| <li>Work around a GCC optimizer bug (for gcc 4.2.1 on MacOS 10.7) that caused the 
 | |
|     <a href="rtree.html">R-Tree extension</a> to compute incorrect results when compiled with -O3.
 | |
| <p><b>Other changes:</b>
 | |
| <li>Disable the use of the strchrnul() C-library routine unless it is
 | |
|     specifically enabled using the -DHAVE_STRCHRNULL compile-time option.
 | |
| <li>Improvements to the effectiveness and accuracy of the
 | |
|     <a href="lang_corefunc.html#likelihood">likelihood()</a>, <a href="lang_corefunc.html#likely">likely()</a>, and <a href="lang_corefunc.html#unlikely">unlikely()</a> SQL hint functions.
 | |
| 
 | |
| <li>SQLITE_SOURCE_ID: "2015-01-16 12:08:06 7d68a42face3ab14ed88407d4331872f5b243fdf"
 | |
| <li>SHA1 for sqlite3.c: 91aea4cc722371d58aae3d22e94d2a4165276905
 | |
| 
 | |
| </ol></p>
 | |
| <a name="version_3_8_7_4"></a>
 | |
| <h3>2014-12-09 (3.8.7.4)</h3><p><ol class='lessindent'>
 | |
| <li>Bug fix: Add in a mutex that was omitted from the previous release.
 | |
| <li>SQLITE_SOURCE_ID: "2014-12-09 01:34:36 f66f7a17b78ba617acde90fc810107f34f1a1f2e"
 | |
| <li>SHA1 for sqlite3.c: 0a56693a3c24aa3217098afab1b6fecccdedfd23
 | |
| 
 | |
| </ol></p>
 | |
| <a name="version_3_8_7_3"></a>
 | |
| <h3>2014-12-05 (3.8.7.3)</h3><p><ol class='lessindent'>
 | |
| <li>Bug fix: Ensure the cached KeyInfo objects (an internal abstraction not visible to the
 | |
|     application) do not go stale when operating in <a href="sharedcache.html">shared cache mode</a> and frequently closing
 | |
|     and reopening some database connections while leaving other database connections on the
 | |
|     same shared cache open continuously.  Ticket 
 | |
|     <a href="https://www.sqlite.org/src/info/e4a18565a36884b00edf">e4a18565a36884b00edf</a>.
 | |
| <li>Bug fix: Recognize that any column in the right-hand table of a LEFT JOIN can be
 | |
|     NULL even if the column has a NOT NULL constraint.  Do not apply optimizations that
 | |
|     assume the column is never NULL.  Ticket
 | |
|     <a href="https://www.sqlite.org/src/info/6f2222d550f5b0ee7ed">6f2222d550f5b0ee7ed</a>.
 | |
| 
 | |
| <li>SQLITE_SOURCE_ID: "2014-12-05 22:29:24 647e77e853e81a5effeb4c33477910400a67ba86"
 | |
| <li>SHA1 for sqlite3.c: 3ad2f5ba3a4a3e3e51a1dac9fda9224b359f0261
 | |
| 
 | |
| </ol></p>
 | |
| <a name="version_3_8_7_2"></a>
 | |
| <h3>2014-11-18 (3.8.7.2)</h3><p><ol class='lessindent'>
 | |
| <li>Enhance the <a href="lang_transaction.html">ROLLBACK</a> command so that pending queries are allowed to continue as long
 | |
|     as the schema is unchanged.  Formerly, a ROLLBACK would cause all pending queries to
 | |
|     fail with an <a href="rescode.html#abort">SQLITE_ABORT</a> or <a href="rescode.html#abort_rollback">SQLITE_ABORT_ROLLBACK</a> error.  That error is still returned
 | |
|     if the ROLLBACK modifies the schema.
 | |
| <li>Bug fix: Make sure that NULL results from OP_Column are fully and completely NULL and
 | |
|     do not have the MEM_Ephem bit set.
 | |
|     Ticket <a href="http://www.sqlite.org/src/info/094d39a4c95ee4">094d39a4c95ee4</a>.
 | |
| <li>Bug fix:  The %c format in sqlite3_mprintf() is able to handle precisions greater than 70.
 | |
| <li>Bug fix:  Do not automatically remove the DISTINCT keyword from a SELECT that forms
 | |
|     the right-hand side of an IN operator since it is necessary if the SELECT also 
 | |
|     contains a LIMIT.
 | |
|     Ticket <a href="http://www.sqlite.org/src/info/db87229497">db87229497</a>.
 | |
| 
 | |
| <li>SQLITE_SOURCE_ID: "2014-11-18 20:57:56 2ab564bf9655b7c7b97ab85cafc8a48329b27f93"
 | |
| <li>SHA1 for sqlite3.c: b2a68d5783f48dba6a8cb50d8bf69b238c5ec53a
 | |
| 
 | |
| </ol></p>
 | |
| <a name="version_3_8_7_1"></a>
 | |
| <h3>2014-10-29 (3.8.7.1)</h3><p><ol class='lessindent'>
 | |
| <li>In <a href="pragma.html#pragma_journal_mode">PRAGMA journal_mode=TRUNCATE</a> mode, call fsync() immediately after truncating
 | |
|     the journal file to ensure that the transaction is durable across a power loss.
 | |
| <li>Fix an assertion fault that can occur when updating the NULL value of a field
 | |
|     at the end of a table that was added using <a href="lang_altertable.html">ALTER TABLE ADD COLUMN</a>.
 | |
| <li>Do not attempt to use the strchrnul() function from the standard C library unless
 | |
|     the HAVE_STRCHRNULL compile-time option is set.
 | |
| <li>Fix a couple of problems associated with running an UPDATE or DELETE on a
 | |
|     <a href="lang_createview.html">VIEW</a> with a <a href="lang_createtable.html#rowid">rowid</a> in the WHERE clause.
 | |
| 
 | |
| <li>SQLITE_SOURCE_ID: "2014-10-29 13:59:56 3b7b72c4685aa5cf5e675c2c47ebec10d9704221"
 | |
| <li>SHA1 for sqlite3.c: 2d25bd1a73dc40f538f3a81c28e6efa5999bdf0c
 | |
| 
 | |
| </ol></p>
 | |
| <a name="version_3_8_7"></a>
 | |
| <h3>2014-10-17 (3.8.7)</h3><p><ol class='lessindent'>
 | |
| <p><b>Performance Enhancements:</b>
 | |
| <li>Many micro-optimizations result in 20.3% more work for the same number
 | |
|     of CPU cycles relative to the previous release. 
 | |
|     The cumulative performance increase since <a href="#version_3_8_0">version 3.8.0</a> is 61%.
 | |
|     (Measured using 
 | |
|     <a href="http://valgrind.org/docs/manual/cg-manual.html">cachegrind</a> on the
 | |
|     <a href="http://www.sqlite.org/src/artifact/83f6b3318f7ee">speedtest1.c</a> workload on
 | |
|     Ubuntu 13.10 x64 with gcc 4.8.1 and -Os. Your performance may vary.)
 | |
| <li>The sorter can use auxiliary helper threads to increase real-time response.
 | |
|     This feature is off by default and may be
 | |
|     enabled using the <a href="pragma.html#pragma_threads">PRAGMA threads</a> command or the <a href="compile.html#default_worker_threads">SQLITE_DEFAULT_WORKER_THREADS</a>
 | |
|     compile-time option.
 | |
| <li>Enhance the <a href="optoverview.html#skipscan">skip-scan</a> optimization so that it is able to skip index terms that
 | |
|     occur in the middle of the index, not just as the left-hand side of the index.
 | |
| <li>Improved optimization of <a href="lang_expr.html#castexpr">CAST</a> operators.
 | |
| <li>Various improvements in how the query planner uses <a href="fileformat2.html#stat4tab">sqlite_stat4</a>
 | |
|     information to estimate plan costs.
 | |
| <p><b>New Features:</b>
 | |
| <li>Added new interfaces with 64-bit length parameters:
 | |
|     <a href="c3ref/free.html">sqlite3_malloc64()</a>,
 | |
|     <a href="c3ref/free.html">sqlite3_realloc64()</a>,
 | |
|     <a href="c3ref/bind_blob.html">sqlite3_bind_blob64()</a>,
 | |
|     <a href="c3ref/result_blob.html">sqlite3_result_blob64()</a>,
 | |
|     <a href="c3ref/bind_blob.html">sqlite3_bind_text64()</a>, and
 | |
|     <a href="c3ref/result_blob.html">sqlite3_result_text64()</a>.
 | |
| <li>Added the new interface <a href="c3ref/free.html">sqlite3_msize()</a> that returns the size of a memory allocation
 | |
|     obtained from <a href="c3ref/free.html">sqlite3_malloc64()</a> and its variants.
 | |
| <li>Added the <a href="c3ref/c_limit_attached.html#sqlitelimitworkerthreads">SQLITE_LIMIT_WORKER_THREADS</a> option to <a href="c3ref/limit.html">sqlite3_limit()</a> and
 | |
|     <a href="pragma.html#pragma_threads">PRAGMA threads</a> command for configuring the number of available worker threads.
 | |
| <li>The <a href="spellfix1.html">spellfix1</a> extension allows the application to optionally specify the rowid for
 | |
|     each INSERT.
 | |
| <li>Added the <a href="http://www.sqlite.org/src/doc/trunk/ext/userauth/user-auth.txt">User Authentication</a>
 | |
|     extension.
 | |
| <p><b>Bug Fixes:</b>
 | |
| <li>Fix a bug in the <a href="partialindex.html">partial index</a> implementation that might result in an incorrect
 | |
|     answer if a partial index is used in a subquery or in a <a href="lang_createview.html">view</a>.
 | |
|     Ticket <a href="http://www.sqlite.org/src/info/98d973b8f5">98d973b8f5</a>.
 | |
| <li>Fix a query planner bug that might cause a table to be scanned in the wrong direction
 | |
|     (thus reversing the order of output) when a DESC index is used to implement the ORDER BY
 | |
|     clause on a query that has an identical GROUP BY clause.
 | |
|     Ticket <a href="http://www.sqlite.org/src/info/ba7cbfaedc7e6">ba7cbfaedc7e6</a>.
 | |
| <li>Fix a bug in <a href="c3ref/profile.html">sqlite3_trace()</a> that was causing it to sometimes fail to print
 | |
|     an SQL statement if that statement needed to be re-prepared.
 | |
|     Ticket <a href="http://www.sqlite.org/src/info/11d5aa455e0d98f3c1e6a08">11d5aa455e0d98f3c1e6a08</a>
 | |
| <li>Fix a faulty assert() statement.
 | |
|     Ticket <a href="http://www.sqlite.org/src/info/369d57fb8e5ccdff06f1">369d57fb8e5ccdff06f1</a>
 | |
| <p><b>Test, Debug, and Analysis Changes:</b>
 | |
| <li>Show ASCII-art abstract syntax tree diagrams using the ".selecttrace"
 | |
|     and ".wheretrace" commands in the 
 | |
|     <a href="cli.html">command-line shell</a> when compiled with <a href="compile.html#debug">SQLITE_DEBUG</a>, SQLITE_ENABLE_SELECTTRACE,
 | |
|     and SQLITE_ENABLE_WHERETRACE.  Also provide the sqlite3TreeViewExpr() and
 | |
|     sqlite3TreeViewSelect() entry points that can be invoked from with the
 | |
|     debugger to show the parse tree when stopped at a breakpoint.
 | |
| <li>Drop support for SQLITE_ENABLE_TREE_EXPLAIN.  The SELECTTRACE mechanism provides
 | |
|     more useful diagnostics information.
 | |
| <li>New options to the <a href="cli.html">command-line shell</a> for configuring auxiliary
 | |
|     memory usage: --pagecache, --lookaside, and --scratch.
 | |
| <li>SQLITE_SOURCE_ID: "2014-10-17 11:24:17 e4ab094f8afce0817f4074e823fabe59fc29ebb4"
 | |
| <li>SHA1 for sqlite3.c: 56dcf5e931a9e1fa12fc2d600cd91d3bf9b639cd
 | |
| 
 | |
| 
 | |
| </ol></p>
 | |
| <a name="version_3_8_6"></a>
 | |
| <h3>2014-08-15 (3.8.6)</h3><p><ol class='lessindent'>
 | |
| <li>Added support for <a href="lang_expr.html#hexint">hexadecimal integer literals</a> in the SQL parser.
 | |
|     (Ex: 0x123abc)
 | |
| <li>Enhanced the <a href="pragma.html#pragma_integrity_check">PRAGMA integrity_check</a> command to detect <a href="lang_createtable.html#uniqueconst">UNIQUE</a> and
 | |
|     <a href="lang_createtable.html#notnullconst">NOT NULL</a> constraint violations.
 | |
| <li>Increase the maximum value of <a href="limits.html#max_attached">SQLITE_MAX_ATTACHED</a> from 62 to 125.
 | |
| <li>Increase the timeout in <a href="wal.html">WAL mode</a> before issuing an <a href="rescode.html#protocol">SQLITE_PROTOCOL</a>
 | |
|     error from 1 second to 10 seconds.
 | |
| <li>Added the <a href="lang_corefunc.html#likely">likely(X)</a> SQL function.
 | |
| <li>The <a href="fts3.html#unicode61">unicode61</a> tokenizer is now included in <a href="fts3.html#fts4">FTS4</a> by default.
 | |
| <li>Trigger automatic reprepares on all prepared statements when <a href="lang_analyze.html">ANALYZE</a> is
 | |
|     run.
 | |
| <li>Added a new
 | |
|     <a href="loadext.html">loadable extension</a> source code file to the source tree:
 | |
|     <a href="http://www.sqlite.org/src/finfo?name=ext/misc/fileio.c">fileio.c</a>
 | |
| <li>Add extension functions <a href="cli.html#fileio">readfile(X) and writefile(X,Y)</a>
 | |
|     (using code copy/pasted from fileio.c in the previous bullet) to the
 | |
|     <a href="cli.html">command-line shell</a>.
 | |
| <li>Added the <a href="cli.html#fullschema">.fullschema</a> dot-command to the <a href="cli.html">command-line shell</a>.
 | |
| <p><b>Performance Enhancements:</b>
 | |
| <li>Deactivate the <a href="lang_select.html#distinct">DISTINCT</a> keyword on subqueries on the
 | |
|     right-hand side of the <a href="lang_expr.html#in_op">IN operator</a>.
 | |
| <li>Add the capability of evaluating an <a href="lang_expr.html#in_op">IN operator</a> as a sequence
 | |
|     of comparisons as an alternative to using a table lookup.  Use the sequence
 | |
|     of comparisons implementation in circumstances where it is likely to be
 | |
|     faster, such as when the right-hand side of the IN operator
 | |
|     is small and/or changes frequently.
 | |
| <li>The query planner now uses <a href="fileformat2.html#stat4tab">sqlite_stat4</a> information (created by <a href="lang_analyze.html">ANALYZE</a>)
 | |
|     to help determine if the <a href="optoverview.html#skipscan">skip-scan optimization</a> is appropriate.
 | |
| <li>Ensure that the query planner never tries to use a self-made transient
 | |
|     index in place of a schema-defined index.
 | |
| <li>Other minor tweaks to improve the quality of <a href="opcode.html">VDBE</a> code.
 | |
| <p><b>Bug Fixes:</b>
 | |
| <li>Fix a bug in <a href="lang_createindex.html">CREATE UNIQUE INDEX</a>, introduced when <a href="withoutrowid.html">WITHOUT ROWID</a>
 | |
|     support added in version 3.8.2, that allows a non-unique NOT NULL column to be
 | |
|     given a UNIQUE index.
 | |
|     Ticket <a href="http://www.sqlite.org/src/info/9a6daf340df99ba93c">9a6daf340df99ba93c</a>
 | |
| <li>Fix a bug in <a href="rtree.html">R-Tree extension</a>, introduced in the previous release,
 | |
|     that can cause an
 | |
|     incorrect results for queries that use the rowid of the R-Tree on the
 | |
|     left-hand side of an <a href="lang_expr.html#in_op">IN operator</a>.
 | |
|     Ticket <a href="http://www.sqlite.org/src/info/d2889096e7bdeac6">d2889096e7bdeac6</a>.
 | |
| <li>Fix the <a href="c3ref/stmt_busy.html">sqlite3_stmt_busy()</a> interface so that it gives the correct answer
 | |
|     for <a href="lang_transaction.html">ROLLBACK</a> statements that have been stepped but never reset.
 | |
| <li>Fix a bug in that would cause a null pointer to be dereferenced
 | |
|     if a column with a DEFAULT that is an aggregate function tried to usee its
 | |
|     DEFAULT.
 | |
|     Ticket <a href="http://www.sqlite.org/src/info/3a88d85f36704eebe1">3a88d85f36704eebe1</a>
 | |
| <li>CSV output from the <a href="cli.html">command-line shell</a> now always uses CRNL for the
 | |
|     row separator and avoids inserting CR in front of NLs contained in
 | |
|     data.
 | |
| <li>Fix a <a href="datatype3.html#affinity">column affinity</a> problem with the <a href="lang_expr.html#in_op">IN operator</a>.
 | |
|     Ticket <a href="http://www.sqlite.org/src/info/9a8b09f8e6">9a8b09f8e6</a>.
 | |
| <li>Fix the <a href="lang_analyze.html">ANALYZE</a> command so that it adds correct samples for
 | |
|     <a href="withoutrowid.html">WITHOUT ROWID</a> tables in the <a href="fileformat2.html#stat4tab">sqlite_stat4</a> table.
 | |
|     Ticket <a href="http://www.sqlite.org/src/info/b2fa5424e6fcb15">b2fa5424e6fcb15</a>.
 | |
| 
 | |
| <li>SQLITE_SOURCE_ID: "2014-08-15 11:46:33 9491ba7d738528f168657adb43a198238abde19e"
 | |
| <li>SHA1 for sqlite3.c: 72c64f05cd9babb9c0f9b3c82536d83be7804b1c
 | |
| 
 | |
| </ol></p>
 | |
| <a name="version_3_8_5"></a>
 | |
| <h3>2014-06-04 (3.8.5)</h3><p><ol class='lessindent'>
 | |
| <li>Added support for <a href="queryplanner.html#partialsort">partial sorting by index</a>.
 | |
| <li>Enhance the query planner so that it always prefers an index that uses a superset of
 | |
|     WHERE clause terms relative to some other index.
 | |
| <li>Improvements to the <a href="fts3.html#*fts4automergecmd">automerge command</a> of <a href="fts3.html#fts4">FTS4</a> to better control the index size
 | |
|     for a full-text index that is subject to a large number of updates.
 | |
| <li>Added the <a href="rtree.html#xquery">sqlite3_rtree_query_callback()</a> interface to <a href="rtree.html">R-Tree extension</a>
 | |
| <li>Added new <a href="uri.html#coreqp">URI query parameters</a> "nolock" and "immutable".
 | |
| <li>Use less memory by not remembering CHECK constraints on read-only
 | |
|     database connections.
 | |
| <li>Enable the <a href="queryplanner.html#or_in_where">OR optimization</a> for <a href="withoutrowid.html">WITHOUT ROWID</a> tables.
 | |
| <li>Render expressions of the form "x IN (?)" (with a single value in
 | |
|     the list on the right-hand side of the IN operator) as if they where "x==?",
 | |
|     Similarly optimize "x NOT IN (?)"
 | |
| <li>Add the ".system" and ".once" commands to the <a href="cli.html">command-line shell</a>.
 | |
| <li>Added the <a href="c3ref/c_iocap_atomic.html">SQLITE_IOCAP_IMMUTABLE</a> bit to the set of bits that can be returned by
 | |
|     the xDeviceCharacteristics method of a <a href="vfs.html">VFS</a>.
 | |
| <li>Added the <a href="c3ref/c_testctrl_always.html">SQLITE_TESTCTRL_BYTEORDER</a> test control.
 | |
| <p><b>Bug Fixes:</b>
 | |
| <li>OFFSET clause ignored on queries without a FROM clause.
 | |
|     Ticket <a href="http://www.sqlite.org/src/info/07d6a0453d">07d6a0453d</a>
 | |
| <li>Assertion fault on queries involving expressions of the form
 | |
|     "x IN (?)".  Ticket <a href="http://www.sqlite.org/src/info/e39d032577">e39d032577</a>.
 | |
| <li>Incorrect column datatype reported.
 | |
|     Ticket <a href="http://www.sqlite.org/src/info/a8a0d2996a">a8a0d2996a</a>
 | |
| <li>Duplicate row returned on a query against a table with more than
 | |
|     16 indices, each on a separate column, and all used via OR-connected constraints.
 | |
|     Ticket <a href="http://www.sqlite.org/src/info/10fb063b11">10fb063b11</a>
 | |
| <li>Partial index causes assertion fault on UPDATE OR REPLACE.
 | |
|     Ticket <a href="http://www.sqlite.org/src/info/2ea3e9fe63">2ea3e9fe63</a>
 | |
| <li>Crash when calling undocumented SQL function sqlite_rename_parent()
 | |
|     with NULL parameters.
 | |
|     Ticket <a href="http://www.sqlite.org/src/info/264b970c4379fd">264b970c43</a>
 | |
| <li>ORDER BY ignored if the query has an identical GROUP BY.
 | |
|     Ticket <a href="http://www.sqlite.org/src/info/b75a9ca6b0499">b75a9ca6b0</a>
 | |
| <li>The group_concat(x,'') SQL function returns NULL instead of an empty string
 | |
|     when all inputs are empty strings.  
 | |
|     Ticket <a href="http://www.sqlite.org/src/info/55746f9e65f85">55746f9e65</a>
 | |
| <li>Fix a bug in the VDBE code generator that caused crashes when
 | |
|     doing an INSERT INTO ... SELECT statement where the number of columns
 | |
|     being inserted is larger than the number of columns in the destination
 | |
|     table.
 | |
|     Ticket <a href="http://www.sqlite.org/src/info/e9654505cfda9">e9654505cfd</a>
 | |
| <li>Fix a problem in CSV import in the <a href="cli.html">command-line shell</a>
 | |
|     where if the leftmost field of the first row
 | |
|     in the CSV file was both zero bytes in size and unquoted no data would
 | |
|     be imported.
 | |
| <li>Fix a problem in FTS4 where the left-most column that contained
 | |
|     the <a href="fts3.html#fts4notindexed">notindexed column</a> name as a prefix
 | |
|     was not indexed rather than the column whose name matched exactly.
 | |
| <li>Fix the <a href="c3ref/db_readonly.html">sqlite3_db_readonly()</a> interface so that it returns true if
 | |
|     the database is read-only due to the file format write version number
 | |
|     being too large.
 | |
| 
 | |
| <li>SQLITE_SOURCE_ID: "2014-06-04 14:06:34 b1ed4f2a34ba66c29b130f8d13e9092758019212"
 | |
| <li>SHA1 for sqlite3.c: 7bc194957238c61b1a47f301270286be5bc5208c
 | |
| 
 | |
| </ol></p>
 | |
| <a name="version_3_8_4_3"></a>
 | |
| <h3>2014-04-03 (3.8.4.3)</h3><p><ol class='lessindent'>
 | |
| <li>Add a 
 | |
|     <a href="http://www.sqlite.org/src/fdiff?sbs=1&v1=7d539cedb1c&v2=ebad891b7494d&smhdr">one-character fix</a>
 | |
|     for a problem that might cause incorrect query results on a query that mixes
 | |
|     DISTINCT, GROUP BY in a subquery, and ORDER BY.
 | |
|     <a href="http://www.sqlite.org/src/info/98825a79ce1456863">Ticket 98825a79ce14</a>.
 | |
| <li>SQLITE_SOURCE_ID: "2014-04-03 16:53:12 a611fa96c4a848614efe899130359c9f6fb889c3"
 | |
| <li>SHA1 for sqlite3.c: 310a1faeb9332a3cd8d1f53b4a2e055abf537bdc
 | |
| 
 | |
| </ol></p>
 | |
| <a name="version_3_8_4_2"></a>
 | |
| <h3>2014-03-26 (3.8.4.2)</h3><p><ol class='lessindent'>
 | |
| <li>Fix a potential buffer overread that could result when trying to search a
 | |
|     corrupt database file.
 | |
| <li>SQLITE_SOURCE_ID: "2014-03-26 18:51:19 02ea166372bdb2ef9d8dfbb05e78a97609673a8e"
 | |
| <li>SHA1 for sqlite3.c: 4685ca86c2ea0649ed9f59a500013e90b3fe6d03
 | |
| 
 | |
| </ol></p>
 | |
| <a name="version_3_8_4_1"></a>
 | |
| <h3>2014-03-11 (3.8.4.1)</h3><p><ol class='lessindent'>
 | |
| <li>Work around a C-preprocessor macro conflict that breaks the build for some
 | |
|     configurations with Microsoft Visual Studio.
 | |
| <li>When computing the cost of the <a href="optoverview.html#skipscan">skip-scan optimization</a>, take into account the
 | |
|     fact that multiple seeks are required.
 | |
| <li>SQLITE_SOURCE_ID: "2014-03-11 15:27:36 018d317b1257ce68a92908b05c9c7cf1494050d0"
 | |
| <li>SHA1 for sqlite3.c: d5cd1535053a50aa8633725e3595740b33709ac5
 | |
| 
 | |
| </ol></p>
 | |
| <a name="version_3_8_4"></a>
 | |
| <h3>2014-03-10 (3.8.4)</h3><p><ol class='lessindent'>
 | |
| <li>Code optimization and refactoring for improved performance.
 | |
| <li>Add the ".clone" and ".save" commands to the command-line shell.
 | |
| <li>Update the banner on the command-line shell to alert novice users when they
 | |
|     are using an ephemeral in-memory database.
 | |
| <li>Fix editline support in the command-line shell.
 | |
| <li>Add support for coverage testing of VDBE programs using the
 | |
|     <a href="c3ref/c_testctrl_always.html">SQLITE_TESTCTRL_VDBE_COVERAGE</a> verb of <a href="c3ref/test_control.html">sqlite3_test_control()</a>.
 | |
| <li>Update the _FILE_OFFSET_BITS macro so that builds work again on QNX.
 | |
| <li>Change the datatype of SrcList.nSrc from type u8 to type int to work around 
 | |
|     an issue in the C compiler on AIX.
 | |
| <li>Get extension loading working on Cygwin.
 | |
| <li>Bug fix: Fix the <a href="lang_corefunc.html#char">char()</a> SQL function so that it returns an empty string
 | |
|     rather than an "out of memory" error when called with zero arguments. 
 | |
| <li>Bug fix: DISTINCT now recognizes that a <a href="lang_corefunc.html#zeroblob">zeroblob</a> and a blob of all
 | |
|     0x00 bytes are the same thing. 
 | |
|     <a href="http://www.sqlite.org/src/info/fccbde530a">Ticket [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="http://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="http://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="http://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="http://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="http://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="http://www.sqlite.org/src/info/4c86b126f2">4c86b126f2</a>)
 | |
|     that causes rows to go missing on some queries with OR clauses and
 | |
|     IS NOT NULL operators in the WHERE clause, when the <a href="compile.html#enable_stat3">SQLITE_ENABLE_STAT3</a>
 | |
|     or <a href="compile.html#enable_stat4">SQLITE_ENABLE_STAT4</a> compile-time options are used.
 | |
| <li>Fix a harmless compiler warning that was causing problems for VS2013.
 | |
| <li>SQLITE_SOURCE_ID: "2014-02-11 14:52:19 ea3317a4803d71d88183b29f1d3086f46d68a00e"
 | |
| <li>SHA1 for sqlite3.c: 990004ef2d0eec6a339e4caa562423897fe02bf0
 | |
| 
 | |
| </ol></p>
 | |
| <a name="version_3_8_3"></a>
 | |
| <h3>2014-02-03 (3.8.3)</h3><p><ol class='lessindent'>
 | |
| <li>Added support for <a href="lang_with.html">common table expressions</a> and the <a href="lang_with.html">WITH clause</a>.
 | |
| <li>Added the <a href="lang_corefunc.html#printf">printf()</a> SQL function.
 | |
| <li>Added <a href="c3ref/c_deterministic.html#sqlitedeterministic">SQLITE_DETERMINISTIC</a> as an optional bit in the 4th argument to the
 | |
|     <a href="c3ref/create_function.html">sqlite3_create_function()</a> and related interfaces, providing applications with
 | |
|     the ability to create new functions that can be factored out of inner loops when
 | |
|     they have constant arguments.
 | |
| <li>Add <a href="rescode.html#readonly_dbmoved">SQLITE_READONLY_DBMOVED</a> error code, returned at the beginning of a
 | |
|     transaction, to indicate that the underlying database file has been renamed
 | |
|     or moved out from under SQLite.
 | |
| <li>Allow arbitrary expressions, including function calls and subqueries, in
 | |
|     the filename argument to <a href="lang_attach.html">ATTACH</a>.
 | |
| <li>Allow a <a href="lang_select.html#values">VALUES clause</a> to be used anywhere a <a href="lang_select.html">SELECT</a> statement is valid.
 | |
| <li>Reseed the PRNG used by <a href="c3ref/randomness.html">sqlite3_randomness(N,P)</a> when invoked with N==0.
 | |
|     Automatically reseed after a fork() on unix.
 | |
| <li>Enhance the <a href="spellfix1.html">spellfix1</a> virtual table so that it can search efficiently by rowid.
 | |
| <li>Performance enhancements.
 | |
| <li>Improvements to the comments in the VDBE byte-code display when running <a href="lang_explain.html">EXPLAIN</a>.
 | |
| <li>Add the "%token_class" directive to <a href="lemon.html">Lemon parser generator</a> and use it to simplify
 | |
|     the grammar.
 | |
| <li>Change the <a href="lemon.html">Lemon</a> source code to avoid calling C-library functions that OpenBSD
 | |
|     considers dangerous.  (Ex: sprintf).
 | |
| <li>Bug fix: In the <a href="cli.html">command-line shell</a> CSV import feature, do not end a field
 | |
|     when an escaped double-quote occurs at the end of a CRLN line.
 | |
| <li>SQLITE_SOURCE_ID: 
 | |
|     "2014-02-03 13:52:03 e816dd924619db5f766de6df74ea2194f3e3b538"
 | |
| <li>SHA1 for sqlite3.c: 98a07da78f71b0275e8d9c510486877adc31dbee
 | |
| 
 | |
| </ol></p>
 | |
| <a name="version_3_8_2"></a>
 | |
| <h3>2013-12-06 (3.8.2)</h3><p><ol class='lessindent'>
 | |
| <li>Changed the defined behavior for the <a href="lang_expr.html#castexpr">CAST expression</a> when floating point values
 | |
|     greater than  +9223372036854775807 are cast into 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="http://www.sqlite.org/src/info/a5c8ed66ca">a5c8ed66ca</a>.
 | |
| 
 | |
| <li>SQLITE_SOURCE_ID: 
 | |
|     "2013-10-17 12:57:35 c78be6d786c19073b3a6730dfe3fb1be54f5657a"
 | |
| <li>SHA1 for sqlite3.c: 0a54d76566728c2ba96292a49b138e4f69a7c391
 | |
| 
 | |
| </ol></p>
 | |
| <a name="version_3_8_0_2"></a>
 | |
| <h3>2013-09-03 (3.8.0.2)</h3><p><ol class='lessindent'>
 | |
| <li>Fix a bug in the optimization that attempts to omit unused LEFT JOINs
 | |
| 
 | |
| <li>SQLITE_SOURCE_ID: 
 | |
|     "2013-09-03 17:11:13 7dd4968f235d6e1ca9547cda9cf3bd570e1609ef"
 | |
| <li>SHA1 for sqlite3.c: 6cf0c7b46975a87a0dc3fba69c229a7de61b0c21
 | |
| 
 | |
| </ol></p>
 | |
| <a name="version_3_8_0_1"></a>
 | |
| <h3>2013-08-29 (3.8.0.1)</h3><p><ol class='lessindent'>
 | |
| <li>Fix an off-by-one error that caused quoted empty string at the end of a 
 | |
| CRNL-terminated line of CSV input to be misread by the command-line shell.
 | |
| <li>Fix a query planner bug involving a LEFT JOIN with a BETWEEN or LIKE/GLOB
 | |
| constraint and then another INNER JOIN to the right that involves an OR constraint.
 | |
| <li>Fix a query planner bug that could result in a segfault when querying tables
 | |
| with a UNIQUE or PRIMARY KEY constraint with more than four columns.
 | |
| 
 | |
| <li>SQLITE_SOURCE_ID: 
 | |
|     "2013-08-29 17:35:01 352362bc01660edfbda08179d60f09e2038a2f49"
 | |
| <li>SHA1 for sqlite3.c: 99906bf63e6cef63d6f3d7f8526ac4a70e76559e
 | |
| 
 | |
| </ol></p>
 | |
| <a name="version_3_8_0"></a>
 | |
| <h3>2013-08-26 (3.8.0)</h3><p><ol class='lessindent'>
 | |
| <li>Add support for <a href="partialindex.html">partial indexes</a></li>
 | |
| <li>Cut-over to the <a href="queryplanner-ng.html">next generation query planner</a> for faster and better query plans.
 | |
| <li>The <a href="eqp.html">EXPLAIN QUERY PLAN</a> output no longer shows an estimate of the number of 
 | |
|     rows generated by each loop in a join.
 | |
| <li>Added the <a href="fts3.html#fts4notindexed">FTS4 notindexed option</a>, allowing non-indexed columns in an FTS4 table.
 | |
| <li>Added the <a href="c3ref/c_stmtstatus_counter.html#sqlitestmtstatusvmstep">SQLITE_STMTSTATUS_VM_STEP</a> option to <a href="c3ref/stmt_status.html">sqlite3_stmt_status()</a>.
 | |
| <li>Added the <a href="pragma.html#pragma_cache_spill">cache_spill pragma</a>.
 | |
| <li>Added the <a href="pragma.html#pragma_query_only">query_only pragma</a>.
 | |
| <li>Added the <a href="pragma.html#pragma_defer_foreign_keys">defer_foreign_keys pragma</a> and the
 | |
|     <a href="c3ref/db_status.html">sqlite3_db_status</a>(db, <a href="c3ref/c_dbstatus_options.html#sqlitedbstatusdeferredfks">SQLITE_DBSTATUS_DEFERRED_FKS</a>,...) C-language interface.
 | |
| <li>Added the "percentile()" function as a <a href="loadext.html">loadable extension</a> in the ext/misc
 | |
|     subdirectory of the source tree.
 | |
| <li>Added the <a href="compile.html#allow_uri_authority">SQLITE_ALLOW_URI_AUTHORITY</a> compile-time option.
 | |
| <li>Add the <a href="c3ref/cancel_auto_extension.html">sqlite3_cancel_auto_extension(X)</a> interface.
 | |
| <li>A running SELECT statement that lacks a FROM clause (or any other statement that
 | |
|     never reads or writes from any database file) will not prevent a read
 | |
|     transaction from closing.
 | |
| <li>Add the <a href="compile.html#default_automatic_index">SQLITE_DEFAULT_AUTOMATIC_INDEX</a> compile-time option.  Setting this option
 | |
|     to 0 disables automatic indices by default.
 | |
| <li>Issue an <a href="rescode.html#warning_autoindex">SQLITE_WARNING_AUTOINDEX</a> warning on the <a href="c3ref/c_config_covering_index_scan.html#sqliteconfiglog">SQLITE_CONFIG_LOG</a> whenever
 | |
|     the query planner uses an automatic index.
 | |
| <li>Added the <a href="compile.html#fts3_max_expr_depth">SQLITE_FTS3_MAX_EXPR_DEPTH</a> compile-time option.
 | |
| <li>Added an optional 5th parameter defining the collating sequence to the 
 | |
|     next_char() extension SQL function.
 | |
| <li>The <a href="rescode.html#busy_snapshot">SQLITE_BUSY_SNAPSHOT</a> extended error code is returned in WAL mode when
 | |
|     a read transaction cannot be upgraded to a write transaction because the read is
 | |
|     on an older snapshot.
 | |
| <li>Enhancements to the sqlite3_analyzer utility program to provide size
 | |
|     information separately for each individual index of a table, in addition to
 | |
|     the aggregate size.
 | |
| <li>Allow read transactions to be freely opened and closed by SQL statements run 
 | |
|     from within the implementation of <a href="appfunc.html">application-defined SQL functions</a> if the
 | |
|     function is called by a SELECT statement that does not access any database table.
 | |
| <li>Disable the use of posix_fallocate() on all (unix) systems unless the
 | |
|     HAVE_POSIX_FALLOCATE compile-time option is used.
 | |
| <li>Update the ".import" command in the <a href="cli.html">command-line shell</a> to support multi-line
 | |
|     fields and correct RFC-4180 quoting and to issue warning and/or error messages
 | |
|     if the input text is not strictly RFC-4180 compliant.
 | |
| <li>Bug fix: In the <a href="fts3.html#unicode61">unicode61</a> tokenizer of <a href="fts3.html#fts4">FTS4</a>, treat all private code points
 | |
|     as identifier symbols.
 | |
| <li>Bug fix: Bare identifiers in ORDER BY clauses bind more tightly to output column
 | |
|     names, but identifiers in expressions bind more tightly to input column names.
 | |
|     Identifiers in GROUP BY clauses always prefer output column names, however.
 | |
| <li>Bug fixes: Multiple problems in the legacy query optimizer were fixed by the 
 | |
|     move to <a href="queryplanner-ng.html">NGQP</a>.
 | |
| 
 | |
| <li>SQLITE_SOURCE_ID: 
 | |
|     "2013-08-26 04:50:08 f64cd21e2e23ed7cff48f7dafa5e76adde9321c2"
 | |
| <li>SHA1 for sqlite3.c: b7347f4b4c2a840e6ba12040093d606bd16ea21e
 | |
| 
 | |
| </ol></p>
 | |
| <a name="version_3_7_17"></a>
 | |
| <h3>2013-05-20 (3.7.17)</h3><p><ol class='lessindent'>
 | |
| <li>Add support for <a href="mmap.html">memory-mapped I/O</a>.
 | |
| <li>Add the <a href="c3ref/strglob.html">sqlite3_strglob()</a> convenience interface.
 | |
| <li>Assigned the integer at offset 68 in the <a href="fileformat2.html#database_header">database header</a> as the
 | |
|     <a href="fileformat2.html#appid">Application ID</a> for when SQLite is used as an <a href="appfileformat.html">application file-format</a>.
 | |
|     Added the <a href="pragma.html#pragma_application_id">PRAGMA application_id</a> command to query and set the Application ID.
 | |
| <li>Report rollback recovery in the <a href="errlog.html">error log</a> as SQLITE_NOTICE_RECOVER_ROLLBACK.
 | |
|     Change the error log code for WAL recover from 
 | |
|     SQLITE_OK to SQLITE_NOTICE_RECOVER_WAL.
 | |
| <li>Report the risky uses of <a href="howtocorrupt.html#unlink">unlinked database files</a> and 
 | |
|    <a href="howtocorrupt.html#alias">database filename aliasing</a> as SQLITE_WARNING messages in the <a href="errlog.html">error log</a>.
 | |
| <li>Added the <a href="compile.html#trace_size_limit">SQLITE_TRACE_SIZE_LIMIT</a> compile-time option.
 | |
| <li>Increase the default value of <a href="compile.html#max_schema_retry">SQLITE_MAX_SCHEMA_RETRY</a> to 50 and make sure
 | |
|     that it is honored in every place that a schema change might force a statement
 | |
|     retry.
 | |
| <li>Add a new test harness called "mptester" used to verify correct operation
 | |
|     when multiple processes are using the same database file at the same time.
 | |
| <li>Enhance the <a href="loadext.html">extension loading</a> mechanism to be more flexible (while
 | |
|     still maintaining backwards compatibility) in two ways:
 | |
|     <ol>
 | |
|     <li>If the default entry point "sqlite3_extension_init" is not present in
 | |
|         the loadable extension, also try an entry point "sqlite3_X_init" where
 | |
|         "X" is based on the shared library filename.  This allows every extension
 | |
|         to have a different entry point, which allows them to be statically linked
 | |
|         with no code changes.
 | |
|     <li>The shared library filename passed to <a href="c3ref/load_extension.html">sqlite3_load_extension()</a> may
 | |
|         omit the filename suffix, and an appropriate architecture-dependent
 | |
|         suffix (".so", ".dylib", or ".dll") will be added automatically.
 | |
|     </ol>
 | |
| <li>Added many new loadable extensions to the source tree, including
 | |
|     amatch, closure, fuzzer, ieee754, nextchar, regexp, spellfix,
 | |
|     and wholenumber.  See header comments on each extension source file 
 | |
|     for further information about what that extension does.
 | |
| <li>Enhance <a href="fts3.html">FTS3</a> to avoid using excess stack space when there are a huge
 | |
|     number of terms on the right-hand side of the MATCH operator.  A side-effect
 | |
|     of this change is that the MATCH operator can only accommodate 12 NEAR
 | |
|     operators at a time.
 | |
| <li>Enhance the <a href="fts3.html#fts4aux">fts4aux</a> virtual table so that it can be a TEMP table.
 | |
| <li>Added the <a href="fts3.html#fts3tok">fts3tokenize virtual table</a> to the <a href="fts3.html">full-text search</a> logic.
 | |
| <li>Query planner enhancement: Use the transitive property of constraints
 | |
|     to move constraints into the outer loops of a join whenever possible,
 | |
|     thereby reducing the amount of work that needs to occur in inner loops.
 | |
| <li>Discontinue the use of posix_fallocate() on unix, as it does not work on all
 | |
|     filesystems.
 | |
| <li>Improved tracing and debugging facilities in the Windows <a href="vfs.html">VFS</a>.
 | |
| <li>Bug fix: Fix a potential <b>database corruption bug</b>
 | |
|     in <a href="sharedcache.html">shared cache mode</a> when one
 | |
|     <a href="c3ref/sqlite3.html">database connection</a> is closed while another is in the middle of a write
 | |
|     transaction.
 | |
|     Ticket <a href="http://www.sqlite.org/src/info/e636a050b7">e636a050b7</a>
 | |
| <li>Bug fix:
 | |
|     Only consider AS names from the result set as candidates for resolving
 | |
|     identifiers in the WHERE clause if there are no other matches. In the 
 | |
|     ORDER BY clause, AS names take priority over any column names.
 | |
|     Ticket <a href="http://www.sqlite.org/src/info/2500cdb9be05">2500cdb9be05</a>
 | |
| <li>Bug fix: Do not allow a virtual table to cancel the ORDER BY clause unless 
 | |
|     all outer loops are guaranteed to return no more than one row result.
 | |
|     Ticket <a href="http://www.sqlite.org/src/info/ba82a4a41eac1">ba82a4a41eac1</a>.
 | |
| <li>Bug fix: Do not suppress the ORDER BY clause on a virtual table query if
 | |
|     an IN constraint is used.
 | |
|     Ticket <a href="http://www.sqlite.org/src/info/f69b96e3076e">f69b96e3076e</a>.
 | |
| <li>Bug fix: The <a href="cli.html">command-line shell</a> gives an exit code of 0 when terminated
 | |
|     using the ".quit" command.
 | |
| <li>Bug fix: Make sure <a href="pragma.html#syntax">PRAGMA</a> statements appear in <a href="c3ref/profile.html">sqlite3_trace()</a> output.
 | |
| <li>Bug fix: When a <a href="lang_select.html#compound">compound query</a> that uses an ORDER BY clause
 | |
|     with a <a href="lang_expr.html#collateop">COLLATE operator</a>, make sure that the sorting occurs
 | |
|     according to the specified collation and that the comparisons associate with
 | |
|     the compound query use the native collation.  Ticket
 | |
|     <a href="http://www.sqlite.org/src/info/6709574d2a8d8">6709574d2a8d8</a>.
 | |
| <li>Bug fix: Makes sure the <a href="c3ref/set_authorizer.html">authorizer</a> callback gets
 | |
|     a valid pointer to the string "ROWID" for the column-name parameter when
 | |
|     doing an <a href="lang_update.html">UPDATE</a> that changes the rowid.  Ticket
 | |
|     <a href="http://www.sqlite.org/src/info/0eb70d77cb05bb2272">0eb70d77cb05bb2272</a>
 | |
| <li>Bug fix: Do not move WHERE clause terms inside OR expressions that are
 | |
|     contained within an ON clause of a LEFT JOIN.  Ticket 
 | |
|     <a href="http://www.sqlite.org/src/info/f2369304e4">f2369304e4</a>
 | |
| <li>Bug fix: Make sure an error is always reported when attempting to preform
 | |
|     an operation that requires a <a href="datatype3.html#collation">collating sequence</a> that is missing.
 | |
|     Ticket <a href="http://www.sqlite.org/src/info/0fc59f908b">0fc59f908b</a>
 | |
| 
 | |
| <li>SQLITE_SOURCE_ID: 
 | |
|     "2013-05-20 00:56:22 118a3b35693b134d56ebd780123b7fd6f1497668"
 | |
| <li>SHA1 for sqlite3.c: 246987605d0503c700a08b9ee99a6b5d67454aab
 | |
| 
 | |
| </ol></p>
 | |
| <a name="version_3_7_16_2"></a>
 | |
| <h3>2013-04-12 (3.7.16.2)</h3><p><ol class='lessindent'>
 | |
| <li>Fix a bug (present since version 3.7.13) that could result in database corruption
 | |
|     on windows if two or more processes try to access the same database file at the
 | |
|     same time and immediately after third process crashed in the middle of committing
 | |
|     to that same file.  See ticket 
 | |
|     <a href="http://www.sqlite.org/src/info/7ff3120e4f">7ff3120e4f</a> for further
 | |
|     information.
 | |
| 
 | |
| <li>SQLITE_SOURCE_ID: 
 | |
|     "2013-04-12 11:52:43 cbea02d93865ce0e06789db95fd9168ebac970c7"
 | |
| <li>SHA1 for sqlite3.c: d466b54789dff4fb0238b9232e74896deaefab94
 | |
| 
 | |
| </ol></p>
 | |
| <a name="version_3_7_16_1"></a>
 | |
| <h3>2013-03-29 (3.7.16.1)</h3><p><ol class='lessindent'>
 | |
| <li>Fix for a bug in the ORDER BY optimizer that was introduced in
 | |
|     <a href="#version_3_7_15">version 3.7.15</a> which would sometimes optimize out the sorting step
 | |
|     when in fact the sort was required.
 | |
|     Ticket <a href="http://www.sqlite.org/src/info/a179fe7465">a179fe7465</a>
 | |
| <li>Fix a long-standing bug in the <a href="lang_expr.html#castexpr">CAST expression</a> that would recognize UTF16
 | |
|     characters as digits even if their most-significant-byte was not zero.
 | |
|     Ticket <a href="http://www.sqlite.org/src/info/689137afb6da41">689137afb6da41</a>.
 | |
| <li>Fix a bug in the NEAR operator of <a href="fts3.html">FTS3</a> when applied to subfields.
 | |
|     Ticket <a href="http://www.sqlite.org/src/info/38b1ae018f">38b1ae018f</a>.
 | |
| <li>Fix a long-standing bug in the storage engine that would (very rarely)
 | |
|     cause a spurious report of an SQLITE_CORRUPT error but which was otherwise
 | |
|     harmless.
 | |
|     Ticket <a href="http://www.sqlite.org/src/info/6bfb98dfc0c">6bfb98dfc0c</a>.
 | |
| <li>The SQLITE_OMIT_MERGE_SORT option has been removed.  The merge sorter is
 | |
|     now a required component of SQLite.
 | |
| <li>Fixed lots of spelling errors in the source-code comments
 | |
| <li>SQLITE_SOURCE_ID: 
 | |
|     "2013-03-29 13:44:34 527231bc67285f01fb18d4451b28f61da3c4e39d"
 | |
| <li>SHA1 for sqlite3.c: 7a91ceceac9bcf47ceb8219126276e5518f7ff5a
 | |
| 
 | |
| </ol></p>
 | |
| <a name="version_3_7_16"></a>
 | |
| <h3>2013-03-18 (3.7.16)</h3><p><ol class='lessindent'>
 | |
| <li>Added the <a href="pragma.html#pragma_foreign_key_check">PRAGMA foreign_key_check</a> command.
 | |
| <li>Added new extended error codes for all SQLITE_CONSTRAINT errors
 | |
| <li>Added the SQLITE_READONLY_ROLLBACK extended error code for when a database
 | |
|     cannot be opened because it needs rollback recovery but is read-only.
 | |
| <li>Added SQL functions <a href="lang_corefunc.html#unicode">unicode(A)</a> and <a href="lang_corefunc.html#char">char(X1,...,XN)</a>.
 | |
| <li>Performance improvements for <a href="pragma.html#pragma_incremental_vacuum">PRAGMA incremental_vacuum</a>, especially in
 | |
|     cases where the number of free pages is greater than what will fit on a 
 | |
|     single trunk page of the freelist.
 | |
| <li>Improved optimization of queries containing aggregate min() or max().
 | |
| <li>Enhance virtual tables so that they can potentially use an index when
 | |
|     the WHERE clause contains the IN operator.
 | |
| <li>Allow indices to be used for sorting even if prior terms of the index
 | |
|     are constrained by IN operators in the WHERE clause.
 | |
| <li>Enhance the <a href="pragma.html#pragma_table_info">PRAGMA table_info</a> command so that the "pk" column is an
 | |
|     increasing integer to show the order of columns in the primary key.
 | |
| <li>Enhance the query optimizer to exploit transitive join constraints.
 | |
| <li>Performance improvements in the query optimizer.
 | |
| <li>Allow the error message from <a href="pragma.html#pragma_integrity_check">PRAGMA integrity_check</a> to be longer than
 | |
|     20000 bytes.
 | |
| <li>Improved name resolution for deeply nested queries.
 | |
| <li>Added the test_regexp.c module as a demonstration of how to implement
 | |
|     the REGEXP operator.
 | |
| <li>Improved error messages in the <a href="rtree.html">RTREE</a> extension.
 | |
| <li>Enhance the <a href="cli.html">command-line shell</a> so that a non-zero argument to the
 | |
|     ".exit" command causes the shell to exit immediately without cleanly
 | |
|     shutting down the database connection.
 | |
| <li>Improved error messages for invalid boolean arguments to dot-commands
 | |
|     in the <a href="cli.html">command-line shell</a>.
 | |
| <li>Improved error messages for "foreign key mismatch" showing the names of
 | |
|     the two tables involved.
 | |
| <li>Remove all uses of umask() in the unix VFS.
 | |
| <li>Added the <a href="pragma.html#pragma_vdbe_addoptrace">PRAGMA vdbe_addoptrace</a> and <a href="pragma.html#pragma_vdbe_debug">PRAGMA vdbe_debug</a> commands.
 | |
| <li>Change to use strncmp() or the equivalent instead of memcmp() when 
 | |
|     comparing non-zero-terminated strings.
 | |
| <li>Update cygwin interfaces to omit deprecated API calls.
 | |
| <li>Enhance the <a href="spellfix1.html">spellfix1</a> extension so that the edit distance cost table can
 | |
|     be changed at runtime by inserting a string like 'edit_cost_table=TABLE' 
 | |
|     into the "command" field.
 | |
| 
 | |
| <li>Bug fix: repair a long-standing problem that could cause incorrect query
 | |
|     results in a 3-way or larger join that compared INTEGER fields against TEXT
 | |
|     fields in two or more places.
 | |
|     Ticket <a href="http://www.sqlite.org/src/info/fc7bd6358f">fc7bd6358f</a>
 | |
| <li>Bug fix: Issue an error message if the 16-bit reference counter on a
 | |
|     view overflows due to an overly complex query.
 | |
| <li>Bug fix: Avoid leaking memory on LIMIT and OFFSET clauses in deeply
 | |
|     nested UNION ALL queries.
 | |
| <li>Bug fix: Make sure the schema is up-to-date prior to running pragmas
 | |
|     table_info, index_list, index_info, and foreign_key_list.
 | |
| 
 | |
| <li>SQLITE_SOURCE_ID: 
 | |
|     "2013-03-18 11:39:23 66d5f2b76750f3520eb7a495f6247206758f5b90"
 | |
| <li>SHA1 for sqlite3.c: 7308ab891ca1b2ebc596025cfe4dc36f1ee89cf6
 | |
| 
 | |
| </ol></p>
 | |
| <a name="version_3_7_15_2"></a>
 | |
| <h3>2013-01-09 (3.7.15.2)</h3><p><ol class='lessindent'>
 | |
| <li>Fix a bug, introduced in <a href="#version_3_7_15">version 3.7.15</a>, that causes an ORDER BY clause
 | |
|     to be optimized out of a three-way join when the ORDER BY is actually
 | |
|     required.	
 | |
|     Ticket <a href="http://www.sqlite.org/src/info/598f5f7596b055">598f5f7596b055</a>
 | |
| 
 | |
| <li>SQLITE_SOURCE_ID: 
 | |
|     "2013-01-09 11:53:05 c0e09560d26f0a6456be9dd3447f5311eb4f238f"
 | |
| <li>SHA1 for sqlite3.c: 5741f47d1bc38aa0a8c38f09e60a5fe0031f272d
 | |
| 
 | |
| </ol></p>
 | |
| <a name="version_3_7_15_1"></a>
 | |
| <h3>2012-12-19 (3.7.15.1)</h3><p><ol class='lessindent'>
 | |
| <li>Fix a bug, introduced in <a href="#version_3_7_15">version 3.7.15</a>, that causes a segfault if
 | |
|     the AS name of a result column of a SELECT statement is used as a logical
 | |
|     term in the WHERE clause.  Ticket 
 | |
|     <a href="http://www.sqlite.org/src/info/a7b7803e8d1e869">a7b7803e8d1e869</a>.
 | |
| 
 | |
| <li>SQLITE_SOURCE_ID: 
 | |
|     "2012-12-19 20:39:10 6b85b767d0ff7975146156a99ad673f2c1a23318"
 | |
| <li>SHA1 for sqlite3.c: bbbaa68061e925bd4d7d18d7e1270935c5f7e39a
 | |
| 
 | |
| </ol></p>
 | |
| <a name="version_3_7_15"></a>
 | |
| <h3>2012-12-12 (3.7.15)</h3><p><ol class='lessindent'>
 | |
| <li>Added the <a href="c3ref/errcode.html">sqlite3_errstr()</a> interface.
 | |
| <li>Avoid invoking the <a href="c3ref/profile.html">sqlite3_trace()</a> callback multiple times when a
 | |
|     statement is automatically reprepared due to <a href="rescode.html#schema">SQLITE_SCHEMA</a> errors.
 | |
| <li>Added support for Windows Phone 8 platforms
 | |
| <li>Enhance IN operator processing to make use of indices with numeric
 | |
|     affinities.
 | |
| <li>Do full-table scans using covering indices when possible, under the
 | |
|     theory that an index will be smaller and hence can be scanned with
 | |
|     less I/O.
 | |
| <li>Enhance the query optimizer so that ORDER BY clauses are more aggressively
 | |
|     optimized, especially in joins where various terms of the ORDER BY clause
 | |
|     come from separate tables of the join.
 | |
| <li>Add the ability to implement FROM clause subqueries as coroutines rather
 | |
|     that manifesting the subquery into a temporary table.
 | |
| <li>Enhancements the command-line shell:
 | |
|     <ol type='a'>
 | |
|     <li>Added the ".print" command
 | |
|     <li>Negative numbers in the ".width" command cause right-alignment
 | |
|     <li>Add the ".wheretrace" command when compiled with SQLITE_DEBUG
 | |
|     </ol>
 | |
| <li>Added the <a href="pragma.html#pragma_busy_timeout">busy_timeout pragma</a>.
 | |
| <li>Added the <a href="lang_corefunc.html#instr">instr()</a> SQL function.
 | |
| <li>Added the <a href="c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlbusyhandler">SQLITE_FCNTL_BUSYHANDLER</a> file control, used to allow VFS
 | |
|     implementations to get access to the busy handler callback.
 | |
| <li>The xDelete method in the built-in <a href="vfs.html">VFSes</a> now return
 | |
|     SQLITE_IOERR_DELETE_NOENT if the file to be deleted does not exist.
 | |
| <li>Enhanced support for QNX.
 | |
| <li>Work around an optimizer bug in the MSVC compiler when targeting ARM.
 | |
| <li>Bug fix: Avoid various concurrency problems in <a href="sharedcache.html">shared cache mode</a>.
 | |
| <li>Bug fix: Avoid a deadlock or crash if the <a href="backup.html">backup API</a>, <a href="sharedcache.html">shared cache</a>,
 | |
|     and the SQLite Encryption Extension are all used at once.
 | |
| <li>Bug fix: SQL functions created using the TCL interface honor the
 | |
|     "nullvalue" setting.
 | |
| <li>Bug fix: Fix a 32-bit overflow problem on CREATE INDEX for databases
 | |
|     larger than 16GB.
 | |
| <li>Bug fix: Avoid segfault when using the <a href="lang_expr.html#collateop">COLLATE operator</a> inside of a
 | |
|     <a href="lang_createtable.html#ckconst">CHECK constraint</a> or <a href="lang_createview.html">view</a> in <a href="sharedcache.html">shared cache mode</a>.
 | |
| 
 | |
| <li>SQLITE_SOURCE_ID: 
 | |
|     "2012-12-12 13:36:53 cd0b37c52658bfdf992b1e3dc467bae1835a94ae"
 | |
| <li>SHA1 for sqlite3.c: 2b413611f5e3e3b6ef5f618f2a9209cdf25cbcff"
 | |
| 
 | |
| </ol></p>
 | |
| <a name="version_3_7_14_1"></a>
 | |
| <h3>2012-10-04 (3.7.14.1)</h3><p><ol class='lessindent'>
 | |
| <li>Fix a bug (ticket 
 | |
| <a href="www.sqlite.org/src/tktview/d02e1406a58ea02d">[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="http://www.sqlite.org/src/info/c2ad16f997ee9c">(ticket c2ad16f997)</a>
 | |
|     in the 3.7.12 release that can cause a segfault for certain
 | |
|     obscure nested aggregate queries.
 | |
| <li>Fix various other minor test script problems.
 | |
| <li>SQLITE_SOURCE_ID: 
 | |
|     "2012-05-22 02:45:53 6d326d44fd1d626aae0e8456e5fa2049f1ce0789"
 | |
| <li>SHA1 for sqlite3.c: d494e8d81607f0515d4f386156fb0fd86d5ba7df
 | |
| 
 | |
| </ol></p>
 | |
| <a name="version_3_7_12"></a>
 | |
| <h3>2012-05-14 (3.7.12)</h3><p><ol class='lessindent'>
 | |
| <li>Add the <a href="c3ref/c_dbstatus_options.html#sqlitedbstatuscachewrite">SQLITE_DBSTATUS_CACHE_WRITE</a> option for <a href="c3ref/db_status.html">sqlite3_db_status()</a>.
 | |
| <li>Optimize the <a href="lang_corefunc.html#typeof">typeof()</a> and <a href="lang_corefunc.html#length">length()</a> SQL functions so that they avoid
 | |
|     unnecessary reading of database content from disk.
 | |
| <li>Add the <a href="fts3.html#*fts4mergecmd">FTS4 "merge" command</a>, the <a href="fts3.html#*fts4automergecmd">FTS4 "automerge" command</a>, and
 | |
|     the <a href="fts3.html#*fts4ickcmd">FTS4 "integrity-check" command</a>.
 | |
| <li>Report the name of specific <a href="lang_createtable.html#ckconst">CHECK</a> constraints that fail.
 | |
| <li>In the command-line shell, use popen() instead of fopen() if the first
 | |
|     character of the argument to the ".output" command is "|".
 | |
| <li>Make use of OVERLAPPED in the windows <a href="vfs.html">VFS</a> to avoid some system calls
 | |
|     and thereby obtain a performance improvement.
 | |
| <li>More aggressive optimization of the AND operator when one side or the
 | |
|     other is always false.
 | |
| <li>Improved performance of queries with many OR-connected terms in the
 | |
|     WHERE clause that can all be indexed.
 | |
| <li>Add the <a href="compile.html#rtree_int_only">SQLITE_RTREE_INT_ONLY</a> compile-time option to force the
 | |
|     <a href="rtree.html">R*Tree Extension Module</a> to use integer instead of
 | |
|     floating point values for both storage and computation.
 | |
| <li>Enhance the <a href="pragma.html#pragma_integrity_check">PRAGMA integrity_check</a> command to use much less memory when
 | |
|     processing multi-gigabyte databases.
 | |
| <li>New interfaces added to the test_quota.c add-on module.
 | |
| <li>Added the ".trace" dot-command to the command-line shell.
 | |
| <li>Allow virtual table constructors to be invoked recursively.
 | |
| <li>Improved optimization of ORDER BY clauses on compound queries.
 | |
| <li>Improved optimization of aggregate subqueries contained within an
 | |
|     aggregate query.
 | |
| <li>Bug fix: Fix the <a href="lang_savepoint.html">RELEASE</a> command so that it does not cancel pending
 | |
|     queries.  This repairs a problem introduced in 3.7.11.
 | |
| <li>Bug fix: Do not discard the DISTINCT as superfluous unless a subset of
 | |
|     the result set is subject to a UNIQUE constraint <em>and</em> it none
 | |
|     of the columns in that subset can be NULL.
 | |
|     Ticket <a href="http://www.sqlite.org/src/info/385a5b56b9">385a5b56b9</a>.
 | |
| <li>Bug fix: Do not optimize away an ORDER BY clause that has the same terms
 | |
|     as a UNIQUE index unless those terms are also NOT NULL.
 | |
|     Ticket <a href="http://www.sqlite.org/src/info/2a5629202f">2a5629202f</a>.
 | |
| <li>SQLITE_SOURCE_ID: 
 | |
|     "2012-05-14 01:41:23 8654aa9540fe9fd210899d83d17f3f407096c004"
 | |
| <li>SHA1 for sqlite3.c: 57e2104a0f7b3f528e7f6b7a8e553e2357ccd2e1
 | |
| 
 | |
| 
 | |
| </ol></p>
 | |
| <a name="version_3_7_11"></a>
 | |
| <h3>2012-03-20 (3.7.11)</h3><p><ol class='lessindent'>
 | |
| <li>Enhance the <a href="lang_insert.html">INSERT</a> syntax to allow multiple rows to be inserted
 | |
|     via the VALUES clause.
 | |
| <li>Enhance the <a href="lang_createvtab.html">CREATE VIRTUAL TABLE</a> command to support the
 | |
|     IF NOT EXISTS clause.
 | |
| <li>Added the <a href="c3ref/stricmp.html">sqlite3_stricmp()</a> interface as a counterpart to
 | |
|     <a href="c3ref/stricmp.html">sqlite3_strnicmp()</a>.
 | |
| <li>Added the <a href="c3ref/db_readonly.html">sqlite3_db_readonly()</a> interface.
 | |
| <li>Added the <a href="c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlpragma">SQLITE_FCNTL_PRAGMA</a> file control, giving <a href="vfs.html">VFS</a> implementations
 | |
|     the ability to add new <a href="pragma.html#syntax">PRAGMA</a> statements or to override built-in
 | |
|     PRAGMAs.
 | |
| <li>Queries of the form:  "SELECT max(x), y FROM table" returns the 
 | |
|     value of y on the same row that contains the maximum x value.
 | |
| <li>Added support for the <a href="fts3.html#*fts4languageid">FTS4 languageid option</a>.  
 | |
| <li>Documented support for the <a href="fts3.html#*fts4content">FTS4 content option</a>.  This feature has
 | |
|     actually been in the code since <a href="#version_3_7_9">version 3.7.9</a> but is only now considered
 | |
|     to be officially supported.
 | |
| <li>Pending statements no longer block <a href="lang_transaction.html">ROLLBACK</a>.  Instead, the pending
 | |
|     statement will return SQLITE_ABORT upon next access after the ROLLBACK.
 | |
| <li>Improvements to the handling of CSV inputs in the <a href="cli.html">command-line shell</a>
 | |
| <li>Fix a <a href="http://www.sqlite.org/src/info/b7c8682cc1">bug</a> introduced 
 | |
|     in <a href="#version_3_7_10">version 3.7.10</a> that might cause a LEFT JOIN
 | |
|     to be incorrectly converted into an INNER JOIN if the WHERE clause
 | |
|     indexable terms connected by OR.
 | |
| 
 | |
| <li>SQLITE_SOURCE_ID: 
 | |
|     "2012-03-20 11:35:50 00bb9c9ce4f465e6ac321ced2a9d0062dc364669"
 | |
| <li>SHA1 for sqlite3.c: d460d7eda3a9dccd291aed2a9fda868b9b120a10
 | |
| 
 | |
| </ol></p>
 | |
| <a name="version_3_7_10"></a>
 | |
| <h3>2012-01-16 (3.7.10)</h3><p><ol class='lessindent'>
 | |
| <li>The default <a href="fileformat2.html#schemaformat">schema format number</a> is changed from 1 to 4.
 | |
|     This means that, unless
 | |
|     the <a href="pragma.html#pragma_legacy_file_format">PRAGMA legacy_file_format=ON</a> statement is
 | |
|     run, newly created database files will be unreadable by version of SQLite
 | |
|     prior to 3.3.0 (2006-01-10).  It also means that the <a href="lang_createindex.html#descidx">descending indices</a>
 | |
|     are enabled by default.
 | |
| <li>The sqlite3_pcache_methods structure and the <a href="c3ref/c_config_covering_index_scan.html#sqliteconfigpcache">SQLITE_CONFIG_PCACHE</a>
 | |
|     and <a href="c3ref/c_config_covering_index_scan.html#sqliteconfiggetpcache">SQLITE_CONFIG_GETPCACHE</a> configuration parameters are deprecated.
 | |
|     They are replaced by a new <a href="c3ref/pcache_methods2.html">sqlite3_pcache_methods2</a> structure and
 | |
|     <a href="c3ref/c_config_covering_index_scan.html#sqliteconfigpcache2">SQLITE_CONFIG_PCACHE2</a> and <a href="c3ref/c_config_covering_index_scan.html#sqliteconfiggetpcache2">SQLITE_CONFIG_GETPCACHE2</a> configuration
 | |
|     parameters.
 | |
| <li>Added the <a href="psow.html">powersafe overwrite</a> property to the VFS interface.  Provide
 | |
|     the <a href="c3ref/c_iocap_atomic.html">SQLITE_IOCAP_POWERSAFE_OVERWRITE</a> I/O capability, the
 | |
|     <a href="compile.html#powersafe_overwrite">SQLITE_POWERSAFE_OVERWRITE</a> compile-time option, and the
 | |
|     "psow=BOOLEAN" query parameter for <a href="uri.html">URI filenames</a>.
 | |
| <li>Added the <a href="c3ref/db_release_memory.html">sqlite3_db_release_memory()</a> interface and the
 | |
|     <a href="pragma.html#pragma_shrink_memory">shrink_memory pragma</a>.
 | |
| <li>Added the <a href="c3ref/db_filename.html">sqlite3_db_filename()</a> interface.
 | |
| <li>Added the <a href="c3ref/stmt_busy.html">sqlite3_stmt_busy()</a> interface.
 | |
| <li>Added the <a href="c3ref/uri_boolean.html">sqlite3_uri_boolean()</a> and <a href="c3ref/uri_boolean.html">sqlite3_uri_int64()</a> interfaces.
 | |
| <li>If the argument to <a href="pragma.html#pragma_cache_size">PRAGMA cache_size</a> is negative N, that means to use
 | |
|     approximately -1024*N bytes of memory for the page cache regardless of
 | |
|     the page size.
 | |
| <li>Enhanced the default memory allocator to make use of _msize() on windows,
 | |
|     malloc_size() on Mac, and malloc_usable_size() on Linux.
 | |
| <li>Enhanced the query planner to support index queries with range constraints
 | |
|     on the rowid.
 | |
| <li>Enhanced the query planner flattening logic to allow UNION ALL compounds
 | |
|     to be promoted upwards to replace a simple wrapper SELECT even if the
 | |
|     compounds are joins.
 | |
| <li>Enhanced the query planner so that the xfer optimization can be used with
 | |
|     INTEGER PRIMARY KEY ON CONFLICT as long as the destination table is
 | |
|     initially empty.
 | |
| <li>Enhanced the windows <a href="vfs.html">VFS</a> so that all system calls can be overridden
 | |
|     using the xSetSystemCall interface.
 | |
| <li>Updated the "unix-dotfile" <a href="vfs.html">VFS</a> to use locking directories with mkdir()
 | |
|     and rmdir() instead of locking files with open() and unlink().
 | |
| <li>Enhancements to the test_quota.c extension to support stdio-like interfaces
 | |
|     with quotas.
 | |
| <li>Change the unix <a href="vfs.html">VFS</a> to be tolerant of read() system calls that return 
 | |
|     less then the full number of requested bytes.
 | |
| <li>Change both unix and windows <a href="vfs.html">VFSes</a> to report a sector size of 4096
 | |
|     instead of the old default of 512.
 | |
| <li>In the <a href="tclsqlite.html">TCL Interface</a>, add the -uri option to the "sqlite3" TCL command
 | |
|     used for creating new database connection objects.
 | |
| <li>Added the <a href="c3ref/c_testctrl_always.html">SQLITE_TESTCTRL_EXPLAIN_STMT</a> test-control option with the
 | |
|     <a href="compile.html#enable_tree_explain">SQLITE_ENABLE_TREE_EXPLAIN</a> compile-time option to enable the
 | |
|     <a href="cli.html">command-line shell</a> to display ASCII-art parse trees of SQL statements
 | |
|     that it processes, for debugging and analysis.
 | |
| <li><b>Bug fix:</b>
 | |
|     Add an additional xSync when restarting a WAL in order to prevent an
 | |
|     exceedingly unlikely but theoretically possible
 | |
|     database corruption following power-loss.
 | |
|     Ticket <a href="http://www.sqlite.org/src/info/ff5be73dee">ff5be73dee</a>.
 | |
| <li><b>Bug fix:</b>
 | |
|     Change the VDBE so that all registers are initialized to Invalid
 | |
|     instead of NULL.
 | |
|     Ticket <a href="http://www.sqlite.org/src/info/7bbfb7d442">7bbfb7d442</a>
 | |
| <li><b>Bug fix:</b>
 | |
|     Fix problems that can result from 32-bit integer overflow.
 | |
|     Ticket <a href="http://www.sqlite.org/src/info/ac0ff496b7e2">ac00f496b7e2</a>
 | |
| <li>SQLITE_SOURCE_ID: 
 | |
|     "2012-01-16 13:28:40 ebd01a8deffb5024a5d7494eef800d2366d97204"
 | |
| <li>SHA1 for sqlite3.c: 6497cbbaad47220bd41e2e4216c54706e7ae95d4
 | |
| 
 | |
| </ol></p>
 | |
| <a name="version_3_7_9"></a>
 | |
| <h3>2011-11-01 (3.7.9)</h3><p><ol class='lessindent'>
 | |
| <li>If a search token (on the right-hand side of the MATCH operator) in
 | |
|     <a href="fts3.html#fts4">FTS4</a> begins with "^" then that token must be the first in its field
 | |
|     of the document.  <b>** Potentially Incompatible Change **</b>
 | |
| <li>Added options <a href="c3ref/c_dbstatus_options.html#sqlitedbstatuscachehit">SQLITE_DBSTATUS_CACHE_HIT</a> and <a href="c3ref/c_dbstatus_options.html#sqlitedbstatuscachemiss">SQLITE_DBSTATUS_CACHE_MISS</a>
 | |
|     to the <a href="c3ref/db_status.html">sqlite3_db_status()</a> interface.
 | |
| <li>Removed support for <a href="compile.html#enable_stat2">SQLITE_ENABLE_STAT2</a>, replacing it with the much
 | |
|     more capable <a href="compile.html#enable_stat3">SQLITE_ENABLE_STAT3</a> option.
 | |
| <li>Enhancements to the sqlite3_analyzer utility program, including the
 | |
|     --pageinfo and --stats options and support for multiplexed databases.
 | |
| <li>Enhance the <a href="c3ref/data_count.html">sqlite3_data_count()</a> interface so that it can be used to
 | |
|     determine if SQLITE_DONE has been seen on the prepared statement.
 | |
| <li>Added the <a href="c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntloverwrite">SQLITE_FCNTL_OVERWRITE</a> file-control by which the SQLite core
 | |
|     indicates to the VFS that the current transaction will overwrite the
 | |
|     entire database file.
 | |
| <li>Increase the default <a href="malloc.html#lookaside">lookaside memory allocator</a> allocation size from
 | |
|     100 to 128 bytes.
 | |
| <li>Enhanced the query planner so that it can factor terms in and out of
 | |
|     OR expressions in the WHERE clause in an effort to find better indices.
 | |
| <li>Added the <a href="compile.html#direct_overflow_read">SQLITE_DIRECT_OVERFLOW_READ</a> compile-time option, causing
 | |
|     <a href="fileformat2.html#ovflpgs">overflow pages</a> to be read directly from the database file, 
 | |
|     bypassing the <a href="c3ref/pcache_methods2.html">page cache</a>.
 | |
| <li>Remove limits on the magnitude of precision and width value in the
 | |
|     format specifiers of the <a href="c3ref/mprintf.html">sqlite3_mprintf()</a> family of string rendering
 | |
|     routines.
 | |
| <li>Fix a bug that prevent <a href="lang_altertable.html">ALTER TABLE ... RENAME</a> from working
 | |
|     on some virtual tables in a database with a UTF16 encoding.
 | |
| <li>Fix a bug in ASCII-to-float conversion that causes slow performance and
 | |
|     incorrect results when converting numbers with ridiculously large exponents.
 | |
| <li>Fix a bug that causes incorrect results in aggregate queries that use
 | |
|     multiple aggregate functions whose arguments contain complicated expressions
 | |
|     that differ only in the case of string literals contained within those
 | |
|     expressions.
 | |
| <li>Fix a bug that prevented the <a href="pragma.html#pragma_page_count">page_count</a> and <a href="pragma.html#pragma_quick_check">quick_check</a> pragmas from
 | |
|     working correctly if their names were capitalized.
 | |
| <li>Fix a bug that caused <a href="lang_vacuum.html">VACUUM</a> to fail if the <a href="pragma.html#pragma_count_changes">count_changes pragma</a> was
 | |
|     engaged.
 | |
| <li>Fix a bug in <a href="vtab.html">virtual table</a> implementation that causes a crash if
 | |
|     an <a href="fts3.html#fts4">FTS4</a> table is <a href="lang_droptable.html">dropped</a> inside a transaction and
 | |
|     a <a href="lang_savepoint.html">SAVEPOINT</a> occurs afterwards.
 | |
| <li>SQLITE_SOURCE_ID: 
 | |
|     "2011-11-01 00:52:41 c7c6050ef060877ebe77b41d959e9df13f8c9b5e"
 | |
| <li>SHA1 for sqlite3.c: becd16877f4f9b281b91c97e106089497d71bb47
 | |
| 
 | |
| </ol></p>
 | |
| <a name="version_3_7_8"></a>
 | |
| <h3>2011-09-19 (3.7.8)</h3><p><ol class='lessindent'>
 | |
| <li> Orders of magnitude performance improvement for <a href="lang_createindex.html">CREATE INDEX</a> on
 | |
|      very large tables.
 | |
| <li> Improved the windows VFS to better defend against interference
 | |
|      from anti-virus software.
 | |
| <li> Improved query plan optimization when the DISTINCT keyword is present.
 | |
| <li> Allow more system calls to be overridden in the unix VFS - to provide
 | |
|      better support for chromium sandboxes.
 | |
| <li> Increase the default size of a lookahead cache line from 100 to 128 bytes.
 | |
| <li> Enhancements to the test_quota.c module so that it can track 
 | |
|      preexisting files.
 | |
| <li> Bug fix: Virtual tables now handle IS NOT NULL constraints correctly.
 | |
| <li> Bug fixes: Correctly handle nested correlated subqueries used with
 | |
|      indices in a WHERE clause.
 | |
| <li> SQLITE_SOURCE_ID:
 | |
|     "2011-09-19 14:49:19 3e0da808d2f5b4d12046e05980ca04578f581177"
 | |
| <li> SHA1 for sqlite3.c: bfcd74a655636b592c5dba6d0d5729c0f8e3b4de
 | |
| 
 | |
| </ol></p>
 | |
| <a name="version_3_7_7_1"></a>
 | |
| <h3>2011-06-28 (3.7.7.1)</h3><p><ol class='lessindent'>
 | |
| <li> Fix <a href="http://www.sqlite.org/src/info/25ee812710">a bug</a> causing 
 | |
|      <a href="pragma.html#pragma_case_sensitive_like">PRAGMA case_sensitive_like</a> statements compiled using sqlite3_prepare()
 | |
|      to fail with an <a href="rescode.html#schema">SQLITE_SCHEMA</a> error.
 | |
| <li> SQLITE_SOURCE_ID:
 | |
|     "2011-06-28 17:39:05 af0d91adf497f5f36ec3813f04235a6e195a605f"
 | |
| <li> SHA1 for sqlite3.c: d47594b8a02f6cf58e91fb673e96cb1b397aace0
 | |
| 
 | |
| </ol></p>
 | |
| <a name="version_3_7_7"></a>
 | |
| <h3>2011-06-23 (3.7.7)</h3><p><ol class='lessindent'>
 | |
| <li> Add support for <a href="uri.html">URI filenames</a>
 | |
| <li> Add the <a href="c3ref/vtab_config.html">sqlite3_vtab_config()</a> interface in
 | |
|      support of <a href="lang_conflict.html">ON CONFLICT</a> clauses with <a href="vtab.html">virtual tables</a>.
 | |
| <li> Add the <a href="vtab.html#xsavepoint">xSavepoint</a>, <a href="vtab.html#xsavepoint">xRelease</a> and <a href="vtab.html#xsavepoint">xRollbackTo</a> methods in
 | |
|      <a href="vtab.html">virtual tables</a> in support of <a href="lang_savepoint.html">SAVEPOINT</a> for virtual tables.
 | |
| <li> Update the built-in <a href="fts3.html">FTS3/FTS4</a> and <a href="rtree.html">RTREE</a> virtual tables to support
 | |
|      <a href="lang_conflict.html">ON CONFLICT</a> clauses and <a href="lang_replace.html">REPLACE</a>.
 | |
| <li> Avoid unnecessary reparsing of the database schema.
 | |
| <li> Added support for the <a href="fts3.html#fts4prefix">FTS4 prefix option</a> and the <a href="fts3.html#fts4order">FTS4 order option</a>.
 | |
| <li> Allow <a href="wal.html">WAL-mode</a> databases to be opened read-only as long as
 | |
|      there is an existing read/write connection.
 | |
| <li> Added support for <a href="shortnames.html">short filenames</a>.
 | |
| <li> SQLITE_SOURCE_ID:
 | |
|      "2011-06-23 19:49:22 4374b7e83ea0a3fbc3691f9c0c936272862f32f2"
 | |
| <li> SHA1 for sqlite3.c: 5bbe79e206ae5ffeeca760dbd0d66862228db551
 | |
| 
 | |
| </ol></p>
 | |
| <a name="version_3_7_6_3"></a>
 | |
| <h3>2011-05-19 (3.7.6.3)</h3><p><ol class='lessindent'>
 | |
| <li> Fix a problem with <a href="wal.html">WAL mode</a> which could cause transactions to
 | |
|      silently rollback if the <a href="pragma.html#pragma_cache_size">cache_size</a> is set very small (less than 10)
 | |
|      and SQLite comes under memory pressure.
 | |
| 
 | |
| </ol></p>
 | |
| <a name="version_3_7_6_2"></a>
 | |
| <h3>2011-04-17 (3.7.6.2)</h3><p><ol class='lessindent'>
 | |
| <li> Fix the function prototype for the open(2) system call to agree with
 | |
|      POSIX.  Without this fix, pthreads does not work correctly on NetBSD.
 | |
| <li> SQLITE_SOURCE_ID:
 | |
|      "2011-04-17 17:25:17 154ddbc17120be2915eb03edc52af1225eb7cb5e"
 | |
| <li> SHA1 for sqlite3.c: 806577fd524dd5f3bfd8d4d27392ed2752bc9701
 | |
| 
 | |
| 
 | |
| </ol></p>
 | |
| <a name="version_3_7_6_1"></a>
 | |
| <h3>2011-04-13 (3.7.6.1)</h3><p><ol class='lessindent'>
 | |
| <li> Fix a bug in 3.7.6 that only appears if the <a href="c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlsizehint">SQLITE_FCNTL_SIZE_HINT</a>
 | |
|      file control is used with a build of SQLite that makes use of the
 | |
|      HAVE_POSIX_FALLOCATE compile-time option and which has
 | |
|      SQLITE_ENABLE_LOCKING_MODE turned off.
 | |
| <li> SQLITE_SOURCE_ID:
 | |
|      "2011-04-13 14:40:25 a35e83eac7b185f4d363d7fa51677f2fdfa27695"
 | |
| <li> SHA1 for sqlite3.c: b81bfa27d3e09caf3251475863b1ce6dd9f6ab66
 | |
| 
 | |
| </ol></p>
 | |
| <a name="version_3_7_6"></a>
 | |
| <h3>2011-04-12 (3.7.6)</h3><p><ol class='lessindent'>
 | |
| <li> Added the <a href="c3ref/wal_checkpoint_v2.html">sqlite3_wal_checkpoint_v2()</a> interface and enhanced the
 | |
|      <a href="pragma.html#pragma_wal_checkpoint">wal_checkpoint pragma</a> to support blocking checkpoints.
 | |
| <li> Improvements to the query planner so that it makes better estimates of
 | |
|      plan costs and hence does a better job of choosing the right plan,
 | |
|      especially when <a href="compile.html#enable_stat2">SQLITE_ENABLE_STAT2</a> is used.
 | |
| <li> Fix a bug which prevented deferred foreign key constraints from being
 | |
|      enforced when <a href="c3ref/finalize.html">sqlite3_finalize()</a> was not
 | |
|      called by one statement with a failed foreign key constraint prior to
 | |
|      another statement with foreign key constraints running.
 | |
| <li> Integer arithmetic operations that would have resulted in overflow
 | |
|      are now performed using floating-point instead.
 | |
| <li> Increased the version number on the <a href="c3ref/vfs.html">VFS object</a> to
 | |
|      3 and added new methods xSetSysCall, xGetSysCall, and xNextSysCall
 | |
|      used for doing full-coverage testing.
 | |
| <li> Increase the maximum value of <a href="limits.html#max_attached">SQLITE_MAX_ATTACHED</a> from 30 to 62
 | |
|      (though the default value remains at 10).
 | |
| <li> Enhancements to FTS4:
 | |
|      <ol type="a">
 | |
|      <li> Added the <a href="fts3.html#fts4aux">fts4aux</a> table
 | |
|      <li> Added support for <a href="fts3.html#*fts4compression">compressed FTS4 content</a>
 | |
|      </ol>
 | |
| <li> Enhance the <a href="lang_analyze.html">ANALYZE</a> command to support the name of an index
 | |
|      as its argument, in order to analyze just that one index.
 | |
| <li> Added the "unix-excl" built-in VFS on unix and unix-like platforms.
 | |
| <li> SQLITE_SOURCE_ID:
 | |
|      "2011-04-12 01:58:40 f9d43fa363d54beab6f45db005abac0a7c0c47a7"
 | |
| <li> SHA1 for sqlite3.c: f38df08547efae0ff4343da607b723f588bbd66b
 | |
| 
 | |
| </ol></p>
 | |
| <a name="version_3_7_5"></a>
 | |
| <h3>2011-02-01 (3.7.5)</h3><p><ol class='lessindent'>
 | |
| <li> Added the <a href="c3ref/mprintf.html">sqlite3_vsnprintf()</a> interface.
 | |
| <li> Added the <a href="c3ref/c_dbstatus_options.html#sqlitedbstatuslookasidehit">SQLITE_DBSTATUS_LOOKASIDE_HIT</a>,
 | |
|      <a href="c3ref/c_dbstatus_options.html#sqlitedbstatuslookasidemisssize">SQLITE_DBSTATUS_LOOKASIDE_MISS_SIZE</a>, and
 | |
|      <a href="c3ref/c_dbstatus_options.html#sqlitedbstatuslookasidemissfull">SQLITE_DBSTATUS_LOOKASIDE_MISS_FULL</a> options for the
 | |
|      <a href="c3ref/db_status.html">sqlite3_db_status()</a> interface.
 | |
| <li> Added the <a href="compile.html#omit_autoreset">SQLITE_OMIT_AUTORESET</a> compile-time option.
 | |
| <li> Added the <a href="compile.html#default_foreign_keys">SQLITE_DEFAULT_FOREIGN_KEYS</a> compile-time option.
 | |
| <li> Updates to <a href="c3ref/stmt_readonly.html">sqlite3_stmt_readonly()</a> so that its result is well-defined
 | |
|      for all prepared statements and so that it works with <a href="lang_vacuum.html">VACUUM</a>.
 | |
| <li> Added the "-heap" option to the <a href="cli.html">command-line shell</a>
 | |
| <li> Fix <a href="http://www.sqlite.org/src/info/5d863f876e">a bug</a> involving
 | |
|      frequent changes in and out of WAL mode and
 | |
|      VACUUM that could (in theory) cause database corruption.
 | |
| <li> Enhance the <a href="c3ref/profile.html">sqlite3_trace()</a> mechanism so that nested SQL statements
 | |
|      such as might be generated by virtual tables are shown but are shown
 | |
|      in comments and without parameter expansion.  This 
 | |
|      greatly improves tracing output when using the FTS3/4 and/or RTREE
 | |
|      virtual tables.
 | |
| <li> Change the xFileControl() methods on all built-in VFSes to return
 | |
|      <a href="rescode.html#notfound">SQLITE_NOTFOUND</a> instead of <a href="rescode.html#error">SQLITE_ERROR</a> for an unrecognized
 | |
|      operation code.
 | |
| <li> The SQLite core invokes the <a href="c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlsyncomitted">SQLITE_FCNTL_SYNC_OMITTED</a> 
 | |
|      <a href="c3ref/file_control.html">file control</a>
 | |
|      to the VFS in place of a call to xSync if the database has
 | |
|      <a href="pragma.html#pragma_synchronous">PRAGMA synchronous</a> set to OFF.
 | |
| 
 | |
| </ol></p>
 | |
| <a name="version_3_7_4"></a>
 | |
| <h3>2010-12-07 (3.7.4)</h3><p><ol class='lessindent'>
 | |
| <li> Added the <a href="c3ref/blob_reopen.html">sqlite3_blob_reopen()</a> interface to allow an existing
 | |
|      <a href="c3ref/blob.html">sqlite3_blob</a> object to be rebound to a new row.
 | |
| <li> Use the new <a href="c3ref/blob_reopen.html">sqlite3_blob_reopen()</a> interface to improve the performance
 | |
|      of FTS.
 | |
| <li> <a href="c3ref/vfs.html">VFSes</a> that do not support shared memory are allowed
 | |
|      to access <a href="wal.html">WAL</a> databases if <a href="pragma.html#pragma_locking_mode">PRAGMA locking_mode</a> is set to EXCLUSIVE.
 | |
| <li> Enhancements to <a href="eqp.html">EXPLAIN QUERY PLAN</a>.
 | |
| <li> Added the <a href="c3ref/stmt_readonly.html">sqlite3_stmt_readonly()</a> interface.
 | |
| <li> Added <a href="pragma.html#pragma_checkpoint_fullfsync">PRAGMA checkpoint_fullfsync</a>.
 | |
| <li> Added the <a href="c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlfilepointer">SQLITE_FCNTL_FILE_POINTER</a> option
 | |
|      to <a href="c3ref/file_control.html">sqlite3_file_control()</a>.
 | |
| <li> Added support for <a href="fts3.html#fts4">FTS4</a> and enhancements 
 | |
|      to the FTS <a href="fts3.html#matchinfo">matchinfo()</a> function.
 | |
| <li> Added the test_superlock.c module which provides example
 | |
|      code for obtaining an exclusive lock to a rollback
 | |
|      or WAL database.  
 | |
| <li> Added the test_multiplex.c module which provides
 | |
|      an example VFS that provides multiplexing (sharding)
 | |
|      of a DB, splitting it over multiple files of fixed size.
 | |
| <li> A <a href="http://www.sqlite.org/src/info/80ba201079">very obscure bug</a>
 | |
|      associated with the <a href="optoverview.html#or_opt">or optimization</a> was fixed.
 | |
| 
 | |
| </ol></p>
 | |
| <a name="version_3_7_3"></a>
 | |
| <h3>2010-10-08 (3.7.3)</h3><p><ol class='lessindent'>
 | |
| <li> Added the <a href="c3ref/create_function.html">sqlite3_create_function_v2()</a> interface that includes a
 | |
|      destructor callback.
 | |
| <li> Added support for <a href="rtree.html#customquery">custom r-tree queries</a> using application-supplied
 | |
|      callback routines to define the boundary of the query region.
 | |
| <li> The default page cache strives more diligently to avoid using memory
 | |
|      beyond what is allocated to it by <a href="c3ref/c_config_covering_index_scan.html#sqliteconfigpagecache">SQLITE_CONFIG_PAGECACHE</a>.  Or if
 | |
|      using page cache is allocating from the heap, it strives to avoid
 | |
|      going over the <a href="c3ref/hard_heap_limit64.html">sqlite3_soft_heap_limit64()</a>, even if
 | |
|      <a href="compile.html#enable_memory_management">SQLITE_ENABLE_MEMORY_MANAGEMENT</a> is not set.
 | |
| <li> Added the <a href="c3ref/hard_heap_limit64.html">sqlite3_soft_heap_limit64()</a> interface as a replacement for
 | |
|      <a href="c3ref/soft_heap_limit.html">sqlite3_soft_heap_limit()</a>.
 | |
| <li> The <a href="lang_analyze.html">ANALYZE</a> command now gathers statistics on tables even if they 
 | |
|      have no indices.
 | |
| <li> Tweaks to the query planner to help it do a better job of finding the
 | |
|      most efficient query plan for each query.
 | |
| <li> Enhanced the internal text-to-numeric conversion routines so that they
 | |
|      work with UTF8 or UTF16, thereby avoiding some UTF16-to-UTF8 text
 | |
|      conversions.
 | |
| <li> Fix a problem that was causing excess memory usage with large <a href="wal.html">WAL</a>
 | |
|      transactions in win32 systems.
 | |
| <li> The interface between the VDBE and B-Tree layer is enhanced such that
 | |
|      the VDBE provides hints to the B-Tree layer letting the B-Tree layer
 | |
|      know when it is safe to use hashing instead of B-Trees for transient
 | |
|      tables.
 | |
| <li> Miscellaneous documentation enhancements.
 | |
| 
 | |
| </ol></p>
 | |
| <a name="version_3_7_2"></a>
 | |
| <h3>2010-08-24 (3.7.2)</h3><p><ol class='lessindent'>
 | |
| <li> Fix an <a href="http://www.sqlite.org/src/info/5e10420e8d">
 | |
|      old and very obscure bug</a> that can lead to corruption of the
 | |
|      database <a href="fileformat2.html#freelist">free-page list</a> when <a href="pragma.html#pragma_incremental_vacuum">incremental_vacuum</a> is used.
 | |
| 
 | |
| </ol></p>
 | |
| <a name="version_3_7_1"></a>
 | |
| <h3>2010-08-23 (3.7.1)</h3><p><ol class='lessindent'>
 | |
| <li> Added new commands <a href="c3ref/c_dbstatus_options.html#sqlitedbstatusschemaused">SQLITE_DBSTATUS_SCHEMA_USED</a> and
 | |
|      <a href="c3ref/c_dbstatus_options.html#sqlitedbstatusstmtused">SQLITE_DBSTATUS_STMT_USED</a> to the <a href="c3ref/db_status.html">sqlite3_db_status()</a> interface, in
 | |
|      order to report out the amount of memory used to hold the schema and
 | |
|      prepared statements of a connection.
 | |
| <li> Increase the maximum size of a database pages from 32KiB to 64KiB.
 | |
| <li> Use the <a href="optoverview.html#like_opt">LIKE optimization</a> even if the right-hand side string contains
 | |
|      no wildcards.
 | |
| <li> Added the <a href="c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlchunksize">SQLITE_FCNTL_CHUNK_SIZE</a> verb to the <a href="c3ref/file_control.html">sqlite3_file_control()</a>
 | |
|      interface for both unix and windows, to cause database files to grow in
 | |
|      large chunks in order to reduce disk fragmentation.
 | |
| <li> Fixed a bug in the query planner that caused performance regressions
 | |
|      relative to 3.6.23.1 on some complex joins.
 | |
| <li> Fixed a typo in the OS/2 backend.
 | |
| <li> Refactored the pager module.
 | |
| <li> The SQLITE_MAX_PAGE_SIZE compile-time option is now silently ignored.
 | |
|      The maximum page size is hard-coded at 65536 bytes.
 | |
| 
 | |
| </ol></p>
 | |
| <a name="version_3_7_0_1"></a>
 | |
| <h3>2010-08-04 (3.7.0.1)</h3><p><ol class='lessindent'>
 | |
| <li> Fix a potential database corruption bug that can occur if version 3.7.0
 | |
|      and version 3.6.23.1 alternately write to the same database file.
 | |
|      <a href="http://www.sqlite.org/src/info/51ae9cad317a1">
 | |
|      Ticket [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="http://www.sqlite.org/src/info/6b00e0a34c">the OP_If bug</a>.
 | |
| 
 | |
| </ol></p>
 | |
| <a name="version_3_6_19"></a>
 | |
| <h3>2009-10-14 (3.6.19)</h3><p><ol class='lessindent'>
 | |
| <li>Added support for <a href="foreignkeys.html">foreign key constraints</a>.  Foreign key constraints
 | |
|     are disabled by default.  Use the <a href="pragma.html#pragma_foreign_keys">foreign_keys pragma</a> to turn them on.
 | |
| <li>Generalized the IS and IS NOT operators to take arbitrary expressions
 | |
|     on their right-hand side.
 | |
| <li>The <a href="tclsqlite.html">TCL Interface</a> has been enhanced to use the
 | |
|     <a href="http://www.tcl-lang.org/cgi-bin/tct/tip/322.html">Non-Recursive Engine (NRE)</a>
 | |
|     interface to the TCL interpreter when linked against TCL 8.6 or later.
 | |
| <li>Fix a bug introduced in 3.6.18 that can lead to a segfault when an
 | |
|     attempt is made to write on a read-only database.
 | |
| 
 | |
| </ol></p>
 | |
| <a name="version_3_6_18"></a>
 | |
| <h3>2009-09-11 (3.6.18)</h3><p><ol class='lessindent'>
 | |
| <li>Versioning of the SQLite source code has transitioned from CVS to
 | |
|     <a href="http://www.fossil-scm.org/">Fossil</a>.
 | |
| <li>Query planner enhancements.
 | |
| <li>The <a href="compile.html#enable_stat2">SQLITE_ENABLE_STAT2</a> compile-time option causes the <a href="lang_analyze.html">ANALYZE</a> 
 | |
|     command to collect a small histogram of each index, to help SQLite better
 | |
|     select among competing range query indices.
 | |
| <li>Recursive triggers can be enabled using the <a href="pragma.html#pragma_recursive_triggers">PRAGMA recursive_triggers</a>
 | |
|     statement.  
 | |
| <li>Delete triggers fire when rows are removed due to a 
 | |
|     <a href="lang_conflict.html">REPLACE conflict resolution</a>.  This feature is only
 | |
|     enabled when recursive triggers are enabled.
 | |
| <li>Added the <a href="c3ref/c_open_autoproxy.html">SQLITE_OPEN_SHAREDCACHE</a> and <a href="c3ref/c_open_autoproxy.html">SQLITE_OPEN_PRIVATECACHE</a>
 | |
|     flags for <a href="c3ref/open.html">sqlite3_open_v2()</a> used to override the global
 | |
|     <a href="sharedcache.html">shared cache mode</a> settings for individual database connections.
 | |
| <li>Added improved version identification features:
 | |
|     C-Preprocessor macro <a href="c3ref/c_source_id.html">SQLITE_SOURCE_ID</a>,
 | |
|     C/C++ interface <a href="c3ref/libversion.html">sqlite3_sourceid()</a>, and SQL function <a href="lang_corefunc.html#sqlite_source_id">sqlite_source_id()</a>.
 | |
| <li>Obscure bug fix on triggers
 | |
| (<a href="http://www.sqlite.org/src/info/efc02f9779">[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#groupconcat">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="http://www.sqlite.org/src/finfo?name=tool/genfkey.c">
 | |
|   source code</a> and
 | |
|   <a href="http://www.sqlite.org/src/finfo?name=tool/genfkey.README">
 | |
|   documentation</a> for the <b>genfkey</b> program for automatically generating
 | |
|   triggers to enforce foreign key constraints.</li>
 | |
| <li>Added the <a href="compile.html#omit_truncate_optimization">SQLITE_OMIT_TRUNCATE_OPTIMIZATION</a> compile-time option.</li>
 | |
| <li>The <a href="lang.html">SQL language documentation</a> is converted to use 
 | |
| <a href="syntaxdiagrams.html">syntax diagrams</a> instead of BNF.</li>
 | |
| <li>Other minor bug fixes</li>
 | |
| 
 | |
| </ol></p>
 | |
| <a name="version_3_6_3"></a>
 | |
| <h3>2008-09-22 (3.6.3)</h3><p><ol class='lessindent'>
 | |
| <li>Fix for a bug in the SELECT DISTINCT logic that was introduced by the
 | |
|     prior version.</li>
 | |
| <li>Other minor bug fixes</li>
 | |
| 
 | |
| </ol></p>
 | |
| <a name="version_3_6_2"></a>
 | |
| <h3>2008-08-30 (3.6.2)</h3><p><ol class='lessindent'>
 | |
| <li>Split the pager subsystem into separate pager and pcache subsystems.</li>
 | |
| <li>Factor out identifier resolution procedures into separate files.</li>
 | |
| <li>Bug fixes</li>
 | |
| 
 | |
| </ol></p>
 | |
| <a name="version_3_6_1"></a>
 | |
| <h3>2008-08-06 (3.6.1)</h3><p><ol class='lessindent'>
 | |
| <li>Added the <a href="malloc.html#lookaside">lookaside memory allocator</a> for a speed improvement in excess
 | |
|     of 15% on some workloads.  (Your mileage may vary.)</li>
 | |
| <li>Added the <a href="c3ref/c_config_covering_index_scan.html#sqliteconfiglookaside">SQLITE_CONFIG_LOOKASIDE</a> verb to <a href="c3ref/config.html">sqlite3_config()</a> to control
 | |
|     the default lookaside configuration.</li>
 | |
| <li>Added verbs <a href="c3ref/c_status_malloc_count.html#sqlitestatuspagecachesize">SQLITE_STATUS_PAGECACHE_SIZE</a> and
 | |
|     <a href="c3ref/c_status_malloc_count.html#sqlitestatusscratchsize">SQLITE_STATUS_SCRATCH_SIZE</a> to the <a href="c3ref/status.html">sqlite3_status()</a> interface.
 | |
| <li>Modified <a href="c3ref/c_config_covering_index_scan.html#sqliteconfigpagecache">SQLITE_CONFIG_PAGECACHE</a> and <a href="c3ref/c_config_covering_index_scan.html#sqliteconfigscratch">SQLITE_CONFIG_SCRATCH</a> to remove
 | |
|     the "+4" magic number in the buffer size computation.
 | |
| <li>Added the <a href="c3ref/db_config.html">sqlite3_db_config()</a> and <a href="c3ref/db_status.html">sqlite3_db_status()</a> interfaces for
 | |
|     controlling and monitoring the lookaside allocator separately on each
 | |
|     <a href="c3ref/sqlite3.html">database connection</a>.</li>
 | |
| <li>Numerous other performance enhancements</li>
 | |
| <li>Miscellaneous minor bug fixes</li>
 | |
| 
 | |
| </ol></p>
 | |
| <h3>2008-07-16 (3.6.0 beta)</h3><p><ol class='lessindent'>
 | |
| <li>Modifications to the <a href="c3ref/vfs.html">virtual file system</a> interface
 | |
|     to support a wider range of embedded systems.
 | |
|     See <a href="35to36.html">35to36.html</a> for additional information.
 | |
|     <font color="red">*** Potentially incompatible change ***</font></li>
 | |
| <li>All C-preprocessor macros used to control compile-time options
 | |
|     now begin with the prefix "SQLITE_".  This may require changes to
 | |
|     applications that compile SQLite using their own makefiles and with
 | |
|     custom compile-time options, hence we mark this as a
 | |
|     <font color="red">*** Potentially incompatible change ***</font></li>
 | |
| <li>The SQLITE_MUTEX_APPDEF compile-time option is no longer supported.
 | |
|     Alternative mutex implementations can now be added at run-time using
 | |
|     the <a href="c3ref/config.html">sqlite3_config()</a> interface with the <a href="c3ref/c_config_covering_index_scan.html#sqliteconfigmutex">SQLITE_CONFIG_MUTEX</a> verb.
 | |
|     <font color="red">*** Potentially incompatible change ***</font></li>
 | |
| <li>The handling of IN and NOT IN operators that contain a NULL on their
 | |
|     right-hand side expression is brought into compliance with the SQL
 | |
|     standard and with other SQL database engines.  This is a bug fix,
 | |
|     but as it has the potential to break legacy applications that depend
 | |
|     on the older buggy behavior, we mark that as a
 | |
|     <font color="red">*** Potentially incompatible change ***</font></li>
 | |
| <li>The result column names generated for compound subqueries have been 
 | |
|     simplified to show only the name of the column of the original table and
 | |
|     omit the table name.  This makes SQLite operate more like other SQL
 | |
|     database engines.</li>
 | |
| <li>Added the <a href="c3ref/config.html">sqlite3_config()</a> interface for doing run-time configuration
 | |
|     of the entire SQLite library.</li>
 | |
| <li>Added the <a href="c3ref/status.html">sqlite3_status()</a> interface used for querying run-time status
 | |
|     information about the overall SQLite library and its subsystems.</li>
 | |
| <li>Added the <a href="c3ref/initialize.html">sqlite3_initialize()</a> and <a href="c3ref/initialize.html">sqlite3_shutdown()</a> interfaces.</li>
 | |
| <li>The <a href="c3ref/c_open_autoproxy.html">SQLITE_OPEN_NOMUTEX</a> option was added to <a href="c3ref/open.html">sqlite3_open_v2()</a>.</li>
 | |
| <li>Added the <a href="pragma.html#pragma_page_count">PRAGMA page_count</a> command.</li>
 | |
| <li>Added the <a href="c3ref/next_stmt.html">sqlite3_next_stmt()</a> interface.</li>
 | |
| <li>Added a new <a href="rtree.html">R*Tree virtual table</a></li>
 | |
| 
 | |
| </ol></p>
 | |
| <a name="version_3_5_9"></a>
 | |
| <h3>2008-05-14 (3.5.9)</h3><p><ol class='lessindent'>
 | |
| <li>Added <em>experimental</em>
 | |
|     support for the <a href="pragma.html#pragma_journal_mode">journal_mode</a> PRAGMA and persistent journal.</li>
 | |
| <li><a href="pragma.html#pragma_journal_mode">Journal mode PERSIST</a> is the default behavior in
 | |
|     <a href="pragma.html#pragma_locking_mode">exclusive locking mode</a>.</li>
 | |
| <li>Fix a performance regression on LEFT JOIN (see ticket #3015)
 | |
|     that was mistakenly introduced in <a href="#version_3_5_8">version 3.5.8</a>.</li>
 | |
| <li>Performance enhancement: Reengineer the internal routines used
 | |
|     to interpret and render variable-length integers.</li>
 | |
| <li>Fix a buffer-overrun problem in <a href="c3ref/mprintf.html">sqlite3_mprintf()</a> which occurs
 | |
|     when a string without a zero-terminator is passed to "%.*s".</li>
 | |
| <li>Always convert IEEE floating point NaN values into NULL during
 | |
|     processing.  (Ticket #3060)</li>
 | |
| <li>Make sure that when a connection blocks on a RESERVED lock that
 | |
|     it is able to continue after the lock is released.  (Ticket #3093)</li>
 | |
| <li>The "configure" scripts should now automatically configure Unix
 | |
|     systems for large file support.  Improved error messages for
 | |
|     when large files are encountered and large file support is disabled.</li>
 | |
| <li>Avoid cache pages leaks following disk-full or I/O errors</li>
 | |
| <li>And, many more minor bug fixes and performance enhancements....</li>
 | |
| 
 | |
| </ol></p>
 | |
| <a name="version_3_5_8"></a>
 | |
| <h3>2008-04-16 (3.5.8)</h3><p><ol class='lessindent'>
 | |
| <li>Expose SQLite's internal pseudo-random number generator (PRNG)
 | |
|     via the <a href="c3ref/randomness.html">sqlite3_randomness()</a> interface</li>
 | |
| <li>New interface <a href="c3ref/context_db_handle.html">sqlite3_context_db_handle()</a> that returns the
 | |
|     <a href="c3ref/sqlite3.html">database connection</a> handle that has invoked an application-defined
 | |
|     SQL function.</li>
 | |
| <li>New interface <a href="c3ref/limit.html">sqlite3_limit()</a> allows size and length limits to be
 | |
|     set on a per-connection basis and at run-time.</li>
 | |
| <li>Improved crash-robustness: write the database page size into the rollback
 | |
|     journal header.</li>
 | |
| <li>Allow the <a href="lang_vacuum.html">VACUUM</a> command to change the page size of a database file.</li>
 | |
| <li>The xAccess() method of the VFS is allowed to return -1 to signal
 | |
|     a memory allocation error.</li>
 | |
| <li>Performance improvement: The OP_IdxDelete opcode uses unpacked records,
 | |
|     obviating the need for one OP_MakeRecord opcode call for each index
 | |
|     record deleted.</li>
 | |
| <li>Performance improvement: Constant subexpressions are factored out of
 | |
|     loops.</li>
 | |
| <li>Performance improvement: Results of OP_Column are reused rather than
 | |
|     issuing multiple OP_Column opcodes.</li>
 | |
| <li>Fix a bug in the RTRIM collating sequence.</li>
 | |
| <li>Fix a bug in the SQLITE_SECURE_DELETE option that was causing
 | |
|     Firefox crashes.  Make arrangements to always test SQLITE_SECURE_DELETE
 | |
|     prior to each release.</li>
 | |
| <li>Other miscellaneous performance enhancements.</li>
 | |
| <li>Other miscellaneous minor bug fixes.</li>
 | |
| 
 | |
| </ol></p>
 | |
| <a name="version_3_5_7"></a>
 | |
| <h3>2008-03-17 (3.5.7)</h3><p><ol class='lessindent'>
 | |
| <li>Fix a bug (ticket #2927) in the register allocation for
 | |
| compound selects - introduced by the new VM code in version 3.5.5.</li>
 | |
| <li>ALTER TABLE uses double-quotes instead of single-quotes for quoting
 | |
| filenames.</li>
 | |
| <li>Use the WHERE clause to reduce the size of a materialized VIEW in
 | |
| an UPDATE or DELETE statement. (Optimization)</li>
 | |
| <li>Do not apply the flattening optimization if the outer query is an
 | |
| aggregate and the inner query contains ORDER BY.  (Ticket #2943)</li>
 | |
| <li>Additional OS/2 updates</li>
 | |
| <li>Added an experimental power-of-two, first-fit memory allocator.</li>
 | |
| <li>Remove all instances of sprintf() from the code</li>
 | |
| <li>Accept "Z" as the zulu timezone at the end of date strings</li>
 | |
| <li>Fix a bug in the LIKE optimizer that occurs when the last character
 | |
| before the first wildcard is an upper-case "Z"</li>
 | |
| <li>Added the "bitvec" object for keeping track of which pages have
 | |
| been journalled.  Improves speed and reduces memory consumption, especially
 | |
| for large database files.</li>
 | |
| <li>Get the SQLITE_ENABLE_LOCKING_STYLE macro working again on Mac OS X.</li>
 | |
| <li>Store the statement journal in the temporary file directory instead of
 | |
| collocated with the database file.</li>
 | |
| <li>Many improvements and cleanups to the configure script</li>
 | |
| 
 | |
| </ol></p>
 | |
| <a name="version_3_5_6"></a>
 | |
| <h3>2008-02-06 (3.5.6)</h3><p><ol class='lessindent'>
 | |
| <li>Fix a bug (ticket #2913)
 | |
| that prevented virtual tables from working in a LEFT JOIN.
 | |
| The problem was introduced into shortly before the 3.5.5 release.</li>
 | |
| <li>Bring the OS/2 porting layer up-to-date.</li>
 | |
| <li>Add the new <a href="c3ref/result_blob.html">sqlite3_result_error_code()</a> API and use it in the
 | |
| implementation of <a href="lang_attach.html">ATTACH</a> so that proper error codes are returned
 | |
| when an <a href="lang_attach.html">ATTACH</a> fails.</li>
 | |
| 
 | |
| </ol></p>
 | |
| <a name="version_3_5_5"></a>
 | |
| <h3>2008-01-31 (3.5.5)</h3><p><ol class='lessindent'>
 | |
| <li>Convert the underlying virtual machine to be a register-based machine
 | |
| rather than a stack-based machine.  The only user-visible change
 | |
| is in the output of EXPLAIN.</li>
 | |
| <li>Add the build-in RTRIM collating sequence.</li>
 | |
| 
 | |
| </ol></p>
 | |
| <a name="version_3_5_4"></a>
 | |
| <h3>2007-12-14 (3.5.4)</h3><p><ol class='lessindent'>
 | |
| <li>Fix a critical bug in UPDATE or DELETE that occurs when an
 | |
| OR REPLACE clause or a trigger causes rows in the same table to
 | |
| be deleted as side effects.  (See ticket #2832.)  The most likely
 | |
| result of this bug is a segmentation fault, though database
 | |
| corruption is a possibility.</li>
 | |
| <li>Bring the processing of ORDER BY into compliance with the 
 | |
| SQL standard for case where a result alias and a table column name
 | |
| are in conflict.  Correct behavior is to prefer the result alias.
 | |
| Older versions of SQLite incorrectly picked the table column.
 | |
| (See ticket #2822.)</li>
 | |
| <li>The <a href="lang_vacuum.html">VACUUM</a> command preserves
 | |
| the setting of the 
 | |
| <a href="pragma.html#pragma_legacy_file_format">legacy_file_format pragma</a>.
 | |
| (Ticket #2804.)</li>
 | |
| <li>Productize and officially support the group_concat() SQL function.</li>
 | |
| <li>Better optimization of some IN operator expressions.</li>
 | |
| <li>Add the ability to change the 
 | |
| <a href="pragma.html#pragma_auto_vacuum">auto_vacuum</a> status of a
 | |
| database by setting the auto_vaccum pragma and VACUUMing the database.</li>
 | |
| <li>Prefix search in FTS3 is much more efficient.</li>
 | |
| <li>Relax the SQL statement length restriction in the CLI so that
 | |
| the ".dump" output of databases with very large BLOBs and strings can
 | |
| be played back to recreate the database.</li>
 | |
| <li>Other small bug fixes and optimizations.</li>
 | |
| 
 | |
| </ol></p>
 | |
| <a name="version_3_5_3"></a>
 | |
| <h3>2007-11-27 (3.5.3)</h3><p><ol class='lessindent'>
 | |
| <li>Move website and documentation files out of the source tree into
 | |
| a <a href="http://www.sqlite.org/docsrc/">separate CM system</a>.
 | |
| <li>Fix a long-standing bug in INSERT INTO ... SELECT ... statements
 | |
| where the SELECT is compound.
 | |
| <li>Fix a long-standing bug in RAISE(IGNORE) as used in BEFORE triggers.
 | |
| <li>Fixed the operator precedence for the ~ operator.
 | |
| <li>On Win32, do not return an error when attempting to delete a file
 | |
| that does not exist.
 | |
| <li>Allow collating sequence names to be quoted.
 | |
| <li>Modify the TCL interface to use <a href="c3ref/prepare.html">sqlite3_prepare_v2()</a>.
 | |
| <li>Fix multiple bugs that can occur following a malloc() failure.
 | |
| <li><a href="c3ref/step.html">sqlite3_step()</a> returns <a href="rescode.html#misuse">SQLITE_MISUSE</a> instead of crashing when
 | |
| called with a NULL parameter.
 | |
| <li>FTS3 now uses the SQLite memory allocator exclusively.  The
 | |
| FTS3 amalgamation can now be appended to the SQLite amalgamation to
 | |
| generate a super-amalgamation containing both.
 | |
| <li>The DISTINCT keyword now will sometimes use an INDEX if an
 | |
| appropriate index is available and the optimizer thinks its use
 | |
| might be advantageous.
 | |
| 
 | |
| </ol></p>
 | |
| <a name="version_3_5_2"></a>
 | |
| <h3>2007-11-05 (3.5.2)</h3><p><ol class='lessindent'>
 | |
| <li>Dropped support for the <a href="compile.html#omitfeatures">SQLITE_OMIT_MEMORY_ALLOCATION</a> compile-time
 | |
| option.
 | |
| <li>Always open files using FILE_FLAG_RANDOM_ACCESS under Windows.
 | |
| <li>The 3rd parameter of the built-in SUBSTR() function is now optional.
 | |
| <li>Bug fix: do not invoke the authorizer when reparsing the schema after
 | |
| a schema change.
 | |
| <li>Added the experimental malloc-free memory allocator in mem3.c.
 | |
| <li>Virtual machine stores 64-bit integer and floating point constants
 | |
| in binary instead of text for a performance boost.
 | |
| <li>Fix a race condition in test_async.c.
 | |
| <li>Added the ".timer" command to the CLI
 | |
| 
 | |
| </ol></p>
 | |
| <a name="version_3_5_1"></a>
 | |
| <h3>2007-10-04 (3.5.1)</h3><p><ol class='lessindent'>
 | |
| <li><i><b>Nota Bene:</b> We are not using terms "alpha" or "beta" on this
 | |
|     release because the code is stable and because if we use those terms,
 | |
|     nobody will upgrade.  However, we still reserve the right to make
 | |
|     incompatible changes to the new VFS interface in future releases.</i></li>
 | |
| 
 | |
| <li>Fix a bug in the handling of <a href="rescode.html#full">SQLITE_FULL</a> errors that could lead
 | |
|     to database corruption.  Ticket #2686.
 | |
| <li>The test_async.c drive now does full file locking and works correctly
 | |
|     when used simultaneously by multiple processes on the same database.
 | |
| <li>The CLI ignores whitespace (including comments) at the end of lines
 | |
| <li>Make sure the query optimizer checks dependencies on all terms of
 | |
|     a compound SELECT statement.  Ticket #2640.
 | |
| <li>Add demonstration code showing how to build a VFS for a raw
 | |
|     mass storage without a filesystem.
 | |
| <li>Added an output buffer size parameter to the xGetTempname() method
 | |
|     of the VFS layer.
 | |
| <li>Sticky <a href="rescode.html#full">SQLITE_FULL</a> or <a href="rescode.html#ioerr">SQLITE_IOERR</a> errors in the pager are reset
 | |
|     when a new transaction is started.
 | |
| 
 | |
| </ol></p>
 | |
| <a name="version_3_5_0"></a>
 | |
| <h3>2007-09-04 (3.5.0) alpha</h3><p><ol class='lessindent'>
 | |
| <li>Redesign the OS interface layer.  See
 | |
|     <a href="34to35.html">34to35.html</a> for details.
 | |
|     <font color="red">*** Potentially incompatible change ***</font>
 | |
| <li>The <a href="c3ref/release_memory.html">sqlite3_release_memory()</a>, <a href="c3ref/soft_heap_limit.html">sqlite3_soft_heap_limit()</a>,
 | |
|     and <a href="c3ref/enable_shared_cache.html">sqlite3_enable_shared_cache()</a> interfaces now work cross all
 | |
|     threads in the process, not just the single thread in which they
 | |
|     are invoked.
 | |
|     <font color="red">*** Potentially incompatible change ***</font>
 | |
| <li>Added the <a href="c3ref/open.html">sqlite3_open_v2()</a> interface.  
 | |
| <li>Reimplemented the memory allocation subsystem and made it 
 | |
|     replaceable at compile-time.
 | |
| <li>Created a new mutex subsystem and made it replicable at
 | |
|     compile-time.
 | |
| <li>The same database connection may now be used simultaneously by
 | |
|     separate threads.
 | |
| 
 | |
| </ol></p>
 | |
| <a name="version_3_4_2"></a>
 | |
| <h3>2007-08-13 (3.4.2)</h3><p><ol class='lessindent'>
 | |
| <li>Fix a database corruption bug that might occur if a ROLLBACK command
 | |
| is executed in <a href="pragma.html#pragma_auto_vacuum">auto-vacuum mode</a>
 | |
| and a very small <a href="c3ref/soft_heap_limit.html">sqlite3_soft_heap_limit</a> is set. 
 | |
| Ticket #2565.
 | |
| 
 | |
| <li>Add the ability to run a full regression test with a small
 | |
| <a href="c3ref/soft_heap_limit.html">sqlite3_soft_heap_limit</a>.
 | |
| 
 | |
| <li>Fix other minor problems with using small soft heap limits.
 | |
| 
 | |
| <li>Work-around for 
 | |
| <a href="http://gcc.gnu.org/bugzilla/show_bug.cgi?id=32575">GCC bug 32575</a>.
 | |
| 
 | |
| <li>Improved error detection of misused aggregate functions.
 | |
| 
 | |
| <li>Improvements to the amalgamation generator script so that all symbols
 | |
| are prefixed with either SQLITE_PRIVATE or SQLITE_API.
 | |
| 
 | |
| </ol></p>
 | |
| <a name="version_3_4_1"></a>
 | |
| <h3>2007-07-20 (3.4.1)</h3><p><ol class='lessindent'>
 | |
| <li>Fix a bug in <a href="lang_vacuum.html">VACUUM</a> that can lead to
 | |
|     database corruptio if two
 | |
|     processes are connected to the database at the same time and one
 | |
|     VACUUMs then the other then modifies the database.</li>
 | |
| <li>The expression "+column" is now considered the same as "column"
 | |
|     when computing the collating sequence to use on the expression.</li>
 | |
| <li>In the <a href="tclsqlite.html">TCL language interface</a>,
 | |
|    "@variable" instead of "$variable" always binds as a blob.</li>
 | |
| <li>Added <a href="pragma.html#pragma_freelist_count">PRAGMA freelist_count</a>
 | |
|     for determining the current size of the freelist.</li>
 | |
| <li>The <a href="pragma.html#pragma_auto_vacuum">
 | |
|     PRAGMA auto_vacuum=incremental</a> setting is now persistent.</li>
 | |
| <li>Add FD_CLOEXEC to all open files under Unix.</li>
 | |
| <li>Fix a bug in the <a href="optoverview.html#minmax">
 | |
|     min()/max() optimization</a> when applied to
 | |
|     descending indices.</li>
 | |
| <li>Make sure the TCL language interface works correctly with 64-bit
 | |
|     integers on 64-bit machines.</li>
 | |
| <li>Allow the value -9223372036854775808 as an integer literal in SQL
 | |
|     statements.</li>
 | |
| <li>Add the capability of "hidden" columns in virtual tables.</li>
 | |
| <li>Use the macro SQLITE_PRIVATE (defaulting to "static") on all
 | |
|     internal functions in the amalgamation.</li>
 | |
| <li>Add pluggable tokenizers and <a href="http://www.icu-project.org/">ICU</a>
 | |
|     tokenization support to FTS2</li>
 | |
| <li>Other minor bug fixes and documentation enhancements</li>
 | |
| 
 | |
| </ol></p>
 | |
| <a name="version_3_4_0"></a>
 | |
| <h3>2007-06-18 (3.4.0)</h3><p><ol class='lessindent'>
 | |
| <li>Fix a bug that can lead to database corruption if an <a href="rescode.html#busy">SQLITE_BUSY</a> error
 | |
|     occurs in the middle of an explicit transaction and that transaction
 | |
|     is later committed.  Ticket #2409.
 | |
| <li>Fix a bug that can lead to database corruption if autovacuum mode is
 | |
|     on and a malloc() failure follows a CREATE TABLE or CREATE INDEX statement
 | |
|     which itself follows a cache overflow inside a transaction.  See
 | |
|     ticket #2418. 
 | |
|     </li>
 | |
| <li>Added explicit <a href="limits.html">upper bounds</a> on the sizes and
 | |
|     quantities of things SQLite can process.  This change might cause
 | |
|     compatibility problems for
 | |
|     applications that use SQLite in the extreme, which is why the current
 | |
|     release is 3.4.0 instead of 3.3.18.</li>
 | |
| <li>Added support for <a href="c3ref/blob_open.html">Incremental BLOB I/O</a>.</li>
 | |
| <li>Added the <a href="c3ref/bind_blob.html">sqlite3_bind_zeroblob()</a> API</a>
 | |
|     and the <a href="lang_expr.html#zeroblob">zeroblob()</a> SQL function.</li>
 | |
| <li>Added support for <a href="pragma.html#pragma_incremental_vacuum">
 | |
|     Incremental Vacuum</a>.</li>
 | |
| <li>Added the SQLITE_MIXED_ENDIAN_64BIT_FLOAT compile-time option to support
 | |
|     ARM7 processors with goofy endianness.</li>
 | |
| <li>Removed all instances of sprintf() and strcpy() from the core library.</li>
 | |
| <li>Added support for
 | |
|     <a href="http://www.icu-project.org/">International Components for Unicode (ICU)</a>
 | |
|     to the full-text search extensions.
 | |
| <li>In the Windows OS driver, reacquire a SHARED lock if an attempt to
 | |
|     acquire an EXCLUSIVE lock fails.  Ticket #2354</li>
 | |
| <li>Fix the REPLACE() function so that it returns NULL if the second argument
 | |
|     is an empty string.  Ticket #2324.</li>
 | |
| <li>Document the hazards of type conversions in
 | |
|     <a href="c3ref/column_blob.html">sqlite3_column_blob()</a>
 | |
|     and related APIs.  Fix unnecessary type conversions.  Ticket #2321.</li>
 | |
| <li>Internationalization of the TRIM() function.  Ticket #2323</li>
 | |
| <li>Use memmove() instead of memcpy() when moving between memory regions
 | |
|     that might overlap.  Ticket #2334</li>
 | |
| <li>Fix an optimizer bug involving subqueries in a compound SELECT that has
 | |
|     both an ORDER BY and a LIMIT clause.  Ticket #2339.</li>
 | |
| <li>Make sure the <a href="c3ref/mprintf.html">sqlite3_snprintf()</a>
 | |
|     interface does not zero-terminate the buffer if the buffer size is
 | |
|     less than 1.  Ticket #2341</li>
 | |
| <li>Fix the built-in printf logic so that it prints "NaN" not "Inf" for
 | |
|     floating-point NaNs.  Ticket #2345</li>
 | |
| <li>When converting BLOB to TEXT, use the text encoding of the main database.
 | |
|     Ticket #2349</li>
 | |
| <li>Keep the full precision of integers (if possible) when casting to
 | |
|     NUMERIC.  Ticket #2364</li>
 | |
| <li>Fix a bug in the handling of UTF16 codepoint 0xE000</li>
 | |
| <li>Consider explicit collate clauses when matching WHERE constraints
 | |
|     to indices in the query optimizer.  Ticket #2391</li>
 | |
| <li>Fix the query optimizer to correctly handle constant expressions in 
 | |
|     the ON clause of a LEFT JOIN.  Ticket #2403</li>
 | |
| <li>Fix the query optimizer to handle rowid comparisons to NULL
 | |
|     correctly.  Ticket #2404</li>
 | |
| <li>Fix many potential segfaults that could be caused by malicious SQL
 | |
|     statements.</li>
 | |
| 
 | |
| </ol></p>
 | |
| <a name="version_3_3_17"></a>
 | |
| <h3>2007-04-25 (3.3.17)</h3><p><ol class='lessindent'>
 | |
| <li>When the "write_version" value of the database header is larger than
 | |
|     what the library understands, make the database read-only instead of
 | |
|     unreadable.</li>
 | |
| <li>Other minor bug fixes</li>
 | |
| 
 | |
| </ol></p>
 | |
| <a name="version_3_3_16"></a>
 | |
| <h3>2007-04-18 (3.3.16)</h3><p><ol class='lessindent'>
 | |
| <li>Fix a bug that caused VACUUM to fail if NULLs appeared in a
 | |
|     UNIQUE column.</li>
 | |
| <li>Reinstate performance improvements that were added in
 | |
|     <a href="#version_3_3_14">Version 3.3.14</a>
 | |
|     but regressed in <a href="#version_3_3_15">Version 3.3.15</a>.</li>
 | |
| <li>Fix problems with the handling of ORDER BY expressions on
 | |
|     compound SELECT statements in subqueries.</li>
 | |
| <li>Fix a potential segfault when destroying locks on WinCE in
 | |
|     a multi-threaded environment.</li>
 | |
| <li>Documentation updates.</li>
 | |
| 
 | |
| </ol></p>
 | |
| <a name="version_3_3_15"></a>
 | |
| <h3>2007-04-09 (3.3.15)</h3><p><ol class='lessindent'>
 | |
| <li>Fix a bug introduced in 3.3.14 that caused a rollback of
 | |
|     CREATE TEMP TABLE to leave the database connection wedged.</li>
 | |
| <li>Fix a bug that caused an extra NULL row to be returned when
 | |
|     a descending query was interrupted by a change to the database.</li>
 | |
| <li>The FOR EACH STATEMENT clause on a trigger now causes a syntax
 | |
|     error.  It used to be silently ignored.</li>
 | |
| <li>Fix an obscure and relatively harmless problem that might have caused
 | |
|     a resource leak following an I/O error.</li>
 | |
| <li>Many improvements to the test suite.  Test coverage now exceeded 98%</li>
 | |
| 
 | |
| </ol></p>
 | |
| <a name="version_3_3_14"></a>
 | |
| <h3>2007-04-02 (3.3.14)</h3><p><ol class='lessindent'>
 | |
| <li>Fix a bug (ticket #2273)
 | |
|     that could cause a segfault when the IN operator
 | |
|     is used one one term of a two-column index and the right-hand side of
 | |
|     the IN operator contains a NULL.</li>
 | |
| <li>Added a new OS interface method for determining the sector size
 | |
|     of underlying media:  sqlite3OsSectorSize().</li>
 | |
| <li>A new algorithm for statements of the form
 | |
|     INSERT INTO <i>table1</i> SELECT * FROM <i>table2</i>
 | |
|     is faster and reduces fragmentation.  VACUUM uses statements of
 | |
|     this form and thus runs faster and defragments better.</li>
 | |
| <li>Performance enhancements through reductions in disk I/O:
 | |
| <ol type='a'>
 | |
|   <li>Do not read the last page of an overflow chain when
 | |
|       deleting the row - just add that page to the freelist.</li>
 | |
|   <li>Do not store pages being deleted in the 
 | |
|       rollback journal.</li>
 | |
|   <li>Do not read in the (meaningless) content of
 | |
|       pages extracted from the freelist.</li>
 | |
|   <li>Do not flush the page cache (and thus avoiding
 | |
|       a cache refill) unless another process changes the underlying
 | |
|       database file.</li>
 | |
|   <li>Truncate rather than delete the rollback journal when committing
 | |
|       a transaction in exclusive access mode, or when committing the TEMP
 | |
|       database.</li>
 | |
| </ol></li>
 | |
| <li>Added support for exclusive access mode using
 | |
|     <a href="pragma.html#pragma_locking_mode">
 | |
|     "PRAGMA locking_mode=EXCLUSIVE"</a></li>
 | |
| <li>Use heap space instead of stack space for large buffers in the
 | |
|     pager - useful on embedded platforms with  stack-space
 | |
|     limitations.</li>
 | |
| <li>Add a makefile target "sqlite3.c" that builds an amalgamation containing
 | |
|     the core SQLite library C code in a single file.</li>
 | |
| <li>Get the library working correctly when compiled 
 | |
|     with GCC option "-fstrict-aliasing".</li>
 | |
| <li>Removed the vestigal SQLITE_PROTOCOL error.</li>
 | |
| <li>Improvements to test coverage, other minor bugs fixed,
 | |
|     memory leaks plugged,
 | |
|     code refactored and/or recommended in places for easier reading.</li>
 | |
| 
 | |
| </ol></p>
 | |
| <a name="version_3_3_13"></a>
 | |
| <h3>2007-02-13 (3.3.13)</h3><p><ol class='lessindent'>
 | |
| <li>Add a "fragmentation" measurement in the output of sqlite3_analyzer.</li>
 | |
| <li>Add the COLLATE operator used to explicitly set the collating sequence
 | |
| used by an expression.  This feature is considered experimental pending
 | |
| additional testing.</li>
 | |
| <li>Allow up to 64 tables in a join - the old limit was 32.</li>
 | |
| <li>Added two new experimental functions:
 | |
| <a href="lang_expr.html#randomblobFunc">randomBlob()</a> and
 | |
| <a href="lang_expr.html#hexFunc">hex()</a>.
 | |
| Their intended use is to facilitate generating 
 | |
| <a href="http://en.wikipedia.org/wiki/UUID">UUIDs</a>.
 | |
| </li>
 | |
| <li>Fix a problem where
 | |
| <a href="pragma.html#pragma_count_changes">PRAGMA count_changes</a> was
 | |
| causing incorrect results for updates on tables with triggers</li>
 | |
| <li>Fix a bug in the ORDER BY clause optimizer for joins where the
 | |
| left-most table in the join is constrained by a UNIQUE index.</li>
 | |
| <li>Fixed a bug in the "copy" method of the TCL interface.</li>
 | |
| <li>Bug fixes in fts1 and fts2 modules.</li>
 | |
| 
 | |
| </ol></p>
 | |
| <a name="version_3_3_12"></a>
 | |
| <h3>2007-01-27 (3.3.12)</h3><p><ol class='lessindent'>
 | |
| <li>Fix another bug in the IS NULL optimization that was added in
 | |
| version 3.3.9.</li>
 | |
| <li>Fix an assertion fault that occurred on deeply nested views.</li>
 | |
| <li>Limit the amount of output that
 | |
| <a href="pragma.html#pragma_integrity_check">PRAGMA integrity_check</a>
 | |
| generates.</li>
 | |
| <li>Minor syntactic changes to support a wider variety of compilers.</li>
 | |
| 
 | |
| </ol></p>
 | |
| <a name="version_3_3_11"></a>
 | |
| <h3>2007-01-22 (3.3.11)</h3><p><ol class='lessindent'>
 | |
| <li>Fix another bug in the implementation of the new 
 | |
| <a href="c3ref/prepare.html">sqlite3_prepare_v2()</a> API.
 | |
| We'll get it right eventually...</li>
 | |
| <li>Fix a bug in the IS NULL optimization that was added in version 3.3.9 -
 | |
| the bug was causing incorrect results on certain LEFT JOINs that included
 | |
| in the WHERE clause an IS NULL constraint for the right table of the
 | |
| LEFT JOIN.</li>
 | |
| <li>Make AreFileApisANSI() a no-op macro in WinCE since WinCE does not
 | |
| support this function.</li>
 | |
| 
 | |
| </ol></p>
 | |
| <a name="version_3_3_10"></a>
 | |
| <h3>2007-01-09 (3.3.10)</h3><p><ol class='lessindent'>
 | |
| <li>Fix bugs in the implementation of the new 
 | |
| <a href="c3ref/prepare.html">sqlite3_prepare_v2()</a> API
 | |
| that can lead to segfaults.</li>
 | |
| <li>Fix 1-second round-off errors in the 
 | |
| strftime() function</li>
 | |
| <li>Enhance the Windows OS layer to provide detailed error codes</li>
 | |
| <li>Work around a win2k problem so that SQLite can use single-character
 | |
| database file names</li>
 | |
| <li>The
 | |
| <a href="pragma.html#pragma_user_version">user_version</a> and
 | |
| <a href="pragma.html#pragma_schema_version">schema_version</a> pragmas 
 | |
| correctly set their column names in the result set</li>
 | |
| <li>Documentation updates</li>
 | |
| 
 | |
| </ol></p>
 | |
| <a name="version_3_3_9"></a>
 | |
| <h3>2007-01-04 (3.3.9)</h3><p><ol class='lessindent'>
 | |
| <li>Fix bugs in pager.c that could lead to database corruption if two
 | |
| processes both try to recover a hot journal at the same instant</li>
 | |
| <li>Added the <a href="c3ref/prepare.html">sqlite3_prepare_v2()</a>
 | |
| API.</li>
 | |
| <li>Fixed the ".dump" command in the command-line shell to show
 | |
| indices, triggers and views again.</li>
 | |
| <li>Change the table_info pragma so that it returns NULL for the default
 | |
| value if there is no default value</li>
 | |
| <li>Support for non-ASCII characters in win95 filenames</li>
 | |
| <li>Query optimizer enhancements:
 | |
| <ol type='a'>
 | |
|   <li>Optimizer does a better job of using indices to satisfy ORDER BY
 | |
|   clauses that sort on the integer primary key</li>
 | |
|   <li>Use an index to satisfy an IS NULL operator in the WHERE clause</li>
 | |
|   <li>Fix a bug that was causing the optimizer to miss an OR optimization
 | |
|   opportunity</li>
 | |
|   <li>The optimizer has more freedom to reorder tables in the FROM clause
 | |
|   even in there are LEFT joins.</li>
 | |
| </ol>
 | |
| <li>Extension loading supported added to WinCE</li>
 | |
| <li>Allow constraint names on the DEFAULT clause in a table definition</li>
 | |
| <li>Added the ".bail" command to the command-line shell</li>
 | |
| <li>Make CSV (comma separate value) output from the command-line shell
 | |
| more closely aligned to accepted practice</li>
 | |
| <li>Experimental FTS2 module added</li>
 | |
| <li>Use sqlite3_mprintf() instead of strdup() to avoid libc dependencies</li>
 | |
| <li>VACUUM uses a temporary file in the official TEMP folder, not in the
 | |
| same directory as the original database</li>
 | |
| <li>The prefix on temporary filenames on Windows is changed from "sqlite"
 | |
| to "etilqs".</li>
 | |
| 
 | |
| </ol></p>
 | |
| <a name="version_3_3_8"></a>
 | |
| <h3>2006-10-09 (3.3.8)</h3><p><ol class='lessindent'>
 | |
| <li>Support for full text search using the FTS1 module (beta)</li>
 | |
| <li>Added Mac OS X locking patches (beta - disabled by default)</li>
 | |
| <li>Introduce extended error codes and add error codes for various
 | |
| kinds of I/O errors.</li>
 | |
| <li>Added support for IF EXISTS on CREATE/DROP TRIGGER/VIEW</li>
 | |
| <li>Fix the regression test suite so that it works with Tcl8.5</li>
 | |
| <li>Enhance sqlite3_set_authorizer() to provide notification of calls to
 | |
|     SQL functions.</li>
 | |
| <li>Added experimental API:  sqlite3_auto_extension()</li>
 | |
| <li>Various minor bug fixes</li>
 | |
| 
 | |
| </ol></p>
 | |
| <a name="version_3_3_7"></a>
 | |
| <h3>2006-08-12 (3.3.7)</h3><p><ol class='lessindent'>
 | |
| <li>Added support for virtual tables (beta)</li>
 | |
| <li>Added support for dynamically loaded extensions (beta)</li>
 | |
| <li>The 
 | |
| <a href="c3ref/interrupt.html">sqlite3_interrupt()</a>
 | |
| routine can be called for a different thread</li>
 | |
| <li>Added the <a href="lang_expr.html#match">MATCH</a> operator.</li>
 | |
| <li>The default file format is now 1.  
 | |
| 
 | |
| </ol></p>
 | |
| <a name="version_3_3_6"></a>
 | |
| <h3>2006-06-06 (3.3.6)</h3><p><ol class='lessindent'>
 | |
| <li>Plays better with virus scanners on Windows</li>
 | |
| <li>Faster :memory: databases</li>
 | |
| <li>Fix an obscure segfault in UTF-8 to UTF-16 conversions</li>
 | |
| <li>Added driver for OS/2</li>
 | |
| <li>Correct column meta-information returned for aggregate queries</li>
 | |
| <li>Enhanced output from EXPLAIN QUERY PLAN</li>
 | |
| <li>LIMIT 0 now works on subqueries</li>
 | |
| <li>Bug fixes and performance enhancements in the query optimizer</li>
 | |
| <li>Correctly handle NULL filenames in ATTACH and DETACH</li>
 | |
| <li>Improved syntax error messages in the parser</li>
 | |
| <li>Fix type coercion rules for the IN operator</li>
 | |
| 
 | |
| </ol></p>
 | |
| <a name="version_3_3_5"></a>
 | |
| <h3>2006-04-05 (3.3.5)</h3><p><ol class='lessindent'>
 | |
| <li>CHECK constraints use conflict resolution algorithms correctly.</li>
 | |
| <li>The SUM() function throws an error on integer overflow.</li>
 | |
| <li>Choose the column names in a compound query from the left-most SELECT
 | |
|     instead of the right-most.</li>
 | |
| <li>The sqlite3_create_collation() function
 | |
|     honors the SQLITE_UTF16_ALIGNED flag.</li>
 | |
| <li>SQLITE_SECURE_DELETE compile-time option causes deletes to overwrite
 | |
|     old data with zeros.</li>
 | |
| <li>Detect integer overflow in abs().</li>
 | |
| <li>The random() function provides 64 bits of randomness instead of
 | |
|     only 32 bits.</li>
 | |
| <li>Parser detects and reports automaton stack overflow.</li>
 | |
| <li>Change the round() function to return REAL instead of TEXT.</li>
 | |
| <li>Allow WHERE clause terms on the left table of a LEFT OUTER JOIN to
 | |
|     contain aggregate subqueries.</li>
 | |
| <li>Skip over leading spaces in text to numeric conversions.</li>
 | |
| <li>Various minor bug and documentation typo fixes and
 | |
|     performance enhancements.</li>
 | |
| 
 | |
| </ol></p>
 | |
| <a name="version_3_3_4"></a>
 | |
| <h3>2006-02-11 (3.3.4)</h3><p><ol class='lessindent'>
 | |
| <li>Fix a blunder in the Unix mutex implementation that can lead to
 | |
| deadlock on multithreaded systems.</li>
 | |
| <li>Fix an alignment problem on 64-bit machines</li>
 | |
| <li>Added the fullfsync pragma.</li>
 | |
| <li>Fix an optimizer bug that could have caused some unusual LEFT OUTER JOINs
 | |
| to give incorrect results.</li>
 | |
| <li>The SUM function detects integer overflow and converts to accumulating
 | |
| an approximate result using floating point numbers</li>
 | |
| <li>Host parameter names can begin with '@' for compatibility with SQL Server.
 | |
| </li>
 | |
| <li>Other miscellaneous bug fixes</li>
 | |
| 
 | |
| </ol></p>
 | |
| <a name="version_3_3_3"></a>
 | |
| <h3>2006-01-31 (3.3.3)</h3><p><ol class='lessindent'>
 | |
| <li>Removed support for an ON CONFLICT clause on CREATE INDEX - it never
 | |
| worked correctly so this should not present any backward compatibility
 | |
| problems.</li>
 | |
| <li>Authorizer callback now notified of ALTER TABLE ADD COLUMN commands</li>
 | |
| <li>After any changes to the TEMP database schema, all prepared statements
 | |
| are invalidated and must be recreated using a new call to
 | |
| sqlite3_prepare()</li>
 | |
| <li>Other minor bug fixes in preparation for the first stable release
 | |
| of version 3.3</li>
 | |
| 
 | |
| </ol></p>
 | |
| <h3>2006-01-24 (3.3.2 beta)</h3><p><ol class='lessindent'>
 | |
| <li>Bug fixes and speed improvements.  Improved test coverage.</li>
 | |
| <li>Changes to the OS-layer interface: mutexes must now be recursive.</li>
 | |
| <li>Discontinue the use of thread-specific data for out-of-memory
 | |
| exception handling</li>
 | |
| 
 | |
| </ol></p>
 | |
| <h3>2006-01-16 (3.3.1 alpha)</h3><p><ol class='lessindent'>
 | |
| <li>Countless bug fixes</li>
 | |
| <li>Speed improvements</li>
 | |
| <li>Database connections can now be used by multiple threads, not just
 | |
| the thread in which they were created.</li>
 | |
| 
 | |
| </ol></p>
 | |
| <h3>2006-01-11 (3.3.0 alpha)</h3><p><ol class='lessindent'>
 | |
| <li>CHECK constraints</li>
 | |
| <li>IF EXISTS and IF NOT EXISTS clauses on CREATE/DROP TABLE/INDEX.</li>
 | |
| <li>DESC indices</li>
 | |
| <li>More efficient encoding of boolean values resulting in smaller database
 | |
| files</li>
 | |
| <li>More aggressive <a href="compile.html#omit_floating_point">SQLITE_OMIT_FLOATING_POINT</a></li>
 | |
| <li>Separate INTEGER and REAL affinity</li>
 | |
| <li>Added a virtual function layer for the OS interface</li>
 | |
| <li>"exists" method added to the TCL interface</li>
 | |
| <li>Improved response to out-of-memory errors</li>
 | |
| <li>Database cache can be optionally shared between connections
 | |
| in the same thread</li>
 | |
| <li>Optional READ UNCOMMITTED isolation (instead of the default
 | |
| isolation level of SERIALIZABLE) and table level locking when
 | |
| database connections share a common cache.</li>
 | |
| 
 | |
| </ol></p>
 | |
| <a name="version_3_2_8"></a>
 | |
| <h3>2005-12-19 (3.2.8)</h3><p><ol class='lessindent'>
 | |
| <li>Fix an obscure bug that can cause database corruption under the
 | |
| following unusual circumstances: A large INSERT or UPDATE statement which 
 | |
| is part of an even larger transaction fails due to a uniqueness constraint
 | |
| but the containing transaction commits.</li>
 | |
| 
 | |
| </ol></p>
 | |
| <a name="version_2_8_17"></a>
 | |
| <h3>2005-12-19 (2.8.17)</h3><p><ol class='lessindent'>
 | |
| <li>Fix an obscure bug that can cause database corruption under the
 | |
| following unusual circumstances: A large INSERT or UPDATE statement which 
 | |
| is part of an even larger transaction fails due to a uniqueness contraint
 | |
| but the containing transaction commits.</li>
 | |
| 
 | |
| </ol></p>
 | |
| <a name="version_3_2_7"></a>
 | |
| <h3>2005-09-24 (3.2.7)</h3><p><ol class='lessindent'>
 | |
| <li>GROUP BY now considers NULLs to be equal again, as it should
 | |
| </li>
 | |
| <li>Now compiles on Solaris and OpenBSD and other Unix variants
 | |
| that lack the fdatasync() function</li>
 | |
| <li>Now compiles on MSVC++6 again</li>
 | |
| <li>Fix uninitialized variables causing malfunctions for various obscure
 | |
| queries</li>
 | |
| <li>Correctly compute a LEFT OUTER JOINs that is constrained on the
 | |
| left table only</li>
 | |
| 
 | |
| </ol></p>
 | |
| <a name="version_3_2_6"></a>
 | |
| <h3>2005-09-17 (3.2.6)</h3><p><ol class='lessindent'>
 | |
| <li>Fix a bug that can cause database corruption if a VACUUM (or
 | |
|     autovacuum) fails and is rolled back on a database that is
 | |
|     larger than 1GiB</li>
 | |
| <li>LIKE optimization now works for columns with COLLATE NOCASE</li>
 | |
| <li>ORDER BY and GROUP BY now use bounded memory</li>
 | |
| <li>Added support for COUNT(DISTINCT expr)</li>
 | |
| <li>Change the way SUM() handles NULL values in order to comply with
 | |
|     the SQL standard</li>
 | |
| <li>Use fdatasync() instead of fsync() where possible in order to speed
 | |
|     up commits slightly</li>
 | |
| <li>Use of the CROSS keyword in a join turns off the table reordering
 | |
|     optimization</li>
 | |
| <li>Added the experimental and undocumented EXPLAIN QUERY PLAN capability</li>
 | |
| <li>Use the unicode API in Windows</li>
 | |
| 
 | |
| </ol></p>
 | |
| <a name="version_3_2_5"></a>
 | |
| <h3>2005-08-27 (3.2.5)</h3><p><ol class='lessindent'>
 | |
| <li>Fix a bug effecting DELETE and UPDATE statements that changed
 | |
| more than 40960 rows.</li>
 | |
| <li>Change the makefile so that it no longer requires GNUmake extensions</li>
 | |
| <li>Fix the --enable-threadsafe option on the configure script</li>
 | |
| <li>Fix a code generator bug that occurs when the left-hand side of an IN
 | |
| operator is constant and the right-hand side is a SELECT statement</li>
 | |
| <li>The PRAGMA synchronous=off statement now disables syncing of the
 | |
| master journal file in addition to the normal rollback journals</li>
 | |
| 
 | |
| </ol></p>
 | |
| <a name="version_3_2_4"></a>
 | |
| <h3>2005-08-24 (3.2.4)</h3><p><ol class='lessindent'>
 | |
| <li>Fix a bug introduced in the previous release
 | |
| that can cause a segfault while generating code
 | |
| for complex WHERE clauses.</li>
 | |
| <li>Allow floating point literals to begin or end with a decimal point.</li>
 | |
| 
 | |
| </ol></p>
 | |
| <a name="version_3_2_3"></a>
 | |
| <h3>2005-08-21 (3.2.3)</h3><p><ol class='lessindent'>
 | |
| <li>Added support for the CAST operator</li>
 | |
| <li>Tcl interface allows BLOB values to be transferred to user-defined
 | |
| functions</li>
 | |
| <li>Added the "transaction" method to the Tcl interface</li>
 | |
| <li>Allow the DEFAULT value of a column to call functions that have constant
 | |
| operands</li>
 | |
| <li>Added the ANALYZE command for gathering statistics on indices and
 | |
| using those statistics when picking an index in the optimizer</li>
 | |
| <li>Remove the limit (formerly 100) on the number of terms in the
 | |
| WHERE clause</li>
 | |
| <li>The right-hand side of the IN operator can now be a list of expressions
 | |
| instead of just a list of constants</li>
 | |
| <li>Rework the optimizer so that it is able to make better use of indices</li>
 | |
| <li>The order of tables in a join is adjusted automatically to make
 | |
| better use of indices</li>
 | |
| <li>The IN operator is now a candidate for optimization even if the left-hand
 | |
| side is not the left-most term of the index.  Multiple IN operators can be
 | |
| used with the same index.</li>
 | |
| <li>WHERE clause expressions using BETWEEN and OR are now candidates
 | |
| for optimization</li>
 | |
| <li>Added the "case_sensitive_like" pragma and the SQLITE_CASE_SENSITIVE_LIKE
 | |
| compile-time option to set its default value to "on".</li>
 | |
| <li>Use indices to help with GLOB expressions and LIKE expressions too
 | |
| when the case_sensitive_like pragma is enabled</li>
 | |
| <li>Added support for grave-accent quoting for compatibility with MySQL</li>
 | |
| <li>Improved test coverage</li>
 | |
| <li>Dozens of minor bug fixes</li>
 | |
| 
 | |
| </ol></p>
 | |
| <a name="version_3_2_2"></a>
 | |
| <h3>2005-06-12 (3.2.2)</h3><p><ol class='lessindent'>
 | |
| <li>Added the sqlite3_db_handle() API</li>
 | |
| <li>Added the sqlite3_get_autocommit() API</li>
 | |
| <li>Added a REGEXP operator to the parser.  There is no function to back
 | |
| up this operator in the standard build but users can add their own using
 | |
| sqlite3_create_function()</li>
 | |
| <li>Speed improvements and library footprint reductions.</li>
 | |
| <li>Fix byte alignment problems on 64-bit architectures.</li>
 | |
| <li>Many, many minor bug fixes and documentation updates.</li>
 | |
| 
 | |
| </ol></p>
 | |
| <a name="version_3_2_1"></a>
 | |
| <h3>2005-03-29 (3.2.1)</h3><p><ol class='lessindent'>
 | |
| <li>Fix a memory allocation error in the new ADD COLUMN comment.</li>
 | |
| <li>Documentation updates</li>
 | |
| 
 | |
| </ol></p>
 | |
| <a name="version_3_2_0"></a>
 | |
| <h3>2005-03-21 (3.2.0)</h3><p><ol class='lessindent'>
 | |
| <li>Added support for ALTER TABLE ADD COLUMN.</li>
 | |
| <li>Added support for the "T" separator in ISO-8601 date/time strings.</li>
 | |
| <li>Improved support for Cygwin.</li>
 | |
| <li>Numerous bug fixes and documentation updates.</li>
 | |
| 
 | |
| </ol></p>
 | |
| <a name="version_3_1_6"></a>
 | |
| <h3>2005-03-17 (3.1.6)</h3><p><ol class='lessindent'>
 | |
| <li>Fix a bug that could cause database corruption when inserting
 | |
|     record into tables with around 125 columns.</li>
 | |
| <li>sqlite3_step() is now much more likely to invoke the busy handler
 | |
|     and less likely to return SQLITE_BUSY.</li>
 | |
| <li>Fix memory leaks that used to occur after a malloc() failure.</li>
 | |
| 
 | |
| </ol></p>
 | |
| <a name="version_3_1_5"></a>
 | |
| <h3>2005-03-11 (3.1.5)</h3><p><ol class='lessindent'>
 | |
| <li>The ioctl on Mac OS X to control syncing to disk is F_FULLFSYNC,
 | |
|     not F_FULLSYNC.  The previous release had it wrong.</li>
 | |
| 
 | |
| </ol></p>
 | |
| <a name="version_3_1_4"></a>
 | |
| <h3>2005-03-11 (3.1.4)</h3><p><ol class='lessindent'>
 | |
| <li>Fix a bug in autovacuum that could cause database corruption if
 | |
| a CREATE UNIQUE INDEX fails because of a constraint violation.
 | |
| This problem only occurs if the new autovacuum feature introduced in
 | |
| version 3.1 is turned on.</li>
 | |
| <li>The F_FULLSYNC ioctl (currently only supported on Mac OS X) is disabled
 | |
| if the synchronous pragma is set to something other than "full".</li>
 | |
| <li>Add additional forward compatibility to the future version 3.2 database 
 | |
| file format.</li>
 | |
| <li>Fix a bug in WHERE clauses of the form (rowid<'2')</li>
 | |
| <li>New <a href="compile.html#omitfeatures">SQLITE_OMIT_...</a> compile-time options added</li>
 | |
| <li>Updates to the man page</li>
 | |
| <li>Remove the use of strcasecmp() from the shell</li>
 | |
| <li>Windows DLL exports symbols Tclsqlite_Init and Sqlite_Init</li>
 | |
| 
 | |
| </ol></p>
 | |
| <a name="version_3_1_3"></a>
 | |
| <h3>2005-02-19 (3.1.3)</h3><p><ol class='lessindent'>
 | |
| <li>Fix a problem with VACUUM on databases from which tables containing
 | |
| AUTOINCREMENT have been dropped.</li>
 | |
| <li>Add forward compatibility to the future version 3.2 database file
 | |
| format.</li>
 | |
| <li>Documentation updates</li>
 | |
| 
 | |
| </ol></p>
 | |
| <a name="version_3_1_2"></a>
 | |
| <h3>2005-02-15 (3.1.2)</h3><p><ol class='lessindent'>
 | |
| <li>Fix a bug that can lead to database corruption if there are two
 | |
| open connections to the same database and one connection does a VACUUM
 | |
| and the second makes some change to the database.</li>
 | |
| <li>Allow "?" parameters in the LIMIT clause.</li>
 | |
| <li>Fix VACUUM so that it works with AUTOINCREMENT.</li>
 | |
| <li>Fix a race condition in AUTOVACUUM that can lead to corrupt databases</li>
 | |
| <li>Add a numeric version number to the sqlite3.h include file.</li>
 | |
| <li>Other minor bug fixes and performance enhancements.</li>
 | |
| 
 | |
| </ol></p>
 | |
| <a name="version_2_8_16"></a>
 | |
| <h3>2005-02-15 (2.8.16)</h3><p><ol class='lessindent'>
 | |
| <li>Fix a bug that can lead to database corruption if there are two
 | |
| open connections to the same database and one connection does a VACUUM
 | |
| and the second makes some change to the database.</li>
 | |
| <li>Correctly handle quoted names in CREATE INDEX statements.</li>
 | |
| <li>Fix a naming conflict between sqlite.h and sqlite3.h.</li>
 | |
| <li>Avoid excess heap usage when copying expressions.</li>
 | |
| <li>Other minor bug fixes.</li>
 | |
| 
 | |
| </ol></p>
 | |
| <h3>2005-02-01 (3.1.1 BETA)</h3><p><ol class='lessindent'>
 | |
| <li>Automatic caching of prepared statements in the TCL interface</li>
 | |
| <li>ATTACH and DETACH as well as some other operations cause existing
 | |
|     prepared statements to expire.</li>
 | |
| <li>Numerous minor bug fixes</li>
 | |
| 
 | |
| </ol></p>
 | |
| <h3>2005-01-21 (3.1.0 ALPHA)</h3><p><ol class='lessindent'>
 | |
| <li>Autovacuum support added</li>
 | |
| <li>CURRENT_TIME, CURRENT_DATE, and CURRENT_TIMESTAMP added</li>
 | |
| <li>Support for the EXISTS clause added.</li>
 | |
| <li>Support for correlated subqueries added.</li>
 | |
| <li>Added the ESCAPE clause on the LIKE operator.</li>
 | |
| <li>Support for ALTER TABLE ... RENAME TABLE ... added</li>
 | |
| <li>AUTOINCREMENT keyword supported on INTEGER PRIMARY KEY</li>
 | |
| <li>Many SQLITE_OMIT_ macros inserts to omit features at compile-time
 | |
|     and reduce the library footprint.</li>
 | |
| <li>The REINDEX command was added.</li>
 | |
| <li>The engine no longer consults the main table if it can get
 | |
|     all the information it needs from an index.</li>
 | |
| <li>Many nuisance bugs fixed.</li>
 | |
| 
 | |
| </ol></p>
 | |
| <a name="version_3_0_8"></a>
 | |
| <h3>2004-10-12 (3.0.8)</h3><p><ol class='lessindent'>
 | |
| <li>Add support for DEFERRED, IMMEDIATE, and EXCLUSIVE transactions.</li>
 | |
| <li>Allow new user-defined functions to be created when there are
 | |
| already one or more precompiled SQL statements.<li>
 | |
| <li>Fix portability problems for MinGW/MSYS.</li>
 | |
| <li>Fix a byte alignment problem on 64-bit Sparc machines.</li>
 | |
| <li>Fix the ".import" command of the shell so that it ignores \r
 | |
| characters at the end of lines.</li>
 | |
| <li>The "csv" mode option in the shell puts strings inside double-quotes.</li>
 | |
| <li>Fix typos in documentation.</li>
 | |
| <li>Convert array constants in the code to have type "const".</li>
 | |
| <li>Numerous code optimizations, specially optimizations designed to
 | |
| make the code footprint smaller.</li>
 | |
| 
 | |
| </ol></p>
 | |
| <a name="version_3_0_7"></a>
 | |
| <h3>2004-09-18 (3.0.7)</h3><p><ol class='lessindent'>
 | |
| <li>The BTree module allocates large buffers using malloc() instead of
 | |
|     off of the stack, in order to play better on machines with limited
 | |
|     stack space.</li>
 | |
| <li>Fixed naming conflicts so that versions 2.8 and 3.0 can be
 | |
|     linked and used together in the same ANSI-C source file.</li>
 | |
| <li>New interface: sqlite3_bind_parameter_index()</li>
 | |
| <li>Add support for wildcard parameters of the form: "?nnn"</li>
 | |
| <li>Fix problems found on 64-bit systems.</li>
 | |
| <li>Removed encode.c file (containing unused routines) from the 
 | |
|     version 3.0 source tree.</li>
 | |
| <li>The sqlite3_trace() callbacks occur before each statement
 | |
|     is executed, not when the statement is compiled.</li>
 | |
| <li>Makefile updates and miscellaneous bug fixes.</li>
 | |
| 
 | |
| </ol></p>
 | |
| <h3>2004-09-02 (3.0.6 beta)</h3><p><ol class='lessindent'>
 | |
| <li>Better detection and handling of corrupt database files.</li>
 | |
| <li>The sqlite3_step() interface returns SQLITE_BUSY if it is unable
 | |
|     to commit a change because of a lock</li>
 | |
| <li>Combine the implementations of LIKE and GLOB into a single
 | |
|     pattern-matching subroutine.</li>
 | |
| <li>Miscellaneous code size optimizations and bug fixes</li>
 | |
| 
 | |
| </ol></p>
 | |
| <h3>2004-08-29 (3.0.5 beta)</h3><p><ol class='lessindent'>
 | |
| <li>Support for ":AAA" style bind parameter names.</li>
 | |
| <li>Added the new sqlite3_bind_parameter_name() interface.</li>
 | |
| <li>Support for TCL variable names embedded in SQL statements in the
 | |
|     TCL bindings.</li>
 | |
| <li>The TCL bindings transfer data without necessarily doing a conversion
 | |
|     to a string.</li>
 | |
| <li>The database for TEMP tables is not created until it is needed.</li>
 | |
| <li>Add the ability to specify an alternative temporary file directory
 | |
|     using the "sqlite_temp_directory" global variable.</li>
 | |
| <li>A compile-time option (SQLITE_BUSY_RESERVED_LOCK) causes the busy
 | |
|     handler to be called when there is contention for a RESERVED lock.</li>
 | |
| <li>Various bug fixes and optimizations</li>
 | |
| 
 | |
| </ol></p>
 | |
| <h3>2004-08-09 (3.0.4 beta)</h3><p><ol class='lessindent'>
 | |
| <li>CREATE TABLE and DROP TABLE now work correctly as prepared statements.</li>
 | |
| <li>Fix a bug in VACUUM and UNIQUE indices.</li>
 | |
| <li>Add the ".import" command to the command-line shell.</li>
 | |
| <li>Fix a bug that could cause index corruption when an attempt to
 | |
|     delete rows of a table is blocked by a pending query.</li>
 | |
| <li>Library size optimizations.</li>
 | |
| <li>Other minor bug fixes.</li>
 | |
| 
 | |
| </ol></p>
 | |
| <a name="version_2_8_15"></a>
 | |
| <h3>2004-07-22 (2.8.15)</h3><p><ol class='lessindent'>
 | |
| <li>This is a maintenance release only.  Various minor bugs have been
 | |
| fixed and some portability enhancements are added.</li>
 | |
| 
 | |
| </ol></p>
 | |
| <h3>2004-07-22 (3.0.3 beta)</h3><p><ol class='lessindent'>
 | |
| <li>The second beta release for SQLite 3.0.</li>
 | |
| <li>Add support for "PRAGMA page_size" to adjust the page size of
 | |
| the database.</li>
 | |
| <li>Various bug fixes and documentation updates.</li>
 | |
| 
 | |
| </ol></p>
 | |
| <h3>2004-06-30 (3.0.2 beta)</h3><p><ol class='lessindent'>
 | |
| <li>The first beta release for SQLite 3.0.</li>
 | |
| 
 | |
| </ol></p>
 | |
| <h3>2004-06-22 (3.0.1 alpha)</h3><p><ol class='lessindent'>
 | |
| <li><font color="red"><b>
 | |
|     *** Alpha Release - Research And Testing Use Only ***</b></font>
 | |
| <li>Lots of bug fixes.</li>
 | |
| 
 | |
| </ol></p>
 | |
| <h3>2004-06-18 (3.0.0 alpha)</h3><p><ol class='lessindent'>
 | |
| <li><font color="red"><b>
 | |
|     *** Alpha Release - Research And Testing Use Only ***</b></font>
 | |
| <li>Support for internationalization including UTF-8, UTF-16, and
 | |
|     user defined collating sequences.</li>
 | |
| <li>New file format that is 25% to 35% smaller for typical use.</li>
 | |
| <li>Improved concurrency.</li>
 | |
| <li>Atomic commits for ATTACHed databases.</li>
 | |
| <li>Remove cruft from the APIs.</li>
 | |
| <li>BLOB support.</li>
 | |
| <li>64-bit rowids.</li>
 | |
| <li><a href="version3.html">More information</a>.
 | |
| 
 | |
| </ol></p>
 | |
| <a name="version_2_8_14"></a>
 | |
| <h3>2004-06-09 (2.8.14)</h3><p><ol class='lessindent'>
 | |
| <li>Fix the min() and max() optimizer so that it works when the FROM
 | |
|     clause consists of a subquery.</li>
 | |
| <li>Ignore extra whitespace at the end of 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: http://www.sqlite.org/</li>
 | |
| <li>Allow transactions to span Linux Threads</li>
 | |
| <li>Bug fix in the processing of the ORDER BY clause for GROUP BY queries</li>
 | |
| 
 | |
| </ol></p>
 | |
| <a name="version_2_6_2"></a>
 | |
| <h3>2002-07-31 (2.6.2)</h3><p><ol class='lessindent'>
 | |
| <li>Text files read by the COPY command can now have line terminators
 | |
|     of LF,  CRLF, or CR.</li>
 | |
| <li>SQLITE_BUSY is handled correctly if encountered during database
 | |
|     initialization.</li>
 | |
| <li>Fix to UPDATE triggers on TEMP tables.</li>
 | |
| <li>Documentation updates.</li>
 | |
| 
 | |
| </ol></p>
 | |
| <a name="version_2_6_1"></a>
 | |
| <h3>2002-07-19 (2.6.1)</h3><p><ol class='lessindent'>
 | |
| <li>Include a static string in the library that responds to the RCS
 | |
|     "ident" command and which contains the library version number.</li>
 | |
| <li>Fix an assertion failure that occurred when deleting all rows of
 | |
|     a table with the "count_changes" pragma turned on.</li>
 | |
| <li>Better error reporting when problems occur during the automatic
 | |
|     2.5.6 to 2.6.0 database format upgrade.</li>
 | |
| 
 | |
| </ol></p>
 | |
| <a name="version_2_6_0"></a>
 | |
| <h3>2002-07-18 (2.6.0)</h3><p><ol class='lessindent'>
 | |
| <li>Change the format of indices to correct a design flaw the originated
 | |
|     with version 2.1.0.  <font color="red">*** This is an incompatible
 | |
|     file format change ***</font>  When version 2.6.0 or later of the
 | |
|     library attempts to open a database file created by version 2.5.6 or
 | |
|     earlier, it will automatically and irreversibly convert the file format.
 | |
|     <b>Make backup copies of older database files before opening them with
 | |
|     version 2.6.0 of the library.</b>
 | |
|     </li>
 | |
| 
 | |
| </ol></p>
 | |
| <a name="version_2_5_6"></a>
 | |
| <h3>2002-07-07 (2.5.6)</h3><p><ol class='lessindent'>
 | |
| <li>Fix more problems with rollback.  Enhance the test suite to exercise
 | |
|     the rollback logic extensively in order to prevent any future problems.
 | |
|     </li>
 | |
| 
 | |
| </ol></p>
 | |
| <a name="version_2_5_5"></a>
 | |
| <h3>2002-07-06 (2.5.5)</h3><p><ol class='lessindent'>
 | |
| <li>Fix a bug which could cause database corruption during a rollback.
 | |
|     This bugs was introduced in version 2.4.0 by the freelist
 | |
|     optimization of checkin [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>
 | |
| 
 |