module DB.HSQL.Error(SqlError(..)) where
import Control.Exception(Exception(..),SomeException(..))
import Data.Dynamic(Typeable,TyCon,mkTyCon3,cast)
import DB.HSQL.Type(SqlType)
data SqlError
= SqlError
{ seState :: String
, seNativeError :: Int
, seErrorMsg :: String
}
| SqlNoMoreData
| SqlInvalidHandle
| SqlStillExecuting
| SqlNeedMoreData
| SqlBadTypeCast
{ seFieldName :: String
, seFieldType :: SqlType
}
| SqlFetchNull
{ seFieldName :: String }
| SqlUnknownField
{ seFieldName :: String }
| SqlUnsupportedOperation
| SqlClosedHandle
#ifdef __GLASGOW_HASKELL__
deriving (Eq,Ord,Typeable)
#else
deriving (Eq,Ord)
instance Typeable SqlError where
typeOf _ = mkAppTy sqlErrorTc []
#endif
sqlErrorTc :: TyCon
sqlErrorTc = mkTyCon3 "DB.HSQL" "Error" "SqlError"
instance Show SqlError where
showsPrec _ (SqlError{seErrorMsg=msg}) = showString msg
showsPrec _ SqlNoMoreData =
showString "No more data was available"
showsPrec _ SqlInvalidHandle = showString "Invalid handle"
showsPrec _ SqlStillExecuting = showString "Still executing"
showsPrec _ SqlNeedMoreData =
showString "More data is needed, e.g. additional connection specs"
showsPrec _ (SqlBadTypeCast name tp) =
showString ("The type of "++name++" field can't be converted to "
++show tp++" type")
showsPrec _ (SqlFetchNull name) =
showString ("The value of "++name++" field is null")
showsPrec _ (SqlUnknownField name) =
showString ("Unknown field name: "++name)
showsPrec _ SqlUnsupportedOperation = showString "Unsupported operation"
showsPrec _ SqlClosedHandle =
showString "The referenced handle is already closed"
instance Exception SqlError where
toException = SomeException
fromException (SomeException exception) =
cast exception