X-Git-Url: http://git.kpe.io/?a=blobdiff_plain;f=base%2Fconditions.lisp;h=d5a918ade3ad10388a10d906cc8d4c0ee04cbd75;hb=064bb338ef1375940085db10ec5a202d32e6b68b;hp=d1280dc7908e30fd8344b74641fdb99888aac8a2;hpb=fa071351835a2c754895cb917db9c63303e7b5c1;p=clsql.git diff --git a/base/conditions.lisp b/base/conditions.lisp index d1280dc..d5a918a 100644 --- a/base/conditions.lisp +++ b/base/conditions.lisp @@ -2,15 +2,15 @@ ;;;; ************************************************************************* ;;;; FILE IDENTIFICATION ;;;; -;;;; Name: conditions.cl +;;;; Name: conditions.lisp ;;;; Purpose: Error conditions for high-level SQL interface ;;;; Programmers: Kevin M. Rosenberg based on ;;;; Original code by Pierre R. Mai ;;;; Date Started: Feb 2002 ;;;; -;;;; $Id: conditions.lisp,v 1.2 2002/10/21 07:45:50 kevin Exp $ +;;;; $Id$ ;;;; -;;;; This file, part of CLSQL, is Copyright (c) 2002 by Kevin M. Rosenberg +;;;; This file, part of CLSQL, is Copyright (c) 2002-2004 by Kevin M. Rosenberg ;;;; and Copyright (c) 1999-2001 by Pierre R. Mai ;;;; ;;;; CLSQL users are granted the rights to distribute and use this software @@ -18,8 +18,7 @@ ;;;; (http://opensource.franz.com/preamble.html), also known as the LLGPL. ;;;; ************************************************************************* -(declaim (optimize (debug 3) (speed 3) (safety 1) (compilation-speed 0))) -(in-package :clsql-base-sys) +(in-package #:clsql-base-sys) ;;; Conditions (define-condition clsql-condition () @@ -62,21 +61,30 @@ and signal an clsql-invalid-spec-error if they don't match." :database-type ,database-type :template (quote ,template))))) -(define-condition clsql-connect-error (clsql-error) +(define-condition clsql-access-error (clsql-error) ((database-type :initarg :database-type - :reader clsql-connect-error-database-type) + :reader clsql-access-error-database-type) (connection-spec :initarg :connection-spec - :reader clsql-connect-error-connection-spec) - (errno :initarg :errno :reader clsql-connect-error-errno) - (error :initarg :error :reader clsql-connect-error-error)) + :reader clsql-access-error-connection-spec) + (error :initarg :error :reader clsql-access-error-error)) + (:report (lambda (c stream) + (format stream "While trying to access database ~A~% using database-type ~A:~% Error ~A~% has occurred." + (database-name-from-spec + (clsql-access-error-connection-spec c) + (clsql-access-error-database-type c)) + (clsql-access-error-database-type c) + (clsql-access-error-error c))))) + +(define-condition clsql-connect-error (clsql-access-error) + ((errno :initarg :errno :reader clsql-connect-error-errno)) (: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 - (clsql-connect-error-connection-spec c) - (clsql-connect-error-database-type c)) - (clsql-connect-error-database-type c) + (clsql-access-error-connection-spec c) + (clsql-access-error-database-type c)) + (clsql-access-error-database-type c) (clsql-connect-error-errno c) - (clsql-connect-error-error c))))) + (clsql-access-error-error c))))) (define-condition clsql-sql-error (clsql-error) ((database :initarg :database :reader clsql-sql-error-database) @@ -157,3 +165,27 @@ and signal an clsql-invalid-spec-error if they don't match." 'clsql-nodb-error :database database)) +(defun signal-no-database-error () + (cerror "Ignore this error and return nil." + 'clsql-nodb-error)) + +(define-condition clsql-type-error (clsql-error clsql-condition) + ((slotname :initarg :slotname + :reader clsql-type-error-slotname) + (typespec :initarg :typespec + :reader clsql-type-error-typespec) + (value :initarg :value + :reader clsql-type-error-value)) + (:report (lambda (c stream) + (format stream + "Invalid value ~A in slot ~A, not of type ~A." + (clsql-type-error-value c) + (clsql-type-error-slotname c) + (clsql-type-error-typespec c))))) + +(define-condition clsql-sql-syntax-error (clsql-error) + ((reason :initarg :reason + :reader clsql-sql-syntax-error-reason)) + (:report (lambda (c stream) + (format stream "Invalid SQL syntax: ~A" + (clsql-sql-syntax-error-reason c)))))