;;;; Original code by Pierre R. Mai
;;;; Date Started: Feb 2002
;;;;
-;;;; $Id: mysql-sql.cl,v 1.1 2002/03/23 14:04:52 kevin Exp $
+;;;; $Id: mysql-sql.cl,v 1.4 2002/03/24 18:08:27 kevin Exp $
;;;;
;;;; This file, part of CLSQL, is Copyright (c) 2002 by Kevin M. Rosenberg
;;;; and Copyright (c) 1999-2001 by Pierre R. Mai
(defpackage :clsql-mysql
(:use :common-lisp :clsql-sys :mysql)
+ (:export #:mysql-database)
(:documentation "This is the CLSQL interface to MySQL."))
(in-package :clsql-mysql)
:connection-spec connection-spec
:errno (mysql-errno mysql-ptr)
:error (mysql-error-string mysql-ptr))
- (uffi:with-cstring (host-native host)
- (uffi:with-cstring (user-native user)
- (uffi:with-cstring (password-native password)
- (uffi:with-cstring (db-native db)
- (uffi:with-cstring (socket-native socket)
- (let ((error-occurred nil))
- (unwind-protect
- (if (uffi:null-pointer-p
- (mysql-real-connect
- mysql-ptr host-native user-native password-native
- db-native 0 socket-native 0))
- (progn
- (setq error-occurred t)
- (error 'clsql-connect-error
- :database-type database-type
- :connection-spec connection-spec
- :errno (mysql-errno mysql-ptr)
- :error (mysql-error-string mysql-ptr)))
- (make-instance 'mysql-database
- :name (database-name-from-spec connection-spec
- database-type)
- :mysql-ptr mysql-ptr))
- (when error-occurred (mysql-close mysql-ptr)))))))))))))
+ (uffi:with-cstrings ((host-native host)
+ (user-native user)
+ (password-native password)
+ (db-native db)
+ (socket-native socket))
+ (let ((error-occurred nil))
+ (unwind-protect
+ (if (uffi:null-pointer-p
+ (mysql-real-connect
+ mysql-ptr host-native user-native password-native
+ db-native 0 socket-native 0))
+ (progn
+ (setq error-occurred t)
+ (error 'clsql-connect-error
+ :database-type database-type
+ :connection-spec connection-spec
+ :errno (mysql-errno mysql-ptr)
+ :error (mysql-error-string mysql-ptr)))
+ (make-instance 'mysql-database
+ :name (database-name-from-spec connection-spec
+ database-type)
+ :mysql-ptr mysql-ptr))
+ (when error-occurred (mysql-close mysql-ptr)))))))))
(defmethod database-disconnect ((database mysql-database))
(defstruct mysql-result-set
(res-ptr (uffi:make-null-pointer 'mysql-mysql-res)
:type mysql-mysql-res-ptr-def)
- (full-set nil))
+ (field-types nil :type cons)
+ (full-set nil :type boolean))
(defmethod database-dump-result-set (result-set (database mysql-database))
(mysql-free-result (mysql-result-set-res-ptr result-set))
-(defmethod database-query (query-expression (database mysql-database))
+(defmethod database-query (query-expression (database mysql-database) field-types)
(with-slots (mysql-ptr) database
(uffi:with-cstring (query-native query-expression)
(if (zerop (mysql-query mysql-ptr query-native))
:error (mysql-error-string mysql-ptr))))))
-(defmethod database-query-result-set (query-expression
- (database mysql-database)
- &optional full-set)
+(defmethod database-query-result-set (query-expression (database mysql-database)
+ &key full-set field-types)
(uffi:with-cstring (query-native query-expression)
(let ((mysql-ptr (database-mysql-ptr database)))
(declare (type mysql-mysql-ptr-def mysql-ptr))