Version 7 of nstcl

Updated 2002-07-10 04:07:52

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 a half dozen or so(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 [L1 ] for details.

nstcl is distributed under the terms of the MIT/X11 license (essentially the equivalent of the original BSD license without the advertising clause) [L2 ].


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. [L3 ] 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)

My general advice would be for people to take a look at the nstcl-database-*.tcl file(s) for the database extension(s) that they're already familliar with. Of course, I'd be happy to write more specific docs too, if that would help.


Category Package | Category Database