module DB.HSQL.Error(SqlError(..),sqlErrorTc) where
import Control.Exception(Exception(..),SomeException(..))
import Data.Dynamic(Typeable,TyCon,mkTyCon,cast)
import DB.HSQL.Type(SqlType)
data SqlError
= SqlError { seState :: String
, seNativeError :: Int
, seErrorMsg :: String }
| SqlNoData
| SqlInvalidHandle
| SqlStillExecuting
| SqlNeedData
| SqlBadTypeCast { seFieldName :: String
, seFieldType :: SqlType }
| SqlFetchNull { seFieldName :: String }
| SqlUnknownField { seFieldName :: String }
| SqlUnsupportedOperation
| SqlClosedHandle
#ifdef __GLASGOW_HASKELL__
deriving Typeable
#else
instance Typeable SqlError where
typeOf _ = mkAppTy sqlErrorTc []
#endif
sqlErrorTc :: TyCon
sqlErrorTc = mkTyCon "Database.HSQL.SqlError"
instance Show SqlError where
showsPrec _ (SqlError{seErrorMsg=msg}) = showString msg
showsPrec _ SqlNoData = showString "No data"
showsPrec _ SqlInvalidHandle = showString "Invalid handle"
showsPrec _ SqlStillExecuting = showString "Stlll executing"
showsPrec _ SqlNeedData = showString "Need data"
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