Safe Haskell | None |
---|---|
Language | Haskell2010 |
Synopsis
- selectList :: forall record backend m. ( MonadIO m, PersistQueryRead backend, PersistRecordBackend record backend) => [ Filter record] -> [ SelectOpt record] -> ReaderT backend m [ Entity record]
-
class
(
PersistCore
backend,
PersistStoreRead
backend) =>
PersistQueryRead
backend
where
- selectSourceRes :: ( PersistRecordBackend record backend, MonadIO m1, MonadIO m2) => [ Filter record] -> [ SelectOpt record] -> ReaderT backend m1 ( Acquire ( ConduitM () ( Entity record) m2 ()))
- selectFirst :: ( MonadIO m, PersistRecordBackend record backend) => [ Filter record] -> [ SelectOpt record] -> ReaderT backend m ( Maybe ( Entity record))
- selectKeysRes :: ( MonadIO m1, MonadIO m2, PersistRecordBackend record backend) => [ Filter record] -> [ SelectOpt record] -> ReaderT backend m1 ( Acquire ( ConduitM () ( Key record) m2 ()))
- count :: ( MonadIO m, PersistRecordBackend record backend) => [ Filter record] -> ReaderT backend m Int
- exists :: ( MonadIO m, PersistRecordBackend record backend) => [ Filter record] -> ReaderT backend m Bool
-
class
(
PersistQueryRead
backend,
PersistStoreWrite
backend) =>
PersistQueryWrite
backend
where
- updateWhere :: ( MonadIO m, PersistRecordBackend record backend) => [ Filter record] -> [ Update record] -> ReaderT backend m ()
- deleteWhere :: ( MonadIO m, PersistRecordBackend record backend) => [ Filter record] -> ReaderT backend m ()
- selectSource :: forall record backend m. ( PersistQueryRead backend, MonadResource m, PersistRecordBackend record backend, MonadReader backend m) => [ Filter record] -> [ SelectOpt record] -> ConduitM () ( Entity record) m ()
- selectKeys :: forall record backend m. ( PersistQueryRead backend, MonadResource m, PersistRecordBackend record backend, MonadReader backend m) => [ Filter record] -> [ SelectOpt record] -> ConduitM () ( Key record) m ()
- selectKeysList :: forall record backend m. ( MonadIO m, PersistQueryRead backend, PersistRecordBackend record backend) => [ Filter record] -> [ SelectOpt record] -> ReaderT backend m [ Key record]
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
[
corresponding to the filters and options
provided.
Entity
record]
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.
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
class ( PersistQueryRead backend, PersistStoreWrite backend) => PersistQueryWrite backend where Source #
Backends supporting conditional write operations
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
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.