@@ -103,13 +103,13 @@ import qualified Data.Vector as V
103103import Data.Word (Word64)
104104import Database.PostgreSQL.Simple.Internal
105105import Database.PostgreSQL.Simple.BuiltinTypes
106+import Database.PostgreSQL.Simple.Compat
106107import Database.PostgreSQL.Simple.Ok
107108import Database.PostgreSQL.Simple.Types (Binary(..), Null(..))
108109import Database.PostgreSQL.Simple.TypeInfo
109110import Database.PostgreSQL.Simple.Time
110111import Database.PostgreSQL.Simple.Arrays
111112import qualified Database.PostgreSQL.LibPQ as PQ
112−import System.IO.Unsafe (unsafePerformIO)
113113import qualified Data.ByteString as SB
114114import qualified Data.ByteString.Char8 as B8
115115import qualified Data.ByteString.Lazy as LB
@@ -189,7 +189,7 @@ typeinfo Field{..} = Conversion $ \conn -> do
189189-- definition, but it can be set using an @as@ clause.
190190
191191name :: Field -> Maybe ByteString
192−name Field{..} = unsafePerformIO (PQ.fname result column)
192+name Field{..} = unsafeDupablePerformIO (PQ.fname result column)
193193
194194-- | Returns the name of the object id of the @table@ associated with the
195195-- column, if any. Returns 'Nothing' when there is no such table;
@@ -197,7 +197,7 @@ name Field{..} = unsafePerformIO (PQ.fname result column)
197197-- Analogous to libpq's @PQftable@.
198198
199199tableOid :: Field -> Maybe PQ.Oid
200−tableOid Field{..} = toMaybeOid (unsafePerformIO (PQ.ftable result column))
200+tableOid Field{..} = toMaybeOid (unsafeDupablePerformIO (PQ.ftable result column))
201201 where
202202 toMaybeOid x
203203 = if x == PQ.invalidOid
@@ -209,7 +209,7 @@ tableOid Field{..} = toMaybeOid (unsafePerformIO (PQ.ftable result column))
209209-- to libpq's @PQftablecol@.
210210
211211tableColumn :: Field -> Int
212−tableColumn Field{..} = fromCol (unsafePerformIO (PQ.ftablecol result column))
212+tableColumn Field{..} = fromCol (unsafeDupablePerformIO (PQ.ftablecol result column))
213213 where
214214 fromCol (PQ.Col x) = fromIntegral x
215215
@@ -217,7 +217,7 @@ tableColumn Field{..} = fromCol (unsafePerformIO (PQ.ftablecol result column))
217217-- Analogous to libpq's @PQfformat@.
218218
219219format :: Field -> PQ.Format
220−format Field{..} = unsafePerformIO (PQ.fformat result column)
220+format Field{..} = unsafeDupablePerformIO (PQ.fformat result column)
221221
222222instance (FromField a) => FromField (Maybe a) where
223223 fromField _ Nothing = pure Nothing
@@ -278,7 +278,7 @@ instance FromField LB.ByteString where
278278
279279unescapeBytea :: Field -> SB.ByteString
280280 -> Conversion (Binary SB.ByteString)
281−unescapeBytea f str = case unsafePerformIO (PQ.unescapeBytea str) of
281+unescapeBytea f str = case unsafeDupablePerformIO (PQ.unescapeBytea str) of
282282 Nothing -> returnError ConversionFailed f "unescapeBytea failed"
283283 Just str -> pure (Binary str)
284284