From e36d23a85ebff914d74bb541558c2b6082b78edb Mon Sep 17 00:00:00 2001 From: dan miller Date: Sat, 20 Oct 2007 02:49:29 +0000 Subject: sqlite source (unix build) added to libraries --- .../sqlite/unix/sqlite-3.5.1/www/different.tcl | 224 +++++++++++++++++++++ 1 file changed, 224 insertions(+) create mode 100644 libraries/sqlite/unix/sqlite-3.5.1/www/different.tcl (limited to 'libraries/sqlite/unix/sqlite-3.5.1/www/different.tcl') diff --git a/libraries/sqlite/unix/sqlite-3.5.1/www/different.tcl b/libraries/sqlite/unix/sqlite-3.5.1/www/different.tcl new file mode 100644 index 0000000..1858e6f --- /dev/null +++ b/libraries/sqlite/unix/sqlite-3.5.1/www/different.tcl @@ -0,0 +1,224 @@ +set rcsid {$Id: different.tcl,v 1.8 2006/12/18 14:12:21 drh Exp $} +source common.tcl +header {Distinctive Features Of SQLite} +puts { +
+This page highlights some of the characteristics of SQLite that are +unusual and which make SQLite different from many other SQL +database engines. +
+} +proc feature {tag name text} { + puts "" + puts "$name
\n" + puts "$text\n" +} + +feature zeroconfig {Zero-Configuration} { + SQLite does not need to be "installed" before it is used. + There is no "setup" procedure. There is no + server process that needs to be started, stopped, or configured. + There is + no need for an administrator to create a new database instance or assign + access permissions to users. + SQLite uses no configuration files. + Nothing needs to be done to tell the system that SQLite is running. + No actions are required to recover after a system crash or power failure. + There is nothing to troubleshoot. +
+ SQLite just works. +
+ Other more familiar database engines run great once you get them going. + But doing the initial installation and configuration can be + intimidatingly complex. +} + +feature serverless {Serverless} { + Most SQL database engines are implemented as a separate server + process. Programs that want to access the database communicate + with the server using some kind of interprocess communcation + (typically TCP/IP) to send requests to the server and to receive + back results. SQLite does not work this way. With SQLite, the + process that wants to access the database reads and writes + directly from the database files on disk. There is no intermediary + server process. +
+ There are advantages and disadvantages to being serverless. The + main advantage is that there is no separate server process + to install, setup, configure, initialize, manage, and troubleshoot. + This is one reason why SQLite is a "zero-configuration" database + engine. Programs that use SQLite require no administrative support + for setting up the database engine before they are run. Any program + that is able to access the disk is able to use an SQLite database. +
+ On the other hand, a database engine that uses a server can provide + better protection from bugs in the client application - stray pointers + in a client cannot corrupt memory on the server. And because a server + is a single persistent process, it is able control database access with + more precision, allowing for finer grain locking and better concurrancy. +
+ Most SQL database engines are client/server based. Of those that are + serverless, SQLite is the only one that this author knows of that + allows multiple applications to access the same database at the same time. +} + +feature onefile {Single Database File} { + An SQLite database is a single ordinary disk file that can be located + anywhere in the directory hierarchy. If SQLite can read + the disk file then it can read anything in the database. If the disk + file and its directory are writable, then SQLite can change anything + in the database. Database files can easily be copied onto a USB + memory stick or emailed for sharing. +
+ Other SQL database engines tend to store data as a large collection of + files. Often these files are in a standard location that only the + database engine itself can access. This makes the data more secure, + but also makes it harder to access. Some SQL database engines provide + the option of writing directly to disk and bypassing the filesystem + all together. This provides added performance, but at the cost of + considerable setup and maintenance complexity. +} + +feature small {Compact} { + When optimized for size, the whole SQLite library with everything enabled + is less than 225KiB in size (as measured on an ix86 using the "size" + utility from the GNU compiler suite.) Unneeded features can be disabled + at compile-time to further reduce the size of the library to under + 170KiB if desired. +
+ Most other SQL database engines are much larger than this. IBM boasts + that it's recently released CloudScape database engine is "only" a 2MiB + jar file - 10 times larger than SQLite even after it is compressed! + Firebird boasts that it's client-side library is only 350KiB. That's + 50% larger than SQLite and does not even contain the database engine. + The Berkeley DB library from Sleepycat is 450KiB and it omits SQL + support, providing the programmer with only simple key/value pairs. +} + +feature typing {Manifest typing} { + Most SQL database engines use static typing. A datatype is associated + with each column in a table and only values of that particular datatype + are allowed to be stored in that column. SQLite relaxes this restriction + by using manifest typing. + In manifest typing, the datatype is a property of the value itself, not + of the column in which the value is stored. + SQLite thus allows the user to store + any value of any datatype into any column regardless of the declared type + of that column. (There are some exceptions to this rule: An INTEGER + PRIMARY KEY column may only store integers. And SQLite attempts to coerce + values into the declared datatype of the column when it can.) +
+ As far as we can tell, the SQL language specification allows the use + of manifest typing. Nevertheless, most other SQL database engines are + statically typed and so some people + feel that the use of manifest typing is a bug in SQLite. But the authors + of SQLite feel very strongly that this is a feature. The use of manifest + typing in SQLite is a deliberate design decision which has proven in practice + to make SQLite more reliable and easier to use, especially when used in + combination with dynamically typed programming languages such as Tcl and + Python. +} + +feature flex {Variable-length records} { + Most other SQL database engines allocated a fixed amount of disk space + for each row in most tables. They play special tricks for handling + BLOBs and CLOBs which can be of wildly varying length. But for most + tables, if you declare a column to be a VARCHAR(100) then the database + engine will allocate + 100 bytes of disk space regardless of how much information you actually + store in that column. +
+ SQLite, in contrast, use only the amount of disk space actually + needed to store the information in a row. If you store a single + character in a VARCHAR(100) column, then only a single byte of disk + space is consumed. (Actually two bytes - there is some overhead at + the beginning of each column to record its datatype and length.) +
+ The use of variable-length records by SQLite has a number of advantages. + It results in smaller database files, obviously. It also makes the + database run faster, since there is less information to move to and from + disk. And, the use of variable-length records makes it possible for + SQLite to employ manifest typing instead of static typing. +} + +feature readable {Readable source code} { + The source code to SQLite is designed to be readable and accessible to + the average programmer. All procedures and data structures and many + automatic variables are carefully commented with useful information about + what they do. Boilerplate commenting is omitted. +} + +feature vdbe {SQL statements compile into virtual machine code} { + Every SQL database engine compiles each SQL statement into some kind of + internal data structure which is then used to carry out the work of the + statement. But in most SQL engines that internal data structure is a + complex web of interlinked structures and objects. In SQLite, the compiled + form of statements is a short program in a machine-language like + representation. Users of the database can view this + virtual machine language + by prepending the EXPLAIN keyword + to a query. +
+ The use of a virtual machine in SQLite has been a great benefit to + library's development. The virtual machine provides a crisp, well-defined + junction between the front-end of SQLite (the part that parses SQL + statements and generates virtual machine code) and the back-end (the + part that executes the virtual machine code and computes a result.) + The virtual machine allows the developers to see clearly and in an + easily readable form what SQLite is trying to do with each statement + it compiles, which is a tremendous help in debugging. + Depending on how it is compiled, SQLite also has the capability of + tracing the execution of the virtual machine - printing each + virtual machine instruction and its result as it executes. +} + +#feature binding {Tight bindings to dynamic languages} { +# Because it is embedded, SQLite can have a much tighter and more natural +# binding to high-level dynamic languages such as Tcl, Perl, Python, +# PHP, and Ruby. +# For example, +#} + +feature license {Public domain} { + The source code for SQLite is in the public domain. No claim of copyright + is made on any part of the core source code. (The documentation and test + code is a different matter - some sections of documentation and test logic + are governed by open-sources licenses.) All contributors to the + SQLite core software have signed affidavits specifically disavowing any + copyright interest in the code. This means that anybody is able to legally + do anything they want with the SQLite source code. +
+ There are other SQL database engines with liberal licenses that allow + the code to be broadly and freely used. But those other engines are + still governed by copyright law. SQLite is different in that copyright + law simply does not apply. +
+ The source code files for other SQL database engines typically begin + with a comment describing your license rights to view and copy that file. + The SQLite source code contains no license since it is not governed by + copyright. Instead of a license, the SQLite source code offers a blessing: +
+ May you do good and not evil+} + +feature extensions {SQL language extensions} { + SQLite provides a number of enhancements to the SQL language + not normally found in other database engines. + The EXPLAIN keyword and manifest typing have already been mentioned + above. SQLite also provides statements such as + REPLACE and the + ON CONFLICT clause that allow for + added control over the resolution of constraint conflicts. + SQLite supports ATTACH and + DETACH commands that allow multiple + independent databases to be used together in the same query. + And SQLite defines APIs that allows the user to add new + SQL functions + and collating sequences. +} + + +footer $rcsid -- cgit v1.1
+ May you find forgiveness for yourself and forgive others
+ May you share freely, never taking more than you give. +