persistent-2.13.3.5: Type-safe, multi-backend data serialization.
Safe Haskell None
Language Haskell2010

Database.Persist.Class.PersistQuery

Synopsis

Documentation

selectList :: forall record backend m. ( MonadIO m, PersistQueryRead backend, PersistRecordBackend record backend) => [ Filter record] -> [ SelectOpt record] -> ReaderT backend m [ Entity record] Source #

Returns a [ Entity record] corresponding to the filters and options provided.

Filters are constructed using the operators defined in Database.Persist (and re-exported from Database.Persist.Sql ). Let's look at some examples:

usersWithAgeOver40 :: SqlPersistT IO [Entity User]
usersWithAgeOver40 =
    selectList [UserAge >=. 40] []

If you provide multiple values in the list, the conditions are AND ed together.

usersWithAgeBetween30And50 :: SqlPersistT IO [Entity User]
usersWithAgeBetween30And50 =
     selectList
         [ UserAge >=. 30
         , UserAge <=. 50
         ]
         []

The second list contains the SelectOpt for a record. We can select the first ten records with LimitTo

firstTenUsers =
    selectList [] [LimitTo 10]

And we can select the second ten users with OffsetBy .

secondTenUsers =
    selectList [] [LimitTo 10, OffsetBy 10]

Warning that LIMIT/OFFSET is bad for pagination!

With Asc and Desc , we can provide the field we want to sort on. We can provide multiple sort orders - later ones are used to sort records that are equal on the first field.

newestUsers =
    selectList [] [Desc UserCreatedAt, LimitTo 10]

oldestUsers =
    selectList [] [Asc UserCreatedAt, LimitTo 10]

class ( PersistCore backend, PersistStoreRead backend) => PersistQueryRead backend where Source #

Backends supporting conditional read operations.

Methods

selectSourceRes :: ( PersistRecordBackend record backend, MonadIO m1, MonadIO m2) => [ Filter record] -> [ SelectOpt record] -> ReaderT backend m1 ( Acquire ( ConduitM () ( Entity record) m2 ())) Source #

Get all records matching the given criterion in the specified order. Returns also the identifiers.

NOTE: This function returns an Acquire and a ConduitM , which implies that it streams from the database. It does not. Please use selectList to simplify the code. If you want streaming behavior, consider persistent-pagination which efficiently chunks a query into ranges, or investigate a backend-specific streaming solution.

selectFirst :: ( MonadIO m, PersistRecordBackend record backend) => [ Filter record] -> [ SelectOpt record] -> ReaderT backend m ( Maybe ( Entity record)) Source #

Get just the first record for the criterion.

selectKeysRes :: ( MonadIO m1, MonadIO m2, PersistRecordBackend record backend) => [ Filter record] -> [ SelectOpt record] -> ReaderT backend m1 ( Acquire ( ConduitM () ( Key record) m2 ())) Source #

Get the Key s of all records matching the given criterion.

count :: ( MonadIO m, PersistRecordBackend record backend) => [ Filter record] -> ReaderT backend m Int Source #

The total number of records fulfilling the given criterion.

exists :: ( MonadIO m, PersistRecordBackend record backend) => [ Filter record] -> ReaderT backend m Bool Source #

Check if there is at least one record fulfilling the given criterion.

Since: 2.11

Instances

Instances details
PersistQueryRead SqlBackend Source #
Instance details

Defined in Database.Persist.Sql.Orphan.PersistQuery

PersistQueryRead SqlWriteBackend Source #
Instance details

Defined in Database.Persist.Sql.Orphan.PersistQuery

PersistQueryRead SqlReadBackend Source #
Instance details

Defined in Database.Persist.Sql.Orphan.PersistQuery

( HasPersistBackend b, BackendCompatible b s, PersistQueryRead b) => PersistQueryRead ( Compatible b s) Source #
Instance details

Defined in Database.Persist.Compatible.Types

class ( PersistQueryRead backend, PersistStoreWrite backend) => PersistQueryWrite backend where Source #

Backends supporting conditional write operations

Methods

updateWhere :: ( MonadIO m, PersistRecordBackend record backend) => [ Filter record] -> [ Update record] -> ReaderT backend m () Source #

Update individual fields on any record matching the given criterion.

deleteWhere :: ( MonadIO m, PersistRecordBackend record backend) => [ Filter record] -> ReaderT backend m () Source #

Delete all records matching the given criterion.

Instances

Instances details
PersistQueryWrite SqlBackend Source #
Instance details

Defined in Database.Persist.Sql.Orphan.PersistQuery

PersistQueryWrite SqlWriteBackend Source #
Instance details

Defined in Database.Persist.Sql.Orphan.PersistQuery

( HasPersistBackend b, BackendCompatible b s, PersistQueryWrite b) => PersistQueryWrite ( Compatible b s) Source #
Instance details

Defined in Database.Persist.Compatible.Types

Methods

updateWhere :: forall (m :: Type -> Type ) record. ( MonadIO m, PersistRecordBackend record ( Compatible b s)) => [ Filter record] -> [ Update record] -> ReaderT ( Compatible b s) m () Source #

deleteWhere :: forall (m :: Type -> Type ) record. ( MonadIO m, PersistRecordBackend record ( Compatible b s)) => [ Filter record] -> ReaderT ( Compatible b s) m () Source #

selectSource :: forall record backend m. ( PersistQueryRead backend, MonadResource m, PersistRecordBackend record backend, MonadReader backend m) => [ Filter record] -> [ SelectOpt record] -> ConduitM () ( Entity record) m () Source #

Get all records matching the given criterion in the specified order. Returns also the identifiers.

WARNING: This function returns a ConduitM , which implies that it streams the results. It does not stream results on most backends. If you need streaming, see persistent-pagination for a means of chunking results based on indexed ranges.

selectKeys :: forall record backend m. ( PersistQueryRead backend, MonadResource m, PersistRecordBackend record backend, MonadReader backend m) => [ Filter record] -> [ SelectOpt record] -> ConduitM () ( Key record) m () Source #

Get the Key s of all records matching the given criterion.

For an example, see selectList .

selectKeysList :: forall record backend m. ( MonadIO m, PersistQueryRead backend, PersistRecordBackend record backend) => [ Filter record] -> [ SelectOpt record] -> ReaderT backend m [ Key record] Source #

Call selectKeys but return the result as a list.