@@ -103,13 +103,13 @@ import qualified Data.Vector as V
103import Data.Word (Word64)
103import Data.Word (Word64)
104import Database.PostgreSQL.Simple.Internal
104import Database.PostgreSQL.Simple.Internal
105import Database.PostgreSQL.Simple.BuiltinTypes
105import Database.PostgreSQL.Simple.BuiltinTypes
106+import Database.PostgreSQL.Simple.Compat
106import Database.PostgreSQL.Simple.Ok
107import Database.PostgreSQL.Simple.Ok
107import Database.PostgreSQL.Simple.Types (Binary(..), Null(..))
108import Database.PostgreSQL.Simple.Types (Binary(..), Null(..))
108import Database.PostgreSQL.Simple.TypeInfo
109import Database.PostgreSQL.Simple.TypeInfo
109import Database.PostgreSQL.Simple.Time
110import Database.PostgreSQL.Simple.Time
110import Database.PostgreSQL.Simple.Arrays
111import Database.PostgreSQL.Simple.Arrays
111import qualified Database.PostgreSQL.LibPQ as PQ
112import qualified Database.PostgreSQL.LibPQ as PQ
112−import System.IO.Unsafe (unsafePerformIO)
113import qualified Data.ByteString as SB
113import qualified Data.ByteString as SB
114import qualified Data.ByteString.Char8 as B8
114import qualified Data.ByteString.Char8 as B8
115import qualified Data.ByteString.Lazy as LB
115import qualified Data.ByteString.Lazy as LB
@@ -189,7 +189,7 @@ typeinfo Field{..} = Conversion $ \conn -> do
189-- definition, but it can be set using an @as@ clause.
189-- definition, but it can be set using an @as@ clause.
191name :: Field -> Maybe ByteString
191name :: Field -> Maybe ByteString
192−name Field{..} = unsafePerformIO (PQ.fname result column)
192+name Field{..} = unsafeDupablePerformIO (PQ.fname result column)
194-- | Returns the name of the object id of the @table@ associated with the
194-- | Returns the name of the object id of the @table@ associated with the
195-- column, if any. Returns 'Nothing' when there is no such table;
195-- column, if any. Returns 'Nothing' when there is no such table;
@@ -197,7 +197,7 @@ name Field{..} = unsafePerformIO (PQ.fname result column)
197-- Analogous to libpq's @PQftable@.
197-- Analogous to libpq's @PQftable@.
199tableOid :: Field -> Maybe PQ.Oid
199tableOid :: Field -> Maybe PQ.Oid
200−tableOid Field{..} = toMaybeOid (unsafePerformIO (PQ.ftable result column))
200+tableOid Field{..} = toMaybeOid (unsafeDupablePerformIO (PQ.ftable result column))
202 toMaybeOid x
202 toMaybeOid x
203 = if x == PQ.invalidOid
203 = if x == PQ.invalidOid
@@ -209,7 +209,7 @@ tableOid Field{..} = toMaybeOid (unsafePerformIO (PQ.ftable result column))
209-- to libpq's @PQftablecol@.
209-- to libpq's @PQftablecol@.
211tableColumn :: Field -> Int
211tableColumn :: Field -> Int
212−tableColumn Field{..} = fromCol (unsafePerformIO (PQ.ftablecol result column))
212+tableColumn Field{..} = fromCol (unsafeDupablePerformIO (PQ.ftablecol result column))
214 fromCol (PQ.Col x) = fromIntegral x
214 fromCol (PQ.Col x) = fromIntegral x
@@ -217,7 +217,7 @@ tableColumn Field{..} = fromCol (unsafePerformIO (PQ.ftablecol result column))
217-- Analogous to libpq's @PQfformat@.
217-- Analogous to libpq's @PQfformat@.
219format :: Field -> PQ.Format
219format :: Field -> PQ.Format
220−format Field{..} = unsafePerformIO (PQ.fformat result column)
220+format Field{..} = unsafeDupablePerformIO (PQ.fformat result column)
222instance (FromField a) => FromField (Maybe a) where
222instance (FromField a) => FromField (Maybe a) where
223 fromField _ Nothing = pure Nothing
223 fromField _ Nothing = pure Nothing
@@ -278,7 +278,7 @@ instance FromField LB.ByteString where
279unescapeBytea :: Field -> SB.ByteString
279unescapeBytea :: Field -> SB.ByteString
280 -> Conversion (Binary SB.ByteString)
280 -> Conversion (Binary SB.ByteString)
281−unescapeBytea f str = case unsafePerformIO (PQ.unescapeBytea str) of
281+unescapeBytea f str = case unsafeDupablePerformIO (PQ.unescapeBytea str) of
282 Nothing -> returnError ConversionFailed f "unescapeBytea failed"
282 Nothing -> returnError ConversionFailed f "unescapeBytea failed"
283 Just str -> pure (Binary str)
283 Just str -> pure (Binary str)