Documentation Source Text

Changes On Branch branch-3.8.7
Login

Many hyperlinks are disabled.
Use anonymous login to enable hyperlinks.

Changes In Branch branch-3.8.7 Excluding Merge-Ins

This is equivalent to a diff from 06c69dc9d2 to 6ee4cecc7e

2015-01-12
12:38
Merge typo fix from the 3.8.7 branch. (check-in: 8705a95364 user: drh tags: trunk)
12:37
Fix typos in the whentouse.html document. (Leaf check-in: 6ee4cecc7e user: drh tags: branch-3.8.7)
2015-01-09
17:10
Simplification of the descriptions of Prerelease products on the download page. (check-in: 130b681d08 user: drh tags: branch-3.8.7)
2014-10-29
11:15
Update the website for version 3.8.7. (check-in: fc792a76a2 user: drh tags: branch-3.8.7)
2014-10-23
14:15
Althttpd enhancements: Add a 17th field to the log file that records the source-code line from which the log file message was generated. This is useful for studying the causes of request failures. Also, invoke Malfunction() on any unix API error. (check-in: 415faae9bf user: drh tags: trunk)
2014-10-17
11:28
Version 3.8.7 (check-in: 06c69dc9d2 user: drh tags: trunk, release, version-3.8.7)
2014-10-16
16:32
Fix documentation typos. Add a news article for 3.8.7. (check-in: 8076857500 user: drh tags: trunk)

Changes to misc/althttpd.c.

210
211
212
213
214
215
216

217
218
219
220
221
222
223
static char *zServerPort = 0;    /* The port number */
static char *zCookie = 0;        /* Cookies reported with the request */
static char *zHttpHost = 0;      /* Name according to the web browser */
static char *zRealPort = 0;      /* The real TCP port when running as daemon */
static char *zRemoteAddr = 0;    /* IP address of the request */
static char *zReferer = 0;       /* Name of the page that refered to us */
static char *zAccept = 0;        /* What formats will be accepted */

static char *zContentLength = 0; /* Content length reported in the header */
static char *zContentType = 0;   /* Content type reported in the header */
static char *zQuerySuffix = 0;   /* The part of the URL after the first ? */
static char *zAuthType = 0;      /* Authorization type (basic or digest) */
static char *zAuthArg = 0;       /* Authorization values */
static char *zRemoteUser = 0;    /* REMOTE_USER set by authorization module */
static int nIn = 0;              /* Number of bytes of input */







>







210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
static char *zServerPort = 0;    /* The port number */
static char *zCookie = 0;        /* Cookies reported with the request */
static char *zHttpHost = 0;      /* Name according to the web browser */
static char *zRealPort = 0;      /* The real TCP port when running as daemon */
static char *zRemoteAddr = 0;    /* IP address of the request */
static char *zReferer = 0;       /* Name of the page that refered to us */
static char *zAccept = 0;        /* What formats will be accepted */
static char *zAcceptEncoding =0; /* gzip or default */
static char *zContentLength = 0; /* Content length reported in the header */
static char *zContentType = 0;   /* Content type reported in the header */
static char *zQuerySuffix = 0;   /* The part of the URL after the first ? */
static char *zAuthType = 0;      /* Authorization type (basic or digest) */
static char *zAuthArg = 0;       /* Authorization values */
static char *zRemoteUser = 0;    /* REMOTE_USER set by authorization module */
static int nIn = 0;              /* Number of bytes of input */
1122
1123
1124
1125
1126
1127
1128


1129
1130
1131
1132
1133
1134
1135
    zFieldName = GetFirstElement(zLine,&zVal);
    if( zFieldName==0 || *zFieldName==0 ) break;
    RemoveNewline(zVal);
    if( strcasecmp(zFieldName,"User-Agent:")==0 ){
      zAgent = StrDup(zVal);
    }else if( strcasecmp(zFieldName,"Accept:")==0 ){
      zAccept = StrDup(zVal);


    }else if( strcasecmp(zFieldName,"Content-length:")==0 ){
      zContentLength = StrDup(zVal);
    }else if( strcasecmp(zFieldName,"Content-type:")==0 ){
      zContentType = StrDup(zVal);
    }else if( strcasecmp(zFieldName,"Referer:")==0 ){
      if( strstr(zVal, "devids.net/")!=0 ) Forbidden();
      zReferer = StrDup(zVal);







>
>







1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138
    zFieldName = GetFirstElement(zLine,&zVal);
    if( zFieldName==0 || *zFieldName==0 ) break;
    RemoveNewline(zVal);
    if( strcasecmp(zFieldName,"User-Agent:")==0 ){
      zAgent = StrDup(zVal);
    }else if( strcasecmp(zFieldName,"Accept:")==0 ){
      zAccept = StrDup(zVal);
    }else if( strcasecmp(zFieldName,"Accept-Encoding:")==0 ){
      zAcceptEncoding = StrDup(zVal);
    }else if( strcasecmp(zFieldName,"Content-length:")==0 ){
      zContentLength = StrDup(zVal);
    }else if( strcasecmp(zFieldName,"Content-type:")==0 ){
      zContentType = StrDup(zVal);
    }else if( strcasecmp(zFieldName,"Referer:")==0 ){
      if( strstr(zVal, "devids.net/")!=0 ) Forbidden();
      zReferer = StrDup(zVal);
1416
1417
1418
1419
1420
1421
1422

1423
1424
1425
1426
1427
1428
1429
      { "AUTH_TYPE",                   &zAuthType },
      { "AUTH_CONTENT",                &zAuthArg },
      { "CONTENT_LENGTH",              &zContentLength },
      { "CONTENT_TYPE",                &zContentType },
      { "DOCUMENT_ROOT",               &zHome },
      { "GATEWAY_INTERFACE",           &gateway_interface },
      { "HTTP_ACCEPT",                 &zAccept },

      { "HTTP_COOKIE",                 &zCookie },
      { "HTTP_HOST",                   &zHttpHost },
      { "HTTP_REFERER",                &zReferer },
      { "HTTP_USER_AGENT",             &zAgent },
      { "PATH",                        &default_path },
      { "PATH_INFO",                   &zPathInfo },
      { "QUERY_STRING",                &zQueryString },







>







1419
1420
1421
1422
1423
1424
1425
1426
1427
1428
1429
1430
1431
1432
1433
      { "AUTH_TYPE",                   &zAuthType },
      { "AUTH_CONTENT",                &zAuthArg },
      { "CONTENT_LENGTH",              &zContentLength },
      { "CONTENT_TYPE",                &zContentType },
      { "DOCUMENT_ROOT",               &zHome },
      { "GATEWAY_INTERFACE",           &gateway_interface },
      { "HTTP_ACCEPT",                 &zAccept },
      { "HTTP_ACCEPT_ENCODING",        &zAcceptEncoding },
      { "HTTP_COOKIE",                 &zCookie },
      { "HTTP_HOST",                   &zHttpHost },
      { "HTTP_REFERER",                &zReferer },
      { "HTTP_USER_AGENT",             &zAgent },
      { "PATH",                        &default_path },
      { "PATH_INFO",                   &zPathInfo },
      { "QUERY_STRING",                &zQueryString },

Changes to pages/changes.in.

13
14
15
16
17
18
19





















































20
21
22
23
24
25
26
<tcl>
set nChng 0
proc chng {date desc {options {}}} {
  global nChng aChng
  set aChng($nChng) [list $date $desc $options]
  incr nChng
}






















































chng {2014-10-17 (3.8.7)} {
<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 [version 3.8.0] is 61%.
    (Measured using 







>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>







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
<tcl>
set nChng 0
proc chng {date desc {options {}}} {
  global nChng aChng
  set aChng($nChng) [list $date $desc $options]
  incr nChng
}

chng {2014-12-09 (3.8.7.4)} {
<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
}

chng {2014-12-06 (3.8.7.3)} {
<li>Bug fix: Ensure the cached KeyInfo objects (an internal abstraction not visible to the
    application) do not go stale when operating in [shared cache mode] and frequently closing
    and reopening some database connections while leaving other database connections on the
    same shared cache open continuously.  Ticket 
    [https://www.sqlite.org/src/info/e4a18565a36884b00edf|e4a18565a36884b00edf].
<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
    [https://www.sqlite.org/src/info/6f2222d550f5b0ee7ed|6f2222d550f5b0ee7ed].

<li>SQLITE_SOURCE_ID: "2014-12-05 22:29:24 647e77e853e81a5effeb4c33477910400a67ba86"
<li>SHA1 for sqlite3.c: 3ad2f5ba3a4a3e3e51a1dac9fda9224b359f0261
}

chng {2014-11-19 (3.8.7.2)} {
<li>Enhance the [ROLLBACK] 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 [SQLITE_ABORT] or [SQLITE_ABORT_ROLLBACK] 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 [http://www.sqlite.org/src/info/094d39a4c95ee4|094d39a4c95ee4].
<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 [http://www.sqlite.org/src/info/db87229497|db87229497].

<li>SQLITE_SOURCE_ID: "2014-11-18 20:57:56 2ab564bf9655b7c7b97ab85cafc8a48329b27f93"
<li>SHA1 for sqlite3.c: b2a68d5783f48dba6a8cb50d8bf69b238c5ec53a
}

chng {2014-10-30 (3.8.7.1)} {
<li>In [PRAGMA journal_mode=TRUNCATE] 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 [ALTER TABLE|ALTER TABLE ADD COLUMN].
<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
    [CREATE VIEW|VIEW] with a [rowid] in the WHERE clause.

<li>SQLITE_SOURCE_ID: "2014-10-29 13:59:56 3b7b72c4685aa5cf5e675c2c47ebec10d9704221"
<li>SHA1 for sqlite3.c: 2d25bd1a73dc40f538f3a81c28e6efa5999bdf0c
}

chng {2014-10-17 (3.8.7)} {
<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 [version 3.8.0] is 61%.
    (Measured using 

Changes to pages/download.in.

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

set Caution #fff1c8

Heading {Pre-release Source-Code Snapshots} {} $Caution


Product {snapshot/sqlite-amalgamation-DATE.zip} {
  This is a snapshot (as of VERSION) of the current SQLite source code under 
  development.
  See the <a href="http://www.sqlite.org/draft/releaselog/current.html">pending
  change log</a> or the
  <a href="http://www.sqlite.org/src/timeline?from=release&to=trunk">timeline</a>
  for a summary of updates since the last release.
  This ZIP archive contains all preprocessed C code combined into a
  single source file (the [amalgamation]).
}
Product {snapshot/sqlite-amalgamation32k-DATE.zip} {
  This is a snapshot (as of VERSION) of the current SQLite source code under 
  development.
  See the <a href="http://www.sqlite.org/draft/releaselog/current.html">pending
  change log</a> or the
  <a href="http://www.sqlite.org/src/timeline?t=trunk&n=1000&a=release">timeline</a>
  for a summary of updates since the last release.
  The code in this ZIP archive is split into a small number of source files,
  such that no single source file is longer than 32767 lines of code.
}
Product {snapshot/sqlite-tea-DATE.zip} {
  This is a snapshot (as of VERSION) of the current SQLite code under 
  development, packaged and ready to build using the
  <a href="http://www.tcl.tk/doc/tea/">Tcl Extension Architecture (TEA)</a>.
  Use this snapshot for testing only.  This is not a release.
}

Heading {Pre-release Windows DLLs} {} $Caution

Product snapshot/sqlite-dll-win32-x86-DATE.zip {
  This ZIP archive contains a DLL for the SQLite library snapshot as of VERSION for
  32-bit x86 processors using the Win32 API. See the
  <a href="http://www.sqlite.org/draft/releaselog/current.html">pending change log</a>
  for a list of changes.
}
Product snapshot/sqlite-dll-win64-x64-DATE.zip {
  This ZIP archive contains a DLL for the SQLite library snapshot as of VERSION for
  64-bit x64 processors using the Win64 API.   See the
  <a href="http://www.sqlite.org/draft/releaselog/current.html">pending change log</a>
  for a list of changes.
}

Product {snapshot/sqlite-shell-win32-x86-DATE.zip} {
  This is a snapshot (as of VERSION) build of the 
  [CLI | sqlite3.exe command-line shell]
  shell program for 32-bit windows.
}







|
<

|
<
<
<
<


|
<

|
<
<
|
|











|
|

|


|
|

|







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

set Caution #fff1c8

Heading {Pre-release Source-Code Snapshots} {} $Caution


Product {snapshot/sqlite-amalgamation-DATE.zip} {
  The [amalgamation] as of VERSION.

  See the <a href="http://www.sqlite.org/draft/releaselog/current.html">pending
  change log</a> for details.




}
Product {snapshot/sqlite-amalgamation32k-DATE.zip} {
  The [amalgamation] as of VERSION.

  See the <a href="http://www.sqlite.org/draft/releaselog/current.html">pending
  change log</a> for details.  &mdash;


  <i>This version of the amalgamation is split into separate source files
  such that no single source file is longer than 32767 lines of code.</i>
}
Product {snapshot/sqlite-tea-DATE.zip} {
  This is a snapshot (as of VERSION) of the current SQLite code under 
  development, packaged and ready to build using the
  <a href="http://www.tcl.tk/doc/tea/">Tcl Extension Architecture (TEA)</a>.
  Use this snapshot for testing only.  This is not a release.
}

Heading {Pre-release Windows DLLs} {} $Caution

Product snapshot/sqlite-dll-win32-x86-DATE.zip {
  A 32-bit Windows DLL as of VERSION.
  See the
  <a href="http://www.sqlite.org/draft/releaselog/current.html">pending change log</a>
  for details.
}
Product snapshot/sqlite-dll-win64-x64-DATE.zip {
  A 64-bit Windows DLL as of VERSION.
  See the
  <a href="http://www.sqlite.org/draft/releaselog/current.html">pending change log</a>
  for details.
}

Product {snapshot/sqlite-shell-win32-x86-DATE.zip} {
  This is a snapshot (as of VERSION) build of the 
  [CLI | sqlite3.exe command-line shell]
  shell program for 32-bit windows.
}
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
  hd_puts "
    Visit the <a href=\"http://system.data.sqlite.org/\">System.Data.SQLite.org
    </a> website and especially the <a href=\"$url\">download page</a> for
    source code and binaries of SQLite for .NET.</td></tr>
  "
}

Heading {Legacy Source Code Distribution Formats (Not Recommended)} old

Product {YEAR/sqlite-src-VVV.zip} {
  A ZIP archive of the complete source tree for SQLite version VERSION
  as extracted from the version control system.  <i>The Makefile and
  configure script in this tarball are not supported</i>.  Their use
  is <u>not</u> recommended. The SQLite developers do not use them.  
  You should not use them either.  If you want a configure script and
  an automated build, use either the amalgamation tarball or TEA tarball
  instead of this one.
  To build from this tarball, hand-edit one of the template Makefiles
  in the root directory of the tarball and build using your own customized
  Makefile.
}

Product {YEAR/sqlite-preprocessed-VVV.zip} {
  This ZIP archive contains preprocessed C code for SQLite version VERSION
  individual source files.  The use of this source distribution is
  <u>not</u> recommended.  Use one of the amalgamation packages above
  unless you have a compelling reason not to.
}


</tcl>
</table>
<hr>








|


|
|
<
<
<
<
<
<
<
|



|
|
<
<







310
311
312
313
314
315
316
317
318
319
320
321







322
323
324
325
326
327


328
329
330
331
332
333
334
  hd_puts "
    Visit the <a href=\"http://system.data.sqlite.org/\">System.Data.SQLite.org
    </a> website and especially the <a href=\"$url\">download page</a> for
    source code and binaries of SQLite for .NET.</td></tr>
  "
}

Heading {Alternative Source Code Formats} old

Product {YEAR/sqlite-src-VVV.zip} {
  A ZIP archive of the complete (raw) source tree for SQLite version VERSION
  as extracted from the version control system.  Build using "./configure; make" on unix







  or mingw/msys or using "nmake -f Makefile.msc" using MSVC.
}

Product {YEAR/sqlite-preprocessed-VVV.zip} {
  A ZIP archive contains preprocessed C code for SQLite version VERSION
  individual source files.


}


</tcl>
</table>
<hr>

Changes to pages/index.in.

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
    <a href="http://www.bloomberg.com/">\
   <img src="images/foreignlogos/bloomberg.gif" alt="bloomberg.com" border="0">\
    </a></td><td>\
    <a href="http://www.bloomberg.com/">Bloomberg</a> - \
    A world leader in financial-information technology.</td></tr>'

  sponsor[2] = '<tr><td align="center">\
    <a href="http://www.adobe.com/">\
    <img src="images/foreignlogos/adobe-logo.gif" alt="adobe.com" border="0">\
    </a></td><td>\
    <a href="http://www.adobe.com/">Adobe</a> revolutionizes how the \
    world engages with ideas and information - anywhere, anytime, and \
    through any medium.</td></tr>'

  sponsor[3] = '<tr><td align="center">\
    <a href="http://www.oracle.com/us/technologies/embedded/">\
    <img src="images/foreignlogos/oracle.gif" alt="oracle.com" border="0">\
    </a></td><td>\
    <a href="http://www.oracle.com/us/technologies/embedded/">Oracle</a> -\
    Software.  Hardware.  Complete.</td></tr>'

  sponsor[4] = '<tr><td align="center">\
    <a href="http://www.bentley.com/">\
    <img src="images/foreignlogos/bentley.gif" alt="bentley.com" border="0">\
    </a></td><td>\
    <a href="http://www.bentley.com/">Bentley</a> - Comprehensive software \
    solutions for Sustaining Infrastructure.</td></tr>'

  count = 5
  while( count>0 ){
    i = Math.floor(Math.random()*6)
    if( sponsor[i]!=null ){
      document.write(sponsor[i])
      sponsor[i] = null
      count--
    }







<
<
<
<
<
<
<
<






|






|







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
    <a href="http://www.bloomberg.com/">\
   <img src="images/foreignlogos/bloomberg.gif" alt="bloomberg.com" border="0">\
    </a></td><td>\
    <a href="http://www.bloomberg.com/">Bloomberg</a> - \
    A world leader in financial-information technology.</td></tr>'

  sponsor[2] = '<tr><td align="center">\








    <a href="http://www.oracle.com/us/technologies/embedded/">\
    <img src="images/foreignlogos/oracle.gif" alt="oracle.com" border="0">\
    </a></td><td>\
    <a href="http://www.oracle.com/us/technologies/embedded/">Oracle</a> -\
    Software.  Hardware.  Complete.</td></tr>'

  sponsor[3] = '<tr><td align="center">\
    <a href="http://www.bentley.com/">\
    <img src="images/foreignlogos/bentley.gif" alt="bentley.com" border="0">\
    </a></td><td>\
    <a href="http://www.bentley.com/">Bentley</a> - Comprehensive software \
    solutions for Sustaining Infrastructure.</td></tr>'

  count = 4
  while( count>0 ){
    i = Math.floor(Math.random()*6)
    if( sponsor[i]!=null ){
      document.write(sponsor[i])
      sponsor[i] = null
      count--
    }
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97

</td>
<td width="20"></td><td bgcolor="#044a64" width="1"></td><td width="20"></td>
<td valign="top">
<h3>Current Status</h3>

<p><ul>
<li><a href="releaselog/3_8_7.html">Version 3.8.7</a>
of SQLite is recommended for all new development.
Upgrading from all other versions of SQLite
is recommended.</li>
</ul></p>

<h3>Common Links</h3>








|







75
76
77
78
79
80
81
82
83
84
85
86
87
88
89

</td>
<td width="20"></td><td bgcolor="#044a64" width="1"></td><td width="20"></td>
<td valign="top">
<h3>Current Status</h3>

<p><ul>
<li><a href="releaselog/3_8_7_4.html">Version 3.8.7.4</a>
of SQLite is recommended for all new development.
Upgrading from all other versions of SQLite
is recommended.</li>
</ul></p>

<h3>Common Links</h3>

Changes to pages/news.in.

14
15
16
17
18
19
20



































































21
22
23
24
25
26
27
  hd_puts "<h3>$date - $title</h3>"
  regsub -all "\n( *\n)+" $text "</p>\n\n<p>" txt
  regsub -all {[Tt]icket #(\d+)} $txt \
      {<a href="http://www.sqlite.org/cvstrac/tktview?tn=\1">\0</a>} txt
  hd_resolve "<blockquote>$txt</blockquote>"
  hd_puts "<hr width=\"50%\">"
}




































































newsitem {2014-10-17} {Release 3.8.7} {
<p>SQLite [version 3.8.7] is a regularly scheduled maintenance release.
   Upgrading from all prior versions is recommended.

<p>Most of the changes from the previous release have been micro-optimizations
   designed to help SQLite run a little faster.  Each individual optimization







>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>







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
  hd_puts "<h3>$date - $title</h3>"
  regsub -all "\n( *\n)+" $text "</p>\n\n<p>" txt
  regsub -all {[Tt]icket #(\d+)} $txt \
      {<a href="http://www.sqlite.org/cvstrac/tktview?tn=\1">\0</a>} txt
  hd_resolve "<blockquote>$txt</blockquote>"
  hd_puts "<hr width=\"50%\">"
}

newsitem {2014-12-09} {Release 3.8.7.4} {
<p>SQLite [version 3.8.7.4] an unscheduled bug-fix release.  Changes from
   the previous release and from [version 3.8.7] are minimal.

<p>This release fixes adds in a mutex that is required by the changes of
   the 3.8.7.3 patch but was accidently omitted.  The mutex was not required
   by any of the internal SQLite tests, but Firefox crashes without it.
   Test cases have been added to ensure that mutex is never again missed.
}

newsitem {2014-12-06} {Release 3.8.7.3} {
<p>SQLite [version 3.8.7.3] an unscheduled bug-fix release.  Changes from
   the previous release and from [version 3.8.7] are minimal.

<p>This release fixes two obscure bugs that can result in incorrect
   query results and/or application crashes, but not (as far as we can
   tell) security vulnerabilities.  Both bugs have been latent in the
   code across multiple prior releases and have never before been encountered,
   so they are unlikely to cause problems.  Nevertheless
   it seems prudent to publish fixes for them both.  See the
   change log for details.
}

newsitem {2014-11-19} {Release 3.8.7.2} {
<p>SQLite [version 3.8.7.2] is a patch and bug-fix release.  Changes from
   the previous release are minimal.

<p>The primary reason for this release is to enhance the [ROLLBACK] command
   so that it allows running queries on the same database connection to 
   continue running as long as the ROLLBACK does not change the schema.
   In all previous versions of SQLite, a ROLLBACK would cause pending
   queries to stop immediately and return [SQLITE_ABORT] or
   [SQLITE_ABORT_ROLLBACK]. Pending queries still abort if the ROLLBACK
   changes the database schema, but as of this patch release, the queries
   are allowed to continue running if the schema is unmodified.

<p>In addition to the ROLLBACK enhancement, this patch release also
   includes fixes for three obscure bugs.  See the 
   [version 3.8.7.2|change log] for details.
}

newsitem {2014-10-30} {Release 3.8.7.1} {
<p>SQLite [version 3.8.7.1] is a bug-fix release.

<p>The primary reason for this bug-fix release is to address a problem with
   updating the value of fields at the end of a table that were added
   using [ALTER TABLE|ALTER TABLE ADD COLUMN].  This problem
   [https://www.sqlite.org/src/info/43107840f1c02|1] first appeared in the
   3.8.7 release.

<p>Another minor annoyance in the 3.8.7 release was the fact that the
   Android build tried to use the strchrnul() function from the standard
   C library but that function is not available on Android.  Android builds
   had to add -DHAVE_STRCHRNUL=0 to work around the problem.  This patch
   fixes that so that Android builds should now work without any changes.

<p>The operation of [PRAGMA journal_mode=TRUNCATE] has been enhanced so that
   it invokes fsync() after truncating the journal file when
   [PRAGMA synchronous=FULL].  This helps to preserve transaction durability
   in the case of a power loss occurring shortly after commit.

<p>Finally, a couple of long-standing and obscure problems associated with run
   UPDATE and DELETE on VIEWs were fixed.

<p>The [https://www.sqlite.org/src/vdiff?from=e4ab094f8afce0817f4074e823fabe59fc29ebb4&to=83afe23e553e802c0947c80d0ffdd120423e7c52&sbs=1|changes from 3.8.7] are minimal.
}

newsitem {2014-10-17} {Release 3.8.7} {
<p>SQLite [version 3.8.7] is a regularly scheduled maintenance release.
   Upgrading from all prior versions is recommended.

<p>Most of the changes from the previous release have been micro-optimizations
   designed to help SQLite run a little faster.  Each individual optimization

Changes to pages/rescode.in.

489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
  The SQLITE_IOERR_DELETE_NOENT error code
  is an [ext-v-prim|extended error code]
  for [SQLITE_IOERR] indicating that the
  xDelete method on the [sqlite3_vfs] object failed because the
  file being deleted does not exist.
}
RESCODE SQLITE_IOERR_MMAP              {SQLITE_IOERR | (24<<8)} {
  The SQLITE_IOERR_SEEK error code is an [ext-v-prim|extended error code]
  for [SQLITE_IOERR] indicating an I/O error
  within the xFetch or xUnfetch methods on the [sqlite3_io_methods] object
  while trying to map or unmap part of the database file into the
  process address space.
}
RESCODE SQLITE_IOERR_GETTEMPPATH       {SQLITE_IOERR | (25<<8)} {
  The SQLITE_IOERR_SEEK error code is an [ext-v-prim|extended error code]
  for [SQLITE_IOERR] indicating that the [VFS] is unable to determine
  a suitable directory in which to place temporary files.
}
RESCODE SQLITE_IOERR_CONVPATH          {SQLITE_IOERR | (26<<8)} {
  The SQLITE_IOERR_SEEK error code is an [ext-v-prim|extended error code]
  for [SQLITE_IOERR] used only by Cygwin [VFS] and indicating that
  the cygwin_conv_path() system call failed.
  See also: [SQLITE_CANTOPEN_CONVPATH]
}
RESCODE SQLITE_LOCKED_SHAREDCACHE      {SQLITE_LOCKED |  (1<<8)} {
  The SQLITE_LOCKED_SHAREDCACHE error code is
  an [ext-v-prim|extended error code] for [SQLITE_LOCKED]







|






|




|







489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
  The SQLITE_IOERR_DELETE_NOENT error code
  is an [ext-v-prim|extended error code]
  for [SQLITE_IOERR] indicating that the
  xDelete method on the [sqlite3_vfs] object failed because the
  file being deleted does not exist.
}
RESCODE SQLITE_IOERR_MMAP              {SQLITE_IOERR | (24<<8)} {
  The SQLITE_IOERR_MMAP error code is an [ext-v-prim|extended error code]
  for [SQLITE_IOERR] indicating an I/O error
  within the xFetch or xUnfetch methods on the [sqlite3_io_methods] object
  while trying to map or unmap part of the database file into the
  process address space.
}
RESCODE SQLITE_IOERR_GETTEMPPATH       {SQLITE_IOERR | (25<<8)} {
  The SQLITE_IOERR_GETTEMPPATH error code is an [ext-v-prim|extended error code]
  for [SQLITE_IOERR] indicating that the [VFS] is unable to determine
  a suitable directory in which to place temporary files.
}
RESCODE SQLITE_IOERR_CONVPATH          {SQLITE_IOERR | (26<<8)} {
  The SQLITE_IOERR_CONVPATH error code is an [ext-v-prim|extended error code]
  for [SQLITE_IOERR] used only by Cygwin [VFS] and indicating that
  the cygwin_conv_path() system call failed.
  See also: [SQLITE_CANTOPEN_CONVPATH]
}
RESCODE SQLITE_LOCKED_SHAREDCACHE      {SQLITE_LOCKED |  (1<<8)} {
  The SQLITE_LOCKED_SHAREDCACHE error code is
  an [ext-v-prim|extended error code] for [SQLITE_LOCKED]
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
}
RESCODE SQLITE_CANTOPEN_FULLPATH       {SQLITE_CANTOPEN | (3<<8)} {
  The SQLITE_CANTOPEN_FULLPATH error code is an [ext-v-prim|extended error code]
  for [SQLITE_CANTOPEN] indicating that a file open operation failed because
  the operating system was unable to convert the filename into a full pathname.
}
RESCODE SQLITE_CANTOPEN_CONVPATH       {SQLITE_CANTOPEN | (4<<8)} {
  The SQLITE_CANTOPEN_SEEK error code is an [ext-v-prim|extended error code]
  for [SQLITE_CANTOPEN] used only by Cygwin [VFS] and indicating that
  the cygwin_conv_path() system call failed while trying to open a file.
  See also: [SQLITE_IOERR_CONVPATH]
}
RESCODE SQLITE_CORRUPT_VTAB            {SQLITE_CORRUPT | (1<<8)} {
  The SQLITE_CORRUPT_VTAB error code is an [ext-v-prim|extended error code]
  for [SQLITE_CORRUPT] used by [virtual tables].  A [virtual table] might







|







567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
}
RESCODE SQLITE_CANTOPEN_FULLPATH       {SQLITE_CANTOPEN | (3<<8)} {
  The SQLITE_CANTOPEN_FULLPATH error code is an [ext-v-prim|extended error code]
  for [SQLITE_CANTOPEN] indicating that a file open operation failed because
  the operating system was unable to convert the filename into a full pathname.
}
RESCODE SQLITE_CANTOPEN_CONVPATH       {SQLITE_CANTOPEN | (4<<8)} {
  The SQLITE_CANTOPEN_CONVPATH error code is an [ext-v-prim|extended error code]
  for [SQLITE_CANTOPEN] used only by Cygwin [VFS] and indicating that
  the cygwin_conv_path() system call failed while trying to open a file.
  See also: [SQLITE_IOERR_CONVPATH]
}
RESCODE SQLITE_CORRUPT_VTAB            {SQLITE_CORRUPT | (1<<8)} {
  The SQLITE_CORRUPT_VTAB error code is an [ext-v-prim|extended error code]
  for [SQLITE_CORRUPT] used by [virtual tables].  A [virtual table] might

Changes to pages/support.in.

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

<tcl>hd_fragment mailinglists {mailing lists}</tcl>
<h3>Mailing Lists</h3>
<p>Three separate mailing lists have been established to help support
SQLite:</p>

<ul>
<li><a href="http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users">
sqlite-users</a> - general discussion for programmers using SQLite in their applications.  
Most postings belong here.</li>
<li><a href="http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-dev">
sqlite-dev</a> - conversations about SQLite internals, for those who work
directly on enhancing SQLite itself.</li>
<li><a href="http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-announce">
sqlite-announce</a> - announcements of new
releases or significant developments; a very-low traffic list.</li>
</ul>

<p>
Most users of SQLite will want to join the
<a href="http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-announce">
sqlite-announce</a> list and many will want to join the
<a href="http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users">
sqlite-users</a> list.  The
<a href="http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-dev">
sqlite-dev</a> list is more specialized and appeals to a narrower audience.
Off-site archives of the
<a href="http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users">
sqlite-users</a> list are available at:
</p>

<blockquote>
[http://www.mail-archive.com/sqlite-users%40sqlite.org/]<br>
<a href="http://marc.info/?l=sqlite-users&r=1&w=2">http://marc.info/?l=sqlite-users&r=1&w=2</a><br>
[http://news.gmane.org/gmane.comp.db.sqlite.general]







|


|


|






|

|

|


|







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

<tcl>hd_fragment mailinglists {mailing lists}</tcl>
<h3>Mailing Lists</h3>
<p>Three separate mailing lists have been established to help support
SQLite:</p>

<ul>
<li><a href="http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-users">
sqlite-users</a> - general discussion for programmers using SQLite in their applications.  
Most postings belong here.</li>
<li><a href="http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-dev">
sqlite-dev</a> - conversations about SQLite internals, for those who work
directly on enhancing SQLite itself.</li>
<li><a href="http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-announce">
sqlite-announce</a> - announcements of new
releases or significant developments; a very-low traffic list.</li>
</ul>

<p>
Most users of SQLite will want to join the
<a href="http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-announce">
sqlite-announce</a> list and many will want to join the
<a href="http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-users">
sqlite-users</a> list.  The
<a href="http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-dev">
sqlite-dev</a> list is more specialized and appeals to a narrower audience.
Off-site archives of the
<a href="http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-users">
sqlite-users</a> list are available at:
</p>

<blockquote>
[http://www.mail-archive.com/sqlite-users%40sqlite.org/]<br>
<a href="http://marc.info/?l=sqlite-users&r=1&w=2">http://marc.info/?l=sqlite-users&r=1&w=2</a><br>
[http://news.gmane.org/gmane.comp.db.sqlite.general]

Changes to pages/syntaxdiagrams.in.

1
2
3
4
5
6
7
8
9

10
11
12
13
14
15
16
<title>Syntax Diagrams For SQLite</title>
<tcl>hd_keywords {syntax diagrams}</tcl>

<h1 align=center>Syntax Diagrams For SQLite</h1>

<tcl>

foreach name $syntax_order {
  # hd_fragment $name *$name "$name syntax diagram"

  hd_puts "<h4>$name:</h4>"
  hd_puts "<blockquote>\n"
  hd_puts "<img src=\"images/syntax/$name.gif\"></img><br></br>"
  foreach {cx px} $syntax_linkage($name) break
  if {[llength $px]>0} {
    hd_puts "\nUsed by:"
    foreach c $px {









>







1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<title>Syntax Diagrams For SQLite</title>
<tcl>hd_keywords {syntax diagrams}</tcl>

<h1 align=center>Syntax Diagrams For SQLite</h1>

<tcl>

foreach name $syntax_order {
  # hd_fragment $name *$name "$name syntax diagram"
  hd_puts "<a name=\"$name\"></a>"
  hd_puts "<h4>$name:</h4>"
  hd_puts "<blockquote>\n"
  hd_puts "<img src=\"images/syntax/$name.gif\"></img><br></br>"
  foreach {cx px} $syntax_linkage($name) break
  if {[llength $px]>0} {
    hd_puts "\nUsed by:"
    foreach c $px {

Changes to pages/whentouse.in.

37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52

<p>
SQLite has been used with great success as the on-disk file format
for desktop applications such as version control systems,
financial analysis tools, media cataloging and editing suites, CAD
packages, record keeping programs, and so forth.  The traditional
File/Open operation calls sqlite3_open() to attach to the database
file.  Updates happen atomically as application content is revised
so the File/Save menu option become superfluous.  The File/Save_As
menu option can be implemented using the [backup API].
</p>

<p>
There are many advantages to using SQLite as an application file format,
including:
</p>







|
|







37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52

<p>
SQLite has been used with great success as the on-disk file format
for desktop applications such as version control systems,
financial analysis tools, media cataloging and editing suites, CAD
packages, record keeping programs, and so forth.  The traditional
File/Open operation calls sqlite3_open() to attach to the database
file.  Updates happen automatically as application content is revised
so the File/Save menu option becomes superfluous.  The File/Save_As
menu option can be implemented using the [backup API].
</p>

<p>
There are many advantages to using SQLite as an application file format,
including:
</p>

Changes to search/search.tcl.

392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
    <a href="download.html">Download</a>
    <a href="copyright.html">License</a>
    <a href="news.html">News</a>
    <a href="support.html">Support</a>
  </div>
<td>
    <div style="padding:0 1em 0px 0;white-space:nowrap">
    <form name=f method="GET" action="http://www.sqlite.org/search">
      <input id=q name=q type=text value=""
       onfocus="entersearch()" onblur="leavesearch()" style="width:24ex;padding:1px 1ex; border:solid white 1px; font-size:0.9em">
      <input type=submit value="Go" style="border:solid white 1px;background-color:#044a64;color:white;font-size:0.9em;padding:0 1ex">
    </form>
    </div>
  </table>
</div></div></div></div>







|







392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
    <a href="download.html">Download</a>
    <a href="copyright.html">License</a>
    <a href="news.html">News</a>
    <a href="support.html">Support</a>
  </div>
<td>
    <div style="padding:0 1em 0px 0;white-space:nowrap">
    <form name=f method="GET" action="https://www.sqlite.org/search">
      <input id=q name=q type=text value=""
       onfocus="entersearch()" onblur="leavesearch()" style="width:24ex;padding:1px 1ex; border:solid white 1px; font-size:0.9em">
      <input type=submit value="Go" style="border:solid white 1px;background-color:#044a64;color:white;font-size:0.9em;padding:0 1ex">
    </form>
    </div>
  </table>
</div></div></div></div>

Changes to wrap.tcl.

523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
        return false;
      }
    </script>}
  }
  if {1} {
    putsin4 $fd {<td>
        <div style="padding:0 1em 0px 0;white-space:nowrap">
        <form name=f method="GET" action="http://www.sqlite.org/search">
          <input id=q name=q type=text
           onfocus="entersearch()" onblur="leavesearch()" style="width:24ex;padding:1px 1ex; border:solid white 1px; font-size:0.9em ; font-style:italic;color:#044a64;" value="Search SQLite Docs...">
          <input type=submit value="Go" style="border:solid white 1px;background-color:#044a64;color:white;font-size:0.9em;padding:0 1ex">
        </form>
        </div>
      </table>}
  }







|







523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
        return false;
      }
    </script>}
  }
  if {1} {
    putsin4 $fd {<td>
        <div style="padding:0 1em 0px 0;white-space:nowrap">
        <form name=f method="GET" action="https://www.sqlite.org/search">
          <input id=q name=q type=text
           onfocus="entersearch()" onblur="leavesearch()" style="width:24ex;padding:1px 1ex; border:solid white 1px; font-size:0.9em ; font-style:italic;color:#044a64;" value="Search SQLite Docs...">
          <input type=submit value="Go" style="border:solid white 1px;background-color:#044a64;color:white;font-size:0.9em;padding:0 1ex">
        </form>
        </div>
      </table>}
  }