arbiter-simple-0.1.0.0
arbiter-simple
Safe HaskellNone
LanguageGHC2024

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

Database Monad

Source #newtype SimpleDb (registry :: JobPayloadRegistry) (m :: Type -> Type) a

The postgresql-simple database monad.

Constructors

SimpleDb 

Fields

Instances

Instances details
Monad m => MonadReader (SimpleEnv registry) (SimpleDb registry m) Source # 
Instance details

Defined in Arbiter.Simple.SimpleDb

Methods

#ask :: SimpleDb registry m (SimpleEnv registry)

#local :: (SimpleEnv registry -> SimpleEnv registry) -> SimpleDb registry m a -> SimpleDb registry m a

#reader :: (SimpleEnv registry -> a) -> SimpleDb registry m a

MonadUnliftIO m => MonadArbiter (SimpleDb registry m) Source # 
Instance details

Defined in Arbiter.Simple.SimpleDb

Associated Types

type RegistryOf (SimpleDb registry m) 
Instance details

Defined in Arbiter.Simple.SimpleDb

type RegistryOf (SimpleDb registry m) = registry

Methods

#getSchema :: SimpleDb registry m SchemaName

#executeQuery :: Query a -> SimpleDb registry m [a]

#executeQueryPrepared :: Query a -> SimpleDb registry m [a]

#executeStatement :: Query a -> SimpleDb registry m Int64

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

#runHandlerWithConnection :: JobHandler (SimpleDb registry m) payload (ResultOf (SimpleDb registry m) payload) -> JobRead payload -> SimpleDb registry m (ResultOf (SimpleDb registry m) payload)

#getListener :: SimpleDb registry m (Maybe Listener)

Monad m => HasSimplePool (SimpleDb registry m) Source # 
Instance details

Defined in Arbiter.Simple.SimpleDb

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

Defined in Arbiter.Simple.SimpleDb

Methods

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

#catchNoPropagate :: Exception e => SimpleDb registry m a -> (ExceptionWithContext e -> SimpleDb registry m a) -> SimpleDb registry m a

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

Defined in Arbiter.Simple.SimpleDb

Methods

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

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

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

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

Defined in Arbiter.Simple.SimpleDb

Methods

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

#rethrowM :: Exception e => ExceptionWithContext e -> SimpleDb registry m a

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

Defined in Arbiter.Simple.SimpleDb

Methods

#pure :: a -> SimpleDb registry m a

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

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

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

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

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

Defined in Arbiter.Simple.SimpleDb

Methods

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

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

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

Defined in Arbiter.Simple.SimpleDb

Methods

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

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

#return :: a -> SimpleDb registry m a

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

Defined in Arbiter.Simple.SimpleDb

Methods

#fail :: HasCallStack => String -> SimpleDb registry m a

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

Defined in Arbiter.Simple.SimpleDb

Methods

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

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

Defined in Arbiter.Simple.SimpleDb

Methods

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

type RegistryOf (SimpleDb registry m) Source # 
Instance details

Defined in Arbiter.Simple.SimpleDb

type RegistryOf (SimpleDb registry m) = registry
type Handler (SimpleDb registry m) job result Source # 
Instance details

Defined in Arbiter.Simple.SimpleDb

type Handler (SimpleDb registry m) job result = Connection -> job -> SimpleDb registry m result

Source #data SimpleEnv (registry :: JobPayloadRegistry)

Schema name and connection pool for SimpleDb.

Constructors

SimpleEnv 

Fields

Instances

Instances details
Monad m => MonadReader (SimpleEnv registry) (SimpleDb registry m) Source # 
Instance details

Defined in Arbiter.Simple.SimpleDb

Methods

#ask :: SimpleDb registry m (SimpleEnv registry)

#local :: (SimpleEnv registry -> SimpleEnv registry) -> SimpleDb registry m a -> SimpleDb registry m a

#reader :: (SimpleEnv registry -> a) -> SimpleDb registry m a

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.