| 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 :: k) (m :: Type -> Type) a = HasqlDb {}
- data HasqlEnv (registry :: k) = HasqlEnv {}
- runHasqlDb :: forall {k} (registry :: k) m a. HasqlEnv registry -> HasqlDb registry m a -> m a
- inTransaction :: forall {k} (registry :: k) m a. Connection -> Text -> HasqlDb registry m a -> m a
- createHasqlEnv :: forall (registry :: JobPayloadRegistry) m. (AllQueuesUnique registry, MonadIO m) => Proxy registry -> ByteString -> Text -> m (HasqlEnv registry)
- createHasqlEnvWithConfig :: forall (registry :: JobPayloadRegistry) m. (AllQueuesUnique registry, MonadIO m) => Proxy registry -> ByteString -> Text -> PoolConfig -> m (HasqlEnv registry)
- createHasqlEnvWithPool :: forall (registry :: JobPayloadRegistry). AllQueuesUnique registry => Proxy registry -> Pool Connection -> Text -> HasqlEnv registry
- hasqlSettings :: ByteString -> HasqlSettings
Database Monad
newtype HasqlDb (registry :: k) (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 | |
| type Handler (HasqlDb registry m) jobs result Source # | |
Defined in Arbiter.Hasql.HasqlDb | |
data HasqlEnv (registry :: k) Source #
Environment for HasqlDb operations
Contains both the schema name and the connection pool.
Constructors
| HasqlEnv | |
Fields
| |
runHasqlDb :: forall {k} (registry :: k) m a. HasqlEnv registry -> HasqlDb registry m a -> m a Source #
Run a HasqlDb action with a HasqlEnv.
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
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
hasqlSettings :: ByteString -> HasqlSettings Source #
Re-exported from Arbiter.Hasql.Compat.