1202 lines
		
	
	
		
			44 KiB
		
	
	
	
		
			HTML
		
	
	
	
	
	
			
		
		
	
	
			1202 lines
		
	
	
		
			44 KiB
		
	
	
	
		
			HTML
		
	
	
	
	
	
<!DOCTYPE html>
 | 
						|
<html><head>
 | 
						|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
 | 
						|
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
 | 
						|
<link href="sqlite.css" rel="stylesheet">
 | 
						|
<title>The Tcl interface to the SQLite library</title>
 | 
						|
<!-- path= -->
 | 
						|
</head>
 | 
						|
<body>
 | 
						|
<div class=nosearch>
 | 
						|
<a href="index.html">
 | 
						|
<img class="logo" src="images/sqlite370_banner.gif" alt="SQLite" border="0">
 | 
						|
</a>
 | 
						|
<div><!-- IE hack to prevent disappearing logo --></div>
 | 
						|
<div class="tagline desktoponly">
 | 
						|
Small. Fast. Reliable.<br>Choose any three.
 | 
						|
</div>
 | 
						|
<div class="menu mainmenu">
 | 
						|
<ul>
 | 
						|
<li><a href="index.html">Home</a>
 | 
						|
<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
 | 
						|
<li class='wideonly'><a href='about.html'>About</a>
 | 
						|
<li class='desktoponly'><a href="docs.html">Documentation</a>
 | 
						|
<li class='desktoponly'><a href="download.html">Download</a>
 | 
						|
<li class='wideonly'><a href='copyright.html'>License</a>
 | 
						|
<li class='desktoponly'><a href="support.html">Support</a>
 | 
						|
<li class='desktoponly'><a href="prosupport.html">Purchase</a>
 | 
						|
<li class='search' id='search_menubutton'>
 | 
						|
<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
 | 
						|
</ul>
 | 
						|
</div>
 | 
						|
<div class="menu submenu" id="submenu">
 | 
						|
<ul>
 | 
						|
<li><a href='about.html'>About</a>
 | 
						|
<li><a href='docs.html'>Documentation</a>
 | 
						|
<li><a href='download.html'>Download</a>
 | 
						|
<li><a href='support.html'>Support</a>
 | 
						|
<li><a href='prosupport.html'>Purchase</a>
 | 
						|
</ul>
 | 
						|
</div>
 | 
						|
<div class="searchmenu" id="searchmenu">
 | 
						|
<form method="GET" action="search">
 | 
						|
<select name="s" id="searchtype">
 | 
						|
<option value="d">Search Documentation</option>
 | 
						|
<option value="c">Search Changelog</option>
 | 
						|
</select>
 | 
						|
<input type="text" name="q" id="searchbox" value="">
 | 
						|
<input type="submit" value="Go">
 | 
						|
</form>
 | 
						|
</div>
 | 
						|
</div>
 | 
						|
<script>
 | 
						|
function toggle_div(nm) {
 | 
						|
var w = document.getElementById(nm);
 | 
						|
if( w.style.display=="block" ){
 | 
						|
w.style.display = "none";
 | 
						|
}else{
 | 
						|
w.style.display = "block";
 | 
						|
}
 | 
						|
}
 | 
						|
function toggle_search() {
 | 
						|
var w = document.getElementById("searchmenu");
 | 
						|
if( w.style.display=="block" ){
 | 
						|
w.style.display = "none";
 | 
						|
} else {
 | 
						|
w.style.display = "block";
 | 
						|
setTimeout(function(){
 | 
						|
document.getElementById("searchbox").focus()
 | 
						|
}, 30);
 | 
						|
}
 | 
						|
}
 | 
						|
function div_off(nm){document.getElementById(nm).style.display="none";}
 | 
						|
window.onbeforeunload = function(e){div_off("submenu");}
 | 
						|
/* Disable the Search feature if we are not operating from CGI, since */
 | 
						|
/* Search is accomplished using CGI and will not work without it. */
 | 
						|
if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
 | 
						|
document.getElementById("search_menubutton").style.display = "none";
 | 
						|
}
 | 
						|
/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
 | 
						|
function hideorshow(btn,obj){
 | 
						|
var x = document.getElementById(obj);
 | 
						|
var b = document.getElementById(btn);
 | 
						|
if( x.style.display!='none' ){
 | 
						|
x.style.display = 'none';
 | 
						|
b.innerHTML='show';
 | 
						|
}else{
 | 
						|
x.style.display = '';
 | 
						|
b.innerHTML='hide';
 | 
						|
}
 | 
						|
return false;
 | 
						|
}
 | 
						|
</script>
 | 
						|
</div>
 | 
						|
 | 
						|
 | 
						|
 | 
						|
<h1 align=center>The Tcl interface to the SQLite library</h1>
 | 
						|
 | 
						|
<p>The SQLite library is designed to be very easy to use from
 | 
						|
a <a href="http://www.tcl-lang.org">Tcl or Tcl/Tk</a> script.  SQLite
 | 
						|
began as a <a href="http://www.tcl-lang.org/doc/tea/">Tcl extension</a>
 | 
						|
and the primary <a href="testing.html">test suite</a> for SQLite is written in TCL.  SQLite
 | 
						|
can be used with any programming language, but its connections to
 | 
						|
TCL run deep.</p>
 | 
						|
 | 
						|
<p>This document gives an overview of the Tcl
 | 
						|
programming interface for SQLite.</p>
 | 
						|
 | 
						|
<h3>The API</h3>
 | 
						|
 | 
						|
<p>The interface to the SQLite library consists of single
 | 
						|
tcl command named <b>sqlite3</b>
 | 
						|
Because there is only this
 | 
						|
one command, the interface is not placed in a separate
 | 
						|
namespace.</p>
 | 
						|
 | 
						|
<p>The <b>sqlite3</b> command is used as follows:</p>
 | 
						|
 | 
						|
<blockquote>
 | 
						|
<b>sqlite3</b>  <i>dbcmd  database-name  ?options?</i>
 | 
						|
</blockquote>
 | 
						|
 | 
						|
<p>
 | 
						|
The <b>sqlite3</b> command opens the database named in the second
 | 
						|
argument.  If the database does not already exist, the default behavior
 | 
						|
is for it to be created automatically (though this can be changed by
 | 
						|
using the "<b>-create false</b>" option).
 | 
						|
The <b>sqlite3</b> command always 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.
 | 
						|
</p>
 | 
						|
 | 
						|
<p>
 | 
						|
The name of the database is usually just the name of a disk file in which
 | 
						|
the database is stored.  If the name of the database is 
 | 
						|
the special name "<a href="inmemorydb.html">:memory:</a>" then a new database is created
 | 
						|
in memory.  If the name of the database is an empty string, then
 | 
						|
the database is created in an empty file that is automatically deleted
 | 
						|
when the database connection closes.  <a href="uri.html">URI filenames</a> can be used if
 | 
						|
the "<b>-uri yes</b>" option is supplied on the <b>sqlite3</b> command.
 | 
						|
</p>
 | 
						|
 | 
						|
<p>
 | 
						|
Options understood by the <b>sqlite3</b> command include:
 | 
						|
</p>
 | 
						|
 | 
						|
<blockquote>
 | 
						|
<dl>
 | 
						|
 | 
						|
<dt><b>-create</b> <i>BOOLEAN</i></dt>
 | 
						|
<dd><p>
 | 
						|
If true, then a new database is created if one does not already exist.
 | 
						|
If false, then an attempt to open a database file that does not previously
 | 
						|
exist raises an error.  The default behavior is "true".
 | 
						|
</p></dd>
 | 
						|
 | 
						|
<dt><b>-nomutex</b> <i>BOOLEAN</i></dt>
 | 
						|
<dd><p>
 | 
						|
If true, then all mutexes for the database connection are disabled.
 | 
						|
This provides a small performance boost in single-threaded applications.
 | 
						|
</p></dd>
 | 
						|
 | 
						|
<dt><b>-readonly</b> <i>BOOLEAN</i></dt>
 | 
						|
<dd><p>
 | 
						|
If true, then open the database file read-only.  If false, then the
 | 
						|
database is opened for both reading and writing if filesystem permissions
 | 
						|
allow, or for reading only if filesystem write permission is denied
 | 
						|
by the operating system.  The default setting is "false".  Note that
 | 
						|
if the previous process to have the database did not exit cleanly
 | 
						|
and left behind a <a href="fileformat2.html#hotjrnl">hot journal</a>, then the write permission is required
 | 
						|
to recover the database after opening, and the database cannot be
 | 
						|
opened read-only.
 | 
						|
</p></dd>
 | 
						|
 | 
						|
<dt><b>-uri</b> <i>BOOLEAN</i></dt>
 | 
						|
<dd><p>
 | 
						|
If true, then interpret the filename argument as a <a href="uri.html">URI filename</a>.  If
 | 
						|
false, then the argument is a literal filename.  The default value is
 | 
						|
"false".
 | 
						|
</p></dd>
 | 
						|
 | 
						|
<dt><b>-vfs</b> <i>VFSNAME</i></dt>
 | 
						|
<dd><p>
 | 
						|
Use an alternative <a href="vfs.html">VFS</a> named by the argument.
 | 
						|
</p></dd>
 | 
						|
 | 
						|
</dl>
 | 
						|
</blockquote>
 | 
						|
 | 
						|
 | 
						|
 | 
						|
<p>
 | 
						|
Once an SQLite database is open, it can be controlled using 
 | 
						|
methods of the <i>dbcmd</i>.
 | 
						|
There are currently 40 methods
 | 
						|
defined.</p>
 | 
						|
 | 
						|
 | 
						|
<table border=0 cellpadding=10 width='100%'>
 | 
						|
<tr><td valign='top'><ul>
 | 
						|
<li><a href="#authorizer">authorizer</a></li>
 | 
						|
<li><a href="#backup">backup</a></li>
 | 
						|
<li><a href="#bind_fallback">bind_fallback</a></li>
 | 
						|
<li><a href="#busy">busy</a></li>
 | 
						|
<li><a href="#cache">cache</a></li>
 | 
						|
<li><a href="#changes">changes</a></li>
 | 
						|
<li><a href="#close">close</a></li>
 | 
						|
<li><a href="#collate">collate</a></li>
 | 
						|
<li><a href="#collation_needed">collation_needed</a></li>
 | 
						|
<li><a href="#commit_hook">commit_hook</a></li>
 | 
						|
<li><a href="#complete">complete</a></li>
 | 
						|
<li><a href="#config">config</a></li>
 | 
						|
<li><a href="#copy">copy</a></li>
 | 
						|
<li><a href="#deserialize">deserialize</a></li>
 | 
						|
</ul></td>
 | 
						|
<td valign='top'><ul>
 | 
						|
<li><a href="#enable_load_extension">enable_load_extension</a></li>
 | 
						|
<li><a href="#errorcode">errorcode</a></li>
 | 
						|
<li><a href="#eval">eval</a></li>
 | 
						|
<li><a href="#exists">exists</a></li>
 | 
						|
<li><a href="#function">function</a></li>
 | 
						|
<li><a href="#incrblob">incrblob</a></li>
 | 
						|
<li><a href="#interrupt">interrupt</a></li>
 | 
						|
<li><a href="#last_insert_rowid">last_insert_rowid</a></li>
 | 
						|
<li><a href="#nullvalue">nullvalue</a></li>
 | 
						|
<li><a href="#onecolumn">onecolumn</a></li>
 | 
						|
<li><a href="#preupdate">preupdate</a></li>
 | 
						|
<li><a href="#profile">profile</a></li>
 | 
						|
<li><a href="#progress">progress</a></li>
 | 
						|
<li><a href="#restore">restore</a></li>
 | 
						|
</ul></td>
 | 
						|
<td valign='top'><ul>
 | 
						|
<li><a href="#rollback_hook">rollback_hook</a></li>
 | 
						|
<li><a href="#serialize">serialize</a></li>
 | 
						|
<li><a href="#status">status</a></li>
 | 
						|
<li><a href="#timeout">timeout</a></li>
 | 
						|
<li><a href="#total_changes">total_changes</a></li>
 | 
						|
<li><a href="#trace">trace</a></li>
 | 
						|
<li><a href="#trace_v2">trace_v2</a></li>
 | 
						|
<li><a href="#transaction">transaction</a></li>
 | 
						|
<li><a href="#unlock_notify">unlock_notify</a></li>
 | 
						|
<li><a href="#update_hook">update_hook</a></li>
 | 
						|
<li><a href="#version">version</a></li>
 | 
						|
<li><a href="#wal_hook">wal_hook</a></li>
 | 
						|
 | 
						|
</ul></td></tr>
 | 
						|
</table>
 | 
						|
 | 
						|
 | 
						|
<p>The use of each of these methods will be explained in the sequel, though
 | 
						|
not in the order shown above.</p>
 | 
						|
 | 
						|
<a name="eval"></a>
 | 
						|
<h3>The "eval" method</h3>
 | 
						|
 | 
						|
<p>
 | 
						|
The most useful <i>dbcmd</i> method is "eval".  The eval method is used
 | 
						|
to execute SQL on the database.  The syntax of the eval method looks
 | 
						|
like this:</p>
 | 
						|
 | 
						|
<blockquote>
 | 
						|
<i>dbcmd</i>  <b>eval</b>  ?<i>options</i>?  <i>sql</i>
 | 
						|
  ?<i>array-name</i>?  ?<i>script</i>?
 | 
						|
</blockquote>
 | 
						|
 | 
						|
<p>
 | 
						|
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:</p>
 | 
						|
 | 
						|
<blockquote>
 | 
						|
<b>sqlite3 db1 ./testdb<br>
 | 
						|
db1 eval {CREATE TABLE t1(a int, b text)}</b>
 | 
						|
</blockquote>
 | 
						|
 | 
						|
<p>The above code creates a new table named <b>t1</b> with columns
 | 
						|
<b>a</b> and <b>b</b>.  What could be simpler?</p>
 | 
						|
 | 
						|
<p>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:</p>
 | 
						|
 | 
						|
<blockquote>
 | 
						|
<b>db1 eval {INSERT INTO t1 VALUES(1,'hello')}<br>
 | 
						|
db1 eval {INSERT INTO t1 VALUES(2,'goodbye')}<br>
 | 
						|
db1 eval {INSERT INTO t1 VALUES(3,'howdy!')}<br>
 | 
						|
set x [db1 eval {SELECT * FROM t1 ORDER BY a}]</b>
 | 
						|
</blockquote>
 | 
						|
 | 
						|
<p>The variable <b>$x</b> is set by the above code to</p>
 | 
						|
 | 
						|
<blockquote>
 | 
						|
<b>1 hello 2 goodbye 3 howdy!</b>
 | 
						|
</blockquote>
 | 
						|
 | 
						|
<p>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 values of all
 | 
						|
columns will be inserted into the array variable and the script will
 | 
						|
be executed.  For instance:</p>
 | 
						|
 | 
						|
<blockquote>
 | 
						|
<b>db1 eval {SELECT * FROM t1 ORDER BY a} values {<br>
 | 
						|
    parray values<br>
 | 
						|
    puts ""<br>
 | 
						|
}</b>
 | 
						|
</blockquote>
 | 
						|
 | 
						|
<p>This last code will give the following output:</p>
 | 
						|
 | 
						|
<blockquote><b>
 | 
						|
values(*) = a b<br>
 | 
						|
values(a) = 1<br>
 | 
						|
values(b) = hello<p>
 | 
						|
 | 
						|
values(*) = a b<br>
 | 
						|
values(a) = 2<br>
 | 
						|
values(b) = goodbye<p>
 | 
						|
 | 
						|
values(*) = a b<br>
 | 
						|
values(a) = 3<br>
 | 
						|
values(b) = howdy!</b>
 | 
						|
</blockquote>
 | 
						|
 | 
						|
<p>
 | 
						|
For each column in a row of the result, the name of that column
 | 
						|
is used as an index in to array and the value of the column is stored
 | 
						|
in the corresponding array entry.  (Caution:  If two or more columns
 | 
						|
in the result set of a query have the same name, then the last column
 | 
						|
with that name will overwrite prior values and earlier columns with the
 | 
						|
same name will be inaccessible.) The special array index * is
 | 
						|
used to store a list of column names in the order that they appear.
 | 
						|
</p>
 | 
						|
 | 
						|
<p>
 | 
						|
Normally, NULL SQL results are stored in the array using the
 | 
						|
<a href="#nullvalue">nullvalue</a> setting.  However, if
 | 
						|
the <b>-withoutnulls</b> option is used, then NULL SQL values
 | 
						|
cause the corresponding array element to be unset instead.
 | 
						|
</p>
 | 
						|
 | 
						|
<p>
 | 
						|
If the array variable name is omitted or 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:
 | 
						|
</p>
 | 
						|
 | 
						|
<blockquote>
 | 
						|
<b>db1 eval {SELECT * FROM t1 ORDER BY a} {<br>
 | 
						|
    puts "a=$a b=$b"<br>
 | 
						|
}</b>
 | 
						|
</blockquote>
 | 
						|
 | 
						|
<p>
 | 
						|
From this we get the following output
 | 
						|
</p>
 | 
						|
 | 
						|
<blockquote><b>
 | 
						|
a=1 b=hello<br>
 | 
						|
a=2 b=goodbye<br>
 | 
						|
a=3 b=howdy!</b>
 | 
						|
</blockquote>
 | 
						|
 | 
						|
<a name="varsubst"></a>
 | 
						|
 | 
						|
<p>
 | 
						|
Tcl variable names can appear in the SQL statement of the second argument
 | 
						|
in any position where it is legal to put a string or number literal.  The
 | 
						|
value of the variable is substituted for the variable name.  If the
 | 
						|
variable does not exist a NULL values is used.  For example:
 | 
						|
</p>
 | 
						|
 | 
						|
<blockquote><b>
 | 
						|
db1 eval {INSERT INTO t1 VALUES(5,$bigstring)}
 | 
						|
</b></blockquote>
 | 
						|
 | 
						|
<p>
 | 
						|
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 $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,
 | 
						|
use 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 "$".  Note that ":" works like "$" in all cases so the following
 | 
						|
is another way to express the same statement:
 | 
						|
</p>
 | 
						|
 | 
						|
<blockquote><b>
 | 
						|
db1 eval {INSERT INTO t1 VALUES(5,:bigstring)}
 | 
						|
</b></blockquote>
 | 
						|
 | 
						|
<p>The use of ":" instead of "$" before the name of a variable can 
 | 
						|
sometimes be useful if the SQL text is enclosed in double-quotes "..."
 | 
						|
instead of curly-braces {...}.  
 | 
						|
When the SQL is contained within double-quotes "..." then TCL will do
 | 
						|
the substitution of $-variables, which can lead to SQL injection if
 | 
						|
extreme care is not used.  But TCL will never substitute a :-variable
 | 
						|
regardless of whether double-quotes "..." or curly-braces {...} are 
 | 
						|
used to enclose the SQL, so the use of :-variables adds an extra 
 | 
						|
measure of defense against SQL
 | 
						|
injection.
 | 
						|
</p>
 | 
						|
 | 
						|
<a name="close"></a>
 | 
						|
<h3>The "close" method</h3>
 | 
						|
 | 
						|
 | 
						|
<p>
 | 
						|
As its name suggests, the "close" method to an SQLite database just
 | 
						|
closes the database.  This has the side-effect of deleting the
 | 
						|
<i>dbcmd</i> Tcl command.  Here is an example of opening and then
 | 
						|
immediately closing a database:
 | 
						|
</p>
 | 
						|
 | 
						|
<blockquote>
 | 
						|
<b>sqlite3 db1 ./testdb<br>
 | 
						|
db1 close</b>
 | 
						|
</blockquote>
 | 
						|
 | 
						|
<p>
 | 
						|
If you delete the <i>dbcmd</i> directly, that has the same effect
 | 
						|
as invoking the "close" method.  So the following code is equivalent
 | 
						|
to the previous:</p>
 | 
						|
 | 
						|
<blockquote>
 | 
						|
<b>sqlite3 db1 ./testdb<br>
 | 
						|
rename db1 {}</b>
 | 
						|
</blockquote>
 | 
						|
<a name="transaction"></a>
 | 
						|
<h3>The "transaction" method</h3>
 | 
						|
 | 
						|
 | 
						|
<p>
 | 
						|
The "transaction" method is used to execute a TCL script inside an SQLite
 | 
						|
database transaction.  The transaction is committed when the script completes,
 | 
						|
or it rolls back if the script fails.  If the transaction occurs within
 | 
						|
another transaction (even one that is started manually using BEGIN) it
 | 
						|
is a no-op.
 | 
						|
</p>
 | 
						|
 | 
						|
<p>
 | 
						|
The transaction command can be used to group together several SQLite
 | 
						|
commands in a safe way.  You can always start transactions manually using
 | 
						|
BEGIN, of
 | 
						|
course.  But if an error occurs so that the COMMIT or ROLLBACK are never
 | 
						|
run, then the database will remain locked indefinitely.  Also, BEGIN
 | 
						|
does not nest, so you have to make sure no other transactions are active
 | 
						|
before starting a new one.  The "transaction" method takes care of
 | 
						|
all of these details automatically.
 | 
						|
</p>
 | 
						|
 | 
						|
<p>
 | 
						|
The syntax looks like this:
 | 
						|
</p>
 | 
						|
 | 
						|
<blockquote>
 | 
						|
<i>dbcmd</i>  <b>transaction</b>  <i>?transaction-type?</i>
 | 
						|
  <i>script</i>
 | 
						|
</blockquote>
 | 
						|
 | 
						|
 | 
						|
<p>
 | 
						|
The <i>transaction-type</i> can be one of <b>deferred</b>,
 | 
						|
<b>exclusive</b> or <b>immediate</b>.  The default is deferred.
 | 
						|
</p>
 | 
						|
<a name="cache"></a>
 | 
						|
<h3>The "cache" method</h3>
 | 
						|
 | 
						|
 | 
						|
<p>
 | 
						|
The "eval" method described <a href="#eval">above</a> keeps a cache of
 | 
						|
<a href="c3ref/prepare.html">prepared statements</a>
 | 
						|
for recently evaluated SQL commands.  
 | 
						|
The "cache" method is used to control this cache.
 | 
						|
The first form of this command is:</p>
 | 
						|
 | 
						|
<blockquote>
 | 
						|
<i>dbcmd</i>  <b>cache size</b>  <i>N</i>
 | 
						|
</blockquote>
 | 
						|
 | 
						|
<p>This sets the maximum number of statements that can be cached.
 | 
						|
The upper limit is 100.  The default is 10.  If you set the cache size
 | 
						|
to 0, no caching is done.</p>
 | 
						|
 | 
						|
<p>The second form of the command is this:</p>
 | 
						|
 | 
						|
 | 
						|
<blockquote>
 | 
						|
<i>dbcmd</i>  <b>cache flush</b>
 | 
						|
</blockquote>
 | 
						|
 | 
						|
<p>The cache-flush method 
 | 
						|
<a href="c3ref/finalize.html">finalizes</a>
 | 
						|
all prepared statements currently
 | 
						|
in the cache.</p>
 | 
						|
 | 
						|
<a name="complete"></a>
 | 
						|
<h3>The "complete" method</h3>
 | 
						|
 | 
						|
 | 
						|
<p>
 | 
						|
The "complete" method takes a string of supposed SQL as its only argument.
 | 
						|
It returns TRUE if the string is a complete statement of SQL and FALSE if
 | 
						|
there is more to be entered.</p>
 | 
						|
 | 
						|
<p>The "complete" method is useful when building interactive applications
 | 
						|
in order to know when the user has finished entering a line of SQL code.
 | 
						|
This is really just an interface to the 
 | 
						|
<a href="c3ref/complete.html"><b>sqlite3_complete()</b></a> C
 | 
						|
function.
 | 
						|
<a name="config"></a>
 | 
						|
<h3>The "config" method</h3>
 | 
						|
 | 
						|
 | 
						|
<p>
 | 
						|
The "config" method queries or changes certain configuration settings for
 | 
						|
the database connection using the <a href="c3ref/db_config.html">sqlite3_db_config()</a> interface.
 | 
						|
Run this method with no arguments to get a TCL list of available
 | 
						|
configuration settings and their current values:
 | 
						|
 | 
						|
<blockquote>
 | 
						|
<i>dbcmd</i>  <b>config</b>
 | 
						|
</blockquote>
 | 
						|
 | 
						|
<p>The above will return something like this:
 | 
						|
 | 
						|
<blockquote>
 | 
						|
defensive 0 dqs_ddl 1 dqs_dml 1 enable_fkey 0 enable_qpsg 0 enable_trigger 1 enable_view 1 fts3_tokenizer 1 legacy_alter_table 0 legacy_file_format 0 load_extension 0 no_ckpt_on_close 0 reset_database 0 trigger_eqp 0 trusted_schema 1 writable_schema 0
 | 
						|
</blockquote>
 | 
						|
 | 
						|
<p>Add the name of an individual configuration setting to query the current
 | 
						|
value of that setting.  Optionally add a boolean value to change a setting.
 | 
						|
 | 
						|
<p>
 | 
						|
The following four configuration changes are recommended for maximum
 | 
						|
application security.  Turning off the trust_schema setting prevents
 | 
						|
virtual tables and dodgy SQL functions from being used inside of triggers,
 | 
						|
views, CHECK constraints, generated columns, and expression indexes.
 | 
						|
Turning off the dqs_dml and dqs_ddl settings prevents the use of 
 | 
						|
double-quoted strings.  Turning on defensive prevents direct writes
 | 
						|
to shadow tables.
 | 
						|
 | 
						|
<blockquote><pre>
 | 
						|
db config trusted_schema 0
 | 
						|
db config defensive 1
 | 
						|
db config dqs_dml 0
 | 
						|
db config dqs_ddl 0
 | 
						|
</pre></blockquote>
 | 
						|
<a name="copy"></a>
 | 
						|
<h3>The "copy" method</h3>
 | 
						|
 | 
						|
 | 
						|
<p>
 | 
						|
The "copy" method copies data from a file into a table.
 | 
						|
It returns the number of rows processed successfully from the file.
 | 
						|
The syntax of the copy method looks like this:</p>
 | 
						|
 | 
						|
<blockquote>
 | 
						|
<i>dbcmd</i>  <b>copy</b>  <i>conflict-algorithm</i>
 | 
						|
  <i>table-name </i>  <i>file-name </i>
 | 
						|
    ?<i>column-separator</i>?
 | 
						|
  ?<i>null-indicator</i>?
 | 
						|
</blockquote>
 | 
						|
 | 
						|
<p>Conflict-algorithm must be one of the SQLite conflict algorithms for
 | 
						|
the INSERT statement: <i>rollback</i>, <i>abort</i>,
 | 
						|
<i>fail</i>,<i>ignore</i>, or <i>replace</i>. See the SQLite Language
 | 
						|
section for <a href="lang.html#conflict">ON CONFLICT</a> for more information.
 | 
						|
The conflict-algorithm must be specified in lower case.
 | 
						|
</p>
 | 
						|
 | 
						|
<p>Table-name must already exists as a table.  File-name must exist, and
 | 
						|
each row must contain the same number of columns as defined in the table.
 | 
						|
If a line in the file contains more or less than the number of columns defined,
 | 
						|
the copy method rollbacks any inserts, and returns an error.</p>
 | 
						|
 | 
						|
<p>Column-separator is an optional column separator string.  The default is
 | 
						|
the ASCII tab character \t. </p>
 | 
						|
 | 
						|
<p>Null-indicator is an optional string that indicates a column value is null.
 | 
						|
The default is an empty string.  Note that column-separator and
 | 
						|
null-indicator are optional positional arguments; if null-indicator
 | 
						|
is specified, a column-separator argument must be specified and
 | 
						|
precede the null-indicator argument.</p>
 | 
						|
 | 
						|
<p>The copy method implements similar functionality to the <b>.import</b>
 | 
						|
SQLite shell command. 
 | 
						|
<a name="timeout"></a>
 | 
						|
<h3>The "timeout" method</h3>
 | 
						|
 | 
						|
 | 
						|
<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.
 | 
						|
The default timeout is 0 millisecond.  (In other words, the default behavior
 | 
						|
is not to wait at all.)</p>
 | 
						|
 | 
						|
<p>The SQLite database allows multiple simultaneous
 | 
						|
readers or a single writer but not both.  If any process is writing to
 | 
						|
the database no other process is allows to read or write.  If any process
 | 
						|
is reading the database other processes are allowed to read but not write.
 | 
						|
The entire database shared a single lock.</p>
 | 
						|
 | 
						|
<p>When SQLite tries to open a database and finds that it is locked, it
 | 
						|
can optionally delay for a short while and try to open the file again.
 | 
						|
This process repeats until the query times out and SQLite returns a
 | 
						|
failure.  The timeout is adjustable.  It is set to 0 by default so that
 | 
						|
if the database is locked, the SQL statement fails immediately.  But you
 | 
						|
can use the "timeout" method to change the timeout value to a positive
 | 
						|
number.  For example:</p>
 | 
						|
 | 
						|
<blockquote><b>db1 timeout 2000</b></blockquote>
 | 
						|
 | 
						|
<p>The argument to the timeout method is the maximum number of milliseconds
 | 
						|
to wait for the lock to clear.  So in the example above, the maximum delay
 | 
						|
would be 2 seconds.</p>
 | 
						|
<a name="busy"></a>
 | 
						|
<h3>The "busy" method</h3>
 | 
						|
 | 
						|
 | 
						|
<p>The "busy" method, like "timeout", only comes into play when the
 | 
						|
database is locked.  But the "busy" method gives the programmer much more
 | 
						|
control over what action to take.  The "busy" method specifies a callback
 | 
						|
Tcl procedure that is invoked whenever SQLite tries to open a locked
 | 
						|
database.  A single integer argument is appended to the callback before
 | 
						|
it is invoke.  The argument is the number of prior calls to the busy
 | 
						|
callback for the current locking event.  It is intended that
 | 
						|
the callback will do some other useful work for a short while 
 | 
						|
(such as service GUI events) then return
 | 
						|
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
 | 
						|
should return "1" if it wants SQLite to abandon the current operation.
 | 
						|
<p>
 | 
						|
If the busy method is invoked without an argument, the name of the callback
 | 
						|
procedure last set by the busy method is returned.  If no callback procedure
 | 
						|
has been set, an empty string is returned.
 | 
						|
<a name="enable_load_extension"></a>
 | 
						|
<h3>The "enable_load_extension" method</h3>
 | 
						|
 | 
						|
 | 
						|
<p>The extension loading mechanism of SQLite (accessed using the
 | 
						|
<a href="lang_corefunc.html#load_extension">load_extension()</a> SQL function) is turned off by default.  This is
 | 
						|
a security precaution.  If an application wants to make use of the
 | 
						|
<a href="lang_corefunc.html#load_extension">load_extension()</a> function it must first turn the capability on using
 | 
						|
this method.</p>
 | 
						|
 | 
						|
<p>This method takes a single boolean argument which will turn the
 | 
						|
extension loading functionality on or off.</p>
 | 
						|
 | 
						|
<p>For best security, do not use this method unless truly needed, 
 | 
						|
and run <a href="pragma.html#pragma_trusted_schema">PRAGMA trusted_schema=OFF</a> or the
 | 
						|
"<a href="#config">db config trusted_schema 0</a>" method <u>before</u>
 | 
						|
invoking this method.
 | 
						|
 | 
						|
<p>This method maps to the <a href="c3ref/enable_load_extension.html">sqlite3_enable_load_extension()</a> C/C++
 | 
						|
interface.</p>
 | 
						|
<a name="exists"></a>
 | 
						|
<h3>The "exists" method</h3>
 | 
						|
 | 
						|
 | 
						|
<p>The "exists" method is similar to "onecolumn" and "eval" in that
 | 
						|
it executes SQL statements.  The difference is that the "exists" method
 | 
						|
always returns a boolean value which is TRUE if a query in the SQL
 | 
						|
statement it executes returns one or more rows and FALSE if the SQL
 | 
						|
returns an empty set.</p>
 | 
						|
 | 
						|
<p>The "exists" method is often used to test for the existence of
 | 
						|
rows in a table.  For example:</p>
 | 
						|
 | 
						|
<blockquote><b>
 | 
						|
if {[db exists {SELECT 1 FROM table1 WHERE user=$user}]} {<br>
 | 
						|
   # Processing if $user exists<br>
 | 
						|
} else {<br>
 | 
						|
   # Processing if $user does not exist<br>
 | 
						|
}
 | 
						|
</b></blockquote>
 | 
						|
<a name="last_insert_rowid"></a>
 | 
						|
<h3>The "last_insert_rowid" method</h3>
 | 
						|
 | 
						|
 | 
						|
<p>The "last_insert_rowid" method returns an integer which is the ROWID
 | 
						|
of the most recently inserted database row.</p>
 | 
						|
<a name="function"></a>
 | 
						|
<h3>The "function" method</h3>
 | 
						|
 | 
						|
 | 
						|
<p>The "function" method registers new SQL functions with the SQLite engine.
 | 
						|
The arguments are the name of the new SQL function and a TCL command that
 | 
						|
implements that function.  Arguments to the function are appended to the
 | 
						|
TCL command before it is invoked.</p>
 | 
						|
 | 
						|
<p>
 | 
						|
For security reasons, it is recommended that applications first set
 | 
						|
<a href="pragma.html#pragma_trusted_schema">PRAGMA trusted_schema=OFF</a> or run the 
 | 
						|
"<a href="#config">db config trusted_schema 0</a>"
 | 
						|
method before using this method.
 | 
						|
 | 
						|
<p>
 | 
						|
The following example creates a new SQL function named "hex" that converts
 | 
						|
its numeric argument in to a hexadecimal encoded string:
 | 
						|
</p>
 | 
						|
 | 
						|
<blockquote><b>
 | 
						|
db function hex {format 0x%X}
 | 
						|
</b></blockquote>
 | 
						|
 | 
						|
<p>The "function" method accepts the following options:
 | 
						|
<blockquote>
 | 
						|
<dl>
 | 
						|
 | 
						|
<dt><b>-argcount</b> <i>INTEGER</i></dt>
 | 
						|
<dd><p>
 | 
						|
Specify the number of arguments that the SQL function accepts.  The default
 | 
						|
value of -1 means any number of arguments.
 | 
						|
 | 
						|
<dt><b>-deterministic</b>
 | 
						|
<dd><p>
 | 
						|
This option indicates that the function will always return the same
 | 
						|
answer given the same argument values.  The SQLite query optimizer
 | 
						|
uses this information to cache answers from function calls with 
 | 
						|
constant inputs and reuse the result rather than invoke the function
 | 
						|
repeatedly.
 | 
						|
</dd>
 | 
						|
 | 
						|
<dt><b>-directonly</b>
 | 
						|
<dd><p>
 | 
						|
This option restricts the function to only be usable by direct
 | 
						|
top-level SQL statement.  The function will not be accessible to
 | 
						|
triggers, views, CHECK constraints, generated columns, or index
 | 
						|
expressions.  This option is recommended for all application-defined
 | 
						|
SQL functions, and is <u>highly recommended</u> for any SQL
 | 
						|
function that has side effects or that reveals internal state of
 | 
						|
the application.
 | 
						|
 | 
						|
<p style="background-color:#ffff90;"><b>Security Warning:</b>
 | 
						|
Without this switch, an attacker might be able to change the
 | 
						|
schema of a database file to include the new function inside a trigger
 | 
						|
or view or CHECK constraint and thereby trick the application into
 | 
						|
running the function with parameters of the attacker's choosing.
 | 
						|
Hence, if the new function has side effects or reveals internal
 | 
						|
state about the application and the -directonly option is not
 | 
						|
used, that is a potential security vulnerability.</p>
 | 
						|
</dd>
 | 
						|
 | 
						|
<dt><b>-innocuous</b>
 | 
						|
<dd><p>
 | 
						|
This option indicates that the function has no side effects and
 | 
						|
does not leak any information that cannot be computed directly
 | 
						|
from its input parameters.  When this option is specified, the
 | 
						|
function may be used in triggers, views, CHECK constraints,
 | 
						|
generated columns, and/or index expressions even if
 | 
						|
<a href="pragma.html#pragma_trusted_schema">PRAGMA trusted_schema=OFF</a>.  The use of this option is discouraged
 | 
						|
unless it is truly needed.
 | 
						|
</dd>
 | 
						|
 | 
						|
<dt><b>-returntype integer|real|text|blob|any</b>
 | 
						|
<dd><p>
 | 
						|
This option is used to configure the type of the result returned by the
 | 
						|
function.  If this option is set to "any" (the default), SQLite attempts to
 | 
						|
determine the type of each value returned by the function implementation based
 | 
						|
on the Tcl value's internal type. Or, if it is set to "text" or "blob", the
 | 
						|
returned value is always a text or blob value, respectively. If this option is
 | 
						|
set to "integer", SQLite attempts to coerce the value returned by the function
 | 
						|
to an integer. If this is not possible without data loss, it attempts to coerce
 | 
						|
it to a real value, and finally falls back to text. If this option is set to
 | 
						|
"real", an attempt is made to return a real value, falling back to text if this
 | 
						|
is not possible.
 | 
						|
</dd>
 | 
						|
</dl>
 | 
						|
 | 
						|
 | 
						|
 | 
						|
</blockquote>
 | 
						|
<a name="nullvalue"></a>
 | 
						|
<h3>The "nullvalue" method</h3>
 | 
						|
 | 
						|
 | 
						|
<p>
 | 
						|
The "nullvalue" method changes the representation for NULL returned
 | 
						|
as result of the "eval" method.</p>
 | 
						|
 | 
						|
<blockquote><b>
 | 
						|
db1 nullvalue NULL
 | 
						|
</b></blockquote>
 | 
						|
 | 
						|
<p>The "nullvalue" method is useful to differ between NULL and empty
 | 
						|
column values as Tcl lacks a NULL representation.  The default
 | 
						|
representation for NULL values is an empty string.</p>
 | 
						|
<a name="onecolumn"></a>
 | 
						|
<h3>The "onecolumn" method</h3>
 | 
						|
 | 
						|
 | 
						|
<p>The "onecolumn" method works like 
 | 
						|
"<a href="#eval">eval</a>" in that it evaluates the
 | 
						|
SQL query statement given as its argument.  The difference is that
 | 
						|
"onecolumn" returns a single element which is the first column of the
 | 
						|
first row of the query result.</p>
 | 
						|
 | 
						|
<p>This is a convenience method.  It saves the user from having to
 | 
						|
do a "<tt>[lindex ... 0]</tt>" on the results of an "eval"
 | 
						|
in order to extract a single column result.</p>
 | 
						|
<a name="changes"></a>
 | 
						|
<h3>The "changes" method</h3>
 | 
						|
 | 
						|
 | 
						|
<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
 | 
						|
recent "eval" method.</p>
 | 
						|
<a name="total_changes"></a>
 | 
						|
<h3>The "total_changes" method</h3>
 | 
						|
 | 
						|
 | 
						|
<p>The "total_changes" method returns an integer which is the number of rows
 | 
						|
in the database that were inserted, deleted, and/or modified since the
 | 
						|
current database connection was first opened.</p>
 | 
						|
<a name="authorizer"></a>
 | 
						|
<h3>The "authorizer" method</h3>
 | 
						|
 | 
						|
 | 
						|
<p>The "authorizer" method provides access to the 
 | 
						|
<a href="c3ref/set_authorizer.html">sqlite3_set_authorizer</a>
 | 
						|
C/C++ interface.  The argument to authorizer is the name of a procedure that
 | 
						|
is called when SQL statements are being compiled in order to authorize
 | 
						|
certain operations.  The callback procedure takes 5 arguments which describe
 | 
						|
the operation being coded.  If the callback returns the text string
 | 
						|
"SQLITE_OK", then the operation is allowed.  If it returns "SQLITE_IGNORE",
 | 
						|
then the operation is silently disabled.  If the return is "SQLITE_DENY"
 | 
						|
then the compilation fails with an error.
 | 
						|
</p>
 | 
						|
 | 
						|
<p>If the argument is an empty string then the authorizer is disabled.
 | 
						|
If the argument is omitted, then the current authorizer is returned.</p>
 | 
						|
<a name="bind_fallback"></a>
 | 
						|
<h3>The "bind_fallback" method</h3>
 | 
						|
 | 
						|
 | 
						|
<p>The "bind_fallback" method gives the application control over how to
 | 
						|
handle parameter binding when no TCL variable matches the parameter name.
 | 
						|
 | 
						|
<p>When the <a href="#eval">eval method</a> sees a named SQL
 | 
						|
parameter such as "$abc" or ":def" or "@ghi" in an SQL statement, it tries
 | 
						|
to look up a TCL variable with the same name, and it binds the value
 | 
						|
of that TCL variable to the SQL parameter.  If no such TCL variable exists,
 | 
						|
the default behavior is to bind an SQL NULL value to the parameter.  However,
 | 
						|
if a bind_fallback proc is specified, then that proc is invoked with the
 | 
						|
name of the SQL parameter and the return value from the proc is bound to
 | 
						|
the SQL parameter.  Or if the proc returns an error, then the SQL statement
 | 
						|
aborts with that error.  If the proc returns with some code other than
 | 
						|
TCL_OK or TCL_ERROR, then the SQL parameter is bound to NULL, as it would
 | 
						|
be by default.
 | 
						|
 | 
						|
<p>The "bind_fallback" method has a single optional argument.  If the argument
 | 
						|
is an empty string, then the bind_fallback is cancelled and the default behavior
 | 
						|
is restored.  If the argument is a non-empty string, then the argument is a
 | 
						|
TCL command (usually the name of a proc) to invoke whenever an SQL parameter 
 | 
						|
is seen that does not match any TCL variable.  If the "bind_fallback" method 
 | 
						|
is given no arguments, then the current bind_fallback command is returned.
 | 
						|
 | 
						|
<p>As an example, the following setup causes TCL to throw an error if
 | 
						|
an SQL statement contains an parameter that does not match any global
 | 
						|
TCL variable:
 | 
						|
 | 
						|
<blockquote><pre><b>
 | 
						|
proc bind_error {nm} {
 | 
						|
  error "no such variable: $nm"
 | 
						|
}
 | 
						|
db bind_fallback bind_error
 | 
						|
</b></pre></blockquote>
 | 
						|
<a name="progress"></a>
 | 
						|
<h3>The "progress" method</h3>
 | 
						|
 | 
						|
 | 
						|
<p>This method registers a callback that is invoked periodically during
 | 
						|
query processing.  There are two arguments: the number of SQLite virtual
 | 
						|
machine opcodes between invocations, and the TCL command to invoke.
 | 
						|
Setting the progress callback to an empty string disables it.</p>
 | 
						|
 | 
						|
<p>The progress callback can be used to display the status of a lengthy
 | 
						|
query or to process GUI events during a lengthy query.</p>
 | 
						|
<a name="collate"></a>
 | 
						|
<h3>The "collate" method</h3>
 | 
						|
 | 
						|
 | 
						|
<p>This method registers new text collating sequences.  There are
 | 
						|
two arguments: the name of the collating sequence and the name of a
 | 
						|
TCL procedure that implements a comparison function for the collating
 | 
						|
sequence.
 | 
						|
</p>
 | 
						|
 | 
						|
<p>For example, the following code implements a collating sequence called
 | 
						|
"NOCASE" that sorts in text order without regard to case:
 | 
						|
</p>
 | 
						|
 | 
						|
<blockquote><pre><b>
 | 
						|
proc nocase_compare {a b} {
 | 
						|
  return [string compare [string tolower $a] [string tolower $b]]
 | 
						|
}
 | 
						|
db collate NOCASE nocase_compare
 | 
						|
</b></pre></blockquote>
 | 
						|
<a name="collation_needed"></a>
 | 
						|
<h3>The "collation_needed" method</h3>
 | 
						|
 | 
						|
 | 
						|
<p>This method registers a callback routine that is invoked when the SQLite
 | 
						|
engine needs a particular collating sequence but does not have that
 | 
						|
collating sequence registered.  The callback can register the collating
 | 
						|
sequence.  The callback is invoked with a single parameter which is the
 | 
						|
name of the needed collating sequence.</p>
 | 
						|
<a name="commit_hook"></a>
 | 
						|
<h3>The "commit_hook" method</h3>
 | 
						|
 | 
						|
 | 
						|
<p>This method registers a callback routine that is invoked just before
 | 
						|
SQLite tries to commit changes to a database.  If the callback throws
 | 
						|
an exception or returns a non-zero result, then the transaction rolls back
 | 
						|
rather than commit.</p>
 | 
						|
<a name="rollback_hook"></a>
 | 
						|
<h3>The "rollback_hook" method</h3>
 | 
						|
 | 
						|
 | 
						|
<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>
 | 
						|
<a name="status"></a>
 | 
						|
<h3>The "status" method</h3>
 | 
						|
 | 
						|
<p>This method returns status information from the most recently evaluated
 | 
						|
SQL statement.  The status method takes a single argument which should be
 | 
						|
either "steps" or "sorts".  If the argument is "steps", then the method
 | 
						|
returns the number of full table scan steps that the previous SQL statement
 | 
						|
evaluated.  If the argument is "sorts", the method returns the number of
 | 
						|
sort operations.  This information can be used to detect queries that are
 | 
						|
not using indices to speed search or sorting.</p>
 | 
						|
 | 
						|
<p>The status method is basically a wrapper on the
 | 
						|
<a href="c3ref/stmt_status.html">sqlite3_stmt_status()</a> C-language interface.</p>
 | 
						|
<a name="update_hook"></a>
 | 
						|
<h3>The "update_hook" method</h3>
 | 
						|
 | 
						|
 | 
						|
<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>
 | 
						|
<a name="wal_hook"></a>
 | 
						|
<h3>The "wal_hook" method</h3>
 | 
						|
 | 
						|
 | 
						|
<p>This method registers a callback routine that is invoked after transaction
 | 
						|
commit when the database is in <a href="wal.html">WAL mode</a>.  Two arguments are appended to the
 | 
						|
callback command before it is invoked:</p>
 | 
						|
 | 
						|
<ul>
 | 
						|
<li>The name of the database on which the transaction was committed
 | 
						|
<li>The number of entries in the write-ahead log (WAL) file for that database
 | 
						|
</ul>
 | 
						|
 | 
						|
<p>This method might decide to run a <a href="wal.html#ckpt">checkpoint</a> either itself or as a
 | 
						|
subsequent idle callback.  Note that SQLite only allows a single WAL hook.
 | 
						|
By default this single WAL hook is used for the auto-checkpointing.  If you
 | 
						|
set up an explicit WAL hook, then that one WAL hook must ensure that checkpoints
 | 
						|
are occurring since the auto-checkpointing mechanism will be disabled.</p>
 | 
						|
 | 
						|
<p>This method should return an integer value that is equivalent to an 
 | 
						|
SQLite error code (usually 0 for SQLITE_OK in the case of success or 1 for
 | 
						|
SQLITE_ERROR if some error occurs). As in <a href="c3ref/wal_hook.html">sqlite3_wal_hook()</a>, the results of
 | 
						|
returning an integer that does not correspond to an SQLite error code are
 | 
						|
undefined. If the value returned by the script cannot be interpreted as an
 | 
						|
integer value, or if the script throws a Tcl exception, no error is returned to
 | 
						|
SQLite but a Tcl background-error is raised.
 | 
						|
<a name="incrblob"></a>
 | 
						|
<h3>The "incrblob" method</h3>
 | 
						|
 | 
						|
 | 
						|
<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="c3ref/blob_open.html">sqlite3_blob_open()</a> C-language
 | 
						|
interface.  Close the channel using the <b>close</b> command of TCL.
 | 
						|
</p>
 | 
						|
<a name="errorcode"></a>
 | 
						|
<h3>The "errorcode" method</h3>
 | 
						|
 | 
						|
 | 
						|
<p>This method returns the numeric error code that resulted from the most
 | 
						|
recent SQLite operation.</p>
 | 
						|
<a name="trace"></a>
 | 
						|
<h3>The "trace" method</h3>
 | 
						|
 | 
						|
 | 
						|
<p>The "trace" method registers a callback that is invoked as each SQL
 | 
						|
statement is compiled.  The text of the SQL is appended as a single string
 | 
						|
to the command before it is invoked.  This can be used (for example) to
 | 
						|
keep a log of all SQL operations that an application performs.
 | 
						|
</p>
 | 
						|
<a name="trace_v2"></a>
 | 
						|
<h3>The "trace_v2" method</h3>
 | 
						|
 | 
						|
 | 
						|
<p>The "trace_v2" method registers a callback that is invoked as each SQL
 | 
						|
statement is compiled. The syntax is as follows:
 | 
						|
 | 
						|
 | 
						|
<blockquote>
 | 
						|
<i>dbcmd</i>  <b>trace_v2</b>  ?<i>callback</i>?  ?<i>mask</i>?
 | 
						|
</blockquote>
 | 
						|
 | 
						|
<p>This command causes the "callback" script to be invoked whenever
 | 
						|
certain conditions occurs.  The conditions are determined by the <i>mask</i>
 | 
						|
argument, which should be a TCL-list of zero or more of the following
 | 
						|
keywords:
 | 
						|
 | 
						|
<ul>
 | 
						|
<li> <b>statement</b>
 | 
						|
<li> <b>profile</b>
 | 
						|
<li> <b>row</b>
 | 
						|
<li> <b>close</b>
 | 
						|
</ul>
 | 
						|
 | 
						|
<p>Traces for <b>statement</b> invoke the callback with two arguments
 | 
						|
whenever a new SQL statement is run.
 | 
						|
The first argument is an integer which is the value of the pointer
 | 
						|
to the underlying <a href="c3ref/stmt.html">sqlite3_stmt</a> object.  This integer can be used
 | 
						|
to correlate SQL statement text with the result of a <b>profile</b>
 | 
						|
or <b>row</b> callback. The second argument is the
 | 
						|
unexpanded text of the SQL statement being run.  By "unexpanded", we
 | 
						|
mean that variable substitutions in the text are not expanded into the
 | 
						|
variable values.  This is different from the behavior of the "trace"
 | 
						|
method which does expand variable substitutions.
 | 
						|
 | 
						|
<p>Traces for <b>profile</b> invoke the callback with two arguments
 | 
						|
as each SQL statement finishes.  The first argument is an integer which
 | 
						|
is the value of the underlying <a href="c3ref/stmt.html">sqlite3_stmt</a> object.  The second
 | 
						|
argument is the approximate run-time for the statement in nanoseconds.
 | 
						|
The run-time is the best estimate available depending on the capabilities
 | 
						|
of the platform on which the application is running.
 | 
						|
 | 
						|
<p>Traces for <b>row</b> invoke the callback with a single argument
 | 
						|
whenever a new result row is available from an SQL statement.
 | 
						|
The argument is an integer which is the value of the underlying
 | 
						|
<a href="c3ref/stmt.html">sqlite3_stmt</a> object pointer.
 | 
						|
 | 
						|
<p>Traces for <b>close</b> invoke the callback with a single argument
 | 
						|
as the database connection is closing.  The argument is an integer which
 | 
						|
is the value of a pointer to the underlying <a href="c3ref/sqlite3.html">sqlite3</a> object that is
 | 
						|
closing.
 | 
						|
 | 
						|
<p>There can only be a single trace callback registered on a database
 | 
						|
connection.  Each use of "trace" or "trace_v2" cancels all prior
 | 
						|
trace callback.
 | 
						|
<a name="backup"></a>
 | 
						|
<h3>The "backup" method</h3>
 | 
						|
 | 
						|
 | 
						|
<p>The "backup" method makes a backup copy of a live database.  The
 | 
						|
command syntax is like this:</p>
 | 
						|
 | 
						|
<blockquote>
 | 
						|
<i>dbcmd</i>  <b>backup</b>  ?<i>source-database</i>?  <i>backup-filename</i>
 | 
						|
</blockquote>
 | 
						|
 | 
						|
<p>The optional <i>source-database</i> argument tells which database in
 | 
						|
the current connection should be backed up.  The default value is <b>main</b>
 | 
						|
(or, in other words, the primary database file).  To back up TEMP tables
 | 
						|
use <b>temp</b>.  To backup an auxiliary database added to the connection
 | 
						|
using the <a href="lang_attach.html">ATTACH</a> command, use the name of that database as it was assigned
 | 
						|
in the <a href="lang_attach.html">ATTACH</a> command.</p>
 | 
						|
 | 
						|
<p>The <i>backup-filename</i> is the name of a file into which the backup is
 | 
						|
written.  <i>Backup-filename</i> does not have to exist ahead of time, but if
 | 
						|
it does, it must be a well-formed SQLite database.</p>
 | 
						|
<a name="restore"></a>
 | 
						|
<h3>The "restore" method</h3>
 | 
						|
 | 
						|
 | 
						|
<p>The "restore" method copies the content from a separate database file 
 | 
						|
into the current database connection, overwriting any preexisting content.
 | 
						|
The command syntax is like this:</p>
 | 
						|
 | 
						|
<blockquote>
 | 
						|
<i>dbcmd</i>  <b>restore</b>  ?<i>target-database</i>?  <i>source-filename</i>
 | 
						|
</blockquote>
 | 
						|
 | 
						|
<p>The optional <i>target-database</i> argument tells which database in
 | 
						|
the current connection should be overwritten with new content.  
 | 
						|
The default value is <b>main</b> 
 | 
						|
(or, in other words, the primary database file).  To repopulate the TEMP tables
 | 
						|
use <b>temp</b>.  To overwrite an auxiliary database added to the connection
 | 
						|
using the <a href="lang_attach.html">ATTACH</a> command, use the name of that database as it was assigned
 | 
						|
in the <a href="lang_attach.html">ATTACH</a> command.</p>
 | 
						|
 | 
						|
<p>The <i>source-filename</i> is the name of an existing well-formed SQLite
 | 
						|
database file from which the content is extracted.</p>
 | 
						|
<a name="serialize"></a>
 | 
						|
<h3>The "serialize" method</h3>
 | 
						|
 | 
						|
 | 
						|
<p>The "serialize" method creates a BLOB which is a complete copy of an
 | 
						|
underlying database.  The syntax is like this:
 | 
						|
 | 
						|
<blockquote>
 | 
						|
<i>dbcmd</i>  <b>serialize</b>  ?<i>database</i>?
 | 
						|
</blockquote>
 | 
						|
 | 
						|
<p>The optional argument is the name of the schema or database to be serialized.
 | 
						|
The default value is "main".
 | 
						|
 | 
						|
<p>This routine returns a TCL byte-array that is the complete content of
 | 
						|
the identified database.  This byte-array can be written into a file and
 | 
						|
then used as an ordinary SQLite database, or it can be sent over a TCP/IP
 | 
						|
connection to some other application, or passed to the "deserialize" method
 | 
						|
of another database connection.
 | 
						|
 | 
						|
<p>This method only functions if SQLite is compiled with -DSQLITE_ENABLE_DESERIALIZE
 | 
						|
<a name="deserialize"></a>
 | 
						|
<h3>The "deserialize" method</h3>
 | 
						|
 | 
						|
<p>The "deserialize" method takes a TCL byte-array that contains an SQLite
 | 
						|
database file and adds it to the database connection.  The syntax is:
 | 
						|
 | 
						|
<blockquote>
 | 
						|
<i>dbcmd</i>  <b>deserialize</b>  ?<i>database</i>?  <i>value</i>
 | 
						|
</blockquote>
 | 
						|
 | 
						|
<p>The option <i>database</i> argument identifies which attached database
 | 
						|
should receive the deserialization.  The default is "main".
 | 
						|
 | 
						|
<p>This command causes SQLite to disconnect from the previous database and
 | 
						|
reattach to an in-memory database with the content in <i>value</i>.  If <i>value</i>
 | 
						|
is not a byte-array containing a well-defined SQLite database, then subsequent
 | 
						|
commands will likely return <a href="rescode.html#corrupt">SQLITE_CORRUPT</a> errors.
 | 
						|
 | 
						|
<p>This method only functions if SQLite is compiled with -DSQLITE_ENABLE_DESERIALIZE
 | 
						|
<a name="interrupt"></a>
 | 
						|
<h3>The "interrupt" method</h3>
 | 
						|
 | 
						|
<p>The "interrupt" method invokes the <a href="c3ref/interrupt.html">sqlite3_interrupt()</a> interface, causing
 | 
						|
any pending queries to halt.
 | 
						|
<a name="version"></a>
 | 
						|
<h3>The "version" method</h3>
 | 
						|
 | 
						|
  Return the current library version. For example, "3.23.0".
 | 
						|
<a name="profile"></a>
 | 
						|
<h3>The "profile" method</h3>
 | 
						|
 | 
						|
<p>This method is used to profile the execution of SQL statements run by
 | 
						|
   the application. The syntax is as follows:
 | 
						|
</p>
 | 
						|
 | 
						|
<blockquote>
 | 
						|
<i>dbcmd</i>  <b>profile</b>  ?<i>script</i>?
 | 
						|
</blockquote>
 | 
						|
 | 
						|
<p>Unless <i>script</i> is an empty string, this method arranges for the
 | 
						|
<i>script</i> to be evaluated after the execution of each SQL statement.
 | 
						|
Two arguments are appended to <i>script</i> before it is invoked: the
 | 
						|
text of the SQL statement executed and the time elapsed while executing
 | 
						|
the statement, in nanoseconds.
 | 
						|
</p>
 | 
						|
<p>A database handle may only have a single profile script registered at
 | 
						|
any time. If there is already a script registered when the profile method
 | 
						|
is invoked, the previous profile script is replaced by the new one. If the 
 | 
						|
<i>script</i> argument is an empty string, any previously registered 
 | 
						|
profile callback is canceled but no new profile script is registered.
 | 
						|
</p>
 | 
						|
<a name="unlock_notify"></a>
 | 
						|
<h3>The "unlock_notify" method</h3>
 | 
						|
 | 
						|
<p>The unlock_notify method is used access the <a href="c3ref/unlock_notify.html">sqlite3_unlock_notify()</a>
 | 
						|
   interface to the SQLite core library for testing purposes.  The use of
 | 
						|
   this method by applications is discouraged.
 | 
						|
</p>
 | 
						|
 | 
						|
 |