yesod-persistent-1.6.0.4: Some helpers for using Persistent from Yesod.

Safe HaskellNone
LanguageHaskell98

Yesod.Persist.Core

Description

Defines the core functionality of this package. This package is distinguished from Yesod.Persist in that the latter additionally exports the persistent modules themselves.

Synopsis

Documentation

class Monad (YesodDB site) => YesodPersist site where Source #

Associated Types

type YesodPersistBackend site Source #

Methods

runDB :: YesodDB site a -> HandlerFor site a Source #

Allows you to execute database actions within Yesod Handlers. For databases that support it, code inside the action will run as an atomic transaction.

Example Usage

Expand
userId <- runDB $ do
  userId <- insert $ User "username" "email@example.com"
  insert_ $ UserPreferences userId True
  pure userId

defaultRunDB :: PersistConfig c => (site -> c) -> (site -> PersistConfigPool c) -> PersistConfigBackend c (HandlerFor site) a -> HandlerFor site a Source #

Helper for creating runDB.

Since 1.2.0

class YesodPersist site => YesodPersistRunner site where Source #

Since 1.2.0

Methods

getDBRunner :: HandlerFor site (DBRunner site, HandlerFor site ()) Source #

This function differs from runDB in that it returns a database runner function, as opposed to simply running a single action. This will usually mean that a connection is taken from a pool and then reused for each invocation. This can be useful for creating streaming responses; see runDBSource.

It additionally returns a cleanup function to free the connection. If your code finishes successfully, you must call this cleanup to indicate changes should be committed. Otherwise, for SQL backends at least, a rollback will be used instead.

Since 1.2.0

defaultGetDBRunner :: (IsSqlBackend backend, YesodPersistBackend site ~ backend) => (site -> Pool backend) -> HandlerFor site (DBRunner site, HandlerFor site ()) Source #

Helper for implementing getDBRunner.

Since 1.2.0

newtype DBRunner site Source #

Constructors

DBRunner 

Fields

runDBSource :: YesodPersistRunner site => ConduitT () a (YesodDB site) () -> ConduitT () a (HandlerFor site) () Source #

Like runDB, but transforms a Source. See respondSourceDB for an example, practical use case.

Since 1.2.0

respondSourceDB :: YesodPersistRunner site => ContentType -> ConduitT () (Flush Builder) (YesodDB site) () -> HandlerFor site TypedContent Source #

Extends respondSource to create a streaming database response body.

get404 :: (MonadIO m, PersistStoreRead backend, PersistRecordBackend val backend) => Key val -> ReaderT backend m val Source #

Get the given entity by ID, or return a 404 not found if it doesn't exist.

getBy404 :: (PersistUniqueRead backend, PersistRecordBackend val backend, MonadIO m) => Unique val -> ReaderT backend m (Entity val) Source #

Get the given entity by unique key, or return a 404 not found if it doesn't exist.

insert400 :: (MonadIO m, PersistUniqueWrite backend, PersistRecordBackend val backend) => val -> ReaderT backend m (Key val) Source #

Create a new record in the database, returning an automatically created key, or raise a 400 bad request if a uniqueness constraint is violated.

Since: 1.4.1

insert400_ :: (MonadIO m, PersistUniqueWrite backend, PersistRecordBackend val backend) => val -> ReaderT backend m () Source #

Same as insert400, but doesn’t return a key.

Since: 1.4.1