X-Git-Url: http://git.kpe.io/?a=blobdiff_plain;f=sql%2Fdatabase.lisp;h=c07cf7b1aad8b515e9ecb219d89709d3b8b4cc8d;hb=215ec41559dda52d46539d48a0aa390811c2423c;hp=faa384dd44a91013704b02dcdff4395ed5339bfb;hpb=6f9c91e01227e25e36560220628269258c80712d;p=clsql.git diff --git a/sql/database.lisp b/sql/database.lisp index faa384d..c07cf7b 100644 --- a/sql/database.lisp +++ b/sql/database.lisp @@ -307,21 +307,24 @@ 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." - (let ((result (gensym "result-"))) - (unless db-var (setf db-var '*default-database*)) - `(let ((,db-var (connect ,connection-spec ,@connect-args)) - (,result nil)) - (unwind-protect - (let ((,db-var ,db-var)) - (setf ,result (progn ,@body))) - (disconnect :database ,db-var)) - ,result))) - +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)) + (disconnect :database ,db-var)))) (defmacro with-default-database ((database) &rest body) "Perform BODY with DATABASE bound as *default-database*."