240 lines
7.8 KiB
HTML
240 lines
7.8 KiB
HTML
<!DOCTYPE html>
|
|
<html><head>
|
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
|
|
<link href="sqlite.css" rel="stylesheet">
|
|
<title>SQLite Requirements</title>
|
|
<!-- path= -->
|
|
</head>
|
|
<body>
|
|
<div class=nosearch>
|
|
<a href="index.html">
|
|
<img class="logo" src="images/sqlite370_banner.gif" alt="SQLite" border="0">
|
|
</a>
|
|
<div><!-- IE hack to prevent disappearing logo --></div>
|
|
<div class="tagline desktoponly">
|
|
Small. Fast. Reliable.<br>Choose any three.
|
|
</div>
|
|
<div class="menu mainmenu">
|
|
<ul>
|
|
<li><a href="index.html">Home</a>
|
|
<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
|
|
<li class='wideonly'><a href='about.html'>About</a>
|
|
<li class='desktoponly'><a href="docs.html">Documentation</a>
|
|
<li class='desktoponly'><a href="download.html">Download</a>
|
|
<li class='wideonly'><a href='copyright.html'>License</a>
|
|
<li class='desktoponly'><a href="support.html">Support</a>
|
|
<li class='desktoponly'><a href="prosupport.html">Purchase</a>
|
|
<li class='search' id='search_menubutton'>
|
|
<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
|
|
</ul>
|
|
</div>
|
|
<div class="menu submenu" id="submenu">
|
|
<ul>
|
|
<li><a href='about.html'>About</a>
|
|
<li><a href='docs.html'>Documentation</a>
|
|
<li><a href='download.html'>Download</a>
|
|
<li><a href='support.html'>Support</a>
|
|
<li><a href='prosupport.html'>Purchase</a>
|
|
</ul>
|
|
</div>
|
|
<div class="searchmenu" id="searchmenu">
|
|
<form method="GET" action="search">
|
|
<select name="s" id="searchtype">
|
|
<option value="d">Search Documentation</option>
|
|
<option value="c">Search Changelog</option>
|
|
</select>
|
|
<input type="text" name="q" id="searchbox" value="">
|
|
<input type="submit" value="Go">
|
|
</form>
|
|
</div>
|
|
</div>
|
|
<script>
|
|
function toggle_div(nm) {
|
|
var w = document.getElementById(nm);
|
|
if( w.style.display=="block" ){
|
|
w.style.display = "none";
|
|
}else{
|
|
w.style.display = "block";
|
|
}
|
|
}
|
|
function toggle_search() {
|
|
var w = document.getElementById("searchmenu");
|
|
if( w.style.display=="block" ){
|
|
w.style.display = "none";
|
|
} else {
|
|
w.style.display = "block";
|
|
setTimeout(function(){
|
|
document.getElementById("searchbox").focus()
|
|
}, 30);
|
|
}
|
|
}
|
|
function div_off(nm){document.getElementById(nm).style.display="none";}
|
|
window.onbeforeunload = function(e){div_off("submenu");}
|
|
/* Disable the Search feature if we are not operating from CGI, since */
|
|
/* Search is accomplished using CGI and will not work without it. */
|
|
if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
|
|
document.getElementById("search_menubutton").style.display = "none";
|
|
}
|
|
/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
|
|
function hideorshow(btn,obj){
|
|
var x = document.getElementById(obj);
|
|
var b = document.getElementById(btn);
|
|
if( x.style.display!='none' ){
|
|
x.style.display = 'none';
|
|
b.innerHTML='show';
|
|
}else{
|
|
x.style.display = '';
|
|
b.innerHTML='hide';
|
|
}
|
|
return false;
|
|
}
|
|
var antiRobot = 0;
|
|
function antiRobotGo(){
|
|
if( antiRobot!=3 ) return;
|
|
antiRobot = 7;
|
|
var j = document.getElementById("mtimelink");
|
|
if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
|
|
}
|
|
function antiRobotDefense(){
|
|
document.body.onmousedown=function(){
|
|
antiRobot |= 2;
|
|
antiRobotGo();
|
|
document.body.onmousedown=null;
|
|
}
|
|
document.body.onmousemove=function(){
|
|
antiRobot |= 2;
|
|
antiRobotGo();
|
|
document.body.onmousemove=null;
|
|
}
|
|
setTimeout(function(){
|
|
antiRobot |= 1;
|
|
antiRobotGo();
|
|
}, 100)
|
|
antiRobotGo();
|
|
}
|
|
antiRobotDefense();
|
|
</script>
|
|
|
|
|
|
|
|
<h2>1.0 About SQLite Requirements</h2>
|
|
|
|
|
|
<ul>
|
|
<li><p>
|
|
Requirements consist of excerpts from the documentation.
|
|
A requirement is usually a one-sentence excerpt but might be a sentence
|
|
fragment, multiple sentences, a table, or a GIF image of a bubble syntax
|
|
diagram.
|
|
|
|
<li><p>
|
|
Requirements are written in conversational English and without the
|
|
modal auxiliary verb "shall". This grows out of the fact that requirements
|
|
are taken from the documentation. The intended audience for the
|
|
documentation is application programmers. "Shall" language is appropriate
|
|
when the audience consist of contract specialists, QA auditors, and lawyers,
|
|
but it interferes with comprehension when the audience is application
|
|
programmers. Hence, in order to best serve the intended audience, the
|
|
"shall" language is omitted.
|
|
|
|
<li><p>
|
|
Requirements are sufficiently detailed and precise to permit a 100% compatible
|
|
clean-room reimplementation of SQLite.
|
|
|
|
<li><p>
|
|
The word "requirement" in common English usage implies an ordering: that
|
|
the requirement comes before the implementation.
|
|
But there is no such ordering with SQLite requirements.
|
|
What are called "requirements" in SQLite are better described as
|
|
"testable statements of truth about the behavior of the system".
|
|
|
|
<li><p>
|
|
Every testable statement of truth about SQLite in the
|
|
documentation becomes a requirement.
|
|
|
|
<li><p>
|
|
Requirement numbers are the MD5 hash of the requirement itself.
|
|
<ol type="a">
|
|
<li><p>Requirements are inherently immutable, since any change
|
|
to the requirement results in a completely different requirement number.
|
|
|
|
<li><p>For text requirements, the text is normalized prior to computing the
|
|
MD5 hash:
|
|
<ul>
|
|
<li>Remove all leading and trailing whitespace.
|
|
<li>Convert all internal whitespace sequences to a single space character.
|
|
<li>Convert "&lt;" to "<", "&gt;" to ">",
|
|
"&#91;" to "[", "&#93;" to "]", and
|
|
"&amp;" to "&".
|
|
</ul>
|
|
<li><p>For GIF syntax diagram requirements, the MD5 hash is computed over
|
|
the entire content of the GIF image file.
|
|
|
|
<li><p>The MD5 hash is expressed in human-readable form as follows:
|
|
<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>
|
|
Where each <i>N</i> is a 5-digit number between 00000 and 65536 that
|
|
represents 16 bits of the 128-bit MD5 hash.
|
|
|
|
<li><p>Requirements may be referenced by any unique prefix of their
|
|
complete requirement number.
|
|
</ol>
|
|
|
|
<p><li>
|
|
Individual text requirements are identified in the
|
|
documentation as text between "<b>^</b>" and the first period or
|
|
full-stop ("<b>.</b>")
|
|
or as text between "<b>^(</b>" and "<b>)^</b>".
|
|
<ol type="a">
|
|
<li><p>
|
|
Text requirements are automatically extracted from the documentation by scripts
|
|
that run as part of the documentation build process.
|
|
|
|
<li><p>
|
|
After requirements have been extracted from the documentation, the requirement
|
|
markers "<b>^</b>", "<b>^(</b>", and "<b>)^</b>" are removed
|
|
from the documentation text. This is done automatically by the documentation
|
|
build scripts.
|
|
|
|
<li><p>
|
|
To avoid collisions with these requirements delimiters, "^" characters that
|
|
are part of the text of a requirement or that are otherwise found in the
|
|
documentation, should be coded as "&#94;".
|
|
</ol>
|
|
|
|
<p><li>
|
|
Individual GIF syntax diagram requirements are identified in the
|
|
documentation as HTML image markup of the
|
|
form
|
|
<blockquote><b>
|
|
<img alt="syntax diagram </b><i>NAME</i><b>" src="</b><i>FILE</i><b>">
|
|
</b></blockquote>
|
|
Where <i>NAME</i> is the name of the syntax diagram and <i>FILE</i> is
|
|
the name of the GIF file containing the syntax diagram.
|
|
<ol type="a">
|
|
<li><p>
|
|
Syntax diagram requirements are automatically extracted from the
|
|
documentation by scripts
|
|
that run as part of the documentation build process.
|
|
|
|
<li><p>
|
|
The GIF file is the requirement, not the HTML markup that references the
|
|
GIF file nor the diagram name.
|
|
</ol>
|
|
|
|
<li><p>
|
|
The documentation that contains the
|
|
requirement text is generated by scripts that use as input files
|
|
from both files in the documentation fossil repository and
|
|
comments in the source code.
|
|
|
|
</ul>
|
|
|
|
|
|
<h2>2.0 List Of Requirements</h2>
|
|
|
|
<dl>
|
|
|
|
</dl>
|
|
<p align="center"><small><i>This page last modified on <a href="https://sqlite.org/docsrc/honeypot" id="mtimelink" data-href="https://sqlite.org/docsrc/finfo/pages/requirements.in?m=6f99a0bcbd">2022-01-08 05:02:57</a> UTC </small></i></p>
|
|
|