Index: pages/changes.in ================================================================== --- pages/changes.in +++ pages/changes.in @@ -10,44 +10,36 @@ http://www.sqlite.org/src/timeline?t=release

set nChng 0 -proc chng {date desc} { - global DEST nChng - if {[regexp {\(([0-9.]+)\)} $date all vers]} { - set label [string map {. _} $vers] - hd_fragment version_$label - } - hd_puts "

$date

" - hd_resolve "

" - if {[regexp {\((3\.\d+\.[.0-9]+)[ a-zA-Z]*\)} $date all vers]} { - set tag [string trim [string map {. _} $vers]] - file mkdir $DEST/releaselog - set filename releaselog/$tag.html - hd_open_aux $filename - hd_header "SQLite Release $vers On $date" - hd_keywords "Version $vers" "*version $vers" - hd_enable_main 0 - hd_puts "

SQLite Release $vers On $date

" - regsub -all {

" - hd_puts { -

A complete list of SQLite releases - in a single page is also available. A detailed history of every - check-in is available at - - http://www.sqlite.org/src/timeline.

- } - hd_close_aux - hd_enable_main 1 - incr nChng - if {$nChng==1 && [file exists $DEST/$filename]} { - file copy -force $DEST/$filename $DEST/releaselog/current.html - } - } -} +proc chng {date desc {options {}}} { + global nChng aChng + set aChng($nChng) [list $date $desc $options] + incr nChng +} + +chng {2013-09-03 (3.8.0.2)} { +
  • Fix a bug in the optimization that attempts to omit unused LEFT JOINs + +
  • SQLITE_SOURCE_ID: + "2013-09-03 17:11:13 7dd4968f235d6e1ca9547cda9cf3bd570e1609ef" +
  • SHA1 for sqlite3.c: 6cf0c7b46975a87a0dc3fba69c229a7de61b0c21 +} {inadditionto 2 inadditionto 1} + +chng {2013-08-29 (3.8.0.1)} { +
  • Fix an off-by-one error that caused quoted empty string at the end of a +CRNL-terminated line of CSV input to be misread by the command-line shell. +
  • Fix a query planner bug involving a LEFT JOIN with a BETWEEN or LIKE/GLOB +constraint and then another INNER JOIN to the right that involves an OR constraint. +
  • Fix a query planner bug that could result in a segfault when querying tables +with a UNIQUE or PRIMARY KEY constraint with more than four columns. + +
  • SQLITE_SOURCE_ID: + "2013-08-29 17:35:01 352362bc01660edfbda08179d60f09e2038a2f49" +
  • SHA1 for sqlite3.c: 99906bf63e6cef63d6f3d7f8526ac4a70e76559e +} {inadditionto 1} chng {2013-08-26 (3.8.0)} {
  • Add support for [partial indexes]
  • Cut-over to the [next generation query planner] for faster and better query plans.
  • The [EXPLAIN QUERY PLAN] output no longer shows an estimate of the number of @@ -193,11 +185,11 @@ information.
  • SQLITE_SOURCE_ID: "2013-04-12 11:52:43 cbea02d93865ce0e06789db95fd9168ebac970c7"
  • SHA1 for sqlite3.c: d466b54789dff4fb0238b9232e74896deaefab94 -} +} {inadditionto 2 inadditionto 1} chng {2013-03-29 (3.7.16.1)} {
  • Fix for a bug in the ORDER BY optimizer that was introduced in [version 3.7.15] which would sometimes optimize out the sorting step when in fact the sort was required. @@ -215,11 +207,11 @@ now a required component of SQLite.
  • Fixed lots of spelling errors in the source-code comments
  • SQLITE_SOURCE_ID: "2013-03-29 13:44:34 527231bc67285f01fb18d4451b28f61da3c4e39d"
  • SHA1 for sqlite3.c: 7a91ceceac9bcf47ceb8219126276e5518f7ff5a -} +} {inadditionto 1} chng {2013-03-18 (3.7.16)} {
  • Added the [PRAGMA foreign_key_check] command.
  • Added new extended error codes for all SQLITE_CONSTRAINT errors
  • Added the SQLITE_READONLY_ROLLBACK extended error code for when a database @@ -3165,7 +3157,51 @@ } chng {2000-05-29} {
  • Initial Public Release of Alpha code
  • } + +# Generate the change log documents +# +for {set i 0} {$i<$nChng} {incr i} { + 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 "

    $date

    " + hd_resolve "

    " + if {[regexp {\((3\.\d+\.[.0-9]+)[ a-zA-Z]*\)} $date all vers]} { + set tag [string trim [string map {. _} $vers]] + file mkdir $DEST/releaselog + set filename releaselog/$tag.html + hd_open_aux $filename + hd_header "SQLite Release $vers On $date" + hd_keywords "Version $vers" "*version $vers" + hd_enable_main 0 + hd_puts "

    SQLite Release $vers On $date

    " + regsub -all {SQLITE_SOURCE_ID.*$} $d2 {} d2 + hd_resolve "

    " + } + } + hd_resolve "

    " + hd_puts { +

    A complete list of SQLite releases + in a single page is also available. A detailed history of every + check-in is available at + + http://www.sqlite.org/src/timeline.

    + } + hd_close_aux + hd_enable_main 1 + if {$nChng==0 && [file exists $DEST/$filename]} { + file copy -force $DEST/$filename $DEST/releaselog/current.html + } + } +} +
    Index: pages/download.in ================================================================== --- pages/download.in +++ pages/download.in @@ -67,11 +67,11 @@ set frag {} } global href href_cnt incr href_cnt set href(a$href_cnt) $file - hd_puts "[file tail $file]
    ($size $units)\n" + hd_puts "[file tail $file]
    ($size $units)\n" hd_puts "" regsub -all VERSION $desc $version d2 hd_puts "\n" hd_resolve [string trim $d2] hd_puts "
    (sha1: $sha1sum)\n" @@ -98,11 +98,11 @@ Product {snapshot/sqlite-amalgamation-DATE.zip} { This is a snapshot (as of VERSION) of the current SQLite source code under development. See the pending change log or the - timeline + timeline 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} { @@ -265,10 +265,22 @@ Product YEAR/sqlite-winrt-VVV.vsix { A complete VSIX package with an extension SDK and all other components needed to use SQLite for WinRT application development with Visual Studio 2012. } + +Product YEAR/sqlite-winrt80-VVV.vsix { + A complete VSIX package with an extension SDK and all other components + needed to use SQLite for WinRT 8.0 application development with Visual Studio + 2012. +} + +Product YEAR/sqlite-winrt81-VVV.vsix { + A complete VSIX package with an extension SDK and all other components + needed to use SQLite for WinRT 8.1 application development with Visual Studio + 2013. +} if {$nDownload>$start} { hd_puts {Precompiled Binaries for .NET} hd_puts "" hd_puts "" Index: pages/fts3.in ================================================================== --- pages/fts3.in +++ pages/fts3.in @@ -2062,10 +2062,26 @@ case folding according to rules in Unicode Version 6.1 and it recognizes unicode space and punctuation characters and uses those to separate tokens. The simple tokenizer only does case folding of ASCII characters and only recognizes ASCII space and punctuation characters as token separators. +

    + By default, "unicode61" also removes all diacritics from Latin script + characters. This behaviour can be overriden by adding the tokenizer argument + "remove_diacritics=0". For example: + + + -- Create tables that remove diacritics from Latin script characters + -- as part of tokenization. + CREATE VIRTUAL TABLE txt1 USING fts4(tokenize=unicode61); + CREATE VIRTUAL TABLE txt2 USING fts4(tokenize=unicode61 "remove_diacritics=1"); + + -- Create a tables that does not remove diacritics from Latin script + -- characters as part of tokenization. + CREATE VIRTUAL TABLE txt3 USING fts4(tokenize=unicode61 "remove_diacritics=0"); + +

    Custom (User Implemented) Tokenizers

    As well as the built-in "simple", "porter" and (possibly) "icu" and "unicode61" tokenizers, ADDED pages/hp1.in Index: pages/hp1.in ================================================================== --- /dev/null +++ pages/hp1.in @@ -0,0 +1,5 @@ +Javascript Required + +Note: +The hyperlinks on the download page only work if you have Javascript +enabled in your web browser. Index: pages/index.in ================================================================== --- pages/index.in +++ pages/index.in @@ -93,13 +93,13 @@

    Current Status

    Common Links

    Index: pages/news.in ================================================================== --- pages/news.in +++ pages/news.in @@ -16,10 +16,20 @@ regsub -all {[Tt]icket #(\d+)} $txt \ {\0} txt hd_resolve "
    $txt
    " hd_puts "
    " } + +newsitem {2013-09-03} {Release 3.8.0.2} { +

    SQLite [version 3.8.0.2] contains a one-line fix to a bug in the + new optimization that tries to omit unused LEFT JOINs from a query. +} + +newsitem {2013-08-29} {Release 3.8.0.1} { +

    SQLite [version 3.8.0.1] fixes some obscure bugs that were uncovered by + users in the 3.8.0 release. Changes from 3.8.0 are minimal. +} newsitem {2013-08-26} {Release 3.8.0} { Do not fear the zero!

    SQLite [version 3.8.0] might easily have been called "3.7.18" instead. Index: pages/queryplanner-ng.in ================================================================== --- pages/queryplanner-ng.in +++ pages/queryplanner-ng.in @@ -203,11 +203,11 @@

    The problem of finding the best query plan is equivalent to finding a minimum-cost path through the graph that visits each node exactly once.

    (Side note: The costs estimates in the TPC-H Q8 graph were computed -by the query planner in SQLite 3.7.16 and converted using a base-10 logarithm.) +by the query planner in SQLite 3.7.16 and converted using a natural logarithm.)

    3.2 Complications

    The presentation of the query planner problem above is a simplification. @@ -255,11 +255,11 @@ The general case involves a lot of extra complication, which for clarity is neglected in the remainder of this article.

    3.3 Finding The Best Query Plan

    -

    Prior to version 3.8.0, SQLite always used the +

    Prior to version 3.8.0, SQLite always used the "Nearest Neighbor" or "NN" heuristic when searching for the best query plan. The NN heuristic makes a single traversal of the graph, always choosing the lowest-cost arc as the next step. The NN heuristic works surprisingly well in most cases. And NN is fast, so that SQLite is able to quickly find good plans @@ -274,11 +274,11 @@ N1 is in the next inner loop, N2 is in the third loop, and so forth down to P which is in the inner-most loop. The shortest path through the graph (as found via exhaustive search) is P-L-O-C-N1-R-S-N2 with a cost of 27.38. The difference might not seem like much, but remember that -the costs are logarithmic, so the shortest path is nearly 14,000 times +the costs are logarithmic, so the shortest path is nearly 750 times faster than that path found using the NN heuristic.

    One solution to this problem is to change SQLite to do an exhaustive search for the best path. But an exhaustive search requires time proportional to @@ -562,11 +562,11 @@

    In the "without ANALYZE" case on the left, the NN algorithm chooses loop P (PLINK) as the outer loop because 4.9 is less than 5.2, resulting -in path P-T which is algorithm-1. NN only looks a the single best choice +in path P-T which is algorithm-1. NN only looks at the single best choice at each step so it completely misses the fact that 5.2+4.4 makes a slightly cheaper plan than 4.9+4.8. But the N3 algorithm keeps track of the 5 best paths for a 2-way join, so it ends up selecting path T-P because of its slightly lower overall cost. Path T-P is algorithm-2. @@ -588,11 +588,11 @@

    4.2 Fixing The Problem

    Running [ANALYZE] on the repository database immediately fixed the performance problem. However, we want Fossil to be robust and to always work quickly regardless of whether or not its repository has been analyzed. -For this reason, the query was modify to use the CROSS JOIN operator +For this reason, the query was modified to use the CROSS JOIN operator instead of the plain JOIN operator. SQLite will not reorder the tables of a CROSS JOIN. This is a long-standing feature of SQLite that is specifically designed to allow knowledgeable programmers to enforce a particular loop nesting order. Once the join