X-Git-Url: http://git.kpe.io/?p=clsql.git;a=blobdiff_plain;f=sql%2Fdatabase.lisp;fp=sql%2Fdatabase.lisp;h=c07cf7b1aad8b515e9ecb219d89709d3b8b4cc8d;hp=3e8912deff3e59da943cc2b8645c041b414b4b44;hb=c41d81c0d1233372012a1de93fcdfd6b2a6e5618;hpb=6a10245b9f5d84290c280eb583f97e1ddaa9cbe5 diff --git a/sql/database.lisp b/sql/database.lisp index 3e8912d..c07cf7b 100644 --- a/sql/database.lisp +++ b/sql/database.lisp @@ -307,13 +307,20 @@ system specified by DATABASE-TYPE." (setq connection-spec (string-to-list-connection-spec connection-spec))) (database-list connection-spec database-type)) -(defmacro with-database ((db-var connection-spec &rest connect-args) &body body) +(defmacro with-database ((db-var connection-spec + &key make-default pool + (if-exists *connect-if-exists*) + (database-type *default-database-type*)) + &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 connection is automatically closed or released to the pool on exit -from the body." - (unless db-var (setf db-var '*default-database*)) - `(let ((,db-var (connect ,connection-spec ,@connect-args))) +from the body. MAKE-DEFAULT has a default value of NIL." + `(let ((,db-var (connect ,connection-spec + :database-type ,database-type + :if-exists ,if-exists + :pool ,pool + :make-default ,make-default))) (unwind-protect (let ((,db-var ,db-var)) (progn ,@body))