summaryrefslogtreecommitdiffstats
path: root/www/releaselog/3_38_1.html
blob: fafda7858f5a83435a82710bd489d56da773cab2 (plain)
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
<!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.38.1 On 2022-03-12</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.38.1 On 2022-03-12</h2><p><b>Prior changes from version 3.38.0 (2022-02-22):</b></p>
<p><ol class='lessindent'>
<li value='1'> Added <a href="../json1.html#jptr">the -> and ->> operators</a> for easier processing of JSON.
     The new operators are compatible with MySQL and PostgreSQL.
<li> The JSON functions are now built-ins.  It is no longer necessary
     to use the <a href="../compile.html#enable_json1">-DSQLITE_ENABLE_JSON1</a> compile-time option to enable JSON
     support.  JSON is on by default.  Disable the JSON interface using
     the new <a href="../compile.html#omit_json">-DSQLITE_OMIT_JSON</a> compile-time option.
<li> Enhancements to <a href="../lang_datefunc.html">date and time functions</a>:
     <ol type="a">
     <li> Added the <a href="../lang_datefunc.html#uepch">unixepoch() function</a>.
     <li> Added the <a href="../lang_datefunc.html#automod">auto modifier</a> and the <a href="../lang_datefunc.html#jdmod">julianday modifier</a>.
     </ol>
<li> Rename the <a href="../lang_corefunc.html#printf">printf() SQL function</a> to <a href="../lang_corefunc.html#format">format()</a> for better
     compatibility.  The original printf() name is retained as an alias
     for backwards compatibility.
<li> Added the <a href="../c3ref/errcode.html">sqlite3_error_offset()</a> interface, which can sometimes
     help to localize an SQL error to a specific character in the input
     SQL text, so that applications can provide better error messages.
<li> Enhanced the interface to <a href="../vtab.html">virtual tables</a> as follows:
     <ol type="a">
     <li> Added the <a href="../c3ref/vtab_distinct.html">sqlite3_vtab_distinct()</a> interface.
     <li> Added the <a href="../c3ref/vtab_rhs_value.html">sqlite3_vtab_rhs_value()</a> interface.
     <li> Added new operator types <a href="../c3ref/c_index_constraint_eq.html">SQLITE_INDEX_CONSTRAINT_LIMIT</a>
          and <a href="../c3ref/c_index_constraint_eq.html">SQLITE_INDEX_CONSTRAINT_OFFSET</a>.
     <li> Added the <a href="../c3ref/vtab_in.html">sqlite3_vtab_in()</a> interface (and related) to enable
          a virtual table to process <a href="../lang_expr.html#in_op">IN operator</a> constraints all at once,
          rather than processing each value of the right-hand side of the
          IN operator separately.
     </ol>
<li> <a href="../cli.html">CLI</a> enhancements:
     <ol type="a">
     <li> <a href="../cli.html#clmnr">Columnar output modes</a> are enhanced to correctly handle tabs
          and newlines embedded in text.
     <li> Added options like "--wrap N", "--wordwrap on", and "--quote"
          to the <a href="../cli.html#clmnr">columnar output modes</a>.
     <li> Added the <a href="../cli.html#qbox">.mode qbox</a> alias.
     <li> The <a href="../cli.html#csv">.import command</a> automatically disambiguates column names.
     <li> Use the new <a href="../c3ref/errcode.html">sqlite3_error_offset()</a> interface to provide better
          error messages.
     </ol>
<li> Query planner enhancements:
     <ol type="a">
     <li> Use a Bloom filter to speed up large analytic queries.
     <li> Use a balanced merge tree to evaluate UNION or UNION ALL
          compound SELECT statements that have an ORDER BY clause.
     </ol>
<li> The <a href="../lang_altertable.html">ALTER TABLE</a> statement is changed to silently ignores entries in the
     <a href="../schematab.html">sqlite_schema table</a> that do not parse when <a href="../pragma.html#pragma_writable_schema">PRAGMA writable_schema=ON</a>.
</ol>
<p><b>Changes in this specific patch release, version 3.38.1 (2022-03-12):</b></p>
<p><ol class='lessindent'>
<li value='10'> Fix problems with the new Bloom filter optimization that might cause
     some obscure queries to get an incorrect answer.
<li> Fix the <a href="../lang_datefunc.html#localtime">localtime modifier</a> of the <a href="../lang_datefunc.html">date and time functions</a> so that
     it preserves fractional seconds.
<li> Fix the <a href="../lang_corefunc.html#sqlite_offset">sqlite_offset SQL function</a> so that it works correctly even
     in corner cases such as when the argument is a virtual column or the
     column of a view.
<li> Fix <a href="../rowvalue.html#rvinop">row value IN operator</a> constraints on <a href="../vtab.html">virtual tables</a> so that they
     work correctly even if the virtual table implementation relies on bytecode
     to filter rows that do not satisfy the constraint.
<li> Other minor fixes to assert() statements, test cases, and documentation.
     See the <a href="https://sqlite.org/src/timeline?p=version-3.38.1&bt=version-3.38.0">source code timeline</a>
     for details.

<p><b>Hashes:</b>
<li>SQLITE_SOURCE_ID: 2022-03-12 13:37:29 38c210fdd258658321c85ec9c01a072fda3ada94540e3239d29b34dc547a8cbc
<li>SHA3-256 for sqlite3.c: 262ba071e960a8a0a6ce39307ae30244a2b0dc9fe1c4c09d0e1070d4353cd92c

</ol></p>

      <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>