r1653: More field-type updates
[clsql.git] / interfaces / mysql / mysql-sql.cl
index 37b88eb053a10bbe215f7f82c51332d5d3b948a3..8d8f243cfb9199c25b6cc443ac786706a96c53fa 100644 (file)
@@ -8,7 +8,7 @@
 ;;;;                Original code by Pierre R. Mai 
 ;;;; Date Started:  Feb 2002
 ;;;;
-;;;; $Id: mysql-sql.cl,v 1.2 2002/03/23 17:07:40 kevin Exp $
+;;;; $Id: mysql-sql.cl,v 1.6 2002/03/24 22:25:51 kevin Exp $
 ;;;;
 ;;;; This file, part of CLSQL, is Copyright (c) 2002 by Kevin M. Rosenberg
 ;;;; and Copyright (c) 1999-2001 by Pierre R. Mai
 ;;;;    for MYSQL structure. This will make the code more robust in
 ;;;;    the event that MySQL library changes the size of the mysql-mysql
 ;;;;    structure.
+;;;;
+;;;; Mar 2002
+;;;; Added field types
 
 (defpackage :clsql-mysql
     (:use :common-lisp :clsql-sys :mysql)
+    (:export #:mysql-database)
     (:documentation "This is the CLSQL interface to MySQL."))
 
 (in-package :clsql-mysql)
 (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)
+  (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))
                         collect
                           (loop for i from 0 below (mysql-num-fields res-ptr)
                               collect
-                                (uffi:convert-from-cstring
+                                (uffi:convert-from-foreign-string
                                  (uffi:deref-array row 'mysql-row i))))
                   (mysql-free-result res-ptr))
               (error 'clsql-sql-error
                :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))
            (declare (type mysql-mysql-res-ptr-def res-ptr))
            (if (not (uffi:null-pointer-p res-ptr))
                (if full-set
-                   (values (make-mysql-result-set :res-ptr res-ptr :full-set t)
+                   (values (make-mysql-result-set :res-ptr res-ptr :full-set t
+                                                  :field-types field-types)
                            (mysql-num-fields res-ptr)
                            (mysql-num-rows res-ptr))
                  (values (make-mysql-result-set :res-ptr res-ptr)