Documentation Source Text

Check-in [bfd46de16b]
Login

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

Overview
Comment:Enhance the change log to use ordered-lists rather than unnumber-lists to make it easier for people to refer to a specific item in the change log. Also fixed a minor typo on item 7 of the current change log.
Timelines: family | ancestors | descendants | both | trunk
Files: files | file ages | folders
SHA3-256: bfd46de16bc7f1603e878e91199491ad0c2ef791a1e60d7727c3df4182b75441
User & Date: drh 2017-07-31 20:31:27
Context
2017-08-01
01:23
Update the speed-and-size spreadsheet with the latest test numbers. check-in: 17d120e496 user: drh tags: trunk
2017-07-31
20:31
Enhance the change log to use ordered-lists rather than unnumber-lists to make it easier for people to refer to a specific item in the change log. Also fixed a minor typo on item 7 of the current change log. check-in: bfd46de16b user: drh tags: trunk
20:19
Mention the column-name fix in the change log for 3.20.0. check-in: 86057a37ce user: drh tags: trunk
Changes
Hide Diffs Unified Diffs Ignore Whitespace Patch

Changes to pages/changes.in.

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
...
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
...
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
....
1500
1501
1502
1503
1504
1505
1506
1507
1508
1509
1510
1511
1512
1513
1514
1515
1516
1517
1518
1519
....
1829
1830
1831
1832
1833
1834
1835
1836
1837
1838
1839
1840
1841
1842
1843
1844
1845
1846
1847
....
2388
2389
2390
2391
2392
2393
2394
2395
2396
2397
2398
2399
2400
2401
2402
2403
2404
2405
2406
2407
2408
2409
2410
2411
....
2979
2980
2981
2982
2983
2984
2985
2986
2987
2988
2989
2990
2991
2992
2993
....
3057
3058
3059
3060
3061
3062
3063
3064
3065
3066
3067
3068
3069
3070
3071
3072
3073
3074
3075
3076
3077
3078
3079
3080
3081
3082
3083
3084
....
3158
3159
3160
3161
3162
3163
3164
3165
3166
3167
3168
3169
3170
3171
3172
3173
3174
3175
3176
3177
3178
3179
3180
....
4694
4695
4696
4697
4698
4699
4700
4701
4702
4703
4704
4705
4706
4707
4708
4709
4710
4711
4712
4713
4714
4715
4716
4717
4718
4719
4720
....
4730
4731
4732
4733
4734
4735
4736
4737
4738
4739
4740
4741
4742
4743
4744
4745
4746
4747
4748
4749
4750
4751
4752
4753
4754
4755
4756
4757
4758
4759
4760
4761
4762
4763
4764
4765
4766
4767
4768
4769
4770
4771
chng {2017-08-01 (3.20.0)} {
<li> Update the text of error messages returned by [sqlite3_errmsg()] for some
     error codes.
<li> Add new [pointer passing interfaces].
<li> Backwards-incompatible changes to some extensions in order to take 
     advantage of the improved security offered by the new 
     [pointer passing interfaces]:
     <ul>
     <li> [Extending FTS5] &rarr; requires [sqlite3_bind_pointer()] to find
          the fts5_api pointer.
     <li> [carray(PTR,N)] &rarr; requires [sqlite3_bind_pointer()] to set the PTR parameter.
     <li> [https://www.sqlite.org/src/file/ext/misc/remember.c|remember(V,PTR)]
          &rarr; requires [sqlite3_bind_pointer()] to set the PTR parameter.
     </ul>
<li> Added the [SQLITE_STMT virtual table] extension.
<li> Added the [COMPLETION extension] - designed to suggest
     tab-completions for interactive user interfaces.  This is a work in progress.
     Expect further enhancements in future releases.
<li> Added the [UNION virtual table] extension.
<li> The built-in [date and time functions] have been enhanced so that they can be
     used in [CHECK constraints], in [indexes on expressions], and in the WHERE clause
     of a [partial indexes], provided that they do not use the 'now', 'localtime', or
     'utc' keywords.  [date/time special case|Futher information].
<li> Added the [sqlite3_prepare_v3()] and [sqlite3_prepare16_v3()] interfaces
     with the extra "prepFlags" parameters.
<li> Provide the [SQLITE_PREPARE_PERSISTENT] flag for [sqlite3_prepare_v3()] and
     use it to limit [lookaside memory] misuse by [FTS3], [FTS5], and the
     [R-Tree extension].
<li> Added the [PRAGMA secure_delete=FAST] 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 [free-page list] but will be purged from all b-tree pages.
<li> Enhancements to the [command-line shell]:
<ul>
<li> Add support for tab-completion using the [COMPLETION extension], for
     both readline and linenoise.
<li> Add the ".cd" command.
<li> Enhance the "[.schema]" command to show the schema of all attached
     databases.
<li> Enhance "[.tables]" so that it shows the schema names for all attached
     if the name is anything other than "main".
<li> The "[.import]" command ignores an initial UTF-8 BOM.
<li> Added the "--newlines" option to the "[.dump]" command to cause U+000a and
     U+000d characters to be output literally rather than escaped using the
     [replace()] function.
</ul>
<li> Query planner enhancements:
<ul>
<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 [flattening optimization] for a sub-query on the RHS 
     of a LEFT JOIN if that subquery reads data from a [virtual table] as
     doing so prevents the query planner from creating [automatic indexes]
     on the results of the sub-query, which can slow down the query.
</ul>
<li> Add [SQLITE_STMTSTATUS_REPREPARE], [SQLITE_STMTSTATUS_RUN], 
     and [SQLITE_STMTSTATUS_MEMUSED] options for the
     [sqlite3_stmt_status()] interface.
<li> Provide [PRAGMA functions] for
     [PRAGMA integrity_check], [PRAGMA quick_check], and
     [PRAGMA foreign_key_check].
<li> Add the -withoutnulls option to the [TCL interface eval method].
................................................................................
<p><b>Hashes:</b>
<li>SQLITE_SOURCE_ID: "2017-03-28 18:48:43 424a0d380332858ee55bdebc4af3789f74e70a2b3ba1cf29d84b9b4bcf3e2e37"
<li>SHA3-256 for sqlite3.c: cbf322df1f76be57fb3be84f3da1fc71d1d3dfdb7e7c2757fb0ff630b3bc2e5d
}

chng {2017-02-13 (3.17.0)} {
<li>Approximately 25% better performance from the [R-Tree extension].
    <ul>
    <li> Uses compiler built-ins (ex: __builtin_bswap32() or _byteswap_ulong())
         for byteswapping when available.
    <li> Uses the [sqlite3_blob] key/value access object instead of SQL
         for pulling content out of R-Tree nodes
    <li> Other miscellaneous enhancements such as loop unrolling.
    </ul>
<li>Add the [SQLITE_DEFAULT_LOOKASIDE] compile-time option.
<li>Increase the default [lookaside memory allocator|lookaside]
    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.
................................................................................
chng {2016-10-14 (3.15.0)} {
<li> Added support for [row values].
<li> Allow [deterministic SQL functions] in the WHERE clause of a [partial index].
<li> Added the "[modeof|modeof=<i>filename</i>]" URI parameter on the unix VFS
<li> Added support for [SQLITE_DBCONFIG_MAINDBNAME].
<li> Added the ability to [VACUUM] an [ATTACH|ATTACH-ed] database.
<li> Enhancements to the [command-line shell]:
     <ul>
     <li> Add the ".testcase" and ".check" [dot-commands].
     <li> Added the --new option to the ".open" dot-command, causing
          any prior content in the database to be purged prior to
          opening.
     </ul>
<li> Enhance the [fts5vocab] 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 ([sqlite3_prepare_v2()]).
<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
................................................................................
<li>SHA1 for sqlite3.c: 6422c7d69866f5ea3db0968f67ee596e7114544e
}

chng {2013-10-17 (3.8.1)} {
<li>Added the [unlikely()] and [likelihood()] SQL functions to be used
    as hints to the query planner.
<li>Enhancements to the query planner:
<ul>
<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.
</ul>
<li>Added the [soft_heap_limit pragma].
<li>Added support for [SQLITE_ENABLE_STAT4]
<li>Added support for "sz=NNN" parameters at the end of 
    [sqlite_stat1 | sqlite_stat1.stat] 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.
................................................................................
    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:
    <ul>
    <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
    </ul>
<li>Added the [busy_timeout pragma].
<li>Added the [instr()] SQL function.
<li>Added the [SQLITE_FCNTL_BUSYHANDLER] file control, used to allow VFS
    implementations to get access to the busy handler callback.
<li>The xDelete method in the built-in [VFS | VFSes] now return
    SQLITE_IOERR_DELETE_NOENT if the file to be deleted does not exist.
<li>Enhanced support for QNX.
................................................................................
<li>The SQL output resulting from [sqlite3_trace()] is now modified to include
the values of [bound parameters].
<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:
<ul>
<li>The [ifnull()] and [coalesce()] 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 [substr()] 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
</ul>
<li>The FTS3 extension has undergone a major rework and cleanup.
New [fts3 | FTS3 documentation] is now available.
<li>The [SQLITE_SECURE_DELETE] compile-time option fixed to make sure that
content is deleted even when the [truncate optimization] applies.
<li>Improvements to "dot-command" handling in the
[Command Line Interface].
<li>Other minor bug fixes and documentation enhancements.
................................................................................
    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
    [http://www.icu-project.org/ | International Components for Unicode (ICU)]
    to the full-text search extensions.
</ul><p>
<ul type="circle">
<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
    [sqlite3_column_blob()]
................................................................................
<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:
<ul>
<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>
</ul></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
................................................................................
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:
<ul>
<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>
</ul>
<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>
................................................................................
  foreach {date desc options} $aChng($i) break
  if {[regexp {\(([0-9.]+)\)} $date all vers]} {
    set label [string map {. _} $vers]
    hd_fragment version_$label
  }
  hd_puts "<h3>$date</h3>"
  regsub -all {\yROOT/} $desc {} d2
  hd_resolve "<p><ul class='lessindent'>$d2\n"
  foreach {key value} $options {
    if {$key=="backport"} {
      if {[info exists xrefChng($value)]} {set value $xrefChng($value)}
      set c2 $aChng([expr {$i+$value}])
      regexp {([-0-9]+) \((3\.\d+[.0-9]+)[ a-zA-Z]*\)} [lindex $c2 0] all xdate xvers
      set d2 [lindex $c2 1]
      regsub {(<p>[^\n]*\n)?<li>SQLITE_SOURCE_ID.*$} $d2 {} d2
      hd_resolve "<p><b>Bug fixes backported into patch release $xvers ($xdate):</b></p>\n"
      hd_resolve "$d2\n"
    }
  }
  hd_resolve "</ul></p>\n"
  if {[regexp {([-0-9]+) \((3\.\d+[.0-9]+)[ a-zA-Z]*\)} $date all dateonly vers]} {
    set tag [string trim [string map {. _} $vers]]
    file mkdir $DEST/releaselog
    set filename releaselog/$tag.html
    hd_open_aux $filename
    if {[string match *-00* $dateonly]} {
      set hdr "SQLite Release $vers (Pending)"
................................................................................
    hd_enable_main 0
    hd_puts "<h2>$hdr</h2>"
    regsub -all {<a href="(?!http:)} $desc {<a href="../} desc
    foreach {key value} $options {
      if {$key=="inadditionto"} {
        set d2 [lindex $aChng([expr {$i+$value}]) 1]
        regsub {(<p>[^\n]*\n)?<li>SQLITE_SOURCE_ID.*$} $d2 {} d2
        hd_resolve "<p><ul class='lessindent'>$d2</ul></p>"
      }
    }
    regsub -all {\yROOT/\y} $desc {../} d2
    hd_resolve "<p><ul class='lessindent'>$d2\n"
    foreach {key value} $options {
      if {$key=="patchagainst"} {
        if {[info exists xrefChng($value)]} {set value $xrefChng($value)}
        set c2 $aChng([expr {$i+$value}])
        regexp {([-0-9]+) \((3\.\d+[.0-9]+)[ a-zA-Z]*\)} [lindex $c2 0] all date vers
        set d2 [lindex $c2 1]
        regsub -all {\yROOT/} $d2 {../} d2
        regsub {(<p>[^\n]*\n)?<li>SQLITE_SOURCE_ID.*$} $d2 {} d2
        hd_resolve "</ul></p>\n"
        hd_resolve "<p><b>Changes carried forward from version $vers ($date):</b></p>\n"
        hd_resolve "<p><ul class='lessindent'>$d2\n"
      }
      if {$key=="backport"} {
        if {[info exists xrefChng($value)]} {set value $xrefChng($value)}
        set c2 $aChng([expr {$i+$value}])
        regexp {([-0-9]+) \((3\.\d+\.[.0-9]+)[ a-zA-Z]*\)} [lindex $c2 0] all date vers
        set d2 [lindex $c2 1]
        regsub {(<p>[^\n]*\n)?<li>SQLITE_SOURCE_ID.*$} $d2 {} d2
        hd_resolve "<p><b>Bug fixes backported into patch release $vers ($date):</b></p>\n"
        hd_resolve "$d2\n"
      }
    }
    hd_resolve "</ul></p>\n"
    hd_resolve {
      <p>A [complete list of SQLite releases]
      in a single page and a [chronology] are both also available.  
      A detailed history of every
      check-in is available at
      <a href="http://www.sqlite.org/src/timeline">
      SQLite version control site</a>.</p>







|





|






|
|











|











|

|













|







 







|





|







 







|




|







 







|




|







 







|



|







 







|








|







 







|







 







|












|







 







|







|







 







|











|







 







|



|








|

|











|







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
...
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
...
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
....
1500
1501
1502
1503
1504
1505
1506
1507
1508
1509
1510
1511
1512
1513
1514
1515
1516
1517
1518
1519
....
1829
1830
1831
1832
1833
1834
1835
1836
1837
1838
1839
1840
1841
1842
1843
1844
1845
1846
1847
....
2388
2389
2390
2391
2392
2393
2394
2395
2396
2397
2398
2399
2400
2401
2402
2403
2404
2405
2406
2407
2408
2409
2410
2411
....
2979
2980
2981
2982
2983
2984
2985
2986
2987
2988
2989
2990
2991
2992
2993
....
3057
3058
3059
3060
3061
3062
3063
3064
3065
3066
3067
3068
3069
3070
3071
3072
3073
3074
3075
3076
3077
3078
3079
3080
3081
3082
3083
3084
....
3158
3159
3160
3161
3162
3163
3164
3165
3166
3167
3168
3169
3170
3171
3172
3173
3174
3175
3176
3177
3178
3179
3180
....
4694
4695
4696
4697
4698
4699
4700
4701
4702
4703
4704
4705
4706
4707
4708
4709
4710
4711
4712
4713
4714
4715
4716
4717
4718
4719
4720
....
4730
4731
4732
4733
4734
4735
4736
4737
4738
4739
4740
4741
4742
4743
4744
4745
4746
4747
4748
4749
4750
4751
4752
4753
4754
4755
4756
4757
4758
4759
4760
4761
4762
4763
4764
4765
4766
4767
4768
4769
4770
4771
chng {2017-08-01 (3.20.0)} {
<li> Update the text of error messages returned by [sqlite3_errmsg()] for some
     error codes.
<li> Add new [pointer passing interfaces].
<li> Backwards-incompatible changes to some extensions in order to take 
     advantage of the improved security offered by the new 
     [pointer passing interfaces]:
     <ol type='a'>
     <li> [Extending FTS5] &rarr; requires [sqlite3_bind_pointer()] to find
          the fts5_api pointer.
     <li> [carray(PTR,N)] &rarr; requires [sqlite3_bind_pointer()] to set the PTR parameter.
     <li> [https://www.sqlite.org/src/file/ext/misc/remember.c|remember(V,PTR)]
          &rarr; requires [sqlite3_bind_pointer()] to set the PTR parameter.
     </ol>
<li> Added the [SQLITE_STMT virtual table] extension.
<li> Added the [COMPLETION extension] - designed to suggest
     tab-completions for interactive user interfaces.  This is a work in progress.
     Expect further enhancements in future releases.
<li> Added the [UNION virtual table] extension.
<li> The built-in [date and time functions] have been enhanced so that they can be
     used in [CHECK constraints], in [indexes on expressions], and in the WHERE clauses
     of [partial indexes], provided that they do not use the 'now', 'localtime', or
     'utc' keywords.  [date/time special case|Futher information].
<li> Added the [sqlite3_prepare_v3()] and [sqlite3_prepare16_v3()] interfaces
     with the extra "prepFlags" parameters.
<li> Provide the [SQLITE_PREPARE_PERSISTENT] flag for [sqlite3_prepare_v3()] and
     use it to limit [lookaside memory] misuse by [FTS3], [FTS5], and the
     [R-Tree extension].
<li> Added the [PRAGMA secure_delete=FAST] 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 [free-page list] but will be purged from all b-tree pages.
<li> Enhancements to the [command-line shell]:
<ol type='a'>
<li> Add support for tab-completion using the [COMPLETION extension], for
     both readline and linenoise.
<li> Add the ".cd" command.
<li> Enhance the "[.schema]" command to show the schema of all attached
     databases.
<li> Enhance "[.tables]" so that it shows the schema names for all attached
     if the name is anything other than "main".
<li> The "[.import]" command ignores an initial UTF-8 BOM.
<li> Added the "--newlines" option to the "[.dump]" command to cause U+000a and
     U+000d characters to be output literally rather than escaped using the
     [replace()] 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 [flattening optimization] for a sub-query on the RHS 
     of a LEFT JOIN if that subquery reads data from a [virtual table] as
     doing so prevents the query planner from creating [automatic indexes]
     on the results of the sub-query, which can slow down the query.
</ol>
<li> Add [SQLITE_STMTSTATUS_REPREPARE], [SQLITE_STMTSTATUS_RUN], 
     and [SQLITE_STMTSTATUS_MEMUSED] options for the
     [sqlite3_stmt_status()] interface.
<li> Provide [PRAGMA functions] for
     [PRAGMA integrity_check], [PRAGMA quick_check], and
     [PRAGMA foreign_key_check].
<li> Add the -withoutnulls option to the [TCL interface eval method].
................................................................................
<p><b>Hashes:</b>
<li>SQLITE_SOURCE_ID: "2017-03-28 18:48:43 424a0d380332858ee55bdebc4af3789f74e70a2b3ba1cf29d84b9b4bcf3e2e37"
<li>SHA3-256 for sqlite3.c: cbf322df1f76be57fb3be84f3da1fc71d1d3dfdb7e7c2757fb0ff630b3bc2e5d
}

chng {2017-02-13 (3.17.0)} {
<li>Approximately 25% better performance from the [R-Tree extension].
    <ol type='a'>
    <li> Uses compiler built-ins (ex: __builtin_bswap32() or _byteswap_ulong())
         for byteswapping when available.
    <li> Uses the [sqlite3_blob] 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 [SQLITE_DEFAULT_LOOKASIDE] compile-time option.
<li>Increase the default [lookaside memory allocator|lookaside]
    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.
................................................................................
chng {2016-10-14 (3.15.0)} {
<li> Added support for [row values].
<li> Allow [deterministic SQL functions] in the WHERE clause of a [partial index].
<li> Added the "[modeof|modeof=<i>filename</i>]" URI parameter on the unix VFS
<li> Added support for [SQLITE_DBCONFIG_MAINDBNAME].
<li> Added the ability to [VACUUM] an [ATTACH|ATTACH-ed] database.
<li> Enhancements to the [command-line shell]:
     <ol type='a'>
     <li> Add the ".testcase" and ".check" [dot-commands].
     <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 [fts5vocab] 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 ([sqlite3_prepare_v2()]).
<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
................................................................................
<li>SHA1 for sqlite3.c: 6422c7d69866f5ea3db0968f67ee596e7114544e
}

chng {2013-10-17 (3.8.1)} {
<li>Added the [unlikely()] and [likelihood()] 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 [soft_heap_limit pragma].
<li>Added support for [SQLITE_ENABLE_STAT4]
<li>Added support for "sz=NNN" parameters at the end of 
    [sqlite_stat1 | sqlite_stat1.stat] 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.
................................................................................
    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 [busy_timeout pragma].
<li>Added the [instr()] SQL function.
<li>Added the [SQLITE_FCNTL_BUSYHANDLER] file control, used to allow VFS
    implementations to get access to the busy handler callback.
<li>The xDelete method in the built-in [VFS | VFSes] now return
    SQLITE_IOERR_DELETE_NOENT if the file to be deleted does not exist.
<li>Enhanced support for QNX.
................................................................................
<li>The SQL output resulting from [sqlite3_trace()] is now modified to include
the values of [bound parameters].
<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 [ifnull()] and [coalesce()] 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 [substr()] 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 [fts3 | FTS3 documentation] is now available.
<li>The [SQLITE_SECURE_DELETE] compile-time option fixed to make sure that
content is deleted even when the [truncate optimization] applies.
<li>Improvements to "dot-command" handling in the
[Command Line Interface].
<li>Other minor bug fixes and documentation enhancements.
................................................................................
    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
    [http://www.icu-project.org/ | International Components for Unicode (ICU)]
    to the full-text search extensions.
</ol><p>
<ul type="circle">
<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
    [sqlite3_column_blob()]
................................................................................
<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
................................................................................
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>
................................................................................
  foreach {date desc options} $aChng($i) break
  if {[regexp {\(([0-9.]+)\)} $date all vers]} {
    set label [string map {. _} $vers]
    hd_fragment version_$label
  }
  hd_puts "<h3>$date</h3>"
  regsub -all {\yROOT/} $desc {} d2
  hd_resolve "<p><ol class='lessindent'>$d2\n"
  foreach {key value} $options {
    if {$key=="backport"} {
      if {[info exists xrefChng($value)]} {set value $xrefChng($value)}
      set c2 $aChng([expr {$i+$value}])
      regexp {([-0-9]+) \((3\.\d+[.0-9]+)[ a-zA-Z]*\)} [lindex $c2 0] all xdate xvers
      set d2 [lindex $c2 1]
      regsub {(<p>[^\n]*\n)?<li>SQLITE_SOURCE_ID.*$} $d2 {} d2
      hd_resolve "<p><b>Bug fixes backported into patch release $xvers ($xdate):</b></p>\n"
      hd_resolve "$d2\n"
    }
  }
  hd_resolve "</ol></p>\n"
  if {[regexp {([-0-9]+) \((3\.\d+[.0-9]+)[ a-zA-Z]*\)} $date all dateonly vers]} {
    set tag [string trim [string map {. _} $vers]]
    file mkdir $DEST/releaselog
    set filename releaselog/$tag.html
    hd_open_aux $filename
    if {[string match *-00* $dateonly]} {
      set hdr "SQLite Release $vers (Pending)"
................................................................................
    hd_enable_main 0
    hd_puts "<h2>$hdr</h2>"
    regsub -all {<a href="(?!http:)} $desc {<a href="../} desc
    foreach {key value} $options {
      if {$key=="inadditionto"} {
        set d2 [lindex $aChng([expr {$i+$value}]) 1]
        regsub {(<p>[^\n]*\n)?<li>SQLITE_SOURCE_ID.*$} $d2 {} d2
        hd_resolve "<p><ol class='lessindent'>$d2</ol></p>"
      }
    }
    regsub -all {\yROOT/\y} $desc {../} d2
    hd_resolve "<p><ol class='lessindent'>$d2\n"
    foreach {key value} $options {
      if {$key=="patchagainst"} {
        if {[info exists xrefChng($value)]} {set value $xrefChng($value)}
        set c2 $aChng([expr {$i+$value}])
        regexp {([-0-9]+) \((3\.\d+[.0-9]+)[ a-zA-Z]*\)} [lindex $c2 0] all date vers
        set d2 [lindex $c2 1]
        regsub -all {\yROOT/} $d2 {../} d2
        regsub {(<p>[^\n]*\n)?<li>SQLITE_SOURCE_ID.*$} $d2 {} d2
        hd_resolve "</ol></p>\n"
        hd_resolve "<p><b>Changes carried forward from version $vers ($date):</b></p>\n"
        hd_resolve "<p><ol class='lessindent'>$d2\n"
      }
      if {$key=="backport"} {
        if {[info exists xrefChng($value)]} {set value $xrefChng($value)}
        set c2 $aChng([expr {$i+$value}])
        regexp {([-0-9]+) \((3\.\d+\.[.0-9]+)[ a-zA-Z]*\)} [lindex $c2 0] all date vers
        set d2 [lindex $c2 1]
        regsub {(<p>[^\n]*\n)?<li>SQLITE_SOURCE_ID.*$} $d2 {} d2
        hd_resolve "<p><b>Bug fixes backported into patch release $vers ($date):</b></p>\n"
        hd_resolve "$d2\n"
      }
    }
    hd_resolve "</ol></p>\n"
    hd_resolve {
      <p>A [complete list of SQLite releases]
      in a single page and a [chronology] are both also available.  
      A detailed history of every
      check-in is available at
      <a href="http://www.sqlite.org/src/timeline">
      SQLite version control site</a>.</p>