diff --git a/Makefile.in b/Makefile.in
index 6d28a33662..37c7dab7a6 100644
--- a/Makefile.in
+++ b/Makefile.in
@@ -213,6 +213,9 @@ crosscompile.html: $(TOP)/www/crosscompile.tcl
mingw.html: $(TOP)/www/mingw.tcl
tclsh $(TOP)/www/mingw.tcl >mingw.html
+tclsqlite.html: $(TOP)/www/tclsqlite.tcl
+ tclsh $(TOP)/www/tclsqlite.tcl >tclsqlite.html
+
# Files to be published on the website.
#
@@ -229,7 +232,8 @@ PUBLISH = \
vdbe.html \
c_interface.html \
crosscompile.html \
- mingw.html
+ mingw.html \
+ tclsqlite.html
website: $(PUBLISH)
diff --git a/VERSION b/VERSION
index 238d6e882a..b0f3d96f87 100644
--- a/VERSION
+++ b/VERSION
@@ -1 +1 @@
-1.0.7
+1.0.8
diff --git a/manifest b/manifest
index 85980a3070..fbd74ca813 100644
--- a/manifest
+++ b/manifest
@@ -1,9 +1,9 @@
-C Fix\sa\sproblem\swith\sthe\sconfigure\sscript\s(CVS\s1703)
-D 2000-09-29T15:15:53
+C Documenting\sthe\sTCL\sinterface\s(CVS\s149)
+D 2000-09-30T22:46:06
F COPYRIGHT 74a8a6531a42e124df07ab5599aad63870fa0bd4
-F Makefile.in 39f684ee06a661157793f01cce98d43026fc2c06
+F Makefile.in 2fe404a488607712e569d69974d7929bae06ad1e
F README 51f6a4e7408b34afa5bc1c0485f61b6a4efb6958
-F VERSION c4ef5804e5824ee814fdd368026a5d21314bdbed
+F VERSION c2e64b60cb74d152b5b5a0822f0e8cb673c928da
F configure 3dc1edb9dcf60215e31ff72b447935ab62211442 x
F configure.in d892ca33db7e88a055519ce2f36dcb11020e8fff
F doc/lemon.html e233a3e97a779c7a87e1bc4528c664a58e49dd47
@@ -21,7 +21,7 @@ F src/shell.tcl 27ecbd63dd88396ad16d81ab44f73e6c0ea9d20e
F src/sqlite.h.in 1e0e4495172f752935ad534871ff726ae509d2f0
F src/sqliteInt.h b65fdecac7281aafb4c9ff3e79ea1b5546478385
F src/table.c 12f0165b47178b54a675d25ed373ee7e798d6ff0
-F src/tclsqlite.c a08428125ba2429b71764d5365653771ded4a2b8
+F src/tclsqlite.c 7ccccae67fb36ed60ec98282953bf5dad0f9c16f
F src/tokenize.c 097bec5843d4a0fb4509e036fee93bac080c5e73
F src/update.c 51b9ef7434b15e31096155da920302e9db0d27fc
F src/util.c 782f87af3c48c898631a2d5b7074437c899f6f13
@@ -63,16 +63,17 @@ F www/arch.fig 4f246003b7da23bd63b8b0af0618afb4ee3055c8
F www/arch.png 8dae0766d42ed3de9ed013c1341a5792bcf633e6
F www/arch.tcl a40380c1fe0080c43e6cc5c20ed70731511b06be
F www/c_interface.tcl 73b5c1354e250a12ceaaccc376611351c867146a
-F www/changes.tcl e4fb0a308d62309dba40527ad3fddba825745e4c
+F www/changes.tcl d62039b5387cc0871ec1bd3b15065a7c7d421cb1
F www/crosscompile.tcl 19734ce7f18b16ff2ed8479412abf8aca56e1dcc
F www/fileformat.tcl cfb7fba80b7275555281ba2f256c00734bcdd1c9
-F www/index.tcl 2f5cc070b8fa8c3fc2f71bba4e6b7877d528fbde
+F www/index.tcl b19418d506f90968deef972bf1b427d98bdf13e0
F www/lang.tcl 9192e114b19987e630a41e879585b87006eb84a1
F www/mingw.tcl fc5f4ba9d336b6e8c97347cc6496d6162461ef60
F www/opcode.tcl cb3a1abf8b7b9be9f3a228d097d6bf8b742c2b6f
F www/sqlite.tcl cb0d23d8f061a80543928755ec7775da6e4f362f
+F www/tclsqlite.tcl 21ecd82eaea3ce3d08593a9a2d2bfdb3c1f7b547
F www/vdbe.tcl bcbfc33bcdd0ebad95eab31286adb9e1bc289520
-P 2aeb82db3ef6fc13eafa4fcf614e8f1dfd247abf
-R 374764ea3793b387c2fde1f92050f82f
+P ed5f5404ad804aec21ad971d59af834929381b5b
+R 3e751dc5aea8f130e00211562c95fd7d
U drh
-Z 42aab9ea0ff2eec024d3c6a658fe82fd
+Z 7e17d7124dec057be794cd1546e45e70
diff --git a/manifest.uuid b/manifest.uuid
index df24a18168..ab848b13dd 100644
--- a/manifest.uuid
+++ b/manifest.uuid
@@ -1 +1 @@
-ed5f5404ad804aec21ad971d59af834929381b5b
\ No newline at end of file
+7e0bacedf928095b29e7166eacd2356e8169d6dd
\ No newline at end of file
diff --git a/src/tclsqlite.c b/src/tclsqlite.c
index b4bdd88938..0399b3f198 100644
--- a/src/tclsqlite.c
+++ b/src/tclsqlite.c
@@ -23,7 +23,7 @@
*************************************************************************
** A TCL Interface to SQLite
**
-** $Id: tclsqlite.c,v 1.9 2000/09/21 13:01:37 drh Exp $
+** $Id: tclsqlite.c,v 1.10 2000/09/30 22:46:07 drh Exp $
*/
#ifndef NO_TCL /* Omit this whole file if TCL is unavailable */
@@ -68,6 +68,7 @@ static int DbEvalCallback(
int i, rc;
if( cbData->zArray[0] ){
if( cbData->once ){
+ Tcl_SetVar2(cbData->interp, cbData->zArray, "*", "", 0);
for(i=0; i$desc
+(This page was last modified on [lrange $rcsid 3 4] GMT) +
" + +puts { +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 +programming interface.
+ +The interface to the SQLite library consists of single +tcl command named sqlite. Because there is only this +one interface command, the interface is not placed in a separate +namespace.
+ +The sqlite command is used as follows:
+ ++sqlite dbcmd database-directory-name ++ +
+The sqlite command opens the SQLite database located in the +directory named by the second argument. If the database or directory +does not exist, it is created. The sqlite command +also creates a new Tcl +command to control the database. The name of the new Tcl command +is given by the first argument. This approach is similar to the +way widgets are created in Tk. +
+ ++Once an SQLite database is open, it can be controlled using +methods of the dbcmd. There are currently 5 methods +defined:
+ ++
We will explain all of these methods, though not in that order. +We will be begin with the "close" method.
+ ++As its name suggests, the "close" method to an SQLite database just +closes the database. This has the side-effect of deleting the +dbcmd Tcl command. Here is an example of opening and then +immediately closing a database: +
+ ++sqlite db1 ./testdb+ +
+db1 close +
+If you delete the dbcmd directly, that has the same effect +as invoking the "close" method. So the following code is equivalent +to the previous:
+ ++sqlite db1 ./testdb+ +
+rename db1 {} +
+The most useful dbcmd method is "eval". The eval method is used +to execute SQL on the database. The syntax of the eval method looks +like this:
+ ++dbcmd eval sql + ?array-name script? ++ +
+The job of the eval method is to execute the SQL statement or statements +given in the second argument. For example, to create a new table in +a database, you can do this:
+ ++sqlite db1 ./testdb+ +
+db1 eval {CREATE TABLE t1(a int, b text)} +
The above code creates a new table named t1 with columns +a and b. What could be simplier?
+ +Query results are returned as a list of column values. If a +query requests 2 columns and there are 3 rows matching the query, +then the returned list will contain 6 elements. For example:
+ ++db1 eval {INSERT INTO t1 VALUES(1,'hello')}+ +
+db1 eval {INSERT INTO t1 VALUES(2,'goodbye')}
+db1 eval {INSERT INTO t1 VALUES(3,'howdy!')}
+set x [db1 eval {SELECT * FROM t1 ORDER BY a}] +
The variable $x is set by the above code to
+ ++1 hello 2 goodbye 3 howdy! ++ +
You can also process the results of a query one row at a time +by specifying the name of an array variable and a script following +the SQL code. For each row of the query result, the value of each +column will be inserted into the array variable and the script will +be executed. For instance:
+ ++db1 eval {SELECT * FROM t1 ORDER BY a} values {+ +
+ parray values
+ puts ""
+} +
This last code will give the following output:
+ ++values(*) = a b+ +
+values(a) = 1
+values(b) = hello+ +values(*) = a b
+values(a) = 2
+values(b) = goodbye+ +values(*) = a b
+values(a) = 3
+values(b) = howdy! +
+For each column in a row of the result, the name of that column +is used as an index in to array. The value of the column is stored +in the corresponding array entry. The special array index * is +used to store a list of column names in the order that they appear. +
+ ++If the array variable name is the empty string, then the value of +each column is stored in a variable with the same name as the column +itself. For example: +
+ ++db1 eval {SELECT * FROM t1 ORDER BY a} {} {+ +
+ puts "a=$a b=$b"
+} +
+From this we get the following output +
+ ++a=1 b=hello+ +
+a=2 b=goodbye
+a=3 b=howdy! +