r2913: *** empty log message ***
[clsql.git] / sql / sql.cl
index f5eebd730768fe4ee6e75670b1a4fd2d0daa365c..101d30f128619f28d6577920ff5df267ea58abd2 100644 (file)
@@ -8,7 +8,7 @@
 ;;;;                 Original code by Pierre R. Mai 
 ;;;; Date Started:  Feb 2002
 ;;;;
-;;;; $Id: sql.cl,v 1.13 2002/04/27 20:58:11 kevin Exp $
+;;;; $Id: sql.cl,v 1.19 2002/09/17 17:16:43 kevin Exp $
 ;;;;
 ;;;; This file, part of CLSQL, is Copyright (c) 2002 by Kevin M. Rosenberg
 ;;;; and Copyright (c) 1999-2001 by Pierre R. Mai
 ;;; Simple implementation of SQL along the lines of Harlequin's Common SQL
 
 
-;;; Database Types
-
-(defvar *loaded-database-types* nil
-  "Contains a list of database types which have been defined/loaded.")
-
-(defmethod database-type-load-foreign :after (database-type)
-  (when (database-type-library-loaded database-type)
-     (pushnew database-type *loaded-database-types*)))
-
-(defun reload-database-types ()
-  "Reloads any foreign code for the loaded database types after a dump."
-  (mapc #'database-type-load-foreign *loaded-database-types*))
-
-(defvar *default-database-type* nil
-  "Specifies the default type of database.  Currently only :mysql is
-supported.")
-
-(defvar *initialized-database-types* nil
-  "Contains a list of database types which have been initialized by calls
-to initialize-database-type.")
-
-(defun initialize-database-type (&key (database-type *default-database-type*))
-  "Initialize the given database-type, if it is not already
-initialized, as indicated by `*initialized-database-types*'."
-  (if (member database-type *initialized-database-types*)
-      t
-      (when (database-initialize-database-type database-type)
-       (push database-type *initialized-database-types*)
-       t)))
-
-
 ;;; Database handling
 
 (defvar *connect-if-exists* :error
@@ -76,8 +45,6 @@ initialized, as indicated by `*initialized-database-types*'."
 (defvar *default-database* nil
   "Specifies the default database to be used.")
 
-
-
 (defun find-database (database &optional (errorp t))
   (etypecase database
     (database
@@ -98,23 +65,26 @@ 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."
-  (let* ((db-name (database-name-from-spec connection-spec database-type))
-        (old-db (find-database db-name nil))
-        (result nil))
-    (if pool
-       (setq result (acquire-from-pool connection-spec database-type))
+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.
+"
+  (if pool
+    (acquire-from-pool connection-spec database-type 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 old-db
-         (case if-exists
-           (:new
-            (setq result
-              (database-connect connection-spec database-type)))
-           (:warn-new
-            (setq result
-              (database-connect connection-spec database-type))
-            (warn 'clsql-exists-warning :old-db old-db :new-db result))
-           (:error
-            (restart-case
+       (case if-exists
+;          (:new
+;           (setq result
+;             (database-connect connection-spec database-type)))
+         (:warn-new
+          (setq result
+                (database-connect connection-spec database-type))
+          (warn 'clsql-exists-warning :old-db old-db :new-db result))
+         (:error
+          (restart-case
                 (error 'clsql-exists-error :old-db old-db)
               (create-new ()
                   :report "Create a new connection."
@@ -123,24 +93,24 @@ connection-spec.  if-exists is currently ignored."
               (use-old ()
                   :report "Use the existing connection."
                 (setq result old-db))))
-           (:warn-old
-            (setq result old-db)
-            (warn 'clsql-exists-warning :old-db old-db :new-db old-db))
-           (:old
-            (setq result old-db)))
+         (:warn-old
+          (setq result old-db)
+          (warn 'clsql-exists-warning :old-db old-db :new-db old-db))
+         (:old
+          (setq result old-db)))
        (setq result
-         (database-connect connection-spec database-type))))
-    (when result
-      (pushnew result *connected-databases*)
-      (setq *default-database* result)
-      result)))
+             (database-connect connection-spec database-type)))
+      (when result
+       (pushnew result *connected-databases*)
+       (setq *default-database* result)
+       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*))