OpenFPGA/libs/EXTERNAL/tcl8.6.12/pkgs/tdbcpostgres1.1.3/library/tdbcpostgres.tcl

136 lines
4.3 KiB
Tcl
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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.
}