X-Git-Url: http://git.kpe.io/?a=blobdiff_plain;f=sql%2Fdatabase.lisp;h=382f552955219276e2ba935f8e194b3156b9f5ea;hb=0ad64f85ff6cd99a78cc9ae6716ebbdb5627eaef;hp=83fe7d6a6df739e24dbedbf88fd2beecf4a0aab2;hpb=be383802fc1f47547eef6d57945023ff71d45657;p=clsql.git diff --git a/sql/database.lisp b/sql/database.lisp index 83fe7d6..382f552 100644 --- a/sql/database.lisp +++ b/sql/database.lisp @@ -1,8 +1,6 @@ ;;;; -*- Mode: LISP; Syntax: ANSI-Common-Lisp; Base: 10 -*- ;;;; ************************************************************************* ;;;; -;;;; $Id$ -;;;; ;;;; Base database functions ;;;; ;;;; This file is part of CLSQL. @@ -72,7 +70,8 @@ error is signalled." &key (if-exists *connect-if-exists*) (make-default t) (pool nil) - (database-type *default-database-type*)) + (database-type *default-database-type*) + (encoding nil)) "Connects to a database of the supplied DATABASE-TYPE which defaults to *DEFAULT-DATABASE-TYPE*, using the type-specific connection specification CONNECTION-SPEC. The value of IF-EXISTS, @@ -99,7 +98,8 @@ be taken from this pool." (asdf:operate 'asdf:load-op (ensure-keyword (concatenate 'string (symbol-name '#:clsql-) - (symbol-name database-type))))) + (symbol-name database-type))) + :verbose nil)) (if pool (let ((conn (acquire-from-pool connection-spec database-type pool))) @@ -150,6 +150,7 @@ be taken from this pool." (setf (slot-value result 'state) :open) (pushnew result *connected-databases*) (when make-default (setq *default-database* result)) + (setf (encoding result) encoding) result)))) @@ -308,10 +309,28 @@ system specified by DATABASE-TYPE." (setq connection-spec (string-to-list-connection-spec connection-spec))) (database-list connection-spec database-type)) +(defun encoding (db) + (when (typep db 'database) + (slot-value db 'encoding))) + +(defun (setf encoding) (encoding db) + (when (typep db 'database) + (setf (slot-value db 'encoding) encoding) + (when (eql (slot-value db 'state) :open) + (case (database-type db) + ;; FIXME: If database object is open then + ;; send command to SQL engine specifying the character + ;; encoding for the database + (:mysql + ) + ((:postgresql :postgresql-socket) + ))))) + (defmacro with-database ((db-var connection-spec &key make-default pool (if-exists *connect-if-exists*) - (database-type *default-database-type*)) + (database-type *default-database-type*) + (encoding nil)) &body body) "Evaluate the body in an environment, where DB-VAR is bound to the database connection given by CONNECTION-SPEC and CONNECT-ARGS. The @@ -321,7 +340,8 @@ from the body. MAKE-DEFAULT has a default value of NIL." :database-type ,database-type :if-exists ,if-exists :pool ,pool - :make-default ,make-default))) + :make-default ,make-default + :encoding ,encoding))) (unwind-protect (let ((,db-var ,db-var)) (progn ,@body)) @@ -332,4 +352,3 @@ from the body. MAKE-DEFAULT has a default value of NIL." `(progv '(*default-database*) (list ,database) ,@body)) -