-C In\sthe\sTCL\sbindings,\sif\sa\sTCL\svariable\shas\sa\sbytearray\srepresentation\sand\nthe\shost\sparameter\sstarts\swith\s@\sinstead\sof\s$,\sthen\salways\sstore\sthe\ncontent\sas\sa\sBLOB\snot\sas\sa\sstring\seven\sif\sa\sstring\srepresentation\sis\salso\navailable.\s(CVS\s4092)
-D 2007-06-19T17:15:47
+C Cleanup\sthe\sTCL\sinterface\ssource\scode\sand\sadd\sdocumentation\sfor\srecently\nadded\smethods\son\sthe\sSQLite\sobject\sof\sTCL.\s(CVS\s4093)
+D 2007-06-19T17:48:57
F Makefile.in 5babd49c427a0e82e849c89a4d3c3c1e607ec014
F Makefile.linux-gcc 2d8574d1ba75f129aba2019f0b959db380a90935
F README 9c4e2d6706bdcc3efdd773ce752a8cdab4f90028
F src/sqliteInt.h 07b0f7a4b7e849c9b96d921e9c5b32fc8802072c
F src/sqliteLimit.h f14609c27636ebc217c9603ade26dbdd7d0f6afa
F src/table.c a8de75bcedf84d4060d804264b067ab3b1a3561d
-F src/tclsqlite.c 344e28bd3a1b7480a1cbf642911a99122b72ef8e
+F src/tclsqlite.c df53bcb8239658c5ce45762c9837cc7f38c680de
F src/test1.c a83c097ee1353e8982745ee1b78612fea7425602
F src/test2.c 24458b17ab2f3c90cbc1c8446bd7ffe69be62f88
F src/test3.c a280931fb40222b7c90da45eea926459beee8904
F www/sqlite.tcl abb87f0d74a4fe9642987466bb59fe6abada988f
F www/support.tcl 7961ce16290692578d783bb11f0dc8391a9be9c3
F www/table-ex1b2.gif a588d21a2d88bb2a2ef0431fcc5ed5aa48c0bbc5
-F www/tclsqlite.tcl bb0d1357328a42b1993d78573e587c6dcbc964b9
+F www/tclsqlite.tcl 8be95ee6dba05eabcd27a9d91331c803f2ce2130
F www/vdbe.tcl 87a31ace769f20d3627a64fa1fade7fed47b90d0
F www/version3.tcl 890248cf7b70e60c383b0e84d77d5132b3ead42b
F www/whentouse.tcl fc46eae081251c3c181bd79c5faef8195d7991a5
-P 64bcc41f12e902fd025c9ba36c09dd6e4cf25923
-R 77fe303dc438055db8d268fdb3354536
+P dcb104bd41f5e992d4c84b8947cb5099ae746891
+R 2c8e4d427c1a25e275d6ce32dba71a8d
U drh
-Z 1386ace3ab85ad3dfcfb4f374c31ada6
+Z 100864d73ffe0c8bd7da587cd9106c28
-dcb104bd41f5e992d4c84b8947cb5099ae746891
\ No newline at end of file
+d88b79818a6a9e0413b9560687ec3c79fcb3dacc
\ No newline at end of file
** A TCL Interface to SQLite. Append this file to sqlite3.c and
** compile the whole thing to build a TCL-enabled version of SQLite.
**
-** $Id: tclsqlite.c,v 1.190 2007/06/19 17:15:47 drh Exp $
+** $Id: tclsqlite.c,v 1.191 2007/06/19 17:48:57 drh Exp $
*/
#include "tcl.h"
#include <errno.h>
"collation_needed", "commit_hook", "complete",
"copy", "enable_load_extension","errorcode",
"eval", "exists", "function",
- "incrblob",
- "interrupt", "last_insert_rowid", "nullvalue",
- "onecolumn", "profile", "progress",
- "rekey", "rollback_hook", "timeout",
- "total_changes", "trace", "transaction",
- "update_hook", "version", 0
+ "incrblob", "interrupt", "last_insert_rowid",
+ "nullvalue", "onecolumn", "profile",
+ "progress", "rekey", "rollback_hook",
+ "timeout", "total_changes", "trace",
+ "transaction", "update_hook", "version",
+ 0
};
enum DB_enum {
DB_AUTHORIZER, DB_BUSY, DB_CACHE,
DB_COLLATION_NEEDED, DB_COMMIT_HOOK, DB_COMPLETE,
DB_COPY, DB_ENABLE_LOAD_EXTENSION,DB_ERRORCODE,
DB_EVAL, DB_EXISTS, DB_FUNCTION,
- DB_INCRBLOB,
- DB_INTERRUPT, DB_LAST_INSERT_ROWID,DB_NULLVALUE,
- DB_ONECOLUMN, DB_PROFILE, DB_PROGRESS,
- DB_REKEY, DB_ROLLBACK_HOOK, DB_TIMEOUT,
- DB_TOTAL_CHANGES, DB_TRACE, DB_TRANSACTION,
- DB_UPDATE_HOOK, DB_VERSION,
+ DB_INCRBLOB, DB_INTERRUPT, DB_LAST_INSERT_ROWID,
+ DB_NULLVALUE, DB_ONECOLUMN, DB_PROFILE,
+ DB_PROGRESS, DB_REKEY, DB_ROLLBACK_HOOK,
+ DB_TIMEOUT, DB_TOTAL_CHANGES, DB_TRACE,
+ DB_TRANSACTION, DB_UPDATE_HOOK, DB_VERSION
};
/* don't leave trailing commas on DB_enum, it confuses the AIX xlc compiler */
#
# Run this Tcl script to generate the tclsqlite.html file.
#
-set rcsid {$Id: tclsqlite.tcl,v 1.16 2006/01/05 15:50:07 drh Exp $}
+set rcsid {$Id: tclsqlite.tcl,v 1.17 2007/06/19 17:48:57 drh Exp $}
source common.tcl
header {The Tcl interface to the SQLite library}
proc METHOD {name text} {
<h3>The API</h3>
<p>The interface to the SQLite library consists of single
-tcl command named <b>sqlite</b> (version 2.8) or <b>sqlite3</b>
-(version 3.0). Because there is only this
+tcl command named <b>sqlite3</b>
+Because there is only this
one command, the interface is not placed in a separate
namespace.</p>
<p>
Once an SQLite database is open, it can be controlled using
-methods of the <i>dbcmd</i>. There are currently 21 methods
-defined:</p>
-
-<p>The <b>sqlite3</b> also accepts an optional third argument called
-the "mode". This argument is a legacy from SQLite version 2 and is
-currently ignored.</p>
+methods of the <i>dbcmd</i>. There are currently 22 methods
+defined.</p>
<p>
<ul>
commit_hook
complete
copy
+ enable_load_extension
errorcode
eval
exists
last_insert_rowid
nullvalue
onecolumn
+ profile
progress
+ rollback_hook
timeout
total_changes
trace
transaction
+ update_hook
+ version
}] {
puts "<li><a href=\"#$m\">$m</a></li>"
}
</p>
<blockquote><b>
-db1 eval {INSERT INTO t1 VALUES(5,$bigblob)}
+db1 eval {INSERT INTO t1 VALUES(5,$bigstring)}
</b></blockquote>
<p>
-Note that it is not necessary to quote the $bigblob value. That happens
-automatically. If $bigblob is a large string or binary object, this
+Note that it is not necessary to quote the $bigstring value. That happens
+automatically. If $bigstring is a large string or binary object, this
technique is not only easier to write, it is also much more efficient
-since it avoids making a copy of the content of $bigblob.
+since it avoids making a copy of the content of $bigstring.
+</p>
+
+<p>
+If the $bigstring variable has both a string and a "bytearray" representation,
+then TCL inserts the value as a string. If it has only a "bytearray"
+representation, then the value is inserted as a BLOB. To force a
+value to be inserted as a BLOB even if it also has a text representation,
+us a "@" character to in place of the "$". Like this:
+</p>
+
+<blockquote><b>
+db1 eval {INSERT INTO t1 VALUES(5,@bigstring)}
+</b></blockquote>
+
+<p>
+If the variable does not have a bytearray representation, then "@" works
+just like "$".
</p>
}
rather than commit.</p>
}
+##############################################################################
+METHOD rollback_hook {
+
+<p>This method registers a callback routine that is invoked just before
+SQLite tries to do a rollback. The script argument is run without change.</p>
+}
+
+##############################################################################
+METHOD update_hook {
+
+<p>This method registers a callback routine that is invoked just before
+each row is modified by an UPDATE, INSERT, or DELETE statement. Four
+arguments are appended to the callback before it is invoked:</p>
+
+<ul>
+<li>The keyword "INSERT", "UPDATE", or "DELETE", as appropriate</li>
+<li>The name of the database which is being changed</li>
+<li>The table that is being changed</li>
+<li>The rowid of the row in the table being changed</li>
+</ul>
+}
+
+##############################################################################
+METHOD incrblob {
+
+<p>This method opens a TCL channel that can be used to read or write
+into a preexisting BLOB in the database. The syntax is like this:</p>
+
+<blockquote>
+<i>dbcmd</i> <b>incrblob</b> <b>?-readonly??</b>
+ <i>?DB? TABLE COLUMN ROWID</i>
+</blockquote>
+
+<p>
+The command returns a new TCL channel for reading or writing to the BLOB.
+The channel is opened using the underlying
+<a href="/capi3ref.html#sqlite3_blob_open">sqlite3_blob_open()</a> C-langauge
+interface. Close the channel using the <b>close</b> command of TCL.
+</p>
+}
+
##############################################################################
METHOD errorcode {