X-Git-Url: http://git.kpe.io/?p=clsql.git;a=blobdiff_plain;f=sql%2Ffunctional.cl;h=e283e5d1191b5c7de3dae5b8a094c1cb3048ea10;hp=d5f72ddb6e41916c2eaa7c59801e3b2273167ae0;hb=998937376fa6f9ce29bd3c7954fb0ebca91c37d7;hpb=8213ff48f5362c3d4792444c929f50bd128bd044 diff --git a/sql/functional.cl b/sql/functional.cl index d5f72dd..e283e5d 100644 --- a/sql/functional.cl +++ b/sql/functional.cl @@ -8,7 +8,7 @@ ;;;; ;;;; Copyright (c) 1999-2001 Pierre R. Mai ;;;; -;;;; $Id: functional.cl,v 1.1 2002/03/23 14:04:54 kevin Exp $ +;;;; $Id: functional.cl,v 1.8 2002/09/17 17:16:43 kevin Exp $ ;;;; ;;;; This file is part of CLSQL. ;;;; @@ -87,8 +87,13 @@ (defmacro with-database ((db-var connection-spec &rest connect-args) &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 on exit from the body." - `(let ((,db-var (connect ,connection-spec ,@connect-args))) - (unwind-protect - (let ((,db-var ,db-var)) ,@body) - (disconnect :database ,db-var)))) +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))) \ No newline at end of file