r2913: *** empty log message ***
[clsql.git] / sql / functional.cl
index 9050b4cd81b0532b7d33e34432e4c7a808027348..e283e5d1191b5c7de3dae5b8a094c1cb3048ea10 100644 (file)
@@ -8,7 +8,7 @@
 ;;;;
 ;;;; Copyright (c) 1999-2001 Pierre R. Mai
 ;;;;
-;;;; $Id: functional.cl,v 1.2 2002/05/03 18:17:50 kevin Exp $
+;;;; $Id: functional.cl,v 1.8 2002/09/17 17:16:43 kevin Exp $
 ;;;;
 ;;;; This file is part of CLSQL. 
 ;;;;
               where)
       :database database))))
 
-(defmacro with-database ((db-var connection-spec 
-                                &key (if-exists *connect-if-exists*)
-                                (database-type *default-database-type*)
-                                (pool nil)) 
-                        &body body)
+(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 :pool pool
-                          :database-type database-type :if-exists if-exists)))
-     (unwind-protect
-         (let ((,db-var ,db-var)) ,@body)
-       (disconnect :database ,db-var :pool pool))))
+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