1
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
3
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
4
<title>SQLite Requirements</title>
5
<style type="text/css">
8
font-family: Verdana, sans-serif;
13
a:visited { color: #734559 }
15
.logo { position:absolute; margin:3px; }
31
.toolbar a { color: white; text-decoration: none; padding: 6px 12px; }
32
.toolbar a:visited { color: white; }
33
.toolbar a:hover { color: #044a64; background: white; }
35
.content { margin: 5%; }
36
.content dt { font-weight:bold; }
37
.content dd { margin-bottom: 25px; margin-left:20%; }
38
.content ul { padding:0px; padding-left: 15px; margin:0px; }
41
.se { background: url(images/se.gif) 100% 100% no-repeat #044a64}
42
.sw { background: url(images/sw.gif) 0% 100% no-repeat }
43
.ne { background: url(images/ne.gif) 100% 0% no-repeat }
44
.nw { background: url(images/nw.gif) 0% 0% no-repeat }
46
/* Things for "fancyformat" documents start here. */
47
.fancy img+p {font-style:italic}
48
.fancy .codeblock i { color: darkblue; }
49
.fancy h1,.fancy h2,.fancy h3,.fancy h4 {font-weight:normal;color:#044a64}
50
.fancy h2 { margin-left: 10px }
51
.fancy h3 { margin-left: 20px }
52
.fancy h4 { margin-left: 30px }
53
.fancy th {white-space:nowrap;text-align:left;border-bottom:solid 1px #444}
54
.fancy th, .fancy td {padding: 0.2em 1ex; vertical-align:top}
55
.fancy #toc a { color: darkblue ; text-decoration: none }
56
.fancy .todo { color: #AA3333 ; font-style : italic }
57
.fancy .todo:before { content: 'TODO:' }
58
.fancy p.todo { border: solid #AA3333 1px; padding: 1ex }
59
.fancy img { display:block; }
60
.fancy :link:hover, .fancy :visited:hover { background: wheat }
61
.fancy p,.fancy ul,.fancy ol { margin: 1em 5ex }
62
.fancy li p { margin: 1em 0 }
63
/* End of "fancyformat" specific rules. */
69
<div><!-- container div to satisfy validator -->
72
<img class="logo" src="images/sqlite370_banner.gif" alt="SQLite Logo"
74
<div><!-- IE hack to prevent disappearing logo--></div>
75
<div class="tagline">Small. Fast. Reliable.<br>Choose any three.</div>
77
<table width=100% style="clear:both"><tr><td>
78
<div class="se"><div class="sw"><div class="ne"><div class="nw">
79
<table width=100% style="padding:0;margin:0;cell-spacing:0"><tr>
82
<a href="about.html">About</a>
83
<a href="sitemap.html">Sitemap</a>
84
<a href="docs.html">Documentation</a>
85
<a href="download.html">Download</a>
86
<a href="copyright.html">License</a>
87
<a href="news.html">News</a>
88
<a href="support.html">Support</a>
91
gMsg = "Search SQLite Docs..."
92
function entersearch() {
93
var q = document.getElementById("q");
94
if( q.value == gMsg ) { q.value = "" }
95
q.style.color = "black"
96
q.style.fontStyle = "normal"
98
function leavesearch() {
99
var q = document.getElementById("q");
100
if( q.value == "" ) {
102
q.style.color = "#044a64"
103
q.style.fontStyle = "italic"
108
<div style="padding:0 1em 0px 0;white-space:nowrap">
109
<form name=f method="GET" action="http://www.sqlite.org/search">
110
<input id=q name=q type=text
111
onfocus="entersearch()" onblur="leavesearch()" style="width:24ex;padding:1px 1ex; border:solid white 1px; font-size:0.9em ; font-style:italic;color:#044a64;" value="Search SQLite Docs...">
112
<input type=submit value="Go" style="border:solid white 1px;background-color:#044a64;color:white;font-size:0.9em;padding:0 1ex">
116
</div></div></div></div>
118
<div class=startsearch></div>
123
<h2>1.0 About SQLite Requirements</h2>
128
Requirements consist of excerpts from the documentation.
129
A requirement is usually a one-sentence excerpt but might be a sentence
130
fragment, multiple sentences, a table, or a GIF image of a bubble syntax
134
Requirements are written in conversational English and without the
135
modal auxiliary verb "shall". This grows out of the fact that requirements
136
are taken from the documentation. The intended audience for the
137
documentation is application programmers. "Shall" language is appropriate
138
when the audience consist of contract specialists, QA auditors, and lawyers,
139
but it interferes with comprehension when the audience is application
140
programmers. Hence, in order to best serve the intended audience, the
141
"shall" language is omitted.
144
Requirements are sufficiently detailed and precise to permit a 100% compatible
145
clean-room reimplementation of SQLite.
148
The word "requirement" in common English usage implies an ordering: that
149
the requirement comes before the implementation.
150
But there is no such ordering with SQLite requirements.
151
What are called "requirements" in SQLite are better described as
152
"testable statements of truth about the behavior of the system".
155
Every testable statement of truth about SQLite in the
156
documentation becomes a requirement.
159
Requirement numbers are the MD5 hash of the requirement itself.
161
<li><p>Requirements are inherently immutable, since any change
162
to the requirement results in a completely different requirement number.
164
<li><p>For text requirements, the text is normalized prior to computing the
167
<li>Remove all leading and trailing whitespace.
168
<li>Convert all internal whitespace sequences to a single space character.
169
<li>Convert "&lt;" to "<", "&gt;" to ">",
170
"&#91;" to "[", "&#93;" to "]", and
171
"&amp;" to "&".
173
<li><p>For GIF syntax diagram requirements, the MD5 hash is computed over
174
the entire content of the GIF image file.
176
<li><p>The MD5 hash is expressed in human-readable form as follows:
177
<blockquote><b>R-</b><i>N</i><b>-</b><i>N</i><b>-</b><i>N</i><b>-</b><i>N</i><b>-</b><i>N</i><b>-</b><i>N</i><b>-</b><i>N</i><b>-</b><i>N</i></blockquote>
178
Where each <i>N</i> is a 5-digit number between 00000 and 65536 that
179
represents 16 bits of the 128-bit MD5 hash.
181
<li><p>Requirements may be referenced by any unique prefix of their
182
complete requirement number.
186
Individual text requirements are identified in the
187
documentation as text between "<b>^</b>" and the first period or
188
full-stop ("<b>.</b>")
189
or as text between "<b>^(</b>" and "<b>)^</b>".
192
Text requirements are automatically extracted from the documentation by scripts
193
that run as part of the documentation build process.
196
After requirements have been extracted from the documentation, the requirement
197
markers "<b>^</b>", "<b>^(</b>", and "<b>)^</b>" are removed
198
from the documentation text. This is done automatically by the documentation
202
To avoid collisions with these requirements delimiters, "^" characters that
203
are part of the text of a requirement or that are otherwise found in the
204
documentation, should be coded as "&#94;".
208
Individual GIF syntax diagram requirements are identified in the
209
documentation as HTML image markup of the
212
<img alt="syntax diagram </b><i>NAME</i><b>" src="</b><i>FILE</i><b>">
214
Where <i>NAME</i> is the name of the syntax diagram and <i>FILE</i> is
215
the name of the GIF file containing the syntax diagram.
218
Syntax diagram requirements are automatically extracted from the
219
documentation by scripts
220
that run as part of the documentation build process.
223
The GIF file is the requirement, not the HTML markup that references the
224
GIF file nor the diagram name.
228
The documentation that contains the
229
requirement text is generated by scripts that use as input files
230
from both files in the documentation fossil repository and
231
comments in the source code.
236
<h2>2.0 List Of Requirements</h2>