/usr/lib/tcltk/tdbcpostgres1.0.3/tdbcpostgres.tcl is in tcl8.6-tdbc-postgres 1.0.3-1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
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 | # 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.
}
|