| Safe Haskell | None |
|---|---|
| Language | GHC2024 |
Arbiter.Simple.SimpleDb
Description
The postgresql-simple database monad with a built-in MonadArbiter instance:
import Arbiter.Core import Arbiter.Simple myFunction :: SimpleDb MyRegistry IO () myFunction = insertJob (defaultJob myPayload)
Synopsis
- newtype SimpleDb (registry :: JobPayloadRegistry) (m :: Type -> Type) a = SimpleDb {
- unSimpleDb :: ReaderT (SimpleEnv registry) m a
- data SimpleEnv (registry :: JobPayloadRegistry) = SimpleEnv {}
- runSimpleDb :: forall (registry :: JobPayloadRegistry) m a. SimpleEnv registry -> SimpleDb registry m a -> m a
- inTransaction :: forall (registry :: JobPayloadRegistry) m a. Connection -> SchemaName -> SimpleDb registry m a -> m a
- createSimpleEnv :: forall (registry :: JobPayloadRegistry) m. MonadIO m => Proxy registry -> ByteString -> SchemaName -> m (SimpleEnv registry)
- createSimpleEnvWithConfig :: forall (registry :: JobPayloadRegistry) m. MonadIO m => Proxy registry -> ByteString -> SchemaName -> PoolConfig -> m (SimpleEnv registry)
- createSimpleEnvWithPool :: forall (registry :: JobPayloadRegistry) m. MonadIO m => Proxy registry -> Pool Connection -> SchemaName -> m (SimpleEnv registry)
- destroySimpleEnv :: forall m (registry :: JobPayloadRegistry). MonadIO m => SimpleEnv registry -> m ()
- disableListener :: forall (registry :: JobPayloadRegistry). SimpleEnv registry -> SimpleEnv registry
- useDedicatedListener :: forall m (registry :: JobPayloadRegistry). MonadIO m => ByteString -> SimpleEnv registry -> m (SimpleEnv registry)
Database Monad
Source #newtype SimpleDb (registry :: JobPayloadRegistry) (m :: Type -> Type) a
The postgresql-simple database monad.
Constructors
| SimpleDb | |
Fields
| |
Instances
Source #data SimpleEnv (registry :: JobPayloadRegistry)
Schema name and connection pool for SimpleDb.
Constructors
| SimpleEnv | |
Fields
| |
Source #runSimpleDb :: forall (registry :: JobPayloadRegistry) m a. SimpleEnv registry -> SimpleDb registry m a -> m a
Run a SimpleDb action in its env.
Source #inTransaction :: forall (registry :: JobPayloadRegistry) m a. Connection -> SchemaName -> SimpleDb registry m a -> m a
Arguments
| :: forall (registry :: JobPayloadRegistry) m a. Connection | |
| -> SchemaName | Schema name |
| -> SimpleDb registry m a | |
| -> m a |
Run a SimpleDb action on one connection without a pool or env. The connection is
pinned as an open transaction. withDbTransaction nests
through savepoints. The caller owns the transaction.
PG.withTransaction conn $ do
PG.execute conn "INSERT INTO orders ..." params
inTransaction conn "arbiter" $
Arb.insertJob (Arb.defaultJob (ProcessOrder orderId))
Environment Creation
Source #createSimpleEnv :: forall (registry :: JobPayloadRegistry) m. MonadIO m => Proxy registry -> ByteString -> SchemaName -> m (SimpleEnv registry)
Arguments
| :: forall (registry :: JobPayloadRegistry) m. MonadIO m | |
| => Proxy registry | Type-level job payload registry |
| -> ByteString | PostgreSQL connection string |
| -> SchemaName | Schema name |
| -> m (SimpleEnv registry) |
Create a SimpleEnv with default pool settings. Size worker pools with
createSimpleEnvWithConfig and poolConfigForWorkers.
Source #createSimpleEnvWithConfig :: forall (registry :: JobPayloadRegistry) m. MonadIO m => Proxy registry -> ByteString -> SchemaName -> PoolConfig -> m (SimpleEnv registry)
Arguments
| :: forall (registry :: JobPayloadRegistry) m. MonadIO m | |
| => Proxy registry | Type-level job payload registry |
| -> ByteString | PostgreSQL connection string |
| -> SchemaName | Schema name |
| -> PoolConfig | Pool configuration |
| -> m (SimpleEnv registry) |
Create a SimpleEnv with custom pool settings.
let config = PoolConfig
{ poolSize = 50
, poolIdleTimeout = 120
, poolStripes = Just 4
}
env <- createSimpleEnvWithConfig (Proxy @MyRegistry) "host=localhost dbname=mydb" "arbiter" config
Source #createSimpleEnvWithPool :: forall (registry :: JobPayloadRegistry) m. MonadIO m => Proxy registry -> Pool Connection -> SchemaName -> m (SimpleEnv registry)
Arguments
| :: forall (registry :: JobPayloadRegistry) m. MonadIO m | |
| => Proxy registry | Type-level job payload registry |
| -> Pool Connection | User-provided connection pool |
| -> SchemaName | Schema name |
| -> m (SimpleEnv registry) |
Create a SimpleEnv over a caller's own connection pool. The shared listener
holds one pool connection for the env's lifetime. Size the pool for the worker
load plus one. disableListener runs poll-only and frees that slot.
useDedicatedListener gives the listener its own connection.
Source #destroySimpleEnv :: forall m (registry :: JobPayloadRegistry). MonadIO m => SimpleEnv registry -> m ()
Release the env's connection pool, closing its open connections.
Source #disableListener :: forall (registry :: JobPayloadRegistry). SimpleEnv registry -> SimpleEnv registry
Turn off the shared LISTEN listener for an env, running poll-only.
Source #useDedicatedListener :: forall m (registry :: JobPayloadRegistry). MonadIO m => ByteString -> SimpleEnv registry -> m (SimpleEnv registry)
Give the env a dedicated LISTEN connection opened from a connection string. The listener takes no pool slot.