Documentation Source Text

Check-in [a74a421c12]
Login

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

Overview
Comment:Begin adding a change log for version 3.26.0.
Downloads: Tarball | ZIP archive
Timelines: family | ancestors | descendants | both | trunk
Files: files | file ages | folders
SHA3-256: a74a421c1218f1634b4ceabdb3a8a9e5285bc5d1e624a3b91df8a59506a00426
User & Date: drh 2018-11-12 13:39:21.584
Context
2018-11-12
15:24
Enhancements to the documentation regarding security and shadow tables. (check-in: 7b6b7a791b user: drh tags: trunk)
13:39
Begin adding a change log for version 3.26.0. (check-in: a74a421c12 user: drh tags: trunk)
2018-11-07
20:07
Merge changes from the 3.25 branch. (check-in: 3b8a91bbce user: drh tags: trunk)
Changes
Unified Diff Ignore Whitespace Patch
Changes to pages/changes.in.
16
17
18
19
20
21
22

















































23
24
25
26
27
28
29
set nChng 0
proc chng {date desc {options {}}} {
  global nChng aChng xrefChng
  set aChng($nChng) [list $date $desc $options]
  set xrefChng($date) $nChng
  incr nChng
}


















































chng {2018-11-05 (3.25.3)} {
<li> Disallow the use of [window functions] in the recursive part of
     a CTE. Ticket [https://sqlite.org/src/info/e8275b415a2f03bee|e8275b415a2f03bee]
<li> Fix the behavior of typeof() and length() on virtual tables.  Ticket
     [https://sqlite.org/src/info/69d642332d25aa3b7315a6d385|69d642332d25aa3b7315a6d385]
<li> Strengthen defenses against deliberately corrupted database files.







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







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

chng {2018-12-00 (3.26.0)} {
<li>Optimization: when doing an UPDATE on a table with [indexes on expressions],
    do not update the expression indexes if they do not refer to any of the columns
    of the table being updated.
<li>Added the [SQLITE_DBCONFIG_DEFENSIVE] option which disables the ability to 
    create corrupt database files using ordinary SQL.
<li>Added support for read-only [shadow tables] when the [SQLITE_DBCONFIG_DEFENSIVE]
    option is enabled.
<li>Added the [PRAGMA legacy_alter_table] command, which if enabled causes the
    [ALTER TABLE] command to behave like older version of SQLite (prior to
    version 3.25.0) for compatibility.
<li>Added [PRAGMA table_xinfo] that works just like [PRAGMA table_info]
    except thta is also shows hidden columns in virtual tables.
<li>Added the [https://sqlite.org/src/file/ext/misc/explain.c|explain virtual table]
    as a run-time loadable extension.
<li>Add a limit counter to the query planner to prevent excessive
    [sqlite3_prepare()] times for certain pathological SQL inputs.
<li>Added support for the [sqlite3_normalized_sql()] interface, when compiling
    with SQLITE_ENABLE_NORMALIZE.
<li>Enhanced triggers so that they can use [table-valued functions] that
    exist in schemas other than the schema where the trigger is defined.
<li>Enhancements to the [CLI]:
<ol type="a">
<li>Improvements to the ".help" command.
<li>The SQLITE_HISTORY environment variable, if it exists,
    specifies the name of the command-line editing history file
<li>The --deserialize option associated with opening a new database cause the
    database file to be read into memory and accessed using the
    [sqlite3_deserialize()] API. This simplifies running tests on a database
    without modifying the file on disk.
</ol>
<li>Enhancements to the [geopoly] extension:
<ol type="a">
<li>Aways stores polygons
    using the binary format, which is faster and uses less space.
<li>Added the [geopoly_regular()] function.
<li>Added the [geopoly_ccw()] function.
</ol>
<li>Enhancements to the [session] extension:
<ol type="a">
<li>Added the [SQLITE_CHANGESETAPPLY_INVERT] flag
<li>Added the [sqlite3changeset_start_v2()] interface and the
    [SQLITE_CHANGESETSTART_INVERT] flag.
<li>Added the 
    [https://sqlite.org/src/file/ext/session/changesetfuzz.c|changesetfuzz.c]
    test-case generator utility.
</ol>
}

chng {2018-11-05 (3.25.3)} {
<li> Disallow the use of [window functions] in the recursive part of
     a CTE. Ticket [https://sqlite.org/src/info/e8275b415a2f03bee|e8275b415a2f03bee]
<li> Fix the behavior of typeof() and length() on virtual tables.  Ticket
     [https://sqlite.org/src/info/69d642332d25aa3b7315a6d385|69d642332d25aa3b7315a6d385]
<li> Strengthen defenses against deliberately corrupted database files.
Changes to pages/chronology.in.
24
25
26
27
28
29
30

31
32
33
34
35
36
37
#    ORDER BY mtime DESC;
#
# A small amount of manual editing and de-duplication followed.
#
# Manually edit the list for each subsequent release.
#      
foreach line [split {

89e099fbe5|2018-11-05|Version 3.25.3
fb90e7189a|2018-09-25|Version 3.25.2
2ac9003de4|2018-09-18|Version 3.25.1
b63af6c3bd|2018-09-15|Version 3.25.0
c7ee083322|2018-06-04|Version 3.24.0
4bb2294022|2018-04-10|Version 3.23.1
736b53f57f|2018-04-02|Version 3.23.0







>







24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
#    ORDER BY mtime DESC;
#
# A small amount of manual editing and de-duplication followed.
#
# Manually edit the list for each subsequent release.
#      
foreach line [split {
xxxxxxxxxx|pending|Version 3.26.0
89e099fbe5|2018-11-05|Version 3.25.3
fb90e7189a|2018-09-25|Version 3.25.2
2ac9003de4|2018-09-18|Version 3.25.1
b63af6c3bd|2018-09-15|Version 3.25.0
c7ee083322|2018-06-04|Version 3.24.0
4bb2294022|2018-04-10|Version 3.23.1
736b53f57f|2018-04-02|Version 3.23.0
Changes to pages/geopoly.in.
328
329
330
331
332
333
334















335
336
337
338
339
340
341
SELECT
   geopoly_svg(geopoly_regular(x,y,40,n),
        printf('style="fill:none;stroke:%s;stroke-width:2"',color))
   || printf(' &lt;text x="%d" y="%d" alignment-baseline="central" text-anchor="middle">%d&lt;/text>',x,y+6,n)
  FROM t1;
SELECT '&lt;/svg>';
</codeblock>

















<h1>Implementation Details</h1>

<p>The geopoly module is an extension to the [R-Tree extension].  Geopoly
uses the same underlying logic and shadow tables as the [R-Tree extension].
Geopoly merely presents a different interface, and provides some extra logic







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







328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
SELECT
   geopoly_svg(geopoly_regular(x,y,40,n),
        printf('style="fill:none;stroke:%s;stroke-width:2"',color))
   || printf(' &lt;text x="%d" y="%d" alignment-baseline="central" text-anchor="middle">%d&lt;/text>',x,y+6,n)
  FROM t1;
SELECT '&lt;/svg>';
</codeblock>

<tcl>hd_fragment regpoly geopoly_ccw</tcl>
<h2>The geopoly_ccw(J) Function</h2>

<p>The geopoly_ccw(J) function returns the polygon J with counter-clockwise (CCW) rotation.

<p>
[https://tools.ietf.org/html/rfc7946 | RFC-7946] requires that polygons use CCW rotation.
But the spec also observes that many legacy GeoJSON files do not following the spec and
contain polygons with clockwise (CW) rotation.  The geopoly_ccw() function is useful for
applications that are reading legacy GeoJSON scripts.  If the input to geopoly_ccw() is
a correctly-formatted polygon, then no changes are made.  However, if the circulation of
the input polygon is backwards, then geopoly_ccw() reverses the circulation order so that
it conforms to the spec and so that it will work correctly with the Geopoly module.



<h1>Implementation Details</h1>

<p>The geopoly module is an extension to the [R-Tree extension].  Geopoly
uses the same underlying logic and shadow tables as the [R-Tree extension].
Geopoly merely presents a different interface, and provides some extra logic
Changes to pages/index.in.
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
[full-featured SQL|full-featured], [public-domain],
SQL database engine.
SQLite is the [most used] database engine in the world.
<a class="button" href="about.html">More Info</a></p>

<hr class="xhr">
<span class="hdrfont">Latest Release:&nbsp;&nbsp;</span>
<a href="releaselog/3_25_3.html">Version 3.25.3</a> ([dateof:3.25.3]).
<a class="button" href="download.html">Download</a>
<a class="button" href="chronology.html">Prior Releases</a>

<div class="mobileonly">
<hr class="xhr">
<h3>Common Links</h3>
<tcl>common_links</tcl>







|







10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
[full-featured SQL|full-featured], [public-domain],
SQL database engine.
SQLite is the [most used] database engine in the world.
<a class="button" href="about.html">More Info</a></p>

<hr class="xhr">
<span class="hdrfont">Latest Release:&nbsp;&nbsp;</span>
<a href="releaselog/3_26_0.html">Version 3.26.0</a> ([dateof:3.26.0]).
<a class="button" href="download.html">Download</a>
<a class="button" href="chronology.html">Prior Releases</a>

<div class="mobileonly">
<hr class="xhr">
<h3>Common Links</h3>
<tcl>common_links</tcl>
Changes to pages/pragma.in.
1518
1519
1520
1521
1522
1523
1524









1525
1526
1527
1528
1529
1530
1531
    ^Columns in the result set include the column name,
    data type, whether or not the column can be NULL, and the default
    value for the column.  ^The "pk" column in the result set is zero
    for columns that are not part of the primary key, and is the index of
    the column in the primary key for columns that are part of the primary
    key.</p>
    <p>^The table named in the table_info pragma can also be a view.</p>









}

DangerousPragma {schema_version} {
    <p><b>PRAGMA DB.schema_version; 
      <br>PRAGMA DB.schema_version = </b><i>integer </i>;

<p>   ^The schema_version pragma will to get or set







>
>
>
>
>
>
>
>
>







1518
1519
1520
1521
1522
1523
1524
1525
1526
1527
1528
1529
1530
1531
1532
1533
1534
1535
1536
1537
1538
1539
1540
    ^Columns in the result set include the column name,
    data type, whether or not the column can be NULL, and the default
    value for the column.  ^The "pk" column in the result set is zero
    for columns that are not part of the primary key, and is the index of
    the column in the primary key for columns that are part of the primary
    key.</p>
    <p>^The table named in the table_info pragma can also be a view.</p>
    <p>See also: [PRAGMA table_xinfo]
}

Pragma table_xinfo {
    <p>^(<b>PRAGMA DB.table_xinfo(</b><i>table-name</i><b>);</b></p>
    <p>This pragma returns one row for each column in the named table,
    including [hidden columns] in virtual tables.)^
    ^The output is the same as for [PRAGMA table_info] except that
    hidden columns are shown rather than being omitted.
}

DangerousPragma {schema_version} {
    <p><b>PRAGMA DB.schema_version; 
      <br>PRAGMA DB.schema_version = </b><i>integer </i>;

<p>   ^The schema_version pragma will to get or set