Copyright | 2015 Kei Hibino |
---|---|
License | BSD3 |
Maintainer | [email protected] |
Stability | experimental |
Portability | unknown |
Safe Haskell | None |
Language | Haskell2010 |
Database.Relational.Query.Arrow
Description
This module defines arrow version combinators which improves type-safty on building queries. Referencing the local projections may cause to break the result query. It is possible to controls injection of previous local projections by restricting domain type of arrow. This idea is imported from Opaleye:
- https://github.com/tomjaguarpaw/haskell-opaleye
- https://github.com/khibino/haskell-relational-record/issues/19
Importing this module instead of Database.Relational.Query enables to build query using arrow combinators.
- module Database.Relational.Query
- all' :: MonadQuery m => QueryA m () ()
- distinct :: MonadQuery m => QueryA m () ()
- query :: (MonadQualify ConfigureQuery m, MonadQuery m) => Relation () r -> QueryA m () (Projection Flat r)
- queryMaybe :: (MonadQualify ConfigureQuery m, MonadQuery m) => Relation () r -> QueryA m () (Projection Flat (Maybe r))
- query' :: (MonadQualify ConfigureQuery m, MonadQuery m) => Relation p r -> QueryA m () (PlaceHolders p, Projection Flat r)
- queryMaybe' :: (MonadQualify ConfigureQuery m, MonadQuery m) => Relation p r -> QueryA m () (PlaceHolders p, Projection Flat (Maybe r))
- queryList :: MonadQualify ConfigureQuery m => (Projection c a -> Relation () r) -> QueryA m (Projection c a) (ListProjection (Projection c) r)
- queryList' :: MonadQualify ConfigureQuery m => (Projection c a -> Relation p r) -> QueryA m (Projection c a) (PlaceHolders p, ListProjection (Projection c) r)
- queryExists :: MonadQualify ConfigureQuery m => (Projection c a -> Relation () r) -> QueryA m (Projection c a) (ListProjection (Projection Exists) r)
- queryExists' :: MonadQualify ConfigureQuery m => (Projection c a -> Relation p r) -> QueryA m (Projection c a) (PlaceHolders p, ListProjection (Projection Exists) r)
- queryListU :: MonadQualify ConfigureQuery m => Relation () r -> QueryA m () (ListProjection (Projection c) r)
- queryListU' :: MonadQualify ConfigureQuery m => Relation p r -> QueryA m () (PlaceHolders p, ListProjection (Projection c) r)
- queryScalar :: (MonadQualify ConfigureQuery m, ScalarDegree r) => (Projection c a -> UniqueRelation () c r) -> QueryA m (Projection c a) (Projection c (Maybe r))
- queryScalar' :: (MonadQualify ConfigureQuery m, ScalarDegree r) => (Projection c a -> UniqueRelation p c r) -> QueryA m (Projection c a) (PlaceHolders p, Projection c (Maybe r))
- queryScalarU :: (MonadQualify ConfigureQuery m, ScalarDegree r) => UniqueRelation () c r -> QueryA m () (Projection c (Maybe r))
- queryScalarU' :: (MonadQualify ConfigureQuery m, ScalarDegree r) => UniqueRelation p c r -> QueryA m () (PlaceHolders p, Projection c (Maybe r))
- uniqueQuery' :: UniqueRelation p c r -> QueryA QueryUnique () (PlaceHolders p, Projection c r)
- uniqueQueryMaybe' :: UniqueRelation p c r -> QueryA QueryUnique () (PlaceHolders p, Projection c (Maybe r))
- on :: MonadQuery m => QueryA m (Projection Flat (Maybe Bool)) ()
- wheres :: MonadRestrict Flat m => QueryA m (Projection Flat (Maybe Bool)) ()
- having :: MonadRestrict Aggregated m => QueryA m (Projection Aggregated (Maybe Bool)) ()
- groupBy :: MonadAggregate m => QueryA m (Projection Flat r) (Projection Aggregated r)
- placeholder :: (PersistableWidth t, SqlProjectable p, Monad m) => QueryA m (QueryA m (p t) a) (PlaceHolders t, a)
- relation :: QuerySimple () (Projection Flat r) -> Relation () r
- relation' :: QuerySimple () (PlaceHolders p, Projection Flat r) -> Relation p r
- aggregateRelation :: QueryAggregate () (Projection Aggregated r) -> Relation () r
- aggregateRelation' :: QueryAggregate () (PlaceHolders p, Projection Aggregated r) -> Relation p r
- uniqueRelation' :: QueryUnique () (PlaceHolders p, Projection c r) -> UniqueRelation p c r
- groupBy' :: MonadAggregate m => QueryA m (AggregateKey (Projection Aggregated r)) (Projection Aggregated r)
- key :: AggregatingSet (Projection Flat r) (Projection Aggregated (Maybe r))
- key' :: AggregatingSet (AggregateKey a) a
- set :: AggregatingSetList (AggregatingSet () a) a
- bkey :: AggregatingPowerSet (Projection Flat r) (Projection Aggregated (Maybe r))
- rollup :: AggregatingPowerSet () a -> AggregateKey a
- cube :: AggregatingPowerSet () a -> AggregateKey a
- groupingSets :: AggregatingSetList () a -> AggregateKey a
- orderBy :: Monad m => Order -> Orderings c m (Projection c t) ()
- asc :: Monad m => Orderings c m (Projection c t) ()
- desc :: Monad m => Orderings c m (Projection c t) ()
- partitionBy :: Window c (Projection c r) ()
- over :: SqlProjectable (Projection c) => Projection OverWindow a -> Window c () () -> Projection c a
- assign :: Monad m => AssignTarget r v -> Assignings r m (Projection Flat v) ()
- derivedUpdate' :: TableDerivable r => Config -> AssignStatement r (PlaceHolders p) -> Update p
- derivedUpdate :: TableDerivable r => AssignStatement r (PlaceHolders p) -> Update p
- derivedDelete' :: TableDerivable r => Config -> RestrictedStatement r (PlaceHolders p) -> Delete p
- derivedDelete :: TableDerivable r => RestrictedStatement r (PlaceHolders p) -> Delete p
- data QueryA m a b
- type QuerySimple = QueryA QuerySimple
- type QueryAggregate = QueryA QueryAggregate
- type QueryUnique = QueryA QueryUnique
- type AggregatingSet = QueryA AggregatingSet
- type AggregatingSetList = QueryA AggregatingSetList
- type AggregatingPowerSet = QueryA AggregatingPowerSet
- type Orderings c m = QueryA (Orderings c m)
- type Window c = QueryA (Window c)
- type Assignings r m = QueryA (Assignings r m)
- type AssignStatement r a = Assignings r Restrict (Projection Flat r) a
- type RestrictedStatement r a = QueryA Restrict (Projection Flat r) a
Documentation
module Database.Relational.Query
all' :: MonadQuery m => QueryA m () () Source
Same as all'
. Arrow version.
distinct :: MonadQuery m => QueryA m () () Source
Same as distinct
. Arrow version.
query :: (MonadQualify ConfigureQuery m, MonadQuery m) => Relation () r -> QueryA m () (Projection Flat r) Source
Same as query
. Arrow version.
The result arrow is not injected by local projections.
queryMaybe :: (MonadQualify ConfigureQuery m, MonadQuery m) => Relation () r -> QueryA m () (Projection Flat (Maybe r)) Source
Same as queryMaybe
. Arrow version.
The result arrow is not injected by any local projections.
query' :: (MonadQualify ConfigureQuery m, MonadQuery m) => Relation p r -> QueryA m () (PlaceHolders p, Projection Flat r) Source
Same as query'
. Arrow version.
The result arrow is not injected by any local projections.
queryMaybe' :: (MonadQualify ConfigureQuery m, MonadQuery m) => Relation p r -> QueryA m () (PlaceHolders p, Projection Flat (Maybe r)) Source
Same as queryMaybe'
. Arrow version.
The result arrow is not injected by any local projections.
queryList :: MonadQualify ConfigureQuery m => (Projection c a -> Relation () r) -> QueryA m (Projection c a) (ListProjection (Projection c) r) Source
Same as queryList
. Arrow version.
The result arrow is designed to be injected by local projections.
queryList' :: MonadQualify ConfigureQuery m => (Projection c a -> Relation p r) -> QueryA m (Projection c a) (PlaceHolders p, ListProjection (Projection c) r) Source
Same as queryList'
. Arrow version.
The result arrow is designed to be injected by local projections.
queryExists :: MonadQualify ConfigureQuery m => (Projection c a -> Relation () r) -> QueryA m (Projection c a) (ListProjection (Projection Exists) r) Source
queryExists' :: MonadQualify ConfigureQuery m => (Projection c a -> Relation p r) -> QueryA m (Projection c a) (PlaceHolders p, ListProjection (Projection Exists) r) Source
Same as queryList'
to pass this result to exists
operator. Arrow version.
The result arrow is designed to be injected by local projections.
queryListU :: MonadQualify ConfigureQuery m => Relation () r -> QueryA m () (ListProjection (Projection c) r) Source
Same as queryList
. Arrow version.
Useful for no reference cases to local projections.
queryListU' :: MonadQualify ConfigureQuery m => Relation p r -> QueryA m () (PlaceHolders p, ListProjection (Projection c) r) Source
Same as queryList'
. Arrow version.
Useful for no reference cases to local projections.
queryScalar :: (MonadQualify ConfigureQuery m, ScalarDegree r) => (Projection c a -> UniqueRelation () c r) -> QueryA m (Projection c a) (Projection c (Maybe r)) Source
Same as queryScalar
. Arrow version.
The result arrow is designed to be injected by any local projection.
queryScalar' :: (MonadQualify ConfigureQuery m, ScalarDegree r) => (Projection c a -> UniqueRelation p c r) -> QueryA m (Projection c a) (PlaceHolders p, Projection c (Maybe r)) Source
Same as queryScalar'
. Arrow version.
The result arrow is designed to be injected by any local projection.
queryScalarU :: (MonadQualify ConfigureQuery m, ScalarDegree r) => UniqueRelation () c r -> QueryA m () (Projection c (Maybe r)) Source
Same as queryScalar
. Arrow version.
Useful for no reference cases to local projections.
queryScalarU' :: (MonadQualify ConfigureQuery m, ScalarDegree r) => UniqueRelation p c r -> QueryA m () (PlaceHolders p, Projection c (Maybe r)) Source
Same as queryScalar'
. Arrow version.
Useful for no reference cases to local projections.
uniqueQuery' :: UniqueRelation p c r -> QueryA QueryUnique () (PlaceHolders p, Projection c r) Source
Same as uniqueQuery'
. Arrow version.
The result arrow is not injected by local projections.
uniqueQueryMaybe' :: UniqueRelation p c r -> QueryA QueryUnique () (PlaceHolders p, Projection c (Maybe r)) Source
Same as uniqueQueryMaybe'
. Arrow version.
The result arrow is not injected by local projections.
on :: MonadQuery m => QueryA m (Projection Flat (Maybe Bool)) () Source
Same as on
. Arrow version.
The result arrow is designed to be injected by local conditional flat-projections.
wheres :: MonadRestrict Flat m => QueryA m (Projection Flat (Maybe Bool)) () Source
Same as wheres
. Arrow version.
The result arrow is designed to be injected by local conditional flat-projections.
having :: MonadRestrict Aggregated m => QueryA m (Projection Aggregated (Maybe Bool)) () Source
Same as having
. Arrow version.
The result arrow is designed to be injected by local conditional aggregated-projections.
groupBy :: MonadAggregate m => QueryA m (Projection Flat r) (Projection Aggregated r) Source
Same as groupBy
. Arrow version.
The result arrow is designed to be injected by local flat-projections.
placeholder :: (PersistableWidth t, SqlProjectable p, Monad m) => QueryA m (QueryA m (p t) a) (PlaceHolders t, a) Source
Same as placeholder
. Arrow version.
The result arrow is designed to be injected by locally built arrow using placeholders.
relation :: QuerySimple () (Projection Flat r) -> Relation () r Source
Same as relation
.
Finalize query-building arrow instead of query-building monad.
relation' :: QuerySimple () (PlaceHolders p, Projection Flat r) -> Relation p r Source
Same as relation'
.
Finalize query-building arrow instead of query-building monad.
aggregateRelation :: QueryAggregate () (Projection Aggregated r) -> Relation () r Source
Same as aggregateRelation
.
Finalize query-building arrow instead of query-building monad.
aggregateRelation' :: QueryAggregate () (PlaceHolders p, Projection Aggregated r) -> Relation p r Source
Same as aggregateRelation'
.
Finalize query-building arrow instead of query-building monad.
uniqueRelation' :: QueryUnique () (PlaceHolders p, Projection c r) -> UniqueRelation p c r Source
Same as uniqueRelation'
.
Finalize query-building arrow instead of query-building monad.
groupBy' :: MonadAggregate m => QueryA m (AggregateKey (Projection Aggregated r)) (Projection Aggregated r) Source
Same as groupBy'
.
This arrow is designed to be injected by local AggregateKey
.
key :: AggregatingSet (Projection Flat r) (Projection Aggregated (Maybe r)) Source
Same as key
.
This arrow is designed to be injected by local flat-projections.
key' :: AggregatingSet (AggregateKey a) a Source
Same as key'
.
This arrow is designed to be injected by local AggregteKey
.
set :: AggregatingSetList (AggregatingSet () a) a Source
Same as set
.
This arrow is designed to be injected by locally built AggregtingSet
arrow.
bkey :: AggregatingPowerSet (Projection Flat r) (Projection Aggregated (Maybe r)) Source
Same as bkey
.
This arrow is designed to be injected by local flat-projections.
rollup :: AggregatingPowerSet () a -> AggregateKey a Source
Same as rollup
.
Finalize locally built AggregatingPowerSet
.
cube :: AggregatingPowerSet () a -> AggregateKey a Source
Same as cube
.
Finalize locally built AggregatingPowerSet
.
groupingSets :: AggregatingSetList () a -> AggregateKey a Source
Same as groupingSets
.
Finalize locally built AggregatingSetList
.
orderBy :: Monad m => Order -> Orderings c m (Projection c t) () Source
Same as orderBy
.
The result arrow is designed to be injected by local projections.
asc :: Monad m => Orderings c m (Projection c t) () Source
Same as asc
.
The result arrow is designed to be injected by local projections.
desc :: Monad m => Orderings c m (Projection c t) () Source
Same as desc
.
The result arrow is designed to be injected by local projections.
partitionBy :: Window c (Projection c r) () Source
Same as partitionBy
.
The result arrow is designed to be injected by local projections.
over :: SqlProjectable (Projection c) => Projection OverWindow a -> Window c () () -> Projection c a infix 8 Source
assign :: Monad m => AssignTarget r v -> Assignings r m (Projection Flat v) () Source
Make AssignTarget
into arrow which is designed to be
injected by local projection assignees.
derivedUpdate' :: TableDerivable r => Config -> AssignStatement r (PlaceHolders p) -> Update p Source
Same as derivedUpdate'
.
Make Update
from assigning statement arrow using configuration.
derivedUpdate :: TableDerivable r => AssignStatement r (PlaceHolders p) -> Update p Source
Same as derivedUpdate
.
Make Update
from assigning statement arrow.
derivedDelete' :: TableDerivable r => Config -> RestrictedStatement r (PlaceHolders p) -> Delete p Source
Same as derivedDelete'
.
Make Update
from restrict statement arrow using configuration.
derivedDelete :: TableDerivable r => RestrictedStatement r (PlaceHolders p) -> Delete p Source
Same as derivedDelete
.
Make Update
from restrict statement arrow.
Arrow to build queries.
type QuerySimple = QueryA QuerySimple Source
Arrow type corresponding to QuerySimple
type QueryAggregate = QueryA QueryAggregate Source
Arrow type corresponding to QueryAggregate
type QueryUnique = QueryA QueryUnique Source
Arrow type corresponding to QueryUnique
type AggregatingSet = QueryA AggregatingSet Source
Arrow type corresponding to AggregatingSet
type AggregatingSetList = QueryA AggregatingSetList Source
Arrow type corresponding to AggregatingSetList
type AggregatingPowerSet = QueryA AggregatingPowerSet Source
Arrow type corresponding to AggregatingPowerSet
type Assignings r m = QueryA (Assignings r m) Source
Arrow type corresponding to Assignings
type AssignStatement r a = Assignings r Restrict (Projection Flat r) a Source
Arrow type corresponding to AssignStatement
type RestrictedStatement r a = QueryA Restrict (Projection Flat r) a Source
Arrow type corresponding to RestrictedStatement