;;;; Programmer: Kevin M. Rosenberg
;;;; Date Started: Feb 2002
;;;;
-;;;; $Id: aodbc-sql.cl,v 1.4 2002/03/24 18:39:32 kevin Exp $
+;;;; $Id: aodbc-sql.cl,v 1.10 2002/05/13 22:05:21 kevin Exp $
;;;;
;;;; This file, part of CLSQL, is Copyright (c) 2002 by Kevin M. Rosenberg
;;;;
(in-package :clsql-aodbc)
+;; interface foreign library loading routines
(defmethod database-type-library-loaded ((database-type (eql :aodbc)))
"T if foreign library was able to be loaded successfully. "
(when (find-package :dbi) ;; finds Allegro's DBI (AODBC) package
t))
+(defmethod clsql-sys:database-type-load-foreign ((databae-type (eql :aodbc)))
+ t)
+
+(when (find-package :dbi)
+ (clsql-sys:database-type-load-foreign :aodbc))
+
(defmethod database-initialize-database-type ((database-type (eql :aodbc)))
t)
+
+;; AODBC interface
+
(defclass aodbc-database (database)
((aodbc-conn :accessor database-aodbc-conn :initarg :aodbc-conn)))
(defmethod database-connect (connection-spec (database-type (eql :aodbc)))
(check-connection-spec connection-spec database-type (dsn user password))
+ #+aodbc-v2
(destructuring-bind (dsn user password) connection-spec
(handler-case
(make-instance 'aodbc-database
:error "Connection failed")))))
(defmethod database-disconnect ((database aodbc-database))
+ #+aodbc-v2
(dbi:disconnect (database-aodbc-conn database))
(setf (database-aodbc-conn database) nil)
t)
-(defmethod database-query (query-expression (database aodbc-database) field-types)
+(defmethod database-query (query-expression (database aodbc-database) types)
+ #+aodbc-v2
(handler-case
- (dbi:sql query-expression :db (database-aodbc-conn database))
+ (dbi:sql query-expression :db (database-aodbc-conn database)
+ :types types)
(error ()
(error 'clsql-sql-error
:database database
(defmethod database-execute-command (sql-expression
(database aodbc-database))
+ #+aodbc-v2
(handler-case
(dbi:sql sql-expression :db (database-aodbc-conn database))
(error ()
(defstruct aodbc-result-set
(query nil)
- (field-types nil :type cons)
+ (types nil :type cons)
(full-set nil :type boolean))
(defmethod database-query-result-set (query-expression (database aodbc-database)
- &key full-set field-types)
+ &key full-set types)
+ #+aodbc-v2
(handler-case
(multiple-value-bind (query column-names)
(dbi:sql query-expression
:row-count nil
:column-names t
:query t
+ :types types
)
(values
(make-aodbc-result-set :query query :full-set full-set
- :field-types field-types)
+ :types types)
(length column-names)
nil ;; not able to return number of rows with aodbc
))
:error "Query result set failed"))))
(defmethod database-dump-result-set (result-set (database aodbc-database))
+ #+aodbc-v2
(dbi:close-query (aodbc-result-set-query result-set))
t)
(defmethod database-store-next-row (result-set
(database aodbc-database)
list)
+ #+aodbc-v2
(let ((row (dbi:fetch-row (aodbc-result-set-query result-set) nil 'eof)))
(if (eq row 'eof)
nil
list))))
+(when (clsql-sys:database-type-library-loaded :aodbc)
+ (clsql-sys:initialize-database-type :database-type :aodbc))