| Safe Haskell | None |
|---|---|
| Language | GHC2024 |
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
- newtype HasqlDb (registry :: JobPayloadRegistry) (m :: Type -> Type) a = HasqlDb {}
- data HasqlEnv (registry :: JobPayloadRegistry) = HasqlEnv {}
- runHasqlDb :: forall (registry :: JobPayloadRegistry) m a. HasqlEnv registry -> HasqlDb registry m a -> m a
- inTransaction :: forall (registry :: JobPayloadRegistry) m a. Connection -> SchemaName -> HasqlDb registry m a -> m a
- createHasqlEnv :: forall (registry :: JobPayloadRegistry) m. MonadIO m => Proxy registry -> ByteString -> SchemaName -> m (HasqlEnv registry)
- createHasqlEnvWithConfig :: forall (registry :: JobPayloadRegistry) m. MonadIO m => Proxy registry -> ByteString -> SchemaName -> PoolConfig -> m (HasqlEnv registry)
- createHasqlEnvWithPool :: forall (registry :: JobPayloadRegistry). Proxy registry -> Pool Connection -> SchemaName -> HasqlEnv registry
- hasqlSettings :: ByteString -> HasqlSettings
- newtype HasqlConnectionError = HasqlConnectionError String
Database Monad
newtype HasqlDb (registry :: JobPayloadRegistry) (m :: Type -> Type) a Source #
Hasql database monad for Arbiter.
Instances
| Monad m => MonadReader (HasqlEnv registry) (HasqlDb registry m) Source # | |
| (Monad m, MonadIO m, MonadUnliftIO m) => MonadArbiter (HasqlDb registry m) Source # | |
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 # | |
Defined in Arbiter.Hasql.HasqlDb Methods getHasqlPool :: HasqlDb registry m HasqlConnectionPool Source # localHasqlPool :: (HasqlConnectionPool -> HasqlConnectionPool) -> HasqlDb registry m a -> HasqlDb registry m a Source # | |
| MonadIO m => MonadIO (HasqlDb registry m) Source # | |
Defined in Arbiter.Hasql.HasqlDb | |
| MonadCatch m => MonadCatch (HasqlDb registry m) Source # | |
Defined in Arbiter.Hasql.HasqlDb | |
| MonadMask m => MonadMask (HasqlDb registry m) Source # | |
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 # | |
Defined in Arbiter.Hasql.HasqlDb Methods throwM :: (HasCallStack, Exception e) => e -> HasqlDb registry m a # | |
| Applicative m => Applicative (HasqlDb registry m) Source # | |
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 # | |
| Monad m => Monad (HasqlDb registry m) Source # | |
| MonadFail m => MonadFail (HasqlDb registry m) Source # | |
Defined in Arbiter.Hasql.HasqlDb | |
| MonadUnliftIO m => MonadUnliftIO (HasqlDb registry m) Source # | |
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 # | |
Defined in Arbiter.Hasql.HasqlDb Methods getSchema :: HasqlDb registry m SchemaName # | |
| type Handler (HasqlDb registry m) jobs result Source # | |
Defined in Arbiter.Hasql.HasqlDb | |
data HasqlEnv (registry :: JobPayloadRegistry) Source #
Schema name and connection pool for HasqlDb.
Constructors
| HasqlEnv | |
Fields
| |
runHasqlDb :: forall (registry :: JobPayloadRegistry) m a. HasqlEnv registry -> HasqlDb registry m a -> m a Source #
Run a HasqlDb action with a HasqlEnv.
Arguments
| :: forall (registry :: JobPayloadRegistry) m a. Connection | |
| -> SchemaName | 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
Arguments
| :: forall (registry :: JobPayloadRegistry) m. MonadIO m | |
| => Proxy registry | |
| -> ByteString | PostgreSQL connection string |
| -> SchemaName | Schema name |
| -> 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. MonadIO m | |
| => Proxy registry | |
| -> ByteString | PostgreSQL connection string |
| -> SchemaName | Schema name |
| -> PoolConfig | |
| -> m (HasqlEnv registry) |
Create a HasqlEnv with custom pool configuration.
createHasqlEnvWithPool Source #
Arguments
| :: forall (registry :: JobPayloadRegistry). Proxy registry | |
| -> Pool Connection | |
| -> SchemaName | Schema name |
| -> HasqlEnv registry |
Create a HasqlEnv with a user-provided connection pool.
Hasql Settings
hasqlSettings :: ByteString -> HasqlSettings Source #
Re-exported from Arbiter.Hasql.Compat.
Exceptions
newtype HasqlConnectionError Source #
Thrown when a hasql connection cannot be acquired from the pool.
Constructors
| HasqlConnectionError String |
Instances
| Exception HasqlConnectionError Source # | |
Defined in Arbiter.Hasql.HasqlDb | |
| Show HasqlConnectionError Source # | |
Defined in Arbiter.Hasql.HasqlDb Methods showsPrec :: Int -> HasqlConnectionError -> ShowS # show :: HasqlConnectionError -> String # showList :: [HasqlConnectionError] -> ShowS # | |