19 Apr 2004 Kevin Rosenberg (kevin@rosenberg.net)
- * Version 2.7.10
+ * Version 2.8.0: New API function: LIST-DATABASES
* base/utils.lisp: Fix command-output on CMUCL/SBCL
-
+ * db-*/*-sql.lisp: Add new database-list function
+ * base/database.lisp: Add new LIST-DATABASES command
+
18 Apr 2004 Kevin Rosenberg (kevin@rosenberg.net)
* Version 2.7.9
* db-sqlite/sqlite-sql.lisp: Fix sequence functions.
(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
"Creates a database, returns T if successfull or signals an error."))
(defgeneric database-probe (connection-spec type)
+ (:method (spec type)
+ (declare (ignore spec))
+ (warn "database-proe not support for database-type ~A." type))
(:documentation
"Probes for the existence of a database, returns T if database found or NIL
if not found. May signal an error if unable to communicate with database server."))
+(defgeneric database-list (connection-spec type)
+ (:method (spec type)
+ (declare (ignore spec))
+ (warn "database-list not support for database-type ~A." type))
+ (:documentation
+ "Lists all databases found for TYPE. May signal an error if unable to communicate with database server."))
+
(defgeneric database-destroy (connection-spec database)
(:documentation "Destroys (drops) a database."))
#:database-create
#:database-destroy
#:database-probe
+ #:database-list
#:database-describe-table
#:database-list-tables
#:create-database
#:destroy-database
#:probe-database
+ #:list-databases
;; basic-sql.lisp
#:query
t))))
(defmethod database-probe (connection-spec (type (eql :mysql)))
+ (when (find (second connection-spec) (database-list connection-spec type)
+ :key #'car :test #'string-equal)
+ t))
+
+(defmethod database-list (connection-spec (type (eql :mysql)))
(destructuring-bind (host name user password) connection-spec
+ (declare (ignore name))
(let ((database (database-connect (list host "mysql" user password) type)))
(unwind-protect
- (when
- (find name (database-query "select db from db"
- database :auto)
- :key #'car :test #'string-equal)
- t)
- (database-disconnect database)))))
+ (progn
+ (setf (slot-value database 'clsql-base-sys::state) :open)
+ (mapcar #'car (database-query "show databases" database :auto)))
+ (progn
+ (database-disconnect database)
+ (setf (slot-value database 'clsql-base-sys::state) :closed))))))
(when (clsql-base-sys:database-type-library-loaded :mysql)
(execute-command (format nil "drop database ~A" name))
(database-disconnect database)))))
+
(defmethod database-probe (connection-spec (type (eql :postgresql-socket)))
+ (when (find (second connection-spec) (database-list connection-spec type)
+ :key #'car :test #'string-equal)
+ t))
+
+(defmethod database-list (connection-spec (type (eql :postgresql-socket)))
(destructuring-bind (host name user password) connection-spec
+ (declare (ignore name))
(let ((database (database-connect (list host "template1" user password)
type)))
(unwind-protect
- (when
- (find name (database-query "select datname from pg_database"
- database :auto)
- :key #'car :test #'string-equal)
- t)
- (database-disconnect database)))))
+ (progn
+ (setf (slot-value database 'clsql-base-sys::state) :open)
+ (mapcar #'car (database-query "select datname from pg_database"
+ database :auto)))
+ (progn
+ (database-disconnect database)
+ (setf (slot-value database 'clsql-base-sys::state) :closed))))))
(defmethod database-describe-table ((database postgresql-socket-database)
table)
(defmethod database-probe (connection-spec (type (eql :postgresql)))
+ (when (find (second connection-spec) (database-list connection-spec type)
+ :key #'car :test #'string-equal)
+ t))
+
+(defmethod database-list (connection-spec (type (eql :postgresql)))
(destructuring-bind (host name user password) connection-spec
+ (declare (ignore name))
(let ((database (database-connect (list host "template1" user password)
type)))
(unwind-protect
- (when
- (find name (database-query "select datname from pg_database"
- database :auto)
- :key #'car :test #'string-equal)
- t)
- (database-disconnect database)))))
+ (progn
+ (setf (slot-value database 'clsql-base-sys::state) :open)
+ (mapcar #'car (database-query "select datname from pg_database"
+ database :auto)))
+ (progn
+ (database-disconnect database)
+ (setf (slot-value database 'clsql-base-sys::state) :closed))))))
(defmethod database-describe-table ((database postgresql-database) table)
(database-query
-cl-sql (2.7.10-1) unstable; urgency=low
+cl-sql (2.8.0-1) unstable; urgency=low
* New upstream