git.iko.soy/typeable/postgresql-simple
on master help sign in
Add errSQLTableOid to ResultError
commit9f69c5cd2e68d876951ee9db547350e48b13b4c1 authorJeff Chu <jeff@kiteedu.com> dateTue 9 Oct 2012, 19:49 (14 years ago) parent6543d1d
3 files changed+11−5
src/Database/PostgreSQL/Simple.hs+2−1 src/Database/PostgreSQL/Simple/FromField.hs+8−4 src/Database/PostgreSQL/Simple/FromRow.hs+1
src/Database/PostgreSQL/Simple.hs+2−1
@@ -571,11 +571,12 @@ finishQuery conn q result = do
571571 , fmap ellipsis v )
572572 throw (ConversionFailed
573573 (show (unCol ncols) ++ " values: " ++ show vals)
574+ Nothing
574575 ""
575576 (show (unCol col) ++ " slots in target type")
576577 "mismatch between number of columns to \
577578 \convert and number in target type")
578− Errors [] -> throwIO $ ConversionFailed "" "" "" "unknown error"
579+ Errors [] -> throwIO $ ConversionFailed "" Nothing "" "" "unknown error"
579580 Errors [x] -> throwIO x
580581 Errors xs -> throwIO $ ManyErrors xs
581582 PQ.CopyOut ->
src/Database/PostgreSQL/Simple/FromField.hs+8−4
@@ -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
src/Database/PostgreSQL/Simple/FromRow.hs+1
@@ -79,6 +79,7 @@ fieldWith fieldP = RP $ do
7979 [0..ncols-1]
8080 convertError = ConversionFailed
8181 (show (unCol ncols) ++ " values: " ++ show vals)
82+ Nothing
8283 ""
8384 ("at least " ++ show (unCol column + 1)
8485 ++ " slots in target type")