X-Git-Url: http://git.kpe.io/?a=blobdiff_plain;ds=sidebyside;f=sql%2Fdatabase.lisp;h=b860d309f628d4de7001506809d48dbf90ddf712;hb=0b35694f3659e5ee739ea72ce74d798c3f0ddb73;hp=382f552955219276e2ba935f8e194b3156b9f5ea;hpb=cfb1303ed18a8a14554fbd506f52b176278ecd8e;p=clsql.git diff --git a/sql/database.lisp b/sql/database.lisp index 382f552..b860d30 100644 --- a/sql/database.lisp +++ b/sql/database.lisp @@ -18,6 +18,8 @@ CONNECT. Meaningful values are :new, :warn-new, :error, :warn-old and :old.") +;;TODO: this variable appears to be global, not thread specific and is +;; not protected when modifying the list. (defvar *connected-databases* nil "List of active database objects.") @@ -102,7 +104,7 @@ be taken from this pool." :verbose nil)) (if pool - (let ((conn (acquire-from-pool connection-spec database-type pool))) + (let ((conn (acquire-from-pool connection-spec database-type pool encoding))) (when make-default (setq *default-database* conn)) conn) (let* ((db-name (database-name-from-spec connection-spec database-type)) @@ -174,6 +176,7 @@ from a pool it will be released to this pool." (setf *default-database* (car *connected-databases*))) t)) (when (database-disconnect database) + ;;TODO: RACE COND: 2 threads disconnecting could stomp on *connected-databases* (setf *connected-databases* (delete database *connected-databases*)) (when (eq database *default-database*) (setf *default-database* (car *connected-databases*))) @@ -190,7 +193,9 @@ and signal an sql-user-error if they don't match. This function is called by database backends." `(handler-case (destructuring-bind ,template ,connection-spec - (declare (ignore ,@(remove '&optional template))) + (declare (ignore ,@(remove-if + (lambda (x) (member x '(&key &rest &optional))) + template))) t) (error () (error 'sql-user-error @@ -231,7 +236,7 @@ database connection cannot be closed, an error is signalled." (ignore-errors (disconnect :database db)) (disconnect :database db :error nil))) - (connect (connection-spec db)))) + (connect (connection-spec db) :encoding (encoding db)))) (defun status (&optional full)