postgresql-simple-0.5.1.1: Mid-Level PostgreSQL client library

Copyright(c) 2012-2013 Leonid Onokhov, Joey Adams
LicenseBSD3
MaintainerLeon P Smith <leon@melding-monads.com>
Stabilityexperimental
Safe HaskellNone
LanguageHaskell98

Database.PostgreSQL.Simple.Errors

Description

| Module for parsing errors from postgresql error messages. Currently only parses integrity violation errors (class 23).

Note: Success of parsing may depend on language settings.

Synopsis

Documentation

data ConstraintViolation Source

Constructors

NotNullViolation ByteString

The field is a column name

ForeignKeyViolation ByteString ByteString

Table name and name of violated constraint

UniqueViolation ByteString

Name of violated constraint

CheckViolation ByteString ByteString

Relation name (usually table), constraint name

ExclusionViolation ByteString

Name of the exclusion violation constraint

constraintViolation :: SqlError -> Maybe ConstraintViolation Source

Tries to convert SqlError to ConstrainViolation, checks sqlState and succeedes only if able to parse sqlErrorMsg.

createUser = catchJust constraintViolation catcher $ execute conn ...
  where
    catcher UniqueViolation "user_login_key" = ...
    catcher _ = ...

constraintViolationE :: SqlError -> Maybe (SqlError, ConstraintViolation) Source

Like constraintViolation, but also packs original SqlError.

createUser = catchJust constraintViolationE catcher $ execute conn ...
  where
    catcher (_, UniqueViolation "user_login_key") = ...
    catcher (e, _) = throwIO e

catchViolation :: (SqlError -> ConstraintViolation -> IO a) -> IO a -> IO a Source

Catches SqlError, tries to convert to ConstraintViolation, re-throws on fail. Provides alternative interface to catchJust

createUser = catchViolation catcher $ execute conn ...
  where
    catcher _ (UniqueViolation "user_login_key") = ...
    catcher e _ = throwIO e