git.iko.soy/typeable/postgresql-simple
on master help sign in
Add a typeOid field to the Field record
3a67b8dLeon P Smith
src/Database/PostgreSQL/Simple/FromField.hs−6
@@ -219,12 +219,6 @@ tableColumn Field{..} = fromCol (unsafePerformIO (PQ.ftablecol result column))
219format :: Field -> PQ.Format
219format :: Field -> PQ.Format
220format Field{..} = unsafePerformIO (PQ.fformat result column)
220format Field{..} = unsafePerformIO (PQ.fformat result column)
221
221
222−-- | This returns the type oid associated with the column. Analogous
223−-- to libpq's @PQftype@.
224−
225−typeOid :: Field -> PQ.Oid
226−typeOid Field{..} = unsafePerformIO (PQ.ftype result column)
227−
228instance (FromField a) => FromField (Maybe a) where
222instance (FromField a) => FromField (Maybe a) where
229 fromField _ Nothing = pure Nothing
223 fromField _ Nothing = pure Nothing
230 fromField f bs = Just <$> fromField f bs
224 fromField f bs = Just <$> fromField f bs
src/Database/PostgreSQL/Simple/FromRow.hs+5−4
@@ -92,7 +92,7 @@ fieldWith fieldP = RP $ do
92 then lift $ lift $ do
92 then lift $ lift $ do
93 vals <- mapM (getTypenameByCol r) [0..ncols-1]
93 vals <- mapM (getTypenameByCol r) [0..ncols-1]
94 let err = ConversionFailed
94 let err = ConversionFailed
95− (show (unCol ncols) ++ " values: " ++ show vals)
95+ (show (unCol ncols) ++ " values: " ++ show (map ellipsis vals))
96 Nothing
96 Nothing
97 ""
97 ""
98 ("at least " ++ show (unCol column + 1)
98 ("at least " ++ show (unCol column + 1)
@@ -101,9 +101,10 @@ fieldWith fieldP = RP $ do
101 \convert and number in target type"
101 \convert and number in target type"
102 conversionError err
102 conversionError err
103 else do
103 else do
104− let result = rowresult
104+ let !result = rowresult
105+ !typeOid = unsafePerformIO (PQ.ftype result column)
105− field = Field{..}
106+ !field = Field{..}
106− lift (lift (fieldP field (getvalue result row column)))
107+ lift (lift (fieldP field (getvalue result row column)))
107
108
108field :: FromField a => RowParser a
109field :: FromField a => RowParser a
109field = fieldWith fromField
110field = fieldWith fromField
src/Database/PostgreSQL/Simple/Internal.hs+3−1
@@ -41,7 +41,6 @@ import Database.PostgreSQL.Simple.Ok
41import Database.PostgreSQL.Simple.Types (Query(..))
41import Database.PostgreSQL.Simple.Types (Query(..))
42import Control.Monad.Trans.State.Strict
42import Control.Monad.Trans.State.Strict
43import Control.Monad.Trans.Reader
43import Control.Monad.Trans.Reader
44−import qualified Data.Vector as V
45
44
46-- | A Field represents metadata about a particular field
45-- | A Field represents metadata about a particular field
47--
46--
@@ -52,6 +51,9 @@ import qualified Data.Vector as V
52data Field = Field {
51data Field = Field {
53 result :: !PQ.Result
52 result :: !PQ.Result
54 , column :: {-# UNPACK #-} !PQ.Column
53 , column :: {-# UNPACK #-} !PQ.Column
54+ , typeOid :: {-# UNPACK #-} !PQ.Oid
55+ -- ^ This returns the type oid associated with the column. Analogous
56+ -- to libpq's @PQftype@.
55 }
57 }
56
58
57data NamedOid = NamedOid { typoid :: !PQ.Oid
59data NamedOid = NamedOid { typoid :: !PQ.Oid