module Database.PostgreSQL.PQTypes.Class
( QueryName(..)
, MonadDB(..)
) where
import Control.Monad.Trans
import Control.Monad.Trans.Control
import Database.PostgreSQL.PQTypes.FromRow
import Database.PostgreSQL.PQTypes.Internal.Connection
import Database.PostgreSQL.PQTypes.Internal.Notification
import Database.PostgreSQL.PQTypes.Internal.Query
import Database.PostgreSQL.PQTypes.Internal.QueryResult
import Database.PostgreSQL.PQTypes.SQL.Class
import Database.PostgreSQL.PQTypes.Transaction.Settings
class (Applicative m, Monad m) => MonadDB m where
runQuery :: IsSQL sql => sql -> m Int
runPreparedQuery :: IsSQL sql => QueryName -> sql -> m Int
getLastQuery :: m SomeSQL
withFrozenLastQuery :: m a -> m a
getConnectionStats :: m ConnectionStats
getQueryResult :: FromRow row => m (Maybe (QueryResult row))
clearQueryResult :: m ()
getTransactionSettings :: m TransactionSettings
setTransactionSettings :: TransactionSettings -> m ()
getNotification :: Int -> m (Maybe Notification)
withNewConnection :: m a -> m a
instance {-# OVERLAPPABLE #-}
( Applicative (t m)
, Monad (t m)
, MonadTrans t
, MonadTransControl t
, MonadDB m
) => MonadDB (t m) where
runQuery :: forall sql. IsSQL sql => sql -> t m Int
runQuery = forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall (m :: * -> *) sql. (MonadDB m, IsSQL sql) => sql -> m Int
runQuery
runPreparedQuery :: forall sql. IsSQL sql => QueryName -> sql -> t m Int
runPreparedQuery QueryName
name = forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall (m :: * -> *) sql.
(MonadDB m, IsSQL sql) =>
QueryName -> sql -> m Int
runPreparedQuery QueryName
name
getLastQuery :: t m SomeSQL
getLastQuery = forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift forall (m :: * -> *). MonadDB m => m SomeSQL
getLastQuery
withFrozenLastQuery :: forall a. t m a -> t m a
withFrozenLastQuery t m a
m = forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTransControl t, Monad (t m), Monad m) =>
(Run t -> m (StT t a)) -> t m a
controlT forall a b. (a -> b) -> a -> b
$ \Run t
run -> forall (m :: * -> *) a. MonadDB m => m a -> m a
withFrozenLastQuery (Run t
run t m a
m)
getConnectionStats :: t m ConnectionStats
getConnectionStats = forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift forall (m :: * -> *). MonadDB m => m ConnectionStats
getConnectionStats
getQueryResult :: forall row. FromRow row => t m (Maybe (QueryResult row))
getQueryResult = forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift forall (m :: * -> *) row.
(MonadDB m, FromRow row) =>
m (Maybe (QueryResult row))
getQueryResult
clearQueryResult :: t m ()
clearQueryResult = forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift forall (m :: * -> *). MonadDB m => m ()
clearQueryResult
getTransactionSettings :: t m TransactionSettings
getTransactionSettings = forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift forall (m :: * -> *). MonadDB m => m TransactionSettings
getTransactionSettings
setTransactionSettings :: TransactionSettings -> t m ()
setTransactionSettings = forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall (m :: * -> *). MonadDB m => TransactionSettings -> m ()
setTransactionSettings
getNotification :: Int -> t m (Maybe Notification)
getNotification = forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall (m :: * -> *). MonadDB m => Int -> m (Maybe Notification)
getNotification
withNewConnection :: forall a. t m a -> t m a
withNewConnection t m a
m = forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTransControl t, Monad (t m), Monad m) =>
(Run t -> m (StT t a)) -> t m a
controlT forall a b. (a -> b) -> a -> b
$ \Run t
run -> forall (m :: * -> *) a. MonadDB m => m a -> m a
withNewConnection (Run t
run t m a
m)