1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201
|
<!DOCTYPE html>
<html><head>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<link href="../sqlite.css" rel="stylesheet">
<title>SQLite Release 3.46.1 On 2024-08-13</title>
<!-- path=../ -->
</head>
<body>
<div class=nosearch>
<a href="../index.html">
<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
</a>
<div><!-- IE hack to prevent disappearing logo --></div>
<div class="tagline desktoponly">
Small. Fast. Reliable.<br>Choose any three.
</div>
<div class="menu mainmenu">
<ul>
<li><a href="../index.html">Home</a>
<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
<li class='wideonly'><a href='../about.html'>About</a>
<li class='desktoponly'><a href="../docs.html">Documentation</a>
<li class='desktoponly'><a href="../download.html">Download</a>
<li class='wideonly'><a href='../copyright.html'>License</a>
<li class='desktoponly'><a href="../support.html">Support</a>
<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
<li class='search' id='search_menubutton'>
<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
</ul>
</div>
<div class="menu submenu" id="submenu">
<ul>
<li><a href='../about.html'>About</a>
<li><a href='../docs.html'>Documentation</a>
<li><a href='../download.html'>Download</a>
<li><a href='../support.html'>Support</a>
<li><a href='../prosupport.html'>Purchase</a>
</ul>
</div>
<div class="searchmenu" id="searchmenu">
<form method="GET" action="../search">
<select name="s" id="searchtype">
<option value="d">Search Documentation</option>
<option value="c">Search Changelog</option>
</select>
<input type="text" name="q" id="searchbox" value="">
<input type="submit" value="Go">
</form>
</div>
</div>
<script>
function toggle_div(nm) {
var w = document.getElementById(nm);
if( w.style.display=="block" ){
w.style.display = "none";
}else{
w.style.display = "block";
}
}
function toggle_search() {
var w = document.getElementById("searchmenu");
if( w.style.display=="block" ){
w.style.display = "none";
} else {
w.style.display = "block";
setTimeout(function(){
document.getElementById("searchbox").focus()
}, 30);
}
}
function div_off(nm){document.getElementById(nm).style.display="none";}
window.onbeforeunload = function(e){div_off("submenu");}
/* Disable the Search feature if we are not operating from CGI, since */
/* Search is accomplished using CGI and will not work without it. */
if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
document.getElementById("search_menubutton").style.display = "none";
}
/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
function hideorshow(btn,obj){
var x = document.getElementById(obj);
var b = document.getElementById(btn);
if( x.style.display!='none' ){
x.style.display = 'none';
b.innerHTML='show';
}else{
x.style.display = '';
b.innerHTML='hide';
}
return false;
}
var antiRobot = 0;
function antiRobotGo(){
if( antiRobot!=3 ) return;
antiRobot = 7;
var j = document.getElementById("mtimelink");
if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
}
function antiRobotDefense(){
document.body.onmousedown=function(){
antiRobot |= 2;
antiRobotGo();
document.body.onmousedown=null;
}
document.body.onmousemove=function(){
antiRobot |= 2;
antiRobotGo();
document.body.onmousemove=null;
}
setTimeout(function(){
antiRobot |= 1;
antiRobotGo();
}, 100)
antiRobotGo();
}
antiRobotDefense();
</script>
<h2>SQLite Release 3.46.1 On 2024-08-13</h2><p><b>Prior changes from version 3.46.0 (2024-05-23):</b></p>
<p><ol class='lessindent'>
<li value='1'> Enhance <a href="../pragma.html#pragma_optimize">PRAGMA optimize</a> in multiple ways, to make it
<a href="../lang_analyze.html#pragopt">simpler to use</a>:
<ol type="a">
<li> PRAGMA optimize automatically implements a temporary
<a href="../pragma.html#pragma_analysis_limit">analysis limit</a> to prevent excess runtime
on large databases.
<li> Added the new 0x10000 bitmask option to check for updates on all tables.
<li> Automatically re-analyze tables that do not have sqlite_stat1 entries.
</ol>
<li> Enhancements to the <a href="../lang_datefunc.html">date and time functions</a>:
<ol type="a">
<li> The <a href="../lang_datefunc.html#strftm">strftime() SQL function</a> now supports %G, %g, %U, and %V.
<li> New modifiers 'ceiling' and 'floor' control the algorithm used to
resolve <a href="../lang_datefunc.html#dtambg">ambiguous dates</a> when shifting a date by an integer number
of months and/or years.
<li> The <a href="../lang_datefunc.html#localtime">'utc' and 'localtime' modifiers</a> are now no-ops if SQLite knows
that the time is already in UTC or in the localtime, respectively.
</ol>
<li> Add support for underscore ("_") characters between digits in
<a href="../lang_expr.html#litvalue">numeric literals</a>.
<li> Add the <a href="../json1.html#jpretty">json_pretty()</a> SQL function.
<li> Query planner improvements:
<ol type="a">
<li> The "VALUES-as-coroutine" optimization enables INSERT statements with
thousands of rows in the VALUES clause to parse and run in about half
the time and using about half as much memory.
<li> Allow the use of an index for queries like "SELECT count(DISTINCT col) FROM ...",
even if the index records are not smaller than the table records.
<li> Improved recognition of cases where the value of an SQL function is
constant because all its arguments are constant.
<li> Enhance the <a href="../optoverview.html#pushdown">WHERE-clause push-down optimization</a> so that it is able to
push down WHERE clause terms containing uncorrelated subqueries.
</ol>
<li> Allocate additional memory from the heap for the SQL parser stack if
that stack overflows, rather than reporting a "parser stack overflow" error.
<li> JSON changes:
<ol type="a">
<li> Allow ASCII control characters within JSON5 string literals.
<li> Fix <a href="../json1.html#jptr">the -> and ->> operators</a> so that when the right-hand side operand is a string
that looks like an integer it is still treated as a string, because that is what
PostgreSQL does.
</ol>
<li> Allow large hexadecimal literals to be used as the DEFAULT value to a table column.
</ol>
<p><b>Changes in this specific patch release, version 3.46.1 (2024-08-13):</b></p>
<p><ol class='lessindent'>
<li value='9'> Improved robustness while parsing the <a href="../fts5.html#tokenizers">tokenize= arguments</a> in <a href="../fts5.html">FTS5</a>.
<a href="https://sqlite.org/forum/forumpost/171bcc2bcd">Forum post 171bcc2bcd</a>.
<li> Enhancements to <a href="../queryplanner.html#covidx">covering index</a> prediction in the query planner.
Add early detection of over-prediction of covering indexes so that
<a href="../c3ref/prepare.html">sqlite3_prepare()</a> will return an error rather than just generate bad bytecode.
<a href="https://sqlite.org/forum/forumpost/e60e4c295d22f8ce">Forum post e60e4c295d22f8ce</a>.
<li> Do not let the number of terms on a <a href="../lang_select.html#values">VALUES clause</a> be limited by
<a href="../c3ref/c_limit_attached.html#sqlitelimitcompoundselect">SQLITE_LIMIT_COMPOUND_SELECT</a>, even if the VALUES clause contains
elements that appear to be variables due to
<a href="../quirks.html#dblquote">double-quoted string literals</a>.
<li> Fix the <a href="../windowfunctions.html">window function</a> version of <a href="../lang_aggfunc.html#group_concat">group_concat()</a> so that it returns
an empty string if it has one or more empty string inputs.
<li> In <a href="../fts5.html#the_secure_delete_configuration_option">FTS5 secure-delete mode</a>, fix false-positive
integrity-check reports about corrupt indexes.
<li> Syntax errors in <a href="../lang_altertable.html">ALTER TABLE</a> should always return <a href="../rescode.html#error">SQLITE_ERROR</a>. In
some cases, they were formerly returning <a href="../rescode.html#internal">SQLITE_INTERNAL</a>.
<li> JavaScript/WASM:
<ol type="a">
<li> Fix a corruption-causing bug in the JavaScript "opfs" VFS.
<li> Work around a couple of browser-specific OPFS quirks.
</ol>
<li> Other minor fixes.
<p><b>Hashes:</b>
<li>SQLITE_SOURCE_ID: 2024-08-13 09:16:08 c9c2ab54ba1f5f46360f1b4f35d849cd3f080e6fc2b6c60e91b16c63f69a1e33
<li>SHA3-256 for sqlite3.c: 186a1baa476b6d546de155160ca6d30ff7b7e6ee375f0bb6445e1a3d180a7dad
</ol></p>
<p>A <a href="../changes.html">complete list of SQLite releases</a>
in a single page and a <a href="../chronology.html">chronology</a> are both also available.
A detailed history of every
check-in is available at
<a href="https://www.sqlite.org/src/timeline">
SQLite version control site</a>.</p>
|