X-Git-Url: http://git.kpe.io/?p=clsql.git;a=blobdiff_plain;f=sql%2Fconditions.lisp;h=e19805248bd5e6f9601a98db29a3e76157741238;hp=549f8f869f7a8e155b47d0739851bdf545364e81;hb=HEAD;hpb=e567409d9fff3f7231c2a0bb69b345e19de2b246 diff --git a/sql/conditions.lisp b/sql/conditions.lisp index 549f8f8..e198052 100644 --- a/sql/conditions.lisp +++ b/sql/conditions.lisp @@ -5,9 +5,7 @@ ;;;; Name: conditions.lisp ;;;; Purpose: Error conditions for CLSQL ;;;; -;;;; $Id$ -;;;; -;;;; This file, part of CLSQL, is Copyright (c) 2002-2004 by Kevin M. Rosenberg +;;;; This file, part of CLSQL, is Copyright (c) 2002-2010 by Kevin M. Rosenberg ;;;; ;;;; CLSQL users are granted the rights to distribute and use this software ;;;; as governed by the terms of the Lisp Lesser GNU Public License @@ -136,3 +134,37 @@ connection is no longer usable.")) "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)))