123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135 |
- # tdbcpostgres.tcl --
- #
- # Class definitions and Tcl-level methods for the tdbc::postgres bridge.
- #
- # Copyright (c) 2009 by Slawomir Cygan
- #
- # See the file "license.terms" for information on usage and redistribution
- # of this file, and for a DISCLAIMER OF ALL WARRANTIES.
- #
- #------------------------------------------------------------------------------
- package require tdbc
- ::namespace eval ::tdbc::mypostgres {
- namespace export connection datasources drivers
- }
- #------------------------------------------------------------------------------
- #
- # tdbc::postgres::connection --
- #
- # Class representing a connection to a Postgres database.
- #
- #-------------------------------------------------------------------------------
- ::oo::class create ::tdbc::postgres::connection {
- superclass ::tdbc::connection
- # The constructor is written in C. It takes alternating keywords
- # and values pairs as its arguments. (See the manual page for the
- # available options.)
- # The 'statementCreate' method delegates to the constructor of the
- # statement class
- forward statementCreate ::tdbc::postgres::statement create
- # The 'prepareCall' method gives a portable interface to prepare
- # calls to stored procedures. It delegates to 'prepare' to do the
- # actual work.
- method preparecall {call} {
- regexp {^[[:space:]]*(?:([A-Za-z_][A-Za-z_0-9]*)[[:space:]]*=)?(.*)} \
- $call -> varName rest
- if {$varName eq {}} {
- my prepare \\{$rest\\}
- } else {
- my prepare \\{:$varName=$rest\\}
- }
- }
- # The 'init', 'begintransaction', 'commit, 'rollback', 'tables'
- # and 'columns' methods are implemented in C.
- }
- #------------------------------------------------------------------------------
- #
- # tdbc::postgres::statement --
- #
- # The class 'tdbc::postgres::statement' models one statement against a
- # database accessed through a Postgres connection
- #
- #------------------------------------------------------------------------------
- ::oo::class create ::tdbc::postgres::statement {
- superclass ::tdbc::statement
- # The 'resultSetCreate' method forwards to the constructor of the
- # result set.
- forward resultSetCreate ::tdbc::postgres::resultset create
- # Methods implemented in C:
- #
- # constructor connection SQLCode
- # The constructor accepts the handle to the connection and the SQL code
- # for the statement to prepare. It creates a subordinate namespace to
- # hold the statement's active result sets, and then delegates to the
- # 'init' method, written in C, to do the actual work of preparing the
- # statement.
- # params
- # Returns descriptions of the parameters of a statement.
- # paramtype paramname ?direction? type ?precision ?scale??
- # Declares the type of a parameter in the statement
- }
- #------------------------------------------------------------------------------
- #
- # tdbc::postgres::resultset --
- #
- # The class 'tdbc::postgres::resultset' models the result set that is
- # produced by executing a statement against a Postgres database.
- #
- #------------------------------------------------------------------------------
- ::oo::class create ::tdbc::postgres::resultset {
- superclass ::tdbc::resultset
- # The 'nextresults' method is stubbed out; tdbcpostgres does not
- # allow a single call to return multiple results.
- method nextresults {} {
- while {[my nextdict rubbish]} {}
- return 0
- }
- # Methods implemented in C include:
- # constructor statement ?dictionary?
- # -- Executes the statement against the database, optionally providing
- # a dictionary of substituted parameters (default is to get params
- # from variables in the caller's scope).
- # columns
- # -- Returns a list of the names of the columns in the result.
- # nextdict
- # -- Stores the next row of the result set in the given variable in
- # the caller's scope as a dictionary whose keys are
- # column names and whose values are column values, or else
- # as a list of cells.
- # nextlist
- # -- Stores the next row of the result set in the given variable in
- # the caller's scope as a list of cells.
- # rowcount
- # -- Returns a count of rows affected by the statement, or -1
- # if the count of rows has not been determined.
- }
|