X-Git-Url: http://git.kpe.io/?p=clsql.git;a=blobdiff_plain;f=sql%2Fconditions.lisp;fp=sql%2Fconditions.lisp;h=6fc1af5aa4017a980f9b356ea11a7084265cbb5b;hp=3ef94122cd93c884652c1d994490bea07eba3421;hb=31ae82f1e0aefcdd11a25239b6fb21c13d38d9f2;hpb=22f792cf09747cce9998bed27bbd7ea3cf21b878 diff --git a/sql/conditions.lisp b/sql/conditions.lisp index 3ef9412..6fc1af5 100644 --- a/sql/conditions.lisp +++ b/sql/conditions.lisp @@ -142,3 +142,28 @@ connection is no longer usable.")) (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 'sql-value-conversion-error + :expected-type type :value val :database database) + (use-value (new-val) + :report + (lambda (stream) + (write-sequence + "Use a different value instead of this failed conversion" stream)) + (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)))