r10048: support clisp's attribute name for the type field in class direct slots
[clsql.git] / sql / conditions.lisp
index 4e3380f7e276d655a460d4af995d08029c492834..bd36b8c0ddefdf068fb125d1fa2133538682c603 100644 (file)
 (in-package #:clsql-sys)
 
 (defvar *backend-warning-behavior* :warn
-  "Action to perform on warning messages from backend. Default is to :warn. May also be
-set to :error to signal an error or :ignore/nil to silently ignore the warning.")
+  "Action to perform on warning messages from backend. Default is
+to :warn. May also be set to :error to signal an error
+or :ignore/nil to silently ignore the warning.")
 
 ;;; CommonSQL-compatible conditions
  
 (define-condition sql-condition ()
   ())
 
-(define-condition sql-error (simple-error)
+(define-condition sql-error (simple-error sql-condition)
   ())
 
 (define-condition sql-database-error (sql-error)
@@ -58,9 +59,11 @@ set to :error to signal an error or :ignore/nil to silently ignore the warning."
                  :reader sql-error-connection-spec))
   (:report (lambda (c stream)
             (format stream "While trying to connect to database ~A~%  using database-type ~A:~%  Error ~D / ~A~%  has occurred."
-                    (database-name-from-spec
-                     (sql-error-connection-spec c)
-                     (sql-error-database-type c))
+                    (when (and (sql-error-connection-spec c)
+                               (sql-error-database-type c))
+                      (database-name-from-spec
+                       (sql-error-connection-spec c)
+                       (sql-error-database-type c)))
                     (sql-error-database-type c)
                     (sql-error-error-id c)
                     (sql-error-database-message c))))
@@ -111,6 +114,8 @@ connection is no longer usable."))
 (defun signal-closed-database-error (database)
   (error 'sql-fatal-error
         :database database
+        :connection-spec (when database (connection-spec database))
+        :database-type (when database (database-type database))
         :message "Database is closed."))
 
 (defun signal-no-database-error (database)