-- | A driver-agnostic reproduction of the [@postgresql-libpq@](https://hackage.haskell.org/package/postgresql-libpq) @0.11@ API
-- (the pipelining-capable release).
--
-- t'Connection', t'Result' and t'Cancel' are records of @IO@ closures, each
-- already closed over the handle it needs (a C @PGconn@ pointer, a native
-- socket, ...).
--
-- Connections come from adapter packages - @pqi-ffi@ (C @libpq@ via
-- @postgresql-libpq@) and @pqi-native@ (pure-Haskell wire protocol) - each
-- exporting one top-level t'Adapter' value. An adapter must be identical
-- to @libpq@ on every protocol-derived value. @pqi-conformance@ enforces that
-- differentially.
--
-- == Differences from @postgresql-libpq@
--
-- Everything else - names, argument order, semantics - mirrors
-- @Database.PostgreSQL.LibPQ@.
--
-- * Connection acquisition lives in t'Adapter': @connectdb@, @connectStart@
--   and @newNullConnection@ are its fields, not top-level functions.
--
-- * @unescapeBytea@ and @resStatus@ are t'Adapter' fields too. They take no
--   connection, but their implementations are adapter-specific.
--
-- * t'Connection', t'Result' and t'Cancel' are records of closures rather than
--   opaque handles fed to top-level functions. Call sites are unchanged:
--   @exec connection sql@ selects a field and applies it.
--
-- * @Oid@ is 'Word32'; @Row@, @Column@, @LoFd@ are 'Int32'. No @invalidOid@
--   constant - it is @0@.
--
-- * @libpqVersion@ is omitted.
module Pqi
  ( -- * Adapter
    Adapter (..),

    -- * Connection
    Connection (..),

    -- * Result inspection
    Result (..),

    -- * Cancellation
    Cancel (..),

    -- * Shared types
    Format (..),
    ExecStatus (..),
    ConnStatus (..),
    TransactionStatus (..),
    PollingStatus (..),
    PipelineStatus (..),
    FieldCode (..),
    Verbosity (..),
    FlushStatus (..),
    CopyInResult (..),
    CopyOutResult (..),
    Notify (..),
  )
where

import Data.Bool
import Data.ByteString (ByteString)
import Data.Either
import Data.Eq
import Data.Int
import Data.Maybe
import Data.Ord
import Data.Text (Text)
import Data.Word
import Prelude (Bounded, Enum)
import System.IO (FilePath, IO, IOMode, SeekMode)
import System.Posix.Types (Fd)
import Text.Show

-- * Shared types

-- | Format of a parameter or result column: textual or binary.
data Format
  = Text
  | Binary
  deriving stock (Format -> Format -> Bool
(Format -> Format -> Bool)
-> (Format -> Format -> Bool) -> Eq Format
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: Format -> Format -> Bool
== :: Format -> Format -> Bool
$c/= :: Format -> Format -> Bool
/= :: Format -> Format -> Bool
Eq, Eq Format
Eq Format =>
(Format -> Format -> Ordering)
-> (Format -> Format -> Bool)
-> (Format -> Format -> Bool)
-> (Format -> Format -> Bool)
-> (Format -> Format -> Bool)
-> (Format -> Format -> Format)
-> (Format -> Format -> Format)
-> Ord Format
Format -> Format -> Bool
Format -> Format -> Ordering
Format -> Format -> Format
forall a.
Eq a =>
(a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
$ccompare :: Format -> Format -> Ordering
compare :: Format -> Format -> Ordering
$c< :: Format -> Format -> Bool
< :: Format -> Format -> Bool
$c<= :: Format -> Format -> Bool
<= :: Format -> Format -> Bool
$c> :: Format -> Format -> Bool
> :: Format -> Format -> Bool
$c>= :: Format -> Format -> Bool
>= :: Format -> Format -> Bool
$cmax :: Format -> Format -> Format
max :: Format -> Format -> Format
$cmin :: Format -> Format -> Format
min :: Format -> Format -> Format
Ord, Int -> Format -> ShowS
[Format] -> ShowS
Format -> String
(Int -> Format -> ShowS)
-> (Format -> String) -> ([Format] -> ShowS) -> Show Format
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> Format -> ShowS
showsPrec :: Int -> Format -> ShowS
$cshow :: Format -> String
show :: Format -> String
$cshowList :: [Format] -> ShowS
showList :: [Format] -> ShowS
Show, Int -> Format
Format -> Int
Format -> [Format]
Format -> Format
Format -> Format -> [Format]
Format -> Format -> Format -> [Format]
(Format -> Format)
-> (Format -> Format)
-> (Int -> Format)
-> (Format -> Int)
-> (Format -> [Format])
-> (Format -> Format -> [Format])
-> (Format -> Format -> [Format])
-> (Format -> Format -> Format -> [Format])
-> Enum Format
forall a.
(a -> a)
-> (a -> a)
-> (Int -> a)
-> (a -> Int)
-> (a -> [a])
-> (a -> a -> [a])
-> (a -> a -> [a])
-> (a -> a -> a -> [a])
-> Enum a
$csucc :: Format -> Format
succ :: Format -> Format
$cpred :: Format -> Format
pred :: Format -> Format
$ctoEnum :: Int -> Format
toEnum :: Int -> Format
$cfromEnum :: Format -> Int
fromEnum :: Format -> Int
$cenumFrom :: Format -> [Format]
enumFrom :: Format -> [Format]
$cenumFromThen :: Format -> Format -> [Format]
enumFromThen :: Format -> Format -> [Format]
$cenumFromTo :: Format -> Format -> [Format]
enumFromTo :: Format -> Format -> [Format]
$cenumFromThenTo :: Format -> Format -> Format -> [Format]
enumFromThenTo :: Format -> Format -> Format -> [Format]
Enum, Format
Format -> Format -> Bounded Format
forall a. a -> a -> Bounded a
$cminBound :: Format
minBound :: Format
$cmaxBound :: Format
maxBound :: Format
Bounded)

-- | Status of a command result, as reported by @PQresultStatus@.
data ExecStatus
  = -- | The string sent to the server was empty.
    EmptyQuery
  | -- | Successful completion of a command returning no data.
    CommandOk
  | -- | Successful completion of a command returning data (such as a
    -- @SELECT@ or @SHOW@).
    TuplesOk
  | -- | Copy Out (from server) data transfer started.
    CopyOut
  | -- | Copy In (to server) data transfer started.
    CopyIn
  | -- | Copy In\/Out data transfer started.
    CopyBoth
  | -- | The server's response was not understood.
    BadResponse
  | -- | A nonfatal error (a notice or warning) occurred.
    NonfatalError
  | -- | A fatal error occurred.
    FatalError
  | -- | The t'Result' contains a single result tuple from the current command.
    -- This status occurs only when single-row mode has been selected for the
    -- query.
    SingleTuple
  | -- | The t'Result' represents a synchronization point in pipeline mode,
    -- requested by 'pipelineSync'. This status occurs only in pipeline mode.
    PipelineSync
  | -- | The t'Result' represents a pipeline that has received an error from
    -- the server. 'getResult' must be called repeatedly, and each time it will
    -- return this status code until the end of the current pipeline, at which
    -- point it will return 'PipelineSync' and normal processing can resume.
    PipelineAbort
  deriving stock (ExecStatus -> ExecStatus -> Bool
(ExecStatus -> ExecStatus -> Bool)
-> (ExecStatus -> ExecStatus -> Bool) -> Eq ExecStatus
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: ExecStatus -> ExecStatus -> Bool
== :: ExecStatus -> ExecStatus -> Bool
$c/= :: ExecStatus -> ExecStatus -> Bool
/= :: ExecStatus -> ExecStatus -> Bool
Eq, Eq ExecStatus
Eq ExecStatus =>
(ExecStatus -> ExecStatus -> Ordering)
-> (ExecStatus -> ExecStatus -> Bool)
-> (ExecStatus -> ExecStatus -> Bool)
-> (ExecStatus -> ExecStatus -> Bool)
-> (ExecStatus -> ExecStatus -> Bool)
-> (ExecStatus -> ExecStatus -> ExecStatus)
-> (ExecStatus -> ExecStatus -> ExecStatus)
-> Ord ExecStatus
ExecStatus -> ExecStatus -> Bool
ExecStatus -> ExecStatus -> Ordering
ExecStatus -> ExecStatus -> ExecStatus
forall a.
Eq a =>
(a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
$ccompare :: ExecStatus -> ExecStatus -> Ordering
compare :: ExecStatus -> ExecStatus -> Ordering
$c< :: ExecStatus -> ExecStatus -> Bool
< :: ExecStatus -> ExecStatus -> Bool
$c<= :: ExecStatus -> ExecStatus -> Bool
<= :: ExecStatus -> ExecStatus -> Bool
$c> :: ExecStatus -> ExecStatus -> Bool
> :: ExecStatus -> ExecStatus -> Bool
$c>= :: ExecStatus -> ExecStatus -> Bool
>= :: ExecStatus -> ExecStatus -> Bool
$cmax :: ExecStatus -> ExecStatus -> ExecStatus
max :: ExecStatus -> ExecStatus -> ExecStatus
$cmin :: ExecStatus -> ExecStatus -> ExecStatus
min :: ExecStatus -> ExecStatus -> ExecStatus
Ord, Int -> ExecStatus -> ShowS
[ExecStatus] -> ShowS
ExecStatus -> String
(Int -> ExecStatus -> ShowS)
-> (ExecStatus -> String)
-> ([ExecStatus] -> ShowS)
-> Show ExecStatus
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> ExecStatus -> ShowS
showsPrec :: Int -> ExecStatus -> ShowS
$cshow :: ExecStatus -> String
show :: ExecStatus -> String
$cshowList :: [ExecStatus] -> ShowS
showList :: [ExecStatus] -> ShowS
Show, Int -> ExecStatus
ExecStatus -> Int
ExecStatus -> [ExecStatus]
ExecStatus -> ExecStatus
ExecStatus -> ExecStatus -> [ExecStatus]
ExecStatus -> ExecStatus -> ExecStatus -> [ExecStatus]
(ExecStatus -> ExecStatus)
-> (ExecStatus -> ExecStatus)
-> (Int -> ExecStatus)
-> (ExecStatus -> Int)
-> (ExecStatus -> [ExecStatus])
-> (ExecStatus -> ExecStatus -> [ExecStatus])
-> (ExecStatus -> ExecStatus -> [ExecStatus])
-> (ExecStatus -> ExecStatus -> ExecStatus -> [ExecStatus])
-> Enum ExecStatus
forall a.
(a -> a)
-> (a -> a)
-> (Int -> a)
-> (a -> Int)
-> (a -> [a])
-> (a -> a -> [a])
-> (a -> a -> [a])
-> (a -> a -> a -> [a])
-> Enum a
$csucc :: ExecStatus -> ExecStatus
succ :: ExecStatus -> ExecStatus
$cpred :: ExecStatus -> ExecStatus
pred :: ExecStatus -> ExecStatus
$ctoEnum :: Int -> ExecStatus
toEnum :: Int -> ExecStatus
$cfromEnum :: ExecStatus -> Int
fromEnum :: ExecStatus -> Int
$cenumFrom :: ExecStatus -> [ExecStatus]
enumFrom :: ExecStatus -> [ExecStatus]
$cenumFromThen :: ExecStatus -> ExecStatus -> [ExecStatus]
enumFromThen :: ExecStatus -> ExecStatus -> [ExecStatus]
$cenumFromTo :: ExecStatus -> ExecStatus -> [ExecStatus]
enumFromTo :: ExecStatus -> ExecStatus -> [ExecStatus]
$cenumFromThenTo :: ExecStatus -> ExecStatus -> ExecStatus -> [ExecStatus]
enumFromThenTo :: ExecStatus -> ExecStatus -> ExecStatus -> [ExecStatus]
Enum, ExecStatus
ExecStatus -> ExecStatus -> Bounded ExecStatus
forall a. a -> a -> Bounded a
$cminBound :: ExecStatus
minBound :: ExecStatus
$cmaxBound :: ExecStatus
maxBound :: ExecStatus
Bounded)

-- | Status of a connection, as reported by @PQstatus@.
data ConnStatus
  = -- | The connection is ready.
    ConnectionOk
  | -- | The connection procedure has failed.
    ConnectionBad
  | -- | Waiting for connection to be made.
    ConnectionStarted
  | -- | Connection OK; waiting to send.
    ConnectionMade
  | -- | Waiting for a response from the server.
    ConnectionAwaitingResponse
  | -- | Received authentication; waiting for backend start-up to finish.
    ConnectionAuthOk
  | -- | Negotiating environment-driven parameter settings.
    ConnectionSetEnv
  | -- | Negotiating SSL encryption.
    ConnectionSSLStartup
  deriving stock (ConnStatus -> ConnStatus -> Bool
(ConnStatus -> ConnStatus -> Bool)
-> (ConnStatus -> ConnStatus -> Bool) -> Eq ConnStatus
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: ConnStatus -> ConnStatus -> Bool
== :: ConnStatus -> ConnStatus -> Bool
$c/= :: ConnStatus -> ConnStatus -> Bool
/= :: ConnStatus -> ConnStatus -> Bool
Eq, Eq ConnStatus
Eq ConnStatus =>
(ConnStatus -> ConnStatus -> Ordering)
-> (ConnStatus -> ConnStatus -> Bool)
-> (ConnStatus -> ConnStatus -> Bool)
-> (ConnStatus -> ConnStatus -> Bool)
-> (ConnStatus -> ConnStatus -> Bool)
-> (ConnStatus -> ConnStatus -> ConnStatus)
-> (ConnStatus -> ConnStatus -> ConnStatus)
-> Ord ConnStatus
ConnStatus -> ConnStatus -> Bool
ConnStatus -> ConnStatus -> Ordering
ConnStatus -> ConnStatus -> ConnStatus
forall a.
Eq a =>
(a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
$ccompare :: ConnStatus -> ConnStatus -> Ordering
compare :: ConnStatus -> ConnStatus -> Ordering
$c< :: ConnStatus -> ConnStatus -> Bool
< :: ConnStatus -> ConnStatus -> Bool
$c<= :: ConnStatus -> ConnStatus -> Bool
<= :: ConnStatus -> ConnStatus -> Bool
$c> :: ConnStatus -> ConnStatus -> Bool
> :: ConnStatus -> ConnStatus -> Bool
$c>= :: ConnStatus -> ConnStatus -> Bool
>= :: ConnStatus -> ConnStatus -> Bool
$cmax :: ConnStatus -> ConnStatus -> ConnStatus
max :: ConnStatus -> ConnStatus -> ConnStatus
$cmin :: ConnStatus -> ConnStatus -> ConnStatus
min :: ConnStatus -> ConnStatus -> ConnStatus
Ord, Int -> ConnStatus -> ShowS
[ConnStatus] -> ShowS
ConnStatus -> String
(Int -> ConnStatus -> ShowS)
-> (ConnStatus -> String)
-> ([ConnStatus] -> ShowS)
-> Show ConnStatus
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> ConnStatus -> ShowS
showsPrec :: Int -> ConnStatus -> ShowS
$cshow :: ConnStatus -> String
show :: ConnStatus -> String
$cshowList :: [ConnStatus] -> ShowS
showList :: [ConnStatus] -> ShowS
Show, Int -> ConnStatus
ConnStatus -> Int
ConnStatus -> [ConnStatus]
ConnStatus -> ConnStatus
ConnStatus -> ConnStatus -> [ConnStatus]
ConnStatus -> ConnStatus -> ConnStatus -> [ConnStatus]
(ConnStatus -> ConnStatus)
-> (ConnStatus -> ConnStatus)
-> (Int -> ConnStatus)
-> (ConnStatus -> Int)
-> (ConnStatus -> [ConnStatus])
-> (ConnStatus -> ConnStatus -> [ConnStatus])
-> (ConnStatus -> ConnStatus -> [ConnStatus])
-> (ConnStatus -> ConnStatus -> ConnStatus -> [ConnStatus])
-> Enum ConnStatus
forall a.
(a -> a)
-> (a -> a)
-> (Int -> a)
-> (a -> Int)
-> (a -> [a])
-> (a -> a -> [a])
-> (a -> a -> [a])
-> (a -> a -> a -> [a])
-> Enum a
$csucc :: ConnStatus -> ConnStatus
succ :: ConnStatus -> ConnStatus
$cpred :: ConnStatus -> ConnStatus
pred :: ConnStatus -> ConnStatus
$ctoEnum :: Int -> ConnStatus
toEnum :: Int -> ConnStatus
$cfromEnum :: ConnStatus -> Int
fromEnum :: ConnStatus -> Int
$cenumFrom :: ConnStatus -> [ConnStatus]
enumFrom :: ConnStatus -> [ConnStatus]
$cenumFromThen :: ConnStatus -> ConnStatus -> [ConnStatus]
enumFromThen :: ConnStatus -> ConnStatus -> [ConnStatus]
$cenumFromTo :: ConnStatus -> ConnStatus -> [ConnStatus]
enumFromTo :: ConnStatus -> ConnStatus -> [ConnStatus]
$cenumFromThenTo :: ConnStatus -> ConnStatus -> ConnStatus -> [ConnStatus]
enumFromThenTo :: ConnStatus -> ConnStatus -> ConnStatus -> [ConnStatus]
Enum, ConnStatus
ConnStatus -> ConnStatus -> Bounded ConnStatus
forall a. a -> a -> Bounded a
$cminBound :: ConnStatus
minBound :: ConnStatus
$cmaxBound :: ConnStatus
maxBound :: ConnStatus
Bounded)

-- | Current in-transaction status of the server, as reported by
-- @PQtransactionStatus@.
data TransactionStatus
  = -- | Currently idle.
    TransIdle
  | -- | A command is in progress.
    TransActive
  | -- | Idle, within a transaction block.
    TransInTrans
  | -- | Idle, within a failed transaction.
    TransInError
  | -- | Connection is bad.
    TransUnknown
  deriving stock (TransactionStatus -> TransactionStatus -> Bool
(TransactionStatus -> TransactionStatus -> Bool)
-> (TransactionStatus -> TransactionStatus -> Bool)
-> Eq TransactionStatus
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: TransactionStatus -> TransactionStatus -> Bool
== :: TransactionStatus -> TransactionStatus -> Bool
$c/= :: TransactionStatus -> TransactionStatus -> Bool
/= :: TransactionStatus -> TransactionStatus -> Bool
Eq, Eq TransactionStatus
Eq TransactionStatus =>
(TransactionStatus -> TransactionStatus -> Ordering)
-> (TransactionStatus -> TransactionStatus -> Bool)
-> (TransactionStatus -> TransactionStatus -> Bool)
-> (TransactionStatus -> TransactionStatus -> Bool)
-> (TransactionStatus -> TransactionStatus -> Bool)
-> (TransactionStatus -> TransactionStatus -> TransactionStatus)
-> (TransactionStatus -> TransactionStatus -> TransactionStatus)
-> Ord TransactionStatus
TransactionStatus -> TransactionStatus -> Bool
TransactionStatus -> TransactionStatus -> Ordering
TransactionStatus -> TransactionStatus -> TransactionStatus
forall a.
Eq a =>
(a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
$ccompare :: TransactionStatus -> TransactionStatus -> Ordering
compare :: TransactionStatus -> TransactionStatus -> Ordering
$c< :: TransactionStatus -> TransactionStatus -> Bool
< :: TransactionStatus -> TransactionStatus -> Bool
$c<= :: TransactionStatus -> TransactionStatus -> Bool
<= :: TransactionStatus -> TransactionStatus -> Bool
$c> :: TransactionStatus -> TransactionStatus -> Bool
> :: TransactionStatus -> TransactionStatus -> Bool
$c>= :: TransactionStatus -> TransactionStatus -> Bool
>= :: TransactionStatus -> TransactionStatus -> Bool
$cmax :: TransactionStatus -> TransactionStatus -> TransactionStatus
max :: TransactionStatus -> TransactionStatus -> TransactionStatus
$cmin :: TransactionStatus -> TransactionStatus -> TransactionStatus
min :: TransactionStatus -> TransactionStatus -> TransactionStatus
Ord, Int -> TransactionStatus -> ShowS
[TransactionStatus] -> ShowS
TransactionStatus -> String
(Int -> TransactionStatus -> ShowS)
-> (TransactionStatus -> String)
-> ([TransactionStatus] -> ShowS)
-> Show TransactionStatus
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> TransactionStatus -> ShowS
showsPrec :: Int -> TransactionStatus -> ShowS
$cshow :: TransactionStatus -> String
show :: TransactionStatus -> String
$cshowList :: [TransactionStatus] -> ShowS
showList :: [TransactionStatus] -> ShowS
Show, Int -> TransactionStatus
TransactionStatus -> Int
TransactionStatus -> [TransactionStatus]
TransactionStatus -> TransactionStatus
TransactionStatus -> TransactionStatus -> [TransactionStatus]
TransactionStatus
-> TransactionStatus -> TransactionStatus -> [TransactionStatus]
(TransactionStatus -> TransactionStatus)
-> (TransactionStatus -> TransactionStatus)
-> (Int -> TransactionStatus)
-> (TransactionStatus -> Int)
-> (TransactionStatus -> [TransactionStatus])
-> (TransactionStatus -> TransactionStatus -> [TransactionStatus])
-> (TransactionStatus -> TransactionStatus -> [TransactionStatus])
-> (TransactionStatus
    -> TransactionStatus -> TransactionStatus -> [TransactionStatus])
-> Enum TransactionStatus
forall a.
(a -> a)
-> (a -> a)
-> (Int -> a)
-> (a -> Int)
-> (a -> [a])
-> (a -> a -> [a])
-> (a -> a -> [a])
-> (a -> a -> a -> [a])
-> Enum a
$csucc :: TransactionStatus -> TransactionStatus
succ :: TransactionStatus -> TransactionStatus
$cpred :: TransactionStatus -> TransactionStatus
pred :: TransactionStatus -> TransactionStatus
$ctoEnum :: Int -> TransactionStatus
toEnum :: Int -> TransactionStatus
$cfromEnum :: TransactionStatus -> Int
fromEnum :: TransactionStatus -> Int
$cenumFrom :: TransactionStatus -> [TransactionStatus]
enumFrom :: TransactionStatus -> [TransactionStatus]
$cenumFromThen :: TransactionStatus -> TransactionStatus -> [TransactionStatus]
enumFromThen :: TransactionStatus -> TransactionStatus -> [TransactionStatus]
$cenumFromTo :: TransactionStatus -> TransactionStatus -> [TransactionStatus]
enumFromTo :: TransactionStatus -> TransactionStatus -> [TransactionStatus]
$cenumFromThenTo :: TransactionStatus
-> TransactionStatus -> TransactionStatus -> [TransactionStatus]
enumFromThenTo :: TransactionStatus
-> TransactionStatus -> TransactionStatus -> [TransactionStatus]
Enum, TransactionStatus
TransactionStatus -> TransactionStatus -> Bounded TransactionStatus
forall a. a -> a -> Bounded a
$cminBound :: TransactionStatus
minBound :: TransactionStatus
$cmaxBound :: TransactionStatus
maxBound :: TransactionStatus
Bounded)

-- | Result of a non-blocking connection-polling step.
data PollingStatus
  = PollingFailed
  | PollingReading
  | PollingWriting
  | PollingOk
  deriving stock (PollingStatus -> PollingStatus -> Bool
(PollingStatus -> PollingStatus -> Bool)
-> (PollingStatus -> PollingStatus -> Bool) -> Eq PollingStatus
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: PollingStatus -> PollingStatus -> Bool
== :: PollingStatus -> PollingStatus -> Bool
$c/= :: PollingStatus -> PollingStatus -> Bool
/= :: PollingStatus -> PollingStatus -> Bool
Eq, Eq PollingStatus
Eq PollingStatus =>
(PollingStatus -> PollingStatus -> Ordering)
-> (PollingStatus -> PollingStatus -> Bool)
-> (PollingStatus -> PollingStatus -> Bool)
-> (PollingStatus -> PollingStatus -> Bool)
-> (PollingStatus -> PollingStatus -> Bool)
-> (PollingStatus -> PollingStatus -> PollingStatus)
-> (PollingStatus -> PollingStatus -> PollingStatus)
-> Ord PollingStatus
PollingStatus -> PollingStatus -> Bool
PollingStatus -> PollingStatus -> Ordering
PollingStatus -> PollingStatus -> PollingStatus
forall a.
Eq a =>
(a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
$ccompare :: PollingStatus -> PollingStatus -> Ordering
compare :: PollingStatus -> PollingStatus -> Ordering
$c< :: PollingStatus -> PollingStatus -> Bool
< :: PollingStatus -> PollingStatus -> Bool
$c<= :: PollingStatus -> PollingStatus -> Bool
<= :: PollingStatus -> PollingStatus -> Bool
$c> :: PollingStatus -> PollingStatus -> Bool
> :: PollingStatus -> PollingStatus -> Bool
$c>= :: PollingStatus -> PollingStatus -> Bool
>= :: PollingStatus -> PollingStatus -> Bool
$cmax :: PollingStatus -> PollingStatus -> PollingStatus
max :: PollingStatus -> PollingStatus -> PollingStatus
$cmin :: PollingStatus -> PollingStatus -> PollingStatus
min :: PollingStatus -> PollingStatus -> PollingStatus
Ord, Int -> PollingStatus -> ShowS
[PollingStatus] -> ShowS
PollingStatus -> String
(Int -> PollingStatus -> ShowS)
-> (PollingStatus -> String)
-> ([PollingStatus] -> ShowS)
-> Show PollingStatus
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> PollingStatus -> ShowS
showsPrec :: Int -> PollingStatus -> ShowS
$cshow :: PollingStatus -> String
show :: PollingStatus -> String
$cshowList :: [PollingStatus] -> ShowS
showList :: [PollingStatus] -> ShowS
Show, Int -> PollingStatus
PollingStatus -> Int
PollingStatus -> [PollingStatus]
PollingStatus -> PollingStatus
PollingStatus -> PollingStatus -> [PollingStatus]
PollingStatus -> PollingStatus -> PollingStatus -> [PollingStatus]
(PollingStatus -> PollingStatus)
-> (PollingStatus -> PollingStatus)
-> (Int -> PollingStatus)
-> (PollingStatus -> Int)
-> (PollingStatus -> [PollingStatus])
-> (PollingStatus -> PollingStatus -> [PollingStatus])
-> (PollingStatus -> PollingStatus -> [PollingStatus])
-> (PollingStatus
    -> PollingStatus -> PollingStatus -> [PollingStatus])
-> Enum PollingStatus
forall a.
(a -> a)
-> (a -> a)
-> (Int -> a)
-> (a -> Int)
-> (a -> [a])
-> (a -> a -> [a])
-> (a -> a -> [a])
-> (a -> a -> a -> [a])
-> Enum a
$csucc :: PollingStatus -> PollingStatus
succ :: PollingStatus -> PollingStatus
$cpred :: PollingStatus -> PollingStatus
pred :: PollingStatus -> PollingStatus
$ctoEnum :: Int -> PollingStatus
toEnum :: Int -> PollingStatus
$cfromEnum :: PollingStatus -> Int
fromEnum :: PollingStatus -> Int
$cenumFrom :: PollingStatus -> [PollingStatus]
enumFrom :: PollingStatus -> [PollingStatus]
$cenumFromThen :: PollingStatus -> PollingStatus -> [PollingStatus]
enumFromThen :: PollingStatus -> PollingStatus -> [PollingStatus]
$cenumFromTo :: PollingStatus -> PollingStatus -> [PollingStatus]
enumFromTo :: PollingStatus -> PollingStatus -> [PollingStatus]
$cenumFromThenTo :: PollingStatus -> PollingStatus -> PollingStatus -> [PollingStatus]
enumFromThenTo :: PollingStatus -> PollingStatus -> PollingStatus -> [PollingStatus]
Enum, PollingStatus
PollingStatus -> PollingStatus -> Bounded PollingStatus
forall a. a -> a -> Bounded a
$cminBound :: PollingStatus
minBound :: PollingStatus
$cmaxBound :: PollingStatus
maxBound :: PollingStatus
Bounded)

-- | Pipeline-mode status of a connection, as reported by @PQpipelineStatus@.
data PipelineStatus
  = -- | The connection is in pipeline mode.
    PipelineOn
  | -- | The connection is /not/ in pipeline mode.
    PipelineOff
  | -- | The connection is in pipeline mode and an error occurred while
    -- processing the current pipeline.
    PipelineAborted
  deriving stock (PipelineStatus -> PipelineStatus -> Bool
(PipelineStatus -> PipelineStatus -> Bool)
-> (PipelineStatus -> PipelineStatus -> Bool) -> Eq PipelineStatus
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: PipelineStatus -> PipelineStatus -> Bool
== :: PipelineStatus -> PipelineStatus -> Bool
$c/= :: PipelineStatus -> PipelineStatus -> Bool
/= :: PipelineStatus -> PipelineStatus -> Bool
Eq, Eq PipelineStatus
Eq PipelineStatus =>
(PipelineStatus -> PipelineStatus -> Ordering)
-> (PipelineStatus -> PipelineStatus -> Bool)
-> (PipelineStatus -> PipelineStatus -> Bool)
-> (PipelineStatus -> PipelineStatus -> Bool)
-> (PipelineStatus -> PipelineStatus -> Bool)
-> (PipelineStatus -> PipelineStatus -> PipelineStatus)
-> (PipelineStatus -> PipelineStatus -> PipelineStatus)
-> Ord PipelineStatus
PipelineStatus -> PipelineStatus -> Bool
PipelineStatus -> PipelineStatus -> Ordering
PipelineStatus -> PipelineStatus -> PipelineStatus
forall a.
Eq a =>
(a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
$ccompare :: PipelineStatus -> PipelineStatus -> Ordering
compare :: PipelineStatus -> PipelineStatus -> Ordering
$c< :: PipelineStatus -> PipelineStatus -> Bool
< :: PipelineStatus -> PipelineStatus -> Bool
$c<= :: PipelineStatus -> PipelineStatus -> Bool
<= :: PipelineStatus -> PipelineStatus -> Bool
$c> :: PipelineStatus -> PipelineStatus -> Bool
> :: PipelineStatus -> PipelineStatus -> Bool
$c>= :: PipelineStatus -> PipelineStatus -> Bool
>= :: PipelineStatus -> PipelineStatus -> Bool
$cmax :: PipelineStatus -> PipelineStatus -> PipelineStatus
max :: PipelineStatus -> PipelineStatus -> PipelineStatus
$cmin :: PipelineStatus -> PipelineStatus -> PipelineStatus
min :: PipelineStatus -> PipelineStatus -> PipelineStatus
Ord, Int -> PipelineStatus -> ShowS
[PipelineStatus] -> ShowS
PipelineStatus -> String
(Int -> PipelineStatus -> ShowS)
-> (PipelineStatus -> String)
-> ([PipelineStatus] -> ShowS)
-> Show PipelineStatus
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> PipelineStatus -> ShowS
showsPrec :: Int -> PipelineStatus -> ShowS
$cshow :: PipelineStatus -> String
show :: PipelineStatus -> String
$cshowList :: [PipelineStatus] -> ShowS
showList :: [PipelineStatus] -> ShowS
Show, Int -> PipelineStatus
PipelineStatus -> Int
PipelineStatus -> [PipelineStatus]
PipelineStatus -> PipelineStatus
PipelineStatus -> PipelineStatus -> [PipelineStatus]
PipelineStatus
-> PipelineStatus -> PipelineStatus -> [PipelineStatus]
(PipelineStatus -> PipelineStatus)
-> (PipelineStatus -> PipelineStatus)
-> (Int -> PipelineStatus)
-> (PipelineStatus -> Int)
-> (PipelineStatus -> [PipelineStatus])
-> (PipelineStatus -> PipelineStatus -> [PipelineStatus])
-> (PipelineStatus -> PipelineStatus -> [PipelineStatus])
-> (PipelineStatus
    -> PipelineStatus -> PipelineStatus -> [PipelineStatus])
-> Enum PipelineStatus
forall a.
(a -> a)
-> (a -> a)
-> (Int -> a)
-> (a -> Int)
-> (a -> [a])
-> (a -> a -> [a])
-> (a -> a -> [a])
-> (a -> a -> a -> [a])
-> Enum a
$csucc :: PipelineStatus -> PipelineStatus
succ :: PipelineStatus -> PipelineStatus
$cpred :: PipelineStatus -> PipelineStatus
pred :: PipelineStatus -> PipelineStatus
$ctoEnum :: Int -> PipelineStatus
toEnum :: Int -> PipelineStatus
$cfromEnum :: PipelineStatus -> Int
fromEnum :: PipelineStatus -> Int
$cenumFrom :: PipelineStatus -> [PipelineStatus]
enumFrom :: PipelineStatus -> [PipelineStatus]
$cenumFromThen :: PipelineStatus -> PipelineStatus -> [PipelineStatus]
enumFromThen :: PipelineStatus -> PipelineStatus -> [PipelineStatus]
$cenumFromTo :: PipelineStatus -> PipelineStatus -> [PipelineStatus]
enumFromTo :: PipelineStatus -> PipelineStatus -> [PipelineStatus]
$cenumFromThenTo :: PipelineStatus
-> PipelineStatus -> PipelineStatus -> [PipelineStatus]
enumFromThenTo :: PipelineStatus
-> PipelineStatus -> PipelineStatus -> [PipelineStatus]
Enum, PipelineStatus
PipelineStatus -> PipelineStatus -> Bounded PipelineStatus
forall a. a -> a -> Bounded a
$cminBound :: PipelineStatus
minBound :: PipelineStatus
$cmaxBound :: PipelineStatus
maxBound :: PipelineStatus
Bounded)

-- | Field identifier for the structured fields of an error report, as accepted
-- by @PQresultErrorField@.
data FieldCode
  = DiagSeverity
  | DiagSqlstate
  | DiagMessagePrimary
  | DiagMessageDetail
  | DiagMessageHint
  | DiagStatementPosition
  | DiagInternalPosition
  | DiagInternalQuery
  | DiagContext
  | DiagSourceFile
  | DiagSourceLine
  | DiagSourceFunction
  deriving stock (FieldCode -> FieldCode -> Bool
(FieldCode -> FieldCode -> Bool)
-> (FieldCode -> FieldCode -> Bool) -> Eq FieldCode
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: FieldCode -> FieldCode -> Bool
== :: FieldCode -> FieldCode -> Bool
$c/= :: FieldCode -> FieldCode -> Bool
/= :: FieldCode -> FieldCode -> Bool
Eq, Eq FieldCode
Eq FieldCode =>
(FieldCode -> FieldCode -> Ordering)
-> (FieldCode -> FieldCode -> Bool)
-> (FieldCode -> FieldCode -> Bool)
-> (FieldCode -> FieldCode -> Bool)
-> (FieldCode -> FieldCode -> Bool)
-> (FieldCode -> FieldCode -> FieldCode)
-> (FieldCode -> FieldCode -> FieldCode)
-> Ord FieldCode
FieldCode -> FieldCode -> Bool
FieldCode -> FieldCode -> Ordering
FieldCode -> FieldCode -> FieldCode
forall a.
Eq a =>
(a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
$ccompare :: FieldCode -> FieldCode -> Ordering
compare :: FieldCode -> FieldCode -> Ordering
$c< :: FieldCode -> FieldCode -> Bool
< :: FieldCode -> FieldCode -> Bool
$c<= :: FieldCode -> FieldCode -> Bool
<= :: FieldCode -> FieldCode -> Bool
$c> :: FieldCode -> FieldCode -> Bool
> :: FieldCode -> FieldCode -> Bool
$c>= :: FieldCode -> FieldCode -> Bool
>= :: FieldCode -> FieldCode -> Bool
$cmax :: FieldCode -> FieldCode -> FieldCode
max :: FieldCode -> FieldCode -> FieldCode
$cmin :: FieldCode -> FieldCode -> FieldCode
min :: FieldCode -> FieldCode -> FieldCode
Ord, Int -> FieldCode -> ShowS
[FieldCode] -> ShowS
FieldCode -> String
(Int -> FieldCode -> ShowS)
-> (FieldCode -> String)
-> ([FieldCode] -> ShowS)
-> Show FieldCode
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> FieldCode -> ShowS
showsPrec :: Int -> FieldCode -> ShowS
$cshow :: FieldCode -> String
show :: FieldCode -> String
$cshowList :: [FieldCode] -> ShowS
showList :: [FieldCode] -> ShowS
Show, Int -> FieldCode
FieldCode -> Int
FieldCode -> [FieldCode]
FieldCode -> FieldCode
FieldCode -> FieldCode -> [FieldCode]
FieldCode -> FieldCode -> FieldCode -> [FieldCode]
(FieldCode -> FieldCode)
-> (FieldCode -> FieldCode)
-> (Int -> FieldCode)
-> (FieldCode -> Int)
-> (FieldCode -> [FieldCode])
-> (FieldCode -> FieldCode -> [FieldCode])
-> (FieldCode -> FieldCode -> [FieldCode])
-> (FieldCode -> FieldCode -> FieldCode -> [FieldCode])
-> Enum FieldCode
forall a.
(a -> a)
-> (a -> a)
-> (Int -> a)
-> (a -> Int)
-> (a -> [a])
-> (a -> a -> [a])
-> (a -> a -> [a])
-> (a -> a -> a -> [a])
-> Enum a
$csucc :: FieldCode -> FieldCode
succ :: FieldCode -> FieldCode
$cpred :: FieldCode -> FieldCode
pred :: FieldCode -> FieldCode
$ctoEnum :: Int -> FieldCode
toEnum :: Int -> FieldCode
$cfromEnum :: FieldCode -> Int
fromEnum :: FieldCode -> Int
$cenumFrom :: FieldCode -> [FieldCode]
enumFrom :: FieldCode -> [FieldCode]
$cenumFromThen :: FieldCode -> FieldCode -> [FieldCode]
enumFromThen :: FieldCode -> FieldCode -> [FieldCode]
$cenumFromTo :: FieldCode -> FieldCode -> [FieldCode]
enumFromTo :: FieldCode -> FieldCode -> [FieldCode]
$cenumFromThenTo :: FieldCode -> FieldCode -> FieldCode -> [FieldCode]
enumFromThenTo :: FieldCode -> FieldCode -> FieldCode -> [FieldCode]
Enum, FieldCode
FieldCode -> FieldCode -> Bounded FieldCode
forall a. a -> a -> Bounded a
$cminBound :: FieldCode
minBound :: FieldCode
$cmaxBound :: FieldCode
maxBound :: FieldCode
Bounded)

-- | Verbosity of error reporting, as set by @PQsetErrorVerbosity@.
data Verbosity
  = ErrorsTerse
  | ErrorsDefault
  | ErrorsVerbose
  deriving stock (Verbosity -> Verbosity -> Bool
(Verbosity -> Verbosity -> Bool)
-> (Verbosity -> Verbosity -> Bool) -> Eq Verbosity
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: Verbosity -> Verbosity -> Bool
== :: Verbosity -> Verbosity -> Bool
$c/= :: Verbosity -> Verbosity -> Bool
/= :: Verbosity -> Verbosity -> Bool
Eq, Eq Verbosity
Eq Verbosity =>
(Verbosity -> Verbosity -> Ordering)
-> (Verbosity -> Verbosity -> Bool)
-> (Verbosity -> Verbosity -> Bool)
-> (Verbosity -> Verbosity -> Bool)
-> (Verbosity -> Verbosity -> Bool)
-> (Verbosity -> Verbosity -> Verbosity)
-> (Verbosity -> Verbosity -> Verbosity)
-> Ord Verbosity
Verbosity -> Verbosity -> Bool
Verbosity -> Verbosity -> Ordering
Verbosity -> Verbosity -> Verbosity
forall a.
Eq a =>
(a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
$ccompare :: Verbosity -> Verbosity -> Ordering
compare :: Verbosity -> Verbosity -> Ordering
$c< :: Verbosity -> Verbosity -> Bool
< :: Verbosity -> Verbosity -> Bool
$c<= :: Verbosity -> Verbosity -> Bool
<= :: Verbosity -> Verbosity -> Bool
$c> :: Verbosity -> Verbosity -> Bool
> :: Verbosity -> Verbosity -> Bool
$c>= :: Verbosity -> Verbosity -> Bool
>= :: Verbosity -> Verbosity -> Bool
$cmax :: Verbosity -> Verbosity -> Verbosity
max :: Verbosity -> Verbosity -> Verbosity
$cmin :: Verbosity -> Verbosity -> Verbosity
min :: Verbosity -> Verbosity -> Verbosity
Ord, Int -> Verbosity -> ShowS
[Verbosity] -> ShowS
Verbosity -> String
(Int -> Verbosity -> ShowS)
-> (Verbosity -> String)
-> ([Verbosity] -> ShowS)
-> Show Verbosity
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> Verbosity -> ShowS
showsPrec :: Int -> Verbosity -> ShowS
$cshow :: Verbosity -> String
show :: Verbosity -> String
$cshowList :: [Verbosity] -> ShowS
showList :: [Verbosity] -> ShowS
Show, Int -> Verbosity
Verbosity -> Int
Verbosity -> [Verbosity]
Verbosity -> Verbosity
Verbosity -> Verbosity -> [Verbosity]
Verbosity -> Verbosity -> Verbosity -> [Verbosity]
(Verbosity -> Verbosity)
-> (Verbosity -> Verbosity)
-> (Int -> Verbosity)
-> (Verbosity -> Int)
-> (Verbosity -> [Verbosity])
-> (Verbosity -> Verbosity -> [Verbosity])
-> (Verbosity -> Verbosity -> [Verbosity])
-> (Verbosity -> Verbosity -> Verbosity -> [Verbosity])
-> Enum Verbosity
forall a.
(a -> a)
-> (a -> a)
-> (Int -> a)
-> (a -> Int)
-> (a -> [a])
-> (a -> a -> [a])
-> (a -> a -> [a])
-> (a -> a -> a -> [a])
-> Enum a
$csucc :: Verbosity -> Verbosity
succ :: Verbosity -> Verbosity
$cpred :: Verbosity -> Verbosity
pred :: Verbosity -> Verbosity
$ctoEnum :: Int -> Verbosity
toEnum :: Int -> Verbosity
$cfromEnum :: Verbosity -> Int
fromEnum :: Verbosity -> Int
$cenumFrom :: Verbosity -> [Verbosity]
enumFrom :: Verbosity -> [Verbosity]
$cenumFromThen :: Verbosity -> Verbosity -> [Verbosity]
enumFromThen :: Verbosity -> Verbosity -> [Verbosity]
$cenumFromTo :: Verbosity -> Verbosity -> [Verbosity]
enumFromTo :: Verbosity -> Verbosity -> [Verbosity]
$cenumFromThenTo :: Verbosity -> Verbosity -> Verbosity -> [Verbosity]
enumFromThenTo :: Verbosity -> Verbosity -> Verbosity -> [Verbosity]
Enum, Verbosity
Verbosity -> Verbosity -> Bounded Verbosity
forall a. a -> a -> Bounded a
$cminBound :: Verbosity
minBound :: Verbosity
$cmaxBound :: Verbosity
maxBound :: Verbosity
Bounded)

-- | Result of attempting to flush the output buffer in non-blocking mode.
data FlushStatus
  = FlushOk
  | FlushFailed
  | FlushWriting
  deriving stock (FlushStatus -> FlushStatus -> Bool
(FlushStatus -> FlushStatus -> Bool)
-> (FlushStatus -> FlushStatus -> Bool) -> Eq FlushStatus
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: FlushStatus -> FlushStatus -> Bool
== :: FlushStatus -> FlushStatus -> Bool
$c/= :: FlushStatus -> FlushStatus -> Bool
/= :: FlushStatus -> FlushStatus -> Bool
Eq, Eq FlushStatus
Eq FlushStatus =>
(FlushStatus -> FlushStatus -> Ordering)
-> (FlushStatus -> FlushStatus -> Bool)
-> (FlushStatus -> FlushStatus -> Bool)
-> (FlushStatus -> FlushStatus -> Bool)
-> (FlushStatus -> FlushStatus -> Bool)
-> (FlushStatus -> FlushStatus -> FlushStatus)
-> (FlushStatus -> FlushStatus -> FlushStatus)
-> Ord FlushStatus
FlushStatus -> FlushStatus -> Bool
FlushStatus -> FlushStatus -> Ordering
FlushStatus -> FlushStatus -> FlushStatus
forall a.
Eq a =>
(a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
$ccompare :: FlushStatus -> FlushStatus -> Ordering
compare :: FlushStatus -> FlushStatus -> Ordering
$c< :: FlushStatus -> FlushStatus -> Bool
< :: FlushStatus -> FlushStatus -> Bool
$c<= :: FlushStatus -> FlushStatus -> Bool
<= :: FlushStatus -> FlushStatus -> Bool
$c> :: FlushStatus -> FlushStatus -> Bool
> :: FlushStatus -> FlushStatus -> Bool
$c>= :: FlushStatus -> FlushStatus -> Bool
>= :: FlushStatus -> FlushStatus -> Bool
$cmax :: FlushStatus -> FlushStatus -> FlushStatus
max :: FlushStatus -> FlushStatus -> FlushStatus
$cmin :: FlushStatus -> FlushStatus -> FlushStatus
min :: FlushStatus -> FlushStatus -> FlushStatus
Ord, Int -> FlushStatus -> ShowS
[FlushStatus] -> ShowS
FlushStatus -> String
(Int -> FlushStatus -> ShowS)
-> (FlushStatus -> String)
-> ([FlushStatus] -> ShowS)
-> Show FlushStatus
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> FlushStatus -> ShowS
showsPrec :: Int -> FlushStatus -> ShowS
$cshow :: FlushStatus -> String
show :: FlushStatus -> String
$cshowList :: [FlushStatus] -> ShowS
showList :: [FlushStatus] -> ShowS
Show, Int -> FlushStatus
FlushStatus -> Int
FlushStatus -> [FlushStatus]
FlushStatus -> FlushStatus
FlushStatus -> FlushStatus -> [FlushStatus]
FlushStatus -> FlushStatus -> FlushStatus -> [FlushStatus]
(FlushStatus -> FlushStatus)
-> (FlushStatus -> FlushStatus)
-> (Int -> FlushStatus)
-> (FlushStatus -> Int)
-> (FlushStatus -> [FlushStatus])
-> (FlushStatus -> FlushStatus -> [FlushStatus])
-> (FlushStatus -> FlushStatus -> [FlushStatus])
-> (FlushStatus -> FlushStatus -> FlushStatus -> [FlushStatus])
-> Enum FlushStatus
forall a.
(a -> a)
-> (a -> a)
-> (Int -> a)
-> (a -> Int)
-> (a -> [a])
-> (a -> a -> [a])
-> (a -> a -> [a])
-> (a -> a -> a -> [a])
-> Enum a
$csucc :: FlushStatus -> FlushStatus
succ :: FlushStatus -> FlushStatus
$cpred :: FlushStatus -> FlushStatus
pred :: FlushStatus -> FlushStatus
$ctoEnum :: Int -> FlushStatus
toEnum :: Int -> FlushStatus
$cfromEnum :: FlushStatus -> Int
fromEnum :: FlushStatus -> Int
$cenumFrom :: FlushStatus -> [FlushStatus]
enumFrom :: FlushStatus -> [FlushStatus]
$cenumFromThen :: FlushStatus -> FlushStatus -> [FlushStatus]
enumFromThen :: FlushStatus -> FlushStatus -> [FlushStatus]
$cenumFromTo :: FlushStatus -> FlushStatus -> [FlushStatus]
enumFromTo :: FlushStatus -> FlushStatus -> [FlushStatus]
$cenumFromThenTo :: FlushStatus -> FlushStatus -> FlushStatus -> [FlushStatus]
enumFromThenTo :: FlushStatus -> FlushStatus -> FlushStatus -> [FlushStatus]
Enum, FlushStatus
FlushStatus -> FlushStatus -> Bounded FlushStatus
forall a. a -> a -> Bounded a
$cminBound :: FlushStatus
minBound :: FlushStatus
$cmaxBound :: FlushStatus
maxBound :: FlushStatus
Bounded)

-- | Result of @PQputCopyData@\/@PQputCopyEnd@.
data CopyInResult
  = CopyInOk
  | CopyInError
  | CopyInWouldBlock
  deriving stock (CopyInResult -> CopyInResult -> Bool
(CopyInResult -> CopyInResult -> Bool)
-> (CopyInResult -> CopyInResult -> Bool) -> Eq CopyInResult
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: CopyInResult -> CopyInResult -> Bool
== :: CopyInResult -> CopyInResult -> Bool
$c/= :: CopyInResult -> CopyInResult -> Bool
/= :: CopyInResult -> CopyInResult -> Bool
Eq, Eq CopyInResult
Eq CopyInResult =>
(CopyInResult -> CopyInResult -> Ordering)
-> (CopyInResult -> CopyInResult -> Bool)
-> (CopyInResult -> CopyInResult -> Bool)
-> (CopyInResult -> CopyInResult -> Bool)
-> (CopyInResult -> CopyInResult -> Bool)
-> (CopyInResult -> CopyInResult -> CopyInResult)
-> (CopyInResult -> CopyInResult -> CopyInResult)
-> Ord CopyInResult
CopyInResult -> CopyInResult -> Bool
CopyInResult -> CopyInResult -> Ordering
CopyInResult -> CopyInResult -> CopyInResult
forall a.
Eq a =>
(a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
$ccompare :: CopyInResult -> CopyInResult -> Ordering
compare :: CopyInResult -> CopyInResult -> Ordering
$c< :: CopyInResult -> CopyInResult -> Bool
< :: CopyInResult -> CopyInResult -> Bool
$c<= :: CopyInResult -> CopyInResult -> Bool
<= :: CopyInResult -> CopyInResult -> Bool
$c> :: CopyInResult -> CopyInResult -> Bool
> :: CopyInResult -> CopyInResult -> Bool
$c>= :: CopyInResult -> CopyInResult -> Bool
>= :: CopyInResult -> CopyInResult -> Bool
$cmax :: CopyInResult -> CopyInResult -> CopyInResult
max :: CopyInResult -> CopyInResult -> CopyInResult
$cmin :: CopyInResult -> CopyInResult -> CopyInResult
min :: CopyInResult -> CopyInResult -> CopyInResult
Ord, Int -> CopyInResult -> ShowS
[CopyInResult] -> ShowS
CopyInResult -> String
(Int -> CopyInResult -> ShowS)
-> (CopyInResult -> String)
-> ([CopyInResult] -> ShowS)
-> Show CopyInResult
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> CopyInResult -> ShowS
showsPrec :: Int -> CopyInResult -> ShowS
$cshow :: CopyInResult -> String
show :: CopyInResult -> String
$cshowList :: [CopyInResult] -> ShowS
showList :: [CopyInResult] -> ShowS
Show, Int -> CopyInResult
CopyInResult -> Int
CopyInResult -> [CopyInResult]
CopyInResult -> CopyInResult
CopyInResult -> CopyInResult -> [CopyInResult]
CopyInResult -> CopyInResult -> CopyInResult -> [CopyInResult]
(CopyInResult -> CopyInResult)
-> (CopyInResult -> CopyInResult)
-> (Int -> CopyInResult)
-> (CopyInResult -> Int)
-> (CopyInResult -> [CopyInResult])
-> (CopyInResult -> CopyInResult -> [CopyInResult])
-> (CopyInResult -> CopyInResult -> [CopyInResult])
-> (CopyInResult -> CopyInResult -> CopyInResult -> [CopyInResult])
-> Enum CopyInResult
forall a.
(a -> a)
-> (a -> a)
-> (Int -> a)
-> (a -> Int)
-> (a -> [a])
-> (a -> a -> [a])
-> (a -> a -> [a])
-> (a -> a -> a -> [a])
-> Enum a
$csucc :: CopyInResult -> CopyInResult
succ :: CopyInResult -> CopyInResult
$cpred :: CopyInResult -> CopyInResult
pred :: CopyInResult -> CopyInResult
$ctoEnum :: Int -> CopyInResult
toEnum :: Int -> CopyInResult
$cfromEnum :: CopyInResult -> Int
fromEnum :: CopyInResult -> Int
$cenumFrom :: CopyInResult -> [CopyInResult]
enumFrom :: CopyInResult -> [CopyInResult]
$cenumFromThen :: CopyInResult -> CopyInResult -> [CopyInResult]
enumFromThen :: CopyInResult -> CopyInResult -> [CopyInResult]
$cenumFromTo :: CopyInResult -> CopyInResult -> [CopyInResult]
enumFromTo :: CopyInResult -> CopyInResult -> [CopyInResult]
$cenumFromThenTo :: CopyInResult -> CopyInResult -> CopyInResult -> [CopyInResult]
enumFromThenTo :: CopyInResult -> CopyInResult -> CopyInResult -> [CopyInResult]
Enum, CopyInResult
CopyInResult -> CopyInResult -> Bounded CopyInResult
forall a. a -> a -> Bounded a
$cminBound :: CopyInResult
minBound :: CopyInResult
$cmaxBound :: CopyInResult
maxBound :: CopyInResult
Bounded)

-- | Result of @PQgetCopyData@.
data CopyOutResult
  = CopyOutRow ByteString
  | CopyOutWouldBlock
  | CopyOutDone
  | CopyOutError
  deriving stock (CopyOutResult -> CopyOutResult -> Bool
(CopyOutResult -> CopyOutResult -> Bool)
-> (CopyOutResult -> CopyOutResult -> Bool) -> Eq CopyOutResult
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: CopyOutResult -> CopyOutResult -> Bool
== :: CopyOutResult -> CopyOutResult -> Bool
$c/= :: CopyOutResult -> CopyOutResult -> Bool
/= :: CopyOutResult -> CopyOutResult -> Bool
Eq, Eq CopyOutResult
Eq CopyOutResult =>
(CopyOutResult -> CopyOutResult -> Ordering)
-> (CopyOutResult -> CopyOutResult -> Bool)
-> (CopyOutResult -> CopyOutResult -> Bool)
-> (CopyOutResult -> CopyOutResult -> Bool)
-> (CopyOutResult -> CopyOutResult -> Bool)
-> (CopyOutResult -> CopyOutResult -> CopyOutResult)
-> (CopyOutResult -> CopyOutResult -> CopyOutResult)
-> Ord CopyOutResult
CopyOutResult -> CopyOutResult -> Bool
CopyOutResult -> CopyOutResult -> Ordering
CopyOutResult -> CopyOutResult -> CopyOutResult
forall a.
Eq a =>
(a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
$ccompare :: CopyOutResult -> CopyOutResult -> Ordering
compare :: CopyOutResult -> CopyOutResult -> Ordering
$c< :: CopyOutResult -> CopyOutResult -> Bool
< :: CopyOutResult -> CopyOutResult -> Bool
$c<= :: CopyOutResult -> CopyOutResult -> Bool
<= :: CopyOutResult -> CopyOutResult -> Bool
$c> :: CopyOutResult -> CopyOutResult -> Bool
> :: CopyOutResult -> CopyOutResult -> Bool
$c>= :: CopyOutResult -> CopyOutResult -> Bool
>= :: CopyOutResult -> CopyOutResult -> Bool
$cmax :: CopyOutResult -> CopyOutResult -> CopyOutResult
max :: CopyOutResult -> CopyOutResult -> CopyOutResult
$cmin :: CopyOutResult -> CopyOutResult -> CopyOutResult
min :: CopyOutResult -> CopyOutResult -> CopyOutResult
Ord, Int -> CopyOutResult -> ShowS
[CopyOutResult] -> ShowS
CopyOutResult -> String
(Int -> CopyOutResult -> ShowS)
-> (CopyOutResult -> String)
-> ([CopyOutResult] -> ShowS)
-> Show CopyOutResult
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> CopyOutResult -> ShowS
showsPrec :: Int -> CopyOutResult -> ShowS
$cshow :: CopyOutResult -> String
show :: CopyOutResult -> String
$cshowList :: [CopyOutResult] -> ShowS
showList :: [CopyOutResult] -> ShowS
Show)

-- | An asynchronous notification, as returned by 'notifies'.
data Notify = Notify
  { Notify -> ByteString
notifyRelname :: ByteString,
    Notify -> Int32
notifyBePid :: Int32,
    Notify -> ByteString
notifyExtra :: ByteString
  }
  deriving stock (Notify -> Notify -> Bool
(Notify -> Notify -> Bool)
-> (Notify -> Notify -> Bool) -> Eq Notify
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: Notify -> Notify -> Bool
== :: Notify -> Notify -> Bool
$c/= :: Notify -> Notify -> Bool
/= :: Notify -> Notify -> Bool
Eq, Eq Notify
Eq Notify =>
(Notify -> Notify -> Ordering)
-> (Notify -> Notify -> Bool)
-> (Notify -> Notify -> Bool)
-> (Notify -> Notify -> Bool)
-> (Notify -> Notify -> Bool)
-> (Notify -> Notify -> Notify)
-> (Notify -> Notify -> Notify)
-> Ord Notify
Notify -> Notify -> Bool
Notify -> Notify -> Ordering
Notify -> Notify -> Notify
forall a.
Eq a =>
(a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
$ccompare :: Notify -> Notify -> Ordering
compare :: Notify -> Notify -> Ordering
$c< :: Notify -> Notify -> Bool
< :: Notify -> Notify -> Bool
$c<= :: Notify -> Notify -> Bool
<= :: Notify -> Notify -> Bool
$c> :: Notify -> Notify -> Bool
> :: Notify -> Notify -> Bool
$c>= :: Notify -> Notify -> Bool
>= :: Notify -> Notify -> Bool
$cmax :: Notify -> Notify -> Notify
max :: Notify -> Notify -> Notify
$cmin :: Notify -> Notify -> Notify
min :: Notify -> Notify -> Notify
Ord, Int -> Notify -> ShowS
[Notify] -> ShowS
Notify -> String
(Int -> Notify -> ShowS)
-> (Notify -> String) -> ([Notify] -> ShowS) -> Show Notify
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> Notify -> ShowS
showsPrec :: Int -> Notify -> ShowS
$cshow :: Notify -> String
show :: Notify -> String
$cshowList :: [Notify] -> ShowS
showList :: [Notify] -> ShowS
Show)

-- * Result inspection

-- | Result-accessor closures, closed over an adapter's own result
-- representation (e.g. a C @PGresult@ pointer).
--
-- Carries no reference to the connection that produced it, so decoders can
-- consume a result without knowing its origin.
data Result = Result
  { -- | The status of the result.
    Result -> IO ExecStatus
resultStatus :: IO ExecStatus,
    -- | The flat error message of the result, if any. Formatted locally by the
    -- driver, so adapters are not expected to agree byte for byte; use
    -- 'resultErrorField' where exactness matters.
    Result -> IO (Maybe ByteString)
resultErrorMessage :: IO (Maybe ByteString),
    -- | A single structured field of the result's error report.
    Result -> FieldCode -> IO (Maybe ByteString)
resultErrorField :: FieldCode -> IO (Maybe ByteString),
    -- | Free the result, after which it must not be used. A no-op in adapters
    -- that leave results to the garbage collector.
    Result -> IO ()
unsafeFreeResult :: IO (),
    -- | Number of rows (tuples) in the result.
    Result -> IO Int32
ntuples :: IO Int32,
    -- | Number of columns (fields) in the result.
    Result -> IO Int32
nfields :: IO Int32,
    -- | Name of the column at the given index.
    Result -> Int32 -> IO (Maybe ByteString)
fname :: Int32 -> IO (Maybe ByteString),
    -- | Index of the column with the given name, if present.
    Result -> ByteString -> IO (Maybe Int32)
fnumber :: ByteString -> IO (Maybe Int32),
    -- | OID of the table the given column was fetched from, or 0.
    Result -> Int32 -> IO Word32
ftable :: Int32 -> IO Word32,
    -- | Column number (within its table) that the given result column was
    -- fetched from, or 0.
    Result -> Int32 -> IO Int32
ftablecol :: Int32 -> IO Int32,
    -- | Format (text or binary) of the given column.
    Result -> Int32 -> IO Format
fformat :: Int32 -> IO Format,
    -- | Data type OID of the given column.
    Result -> Int32 -> IO Word32
ftype :: Int32 -> IO Word32,
    -- | Type modifier of the given column.
    Result -> Int32 -> IO Int
fmod :: Int32 -> IO Int,
    -- | Server-side storage size of the given column's type, or a negative value
    -- for variable size.
    Result -> Int32 -> IO Int
fsize :: Int32 -> IO Int,
    -- | Value at @(row, column)@, or 'Nothing' for SQL @NULL@. May alias the
    -- result's storage, which 'unsafeFreeResult' invalidates.
    Result -> Int32 -> Int32 -> IO (Maybe ByteString)
getvalue :: Int32 -> Int32 -> IO (Maybe ByteString),
    -- | Like 'getvalue', but always a copy, valid after the result is freed.
    Result -> Int32 -> Int32 -> IO (Maybe ByteString)
getvalue' :: Int32 -> Int32 -> IO (Maybe ByteString),
    -- | Whether the value at @(row, column)@ is SQL @NULL@.
    Result -> Int32 -> Int32 -> IO Bool
getisnull :: Int32 -> Int32 -> IO Bool,
    -- | Length in bytes of the value at @(row, column)@.
    Result -> Int32 -> Int32 -> IO Int
getlength :: Int32 -> Int32 -> IO Int,
    -- | Number of parameters of a prepared statement (for a 'describePrepared'
    -- result).
    Result -> IO Int32
nparams :: IO Int32,
    -- | Data type OID of the given prepared-statement parameter.
    Result -> Int32 -> IO Word32
paramtype :: Int32 -> IO Word32,
    -- | The command status tag of the result (e.g. @\"INSERT 0 1\"@).
    Result -> IO (Maybe ByteString)
cmdStatus :: IO (Maybe ByteString),
    -- | The number of rows affected by the command, as text.
    Result -> IO (Maybe ByteString)
cmdTuples :: IO (Maybe ByteString)
  }

-- * Cancellation

-- | A cancellation handle, isolated from the connection that produced it,
-- hence usable from another thread while that connection is busy.
data Cancel = Cancel
  { -- | Request cancellation of the in-progress command via the handle.
    Cancel -> IO (Either ByteString ())
cancel :: IO (Either ByteString ())
  }

-- * Connection

-- | One flat capability record: closing, inspecting, querying, escaping,
-- async commands, pipelining, cancellation handles, notifications, copy,
-- large objects, control.
--
-- Produced by the 'connectdb'\/'connectStart'\/'newNullConnection' fields of
-- an t'Adapter', which close each field over their own connection
-- representation (a C @PGconn@ pointer, a native socket, ...).
data Connection = Connection
  { -- | Drive an asynchronous connection attempt forward.
    Connection -> IO PollingStatus
connectPoll :: IO PollingStatus,
    -- | Whether the connection is the null sentinel.
    Connection -> Bool
isNullConnection :: Bool,
    -- | Close the connection and release its resources.
    Connection -> IO ()
finish :: IO (),
    -- | Reset the communication channel to the server (blocking).
    Connection -> IO ()
reset :: IO (),
    -- | Begin resetting the connection asynchronously.
    Connection -> IO Bool
resetStart :: IO Bool,
    -- | Drive an asynchronous reset forward.
    Connection -> IO PollingStatus
resetPoll :: IO PollingStatus,
    -- | The database name of the connection.
    Connection -> IO (Maybe ByteString)
db :: IO (Maybe ByteString),
    -- | The user name of the connection.
    Connection -> IO (Maybe ByteString)
user :: IO (Maybe ByteString),
    -- | The password of the connection.
    Connection -> IO (Maybe ByteString)
pass :: IO (Maybe ByteString),
    -- | The server host name of the connection.
    Connection -> IO (Maybe ByteString)
host :: IO (Maybe ByteString),
    -- | The port of the connection.
    Connection -> IO (Maybe ByteString)
port :: IO (Maybe ByteString),
    -- | The command-line options passed in the connection request.
    Connection -> IO (Maybe ByteString)
options :: IO (Maybe ByteString),
    -- | Current connection status.
    Connection -> IO ConnStatus
status :: IO ConnStatus,
    -- | Current in-transaction status of the server.
    Connection -> IO TransactionStatus
transactionStatus :: IO TransactionStatus,
    -- | Look up a current parameter setting reported by the server.
    Connection -> ByteString -> IO (Maybe ByteString)
parameterStatus :: ByteString -> IO (Maybe ByteString),
    -- | The frontend\/backend protocol version.
    Connection -> IO Int
protocolVersion :: IO Int,
    -- | The server version, as an integer of the form @MMmmpp@.
    Connection -> IO Int
serverVersion :: IO Int,
    -- | The most recent error message, if any. Formatted locally by the driver,
    -- so adapters are not expected to agree byte for byte.
    Connection -> IO (Maybe ByteString)
errorMessage :: IO (Maybe ByteString),
    -- | The file descriptor of the connection socket.
    Connection -> IO (Maybe Fd)
socket :: IO (Maybe Fd),
    -- | The process ID of the backend serving this connection.
    Connection -> IO Int32
backendPID :: IO Int32,
    -- | Whether the connection authentication method required a password but
    -- none was available.
    Connection -> IO Bool
connectionNeedsPassword :: IO Bool,
    -- | Whether the connection authentication used a password.
    Connection -> IO Bool
connectionUsedPassword :: IO Bool,
    -- | Submit a command and wait for the result.
    Connection -> ByteString -> IO (Maybe Result)
exec :: ByteString -> IO (Maybe Result),
    -- | Submit a parameterized command. Each parameter is given as
    -- @(type oid, value, format)@, or 'Nothing' for SQL @NULL@. The final
    -- 'Format' selects the result format.
    Connection
-> ByteString
-> [Maybe (Word32, ByteString, Format)]
-> Format
-> IO (Maybe Result)
execParams ::
      ByteString ->
      [Maybe (Word32, ByteString, Format)] ->
      Format ->
      IO (Maybe Result),
    -- | Prepare a named statement. The OID list, when supplied, fixes parameter
    -- types; 'Nothing' leaves them to be inferred.
    Connection
-> ByteString -> ByteString -> Maybe [Word32] -> IO (Maybe Result)
prepare :: ByteString -> ByteString -> Maybe [Word32] -> IO (Maybe Result),
    -- | Execute a previously prepared statement. Each parameter is
    -- @(value, format)@, or 'Nothing' for SQL @NULL@.
    Connection
-> ByteString
-> [Maybe (ByteString, Format)]
-> Format
-> IO (Maybe Result)
execPrepared ::
      ByteString ->
      [Maybe (ByteString, Format)] ->
      Format ->
      IO (Maybe Result),
    -- | Describe a prepared statement.
    Connection -> ByteString -> IO (Maybe Result)
describePrepared :: ByteString -> IO (Maybe Result),
    -- | Describe a portal.
    Connection -> ByteString -> IO (Maybe Result)
describePortal :: ByteString -> IO (Maybe Result),
    -- | Escape a string for safe inclusion in an SQL literal.
    Connection -> ByteString -> IO (Maybe ByteString)
escapeStringConn :: ByteString -> IO (Maybe ByteString),
    -- | Escape binary data for use within a @bytea@ literal.
    Connection -> ByteString -> IO (Maybe ByteString)
escapeByteaConn :: ByteString -> IO (Maybe ByteString),
    -- | Escape a string for use as an SQL identifier (e.g. a table or column
    -- name), including the surrounding double quotes.
    Connection -> ByteString -> IO (Maybe ByteString)
escapeIdentifier :: ByteString -> IO (Maybe ByteString),
    -- | Submit a command without waiting for the result.
    Connection -> ByteString -> IO Bool
sendQuery :: ByteString -> IO Bool,
    -- | Asynchronous 'execParams'.
    Connection
-> ByteString
-> [Maybe (Word32, ByteString, Format)]
-> Format
-> IO Bool
sendQueryParams :: ByteString -> [Maybe (Word32, ByteString, Format)] -> Format -> IO Bool,
    -- | Asynchronous 'prepare'.
    Connection -> ByteString -> ByteString -> Maybe [Word32] -> IO Bool
sendPrepare :: ByteString -> ByteString -> Maybe [Word32] -> IO Bool,
    -- | Asynchronous 'execPrepared'.
    Connection
-> ByteString -> [Maybe (ByteString, Format)] -> Format -> IO Bool
sendQueryPrepared :: ByteString -> [Maybe (ByteString, Format)] -> Format -> IO Bool,
    -- | Asynchronous 'describePrepared'.
    Connection -> ByteString -> IO Bool
sendDescribePrepared :: ByteString -> IO Bool,
    -- | Asynchronous 'describePortal'.
    Connection -> ByteString -> IO Bool
sendDescribePortal :: ByteString -> IO Bool,
    -- | Collect the next result from an asynchronous command.
    Connection -> IO (Maybe Result)
getResult :: IO (Maybe Result),
    -- | Read input from the server into the driver's buffer.
    Connection -> IO Bool
consumeInput :: IO Bool,
    -- | Whether a command is busy (a 'getResult' would block).
    Connection -> IO Bool
isBusy :: IO Bool,
    -- | Set the non-blocking flag of the connection.
    Connection -> Bool -> IO Bool
setnonblocking :: Bool -> IO Bool,
    -- | Whether the connection is in non-blocking mode.
    Connection -> IO Bool
isnonblocking :: IO Bool,
    -- | Select single-row mode for the currently executing query.
    Connection -> IO Bool
setSingleRowMode :: IO Bool,
    -- | Flush queued output data to the server.
    Connection -> IO FlushStatus
flush :: IO FlushStatus,
    -- | Current pipeline-mode status.
    Connection -> IO PipelineStatus
pipelineStatus :: IO PipelineStatus,
    -- | Enter pipeline mode.
    Connection -> IO Bool
enterPipelineMode :: IO Bool,
    -- | Leave pipeline mode.
    Connection -> IO Bool
exitPipelineMode :: IO Bool,
    -- | Mark a synchronization point in a pipeline.
    Connection -> IO Bool
pipelineSync :: IO Bool,
    -- | Request the server to flush its output buffer in pipeline mode.
    Connection -> IO Bool
sendFlushRequest :: IO Bool,
    -- | Obtain a cancellation handle for the connection.
    Connection -> IO (Maybe Cancel)
getCancel :: IO (Maybe Cancel),
    -- | Return the next notification from the queue, if any.
    Connection -> IO (Maybe Notify)
notifies :: IO (Maybe Notify),
    -- | Stop accumulating notices for retrieval via 'getNotice'.
    Connection -> IO ()
disableNoticeReporting :: IO (),
    -- | Start accumulating notices for retrieval via 'getNotice'.
    Connection -> IO ()
enableNoticeReporting :: IO (),
    -- | Retrieve the next accumulated notice, if any.
    Connection -> IO (Maybe ByteString)
getNotice :: IO (Maybe ByteString),
    -- | Send data on a @COPY FROM STDIN@ connection.
    Connection -> ByteString -> IO CopyInResult
putCopyData :: ByteString -> IO CopyInResult,
    -- | Signal the end of @COPY FROM STDIN@; 'Just' aborts with the given error.
    Connection -> Maybe ByteString -> IO CopyInResult
putCopyEnd :: Maybe ByteString -> IO CopyInResult,
    -- | Receive data on a @COPY TO STDOUT@ connection. The 'Bool' selects
    -- non-blocking mode.
    Connection -> Bool -> IO CopyOutResult
getCopyData :: Bool -> IO CopyOutResult,
    -- | Create a new large object.
    Connection -> IO (Maybe Word32)
loCreat :: IO (Maybe Word32),
    -- | Create a new large object with the given OID.
    Connection -> Word32 -> IO (Maybe Word32)
loCreate :: Word32 -> IO (Maybe Word32),
    -- | Import a file as a new large object.
    Connection -> String -> IO (Maybe Word32)
loImport :: FilePath -> IO (Maybe Word32),
    -- | Import a file as a new large object with the given OID.
    Connection -> String -> Word32 -> IO (Maybe Word32)
loImportWithOid :: FilePath -> Word32 -> IO (Maybe Word32),
    -- | Export a large object to a file.
    Connection -> Word32 -> String -> IO (Maybe ())
loExport :: Word32 -> FilePath -> IO (Maybe ()),
    -- | Open a large object.
    Connection -> Word32 -> IOMode -> IO (Maybe Int32)
loOpen :: Word32 -> IOMode -> IO (Maybe Int32),
    -- | Write to an open large object.
    Connection -> Int32 -> ByteString -> IO (Maybe Int)
loWrite :: Int32 -> ByteString -> IO (Maybe Int),
    -- | Read from an open large object.
    Connection -> Int32 -> Int -> IO (Maybe ByteString)
loRead :: Int32 -> Int -> IO (Maybe ByteString),
    -- | Seek within an open large object.
    Connection -> Int32 -> SeekMode -> Int -> IO (Maybe Int)
loSeek :: Int32 -> SeekMode -> Int -> IO (Maybe Int),
    -- | Report the current seek position of an open large object.
    Connection -> Int32 -> IO (Maybe Int)
loTell :: Int32 -> IO (Maybe Int),
    -- | Truncate an open large object.
    Connection -> Int32 -> Int -> IO (Maybe ())
loTruncate :: Int32 -> Int -> IO (Maybe ()),
    -- | Close an open large object.
    Connection -> Int32 -> IO (Maybe ())
loClose :: Int32 -> IO (Maybe ()),
    -- | Remove a large object.
    Connection -> Word32 -> IO (Maybe ())
loUnlink :: Word32 -> IO (Maybe ()),
    -- | The current client encoding name.
    Connection -> IO ByteString
clientEncoding :: IO ByteString,
    -- | Set the client encoding.
    Connection -> ByteString -> IO Bool
setClientEncoding :: ByteString -> IO Bool,
    -- | Set error verbosity, returning the previous setting.
    Connection -> Verbosity -> IO Verbosity
setErrorVerbosity :: Verbosity -> IO Verbosity
  }

-- * Adapter

-- | An adapter package's connection-establishing functions, bundled into one
-- value. Each adapter package (e.g. @pqi-ffi@, @pqi-native@) exports exactly
-- one value of this type, conventionally named @adapter@.
--
-- This is the only value that identifies an adapter: t'Connection', t'Result'
-- and t'Cancel' say nothing about which adapter produced them. Callers that
-- must stay adapter-agnostic - a differential test harness, a library letting
-- its users pick a driver at runtime - pass an t'Adapter' around instead of a
-- family of adapter-qualified top-level functions.
data Adapter = Adapter
  { -- | A short identifier for the adapter (e.g. @\"pqi-ffi\"@), for use in
    -- test descriptions, logs, and error messages.
    Adapter -> Text
name :: Text,
    -- | Connect to a database, as @PQconnectdb@.
    Adapter -> ByteString -> IO Connection
connectdb :: ByteString -> IO Connection,
    -- | Begin connecting to a database asynchronously, as @PQconnectStart@.
    Adapter -> ByteString -> IO Connection
connectStart :: ByteString -> IO Connection,
    -- | The null-sentinel connection, as @PQnewNullConnection@.
    Adapter -> IO Connection
newNullConnection :: IO Connection,
    -- | Convert the textual representation of a @bytea@ value, as produced
    -- by the server, back into raw bytes, as @PQunescapeBytea@.
    Adapter -> ByteString -> IO (Maybe ByteString)
unescapeBytea :: ByteString -> IO (Maybe ByteString),
    -- | Render an 'ExecStatus' as the string describing its status code
    -- (e.g. @\"PGRES_TUPLES_OK\"@), as @PQresStatus@.
    Adapter -> ExecStatus -> IO ByteString
resStatus :: ExecStatus -> IO ByteString
  }