;;;;
;;;; 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))))
;;;; 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
;;;;
(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))
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)
;;;; 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
(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
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*))