"While accessing database ~A~% Warning: ~A~% has occurred."
(sql-warning-database c)
(sql-warning-message c)))))
+
+(define-condition database-too-strange (sql-user-error)
+ ()
+ (:documentation "Used to signal cases where CLSQL is going to fail at
+ mapping your database correctly"))
+
+(defun signal-database-too-strange (message)
+ (error 'database-too-strange :message message))
+
+
+(define-condition sql-value-conversion-error (error)
+ ((expected-type :accessor expected-type :initarg :expected-type :initform nil)
+ (value :accessor value :initarg :value :initform nil)
+ (database :accessor database :initarg :database :initform nil)))
+
+(defun error-converting-value (val type &optional (database *default-database*))
+ (restart-case
+ (error (make-condition
+ 'sql-value-conversion-error
+ :expected-type type :value val :database database))
+ (continue ()
+ :report "Continue using the unconverted value"
+ (values val t))
+ (use-value (new-val)
+ :report "Use a different value instead of this failed conversion"
+ (values new-val t)
+ )))
+
+(defun maybe-error-converting-value
+ (new val type &optional (database *default-database*))
+ (if (typep new type)
+ new
+ (error-converting-value
+ val type database)))