X-Git-Url: http://git.kpe.io/?a=blobdiff_plain;f=interfaces%2Fpostgresql%2Fpostgresql-sql.cl;h=a1dfdd7081f863c60625ac4adf7226ad68568161;hb=e596bda48686fd7df4fe7cb2740cd2144a22fb79;hp=cb83a348b0cfe0a637cdf0042e008ceeef6ca8bd;hpb=8213ff48f5362c3d4792444c929f50bd128bd044;p=clsql.git diff --git a/interfaces/postgresql/postgresql-sql.cl b/interfaces/postgresql/postgresql-sql.cl index cb83a34..a1dfdd7 100644 --- a/interfaces/postgresql/postgresql-sql.cl +++ b/interfaces/postgresql/postgresql-sql.cl @@ -8,7 +8,7 @@ ;;;; Original code by Pierre R. Mai ;;;; Date Started: Feb 2002 ;;;; -;;;; $Id: postgresql-sql.cl,v 1.1 2002/03/23 14:04:53 kevin Exp $ +;;;; $Id: postgresql-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 @@ -68,30 +68,30 @@ (host db user password &optional port options tty)) (destructuring-bind (host db user password &optional port options tty) connection-spec - (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 (port-native port) - (uffi:with-cstring (options-native options) - (uffi:with-cstring (tty-native tty) - (let ((connection (PQsetdbLogin host-native port-native - options-native tty-native - db-native user-native - password-native))) - (declare (type pgsql-conn-def connection)) - (when (not (eq (PQstatus connection) - pgsql-conn-status-type#connection-ok)) - (error 'clsql-connect-error - :database-type database-type - :connection-spec connection-spec - :errno (PQstatus connection) - :error (tidy-error-message - (PQerrorMessage connection)))) - (make-instance 'postgresql-database - :name (database-name-from-spec connection-spec - database-type) - :conn-ptr connection))))))))))) + (uffi:with-cstrings ((host-native host) + (user-native user) + (password-native password) + (db-native db) + (port-native port) + (options-native options) + (tty-native tty)) + (let ((connection (PQsetdbLogin host-native port-native + options-native tty-native + db-native user-native + password-native))) + (declare (type pgsql-conn-def connection)) + (when (not (eq (PQstatus connection) + pgsql-conn-status-type#connection-ok)) + (error 'clsql-connect-error + :database-type database-type + :connection-spec connection-spec + :errno (PQstatus connection) + :error (tidy-error-message + (PQerrorMessage connection)))) + (make-instance 'postgresql-database + :name (database-name-from-spec connection-spec + database-type) + :conn-ptr connection))))) (defmethod database-disconnect ((database postgresql-database)) @@ -99,7 +99,7 @@ (setf (database-conn-ptr database) nil) t) -(defmethod database-query (query-expression (database postgresql-database)) +(defmethod database-query (query-expression (database postgresql-database) field-types) (let ((conn-ptr (database-conn-ptr database))) (declare (type pgsql-conn-def conn-ptr)) (uffi:with-cstring (query-native query-expression) @@ -120,7 +120,7 @@ (loop for i from 0 below (PQnfields result) collect (if (zerop (PQgetisnull result tuple-index i)) - (uffi:convert-from-cstring + (uffi:convert-from-foreign-string (PQgetvalue result tuple-index i)) nil)))) (t @@ -164,13 +164,13 @@ (defstruct postgresql-result-set (res-ptr (uffi:make-null-pointer 'pgsql-result) :type pgsql-result-def) - (num-tuples 0) - (num-fields 0) - (tuple-index 0)) + (field-types nil) + (num-tuples 0 :type integer) + (num-fields 0 :type integer) + (tuple-index 0 :type integer)) -(defmethod database-query-result-set (query-expression - (database postgresql-database) - &optional full-set) +(defmethod database-query-result-set (query-expression (database postgresql-database) + &key full-set field-types) (let ((conn-ptr (database-conn-ptr database))) (declare (type pgsql-conn-def conn-ptr)) (uffi:with-cstring (query-native query-expression) @@ -188,13 +188,15 @@ (values (make-postgresql-result-set :res-ptr result :num-fields (PQnfields result) - :num-tuples (PQntuples result)) + :num-tuples (PQntuples result) + :field-types field-types) (PQnfields result) (PQntuples result)) (values (make-postgresql-result-set :res-ptr result :num-fields (PQnfields result) - :num-tuples (PQntuples result)) + :num-tuples (PQntuples result) + :field-types field-types) (PQnfields result)))) (t (unwind-protect @@ -225,7 +227,7 @@ do (setf (car rest) (if (zerop (PQgetisnull result tuple-index i)) - (uffi:convert-from-cstring + (uffi:convert-from-foreign-string (PQgetvalue result tuple-index i)) nil)) finally