arbiter-hasql-0.1.0.0: Hasql backend for arbiter
Safe HaskellNone
LanguageGHC2024

Arbiter.Hasql.HasqlDb

Description

Hasql database monad for Arbiter.

HasqlDb has a built-in MonadArbiter instance, so you can use it directly:

import Arbiter.Core
import Arbiter.Hasql

myFunction :: HasqlDb MyRegistry IO ()
myFunction = insertJob (defaultJob myPayload)
Synopsis

Database Monad

newtype HasqlDb (registry :: k) (m :: Type -> Type) a Source #

Hasql database monad for Arbiter.

Constructors

HasqlDb 

Fields

Instances

Instances details
Monad m => MonadReader (HasqlEnv registry) (HasqlDb registry m) Source # 
Instance details

Defined in Arbiter.Hasql.HasqlDb

Methods

ask :: HasqlDb registry m (HasqlEnv registry) #

local :: (HasqlEnv registry -> HasqlEnv registry) -> HasqlDb registry m a -> HasqlDb registry m a #

reader :: (HasqlEnv registry -> a) -> HasqlDb registry m a #

(Monad m, MonadIO m, MonadUnliftIO m) => MonadArbiter (HasqlDb registry m) Source # 
Instance details

Defined in Arbiter.Hasql.HasqlDb

Methods

executeQuery :: Text -> Params -> RowCodec a -> HasqlDb registry m [a] #

executeStatement :: Text -> Params -> HasqlDb registry m Int64 #

withDbTransaction :: HasqlDb registry m a -> HasqlDb registry m a #

runHandlerWithConnection :: Handler (HasqlDb registry m) jobs result -> jobs -> HasqlDb registry m result #

Monad m => HasHasqlPool (HasqlDb registry m) Source # 
Instance details

Defined in Arbiter.Hasql.HasqlDb

MonadIO m => MonadIO (HasqlDb registry m) Source # 
Instance details

Defined in Arbiter.Hasql.HasqlDb

Methods

liftIO :: IO a -> HasqlDb registry m a #

MonadCatch m => MonadCatch (HasqlDb registry m) Source # 
Instance details

Defined in Arbiter.Hasql.HasqlDb

Methods

catch :: (HasCallStack, Exception e) => HasqlDb registry m a -> (e -> HasqlDb registry m a) -> HasqlDb registry m a #

MonadMask m => MonadMask (HasqlDb registry m) Source # 
Instance details

Defined in Arbiter.Hasql.HasqlDb

Methods

mask :: HasCallStack => ((forall a. HasqlDb registry m a -> HasqlDb registry m a) -> HasqlDb registry m b) -> HasqlDb registry m b #

uninterruptibleMask :: HasCallStack => ((forall a. HasqlDb registry m a -> HasqlDb registry m a) -> HasqlDb registry m b) -> HasqlDb registry m b #

generalBracket :: HasCallStack => HasqlDb registry m a -> (a -> ExitCase b -> HasqlDb registry m c) -> (a -> HasqlDb registry m b) -> HasqlDb registry m (b, c) #

MonadThrow m => MonadThrow (HasqlDb registry m) Source # 
Instance details

Defined in Arbiter.Hasql.HasqlDb

Methods

throwM :: (HasCallStack, Exception e) => e -> HasqlDb registry m a #

Applicative m => Applicative (HasqlDb registry m) Source # 
Instance details

Defined in Arbiter.Hasql.HasqlDb

Methods

pure :: a -> HasqlDb registry m a #

(<*>) :: HasqlDb registry m (a -> b) -> HasqlDb registry m a -> HasqlDb registry m b #

liftA2 :: (a -> b -> c) -> HasqlDb registry m a -> HasqlDb registry m b -> HasqlDb registry m c #

(*>) :: HasqlDb registry m a -> HasqlDb registry m b -> HasqlDb registry m b #

(<*) :: HasqlDb registry m a -> HasqlDb registry m b -> HasqlDb registry m a #

Functor m => Functor (HasqlDb registry m) Source # 
Instance details

Defined in Arbiter.Hasql.HasqlDb

Methods

fmap :: (a -> b) -> HasqlDb registry m a -> HasqlDb registry m b #

(<$) :: a -> HasqlDb registry m b -> HasqlDb registry m a #

Monad m => Monad (HasqlDb registry m) Source # 
Instance details

Defined in Arbiter.Hasql.HasqlDb

Methods

(>>=) :: HasqlDb registry m a -> (a -> HasqlDb registry m b) -> HasqlDb registry m b #

(>>) :: HasqlDb registry m a -> HasqlDb registry m b -> HasqlDb registry m b #

return :: a -> HasqlDb registry m a #

MonadFail m => MonadFail (HasqlDb registry m) Source # 
Instance details

Defined in Arbiter.Hasql.HasqlDb

Methods

fail :: String -> HasqlDb registry m a #

MonadUnliftIO m => MonadUnliftIO (HasqlDb registry m) Source # 
Instance details

Defined in Arbiter.Hasql.HasqlDb

Methods

withRunInIO :: ((forall a. HasqlDb registry m a -> IO a) -> IO b) -> HasqlDb registry m b

Monad m => HasArbiterSchema (HasqlDb registry m) registry Source # 
Instance details

Defined in Arbiter.Hasql.HasqlDb

Methods

getSchema :: HasqlDb registry m Text #

type Handler (HasqlDb registry m) jobs result Source # 
Instance details

Defined in Arbiter.Hasql.HasqlDb

type Handler (HasqlDb registry m) jobs result = Connection -> jobs -> HasqlDb registry m result

data HasqlEnv (registry :: k) Source #

Environment for HasqlDb operations

Contains both the schema name and the connection pool.

Constructors

HasqlEnv 

Fields

Instances

Instances details
Monad m => MonadReader (HasqlEnv registry) (HasqlDb registry m) Source # 
Instance details

Defined in Arbiter.Hasql.HasqlDb

Methods

ask :: HasqlDb registry m (HasqlEnv registry) #

local :: (HasqlEnv registry -> HasqlEnv registry) -> HasqlDb registry m a -> HasqlDb registry m a #

reader :: (HasqlEnv registry -> a) -> HasqlDb registry m a #

runHasqlDb :: forall {k} (registry :: k) m a. HasqlEnv registry -> HasqlDb registry m a -> m a Source #

Run a HasqlDb action with a HasqlEnv.

inTransaction Source #

Arguments

:: forall {k} (registry :: k) m a. Connection 
-> Text

PostgreSQL schema name

-> HasqlDb registry m a 
-> m a 

Run a HasqlDb action using a single hasql connection.

No pool is needed. The connection is pinned with transactionDepth = 1, so arbiter's withDbTransaction uses savepoints instead of issuing BEGIN. The caller is responsible for transaction lifecycle on the connection.

_ <- Hasql.use conn (Session.script BEGIN)
inTransaction conn "arbiter" $ do
  Arb.insertJob (Arb.defaultJob myPayload)
_ <- Hasql.use conn (Session.script COMMIT)

Environment Creation

createHasqlEnv Source #

Arguments

:: forall (registry :: JobPayloadRegistry) m. (AllQueuesUnique registry, MonadIO m) 
=> Proxy registry 
-> ByteString

PostgreSQL connection string

-> Text

PostgreSQL schema name (e.g., "arbiter")

-> m (HasqlEnv registry) 

Create a HasqlEnv with conservative defaults (10 connections, 300s idle timeout, 1 stripe).

For worker pools, consider using createHasqlEnvWithConfig with poolConfigForWorkers to size the pool based on worker count.

createHasqlEnvWithConfig Source #

Arguments

:: forall (registry :: JobPayloadRegistry) m. (AllQueuesUnique registry, MonadIO m) 
=> Proxy registry 
-> ByteString

PostgreSQL connection string

-> Text

PostgreSQL schema name

-> PoolConfig 
-> m (HasqlEnv registry) 

Create a HasqlEnv with custom pool configuration.

createHasqlEnvWithPool Source #

Arguments

:: forall (registry :: JobPayloadRegistry). AllQueuesUnique registry 
=> Proxy registry 
-> Pool Connection 
-> Text

PostgreSQL schema name

-> HasqlEnv registry 

Create a HasqlEnv with a user-provided connection pool.

Hasql Settings