hpqtypes-1.2.2: src/Database/PostgreSQL/PQTypes/Class.hs
module Database.PostgreSQL.PQTypes.Class (
MonadDB(..)
) where
import Control.Applicative
import Database.PostgreSQL.PQTypes.FromRow
import Database.PostgreSQL.PQTypes.Internal.Connection
import Database.PostgreSQL.PQTypes.Internal.QueryResult
import Database.PostgreSQL.PQTypes.Transaction.Settings
import Database.PostgreSQL.PQTypes.SQL.Class
class (Applicative m, Monad m) => MonadDB m where
-- | Run SQL query and return number of affected/returned rows. Note that
-- for a given connection, only one thread may be executing 'runQuery' at
-- a given time. If simultaneous call is made from another thread, it
-- will block until currently running 'runQuery' finishes.
runQuery :: IsSQL sql => sql -> m Int
-- | Get last SQL query that was executed.
getLastQuery :: m SomeSQL
-- | Get current connection statistics.
getConnectionStats :: m ConnectionStats
-- | Get current query result.
getQueryResult :: m (Maybe QueryResult)
-- | Clear current query result.
clearQueryResult :: m ()
-- | Get current transaction settings.
getTransactionSettings :: m TransactionSettings
-- | Set transaction settings to supplied ones. Note that it
-- won't change any properties of currently running transaction,
-- only the subsequent ones.
setTransactionSettings :: TransactionSettings -> m ()
-- | Fold the result set of rows from left to right.
foldlM :: FromRow row => (acc -> row -> m acc) -> acc -> m acc
-- | Fold the result set of rows from right to left.
foldrM :: FromRow row => (row -> acc -> m acc) -> acc -> m acc
-- | Execute supplied monadic action with new connection
-- using current connection source and transaction settings.
--
-- Particularly useful when you want to spawn a new thread, but
-- do not want the connection in child thread to be shared with
-- the parent one.
withNewConnection :: m a -> m a