X-Git-Url: http://git.kpe.io/?a=blobdiff_plain;f=base%2Fdatabase.lisp;h=cc26d7119c517449b603ed41b654adeec3594017;hb=a3e1cd20eec3903790c6e8f126345558904488f4;hp=1c6fa63ee82fc12911175575a755470b3e8854aa;hpb=79dacf4fb7e6707e815c3e8072e5c809acaa9386;p=clsql.git diff --git a/base/database.lisp b/base/database.lisp index 1c6fa63..cc26d71 100644 --- a/base/database.lisp +++ b/base/database.lisp @@ -176,9 +176,24 @@ error should be signaled if the existing database connection cannot be closed. When non-nil (this is the default value) the connection is closed without error checking. When FORCE is nil, an error is signaled if the database connection has been lost." - ;; TODO: Support all backends. Perhaps integrate with pools - ;; Handle error and force keywords - (declare (ignore database error force))) + (let ((db (etypecase database + (database database) + ((or string list) + (let ((db (find-database database :errorp nil))) + (when (null db) + (if (and database error) + (error 'clsql-generic-error + :message + (format nil "Unable to find database with connection-spec ~A." database)) + (return-from reconnect nil))) + db))))) + + (when (is-database-open db) + (if force + (ignore-errors (disconnect :database db)) + (disconnect :database db :error nil))) + + (connect (connection-spec db)))) (defun status (&optional full) @@ -231,6 +246,10 @@ of full is NIL." (setq connection-spec (string-to-list-connection-spec connection-spec))) (database-destroy connection-spec database-type)) +(defun list-databases (connection-spec &key database-type) + (when (stringp connection-spec) + (setq connection-spec (string-to-list-connection-spec connection-spec))) + (database-list connection-spec database-type)) (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