-C Add\smore\stests\sof\sthe\ssqlite_interrupt()\slogic\s-\slooking\sfor\sa\sreported\nmemory\sleak.\s\s(Didn't\sfind\sit.)\s(CVS\s1246)
-D 2004-02-18T01:31:54
+C Begin\supdating\sthe\sarchitecture\sdescription\sto\sbetter\sdescribe\show\sthings\nare\scurrently\sput\stogether.\s(CVS\s1247)
+D 2004-02-18T16:56:32
F Makefile.in cfd75c46b335881999333a9e4b982fa8491f200b
F Makefile.linux-gcc b86a99c493a5bfb402d1d9178dcdc4bd4b32f906
F README f1de682fbbd94899d50aca13d387d1b3fd3be2dd
F tool/speedtest2.tcl ee2149167303ba8e95af97873c575c3e0fab58ff
F www/arch.fig d5f9752a4dbf242e9cfffffd3f5762b6c63b3bcf
F www/arch.png 82ef36db1143828a7abc88b1e308a5f55d4336f4
-F www/arch.tcl 44b589fc01d6829d43447ab40588b00aec5b9734
+F www/arch.tcl 1e5289d63fc45564c67e205bc503db74718436ca
+F www/arch2.fig 613b5ac63511109064c2f93c5754ee662219937d
+F www/arch2.gif 49c6bb36160f03ca2b89eaa5bfb1f560c7d68ee7
F www/audit.tcl 90e09d580f79c7efec0c7d6f447b7ec5c2dce5c0
F www/c_interface.tcl 17d8bd9e7b4fbdca47c30c8b9bcb728c351d55c0
F www/changes.tcl ca9871eb52fa669e40f2052ab45154dfe0b72985
F www/tclsqlite.tcl b9271d44dcf147a93c98f8ecf28c927307abd6da
F www/vdbe.tcl 9b9095d4495f37697fd1935d10e14c6015e80aa1
F www/whentouse.tcl a8335bce47cc2fddb07f19052cb0cb4d9129a8e4
-P 50e67948f89380f2f4b536add0b8179e6db960a5
-R 0fd46cdcb719452c286af1cf356d38ce
+P e4c8b1c3aa9d288f518c6394187354e6fa18978e
+R 9c0d8e2f5a853263270cb382693ec393
U drh
-Z 8eb9cfa9eaeb9d935dda443dd1d5d0a4
+Z 385597eeec31fcd3b70006a6664f87b7
#
# Run this Tcl script to generate the sqlite.html file.
#
-set rcsid {$Id: arch.tcl,v 1.9 2003/03/19 03:14:03 drh Exp $}
+set rcsid {$Id: arch.tcl,v 1.10 2004/02/18 16:56:32 drh Exp $}
puts {<html>
<head>
<table align="right" border="1" cellpadding="15" cellspacing="1">
<tr><th>Block Diagram Of SQLite</th></tr>
-<tr><td><img src="arch.png"></td></tr>
+<tr><td><img src="arch2.gif"></td></tr>
</table>
<p>This document describes the architecture of the SQLite library.
The information here is useful to those who want to understand or
follows will provide a quick overview of each of these components.
</p>
+<h2>History</h2>
+
+<p>
+There are two main C interfaces to the SQLite library:
+<b>sqlite_exec()</b> and <b>sqlite_compile()</b>. Prior to
+version 2.8.0 (2003-Feb-16) only sqlite_exec() was supported.
+For version 2.8.0, the sqlite_exec and sqlite_compile methods
+existed as peers. Beginning with version 2.8.13, the sqlite_compile
+method is the primary interface, and sqlite_exec is implemented
+using sqlite_compile. Externally, there are API extensions but
+not changes that break backwards compatibility. But internally,
+the plumbing is very different. The diagram at the right shows
+the structure of SQLite for version 2.8.13 and following.
+</p>
+
<h2>Interface</h2>
-<p>Most of the public interface to the SQLite library is implemented by
-four functions found in the <b>main.c</b> source file. The
+<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
+scattered about in other files where they can have access to data
+structures with file scope. The
<b>sqlite_get_table()</b> routine is implemented in <b>table.c</b>.
+<b>sqlite_step()</b> is found in <b>vdbe.c</b>.
+<b>sqlite_mprintf()</b> is found in <b>printf.c</b>.
The Tcl interface is implemented by <b>tclsqlite.c</b>. More
information on the C interface to SQLite is
<a href="c_interface.html">available separately</a>.<p>
those symbols which form the API for SQLite) begin
with <b>sqlite_</b>.</p>
+<h2>SQL Command Process</h2>
+
+<p>
+
<h2>Tokenizer</h2>
<p>When a string containing SQL statements is to be executed, the
its own header file <b>vdbe.h</b> that defines an interface
between the virtual machine and the rest of the SQLite library.</p>
-<h2>B-tree Driver</h2>
+<h2>Backend</h2>
+
+<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
+databases or the Red/Black Tree driver for in-memory databases.
+The <b>btree.h</b> source file contains the details.</p>
+
+<h2>Red/Black Tree</h2>
+
+<p>In-memory databases are stored in a red/black tree implementation
+contain in the <b>btree_rb.c</b> source file.
+</p>
+
+<h2>B-Tree</h2>
<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
--- /dev/null
+#FIG 3.2
+Landscape
+Center
+Inches
+Letter
+100.00
+Single
+-2
+1200 2
+0 32 #000000
+0 33 #868686
+0 34 #dfefd7
+0 35 #d7efef
+0 36 #efdbef
+0 37 #efdbd7
+0 38 #e7efcf
+0 39 #9e9e9e
+6 4950 4275 6525 4800
+2 2 0 0 0 33 52 0 20 0.000 0 0 -1 0 0 5
+ 5025 4350 6525 4350 6525 4800 5025 4800 5025 4350
+2 2 0 1 0 7 51 0 20 0.000 0 0 -1 0 0 5
+ 4950 4275 6450 4275 6450 4725 4950 4725 4950 4275
+4 1 0 50 0 2 12 0.0000 4 135 1335 5700 4575 Red/Black Tree\001
+-6
+6 5400 5475 6825 6000
+2 2 0 1 0 7 51 0 20 0.000 0 0 -1 0 0 5
+ 5400 5475 6750 5475 6750 5925 5400 5925 5400 5475
+2 2 0 0 0 33 52 0 20 0.000 0 0 -1 0 0 5
+ 5475 5550 6825 5550 6825 6000 5475 6000 5475 5550
+4 1 0 50 0 2 12 0.0000 4 135 630 6000 5775 Utilities\001
+-6
+6 5400 6300 6825 6825
+2 2 0 1 0 7 51 0 20 0.000 0 0 -1 0 0 5
+ 5400 6300 6750 6300 6750 6750 5400 6750 5400 6300
+2 2 0 0 0 33 52 0 20 0.000 0 0 -1 0 0 5
+ 5475 6375 6825 6375 6825 6825 5475 6825 5475 6375
+4 1 0 50 0 2 12 0.0000 4 135 855 6000 6600 Test Code\001
+-6
+2 2 0 0 0 33 52 0 20 0.000 0 0 -1 0 0 5
+ 5475 2625 6825 2625 6825 3525 5475 3525 5475 2625
+2 2 0 1 0 7 51 0 20 0.000 0 0 -1 0 0 5
+ 5400 2550 6750 2550 6750 3450 5400 3450 5400 2550
+2 3 0 1 0 35 55 0 20 0.000 0 0 -1 0 0 9
+ 2850 3675 4875 3675 4875 3975 6750 3975 6750 5025 4875 5025
+ 4875 6975 2850 6975 2850 3675
+2 2 0 1 0 7 51 0 20 0.000 0 0 -1 0 0 5
+ 3225 6300 4575 6300 4575 6750 3225 6750 3225 6300
+2 2 0 0 0 33 52 0 20 0.000 0 0 -1 0 0 5
+ 3300 6375 4650 6375 4650 6825 3300 6825 3300 6375
+2 2 0 1 0 7 51 0 20 0.000 0 0 -1 0 0 5
+ 3225 5475 4575 5475 4575 5925 3225 5925 3225 5475
+2 2 0 0 0 33 52 0 20 0.000 0 0 -1 0 0 5
+ 3300 5550 4650 5550 4650 6000 3300 6000 3300 5550
+2 2 0 1 0 7 51 0 20 0.000 0 0 -1 0 0 5
+ 3225 4725 4575 4725 4575 5175 3225 5175 3225 4725
+2 2 0 0 0 33 52 0 20 0.000 0 0 -1 0 0 5
+ 3300 4800 4650 4800 4650 5250 3300 5250 3300 4800
+2 2 0 1 0 7 51 0 20 0.000 0 0 -1 0 0 5
+ 3225 3900 4575 3900 4575 4350 3225 4350 3225 3900
+2 2 0 0 0 33 52 0 20 0.000 0 0 -1 0 0 5
+ 3300 3975 4650 3975 4650 4425 3300 4425 3300 3975
+2 2 0 1 0 7 51 0 20 0.000 0 0 -1 0 0 5
+ 5400 1800 6750 1800 6750 2250 5400 2250 5400 1800
+2 2 0 0 0 33 52 0 20 0.000 0 0 -1 0 0 5
+ 5475 1875 6825 1875 6825 2325 5475 2325 5475 1875
+2 2 0 1 0 7 51 0 20 0.000 0 0 -1 0 0 5
+ 5400 1050 6750 1050 6750 1500 5400 1500 5400 1050
+2 2 0 0 0 33 52 0 20 0.000 0 0 -1 0 0 5
+ 5475 1125 6825 1125 6825 1575 5475 1575 5475 1125
+2 2 0 1 0 7 51 0 20 0.000 0 0 -1 0 0 5
+ 3225 1050 4575 1050 4575 1500 3225 1500 3225 1050
+2 2 0 0 0 33 52 0 20 0.000 0 0 -1 0 0 5
+ 3300 1125 4650 1125 4650 1575 3300 1575 3300 1125
+2 2 0 1 0 7 51 0 20 0.000 0 0 -1 0 0 5
+ 3225 1800 4575 1800 4575 2250 3225 2250 3225 1800
+2 2 0 0 0 33 52 0 20 0.000 0 0 -1 0 0 5
+ 3300 1875 4650 1875 4650 2325 3300 2325 3300 1875
+2 2 0 1 0 7 51 0 20 0.000 0 0 -1 0 0 5
+ 3225 2550 4575 2550 4575 3000 3225 3000 3225 2550
+2 2 0 0 0 33 52 0 20 0.000 0 0 -1 0 0 5
+ 3300 2625 4650 2625 4650 3075 3300 3075 3300 2625
+2 1 0 1 0 38 50 0 -1 0.000 0 0 -1 1 0 2
+ 1 1 1.00 60.00 120.00
+ 3900 1500 3900 1800
+2 1 0 1 0 38 50 0 -1 0.000 0 0 -1 1 0 2
+ 1 1 1.00 60.00 120.00
+ 3900 2250 3900 2550
+2 1 0 1 0 38 50 0 -1 0.000 0 0 -1 1 0 2
+ 1 1 1.00 60.00 120.00
+ 3900 3000 3900 3900
+2 1 0 1 0 38 50 0 -1 0.000 0 0 -1 1 0 2
+ 1 1 1.00 60.00 120.00
+ 4575 1950 5400 1350
+2 1 0 1 0 38 50 0 -1 0.000 0 0 -1 1 0 2
+ 1 1 1.00 60.00 120.00
+ 5400 2925 4650 2175
+2 1 0 1 0 38 50 0 -1 0.000 0 0 -1 1 0 2
+ 1 1 1.00 60.00 120.00
+ 3900 4350 3900 4725
+2 1 0 1 0 38 50 0 -1 0.000 0 0 -1 1 0 2
+ 1 1 1.00 60.00 120.00
+ 4575 4200 4950 4500
+2 1 0 1 0 38 50 0 -1 0.000 0 0 -1 1 0 2
+ 1 1 1.00 60.00 120.00
+ 3900 5175 3900 5475
+2 1 0 1 0 38 50 0 -1 0.000 0 0 -1 1 0 2
+ 1 1 1.00 60.00 120.00
+ 3900 5925 3900 6300
+2 2 0 1 0 37 55 0 20 0.000 0 0 -1 0 0 5
+ 5175 750 7200 750 7200 3750 5175 3750 5175 750
+2 2 0 1 0 34 55 0 20 0.000 0 0 -1 0 0 5
+ 2850 750 4875 750 4875 3375 2850 3375 2850 750
+2 1 0 1 0 38 50 0 -1 0.000 0 0 -1 1 0 2
+ 1 1 1.00 60.00 120.00
+ 6075 1500 6075 1800
+2 1 0 1 0 38 50 0 -1 0.000 0 0 -1 1 0 2
+ 1 1 1.00 60.00 120.00
+ 6075 2250 6075 2550
+2 2 0 1 0 38 55 0 20 0.000 0 0 -1 0 0 5
+ 5175 5250 7200 5250 7200 6975 5175 6975 5175 5250
+4 1 0 50 0 2 12 0.0000 4 135 855 6075 1350 Tokenizer\001
+4 1 0 50 0 2 12 0.0000 4 135 570 6075 2100 Parser\001
+4 1 0 50 0 2 12 0.0000 4 135 420 6075 2925 Code\001
+4 1 0 50 0 2 12 0.0000 4 135 855 6075 3150 Generator\001
+4 1 0 50 0 2 12 0.0000 4 135 720 3900 4200 Backend\001
+4 1 0 50 0 2 12 0.0000 4 135 1050 3900 6600 OS Interface\001
+4 1 0 50 0 2 12 0.0000 4 135 615 3900 5025 B-Tree\001
+4 1 0 50 0 2 12 0.0000 4 180 495 3900 5775 Pager\001
+4 1 0 50 0 1 12 1.5708 4 180 1020 7125 2250 SQL Compiler\001
+4 1 0 50 0 1 12 1.5708 4 135 885 7125 6150 Accessories\001
+4 1 0 50 0 1 12 1.5708 4 135 645 3075 5250 Backend\001
+4 1 0 50 0 1 12 1.5708 4 135 345 3075 2025 Core\001
+4 1 0 50 0 2 12 0.0000 4 135 1290 3900 2850 Virtual Machine\001
+4 1 0 50 0 2 12 0.0000 4 165 1185 3900 1995 SQL Command\001
+4 1 0 50 0 2 12 0.0000 4 135 855 3900 2183 Processor\001
+4 1 0 50 0 2 14 0.0000 4 150 870 3900 1350 Interface\001