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.