1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
|
<!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.45.3 On 2024-04-15</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.45.3 On 2024-04-15</h2><p><b>Prior changes from version 3.45.0 (2024-01-15):</b></p>
<p><ol class='lessindent'>
<li value='1'> Added the <a href="../c3ref/c_deterministic.html#sqliteresultsubtype">SQLITE_RESULT_SUBTYPE</a> property for
<a href="../appfunc.html">application-defined SQL functions</a>.
All application defined SQL functions that invokes
<a href="../c3ref/result_subtype.html">sqlite3_result_subtype()</a> must be registered with this new property.
Failure to do so might cause the call to sqlite3_result_subtype() to
behave as a no-op. Compile with <a href="../compile.html#strict_subtype">-DSQLITE_STRICT_SUBTYPE=1</a> to cause an
SQL error to be raised if a function that is not <a href="../c3ref/c_deterministic.html#sqliteresultsubtype">SQLITE_RESULT_SUBTYPE</a>
tries invokes <a href="../c3ref/result_subtype.html">sqlite3_result_subtype()</a>. The use of <a href="../compile.html#strict_subtype">-DSQLITE_STRICT_SUBTYPE=1</a>
is a recommended compile-time option for every application that makes
use of subtypes.
<li> Enhancements to the <a href="../json1.html">JSON SQL functions</a>:
<ol type="a">
<li> All JSON functions are rewritten to use a new internal parse tree
format called <a href="../json1.html#jsonbx">JSONB</a>. The new parse-tree format is serializable
and hence can be stored in the database to avoid unnecessary re-parsing
whenever the JSON value is used.
<li> New versions of JSON-generating functions generate binary JSONB instead
of JSON text.
<li> The <a href="../json1.html#jvalid">json_valid()</a> function adds an optional second argument that
specifies what it means for the first argument to be "well-formed".
</ol>
<li> Add the <a href="../fts5.html#the_tokendata_option">FTS5 tokendata option</a> to the <a href="../fts5.html">FTS5</a> virtual table.
<li> The <a href="../compile.html#direct_overflow_read">SQLITE_DIRECT_OVERFLOW_READ</a> optimization is now enabled by default.
Disable it at compile-time using -DSQLITE_DIRECT_OVERFLOW_READ=0.
<li> Query planner improvements:
<ol type="a">
<li> Do not allow the transitive constraint optimization to trick the
query planner into using a range constraint when a better equality
constraint is available.
(<a href="https://sqlite.org/forum/forumpost/2568d1f6e6">Forum post 2568d1f6e6</a>.)
<li> The query planner now does a better job of disregarding
indexes that <a href="../lang_analyze.html">ANALYZE</a> identifies as low-quality.
(<a href="https://sqlite.org/forum/forumpost/6f0958b03b">Forum post 6f0958b03b</a>.)
</ol>
<li> Increase the default value for <a href="../limits.html#max_page_count">SQLITE_MAX_PAGE_COUNT</a> from 1073741824 to
4294967294.
<li> Enhancements to the <a href="../cli.html">CLI</a>:
<ol type="a">
<li> Improvements to the display of UTF-8 content on Windows
<li> Automatically detect playback of ".dump" scripts and make appropriate
changes to settings such as ".dbconfig defensive off" and
".dbconfig dqs_dll on".
</ol>
</ol>
<p><b>Prior changes from version 3.45.1 (2024-01-30):</b></p>
<p><ol class='lessindent'>
<li value='8'> Restore the <a href="../json1.html#jblobbug">JSON BLOB input bug</a>, and promise to support the anomaly in
subsequent releases, for backward compatibility.
<li> Fix the <a href="../pragma.html#pragma_integrity_check">PRAGMA integrity_check</a> command so that it works on read-only
databases that contain FTS3 and FTS5 tables. This resolves an issue
introduced in <a href="../releaselog/3_44_0.html">version 3.44.0</a> but was undiscovered until after the 3.45.0 release.
<li> Fix issues associated with processing corrupt <a href="../json1.html#jsonbx">JSONB</a> inputs:
<ol type="a">
<li> Prevent exponential runtime when converting a corrupt JSONB into text.
<li> Fix a possible read of one byte past the end of the JSONB blob when converting
a corrupt JSONB into text.
<li> Enhanced testing using <a href="../testing.html#dbsqlfuzz">jfuzz</a> to prevent any future JSONB problems such
as the above.
</ol>
<li> Fix a long-standing bug in which a read of a few bytes past the end of a
memory-mapped segment might occur when accessing a craftily corrupted database
using <a href="../pragma.html#pragma_mmap_size">memory-mapped database</a>.
<li> Fix a long-standing bug in which a NULL pointer dereference might occur in
the <a href="../opcode.html">bytecode engine</a> due to incorrect bytecode being generated for a class
of SQL statements that are deliberately designed to stress the query planner
but which are otherwise pointless.
</ol>
<p><b>Prior changes from version 3.45.2 (2024-03-12):</b></p>
<p><ol class='lessindent'>
<li value='13'> Fix an error in <a href="../lang_upsert.html">UPSERT</a>, introduced by enhancement 3a in <a href="../releaselog/3_35_0.html">version 3.35.0</a>
(2021-03-12), that could cause an index to get out-of-sync with its table.
<a href="https://sqlite.org/forum/forumpost/919c6579c8">Forum thread 919c6579c8</a>.
<li> Reduce the scope of the NOT NULL strength reduction optimization that was
added as item 8e in <a href="../releaselog/3_35_0.html">version 3.35.0</a> (2021-03-12). The optimization
was being attempted in some contexts where it did not work, resulting in
incorrect query results.
<a href="https://sqlite.org/forum/forumpost/440f2a2f17">Forum thread 440f2a2f17</a>.
<li> Other trifling corrections and compiler warning fixes that have come up
since the previous patch release. See the
<a href="https://sqlite.org/src/timeline?from=version-3.45.1&to=version-3.45.2&to2=branch-3.45">timeline</a>
for details.
</ol>
<p><b>Changes in this specific patch release, version 3.45.3 (2024-04-15):</b></p>
<p><ol class='lessindent'>
<li value='16'> Fix a long-standing bug (going back to <a href="../releaselog/3_24_0.html">version 3.24.0</a>)
that might (rarely) cause the "old.*" values of an <a href="../lang_createtrigger.html">UPDATE trigger</a>
to be incorrect if that trigger fires in response to an <a href="../lang_upsert.html">UPSERT</a>.
<a href="https://sqlite.org/forum/forumpost/284955a3cd454a15">Forum post 284955a3cd454a15</a>.
<li> Fix a bug in <a href="../lang_aggfunc.html#sumunc">sum()</a> that could cause it to return NULL when it should return
Infinity. <a href="https://sqlite.org/forum/forumpost/23b8688ef4">Forum post 23b8688ef4</a>.
<li> Other trifling corrections and compiler warning fixes that have come up
since the previous patch release. See the
<a href="https://sqlite.org/src/timeline?from=version-3.45.2&to=version-3.45.3&to2=branch-3.45">timeline</a>
for details.
<p><b>Hashes:</b>
<li>SQLITE_SOURCE_ID: 2024-04-15 13:34:05 8653b758870e6ef0c98d46b3ace27849054af85da891eb121e9aaa537f1e8355
<li>SHA3-256 for sqlite3.c: 21dbe688a71b449d28e2a8ec6a43e7520e54df456e02b6d4f6a1d1c7a998c826
</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>
|