1
0
mirror of https://github.com/sqlite/sqlite.git synced 2025-07-30 19:03:16 +03:00

Website redesign in preparation for adding version 3 documentation. (CVS 1506)

FossilOrigin-Name: 2052911b1fd119af9dbd81fdfe80244685f58212
This commit is contained in:
drh
2004-05-31 15:06:28 +00:00
parent 3a81de11b6
commit e100f835d3
24 changed files with 546 additions and 676 deletions

View File

@ -1,5 +1,5 @@
C Some\stest\scases\sfor\sread\slocks\s(CVS\s1505) C Website\sredesign\sin\spreparation\sfor\sadding\sversion\s3\sdocumentation.\s(CVS\s1506)
D 2004-05-31T12:34:54 D 2004-05-31T15:06:29
F Makefile.in ab7b0d5118e2da97bac66be8684a1034e3500f5a F Makefile.in ab7b0d5118e2da97bac66be8684a1034e3500f5a
F Makefile.linux-gcc b86a99c493a5bfb402d1d9178dcdc4bd4b32f906 F Makefile.linux-gcc b86a99c493a5bfb402d1d9178dcdc4bd4b32f906
F README f1de682fbbd94899d50aca13d387d1b3fd3be2dd F README f1de682fbbd94899d50aca13d387d1b3fd3be2dd
@ -179,32 +179,36 @@ F tool/speedtest.tcl 06c76698485ccf597b9e7dbb1ac70706eb873355
F tool/speedtest2.tcl ee2149167303ba8e95af97873c575c3e0fab58ff F tool/speedtest2.tcl ee2149167303ba8e95af97873c575c3e0fab58ff
F www/arch.fig d5f9752a4dbf242e9cfffffd3f5762b6c63b3bcf F www/arch.fig d5f9752a4dbf242e9cfffffd3f5762b6c63b3bcf
F www/arch.png 82ef36db1143828a7abc88b1e308a5f55d4336f4 F www/arch.png 82ef36db1143828a7abc88b1e308a5f55d4336f4
F www/arch.tcl b329ca2c8dc75cd1cf0dd714b8bb47bdd458d0da F www/arch.tcl a40f956733cbd99e4aace05c9fb9d7a999c9477e
F www/arch2.fig 613b5ac63511109064c2f93c5754ee662219937d F www/arch2.fig 613b5ac63511109064c2f93c5754ee662219937d
F www/arch2.gif 49c6bb36160f03ca2b89eaa5bfb1f560c7d68ee7 F www/arch2.gif 49c6bb36160f03ca2b89eaa5bfb1f560c7d68ee7
F www/audit.tcl 90e09d580f79c7efec0c7d6f447b7ec5c2dce5c0 F www/audit.tcl 90e09d580f79c7efec0c7d6f447b7ec5c2dce5c0
F www/c_interface.tcl 17d8bd9e7b4fbdca47c30c8b9bcb728c351d55c0 F www/c_interface.tcl 2176519fc2bd2d2cf6fe74fd806fc2d8362de2c8
F www/changes.tcl a3d043896631a14091dbafdb4068980974c3834c F www/changes.tcl 9d562205db584d26b358ebe93fb58039feefd1b8
F www/conflict.tcl 81dd21f9a679e60aae049e9dd8ab53d59570cda2 F www/common.tcl e548490c8444489064f6c1cce59d1cf177fb8664
F www/datatypes.tcl 0fe2b810f114a909b844e50ad37a25e6ed8c7271 F www/conflict.tcl fb8a2ba83746c7fdfd9e52fa7f6aaf5c422b8246
F www/download.tcl 0932d7f4f0e8b2adbbd22fac73132f86e43ab4a9 F www/copyright-release.html 294e011760c439c44951a6bfecd4c81a1ae359e8
F www/copyright-release.pdf cfca3558fc97095e57c6117d08f1f5b80d95125a
F www/datatypes.tcl 566004b81c36877397ddbe6e1907aae6065f6b41
F www/docs.tcl 60a7ce60d6f04cd5f56ab9329e0ffc22ebd6f021
F www/download.tcl cfe0a12bc9073fe34b880b6d259fb88ba5bb502f
F www/dynload.tcl 02eb8273aa78cfa9070dd4501dca937fb22b466c F www/dynload.tcl 02eb8273aa78cfa9070dd4501dca937fb22b466c
F www/faq.tcl 88d3b95d9cd8e374772daa3a646c4d107e7f3e9b F www/faq.tcl 3a1776818d9bd973ab0c3048ec7ad6b1ad091ae5
F www/fileformat.tcl 56f77e435a6306b337b20b416e3b89500ba2d029 F www/fileformat.tcl f71a06a0d533c7df408539c64113b4adeaf29764
F www/formatchng.tcl ca6cc1cb1bef9bc36f0619049d3c95e749bc6983 F www/formatchng.tcl 7ed8a5c871ab105f01e5defe1822ec39f70675bb
F www/index.tcl bacb2a0d052845bbe3bf078765cce907ed7080a4 F www/index.tcl 007cbb4c92459c45c2cc097a1193cc305c989772
F www/lang.tcl 17954f37c8bb1d25e026d97041ff6459fb89ac95 F www/lang.tcl fc528581c4a406cabc138e2f17db5ef6f38615ff
F www/mingw.tcl d96b451568c5d28545fefe0c80bee3431c73f69c F www/mingw.tcl d96b451568c5d28545fefe0c80bee3431c73f69c
F www/nulls.tcl 38117d24afb81efd079b59723b985a6d654cc2e8 F www/nulls.tcl f31330db8c978e675f5cd263067b32b822effa6f
F www/omitted.tcl 11037a1b557bd01405092d93dfa08898a4c26cd7 F www/omitted.tcl 7bd62b6f0f53b60c5360895b16b3af8407bbca03
F www/opcode.tcl b8d561f33597c62955796b797646f00144d97332 F www/opcode.tcl e8c421fd2c70c503b25cedb3f9617a1f387ac7ea
F www/quickstart.tcl 4e97bef825e6a4153c43afb9f97235fc4da278ab F www/quickstart.tcl 4e97bef825e6a4153c43afb9f97235fc4da278ab
F www/speed.tcl 2f6b1155b99d39adb185f900456d1d592c4832b3 F www/speed.tcl 19cf0c1bf73c4b534dfafc95b3eacff4825740b4
F www/sqlite.tcl 3c83b08cf9f18aa2d69453ff441a36c40e431604 F www/sqlite.tcl b51fd15f0531a54874de785a9efba323eecd5975
F www/tclsqlite.tcl b9271d44dcf147a93c98f8ecf28c927307abd6da F www/tclsqlite.tcl 19191cf2a1010eaeff74c51d83fd5f5a4d899075
F www/vdbe.tcl 9b9095d4495f37697fd1935d10e14c6015e80aa1 F www/vdbe.tcl 59288db1ac5c0616296b26dce071c36cb611dfe9
F www/whentouse.tcl a8335bce47cc2fddb07f19052cb0cb4d9129a8e4 F www/whentouse.tcl a8335bce47cc2fddb07f19052cb0cb4d9129a8e4
P 6c100887eeb32631e1aa914a69db959e1f58f192 P 0e07006704cd441f91d5fadbf3b644fd20da79bd
R 1d8f5d0a6729c7e39d4d87422195d60b R a59b4bd6ff95128c135d3274ecbe26b7
U danielk1977 U drh
Z 3129e3edc85b79121f4ae67280793a64 Z 972496f8c6b40a74144e347477ed1839

View File

@ -1 +1 @@
0e07006704cd441f91d5fadbf3b644fd20da79bd 2052911b1fd119af9dbd81fdfe80244685f58212

View File

@ -1,22 +1,13 @@
# #
# Run this Tcl script to generate the sqlite.html file. # Run this Tcl script to generate the sqlite.html file.
# #
set rcsid {$Id: arch.tcl,v 1.11 2004/03/14 11:57:58 drh Exp $} set rcsid {$Id: arch.tcl,v 1.12 2004/05/31 15:06:29 drh Exp $}
source common.tcl
puts {<html> header {Architecture of SQLite}
<head>
<title>Architecture of SQLite</title>
</head>
<body bgcolor=white>
<h1 align=center>
The Architecture Of SQLite
</h1>}
puts "<p align=center>
(This page was last modified on [lrange $rcsid 3 4] UTC)
</p>"
puts { puts {
<h2>Introduction</h2> <h2>The Architecture Of SQLite</h2>
<h3>Introduction</h3>
<table align="right" border="1" cellpadding="15" cellspacing="1"> <table align="right" border="1" cellpadding="15" cellspacing="1">
<tr><th>Block Diagram Of SQLite</th></tr> <tr><th>Block Diagram Of SQLite</th></tr>
@ -33,7 +24,7 @@ and how they interrelate is shown at the right. The text that
follows will provide a quick overview of each of these components. follows will provide a quick overview of each of these components.
</p> </p>
<h2>History</h2> <h3>History</h3>
<p> <p>
There are two main C interfaces to the SQLite library: There are two main C interfaces to the SQLite library:
@ -48,7 +39,7 @@ the plumbing is very different. The diagram at the right shows
the structure of SQLite for version 2.8.13 and following. the structure of SQLite for version 2.8.13 and following.
</p> </p>
<h2>Interface</h2> <h3>Interface</h3>
<p>Much of the public interface to the SQLite library is implemented by <p>Much of the public interface to the SQLite library is implemented by
functions found in the <b>main.c</b> source file though some routines are functions found in the <b>main.c</b> source file though some routines are
@ -67,11 +58,11 @@ Those symbols that are intended for external use (in other words,
those symbols which form the API for SQLite) begin those symbols which form the API for SQLite) begin
with <b>sqlite_</b>.</p> with <b>sqlite_</b>.</p>
<h2>SQL Command Process</h2> <h3>SQL Command Process</h3>
<p> <p>
<h2>Tokenizer</h2> <h3>Tokenizer</h3>
<p>When a string containing SQL statements is to be executed, the <p>When a string containing SQL statements is to be executed, the
interface passes that string to the tokenizer. The job of the tokenizer interface passes that string to the tokenizer. The job of the tokenizer
@ -87,7 +78,7 @@ of SQLite
has done it both ways and finds things generally work out nicer for has done it both ways and finds things generally work out nicer for
the tokenizer to call the parser. YACC has it backwards.</p> the tokenizer to call the parser. YACC has it backwards.</p>
<h2>Parser</h2> <h3>Parser</h3>
<p>The parser is the piece that assigns meaning to tokens based on <p>The parser is the piece that assigns meaning to tokens based on
their context. The parser for SQLite is generated using the their context. The parser for SQLite is generated using the
@ -106,7 +97,7 @@ SQLite distribution in the "tool" subdirectory. Documentation on
lemon is found in the "doc" subdirectory of the distribution. lemon is found in the "doc" subdirectory of the distribution.
</p> </p>
<h2>Code Generator</h2> <h3>Code Generator</h3>
<p>After the parser assembles tokens into complete SQL statements, <p>After the parser assembles tokens into complete SQL statements,
it calls the code generator to produce virtual machine code that it calls the code generator to produce virtual machine code that
@ -126,7 +117,7 @@ for SQL statements with the same names. (Each of these files calls routines
in <b>expr.c</b> and <b>where.c</b> as necessary.) All other in <b>expr.c</b> and <b>where.c</b> as necessary.) All other
SQL statements are coded out of <b>build.c</b>.</p> SQL statements are coded out of <b>build.c</b>.</p>
<h2>Virtual Machine</h2> <h3>Virtual Machine</h3>
<p>The program generated by the code generator is executed by <p>The program generated by the code generator is executed by
the virtual machine. Additional information about the virtual the virtual machine. Additional information about the virtual
@ -146,20 +137,20 @@ The <b>vdbeaux.c</b> file contains utilities used by the virtual
machine and interface modules used by the rest of the library to machine and interface modules used by the rest of the library to
construct VM programs.</p> construct VM programs.</p>
<h2>Backend</h2> <h3>Backend</h3>
<p>The backend is an abstraction layer that presents a uniform interface <p>The backend is an abstraction layer that presents a uniform interface
to the virtual machine for either the B-Tree drivers for disk-based to the virtual machine for either the B-Tree drivers for disk-based
databases or the Red/Black Tree driver for in-memory databases. databases or the Red/Black Tree driver for in-memory databases.
The <b>btree.h</b> source file contains the details.</p> The <b>btree.h</b> source file contains the details.</p>
<h2>Red/Black Tree</h2> <h3>Red/Black Tree</h3>
<p>In-memory databases are stored in a red/black tree implementation <p>In-memory databases are stored in a red/black tree implementation
contain in the <b>btree_rb.c</b> source file. contain in the <b>btree_rb.c</b> source file.
</p> </p>
<h2>B-Tree</h2> <h3>B-Tree</h3>
<p>An SQLite database is maintained on disk using a B-tree implementation <p>An SQLite database is maintained on disk using a B-tree implementation
found in the <b>btree.c</b> source file. A separate B-tree is used for found in the <b>btree.c</b> source file. A separate B-tree is used for
@ -173,7 +164,7 @@ entry. Any additional payload is stored in a chain of overflow pages.</p>
<b>btree.h</b>. <b>btree.h</b>.
</p> </p>
<h2>Page Cache</h2> <h3>Page Cache</h3>
<p>The B-tree module requests information from the disk in 1024 byte <p>The B-tree module requests information from the disk in 1024 byte
chunks. The page cache is reponsible for reading, writing, and chunks. The page cache is reponsible for reading, writing, and
@ -190,7 +181,7 @@ source file <b>pager.c</b>. The interface to the page cache subsystem
is defined by the header file <b>pager.h</b>. is defined by the header file <b>pager.h</b>.
</p> </p>
<h2>OS Interface</h2> <h3>OS Interface</h3>
<p> <p>
In order to provide portability between POSIX and Win32 operating systems, In order to provide portability between POSIX and Win32 operating systems,
@ -203,12 +194,4 @@ for Win32. The interface to the OS abstraction layer is defined by
the <b>os.h</b> header file. the <b>os.h</b> header file.
</p> </p>
} }
footer $rcsid
puts {
<br clear="both" />
<p><hr /></p>
<p><a href="index.html"><img src="/goback.jpg" border=0 />
Back to the SQLite Home Page</a>
</p>
</body></html>}

View File

@ -1,26 +1,17 @@
# #
# Run this Tcl script to generate the sqlite.html file. # Run this Tcl script to generate the sqlite.html file.
# #
set rcsid {$Id: c_interface.tcl,v 1.39 2003/10/18 09:37:27 danielk1977 Exp $} set rcsid {$Id: c_interface.tcl,v 1.40 2004/05/31 15:06:29 drh Exp $}
source common.tcl
puts {<html> header {The C language interface to the SQLite library}
<head>
<title>The C language interface to the SQLite library</title>
</head>
<body bgcolor=white>
<h1 align=center>
The C language interface to the SQLite library
</h1>}
puts "<p align=center>
(This page was last modified on [lrange $rcsid 3 4] UTC)
</p>"
puts { puts {
<h2>The C language interface to the SQLite library</h2>
<p>The SQLite library is designed to be very easy to use from <p>The SQLite library is designed to be very easy to use from
a C or C++ program. This document gives an overview of the C/C++ a C or C++ program. This document gives an overview of the C/C++
programming interface.</p> programming interface.</p>
<h2>1.0 The Core API</h2> <h3>1.0 The Core API</h3>
<p>The interface to the SQLite library consists of three core functions, <p>The interface to the SQLite library consists of three core functions,
one opaque data structure, and some constants used as return values. one opaque data structure, and some constants used as return values.
@ -51,7 +42,7 @@ the core functions shown above.
</p> </p>
<a name="sqlite_open"> <a name="sqlite_open">
<h3>1.1 Opening a database</h3> <h4>1.1 Opening a database</h4>
<p>Use the <b>sqlite_open</b> function to open an existing SQLite <p>Use the <b>sqlite_open</b> function to open an existing SQLite
database or to create a new SQLite database. The first argument database or to create a new SQLite database. The first argument
@ -83,7 +74,7 @@ deal with the same database. NULL is returned if the open fails
for any reason.</p> for any reason.</p>
<a name="sqlite_close"> <a name="sqlite_close">
<h3>1.2 Closing the database</h3> <h4>1.2 Closing the database</h4>
<p>To close an SQLite database, call the <b>sqlite_close</b> <p>To close an SQLite database, call the <b>sqlite_close</b>
function passing it the sqlite structure pointer that was obtained function passing it the sqlite structure pointer that was obtained
@ -92,7 +83,7 @@ If a transaction is active when the database is closed, the transaction
is rolled back.</p> is rolled back.</p>
<a name="sqlite_exec"> <a name="sqlite_exec">
<h3>1.3 Executing SQL statements</h3> <h4>1.3 Executing SQL statements</h4>
<p>The <b>sqlite_exec</b> function is used to process SQL statements <p>The <b>sqlite_exec</b> function is used to process SQL statements
and queries. This function requires 5 parameters as follows:</p> and queries. This function requires 5 parameters as follows:</p>
@ -170,7 +161,7 @@ result set is empty.</p>
function returns non-zero, the query is immediately aborted and function returns non-zero, the query is immediately aborted and
<b>sqlite_exec</b> will return SQLITE_ABORT.</p> <b>sqlite_exec</b> will return SQLITE_ABORT.</p>
<h3>1.4 Error Codes</h3> <h4>1.4 Error Codes</h4>
<p> <p>
The <b>sqlite_exec</b> function normally returns SQLITE_OK. But The <b>sqlite_exec</b> function normally returns SQLITE_OK. But
@ -344,7 +335,7 @@ the <b>sqlite_finalize</b> routine is ready to be called.
</dl> </dl>
</blockquote> </blockquote>
<h2>2.0 Accessing Data Without Using A Callback Function</h2> <h3>2.0 Accessing Data Without Using A Callback Function</h3>
<p> <p>
The <b>sqlite_exec</b> routine described above used to be the only The <b>sqlite_exec</b> routine described above used to be the only
@ -390,7 +381,7 @@ once for each row of output, and finally call <b>sqlite_finalize</b>
to clean up after the SQL has finished execution. to clean up after the SQL has finished execution.
</p> </p>
<h3>2.1 Compiling An SQL Statement Into A Virtual Machine</h3> <h4>2.1 Compiling An SQL Statement Into A Virtual Machine</h4>
<p> <p>
The <b>sqlite_compile</b> "compiles" a single SQL statement (specified The <b>sqlite_compile</b> "compiles" a single SQL statement (specified
@ -436,7 +427,7 @@ On success, <b>sqlite_compile</b> returns SQLITE_OK.
Otherwise and error code is returned. Otherwise and error code is returned.
</p> </p>
<h3>2.2 Step-By-Step Execution Of An SQL Statement</h3> <h4>2.2 Step-By-Step Execution Of An SQL Statement</h4>
<p> <p>
After a virtual machine has been generated using <b>sqlite_compile</b> After a virtual machine has been generated using <b>sqlite_compile</b>
@ -521,7 +512,7 @@ usage prior to a mishap. The misuse detection logic is not guaranteed
to work in every case. to work in every case.
</p> </p>
<h3>2.3 Deleting A Virtual Machine</h3> <h4>2.3 Deleting A Virtual Machine</h4>
<p> <p>
Every virtual machine that <b>sqlite_compile</b> creates should Every virtual machine that <b>sqlite_compile</b> creates should
@ -556,7 +547,7 @@ It is also acceptable to call <b>sqlite_finalize</b> on a virtual machine
that has never been passed to <b>sqlite_step</b> even once. that has never been passed to <b>sqlite_step</b> even once.
</p> </p>
<h2>3.0 The Extended API</h2> <h3>3.0 The Extended API</h3>
<p>Only the three core routines described in section 1.0 are required to use <p>Only the three core routines described in section 1.0 are required to use
SQLite. But there are many other functions that provide SQLite. But there are many other functions that provide
@ -642,7 +633,7 @@ void sqlite_progress_handler(sqlite*, int, int (*)(void*), void*);
<p>All of the above definitions are included in the "sqlite.h" <p>All of the above definitions are included in the "sqlite.h"
header file that comes in the source tree.</p> header file that comes in the source tree.</p>
<h3>3.1 The ROWID of the most recent insert</h3> <h4>3.1 The ROWID of the most recent insert</h4>
<p>Every row of an SQLite table has a unique integer key. If the <p>Every row of an SQLite table has a unique integer key. If the
table has a column labeled INTEGER PRIMARY KEY, then that column table has a column labeled INTEGER PRIMARY KEY, then that column
@ -658,7 +649,7 @@ the key is automatically generated. You can find the value of the key
for the most recent INSERT statement using the for the most recent INSERT statement using the
<b>sqlite_last_insert_rowid</b> API function.</p> <b>sqlite_last_insert_rowid</b> API function.</p>
<h3>3.2 The number of rows that changed</h3> <h4>3.2 The number of rows that changed</h4>
<p>The <b>sqlite_changes</b> API function returns the number of rows <p>The <b>sqlite_changes</b> API function returns the number of rows
that have been inserted, deleted, or modified since the database was that have been inserted, deleted, or modified since the database was
@ -686,7 +677,7 @@ will be zero regardless of the number of elements that were originally
in the table. If an accurate count of the number of elements deleted in the table. If an accurate count of the number of elements deleted
is necessary, use "<b>DELETE FROM table WHERE 1</b>" instead.</p> is necessary, use "<b>DELETE FROM table WHERE 1</b>" instead.</p>
<h3>3.3 Querying into memory obtained from malloc()</h3> <h4>3.3 Querying into memory obtained from malloc()</h4>
<p>The <b>sqlite_get_table</b> function is a wrapper around <p>The <b>sqlite_get_table</b> function is a wrapper around
<b>sqlite_exec</b> that collects all the information from successive <b>sqlite_exec</b> that collects all the information from successive
@ -773,7 +764,7 @@ as would be returned if the result set is empty.</p>
<p>The <b>sqlite_get_table</b> routine returns the same integer <p>The <b>sqlite_get_table</b> routine returns the same integer
result code as <b>sqlite_exec</b>.</p> result code as <b>sqlite_exec</b>.</p>
<h3>3.4 Interrupting an SQLite operation</h3> <h4>3.4 Interrupting an SQLite operation</h4>
<p>The <b>sqlite_interrupt</b> function can be called from a <p>The <b>sqlite_interrupt</b> function can be called from a
different thread or from a signal handler to cause the current database different thread or from a signal handler to cause the current database
@ -781,7 +772,7 @@ operation to exit at its first opportunity. When this happens,
the <b>sqlite_exec</b> routine (or the equivalent) that started the <b>sqlite_exec</b> routine (or the equivalent) that started
the database operation will return SQLITE_INTERRUPT.</p> the database operation will return SQLITE_INTERRUPT.</p>
<h3>3.5 Testing for a complete SQL statement</h3> <h4>3.5 Testing for a complete SQL statement</h4>
<p>The next interface routine to SQLite is a convenience function used <p>The next interface routine to SQLite is a convenience function used
to test whether or not a string forms a complete SQL statement. to test whether or not a string forms a complete SQL statement.
@ -803,7 +794,7 @@ then <b>sqlite_exec</b> is called and the input buffer is reset. If
the continuation prompt and another line of text is read and added to the continuation prompt and another line of text is read and added to
the input buffer.</p> the input buffer.</p>
<h3>3.6 Library version string</h3> <h4>3.6 Library version string</h4>
<p>The SQLite library exports the string constant named <p>The SQLite library exports the string constant named
<b>sqlite_version</b> which contains the version number of the <b>sqlite_version</b> which contains the version number of the
@ -813,7 +804,7 @@ the SQLITE_VERSION macro against the <b>sqlite_version</b>
string constant to verify that the version number of the string constant to verify that the version number of the
header file and the library match.</p> header file and the library match.</p>
<h3>3.7 Library character encoding</h3> <h4>3.7 Library character encoding</h4>
<p>By default, SQLite assumes that all data uses a fixed-size <p>By default, SQLite assumes that all data uses a fixed-size
8-bit character (iso8859). But if you give the --enable-utf8 option 8-bit character (iso8859). But if you give the --enable-utf8 option
@ -830,7 +821,7 @@ be changed at run-time. This is a compile-time option only. The
<b>sqlite_encoding</b> character string just tells you how the library <b>sqlite_encoding</b> character string just tells you how the library
was compiled.</p> was compiled.</p>
<h3>3.8 Changing the library's response to locked files</h3> <h4>3.8 Changing the library's response to locked files</h4>
<p>The <b>sqlite_busy_handler</b> procedure can be used to register <p>The <b>sqlite_busy_handler</b> procedure can be used to register
a busy callback with an open SQLite database. The busy callback will a busy callback with an open SQLite database. The busy callback will
@ -860,7 +851,7 @@ will wait for the lock to clear for at least the number of milliseconds
specified before it returns SQLITE_BUSY. Specifying zero milliseconds for specified before it returns SQLITE_BUSY. Specifying zero milliseconds for
the timeout restores the default behavior.</p> the timeout restores the default behavior.</p>
<h3>3.9 Using the <tt>_printf()</tt> wrapper functions</h3> <h4>3.9 Using the <tt>_printf()</tt> wrapper functions</h4>
<p>The four utility functions</p> <p>The four utility functions</p>
@ -981,7 +972,7 @@ routine. The string pointer that these routines return should be freed
by passing it to <b>sqlite_freemem()</b>. by passing it to <b>sqlite_freemem()</b>.
</p> </p>
<h3>3.10 Performing background jobs during large queries </h2> <h4>3.10 Performing background jobs during large queries</h3>
<p>The <b>sqlite_progress_handler()</b> routine can be used to register a <p>The <b>sqlite_progress_handler()</b> routine can be used to register a
callback routine with an SQLite database to be invoked periodically during long callback routine with an SQLite database to be invoked periodically during long
@ -1006,7 +997,7 @@ determine whether or not background jobs need to be run.
</p> </p>
<a name="cfunc"> <a name="cfunc">
<h2>4.0 Adding New SQL Functions</h2> <h3>4.0 Adding New SQL Functions</h3>
<p>Beginning with version 2.4.0, SQLite allows the SQL language to be <p>Beginning with version 2.4.0, SQLite allows the SQL language to be
extended with new functions implemented as C code. The following interface extended with new functions implemented as C code. The following interface
@ -1089,7 +1080,7 @@ new SQL functions, review the SQLite source code in the file
<b>func.c</b>. <b>func.c</b>.
</p> </p>
<h2>5.0 Multi-Threading And SQLite</h2> <h3>5.0 Multi-Threading And SQLite</h3>
<p> <p>
If SQLite is compiled with the THREADSAFE preprocessor macro set to 1, If SQLite is compiled with the THREADSAFE preprocessor macro set to 1,
@ -1112,7 +1103,7 @@ Under Unix, an <b>sqlite*</b> pointer should not be carried across a
should open its own copy of the database after the <b>fork()</b>. should open its own copy of the database after the <b>fork()</b>.
</p> </p>
<h2>6.0 Usage Examples</h2> <h3>6.0 Usage Examples</h3>
<p>For examples of how the SQLite C/C++ interface can be used, <p>For examples of how the SQLite C/C++ interface can be used,
refer to the source code for the <b>sqlite</b> program in the refer to the source code for the <b>sqlite</b> program in the
@ -1122,11 +1113,4 @@ Additional information about sqlite is available at
See also the sources to the Tcl interface for SQLite in See also the sources to the Tcl interface for SQLite in
the source file <b>src/tclsqlite.c</b>.</p> the source file <b>src/tclsqlite.c</b>.</p>
} }
footer $rcsid
puts {
<p><hr /></p>
<p><a href="index.html"><img src="/goback.jpg" border=0 />
Back to the SQLite Home Page</a>
</p>
</body></html>}

View File

@ -1,15 +1,11 @@
# #
# Run this script to generated a changes.html output file # Run this script to generated a changes.html output file
# #
puts {<html> source common.tcl
<head> header {SQLite changes}
<title>SQLite Change Log</title> puts {
</head>
<body bgcolor="white">
<h1 align="center">Recent Changes To SQLite</h1>
<p> <p>
This file provides a high-level summary of changes to SQLite. This page provides a high-level summary of changes to SQLite.
For more detail, refer the the checkin logs generated by For more detail, refer the the checkin logs generated by
CVS at CVS at
<a href="http://www.sqlite.org/cvstrac/timeline"> <a href="http://www.sqlite.org/cvstrac/timeline">
@ -1097,9 +1093,5 @@ chng {2000 May 29} {
puts { puts {
</DL> </DL>
<p><hr /></p> }
<p><a href="index.html"><img src="/goback.jpg" border=0 /> footer {$Id:}
Back to the SQLite Home Page</a>
</p>
</body></html>}

45
www/common.tcl Normal file
View File

@ -0,0 +1,45 @@
# This file contains TCL procedures used to generate standard parts of
# web pages.
#
proc header {txt} {
puts "<html><head><title>$txt</title></head>"
puts \
{<body bgcolor="white" link="#50695f" vlink="#508896">
<table width="100%" border="0">
<tr><td valign="top"><img src="sqlite.gif"></td>
<td width="100%"></td>
<td valign="bottom">
<ul>
<li><a href="http://www.sqlite.org/cvstrac/tktnew">bugs</a></li>
<li><a href="changes.html">changes</a></li>
<li><a href="download.html">download</a></li>
<li><a href="docs.html">documentation</a></li>
</ul>
</td>
<td width="10"></td>
<td valign="bottom">
<ul>
<li><a href="index.html">home</a></li>
<li><a href="faq.html">faq</a></li>
<li><a href="http://www.sqlite.org/cvstrac/timeline">timeline</a></li>
<li><a href="http://www.sqlite.org/cvstrac/wiki">wiki</a></li>
</ul>
</td>
</tr></table>
<table width="100%">
<tr><td bgcolor="#80a796"></td></tr>
</table>}
}
proc footer {{rcsid {}}} {
puts {
<table width="100%">
<tr><td bgcolor="#80a796"></td></tr>
</table>}
set date [lrange $rcsid 3 4]
if {$date!=""} {
puts "<small><i>This page last modified on $date</i></small>"
}
puts {</body></html>}
}

View File

@ -1,29 +1,18 @@
# #
# Run this Tcl script to generate the constraint.html file. # Run this Tcl script to generate the constraint.html file.
# #
set rcsid {$Id: conflict.tcl,v 1.2 2002/02/03 00:56:11 drh Exp $ } set rcsid {$Id: conflict.tcl,v 1.3 2004/05/31 15:06:30 drh Exp $ }
source common.tcl
puts {<html> header {Constraint Conflict Resolution in SQLite}
<head>
<title>Constraint Conflict Resolution in SQLite</title>
</head>
<body bgcolor=white>
<h1 align=center>
Constraint Conflict Resolution in SQLite
</h1>}
puts "<p align=center>
(This page was last modified on [lrange $rcsid 3 4] UTC)
</p>"
puts { puts {
<h2>Introduction</h2> <h1>Constraint Conflict Resolution in SQLite</h1>
<p> <p>
In most SQL databases, if you have a UNIQUE constraint on In most SQL databases, if you have a UNIQUE constraint on
a table and you try to do an UPDATE or INSERT that violates a table and you try to do an UPDATE or INSERT that violates
that constraint, the database will aborts the operation in the constraint, the database will abort the operation in
progress, back out any prior changes associated with that progress, back out any prior changes associated with
one UPDATE or INSERT command, and return an error. UPDATE or INSERT command, and return an error.
This is the default behavior of SQLite. This is the default behavior of SQLite.
Beginning with version 2.3.0, though, SQLite allows you to Beginning with version 2.3.0, though, SQLite allows you to
define alternative ways for dealing with constraint violations. define alternative ways for dealing with constraint violations.
@ -99,11 +88,4 @@ What you really want is to use the IGNORE algorithm to insert
all but the malformed record.</p> all but the malformed record.</p>
} }
footer $rcsid
puts {
<p><hr /></p>
<p><a href="index.html"><img src="/goback.jpg" border=0 />
Back to the SQLite Home Page</a>
</p>
</body></html>}

109
www/copyright-release.html Normal file
View File

@ -0,0 +1,109 @@
<html>
<body bgcolor="white">
<h1 align="center">
Copyright Release for<br>
Contributions To SQLite
</h1>
<p>
SQLite is software that implements an embeddable SQL database engine.
SQLite is available for free download from http://www.sqlite.org/.
The principal author and maintainer of SQLite has disclaimed all
copyright interest in his contributions to SQLite
and thus released his contributions into the public domain.
In order to keep the SQLite software unencumbered by copyright
claims, the principal author asks others who may from time to
time contribute changes and enhancements to likewise disclaim
their own individual copyright interest.
</p>
<p>
Because the SQLite software found at http://www.sqlite.org/ is in the
public domain, anyone is free to download the SQLite software
from that website, make changes to the software, use, distribute,
or sell the modified software, under either the original name or
under some new name, without any need to obtain permission, pay
royalties, acknowledge the original source of the software, or
in any other way compensate, identify, or notify the original authors.
Nobody is in any way compelled to contribute their SQLite changes and
enhancements back to the SQLite website. This document concerns
only changes and enhancements to SQLite that are intentionally and
deliberately contributed back to the SQLite website.
</p>
<p>
For the purposes of this document, "SQLite software" shall mean any
computer source code, documentation, makefiles, test scripts, or
other information that is published on the SQLite website,
http://www.sqlite.org/. Precompiled binaries are excluded from
the definition of "SQLite software" in this document because the
process of compiling the software may introduce information from
outside sources which is not properly a part of SQLite.
</p>
<p>
The header comments on the SQLite source files exhort the reader to
share freely and to never take more than one gives.
In the spirit of that exhortation I make the following declarations:
</p>
<ol>
<li><p>
I dedicate to the public domain
any and all copyright interest in the SQLite software that
was publicly available on the SQLite website (http://www.sqlite.org/) prior
to the date of the signature below and any changes or enhancements to
the SQLite software
that I may cause to be published on that website in the future.
I make this dedication for the benefit of the public at large and
to the detriment of my heirs and successors. I intend this
dedication to be an overt act of relinquishment in perpetuity of
all present and future rights to the SQLite software under copyright
law.
</p></li>
<li><p>
To the best of my knowledge and belief, the changes and enhancements that
I have contributed to SQLite are either originally written by me
or are derived from prior works which I have verified are also
in the public domain and are not subject to claims of copyright
by other parties.
</p></li>
<li><p>
To the best of my knowledge and belief, no individual, business, organization,
government, or other entity has any copyright interest
in the SQLite software as it existed on the
SQLite website as of the date on the signature line below.
</p></li>
<li><p>
I agree never to publish any additional information
to the SQLite website (by CVS, email, scp, FTP, or any other means) unless
that information is an original work of authorship by me or is derived from
prior published versions of SQLite.
I agree never to copy and paste code into the SQLite code base from
other sources.
I agree never to publish on the SQLite website any information that
would violate a law or breach a contract.
</p></li>
</ol>
<p>
<table width="100%" cellpadding="0" cellspacing="0">
<tr>
<td width="60%" valign="top">
Signature:
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
</td><td valign="top" align="left">
Date:
</td></tr>
<td colspan=2>
Name (printed):
</td>
</tr>
</table>
</body>
</html>

BIN
www/copyright-release.pdf Normal file

Binary file not shown.

View File

@ -1,22 +1,13 @@
# #
# Run this script to generated a datatypes.html output file # Run this script to generated a datatypes.html output file
# #
set rcsid {$Id: datatypes.tcl,v 1.6 2003/12/18 14:19:41 drh Exp $} set rcsid {$Id: datatypes.tcl,v 1.7 2004/05/31 15:06:30 drh Exp $}
source common.tcl
header {Datatypes In SQLite version 2}
puts {
<h2>Datatypes In SQLite Version 2</h2>
puts {<html> <h3>1.0 &nbsp; Typelessness</h3>
<head>
<title>Datatypes In SQLite</title>
</head>
<body bgcolor="white">
<h1 align="center">
Datatypes In SQLite
</h1>
}
puts "<p align=center>
(This page was last modified on [lrange $rcsid 3 4] UTC)
</p>"
puts {<h2>1.0 &nbsp; Typelessness</h2>
<p> <p>
SQLite is "typeless". This means that you can store any SQLite is "typeless". This means that you can store any
kind of data you want in any column of any table, regardless of the kind of data you want in any column of any table, regardless of the
@ -79,7 +70,7 @@ And so forth. Basically any sequence of names optionally followed by
one or two signed integers in parentheses will do. one or two signed integers in parentheses will do.
</p> </p>
<h2>2.0 &nbsp; The INTEGER PRIMARY KEY</h2> <h3>2.0 &nbsp; The INTEGER PRIMARY KEY</h3>
<p> <p>
One exception to the typelessness of SQLite is a column whose type One exception to the typelessness of SQLite is a column whose type
@ -101,7 +92,7 @@ the <b>sqlite_last_insert_rowid()</b> API function or using the
<b>last_insert_rowid()</b> SQL function in a subsequent SELECT statement. <b>last_insert_rowid()</b> SQL function in a subsequent SELECT statement.
</p> </p>
<h2>3.0 &nbsp; Comparison and Sort Order</h2> <h3>3.0 &nbsp; Comparison and Sort Order</h3>
<p> <p>
SQLite is typeless for the purpose of deciding what data is allowed SQLite is typeless for the purpose of deciding what data is allowed
@ -144,7 +135,7 @@ A comparison of any value against NULL using operators like "&lt;" or
"&gt;=" is always false. "&gt;=" is always false.
</p> </p>
<h2>4.0 &nbsp; How SQLite Determines Datatypes</h2> <h3>4.0 &nbsp; How SQLite Determines Datatypes</h3>
<p> <p>
For SQLite version 2.6.3 and earlier, all values used the numeric datatype. For SQLite version 2.6.3 and earlier, all values used the numeric datatype.
@ -193,7 +184,7 @@ then the datatype is numeric. Note in particular that the datatype for columns
with an empty type declaration is numeric. with an empty type declaration is numeric.
</p> </p>
<h2>5.0 &nbsp; Examples</h2> <h3>5.0 &nbsp; Examples</h3>
<p> <p>
Consider the following two command sequences: Consider the following two command sequences:
@ -249,11 +240,4 @@ are treated as numbers and are therefore indistinct. But the SELECT
statement on the right returns two rows since 0 and 0.0 are treated statement on the right returns two rows since 0 and 0.0 are treated
a strings which are different.</p> a strings which are different.</p>
} }
footer $rcsid
puts {
<p><hr /></p>
<p><a href="index.html"><img src="/goback.jpg" border=0 />
Back to the SQLite Home Page</a>
</p>
</body></html>}

84
www/docs.tcl Normal file
View File

@ -0,0 +1,84 @@
# This script generates the "docs.html" page that describes various
# sources of documentation available for SQLite.
#
set rcsid {$Id: docs.tcl,v 1.1 2004/05/31 15:06:30 drh Exp $}
source common.tcl
header {SQLite Documentation}
puts {
<h2>Available Documentation</h2>
<table width="100%" cellpadding="5">
}
proc doc {name url desc} {
puts {<tr><td valign="top" align="right">}
regsub -all { +} $name {\&nbsp;} name
puts "<a href=\"$url\">$name</a></td>"
puts {<td width="10"></td>}
puts {<td align="top" align="left">}
puts $desc
puts {</td></tr>}
}
doc {SQL Syntax} {lang.html} {
This document describes the SQL language that is understood by
SQLite.
}
doc {Version 2 C/C++ API} {c_interface.html} {
A description of the C/C++ interface bindings for SQLite through version
2.8
}
doc {Tcl API} {tclsqlite.html} {
A description of the TCL interface bindings for SQLite.
}
doc {Version 2 DataTypes } {datatypes.html} {
A description of how SQLite version 2 handles SQL datatypes.
}
doc {Release History} {changes.html} {
A chronology of SQLite releases going back to version 1.0.0
}
doc {Null Handling} {nulls.html} {
Different SQL database engines handle NULLs in different ways. The
SQL standards are ambiguous. This document describes how SQLite handles
NULLs in comparison with other SQL database engines.
}
doc {Copyright} {copyright.html} {
SQLite is in the public domain. This document describes what that means
and the implications for contributors.
}
doc {Unsupported SQL} {omitted.html} {
This page describes features of SQL that SQLite does not support.
}
doc {Speed Comparison} {speed.html} {
The speed of version 2.7.6 of SQLite is compared against PostgreSQL and
MySQL.
}
doc {Architecture} {arch.html} {
An architectural overview of the SQLite library, useful for those who want
to hack the code.
}
doc {VDBE Tutorial} {vdbe.html} {
The VDBE is the subsystem within SQLite that does the actual work of
executing SQL statements. This page describes the principles of operation
for the VDBE in SQLite version 2.7. This is essential reading for anyone
who want to modify the SQLite sources.
}
doc {VDBE Opcodes} {opcode.html} {
This document is an automatically generated description of the various
opcodes that the VDBE understands. Programmers can use this document as
a reference to better understand the output of EXPLAIN listings from
SQLite.
}
puts {</table>}
footer $rcsid

View File

@ -1,12 +1,12 @@
# #
# Run this TCL script to generate HTML for the download.html file. # Run this TCL script to generate HTML for the download.html file.
# #
set rcsid {$Id: download.tcl,v 1.6 2002/08/15 13:45:17 drh Exp $} set rcsid {$Id: download.tcl,v 1.7 2004/05/31 15:06:30 drh Exp $}
source common.tcl
header {SQLite Download Page}
puts {<html> puts {
<head><title>SQLite Download Page</title></head> <h2>SQLite Download Page</h1>
<body bgcolor=white>
<h1 align=center>SQLite Download Page</h1>
<table width="100%" cellpadding="5"> <table width="100%" cellpadding="5">
} }
@ -95,13 +95,4 @@ foreach name [lsort -dict -decreasing [glob -nocomplain sqlite-*.tar.gz]] {
Version $vers of the source tree including all documentation. Version $vers of the source tree including all documentation.
" "
} }
footer $rcsid
puts {
</table>
<p><hr /></p>
<p>
<a href="index.html"><img src="/goback.jpg" border=0 />
Back to the SQLite home page</a>
</p>
</body></html>}

View File

@ -1,19 +1,9 @@
# #
# Run this script to generated a faq.html output file # Run this script to generated a faq.html output file
# #
set rcsid {$Id: faq.tcl,v 1.23 2003/05/29 17:43:08 drh Exp $} set rcsid {$Id: faq.tcl,v 1.24 2004/05/31 15:06:30 drh Exp $}
source common.tcl
puts {<html> header {SQLite Frequently Asked Questions</title>}
<head>
<title>SQLite Frequently Asked Questions</title>
</head>
<body bgcolor="white">
<h1 align="center">Frequently Asked Questions</h1>
}
puts "<p align=center>
(This page was last modified on [lrange $rcsid 3 4] UTC)
</p>"
set cnt 1 set cnt 1
proc faq {question answer} { proc faq {question answer} {
@ -432,12 +422,19 @@ faq {
# End of questions and answers. # End of questions and answers.
############# #############
puts {<DL COMPACT>} puts {<h2>Frequently Asked Questions</h2>}
# puts {<DL COMPACT>}
# for {set i 1} {$i<$cnt} {incr i} {
# puts " <DT><A HREF=\"#q$i\">($i)</A></DT>"
# puts " <DD>[lindex $faq($i) 0]</DD>"
# }
# puts {</DL>}
puts {<OL>}
for {set i 1} {$i<$cnt} {incr i} { for {set i 1} {$i<$cnt} {incr i} {
puts " <DT><A HREF=\"#q$i\">($i)</A></DT>" puts "<li><a href=\"#q$i\">[lindex $faq($i) 0]</a></li>"
puts " <DD>[lindex $faq($i) 0]</DD>"
} }
puts {</DL>} puts {</OL>}
for {set i 1} {$i<$cnt} {incr i} { for {set i 1} {$i<$cnt} {incr i} {
puts "<A NAME=\"q$i\"><HR />" puts "<A NAME=\"q$i\"><HR />"
@ -445,11 +442,5 @@ for {set i 1} {$i<$cnt} {incr i} {
puts "<BLOCKQUOTE>[lindex $faq($i) 1]</BLOCKQUOTE></LI>\n" puts "<BLOCKQUOTE>[lindex $faq($i) 1]</BLOCKQUOTE></LI>\n"
} }
puts { puts {</OL>}
</OL> footer $rcsid
<p><hr /></p>
<p><a href="index.html"><img src="/goback.jpg" border=0 />
Back to the SQLite Home Page</a>
</p>
</body></html>}

View File

@ -1,23 +1,19 @@
# #
# Run this script to generated a fileformat.html output file # Run this script to generated a fileformat.html output file
# #
set rcsid {$Id: fileformat.tcl,v 1.11 2003/11/25 23:48:57 drh Exp $} set rcsid {$Id: fileformat.tcl,v 1.12 2004/05/31 15:06:30 drh Exp $}
source common.tcl
puts {<html> header {SQLite Database File Format (Version 2)}
<head>
<title>SQLite Database File Format</title>
</head>
<body bgcolor="white">
<h1 align="center">
SQLite Database File Format
</h1>
}
puts "<p align=center>
(This page was last modified on [lrange $rcsid 3 4] UTC)
</p>"
puts { puts {
<h2>1.0 &nbsp; Layers</h2> <h2>SQLite 2.X Database File Format</h2>
<p>
This document describes the disk file format for SQLite versions 2.1
through 2.8. SQLite version 3.0 and following uses a very different
format which is described separately.
</p>
<h3>1.0 &nbsp; Layers</h3>
<p> <p>
SQLite is implemented in layers. SQLite is implemented in layers.
@ -37,7 +33,7 @@ We wil describe each layer beginning with the bottom (pager)
layer and working upwards. layer and working upwards.
</p> </p>
<h2>2.0 &nbsp; The Pager Layer</h2> <h3>2.0 &nbsp; The Pager Layer</h3>
<p> <p>
An SQLite database consists of An SQLite database consists of
@ -158,7 +154,7 @@ Here is a summary of the journal file format:
</li> </li>
</ul> </ul>
<h2>3.0 &nbsp; The B-Tree Layer</h2> <h3>3.0 &nbsp; The B-Tree Layer</h3>
<p> <p>
The B-Tree layer builds on top of the pager layer to implement The B-Tree layer builds on top of the pager layer to implement
@ -206,7 +202,7 @@ The b-tree itself does not record which pages are root pages and which
are not. That information is handled entirely at the schema layer. are not. That information is handled entirely at the schema layer.
</p> </p>
<h3>3.1 &nbsp; B-Tree Page 1 Details</h3> <h4>3.1 &nbsp; B-Tree Page 1 Details</h4>
<p> <p>
Page 1 begins with the following 48-byte string: Page 1 begins with the following 48-byte string:
@ -275,7 +271,7 @@ Here is a summary of the information contained on page 1 in the b-tree layer:
<li>928 bytes of unused space</li> <li>928 bytes of unused space</li>
</ul> </ul>
<h3>3.2 &nbsp; Structure Of A Single B-Tree Page</h3> <h4>3.2 &nbsp; Structure Of A Single B-Tree Page</h4>
<p> <p>
Conceptually, a b-tree page contains N database entries and N+1 pointers Conceptually, a b-tree page contains N database entries and N+1 pointers
@ -502,7 +498,7 @@ the page by moving all cells to the beginning and constructing a single
freeblock at the end to take up all remaining space. freeblock at the end to take up all remaining space.
</p> </p>
<h3>3.3 &nbsp; The B-Tree Free Page List</h3> <h4>3.3 &nbsp; The B-Tree Free Page List</h4>
<p> <p>
When information is removed from an SQLite database such that one or When information is removed from an SQLite database such that one or
@ -571,7 +567,7 @@ these two optimizations allow some database operations
to go four to six times faster than they would otherwise. to go four to six times faster than they would otherwise.
</p> </p>
<h2>4.0 &nbsp; The Schema Layer</h2> <h3>4.0 &nbsp; The Schema Layer</h3>
<p> <p>
The schema layer implements an SQL database on top of one or more The schema layer implements an SQL database on top of one or more
@ -591,7 +587,7 @@ extracted. For indices, the b-tree key varies in size depending on the
size of the fields being indexed and the b-tree data is empty. size of the fields being indexed and the b-tree data is empty.
</p> </p>
<h3>4.1 &nbsp; SQL Table Implementation Details</h3> <h4>4.1 &nbsp; SQL Table Implementation Details</h4>
<p>Each row of an SQL table is stored in a single b-tree entry. <p>Each row of an SQL table is stored in a single b-tree entry.
The b-tree key is a 4-byte big-endian integer that is the ROWID The b-tree key is a 4-byte big-endian integer that is the ROWID
@ -659,7 +655,7 @@ INTEGER PRIMARY KEY, just like any other column. But the Value
associated with that offset is always NULL. associated with that offset is always NULL.
</p> </p>
<h3>4.2 &nbsp; SQL Index Implementation Details</h3> <h4>4.2 &nbsp; SQL Index Implementation Details</h4>
<p> <p>
SQL indices are implement using a b-tree in which the key is used SQL indices are implement using a b-tree in which the key is used
@ -685,7 +681,7 @@ NULLs being sorted first, followed by numerical values in numerical
order, followed by text values in lexigraphical order. order, followed by text values in lexigraphical order.
</p> </p>
<h3>4.4 &nbsp; SQL Schema Storage And Root B-Tree Page Numbers</h3> <h4>4.4 &nbsp; SQL Schema Storage And Root B-Tree Page Numbers</h4>
<p> <p>
The database schema is stored in the database in a special tabled named The database schema is stored in the database in a special tabled named
@ -720,7 +716,7 @@ database. But the schema table for the temporary database named
name change, it works exactly the same. name change, it works exactly the same.
</p> </p>
<h3>4.4 &nbsp; Schema Version Numbering And Other Meta-Information</h3> <h4>4.4 &nbsp; Schema Version Numbering And Other Meta-Information</h4>
<p> <p>
The nine 32-bit integers that are stored beginning at byte offset The nine 32-bit integers that are stored beginning at byte offset
@ -785,13 +781,5 @@ to a SYNCHRONOUS setting of NORMAL. A value of 3 corresponds to a
SYNCHRONOUS setting of FULL. If the value is 0, that means it has not SYNCHRONOUS setting of FULL. If the value is 0, that means it has not
been initialized so the default synchronous setting of NORMAL is used. been initialized so the default synchronous setting of NORMAL is used.
</p> </p>
} }
footer $rcsid
puts {
<p><hr /></p>
<p><a href="index.html"><img src="/goback.jpg" border=0 />
Back to the SQLite Home Page</a>
</p>
</body></html>}

View File

@ -1,21 +1,12 @@
# #
# Run this Tcl script to generate the formatchng.html file. # Run this Tcl script to generate the formatchng.html file.
# #
set rcsid {$Id: formatchng.tcl,v 1.9 2003/06/29 16:11:13 drh Exp $ } set rcsid {$Id: formatchng.tcl,v 1.10 2004/05/31 15:06:30 drh Exp $ }
source common.tcl
puts {<html> header {File Format Changes in SQLite}
<head>
<title>File Format Changes in SQLite</title>
</head>
<body bgcolor=white>
<h1 align=center>
File Format Changes in SQLite
</h1>}
puts "<p align=center>
(This page was last modified on [lrange $rcsid 3 4] UTC)
</p>"
puts { puts {
<h2>File Format Changes in SQLite</h2>
<p> <p>
From time to time, enhancements or bug fixes require a change to From time to time, enhancements or bug fixes require a change to
the underlying file format for SQLite. When this happens and you the underlying file format for SQLite. When this happens and you
@ -175,6 +166,16 @@ occurred since version 1.0.0:
to restore the database.</p> to restore the database.</p>
</td> </td>
</tr> </tr>
<tr>
<td valign="top">2.8.13 to 3.0.0</td>
<td valign="top">(pending)</td>
<td><p>Version 3.0.0 is a major upgrade for SQLite that incorporates
support for UTF-16, BLOBs, and a more compact encoding that results
in database files that are typically 25% to 35% smaller. The new file
format is radically different and completely incompatible with the
version 2 file format.</p>
</td>
</tr>
</table> </table>
</blockquote> </blockquote>
@ -192,11 +193,4 @@ this is as follows:
echo .dump | sqlite-old old.db | sqlite-new new.db echo .dump | sqlite-old old.db | sqlite-new new.db
</blockquote> </blockquote>
} }
footer $rcsid
puts {
<p><hr /></p>
<p><a href="index.html"><img src="/goback.jpg" border=0 />
Back to the SQLite Home Page</a>
</p>
</body></html>}

View File

@ -1,223 +1,82 @@
# #!/usr/bin/tclsh
# Run this TCL script to generate HTML for the index.html file. source common.tcl
# header {SQLite home page}
set rcsid {$Id: index.tcl,v 1.82 2004/04/23 17:04:45 drh Exp $}
puts {<html>
<head><title>SQLite: An Embeddable SQL Database Engine</title></head>
<body bgcolor=white>
<h1 align=center>SQLite<br>An Embeddable SQL Database Engine</h1>
<p align=center>}
puts "This page was last modified on [lrange $rcsid 3 4] UTC<br>"
set vers [lindex $argv 0]
puts "The latest SQLite version is <b>$vers</b>"
puts " created on [exec cat last_change] UTC"
puts {</p>}
puts {<h2>Introduction</h2>
<p>SQLite is a C library that implements an embeddable SQL database engine.
Programs that link with the SQLite library can have SQL database
access without running a separate RDBMS process.
The distribution comes with a standalone command-line
access program (<a href="sqlite.html">sqlite</a>) that can
be used to administer an SQLite database and which serves as
an example of how to use the SQLite library.</p>
<p>SQLite is <b>not</b> a client library used to connect to a
big database server. SQLite <b>is</b> the server. The SQLite
library reads and writes directly to and from the database files
on disk.</p>}
puts { puts {
<table align="right" hspace="10" cellpadding=0 cellspacing=0 broder=0> <table width="100%" border="0" cellspacing="5">
<tr><td align="right" bgcolor="#cacae4"> <tr>
<table border="2" width="100%" cellspacing=0 cellpadding=5><tr><td align="left"> <td width="50%" valign="top">
Quick Links: <h2>About SQLite</h2>
<ul> <p>
<li><a href="download.html">Download</a></li> SQLite is a small C library that implements a
<li><a href="http://www.sqlite.org/cvstrac/timeline">Change Log</a></li> self-contained, embeddable,
<li><a href="http://www.sqlite.org/cvstrac/tktnew">Report a bug</a></li> zero-configuration SQL database engine.
<li><a href="quickstart.html">Quick start</a></li> Features include:
</ul> </p>
</td></tr></table>
</td></tr>
</table>
}
puts {<h2>Features</h2>
<p><ul> <p><ul>
<li>ACID (Atomic, Consistent, Isolated, Durable) transactions.</li>
<li>A zero-configuration - no DBA needed.</li>
<li>Implements most of SQL92. <li>Implements most of SQL92.
(<a href="omitted.html">Features not supported</a>)</li> (<a href="omitted.html">Features not supported</a>)</li>
<li>A complete database (with multiple tables and indices) is <li>A complete database is stored in a single disk file.</li>
stored in a single disk file.</li>
<li>ACID (Atomic, Consistent, Isolated, Durable) transactions.</li>
<li>Database files can be freely shared between machines with <li>Database files can be freely shared between machines with
different byte orders.</li> different byte orders.</li>
<li>Supports databases up to 2 terabytes (2^41 bytes) in size.</li> <li>Supports databases up to 2 terabytes (2^41 bytes) in size.</li>
<li>A zero-configuration database engine - no DBA needed.</li> <li>Small memory footprint: less than 30K lines of C code,
<li>Small memory footprint: less than 30K lines of C code.</li> less than 250KB code space (gcc on i486)</li>
<li><a href="speed.html">Two times faster</a> than PostgreSQL and <li><a href="speed.html">Faster</a> than other popular database
MySQL for many common operations.</li> engines for most common operations.</li>
<li>Very simple <li>Simple, easy to use <a href="c_interface.html">API</a>.</li>
<a href="c_interface.html">C/C++ interface</a> requires the use of only
three functions and one opaque structure.</li>
<li><a href="tclsqlite.html">TCL bindings</a> included. <li><a href="tclsqlite.html">TCL bindings</a> included.
Bindings for many other languages Bindings for many other languages
<a href="http://www.sqlite.org/cvstrac/wiki?p=SqliteWrappers"> <a href="http://www.sqlite.org/cvstrac/wiki?p=SqliteWrappers">
available separately.</a></li> available separately.</a></li>
<li>Simple, well-commented source code.</li> <li>Well-commented source code with over 90% test coverage.</li>
<li>Automated test suite provides over 90% code coverage.</li>
<li>Self-contained: no external dependencies.</li> <li>Self-contained: no external dependencies.</li>
<li>Built and tested under Linux and Windows.</li>
<li>Sources are in the <a href="copyright.html">public domain</a>. <li>Sources are in the <a href="copyright.html">public domain</a>.
Use for any purpose.</li> Use for any purpose.</li>
</ul> </ul>
</p> </p>
}
puts {<h2>Current Status</h2>
<p>A <a href="changes.html">Change Summary</a> is available on this
website. You can also access a detailed
<a href="http://www.sqlite.org/cvstrac/timeline">change history</a>,
<a href="http://www.sqlite.org/cvstrac/rptview?rn=2">view open bugs</a>,
or
<a href="http://www.sqlite.org/cvstrac/tktnew">report new bugs</a>
at the
<a href="http://www.sqlite.org/cvstrac/">CVS server</a>.</p>
<p>Complete source code and precompiled binaries for the latest release are
<a href="download.html">available for download</a> on this site. You
can also obtain the latest changes by anonymous CVS access:
<blockquote><pre>
cvs -d :pserver:anonymous@www.sqlite.org:/sqlite login
cvs -d :pserver:anonymous@www.sqlite.org:/sqlite checkout sqlite
</pre></blockquote>
When prompted for a password, enter "anonymous".
</p>
<p> <p>
Whenever either of the first two digits in the version number The SQLite distribution comes with a standalone command-line
for SQLite change, it means that the underlying file format access program (<a href="sqlite.html">sqlite</a>) that can
has changed. Usually these changes are backwards compatible. be used to administer an SQLite database and which serves as
See <a href="formatchng.html">formatchng.html</a> an example of how to use the SQLite library.
for additional information.
</p> </p>
</td>
<td width="1" bgcolor="#80a796"></td>
<td valign="top" width="50%">
<h2>News</h2>
} }
puts {<h2>Documentation</h2> proc newsitem {date title text} {
puts "<h3>$date - $title</h3>"
regsub -all "\n( *\n)+" $text "</p>\n\n<p>" txt
puts "<p>$txt</p>"
puts "<hr width=\"50%\">"
}
<p>The following documentation is currently available:</p> newsitem {2004-May-31} {CVS Access Temporarily Suspended} {
Anonymous access to the CVS repository will be suspended
temporarily beginning on 2004-June-04
so that the developers working on version 3.0 can have a free hand to
implement features that a covered by a non-compete agreement.
Access will be reenabled after the non-compete expires on 2004-June-17.
}
<p><ul> newsitem {2004-Apr-23} {Work Begins On SQLite Version 3} {
<li>A <a href="quickstart.html">Quick Start</a> guide to using SQLite in Work has begun on version 3 of SQLite. Version 3 is a major
5 minutes or less.</li> changes to both the C-language API and the underlying file format
<li><a href="faq.html">Frequently Asked Questions</a> are available online.</li> that will enable SQLite to better support internationalization.
<li>Information on the <a href="sqlite.html">sqlite</a> The first beta is schedule for release on 2004-July-01.
command-line utility.</li>
<li>SQLite is <a href="datatypes.html">typeless</a>.
<li>The <a href="lang.html">SQL Language</a> subset understood by SQLite.</li>
<li>The <a href="c_interface.html">C/C++ Interface</a>.</li>
<li>The <a href="nulls.html">NULL handling</a> in SQLite versus
other SQL database engines.</li>
<li>The <a href="tclsqlite.html">Tcl Binding</a> to SQLite.</li>
<li>The <a href="arch.html">Architecture of the SQLite Library</a> describes
how the library is put together.</li>
<li>A description of the <a href="opcode.html">virtual machine</a> that
SQLite uses to access the database.</li>
<li>A description of the
<a href="fileformat.html">database file format</a> used by SQLite.
<li>A <a href="speed.html">speed comparison</a> between SQLite, PostgreSQL,
and MySQL.</li>
<li>User-written documentation is available on the
<a href="http://www.sqlite.org/cvstrac/wiki">SQLite Wiki</a>. Please
contribute if you can.</li>
</ul>
</p>
<p>The SQLite source code is 30% comment. These comments are
another important source of information. </p>
Plans are to continue to support SQLite version 2.8 with
bug fixes. But all new development will occur in version 3.0.
} }
puts { puts {
<a name="mailinglist" /> </td></tr></table>
<h2>Mailing List</h2>
<p>A mailing list has been set up for discussion of
SQLite design issues or for asking questions about SQLite.
To subscribe send an email to
<a href="mailto:sqlite-users-subscribe@sqlite.org">
sqlite-users-subscribe@sqlite.org</a>.
If you would prefer to get digests rather than individual
emails, send a message to to
<a href="mailto:sqlite-users-digest-subscribe@sqlite.org">
sqlite-users-digest-subscribe@sqlite.org</a>.
For additional information about operating and using this
mailing list, send a message to
<a href="mailto:sqlite-users-help@sqlite.org">
sqlite-users-help@sqlite.org</a> and instructions will be
sent by to you by return email.
</p>
} }
footer {$Id: index.tcl,v 1.83 2004/05/31 15:06:30 drh Exp $}
puts {<h2>Professional Support and Custom Modifications</h2>}
puts {
<p>
If you would like professional support for SQLite
or if you want custom modifications to SQLite performed by the
original author, these services are available for a modest fee.
For additional information visit
<a href="http://www.hwaci.com/sw/sqlite/support.html">
http://www.hwaci.com/sw/sqlite/support.html</a> or contact:</p>
<blockquote>
D. Richard Hipp <br />
Hwaci - Applied Software Research <br />
704.948.4565 <br />
<a href="mailto:drh@hwaci.com">drh@hwaci.com</a>
</blockquote>
}
puts {<h2>Building From Source</h2>}
puts {
<p>To build sqlite under Unix, just unwrap the tarball, create a separate
build directory, run configure from the build directory and then
type "make". For example:</p>
<blockquote><pre>
$ tar xzf sqlite.tar.gz <i> Unpacks into directory named "sqlite" </i>
$ mkdir bld <i> Create a separate build directory </i>
$ cd bld
$ ../sqlite/configure
$ make <i> Builds "sqlite" and "libsqlite.a" </i>
$ make test <i> Optional: run regression tests </i>
</pre></blockquote>
<p>If you prefer, you can also build by making whatever modifications
you desire to the file "Makefile.linux-gcc" and then executing that
makefile. The latter method is used for all official development
and testing of SQLite and for building the precompiled
binaries found on this website. Windows binaries are generated by
cross-compiling from Linux using <a href="http://www.mingw.org/">MinGW</a></p>
}
puts {<h2>Related Sites</h2>
<p>
For information bindings of SQLite to other programming languages
(Perl, Python, Ruby, PHP, etc.) and for a list of programs currently
using SQLite, visit the Wiki documentation at:
</p>
<blockquote>
<a href="http://www.sqlite.org/cvstrac/wiki">
http://www.sqlite.org/cvstrac/wiki</a>
</blockquote>
}
puts {
</body></html>}

View File

@ -1,21 +1,12 @@
# #
# Run this Tcl script to generate the sqlite.html file. # Run this Tcl script to generate the sqlite.html file.
# #
set rcsid {$Id: lang.tcl,v 1.67 2004/04/23 17:04:45 drh Exp $} set rcsid {$Id: lang.tcl,v 1.68 2004/05/31 15:06:30 drh Exp $}
source common.tcl
puts {<html> header {Query Language Understood by SQLite}
<head>
<title>Query Language Understood By SQLite</title>
</head>
<body bgcolor=white>
<h1 align=center>
SQL As Understood By SQLite
</h1>}
puts "<p align=center>
(This page was last modified on [lrange $rcsid 3 4] UTC)
</p>"
puts { puts {
<h2>SQL As Understood By SQLite</h2>
<p>The SQLite library understands most of the standard SQL <p>The SQLite library understands most of the standard SQL
language. But it does <a href="omitted.html">omit some features</a> language. But it does <a href="omitted.html">omit some features</a>
while at the same time while at the same time
@ -1841,10 +1832,4 @@ keyword_list {
*SQLITE_TEMP_MASTER *SQLITE_TEMP_MASTER
} }
puts { footer $rcsid
<p><hr /></p>
<p><a href="index.html"><img src="/goback.jpg" border=0 />
Back to the SQLite Home Page</a>
</p>
</body></html>}

View File

@ -1,22 +1,12 @@
# #
# Run this script to generated a nulls.html output file # Run this script to generated a nulls.html output file
# #
set rcsid {$Id: nulls.tcl,v 1.5 2003/11/08 12:07:01 drh Exp $} set rcsid {$Id: nulls.tcl,v 1.6 2004/05/31 15:06:30 drh Exp $}
source common.tcl
puts {<html> header {NULL Handling in SQLite}
<head>
<title>NULL Handling In SQLite Versus Other Database Engines</title>
</head>
<body bgcolor="white">
<h1 align="center">
NULL Handling in SQLite Versus Other Database Engines
</h1>
}
puts "<p align=\"center\">
(This page was last modified on [lrange $rcsid 3 4] UTC)
</p>"
puts { puts {
<h2>NULL Handling in SQLite Versus Other Database Engines</h2>
<p> <p>
The goal is The goal is
to make SQLite handle NULLs in a standards-compliant way. to make SQLite handle NULLs in a standards-compliant way.
@ -334,11 +324,6 @@ select * from t2;
drop table t1; drop table t1;
drop table t2; drop table t2;
</pre> </pre>
<p><hr /></p>
<p><a href="index.html"><img src="/goback.jpg" border=0 />
Back to the SQLite Home Page</a>
</p>
</body>
</html>
} }
footer $rcsid

View File

@ -1,22 +1,12 @@
# #
# Run this script to generated a omitted.html output file # Run this script to generated a omitted.html output file
# #
set rcsid {$Id: omitted.tcl,v 1.5 2003/08/22 02:34:30 drh Exp $} set rcsid {$Id: omitted.tcl,v 1.6 2004/05/31 15:06:30 drh Exp $}
source common.tcl
puts {<html> header {SQL Features That SQLite Does Not Implement}
<head>
<title>SQL Features That SQLite Does Not Implement</title>
</head>
<body bgcolor="white">
<h1 align="center">
SQL Features That SQLite Does Not Implement
</h1>
}
puts "<p align=center>
(This page was last modified on [lrange $rcsid 3 4] UTC)
</p>"
puts { puts {
<h2>SQL Features That SQLite Does Not Implement</h2>
<p> <p>
Rather than try to list all the features of SQL92 that SQLite does Rather than try to list all the features of SQL92 that SQLite does
support, it is much easier to list those that it does not. support, it is much easier to list those that it does not.
@ -104,9 +94,5 @@ add them to the Wiki page at
<a href="http://www.sqlite.org/cvstrac/wiki?p=UnsupportedSql"> <a href="http://www.sqlite.org/cvstrac/wiki?p=UnsupportedSql">
http://www.sqlite.org/cvstrac/wiki?p=Unsupported</a> http://www.sqlite.org/cvstrac/wiki?p=Unsupported</a>
</p> </p>
<p><hr /></p> }
<p><a href="index.html"><img src="/goback.jpg" border=0 /> footer $rcsid
Back to the SQLite Home Page</a>
</p>
</body></html>}

View File

@ -1,19 +1,12 @@
# #
# Run this Tcl script to generate the sqlite.html file. # Run this Tcl script to generate the sqlite.html file.
# #
set rcsid {$Id: opcode.tcl,v 1.12 2003/06/29 16:11:13 drh Exp $} set rcsid {$Id: opcode.tcl,v 1.13 2004/05/31 15:06:30 drh Exp $}
source common.tcl
puts {<html> header {SQLite Virtual Machine Opcodes}
<head> puts {
<title>SQLite Virtual Machine Opcodes</title> <h2>SQLite Virtual Machine Opcodes</h2>
</head> }
<body bgcolor=white>
<h1 align=center>
SQLite Virtual Machine Opcodes
</h1>}
puts "<p align=center>
(This page was last modified on [lrange $rcsid 3 4] UTC)
</p>"
set fd [open [lindex $argv 0] r] set fd [open [lindex $argv 0] r]
set file [read $fd [file size [lindex $argv 0]]] set file [read $fd [file size [lindex $argv 0]]]
@ -46,7 +39,7 @@ foreach line [split $file \n] {
unset file unset file
puts { puts {
<h2>Introduction</h2> <h3>Introduction</h3>
<p>In order to execute an SQL statement, the SQLite library first parses <p>In order to execute an SQL statement, the SQLite library first parses
the SQL, analyzes the statement, then generates a short program to execute the SQL, analyzes the statement, then generates a short program to execute
@ -147,7 +140,7 @@ There are operations to read or write to memory slots of the aggregator
in focus. There are also operations to change the focus aggregator in focus. There are also operations to change the focus aggregator
and to scan through all aggregators.</p> and to scan through all aggregators.</p>
<h2>Viewing Programs Generated By SQLite</h2> <h3>Viewing Programs Generated By SQLite</h3>
<p>Every SQL statement that SQLite interprets results in a program <p>Every SQL statement that SQLite interprets results in a program
for the virtual machine. But if you precede the SQL statement with for the virtual machine. But if you precede the SQL statement with
@ -224,7 +217,7 @@ PRAGMA vdbe_trace=on;
You can turn tracing back off by entering a similar statement but You can turn tracing back off by entering a similar statement but
changing the value "on" to "off".</p> changing the value "on" to "off".</p>
<h2>The Opcodes</h2> <h3>The Opcodes</h3>
} }
puts "<p>There are currently [llength $OpcodeList] opcodes defined by puts "<p>There are currently [llength $OpcodeList] opcodes defined by
@ -242,11 +235,4 @@ foreach op [lsort -dictionary $OpcodeList] {
puts "<td>[string trim $Opcode($op:text)]</td></tr>" puts "<td>[string trim $Opcode($op:text)]</td></tr>"
} }
puts {</table></p>} puts {</table></p>}
footer $rcsid
puts {
<p><hr /></p>
<p><a href="index.html"><img src="/goback.jpg" border=0 />
Back to the SQLite Home Page</a>
</p>
</body></html>}

View File

@ -1,22 +1,14 @@
# #
# Run this Tcl script to generate the speed.html file. # Run this Tcl script to generate the speed.html file.
# #
set rcsid {$Id: speed.tcl,v 1.13 2003/06/29 16:11:13 drh Exp $ } set rcsid {$Id: speed.tcl,v 1.14 2004/05/31 15:06:30 drh Exp $ }
source common.tcl
puts {<html> header {SQLite Database Speed Comparison}
<head>
<title>Database Speed Comparison: SQLite versus PostgreSQL</title>
</head>
<body bgcolor=white>
<h1 align=center>
Database Speed Comparison
</h1>}
puts "<p align=center>
(This page was last modified on [lrange $rcsid 3 4] UTC)
</p>"
puts { puts {
<h2>Executive Summary</h2> <h2>Database Speed Comparison</h2>
<h3>Executive Summary</h3>
<p>A series of tests were run to measure the relative performance of <p>A series of tests were run to measure the relative performance of
SQLite 2.7.6, PostgreSQL 7.1.3, and MySQL 3.23.41. SQLite 2.7.6, PostgreSQL 7.1.3, and MySQL 3.23.41.
@ -61,7 +53,7 @@ The results presented here come with the following caveats:
</p></li> </p></li>
</ul> </ul>
<h2>Test Environment</h2> <h3>Test Environment</h3>
<p> <p>
The platform used for these tests is a 1.6GHz Athlon with 1GB or memory The platform used for these tests is a 1.6GHz Athlon with 1GB or memory
@ -132,7 +124,7 @@ synchronous) and the asynchronous SQLite times are for
comparison against the asynchronous MySQL engine. comparison against the asynchronous MySQL engine.
</p> </p>
<h2>Test 1: 1000 INSERTs</h2> <h3>Test 1: 1000 INSERTs</h3>
<blockquote> <blockquote>
CREATE TABLE t1(a INTEGER, b INTEGER, c VARCHAR(100));<br> CREATE TABLE t1(a INTEGER, b INTEGER, c VARCHAR(100));<br>
INSERT INTO t1 VALUES(1,13153,'thirteen thousand one hundred fifty three');<br> INSERT INTO t1 VALUES(1,13153,'thirteen thousand one hundred fifty three');<br>
@ -162,7 +154,7 @@ the disk surface before continuing. For most of the 13 seconds in the
synchronous test, SQLite was sitting idle waiting on disk I/O to complete.</p> synchronous test, SQLite was sitting idle waiting on disk I/O to complete.</p>
<h2>Test 2: 25000 INSERTs in a transaction</h2> <h3>Test 2: 25000 INSERTs in a transaction</h3>
<blockquote> <blockquote>
BEGIN;<br> BEGIN;<br>
CREATE TABLE t2(a INTEGER, b INTEGER, c VARCHAR(100));<br> CREATE TABLE t2(a INTEGER, b INTEGER, c VARCHAR(100));<br>
@ -187,7 +179,7 @@ have to do any fsync()s until the very end. When unshackled in
this way, SQLite is much faster than either PostgreSQL and MySQL. this way, SQLite is much faster than either PostgreSQL and MySQL.
</p> </p>
<h2>Test 3: 25000 INSERTs into an indexed table</h2> <h3>Test 3: 25000 INSERTs into an indexed table</h3>
<blockquote> <blockquote>
BEGIN;<br> BEGIN;<br>
CREATE TABLE t3(a INTEGER, b INTEGER, c VARCHAR(100));<br> CREATE TABLE t3(a INTEGER, b INTEGER, c VARCHAR(100));<br>
@ -211,7 +203,7 @@ SQLite is not as fast at creating new index entries as the other engines
(see Test 6 below) but its overall speed is still better. (see Test 6 below) but its overall speed is still better.
</p> </p>
<h2>Test 4: 100 SELECTs without an index</h2> <h3>Test 4: 100 SELECTs without an index</h3>
<blockquote> <blockquote>
BEGIN;<br> BEGIN;<br>
SELECT count(*), avg(b) FROM t2 WHERE b>=0 AND b<1000;<br> SELECT count(*), avg(b) FROM t2 WHERE b>=0 AND b<1000;<br>
@ -237,7 +229,7 @@ enhancements have increased its speed so that it is now the fastest
of the group. of the group.
</p> </p>
<h2>Test 5: 100 SELECTs on a string comparison</h2> <h3>Test 5: 100 SELECTs on a string comparison</h3>
<blockquote> <blockquote>
BEGIN;<br> BEGIN;<br>
SELECT count(*), avg(b) FROM t2 WHERE c LIKE '%one%';<br> SELECT count(*), avg(b) FROM t2 WHERE c LIKE '%one%';<br>
@ -261,7 +253,7 @@ SQLite is over three times faster than PostgreSQL here and about 30%
faster than MySQL. faster than MySQL.
</p> </p>
<h2>Test 6: Creating an index</h2> <h3>Test 6: Creating an index</h3>
<blockquote> <blockquote>
CREATE INDEX i2a ON t2(a);<br>CREATE INDEX i2b ON t2(b); CREATE INDEX i2a ON t2(a);<br>CREATE INDEX i2b ON t2(b);
</blockquote><table border=0 cellpadding=0 cellspacing=0> </blockquote><table border=0 cellpadding=0 cellspacing=0>
@ -278,7 +270,7 @@ is being worked on. Hopefully, future versions of SQLite will do better
here. here.
</p> </p>
<h2>Test 7: 5000 SELECTs with an index</h2> <h3>Test 7: 5000 SELECTs with an index</h3>
<blockquote> <blockquote>
SELECT count(*), avg(b) FROM t2 WHERE b>=0 AND b<100;<br> SELECT count(*), avg(b) FROM t2 WHERE b>=0 AND b<100;<br>
SELECT count(*), avg(b) FROM t2 WHERE b>=100 AND b<200;<br> SELECT count(*), avg(b) FROM t2 WHERE b>=100 AND b<200;<br>
@ -300,7 +292,7 @@ All three database engines run faster when they have indices to work with.
But SQLite is still the fastest. But SQLite is still the fastest.
</p> </p>
<h2>Test 8: 1000 UPDATEs without an index</h2> <h3>Test 8: 1000 UPDATEs without an index</h3>
<blockquote> <blockquote>
BEGIN;<br> BEGIN;<br>
UPDATE t1 SET b=b*2 WHERE a>=0 AND a<10;<br> UPDATE t1 SET b=b*2 WHERE a>=0 AND a<10;<br>
@ -325,7 +317,7 @@ normally a very fast engine. Perhaps this problem has been addressed
in later versions of MySQL. in later versions of MySQL.
</p> </p>
<h2>Test 9: 25000 UPDATEs with an index</h2> <h3>Test 9: 25000 UPDATEs with an index</h3>
<blockquote> <blockquote>
BEGIN;<br> BEGIN;<br>
UPDATE t2 SET b=468026 WHERE a=1;<br> UPDATE t2 SET b=468026 WHERE a=1;<br>
@ -348,7 +340,7 @@ MySQL on this test. But recent optimizations to SQLite have more
than doubled speed of UPDATEs. than doubled speed of UPDATEs.
</p> </p>
<h2>Test 10: 25000 text UPDATEs with an index</h2> <h3>Test 10: 25000 text UPDATEs with an index</h3>
<blockquote> <blockquote>
BEGIN;<br> BEGIN;<br>
UPDATE t2 SET c='one hundred forty eight thousand three hundred eighty two' WHERE a=1;<br> UPDATE t2 SET c='one hundred forty eight thousand three hundred eighty two' WHERE a=1;<br>
@ -377,7 +369,7 @@ knowledgeable administrator might be able to get PostgreSQL to run a lot
faster here by tweaking and tuning the server a little. faster here by tweaking and tuning the server a little.
</p> </p>
<h2>Test 11: INSERTs from a SELECT</h2> <h3>Test 11: INSERTs from a SELECT</h3>
<blockquote> <blockquote>
BEGIN;<br>INSERT INTO t1 SELECT b,a,c FROM t2;<br>INSERT INTO t2 SELECT b,a,c FROM t1;<br>COMMIT; BEGIN;<br>INSERT INTO t1 SELECT b,a,c FROM t2;<br>INSERT INTO t2 SELECT b,a,c FROM t1;<br>COMMIT;
</blockquote><table border=0 cellpadding=0 cellspacing=0> </blockquote><table border=0 cellpadding=0 cellspacing=0>
@ -394,7 +386,7 @@ The PostgreSQL engine is still thrashing - most of the 61 seconds it used
were spent waiting on disk I/O. were spent waiting on disk I/O.
</p> </p>
<h2>Test 12: DELETE without an index</h2> <h3>Test 12: DELETE without an index</h3>
<blockquote> <blockquote>
DELETE FROM t2 WHERE c LIKE '%fifty%'; DELETE FROM t2 WHERE c LIKE '%fifty%';
</blockquote><table border=0 cellpadding=0 cellspacing=0> </blockquote><table border=0 cellpadding=0 cellspacing=0>
@ -410,7 +402,7 @@ but the asynchronous version is the fastest.
The difference is the extra time needed to execute fsync(). The difference is the extra time needed to execute fsync().
</p> </p>
<h2>Test 13: DELETE with an index</h2> <h3>Test 13: DELETE with an index</h3>
<blockquote> <blockquote>
DELETE FROM t2 WHERE a>10 AND a<20000; DELETE FROM t2 WHERE a>10 AND a<20000;
</blockquote><table border=0 cellpadding=0 cellspacing=0> </blockquote><table border=0 cellpadding=0 cellspacing=0>
@ -426,7 +418,7 @@ PostgreSQL is faster than MySQL. The asynchronous SQLite is,
however, faster then both the other two. however, faster then both the other two.
</p> </p>
<h2>Test 14: A big INSERT after a big DELETE</h2> <h3>Test 14: A big INSERT after a big DELETE</h3>
<blockquote> <blockquote>
INSERT INTO t2 SELECT * FROM t1; INSERT INTO t2 SELECT * FROM t1;
</blockquote><table border=0 cellpadding=0 cellspacing=0> </blockquote><table border=0 cellpadding=0 cellspacing=0>
@ -443,7 +435,7 @@ sequence of DELETEs followed by new INSERTs. As this test shows, the
problem has now been resolved. problem has now been resolved.
</p> </p>
<h2>Test 15: A big DELETE followed by many small INSERTs</h2> <h3>Test 15: A big DELETE followed by many small INSERTs</h3>
<blockquote> <blockquote>
BEGIN;<br> BEGIN;<br>
DELETE FROM t1;<br> DELETE FROM t1;<br>
@ -465,7 +457,7 @@ SQLite is very good at doing INSERTs within a transaction, which probably
explains why it is so much faster than the other databases at this test. explains why it is so much faster than the other databases at this test.
</p> </p>
<h2>Test 16: DROP TABLE</h2> <h3>Test 16: DROP TABLE</h3>
<blockquote> <blockquote>
DROP TABLE t1;<br>DROP TABLE t2;<br>DROP TABLE t3; DROP TABLE t1;<br>DROP TABLE t2;<br>DROP TABLE t3;
</blockquote><table border=0 cellpadding=0 cellspacing=0> </blockquote><table border=0 cellpadding=0 cellspacing=0>
@ -489,10 +481,4 @@ so if SQLite takes a little longer, that is not seen as a big problem.
</p> </p>
} }
puts { footer $rcsid
<p><hr /></p>
<p><a href="index.html"><img src="/goback.jpg" border=0 />
Back to the SQLite Home Page</a>
</p>
</body></html>}

View File

@ -1,27 +1,18 @@
# #
# Run this Tcl script to generate the sqlite.html file. # Run this Tcl script to generate the sqlite.html file.
# #
set rcsid {$Id: sqlite.tcl,v 1.21 2003/06/29 16:11:13 drh Exp $} set rcsid {$Id: sqlite.tcl,v 1.22 2004/05/31 15:06:30 drh Exp $}
source common.tcl
puts {<html> header {sqlite: A program of interacting with SQLite databases}
<head>
<title>sqlite: A program of interacting with SQLite databases</title>
</head>
<body bgcolor=white>
<h1 align=center>
sqlite: A program to administer SQLite databases
</h1>}
puts "<p align=center>
(This page was last modified on [lrange $rcsid 3 4] UTC)
</p>"
puts { puts {
<h2>sqlite: A command-line program to administer SQLite databases</h2>
<p>The SQLite library includes a simple command-line utility named <p>The SQLite library includes a simple command-line utility named
<b>sqlite</b> that allows the user to manually enter and execute SQL <b>sqlite</b> that allows the user to manually enter and execute SQL
commands against an SQLite database. This document provides a brief commands against an SQLite database. This document provides a brief
introduction on how to use <b>sqlite</b>. introduction on how to use <b>sqlite</b>.
<h2>Getting Started</h2> <h3>Getting Started</h3>
<p>To start the <b>sqlite</b> program, just type "sqlite" followed by <p>To start the <b>sqlite</b> program, just type "sqlite" followed by
the name the file that holds the SQLite database. If the file does the name the file that holds the SQLite database. If the file does
@ -84,7 +75,7 @@ sqlite>
puts { puts {
<h2>Aside: Querying the SQLITE_MASTER table</h2> <h3>Aside: Querying the SQLITE_MASTER table</h3>
<p>The database schema in an SQLite database is stored in <p>The database schema in an SQLite database is stored in
a special table named "sqlite_master". a special table named "sqlite_master".
@ -123,7 +114,7 @@ is stored in another special table named "sqlite_temp_master". The
"sqlite_temp_master" table is temporary itself. "sqlite_temp_master" table is temporary itself.
</p> </p>
<h2>Special commands to sqlite</h2> <h3>Special commands to sqlite</h3>
<p> <p>
Most of the time, sqlite just reads lines of input and passes them Most of the time, sqlite just reads lines of input and passes them
@ -168,7 +159,7 @@ sqlite>
} }
puts { puts {
<h2>Changing Output Formats</h2> <h3>Changing Output Formats</h3>
<p>The sqlite program is able to show the results of a query <p>The sqlite program is able to show the results of a query
in five different formats: "line", "column", "list", "html", and "insert". in five different formats: "line", "column", "list", "html", and "insert".
@ -305,7 +296,7 @@ CGI.</p>
} }
puts { puts {
<h2>Writing results to a file</h2> <h3>Writing results to a file</h3>
<p>By default, sqlite sends query results to standard output. You <p>By default, sqlite sends query results to standard output. You
can change this using the ".output" command. Just put the name of can change this using the ".output" command. Just put the name of
@ -326,7 +317,7 @@ $
} }
puts { puts {
<h2>Querying the database schema</h2> <h3>Querying the database schema</h3>
<p>The sqlite program provides several convenience commands that <p>The sqlite program provides several convenience commands that
are useful for looking at the schema of the database. There is are useful for looking at the schema of the database. There is
@ -441,7 +432,7 @@ sqlite> (((.databases)))
} }
puts { puts {
<h2>Converting An Entire Database To An ASCII Text File</h2> <h3>Converting An Entire Database To An ASCII Text File</h3>
<p>Use the ".dump" command to convert the entire contents of a <p>Use the ".dump" command to convert the entire contents of a
database into a single ASCII text file. This file can be converted database into a single ASCII text file. This file can be converted
@ -495,7 +486,7 @@ $ (((pg_dump -a ex2 | sqlite ex3)))
} }
puts { puts {
<h2>Other Dot Commands</h2> <h3>Other Dot Commands</h3>
<p>The ".explain" dot command can be used to set the output mode <p>The ".explain" dot command can be used to set the output mode
to "column" and to set the column widths to values that are reasonable to "column" and to set the column widths to values that are reasonable
@ -539,7 +530,7 @@ index is locked.</p>
<p>And finally, we mention the ".exit" command which causes the <p>And finally, we mention the ".exit" command which causes the
sqlite program to exit.</p> sqlite program to exit.</p>
<h2>Using sqlite in a shell script</h2> <h3>Using sqlite in a shell script</h3>
<p> <p>
One way to use sqlite in a shell script is to use "echo" or One way to use sqlite in a shell script is to use "echo" or
@ -564,7 +555,7 @@ $
} }
puts { puts {
<h2>Ending shell commands</h2> <h3>Ending shell commands</h3>
<p> <p>
SQLite commands are normally terminated by a semicolon. In the shell SQLite commands are normally terminated by a semicolon. In the shell
@ -576,18 +567,11 @@ to that function.</p>
} }
puts { puts {
<h2>Compiling the sqlite program from sources</h2> <h3>Compiling the sqlite program from sources</h3>
<p> <p>
The sqlite program is built automatically when you compile the The sqlite program is built automatically when you compile the
sqlite library. Just get a copy of the source tree, run sqlite library. Just get a copy of the source tree, run
"configure" and then "make".</p> "configure" and then "make".</p>
} }
footer $rcsid
puts {
<p><hr /></p>
<p><a href="index.html"><img src="/goback.jpg" border=0 />
Back to the SQLite Home Page</a>
</p>
</body></html>}

View File

@ -1,26 +1,17 @@
# #
# Run this Tcl script to generate the tclsqlite.html file. # Run this Tcl script to generate the tclsqlite.html file.
# #
set rcsid {$Id: tclsqlite.tcl,v 1.8 2003/08/19 14:31:02 drh Exp $} set rcsid {$Id: tclsqlite.tcl,v 1.9 2004/05/31 15:06:30 drh Exp $}
source common.tcl
puts {<html> header {The Tcl interface to the SQLite library}
<head>
<title>The Tcl interface to the SQLite library</title>
</head>
<body bgcolor=white>
<h1 align=center>
The Tcl interface to the SQLite library
</h1>}
puts "<p align=center>
(This page was last modified on [lrange $rcsid 3 4] UTC)
</p>"
puts { puts {
<h2>The Tcl interface to the SQLite library</h2>
<p>The SQLite library is designed to be very easy to use from <p>The SQLite library is designed to be very easy to use from
a Tcl or Tcl/Tk script. This document gives an overview of the Tcl a Tcl or Tcl/Tk script. This document gives an overview of the Tcl
programming interface.</p> programming interface.</p>
<h2>The API</h2> <h3>The API</h3>
<p>The interface to the SQLite library consists of single <p>The interface to the SQLite library consists of single
tcl command named <b>sqlite</b>. Because there is only this tcl command named <b>sqlite</b>. Because there is only this
@ -69,7 +60,7 @@ defined:</p>
<p>We will explain all of these methods, though not in that order. <p>We will explain all of these methods, though not in that order.
We will be begin with the "close" method.</p> We will be begin with the "close" method.</p>
<h2>The "close" method</h2> <h3>The "close" method</h3>
<p> <p>
As its name suggests, the "close" method to an SQLite database just As its name suggests, the "close" method to an SQLite database just
@ -93,7 +84,7 @@ to the previous:</p>
rename db1 {}</b> rename db1 {}</b>
</blockquote> </blockquote>
<h2>The "eval" method</h2> <h3>The "eval" method</h3>
<p> <p>
The most useful <i>dbcmd</i> method is "eval". The eval method is used The most useful <i>dbcmd</i> method is "eval". The eval method is used
@ -193,7 +184,7 @@ a=2 b=goodbye<br>
a=3 b=howdy!</b> a=3 b=howdy!</b>
</blockquote> </blockquote>
<h2>The "complete" method</h2> <h3>The "complete" method</h3>
<p> <p>
The "complete" method takes a string of supposed SQL as its only argument. The "complete" method takes a string of supposed SQL as its only argument.
@ -206,7 +197,7 @@ This is really just an interface to the <b>sqlite_complete()</b> C
function. Refer to the <a href="c_interface.html">C/C++ interface</a> function. Refer to the <a href="c_interface.html">C/C++ interface</a>
specification for additional information.</p> specification for additional information.</p>
<h2>The "timeout" method</h2> <h3>The "timeout" method</h3>
<p>The "timeout" method is used to control how long the SQLite library <p>The "timeout" method is used to control how long the SQLite library
will wait for locks to clear before giving up on a database transaction. will wait for locks to clear before giving up on a database transaction.
@ -233,7 +224,7 @@ number. For example:</p>
to wait for the lock to clear. So in the example above, the maximum delay to wait for the lock to clear. So in the example above, the maximum delay
would be 2 seconds.</p> would be 2 seconds.</p>
<h2>The "busy" method</h2> <h3>The "busy" method</h3>
<p>The "busy" method, like "timeout", only comes into play when the <p>The "busy" method, like "timeout", only comes into play when the
database is locked. But the "busy" method gives the programmer much more database is locked. But the "busy" method gives the programmer much more
@ -245,12 +236,12 @@ so that the lock can be tried again. The callback procedure should
return "0" if it wants SQLite to try again to open the database and return "0" if it wants SQLite to try again to open the database and
should return "1" if it wants SQLite to abandon the current operation. should return "1" if it wants SQLite to abandon the current operation.
<h2>The "last_insert_rowid" method</h2> <h3>The "last_insert_rowid" method</h3>
<p>The "last_insert_rowid" method returns an integer which is the ROWID <p>The "last_insert_rowid" method returns an integer which is the ROWID
of the most recently inserted database row.</p> of the most recently inserted database row.</p>
<h2>The "onecolumn" method</h2> <h3>The "onecolumn" method</h3>
<p>The "onecolumn" method works like "eval" in that it evaluates the <p>The "onecolumn" method works like "eval" in that it evaluates the
SQL query statement given as its argument. The difference is that SQL query statement given as its argument. The difference is that
@ -261,18 +252,11 @@ first row of the query result.</p>
do a "<tt>[lindex&nbsp;...&nbsp;0]</tt>" on the results of an "eval" do a "<tt>[lindex&nbsp;...&nbsp;0]</tt>" on the results of an "eval"
in order to extract a single column result.</p> in order to extract a single column result.</p>
<h2>The "changes" method</h2> <h3>The "changes" method</h3>
<p>The "changes" method returns an integer which is the number of rows <p>The "changes" method returns an integer which is the number of rows
in the database that were inserted, deleted, and/or modified by the most in the database that were inserted, deleted, and/or modified by the most
recent "eval" method.</p> recent "eval" method.</p>
} }
footer $rcsid
puts {
<p><hr /></p>
<p><a href="index.html"><img src="/goback.jpg" border=0 />
Back to the SQLite Home Page</a>
</p>
</body></html>}

View File

@ -1,21 +1,12 @@
# #
# Run this Tcl script to generate the vdbe.html file. # Run this Tcl script to generate the vdbe.html file.
# #
set rcsid {$Id: vdbe.tcl,v 1.11 2003/06/29 16:11:13 drh Exp $} set rcsid {$Id: vdbe.tcl,v 1.12 2004/05/31 15:06:30 drh Exp $}
source common.tcl
puts {<html> header {The Virtual Database Engine of SQLite}
<head>
<title>The Virtual Database Engine of SQLite</title>
</head>
<body bgcolor=white>
<h1 align=center>
The Virtual Database Engine of SQLite
</h1>}
puts "<p align=center>
(This page was last modified on [lrange $rcsid 3 4] UTC)
</p>"
puts { puts {
<h2>The Virtual Database Engine of SQLite</h2>
<blockquote><b> <blockquote><b>
This document describes the virtual machine used in SQLite version 2.8.0. This document describes the virtual machine used in SQLite version 2.8.0.
</b></blockquote> </b></blockquote>
@ -1989,11 +1980,4 @@ feel free to fix them and/or contact the author at
<a href="mailto:drh@hwaci.com">drh@hwaci.com</a>. Your bug fixes or <a href="mailto:drh@hwaci.com">drh@hwaci.com</a>. Your bug fixes or
suggestions are always welcomed.</p> suggestions are always welcomed.</p>
} }
footer $rcsid
puts {
<p><hr /></p>
<p><a href="index.html"><img src="/goback.jpg" border=0 />
Back to the SQLite Home Page</a>
</p>
</body></html>}