Documentation Source Text

Check-in [ca4b03a1f2]
Login

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

Overview
Comment:Add news for the 3.8.1 release. Other final documentation tweaks prior to release.
Downloads: Tarball | ZIP archive
Timelines: family | ancestors | descendants | both | trunk
Files: files | file ages | folders
SHA1: ca4b03a1f2548d08995b1536b3af195419cffde0
User & Date: drh 2013-10-17 12:54:29.421
Context
2013-10-17
13:52
Add the SQLITE_SOURCE_ID and sha1sum of sqlite3.c for 3.8.1 to changes.in. (check-in: 7532f00f57 user: dan tags: trunk)
12:54
Add news for the 3.8.1 release. Other final documentation tweaks prior to release. (check-in: ca4b03a1f2 user: drh tags: trunk)
2013-10-16
23:58
Fix typos in documentation. (check-in: df95e4e1ec user: drh tags: trunk)
Changes
Unified Diff Ignore Whitespace Patch
Changes to pages/changes.in.
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
set nChng 0
proc chng {date desc {options {}}} {
  global nChng aChng
  set aChng($nChng) [list $date $desc $options]
  incr nChng
}

chng {2013-10-18 (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.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.
<li>Added the [SQLITE_MINIMUM_FILE_DESCRIPTOR] compile-time option
<li>Added the win32-longpath VFS on windows, permitting filenames up to 32K
    characters in length.
<li>The [Date And Time Functions] are enhanced so that the current time







|











|
>







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

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.
<li>Added the [SQLITE_MINIMUM_FILE_DESCRIPTOR] compile-time option
<li>Added the win32-longpath VFS on windows, permitting filenames up to 32K
    characters in length.
<li>The [Date And Time Functions] are enhanced so that the current time
49
50
51
52
53
54
55

56
57
58
59
60
61
62
<li>The sqlite3_analyzer utility program is updated to provide better descriptions
    and to compute a more accurate estimate for "Non-sequential pages"
<li>Refactor the implementation of PRAGMA statements to improve parsing performance.
<li>The directory used to hold temporary files on unix can now be set using
    the SQLITE_TMPDIR environment variable,  which takes precedence over the
    TMPDIR environment variable.  The [sqlite3_temp_directory] global variable
    still has higher precedence than both environment variables, however.

<li><b>Bug fix:</b> Return the correct answer for "SELECT count(*) FROM table" even if
    there is a [partial index] on the table. Ticket
    [http://www.sqlite.org/src/info/a5c8ed66ca|a5c8ed66ca].
}

chng {2013-09-03 (3.8.0.2)} {
<li>Fix a bug in the optimization that attempts to omit unused LEFT JOINs







>







50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
<li>The sqlite3_analyzer utility program is updated to provide better descriptions
    and to compute a more accurate estimate for "Non-sequential pages"
<li>Refactor the implementation of PRAGMA statements to improve parsing performance.
<li>The directory used to hold temporary files on unix can now be set using
    the SQLITE_TMPDIR environment variable,  which takes precedence over the
    TMPDIR environment variable.  The [sqlite3_temp_directory] global variable
    still has higher precedence than both environment variables, however.
<li>Added the [PRAGMA stats] statement.
<li><b>Bug fix:</b> Return the correct answer for "SELECT count(*) FROM table" even if
    there is a [partial index] on the table. Ticket
    [http://www.sqlite.org/src/info/a5c8ed66ca|a5c8ed66ca].
}

chng {2013-09-03 (3.8.0.2)} {
<li>Fix a bug in the optimization that attempts to omit unused LEFT JOINs
Changes to pages/compile.in.
603
604
605
606
607
608
609
610


611
612
613
614
615
616
617
618
619
620



621
622
623
624
625
626
627

COMPILE_OPTION {SQLITE_ENABLE_STAT3} {
  This option adds additional logic to the [ANALYZE] command and to
  the [query planner] that can help SQLite to chose a better query plan
  under certain situations.  The [ANALYZE] command is enhanced to collect
  histogram data from the left-most column of each index and store that data
  in the [sqlite_stat3] table.  The query planner will then use the
  histogram data to help it make better index choices.


  <p>
}

COMPILE_OPTION {SQLITE_ENABLE_STAT4} {
  This option adds additional logic to the [ANALYZE] command and to
  the [query planner] that can help SQLite to chose a better query plan
  under certain situations.  The [ANALYZE] command is enhanced to collect
  histogram data from all columns of every index and store that data
  in the [sqlite_stat4] table.  The query planner will then use the
  histogram data to help it make better index choices.



  <p>
  SQLITE_ENABLE_STAT4 is an enhancement of [SQLITE_ENABLE_STAT3].  STAT3
  only recorded histogram data for the left-most column of each index
  whereas the STAT4 enhancement records histograph data from all columns
  of each index.
  The [SQLITE_ENABLE_STAT3] compile-time option is a no-op and is ignored
  if the SQLITE_ENABLE_STAT4 compile-time option is used.







|
>
>









|
>
>
>







603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632

COMPILE_OPTION {SQLITE_ENABLE_STAT3} {
  This option adds additional logic to the [ANALYZE] command and to
  the [query planner] that can help SQLite to chose a better query plan
  under certain situations.  The [ANALYZE] command is enhanced to collect
  histogram data from the left-most column of each index and store that data
  in the [sqlite_stat3] table.  The query planner will then use the
  histogram data to help it make better index choices.  Note, however,
  that the use of histogram data in query planner violates the
  [query planner stability guarantee] which is important to some applications.
  <p>
}

COMPILE_OPTION {SQLITE_ENABLE_STAT4} {
  This option adds additional logic to the [ANALYZE] command and to
  the [query planner] that can help SQLite to chose a better query plan
  under certain situations.  The [ANALYZE] command is enhanced to collect
  histogram data from all columns of every index and store that data
  in the [sqlite_stat4] table.  The query planner will then use the
  histogram data to help it make better index choices.  The downside of
  this compile-time option is that it violates the
  [query planner stability guarantee] making it more difficult to ensure
  consistent performance is mass-produced applications.
  <p>
  SQLITE_ENABLE_STAT4 is an enhancement of [SQLITE_ENABLE_STAT3].  STAT3
  only recorded histogram data for the left-most column of each index
  whereas the STAT4 enhancement records histograph data from all columns
  of each index.
  The [SQLITE_ENABLE_STAT3] compile-time option is a no-op and is ignored
  if the SQLITE_ENABLE_STAT4 compile-time option is used.
Changes to pages/fileformat2.in.
1183
1184
1185
1186
1187
1188
1189
1190
1191
1192
1193
1194
1195









1196
1197
1198
1199
1200
1201
1202
integer is the approximate average number of rows in the index that have 
the same value for the first two columns.  The N-th integer (for N>1) 
is the approximate average number of rows in 
the index which have the same value for the first N-1 columns.  For
a K-column index, there will be K+1 integers in the stat column.  If
the index is unique, then the last integer will be 1.

<p>The list of integers in the stat column can optionally be followed
by the keyword "unordered".  The "unordered" keyword, if it is present,
must be separated from the last integer by a single space.  If the
"unordered" keyword is present, then the query planner assumes that
the index is unordered and will not use the index for a range query
or for sorting.










<p>If the sqlite_stat1.idx column is NULL, then the sqlite_stat1.stat
column contains a single integer which is the approximate number of
rows in the table identified by sqlite_stat1.tbl.

<tcl>hd_fragment stat2tab {sqlite_stat2}</tcl>
<h4>2.5.4 The sqlite_stat2 table</h4>







|
|
|



>
>
>
>
>
>
>
>
>







1183
1184
1185
1186
1187
1188
1189
1190
1191
1192
1193
1194
1195
1196
1197
1198
1199
1200
1201
1202
1203
1204
1205
1206
1207
1208
1209
1210
1211
integer is the approximate average number of rows in the index that have 
the same value for the first two columns.  The N-th integer (for N>1) 
is the approximate average number of rows in 
the index which have the same value for the first N-1 columns.  For
a K-column index, there will be K+1 integers in the stat column.  If
the index is unique, then the last integer will be 1.

<p>^The list of integers in the stat column can optionally be followed
by the keyword "unordered".  ^The "unordered" keyword, if it is present,
must be separated from the last integer by a single space.  ^If the
"unordered" keyword is present, then the query planner assumes that
the index is unordered and will not use the index for a range query
or for sorting.

<p>^The list of integers in the stat column can also optionally be followed
by a token of the form "sz=NNN" where NNN is an unsigned integer.  The
"sz=NNN" token, if present, must be separated from the last integer by a
single space.  ^The "sz=NNN" token means that the average row size over all 
records of the table or
index is NNN bytes per row.  ^The SQLite query planner might use the
estimated row size information provided by the "sz=NNN" token
to help it choose smaller tables and indices that require less disk I/O.

<p>If the sqlite_stat1.idx column is NULL, then the sqlite_stat1.stat
column contains a single integer which is the approximate number of
rows in the table identified by sqlite_stat1.tbl.

<tcl>hd_fragment stat2tab {sqlite_stat2}</tcl>
<h4>2.5.4 The sqlite_stat2 table</h4>
Changes to pages/news.in.
15
16
17
18
19
20
21










































22
23
24
25
26
27
28
29
  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 {2013-03-03} {Release 3.8.0.2} {
  <p>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} {
  <p>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.







>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
|







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
  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 {2013-10-17} {Release 3.8.1} {
  <p>SQLite [version 3.8.1] is a regularly scheduled maintenance release.
  Upgrading from the previous release is optional, though you should upgrade
  if you are using [partial indices] as there was a 
  [http://www.sqlite.org/src/info/a5c8ed66ca|bug] related to partial
  indices in the previous release that could result in an incorrect answer
  for count(*) queries.

  <p>The [next generation query planner] that was premiered in the previous
  release continues to work well.  
  The new query planner has been tweaked slightly
  in the current release to help it make better decisions in some
  cases, but is largely unchanged.  Two new SQL functions, [likelihood()] and
  [unlikely()], have been added to allow developers to give hints to the
  query planner without forcing the query planner into a particular decision.

  <p>Version 3.8.1 is the first SQLite release to take into account the
  estimated size of table and index rows when choosing a query plan.
  Row size estimates are based on the declared datatypes of columns.
  For example, a column of type VARCHAR(1000) is assumed
  to use much more space than a column of type INT.  The datatype-based
  row size estimate can be
  overridden by appending a term of the form "sz=NNN" (where NNN is the
  average row size in bytes) to the end of the [sqlite_stat1|sqlite_stat1.stat]
  record for a table or index.  Currently, row sizes are only used to help the
  query planner choose between a table or one of its indices when doing a
  table scan or a count(*) operation, though future releases are likely
  to use the estimated row size in other contexts as well.  The new
  [PRAGMA stats] statement can be used to view row size estimates.

  <p>Version 3.8.1 adds the [SQLITE_ENABLE_STAT4] compile-time option.
  STAT4 is very similar to STAT3 in that it uses samples from indices to 
  try to guess how many rows of the index will be satisfy by WHERE clause
  constraints.  The difference is that STAT4 samples all columns of the
  index whereas the older STAT3 only sampled the left-most column.  Users
  of STAT3 are encouraged to upgrade to STAT4.  Application developers should
  use STAT3 and STAT4 with caution since both options, by design, violate 
  the [query planner stability guarantee], making it more difficult to ensure
  uniform performance is widely-deployed and mass-produced embedded
  applications.
}

newsitem {2013-09-03} {Release 3.8.0.2} {
  <p>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} {
  <p>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.
Changes to pages/pragma.in.
1127
1128
1129
1130
1131
1132
1133
1134
1135


1136
1137
1138
1139
1140
1141
1142
1143
}

Pragma stats {
    <p>^(<b>PRAGMA stats;</b>)^ </p>
    <p>This pragma returns auxiliary information about tables and
    indices.  The returned information is used during testing to help
    verify that the query planner is operating correctly.  The format
    and meaning of this pragma will likely change from one point release
    to the next. Because of its volatility, applications should avoid


    using this pragma.</p>
}

Pragma page_count {
    <p>^(<b>PRAGMA page_count;</b></p>
    <p>Return the total number of pages in the database file.</p>)^
}








|
|
>
>
|







1127
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143
1144
1145
}

Pragma stats {
    <p>^(<b>PRAGMA stats;</b>)^ </p>
    <p>This pragma returns auxiliary information about tables and
    indices.  The returned information is used during testing to help
    verify that the query planner is operating correctly.  The format
    and meaning of this pragma will likely change from release
    to the next. Because of its volatility, the behavior and output
    format of this pragma are deliberately undocumented.  This pragma is
    intended for interactive, debugging, and testing use only.
    Applications should avoid using this pragma.</p>
}

Pragma page_count {
    <p>^(<b>PRAGMA page_count;</b></p>
    <p>Return the total number of pages in the database file.</p>)^
}