(define-condition clsql-simple-warning (simple-condition clsql-warning)
())
+(define-condition clsql-generic-error (clsql-error)
+ ((message :initarg :message
+ :reader clsql-generic-error-message))
+ (:report (lambda (c stream)
+ (format stream (clsql-generic-error-message c)))))
+
(define-condition clsql-invalid-spec-error (clsql-error)
((connection-spec :initarg :connection-spec
:reader clsql-invalid-spec-error-connection-spec)
(format stream "The database ~A has already been closed."
(clsql-closed-error-database c)))))
-(define-condition clsql-nodb-error (clsql-error)
- ((database :initarg :database :reader clsql-nodb-error-database))
+(define-condition clsql-no-database-error (clsql-error)
+ ((database :initarg :database :reader clsql-no-database-error-database))
(:report (lambda (c stream)
- (format stream "No such database ~S is open."
- (clsql-nodb-error-database c)))))
-
+ (format stream "~S is not a CLSQL database."
+ (clsql-no-database-error-database c)))))
+
+(define-condition clsql-odbc-error (clsql-error)
+ ((odbc-message :initarg :odbc-message
+ :reader clsql-odbc-error-message)
+ (sql-state :initarg :sql-state :initform nil
+ :reader clsql-odbc-error-sql-state))
+ (:report (lambda (c stream)
+ (format stream "[ODBC error] ~A; state: ~A"
+ (clsql-odbc-error-message c)
+ (clsql-odbc-error-sql-state c)))))
;; Signal conditions
'clsql-closed-error
:database database))
-(defun signal-nodb-error (database)
- (cerror "Ignore this error and return nil."
- 'clsql-nodb-error
- :database database))
-
-(defun signal-no-database-error ()
- (cerror "Ignore this error and return nil."
- 'clsql-nodb-error))
+(defun signal-no-database-error (database)
+ (error 'clsql-no-database-error :database database))
(define-condition clsql-type-error (clsql-error clsql-condition)
((slotname :initarg :slotname