Documentation Source Text

Check-in [a7856e4125]
Login

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

Overview
Comment:Add a description of NULLS FIRST and NULLS LAST. Add a note about the addition of sqlite3_drop_modules().
Timelines: family | ancestors | descendants | both | trunk
Files: files | file ages | folders
SHA3-256: a7856e4125c57d75eb8e6c957734f05c87affeb50f7281bc959333dba2bb73bc
User & Date: drh 2019-08-29 17:19:33
Context
2019-09-04
15:18
Update the speed-and-size spreadsheet with the latest figures. check-in: 33e05d1299 user: drh tags: trunk
2019-08-29
17:19
Add a description of NULLS FIRST and NULLS LAST. Add a note about the addition of sqlite3_drop_modules(). check-in: a7856e4125 user: drh tags: trunk
2019-08-15
23:05
Mention new defensive capabilities in the security.html page. check-in: b714ca6b96 user: drh tags: trunk
Changes
Hide Diffs Unified Diffs Ignore Whitespace Patch

Changes to art/syntax/bubble-generator-data.tcl.

468
469
470
471
472
473
474

475
476
477
478
479
480
481
     or
        {line ON expr}
        {line USING ( {loop /column-name ,} )}
        nil
  }
  ordering-term {
      line expr {opt COLLATE /collation-name} {or nil ASC DESC} 

  }
  compound-operator {
     or UNION {line UNION ALL} INTERSECT EXCEPT
  }
  update-stmt {
     rightstack
        {line {opt with-clause} UPDATE {or {} {line OR ROLLBACK}







>







468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
     or
        {line ON expr}
        {line USING ( {loop /column-name ,} )}
        nil
  }
  ordering-term {
      line expr {opt COLLATE /collation-name} {or nil ASC DESC} 
                {or nil {line NULLS FIRST} {line NULLS LAST}}
  }
  compound-operator {
     or UNION {line UNION ALL} INTERSECT EXCEPT
  }
  update-stmt {
     rightstack
        {line {opt with-clause} UPDATE {or {} {line OR ROLLBACK}

Changes to art/syntax/ordering-term.gif.

cannot compute difference between binary files

Changes to pages/changes.in.

19
20
21
22
23
24
25

26
27
28



29
30
31
32
33
34
35
  set aChng($nChng) [list $date $desc $options]
  set xrefChng($date) $nChng
  incr nChng
}

chng {2019-10-00 (3.30.0)} {
<li> Add support for the [FILTER clause on aggregate functions].

<li> The [index_info] and [index_xinfo] pragmas are enhanced to provide
     information about the on-disk representation of [WITHOUT ROWID]
     tables.



<li> Improvements to the [.recover dot-command] in the [CLI] so that
     it recovers more content from corrupt database files.
<li> Enhance the [RBU] extension to support [indexes on expressions].
<li> Change the schema parser so that it will error out if any of
     the type, name, and tbl_name columns of the [sqlite_master table]
     have been corrupted and the database connection is not in
     [writable_schema] mode.







>



>
>
>







19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
  set aChng($nChng) [list $date $desc $options]
  set xrefChng($date) $nChng
  incr nChng
}

chng {2019-10-00 (3.30.0)} {
<li> Add support for the [FILTER clause on aggregate functions].
<li> Add support for the [NULLS FIRST] and [NULLS LAST] syntax in [ORDER BY] clauses.
<li> The [index_info] and [index_xinfo] pragmas are enhanced to provide
     information about the on-disk representation of [WITHOUT ROWID]
     tables.
<li> Add the [sqlite3_drop_modules()] interface, allowing applications
     to disable automatically loaded virtual tables that they do not
     need.
<li> Improvements to the [.recover dot-command] in the [CLI] so that
     it recovers more content from corrupt database files.
<li> Enhance the [RBU] extension to support [indexes on expressions].
<li> Change the schema parser so that it will error out if any of
     the type, name, and tbl_name columns of the [sqlite_master table]
     have been corrupted and the database connection is not in
     [writable_schema] mode.

Changes to pages/datatype3.in.

396
397
398
399
400
401
402

403
404
405
406
407
408
409
<tcl>hd_fragment comparisons {comparison expressions}</tcl>
<h1>Comparison Expressions</h1>

<p>SQLite version 3 has the usual set of SQL comparison operators
including "=", "==", "&lt;", "&lt;=", "&gt;", "&gt;=", "!=", "<>",
"IN", "NOT IN", "BETWEEN", "IS", and "IS NOT", .


<h2>Sort Order</h2>

<p>The results of a comparison depend on the storage classes of the
operands, according to the following rules:</p>
<ul>
  <li><p>^A value with storage class NULL is considered less than any
  other value (including another value with storage class NULL).</p>







>







396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
<tcl>hd_fragment comparisons {comparison expressions}</tcl>
<h1>Comparison Expressions</h1>

<p>SQLite version 3 has the usual set of SQL comparison operators
including "=", "==", "&lt;", "&lt;=", "&gt;", "&gt;=", "!=", "<>",
"IN", "NOT IN", "BETWEEN", "IS", and "IS NOT", .

<tcl>hd_fragment sortorder {sort order}</tcl>
<h2>Sort Order</h2>

<p>The results of a comparison depend on the storage classes of the
operands, according to the following rules:</p>
<ul>
  <li><p>^A value with storage class NULL is considered less than any
  other value (including another value with storage class NULL).</p>

Changes to pages/lang.in.

938
939
940
941
942
943
944





945
946
947
948
949
950
951
....
4830
4831
4832
4833
4834
4835
4836






4837
4838
4839
4840
4841
4842
4843
and later are able to understand
the descending index format. For compatibility, version of SQLite between 3.3.0
and 3.7.9 use the legacy schema format by default.  The newer schema format is
used by default in version 3.7.10 ([dateof:3.7.10]) and later.
^The [legacy_file_format pragma] can be used to change set the specific
behavior for any version of SQLite.</p>






<tcl>hd_fragment collidx {COLLATE}</tcl>
<p>^The COLLATE clause optionally following each column name
or expression defines a
collating sequence used for text entries in that column.
^The default collating
sequence is the collating sequence defined for that column in the
[CREATE TABLE] statement.  ^Or if no collating sequence is otherwise defined,
................................................................................
evaluating the left-most expression in the ORDER BY list, then ties are broken
by evaluating the second left-most expression and so on. The order in which
two rows for which all ORDER BY expressions evaluate to equal values are
returned is undefined. ^Each ORDER BY expression may be optionally followed
by one of the keywords ASC (smaller values are returned first) or DESC (larger
values are returned first). ^If neither ASC or DESC are specified, rows
are sorted in ascending (smaller values first) order by default.







<p>Each ORDER BY expression is processed as follows:</p>

<ol>
<li><p>^If the ORDER BY expression is a constant integer K then the
expression is considered an alias for the K-th column of the result set
(columns are numbered from left to right starting with 1).







>
>
>
>
>







 







>
>
>
>
>
>







938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
....
4835
4836
4837
4838
4839
4840
4841
4842
4843
4844
4845
4846
4847
4848
4849
4850
4851
4852
4853
4854
and later are able to understand
the descending index format. For compatibility, version of SQLite between 3.3.0
and 3.7.9 use the legacy schema format by default.  The newer schema format is
used by default in version 3.7.10 ([dateof:3.7.10]) and later.
^The [legacy_file_format pragma] can be used to change set the specific
behavior for any version of SQLite.</p>

<p>The NULLS FIRST and NULLS LAST predicates are not supported
for indexes.  For [sort order|sorting purposes], SQLite considers NULL values 
to be smaller than all other values.  Hences NULL values always appear at
the beginning of an ASC index and at the end of a DESC index.</p>

<tcl>hd_fragment collidx {COLLATE}</tcl>
<p>^The COLLATE clause optionally following each column name
or expression defines a
collating sequence used for text entries in that column.
^The default collating
sequence is the collating sequence defined for that column in the
[CREATE TABLE] statement.  ^Or if no collating sequence is otherwise defined,
................................................................................
evaluating the left-most expression in the ORDER BY list, then ties are broken
by evaluating the second left-most expression and so on. The order in which
two rows for which all ORDER BY expressions evaluate to equal values are
returned is undefined. ^Each ORDER BY expression may be optionally followed
by one of the keywords ASC (smaller values are returned first) or DESC (larger
values are returned first). ^If neither ASC or DESC are specified, rows
are sorted in ascending (smaller values first) order by default.

<tcl>hd_fragment nullslast {NULLS FIRST} {NULLS LAST}</tcl>
<p>SQLite considers NULL values to be smaller than any other values
for sorting purposes.  Hence, NULLs naturally appear at the beginning
of an ASC order-by and at the end of a DESC order-by.  This can be changed
using the "ASC NULLS LAST" or "DESC NULLS FIRST" syntax.

<p>Each ORDER BY expression is processed as follows:</p>

<ol>
<li><p>^If the ORDER BY expression is a constant integer K then the
expression is considered an alias for the K-th column of the result set
(columns are numbered from left to right starting with 1).