freckle-app-1.15.2.0: Haskell application toolkit used at Freckle
Safe HaskellSafe-Inferred
LanguageHaskell2010

Freckle.App.Database

Description

Database access for your App

Synopsis

Running transactions

class (MonadSqlBackend db, MonadUnliftIO m) => MonadSqlTx db m | m -> db where Source #

The constraint MonadSqlTx db m indicates that m is a monadic context that can run db actions, usually as a SQL transaction. Typically, this means that db needs a connection and m can provide one, e.g. from a connection pool.

Methods

runSqlTx :: HasCallStack => db a -> m a Source #

Runs the action in a SQL transaction

Instances

Instances details
(HasSqlPool app, HasStatsClient app, HasTracer app) => MonadSqlTx (SqlPersistT (AppExample app)) (AppExample app) Source # 
Instance details

Defined in Freckle.App.Test

(MonadUnliftIO m, HasSqlPool app, HasStatsClient app, HasTracer app) => MonadSqlTx (ReaderT SqlBackend (AppT app m)) (AppT app m) Source # 
Instance details

Defined in Freckle.App

Methods

runSqlTx :: HasCallStack => ReaderT SqlBackend (AppT app m) a -> AppT app m a Source #

runDB :: (MonadUnliftIO m, MonadTracer m, MonadReader app m, HasSqlPool app, HasStatsClient app, HasCallStack) => SqlPersistT m a -> m a Source #

Run a Database action with connection stats and tracing

This uses OpenTelemetry and MonadTracer. For callstacks in traces to be useful, ensure you have HasCallStack on functions that call this (and functions that call those, for as far as you require to get to a useful source location).

Running queries

data SqlBackend #

A SqlBackend represents a handle or connection to a database. It contains functions and values that allow databases to have more optimized implementations, as well as references that benefit performance and sharing.

Instead of using the SqlBackend constructor directly, use the mkSqlBackend function.

A SqlBackend is *not* thread-safe. You should not assume that a SqlBackend can be shared among threads and run concurrent queries. This *will* result in problems. Instead, you should create a Pool SqlBackend, known as a ConnectionPool, and pass that around in multi-threaded applications.

To run actions in the persistent library, you should use the runSqlConn function. If you're using a multithreaded application, use the runSqlPool function.

Instances

Instances details
HasSqlBackend SqlBackend Source # 
Instance details

Defined in Freckle.App.Database

HasSqlPool SqlPool Source # 
Instance details

Defined in Freckle.App.Database

HasPersistBackend SqlBackend 
Instance details

Defined in Database.Persist.SqlBackend.Internal

Associated Types

type BaseBackend SqlBackend #

IsPersistBackend SqlBackend 
Instance details

Defined in Database.Persist.SqlBackend.Internal

(HasSqlPool app, HasStatsClient app, HasTracer app) => MonadSqlTx (SqlPersistT (AppExample app)) (AppExample app) Source # 
Instance details

Defined in Freckle.App.Test

(MonadUnliftIO m, HasSqlPool app, HasStatsClient app, HasTracer app) => MonadSqlTx (ReaderT SqlBackend (AppT app m)) (AppT app m) Source # 
Instance details

Defined in Freckle.App

Methods

runSqlTx :: HasCallStack => ReaderT SqlBackend (AppT app m) a -> AppT app m a Source #

newtype BackendKey SqlBackend 
Instance details

Defined in Database.Persist.Sql.Orphan.PersistStore

type BaseBackend SqlBackend 
Instance details

Defined in Database.Persist.SqlBackend.Internal

type Rep (BackendKey SqlBackend) 
Instance details

Defined in Database.Persist.Sql.Orphan.PersistStore

type Rep (BackendKey SqlBackend) = D1 ('MetaData "BackendKey" "Database.Persist.Sql.Orphan.PersistStore" "persistent-2.14.6.1-JJEv9x6gcgwI05abu3AZbU" 'True) (C1 ('MetaCons "SqlBackendKey" 'PrefixI 'True) (S1 ('MetaSel ('Just "unSqlBackendKey") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 Int64)))

class HasSqlBackend a where Source #

Instances

Instances details
HasSqlBackend SqlBackend Source # 
Instance details

Defined in Freckle.App.Database

class MonadUnliftIO m => MonadSqlBackend m where Source #

A monadic context in which a SQL backend is available for running database queries

Instances

Instances details
(HasSqlBackend r, MonadUnliftIO m) => MonadSqlBackend (ReaderT r m) Source # 
Instance details

Defined in Freckle.App.Database

Telemetry

class Monad m => MonadTracer (m :: Type -> Type) #

This is generally scoped by Monad stack to do different things

Minimal complete definition

getTracer

Instances

Instances details
HasTracer app => MonadTracer (AppExample app) Source # 
Instance details

Defined in Freckle.App.Test

(Monad m, HasTracer app) => MonadTracer (AppT app m) Source # 
Instance details

Defined in Freckle.App

Methods

getTracer :: AppT app m Tracer #

MonadTracer m => MonadTracer (IdentityT m) 
Instance details

Defined in OpenTelemetry.Trace.Monad

MonadTracer m => MonadTracer (ReaderT r m) 
Instance details

Defined in OpenTelemetry.Trace.Monad

Methods

getTracer :: ReaderT r m Tracer #

class HasStatsClient env Source #

Minimal complete definition

statsClientL

Instances

Instances details
HasStatsClient StatsClient Source # 
Instance details

Defined in Freckle.App.Stats

HasStatsClient site => HasStatsClient (HandlerData child site) Source # 
Instance details

Defined in Freckle.App.Stats

Connection pools

class HasSqlPool app where Source #

Methods

getSqlPool :: app -> SqlPool Source #

Instances

Instances details
HasSqlPool SqlPool Source # 
Instance details

Defined in Freckle.App.Database

HasSqlPool site => HasSqlPool (HandlerData child site) Source # 
Instance details

Defined in Freckle.App.Database

Methods

getSqlPool :: HandlerData child site -> SqlPool Source #

Setup