@@ -78,17 +78,20 @@ import qualified Data.Text.Lazy as LT
7878-- | Exception thrown if conversion from a SQL value to a Haskell
7979-- value fails.
8080data ResultError = Incompatible { errSQLType :: String
81+ , errSQLTableOid :: Maybe PQ.Oid
8182 , errSQLField :: String
8283 , errHaskellType :: String
8384 , errMessage :: String }
8485 -- ^ The SQL and Haskell types are not compatible.
8586 | UnexpectedNull { errSQLType :: String
87+ , errSQLTableOid :: Maybe PQ.Oid
8688 , errSQLField :: String
8789 , errHaskellType :: String
8890 , errMessage :: String }
8991 -- ^ A SQL @NULL@ was encountered when the Haskell
9092 -- type did not permit it.
9193 | ConversionFailed { errSQLType :: String
94+ , errSQLTableOid :: Maybe PQ.Oid
9295 , errSQLField :: String
9396 , errHaskellType :: String
9497 , errMessage :: String }
@@ -235,12 +238,12 @@ ff :: BuiltinType -> String -> (B8.ByteString -> Either String a)
235238 -> Field -> Maybe B8.ByteString -> Ok a
236239ff pgType hsType parse f mstr
237240 | typeOid f /= builtin2oid pgType
238− = left (Incompatible (B8.unpack (typename f)) (maybe "" B8.unpack (name f)) hsType "")
241+ = left (Incompatible (B8.unpack (typename f)) (tableOid f) (maybe "" B8.unpack (name f)) hsType "")
239242 | Nothing <- mstr
240− = left (UnexpectedNull (B8.unpack (typename f)) (maybe "" B8.unpack (name f)) hsType "")
243+ = left (UnexpectedNull (B8.unpack (typename f)) (tableOid f) (maybe "" B8.unpack (name f)) hsType "")
241244 | Just str <- mstr
242245 = case parse str of
243− Left msg -> left (ConversionFailed (B8.unpack (typename f)) (maybe "" B8.unpack (name f)) hsType msg)
246+ Left msg -> left (ConversionFailed (B8.unpack (typename f)) (tableOid f) (maybe "" B8.unpack (name f)) hsType msg)
244247 Right val -> return val
245248{-# INLINE ff #-}
246249
@@ -303,9 +306,10 @@ doFromField f _ _ _ = returnError UnexpectedNull f ""
303306-- exception value and returns it in a 'Left . SomeException'
304307-- constructor.
305308returnError :: forall a err . (Typeable a, Exception err)
306− => (String -> String -> String -> String -> err)
309+ => (String -> Maybe PQ.Oid -> String -> String -> String -> err)
307310 -> Field -> String -> Ok a
308311returnError mkErr f = left . mkErr (B.unpack (typename f))
312+ (tableOid f)
309313 (maybe "" B.unpack (name f))
310314 (show (typeOf (undefined :: a)))
311315