+
+
+;; Checks for closed database
+
+(defmethod database-disconnect :before ((database database))
+ (unless (is-database-open database)
+ (signal-closed-database-error database)))
+
+(defmethod database-query :before (query-expression (database database)
+ result-set field-names)
+ (declare (ignore query-expression result-set field-names))
+ (unless (is-database-open database)
+ (signal-closed-database-error database)))
+
+(defmethod database-execute-command :before (sql-expression (database database))
+ (declare (ignore sql-expression))
+ (unless (is-database-open database)
+ (signal-closed-database-error database)))
+
+(defmethod database-query-result-set :before (expr (database database)
+ &key full-set result-types)
+ (declare (ignore expr full-set result-types))
+ (unless (is-database-open database)
+ (signal-closed-database-error database)))
+
+(defmethod database-dump-result-set :before (result-set (database database))
+ (declare (ignore result-set))
+ (unless (is-database-open database)
+ (signal-closed-database-error database)))
+
+(defmethod database-store-next-row :before (result-set (database database) list)
+ (declare (ignore result-set list))
+ (unless (is-database-open database)
+ (signal-closed-database-error database)))
+
+(defmethod database-commit-transaction :before ((database database))
+ (unless (is-database-open database)
+ (signal-closed-database-error database)))
+
+(defmethod database-start-transaction :before ((database database))
+ (unless (is-database-open database)
+ (signal-closed-database-error database)))
+
+(defmethod database-abort-transaction :before ((database database))
+ (unless (is-database-open database)
+ (signal-closed-database-error database)))
+
+(defgeneric describe-table (table &key database)
+ (:documentation "Describes a table, returns a list of name/type for columns in table"))
+