Documentation Source Text

Check-in [097d5fec34]
Login

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

Overview
Comment:Pull in all the changes on the 3.25 branch.
Downloads: Tarball | ZIP archive
Timelines: family | ancestors | descendants | both | trunk
Files: files | file ages | folders
SHA3-256: 097d5fec34fb39d4be121af9fb9d90b2832b9fd79635caf2ad55c97200be9483
User & Date: drh 2018-10-24 11:37:10.076
Context
2018-10-25
20:19
Merge changes from the 3.25 branch. (check-in: efd5b055b2 user: drh tags: trunk)
2018-10-24
11:37
Pull in all the changes on the 3.25 branch. (check-in: 097d5fec34 user: drh tags: trunk)
2018-10-23
20:20
Omit the sponsor links from the homepage. (check-in: 62248cde6a user: drh tags: branch-3.25)
2018-10-22
16:07
Update RBU documentation to include REPLACE command rows. (check-in: a9594020c6 user: dan tags: trunk)
Changes
Unified Diff Ignore Whitespace Patch
Changes to pages/codeofconduct.in.
10
11
12
13
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
42
43
44
45
46
and with the larger SQLite user community in
accordance with the "instruments of good works" from chapter 4 of
[https://en.wikipedia.org/wiki/Rule_of_Saint_Benedict|The Rule of St. Benedict].
This code of conduct has proven its mettle in thousands of diverse
communities for over 1,500 years, and has served as a baseline for many
civil law codes since the time of Charlemagne.

<p>
This rule is strict, and none are able to comply perfectly.
Grace is readily granted for minor transgressions.
All are encouraged to follow this rule closely, as in so
doing they may expect to live happier, healthier, and more
productive lives.  The entire rule is good and wholesome, and
yet we make no enforcement of the more introspective aspects.

<p>

Everyone is free to use the SQLite source code, object code,
and/or documentation regardless of their opinion of and adherence
to this rule.
SQLite has been and continues to be completely free to everyone,
without precondition.


















<p>



However, those who wish to participate in the SQLite community,

either by commenting on the public mailing lists or by contributing
patches or suggestions or in any other way,






are expected to conduct themselves in a manner
that honors the overarching spirit of the rule, even if they



disagree with specific details.



Polite and professional discussion is always welcomed, from anyone.

<h1>The Rule</h1>

<ol>
<li> First of all, love the Lord God with your whole heart,
     your whole soul, and your whole strength.
<li> Then, love your neighbor as yourself.







<
<
<
<
<
<
|


>






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

>
>
>
|
>
|
<
>
>
>
>
>
>
|
|
>
>
>
|
>
>
>
|







10
11
12
13
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
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
and with the larger SQLite user community in
accordance with the "instruments of good works" from chapter 4 of
[https://en.wikipedia.org/wiki/Rule_of_Saint_Benedict|The Rule of St. Benedict].
This code of conduct has proven its mettle in thousands of diverse
communities for over 1,500 years, and has served as a baseline for many
civil law codes since the time of Charlemagne.







<h2>Users of the SQLite Code</h2>

<p>
This rule applies to SQLite developers, not to users of the SQLite code.
Everyone is free to use the SQLite source code, object code,
and/or documentation regardless of their opinion of and adherence
to this rule.
SQLite has been and continues to be completely free to everyone,
without precondition.

<h2>Participation in the SQLite Community</h2>

<p>Participants in the SQLite Mailing Lists or other public forums
are not required to follow this rule.  However, comments posted on
mailing lists or forums are expected to be courteous and professional,
and should be worded as if they were written by someone who is a follower
of this rule.  In other words, while participating in the SQLite
community, one should speak only the truth in love, honor all, be not
angry nor nurse a grudge, do not return evil for evil, be not
proud nor a grumbler nor a detractor, avoid depraved speech,
hate no one, do not love quarreling,
and so forth.  Violators brought to the attention of the project leader
will be reproved, gently at first but with increasing urgency, and may
ultimately be banned if the behavior is not amended.

<h2>Core Developers</h2>

<p>
Because SQLite is [public-domain|in the public domain], the project does
not normally accept patches from outside contributors as
such code would carry an implied copyright.  In order to
keep SQLite completely free and open, all
code is written and maintained by a small team of core developers.


<p>
All of the current core developers of SQLite have pledged to follow
this rule to the best of their ability, and to hold each other accountable
for the those parts of the rule that regulate interaction with the larger 
community. The public also is invited to call us out when we fall short.
While the complete rule is good, we make no enforcement of the introspective
aspects.

<p>
In the future, should someone wish to become a core developer of SQLite
and is in every way qualified except that he or she does not feel
comfortable with some details of this rule (for example, the overtly
religious elements), then appropriate adjustments can be made at that 
point.  The objective of the rule is not to impose a particular religious 
creed, but rather to use time-tested behavioral guidelines to promote a 
productive and peaceful community.

<h1>The Rule</h1>

<ol>
<li> First of all, love the Lord God with your whole heart,
     your whole soul, and your whole strength.
<li> Then, love your neighbor as yourself.
Changes to pages/dbstat.in.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<title>The DBSTAT Virtual Table</title>
<tcl>hd_keywords dbstat {dbstat virtual table}</tcl>
<fancy_format>


<h1>Overview</h1>

<p>
The DBSTAT virtual tables is a read-only [eponymous virtual table] that returns
information about which pages of the database files are used by which
tables and indexes in the schema.
The DBSTAT virtual table is used to implement [sqlite3_analyzer.exe]
utility program, and to help compute the 
[https://www.sqlite.org/src/repo-tabsize|table size pie-chart] in
the [https://www.fossil-scm.org/|Fossil-implemented] version control system
for SQLite.








|







1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<title>The DBSTAT Virtual Table</title>
<tcl>hd_keywords dbstat {dbstat virtual table}</tcl>
<fancy_format>


<h1>Overview</h1>

<p>
The DBSTAT virtual table is a read-only [eponymous virtual table] that returns
information about which pages of the database files are used by which
tables and indexes in the schema.
The DBSTAT virtual table is used to implement [sqlite3_analyzer.exe]
utility program, and to help compute the 
[https://www.sqlite.org/src/repo-tabsize|table size pie-chart] in
the [https://www.fossil-scm.org/|Fossil-implemented] version control system
for SQLite.
Changes to pages/index.in.
1
2
3
4
5
6
7
8
9
10
11
12
13
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
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
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
<title>SQLite Home Page</title>

<div class="rightsidebar desktoponly border2px">
<h3 align="center">Common Links</h3>
<tcl>common_links</tcl>
</div>

<p>SQLite is a [self-contained], [high-reliability], 
[serverless|embedded],
[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_2.html">Version 3.25.2</a> ([dateof:3.25.2]).
<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>
</div>

<hr class="xhr">
<h3>Sponsors</h3>
<p>Ongoing development and support of SQLite is made possible in part
by <a href="consortium.html">SQLite Consortium</a> members, including:</p>
<a name="consortium_members"></a>
<style>
#sponsors {
  margin:auto;
  width:80%;
}
.onesponsor a img {
  width:200px;
  max-width:200px;
  padding:1ex;
}
</style>
<div id="sponsors"></div>
<script>
<tcl>
set sponsors {
  {name   Mozilla
   url    https://www.mozilla.com/
   image  mozilla.gif
   blurb  "Working to preserve choice and innovation on the internet."
  }
  {name   Bloomberg
   url    https://www.bloomberg.com/
   image  bloomberg.gif
   blurb  "A world leader in financial-information technology."
  }
  {name   Bentley
   url    https://www.bentley.com/
   image  bentley.gif
   blurb  "Comprehensive software solutions for Sustaining Infrastructure."
  }
  {name   NDS
   url    http://www.nds-association.org/
   image  nds.png
   blurb  "The leading map standard for automotive infotainment and autonomous driving."
  }
  {name   Expensify
   url    https://www.expensify.com/
   image  expensify.png
   width  225
   height 32
   blurb  "We power the most exciting companies in the world using SQLite."
  }
}
set sep {  var sponsors = [}
set nspons 0
foreach spons $sponsors {
  hd_putsnl $sep\173
  set sep ","
  unset -nocomplain x
  array set x $spons
  hd_putsnl "    \"name\":\"$x(name)\","
  hd_putsnl "    \"href\":\"$x(url)\","
  hd_putsnl "    \"src\":\"$x(image)\","
  if {[info exists x(width)]} {
    hd_putsnl "    \"wx\":$x(width),"
    hd_putsnl "    \"hx\":$x(height)"
  } else {
    hd_putsnl "    \"wx\":0"
  }
  hd_puts "  \175"
  incr nspons
}
unset -nocomplain x
hd_putsnl "\];"
hd_puts {
  for(var i=0; i<sponsors.length; i++){sponsors[i].idx = Math.random();}
  sponsors.sort(function(a,b){return a.idx-b.idx});
  var h = "";
  for(var i=0; i<sponsors.length; i++){
    h += "<span class='onesponsor'><a href='";
    h += sponsors[i].href;
    h += "'><img src='images/foreignlogos/";
    h += sponsors[i].src;
    h += "'></a></span>\n";
  }
  document.getElementById("sponsors").innerHTML = h;
}
</tcl>
</script>
<br clear="both">
<hr class="xhr">


<
<
<
<
<













<



<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
1
2





3
4
5
6
7
8
9
10
11
12
13
14
15

16
17
18
























































































<title>SQLite Home Page</title>






<p>SQLite is a [self-contained], [high-reliability], 
[serverless|embedded],
[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_2.html">Version 3.25.2</a> ([dateof:3.25.2]).
<a class="button" href="download.html">Download</a>
<a class="button" href="chronology.html">Prior Releases</a>


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
























































































Changes to pages/lang.in.
2445
2446
2447
2448
2449
2450
2451
2452
2453
2454
2455
2456
2457
2458
2459
funcdef {glob(X,Y)} {} {
  ^The glob(X,Y) function is equivalent to the
  expression "<b>Y GLOB X</b>".
  Note that the X and Y arguments are reversed in the glob() function
  relative to the infix [GLOB] operator.  Y is the string and X is the
  pattern.  So, for example, the following expressions are equivalent:
  <blockquote><pre>
     name LIKE '*helium*'
     glob('*helium*',name)
  </pre></blockquote>
  <p>^If the [sqlite3_create_function()] interface is used to
  override the glob(X,Y) function with an alternative implementation then
  the [GLOB] operator will invoke the alternative implementation.
}








|







2445
2446
2447
2448
2449
2450
2451
2452
2453
2454
2455
2456
2457
2458
2459
funcdef {glob(X,Y)} {} {
  ^The glob(X,Y) function is equivalent to the
  expression "<b>Y GLOB X</b>".
  Note that the X and Y arguments are reversed in the glob() function
  relative to the infix [GLOB] operator.  Y is the string and X is the
  pattern.  So, for example, the following expressions are equivalent:
  <blockquote><pre>
     name GLOB '*helium*'
     glob('*helium*',name)
  </pre></blockquote>
  <p>^If the [sqlite3_create_function()] interface is used to
  override the glob(X,Y) function with an alternative implementation then
  the [GLOB] operator will invoke the alternative implementation.
}

Changes to pages/rescode.in.
740
741
742
743
744
745
746








































747
748
749
750
751
752
753
}
RESCODE SQLITE_READONLY_DIRECTORY {SQLITE_READONLY | (6<<8)} {
  The SQLITE_READONLY_DIRECTORY result code indicates that the database
  is read-only because process does not have permission to create
  a journal file in the same directory as the database and the creation of
  a journal file is a prerequisite for writing.
}









































#############################################################################
# Code to process the RESCODE values
#
# Convert formula RESCODE values into numerics
set nResCode 0
set nPrimCode 0







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







740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
}
RESCODE SQLITE_READONLY_DIRECTORY {SQLITE_READONLY | (6<<8)} {
  The SQLITE_READONLY_DIRECTORY result code indicates that the database
  is read-only because process does not have permission to create
  a journal file in the same directory as the database and the creation of
  a journal file is a prerequisite for writing.
}

RESCODE SQLITE_ERROR_SNAPSHOT {SQLITE_ERROR | (3<<8)} {
  The SQLITE_ERROR_SNAPSHOT result code might be returned when attempting
  to start a read transaction on an historical version of the database
  by using the [sqlite3_snapshot_open()] interface.  If the historical
  snapshot is no longer available, then the read transaction will fail
  with the SQLITE_ERROR_SNAPSHOT.  This error code is only possible if
  SQLite is compiled with [-DSQLITE_ENABLE_SNAPSHOT].
}

RESCODE SQLITE_LOCKED_VTAB {SQLITE_LOCKED | (2<<8)} {
  The SQLITE_LOCKED_VTAB result code is not used by the SQLite core, but
  it is available for use by extensions.  Virtual table implementations
  can return this result code to indicate that they cannot complete the
  current operation because of locks held by other threads or processes.
  <p>
  The [R-Tree extension] returns this result code when an attempt is made
  to update the R-Tree while another prepared statement is actively reading
  the R-Tree.  The update cannot proceed because any change to an R-Tree
  might involve reshuffling and rebalancing of nodes, which would disrupt
  read cursors, causing some rows to be repeated and other rows to be
  omitted.
}

RESCODE SQLITE_CORRUPT_SEQUENCE {SQLITE_CORRUPT | (2<<8)} {
  The SQLITE_CORRUPT_SEQUENCE result code means that the schema of
  the sqlite_sequence table is corrupt.  The sqlite_sequence table
  is used to help implement the [AUTOINCREMENT] feature.  The
  sqlite_sequence table should have the following format:
  <blockquote><pre>
  CREATE TABLE sqlite_sequence(name,seq);
  </pre></blockquote>
  <p>If SQLite discovers that the sqlite_sequence table has any other
  format, it returns the SQLITE_CORRUPT_SEQUENCE error.
}

RESCODE SQLITE_CANTOPEN_DIRTYWAL {SQLITE_CANTOPEN | (5<<8)} {
  The SQLITE_CANTOPEN_DIRTYWAL result code is not used at this time.
}


#############################################################################
# Code to process the RESCODE values
#
# Convert formula RESCODE values into numerics
set nResCode 0
set nPrimCode 0
Changes to pages/rtree.in.
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446

<p>^(For example, a query like the following might be used to find all
R*Tree entries that overlap with a circle centered a 45.3,22.9 with a
radius of 5.0:

<codeblock>
SELECT id FROM demo_index WHERE id MATCH circle(45.3, 22.9, 5.0)
</blockquote></pre>)^

<p>^The SQL syntax for custom queries is the same regardless of which
interface, sqlite3_rtree_geometry_callback() or sqlite3_rtree_query_callback(),
is used to register the SQL function.  However, the newer query-style
callbacks give the application greater control over how the query proceeds.

<h2>The Legacy xGeom Callback</h2>







|







432
433
434
435
436
437
438
439
440
441
442
443
444
445
446

<p>^(For example, a query like the following might be used to find all
R*Tree entries that overlap with a circle centered a 45.3,22.9 with a
radius of 5.0:

<codeblock>
SELECT id FROM demo_index WHERE id MATCH circle(45.3, 22.9, 5.0)
</codeblock>)^

<p>^The SQL syntax for custom queries is the same regardless of which
interface, sqlite3_rtree_geometry_callback() or sqlite3_rtree_query_callback(),
is used to register the SQL function.  However, the newer query-style
callbacks give the application greater control over how the query proceeds.

<h2>The Legacy xGeom Callback</h2>