Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Overview
Comment: | Update the TCL API documentation. (CVS 1841) |
---|---|
Downloads: | Tarball | ZIP archive |
Timelines: | family | ancestors | descendants | both | trunk |
Files: | files | file ages | folders |
SHA1: |
df306ad9ee522b20f017be0be83d9e07 |
User & Date: | drh 2004-07-21 14:54:50.000 |
Context
2004-07-21
| ||
15:21 | Updates comments in sqlite.h.in that describe the destructor parameter to sqlite3_bind_.... (CVS 1842) (check-in: 166eb60614 user: drh tags: trunk) | |
14:54 | Update the TCL API documentation. (CVS 1841) (check-in: df306ad9ee user: drh tags: trunk) | |
14:07 | Updates to the C-language API documents for version 3.0. (CVS 1840) (check-in: 814c58d470 user: drh tags: trunk) | |
Changes
Changes to www/tclsqlite.tcl.
1 2 3 | # # Run this Tcl script to generate the tclsqlite.html file. # | | > > > > | > | | | | | > > > | | | > > > | > | > | | > | > > > > > > | > | | | > > | | | < > > | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 | # # Run this Tcl script to generate the tclsqlite.html file. # set rcsid {$Id: tclsqlite.tcl,v 1.10 2004/07/21 14:54:50 drh Exp $} source common.tcl header {The Tcl interface to the SQLite library} proc METHOD {name text} { puts "<a name=\"$name\">\n<h3>The \"$name\" method</h3>\n" puts $text } puts { <h2>The Tcl interface to the SQLite library</h2> <p>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.</p> <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 one interface 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</i> </blockquote> <p> The <b>sqlite3</b> command opens the database named in the second argument. If the database does not already exist, it is automatically created. The <b>sqlite3</b> 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. </p> <p> The name of the database is just the name of a disk file in which the database is stored. </p> <p> Once an SQLite database is open, it can be controlled using methods of the <i>dbcmd</i>. There are currently 17 methods defined:</p> <p> <ul> } foreach m [lsort { authorizer busy changes close collate collation_needed commit_hook complete errorcode eval function last_insert_rowid onecolumn progress timeout total_changes trace }] { puts "<li><a href=\"#$m\">$m</a></li>" } puts { </ul> </p> <p>The use of each of these methods will be explained in the sequel, though not in the order shown above.</p> } ############################################################################## METHOD close { <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> } ############################################################################## METHOD eval { <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>sql</i> ?<i>array-name 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 |
︙ | ︙ | |||
124 125 126 127 128 129 130 | <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 | | | | 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 | <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> |
︙ | ︙ | |||
179 180 181 182 183 184 185 | </p> <blockquote><b> a=1 b=hello<br> a=2 b=goodbye<br> a=3 b=howdy!</b> </blockquote> | | > > | | | | > > | | | > > | > | > > | | > > > > > > > > > > > > > > > > > > > > > | | | > > | | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 | </p> <blockquote><b> a=1 b=hello<br> a=2 b=goodbye<br> a=3 b=howdy!</b> </blockquote> } ############################################################################## METHOD complete { <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 <b>sqlite3_complete()</b> C function. Refer to the <a href="c_interface.html">C/C++ interface</a> specification for additional information.</p> } ############################################################################## METHOD timeout { <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> } ############################################################################## METHOD busy { <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. This callback can do whatever is desired. Presumably, 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. } ############################################################################## METHOD last_insert_rowid { <p>The "last_insert_rowid" method returns an integer which is the ROWID of the most recently inserted database row.</p> } ############################################################################## METHOD function { <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> 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> } ############################################################################## METHOD onecolumn { <p>The "onecolumn" method works like "eval" 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> } ############################################################################## METHOD changes { <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> } ############################################################################## METHOD total_changes { <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> } ############################################################################## METHOD authorizer { <p>The "authorizer" method provides access to the sqlite3_set_authorizer 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> } ############################################################################## METHOD progress { <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> } ############################################################################## METHOD collate { <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><b> proc nocase_compare {a b} {<br> return [string compare [string tolower $a] [string tolower $b]]<br> }<br> db collate NOCASE nocase_compare<br> </b></blockquote> } ############################################################################## METHOD collation_needed { <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> } ############################################################################## METHOD commit_hook { <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> } ############################################################################## METHOD errorcode { <p>This method returns the numeric error code that resulted from the most recent SQLite operation.</p> } ############################################################################## METHOD trace { <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> } footer $rcsid |