You are viewing a plain text version of this content. The canonical link for it is here.
Posted to site-cvs@tcl.apache.org by mx...@apache.org on 2013/12/06 15:19:29 UTC
svn commit: r1548533 - /tcl/rivet/trunk/rivet/packages/dio/dio_Tdbc.tcl
Author: mxmanghi
Date: Fri Dec 6 14:19:29 2013
New Revision: 1548533
URL: http://svn.apache.org/r1548533
Log:
I forgot to add this file to the previous commit.
Added:
tcl/rivet/trunk/rivet/packages/dio/dio_Tdbc.tcl
Added: tcl/rivet/trunk/rivet/packages/dio/dio_Tdbc.tcl
URL: http://svn.apache.org/viewvc/tcl/rivet/trunk/rivet/packages/dio/dio_Tdbc.tcl?rev=1548533&view=auto
==============================================================================
--- tcl/rivet/trunk/rivet/packages/dio/dio_Tdbc.tcl (added)
+++ tcl/rivet/trunk/rivet/packages/dio/dio_Tdbc.tcl Fri Dec 6 14:19:29 2013
@@ -0,0 +1,175 @@
+# dio_Tdbc.tcl -- Tdbc compatibility layer
+#
+# Copyright 2000-2005 The Apache Software Foundation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+# DIO compatibility layer with Tdbc
+#
+# $Id: $
+#
+
+package provide dio_Tdbc 0.1
+
+namespace eval DIO {
+
+
+ ::itcl::class Tdbc {
+ inherit Database
+
+ private variable dbhandle
+ private common conncnt 0
+
+ public varabile backend "" {
+
+ if {![string equal $backend "mysql"] && \
+ ![string equal $backend "postgres"] && \
+ ![string equal $backend "sqlite3"] && \
+ ![string equal $backend "odbc"]} {
+
+ return -code error "backend '$backend' not supported"
+
+ }
+
+ }
+
+ constructor {args} { eval configure $args } {
+ if {[catch {package require tdbc}]} {
+
+ return -code error "No Tdbc package available"
+
+ }
+ }
+
+ destructor { close }
+
+# --close
+#
+# we take inspiration from the DIO_Mysql class for handling
+# the basic connection data
+
+ public method close {} {
+ if {![info exists dbhandle]} { return }
+ catch { $dbhandle close }
+
+ unset dbhandle
+ }
+
+# -- open
+#
+# Opening a connection with this class means that the member
+# variable specifying the backend was properly set
+#
+
+ public method open {} {
+ set command [list ::tdbc::mysql::connection create [incr conncnt]]
+
+ if {![lempty $user]} { lappend command -user $user }
+ if {![lempty $pass]} { lappend command -password $pass }
+ if {![lempty $port]} { lappend command -port $port }
+ if {![lempty $host]} { lappend command -host $host }
+
+ if {[catch {
+ set dbhandle [eval $command]
+ } e]} { return -code error $e }
+
+ return -code ok
+ }
+
+# -- exec
+#
+# sql code central method. A statement object
+# is created from the sql string and then executed
+#
+
+ public method exec {sql} {
+ if {![info exists dbhandle]} { $this open }
+
+ set sqlstat [$dbhandle prepare $sql]
+
+ if {[catch {set res [$sqlstat execute]} err} {
+ set obj [result Tdbc -error 1 -errorinfo $err]
+ } else {
+ set obj [result Tdbc -resultid $res \
+ -numrows [$res rowcount] \
+ -fields [$res columns]]
+ }
+
+ $sqlstat destroy
+ return $obj
+ }
+
+# -- execute
+#
+# extended version of the standard DIO method exec that
+# makes room for an extra argument storing the dictionary
+# of variables to be substituted in the SQL statement
+
+ public method execute {sql {substitute_d ""}} {
+
+ if {![info exists dbhandle]} { $this open }
+
+ set sqlstat [$dbhandle prepare $sql]
+ if {$substitute_d != ""} {
+ set cmd [list $sqlstat execute $substitude_d]
+ } else {
+ set cmd [list $sqlstat execute]
+ }
+
+
+ if {[catch {set res [eval $cmd]} err} {
+ set obj [result Tdbc -error 1 -errorinfo $err]
+ } else {
+ set obj [result Tdbc -resultid $res \
+ -numrows [$res rowcount] \
+ -fields [$res columns]]
+ }
+
+ $sqlstat destroy
+ return $obj
+
+ }
+
+
+# -- handle
+#
+# accessor to the internal connection handle.
+#
+
+ public method handle {} {
+ return $dbhandle
+ }
+
+ }
+
+# -- TdbcResult
+#
+# Basically a wrapper around a Tdbc resultset object
+#
+
+ ::itcl::class TdbcResult {
+ inherit Result
+
+ constructor {args} {
+ eval configure $args
+ }
+
+ public method nextrow {} {
+
+ $resultid nextlist v
+ return $v
+
+ }
+
+ }
+}
---------------------------------------------------------------------
To unsubscribe, e-mail: site-cvs-unsubscribe@tcl.apache.org
For additional commands, e-mail: site-cvs-help@tcl.apache.org