http://michael.cleverly.com/nstcl/ nstcl is a Tcl package which reimplements many of the useful APIs and commands from AOLserver and OpenACS, making them available for use in Tcl/Tk applications & scripts. nstcl is grouped into a set of subpackages, including: * nstcl-core * nstcl-database * nstcl-html * nstcl-http * nstcl-misc * nstcl-nssets * nstcl-sendmail * nstcl-templating * nstcl-time Most notable of these is the nstcl-database package, and the "ns_db" API, which provides a common interface to various different database extensions. As of version 1.0 nstcl now supports the following databases: * Oracle * Postgres * Solid * Sybase * SQLite * MySQL * ODBC Extending nstcl to support a new database extension involves writing six (mostly trivial) procs. nstcl makes use of [string] subcommands, such as [string map] that first appeared in Tcl 8.2. As a result, use with a modern Tcl (8.3.4+) is preferred. However, for those stuck with an older version of Tcl, a set of so-called "forward compatability" procs are provided that enable nstcl to function on Tcl 8.0+. Database access requires a supported database extension. Certain features of nstcl make use of packages from tcllib. See the README for details. nstcl is distributed under the terms of the MIT/X11 license (essentially the equivalent of the BSD license without the advertising clause). ----- [AK] -- I took a cursory look at the documentation and did not see any obvious place explaining which six procedures to implement for a new database. On the [Tcl Chatroom] we already had the question how to connect ''nstcl'' and [Metakit]. [MC] -- See the "Implementing a New Driver" section of the man page for ''load_driver''. [http://michael.cleverly.com/nstcl/load_driver.html] The functions are: * nstcl::database::${TYPE}::load_driver (does the package require or loads the .so) * nstcl::database::${TYPE}::dbtype (returns a single string indicating what type of database, i.e. "Metakit") Then the six functions that actually interact with the database: * nstcl::database::${TYPE}::bindrow (create the ''ns_set'' that will contain the column names of the database columns returned by the query. The column values are populated with the call to getrow) * nstcl::database::${TYPE}::close (close a connection to the database) * nstcl::database::${TYPE}::exec (execute DDL/DML/query) * nstcl::database::${TYPE}::flush (throws away any unretrieved pending results) * nstcl::database::${TYPE}::gethandle (get a handle to the database) * nstcl::database::${TYPE}::getrow (gets the next result in the result set from a prior query) I'd suggest looking at the nstcl-database-*.tcl file(s) for the database extensions that you're already familliar with. ---- [Category Package] | [Category Database]