r1901: updated with-database and connect/disconnect functions to work better with...
authorMarc Battyani <marc.battyani@fractalconcept.com>
Fri, 3 May 2002 20:50:18 +0000 (20:50 +0000)
committerMarc Battyani <marc.battyani@fractalconcept.com>
Fri, 3 May 2002 20:50:18 +0000 (20:50 +0000)
sql/functional.cl
sql/pool.cl
sql/sql.cl

index 9050b4cd81b0532b7d33e34432e4c7a808027348..754ad9eac2e44f9693b71ffbb5840569374acb8a 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.3 2002/05/03 20:50:18 marc.battyani Exp $
 ;;;;
 ;;;; This file is part of CLSQL. 
 ;;;;
                         &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)))
+If pool is t the the connection will be taken from the general pool,
+if pool is a conn-pool object the connection will be taken from this pool.
+The connection is automatically closed or released to the pool
+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))))
+       (disconnect :database ,db-var))))
index bf790a46c58b6dae9034ef5204c52f44ea572a6f..9e94deab90fe9390ef32ae2ca46cfe1cd91b40de 100644 (file)
@@ -7,7 +7,7 @@
 ;;;; Programmers:   Kevin M. Rosenberg, Marc Battyani
 ;;;; Date Started:  Apr 2002
 ;;;;
-;;;; $Id: pool.cl,v 1.3 2002/05/01 20:22:16 marc.battyani Exp $
+;;;; $Id: pool.cl,v 1.4 2002/05/03 20:50:18 marc.battyani Exp $
 ;;;;
 ;;;; This file, part of CLSQL, is Copyright (c) 2002 by Kevin M. Rosenberg
 ;;;;
@@ -43,7 +43,8 @@
 
 (defun clear-conn-pool (pool)
   (loop for conn across (all-connections pool)
-       do (disconnect :database conn))
+       do (setf (conn-pool conn) nil)
+          (disconnect :database conn))
   (setf (fill-pointer (free-connections pool)) 0)
   (setf (fill-pointer (all-connections pool)) 0))
 
@@ -59,7 +60,8 @@
     conn-pool))
 
 (defun acquire-from-pool (connection-spec database-type &optional pool)
-  (unless pool (setf pool (find-or-create-conn-pool connection-spec database-type)))
+  (unless (typep pool 'conn-pool)
+    (setf pool (find-or-create-conn-pool connection-spec database-type)))
   (acquire-from-conn-pool pool))
 
 (defun release-to-pool (database)
index 6d2d8bb1a8b0478b35ff640d931a658824c88248..310001eb221defd1860adb513c293d640fd3ff81 100644 (file)
@@ -8,7 +8,7 @@
 ;;;;                 Original code by Pierre R. Mai 
 ;;;; Date Started:  Feb 2002
 ;;;;
-;;;; $Id: sql.cl,v 1.14 2002/05/01 20:22:16 marc.battyani Exp $
+;;;; $Id: sql.cl,v 1.15 2002/05/03 20:50:18 marc.battyani Exp $
 ;;;;
 ;;;; This file, part of CLSQL, is Copyright (c) 2002 by Kevin M. Rosenberg
 ;;;; and Copyright (c) 1999-2001 by Pierre R. Mai
@@ -96,12 +96,15 @@ initialized, as indicated by `*initialized-database-types*'."
                (database-type *default-database-type*)
                (pool nil))
   "Connects to a database of the given database-type, using the type-specific
-connection-spec.  if-exists is currently ignored."
+connection-spec.  if-exists is currently ignored.
+If pool is t the the connection will be taken from the general pool,
+if pool is a conn-pool object the connection will be taken from this pool.
+"
   (let* ((db-name (database-name-from-spec connection-spec database-type))
         (old-db (unless (eq if-exists :new) (find-database db-name nil)))
         (result nil))
     (if pool
-       (setq result (acquire-from-pool connection-spec database-type))
+       (setq result (acquire-from-pool connection-spec database-type pool))
       (if old-db
          (case if-exists
 ;          (:new
@@ -134,11 +137,11 @@ connection-spec.  if-exists is currently ignored."
       result)))
 
 
-(defun disconnect (&key (database *default-database*)
-                  (pool nil))
+(defun disconnect (&key (database *default-database*))
   "Closes the connection to database. Resets *default-database* if that
-database was disconnected and only one other connection exists."
-  (if pool
+database was disconnected and only one other connection exists.
+if the database is from a pool it will be released to this pool."
+  (if (conn-pool database)
       (release-to-pool database)
     (when (database-disconnect database)
       (setq *connected-databases* (delete database *connected-databases*))