Copyright | 2015-2018 Kei Hibino |
---|---|
License | BSD3 |
Maintainer | ex8k.hibino@gmail.com |
Stability | experimental |
Portability | unknown |
Safe Haskell | None |
Language | Haskell2010 |
Database.Relational.Arrow
Contents
Description
This module defines arrow version combinators which improves type-safty on building queries. Referencing the local projected records may cause to break the result query. It is possible to controls injection of previous local projected records 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
- all' :: MonadQuery m => QueryA m () ()
- distinct :: MonadQuery m => QueryA m () ()
- query :: (MonadQualify ConfigureQuery m, MonadQuery m) => Relation () r -> QueryA m () (Record Flat r)
- queryMaybe :: (MonadQualify ConfigureQuery m, MonadQuery m) => Relation () r -> QueryA m () (Record Flat (Maybe r))
- query' :: (MonadQualify ConfigureQuery m, MonadQuery m) => Relation p r -> QueryA m () (PlaceHolders p, Record Flat r)
- queryMaybe' :: (MonadQualify ConfigureQuery m, MonadQuery m) => Relation p r -> QueryA m () (PlaceHolders p, Record Flat (Maybe r))
- queryList :: MonadQualify ConfigureQuery m => (Record c a -> Relation () r) -> QueryA m (Record c a) (RecordList (Record c) r)
- queryList' :: MonadQualify ConfigureQuery m => (Record c a -> Relation p r) -> QueryA m (Record c a) (PlaceHolders p, RecordList (Record c) r)
- queryExists :: MonadQualify ConfigureQuery m => (Record c a -> Relation () r) -> QueryA m (Record c a) (RecordList (Record Exists) r)
- queryExists' :: MonadQualify ConfigureQuery m => (Record c a -> Relation p r) -> QueryA m (Record c a) (PlaceHolders p, RecordList (Record Exists) r)
- queryListU :: MonadQualify ConfigureQuery m => Relation () r -> QueryA m () (RecordList (Record c) r)
- queryListU' :: MonadQualify ConfigureQuery m => Relation p r -> QueryA m () (PlaceHolders p, RecordList (Record c) r)
- queryScalar :: (MonadQualify ConfigureQuery m, ScalarDegree r) => (Record c a -> UniqueRelation () c r) -> QueryA m (Record c a) (Record c (Maybe r))
- queryScalar' :: (MonadQualify ConfigureQuery m, ScalarDegree r) => (Record c a -> UniqueRelation p c r) -> QueryA m (Record c a) (PlaceHolders p, Record c (Maybe r))
- queryScalarU :: (MonadQualify ConfigureQuery m, ScalarDegree r) => UniqueRelation () c r -> QueryA m () (Record c (Maybe r))
- queryScalarU' :: (MonadQualify ConfigureQuery m, ScalarDegree r) => UniqueRelation p c r -> QueryA m () (PlaceHolders p, Record c (Maybe r))
- uniqueQuery' :: UniqueRelation p c r -> QueryA QueryUnique () (PlaceHolders p, Record c r)
- uniqueQueryMaybe' :: UniqueRelation p c r -> QueryA QueryUnique () (PlaceHolders p, Record c (Maybe r))
- on :: MonadQuery m => QueryA m (Predicate Flat) ()
- wheres :: MonadRestrict Flat m => QueryA m (Predicate Flat) ()
- having :: MonadRestrict Aggregated m => QueryA m (Predicate Aggregated) ()
- groupBy :: MonadAggregate m => QueryA m (Record Flat r) (Record Aggregated r)
- placeholder :: (PersistableWidth t, SqlContext c, Monad m) => QueryA m (QueryA m (Record c t) a) (PlaceHolders t, a)
- relation :: QuerySimple () (Record Flat r) -> Relation () r
- relation' :: QuerySimple () (PlaceHolders p, Record Flat r) -> Relation p r
- aggregateRelation :: QueryAggregate () (Record Aggregated r) -> Relation () r
- aggregateRelation' :: QueryAggregate () (PlaceHolders p, Record Aggregated r) -> Relation p r
- uniqueRelation' :: QueryUnique () (PlaceHolders p, Record c r) -> UniqueRelation p c r
- groupBy' :: MonadAggregate m => QueryA m (AggregateKey (Record Aggregated r)) (Record Aggregated r)
- key :: AggregatingSet (Record Flat r) (Record Aggregated (Maybe r))
- key' :: AggregatingSet (AggregateKey a) a
- set :: AggregatingSetList (AggregatingSet () a) a
- bkey :: AggregatingPowerSet (Record Flat r) (Record Aggregated (Maybe r))
- rollup :: AggregatingPowerSet () a -> AggregateKey a
- cube :: AggregatingPowerSet () a -> AggregateKey a
- groupingSets :: AggregatingSetList () a -> AggregateKey a
- orderBy' :: Monad m => Order -> Nulls -> Orderings c m (Record c t) ()
- orderBy :: Monad m => Order -> Orderings c m (Record c t) ()
- asc :: Monad m => Orderings c m (Record c t) ()
- desc :: Monad m => Orderings c m (Record c t) ()
- partitionBy :: Window c (Record c r) ()
- over :: SqlContext c => Record OverWindow a -> Window c () () -> Record c a
- assign :: Monad m => AssignTarget r v -> Assignings r m (Record Flat v) ()
- update' :: TableDerivable r => Config -> AssignStatement r (PlaceHolders p) -> Update p
- update :: TableDerivable r => AssignStatement r (PlaceHolders p) -> Update p
- updateNoPH :: TableDerivable r => AssignStatement r () -> Update ()
- updateAllColumn' :: (PersistableWidth r, TableDerivable r) => Config -> RestrictedStatement r (PlaceHolders p) -> Update (r, p)
- updateAllColumn :: (PersistableWidth r, TableDerivable r) => RestrictedStatement r (PlaceHolders p) -> Update (r, p)
- updateAllColumnNoPH :: (PersistableWidth r, TableDerivable r) => RestrictedStatement r () -> Update r
- insertValue' :: TableDerivable r => Config -> Register r (PlaceHolders p) -> Insert p
- insertValue :: TableDerivable r => Register r (PlaceHolders p) -> Insert p
- insertValueNoPH :: TableDerivable r => Register r () -> Insert ()
- delete' :: TableDerivable r => Config -> RestrictedStatement r (PlaceHolders p) -> Delete p
- delete :: TableDerivable r => RestrictedStatement r (PlaceHolders p) -> Delete p
- deleteNoPH :: TableDerivable r => RestrictedStatement r () -> Delete ()
- 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 (Record Flat r) a
- type Register r a = QueryA (Register r) () a
- type RestrictedStatement r a = QueryA Restrict (Record Flat r) a
- derivedUpdate' :: TableDerivable r => Config -> AssignStatement r (PlaceHolders p) -> Update p
- derivedUpdate :: TableDerivable r => AssignStatement r (PlaceHolders p) -> Update p
- derivedInsertValue' :: TableDerivable r => Config -> Register r (PlaceHolders p) -> Insert p
- derivedInsertValue :: TableDerivable r => Register r (PlaceHolders p) -> Insert p
- derivedDelete' :: TableDerivable r => Config -> RestrictedStatement r (PlaceHolders p) -> Delete p
- derivedDelete :: TableDerivable r => RestrictedStatement r (PlaceHolders p) -> Delete p
Documentation
module Database.Relational
query :: (MonadQualify ConfigureQuery m, MonadQuery m) => Relation () r -> QueryA m () (Record Flat r) Source #
Same as query
. Arrow version.
The result arrow is not injected by local projected records.
queryMaybe :: (MonadQualify ConfigureQuery m, MonadQuery m) => Relation () r -> QueryA m () (Record Flat (Maybe r)) Source #
Same as queryMaybe
. Arrow version.
The result arrow is not injected by any local projected records.
query' :: (MonadQualify ConfigureQuery m, MonadQuery m) => Relation p r -> QueryA m () (PlaceHolders p, Record Flat r) Source #
Same as query'
. Arrow version.
The result arrow is not injected by any local projected records.
queryMaybe' :: (MonadQualify ConfigureQuery m, MonadQuery m) => Relation p r -> QueryA m () (PlaceHolders p, Record Flat (Maybe r)) Source #
Same as queryMaybe'
. Arrow version.
The result arrow is not injected by any local projected records.
queryList :: MonadQualify ConfigureQuery m => (Record c a -> Relation () r) -> QueryA m (Record c a) (RecordList (Record c) r) Source #
Same as queryList
. Arrow version.
The result arrow is designed to be injected by local projected records.
queryList' :: MonadQualify ConfigureQuery m => (Record c a -> Relation p r) -> QueryA m (Record c a) (PlaceHolders p, RecordList (Record c) r) Source #
Same as queryList'
. Arrow version.
The result arrow is designed to be injected by local projected records.
queryExists :: MonadQualify ConfigureQuery m => (Record c a -> Relation () r) -> QueryA m (Record c a) (RecordList (Record Exists) r) Source #
queryExists' :: MonadQualify ConfigureQuery m => (Record c a -> Relation p r) -> QueryA m (Record c a) (PlaceHolders p, RecordList (Record 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 projected records.
queryListU :: MonadQualify ConfigureQuery m => Relation () r -> QueryA m () (RecordList (Record c) r) Source #
Same as queryList
. Arrow version.
Useful for no reference cases to local projected records.
queryListU' :: MonadQualify ConfigureQuery m => Relation p r -> QueryA m () (PlaceHolders p, RecordList (Record c) r) Source #
Same as queryList'
. Arrow version.
Useful for no reference cases to local projected records.
queryScalar :: (MonadQualify ConfigureQuery m, ScalarDegree r) => (Record c a -> UniqueRelation () c r) -> QueryA m (Record c a) (Record c (Maybe r)) Source #
Same as queryScalar
. Arrow version.
The result arrow is designed to be injected by any local projected record.
queryScalar' :: (MonadQualify ConfigureQuery m, ScalarDegree r) => (Record c a -> UniqueRelation p c r) -> QueryA m (Record c a) (PlaceHolders p, Record c (Maybe r)) Source #
Same as queryScalar'
. Arrow version.
The result arrow is designed to be injected by any local projected record.
queryScalarU :: (MonadQualify ConfigureQuery m, ScalarDegree r) => UniqueRelation () c r -> QueryA m () (Record c (Maybe r)) Source #
Same as queryScalar
. Arrow version.
Useful for no reference cases to local projected records.
queryScalarU' :: (MonadQualify ConfigureQuery m, ScalarDegree r) => UniqueRelation p c r -> QueryA m () (PlaceHolders p, Record c (Maybe r)) Source #
Same as queryScalar'
. Arrow version.
Useful for no reference cases to local projected records.
uniqueQuery' :: UniqueRelation p c r -> QueryA QueryUnique () (PlaceHolders p, Record c r) Source #
Same as uniqueQuery'
. Arrow version.
The result arrow is not injected by local projected records.
uniqueQueryMaybe' :: UniqueRelation p c r -> QueryA QueryUnique () (PlaceHolders p, Record c (Maybe r)) Source #
Same as uniqueQueryMaybe'
. Arrow version.
The result arrow is not injected by local projected records.
on :: MonadQuery m => QueryA m (Predicate Flat) () Source #
Same as on
. Arrow version.
The result arrow is designed to be injected by local conditional flat-records.
wheres :: MonadRestrict Flat m => QueryA m (Predicate Flat) () Source #
Same as wheres
. Arrow version.
The result arrow is designed to be injected by local conditional flat-records.
having :: MonadRestrict Aggregated m => QueryA m (Predicate Aggregated) () Source #
Same as having
. Arrow version.
The result arrow is designed to be injected by local conditional aggregated-records.
groupBy :: MonadAggregate m => QueryA m (Record Flat r) (Record Aggregated r) Source #
Same as groupBy
. Arrow version.
The result arrow is designed to be injected by local flat-records.
placeholder :: (PersistableWidth t, SqlContext c, Monad m) => QueryA m (QueryA m (Record c 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 () (Record Flat r) -> Relation () r Source #
Same as relation
.
Finalize query-building arrow instead of query-building monad.
relation' :: QuerySimple () (PlaceHolders p, Record Flat r) -> Relation p r Source #
Same as relation'
.
Finalize query-building arrow instead of query-building monad.
aggregateRelation :: QueryAggregate () (Record Aggregated r) -> Relation () r Source #
Same as aggregateRelation
.
Finalize query-building arrow instead of query-building monad.
aggregateRelation' :: QueryAggregate () (PlaceHolders p, Record Aggregated r) -> Relation p r Source #
Same as aggregateRelation'
.
Finalize query-building arrow instead of query-building monad.
uniqueRelation' :: QueryUnique () (PlaceHolders p, Record 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 (Record Aggregated r)) (Record Aggregated r) Source #
Same as groupBy'
.
This arrow is designed to be injected by local AggregateKey
.
key :: AggregatingSet (Record Flat r) (Record Aggregated (Maybe r)) Source #
Same as key
.
This arrow is designed to be injected by local flat-records.
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 (Record Flat r) (Record Aggregated (Maybe r)) Source #
Same as bkey
.
This arrow is designed to be injected by local flat-records.
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 -> Nulls -> Orderings c m (Record c t) () Source #
Same as orderBy'
.
The result arrow is designed to be injected by local projected records.
orderBy :: Monad m => Order -> Orderings c m (Record c t) () Source #
Same as orderBy
.
The result arrow is designed to be injected by local projected records.
asc :: Monad m => Orderings c m (Record c t) () Source #
Same as asc
.
The result arrow is designed to be injected by local projected records.
desc :: Monad m => Orderings c m (Record c t) () Source #
Same as desc
.
The result arrow is designed to be injected by local projected records.
partitionBy :: Window c (Record c r) () Source #
Same as partitionBy
.
The result arrow is designed to be injected by local projected records.
over :: SqlContext c => Record OverWindow a -> Window c () () -> Record c a infix 8 Source #
assign :: Monad m => AssignTarget r v -> Assignings r m (Record Flat v) () Source #
Make AssignTarget
into arrow which is designed to be
injected by assignees of local projected record.
update' :: TableDerivable r => Config -> AssignStatement r (PlaceHolders p) -> Update p Source #
update :: TableDerivable r => AssignStatement r (PlaceHolders p) -> Update p Source #
updateNoPH :: TableDerivable r => AssignStatement r () -> Update () Source #
Same as updateNoPH
.
Make Update
from assigning statement arrow.
updateAllColumn' :: (PersistableWidth r, TableDerivable r) => Config -> RestrictedStatement r (PlaceHolders p) -> Update (r, p) Source #
Same as updateAllColumn'
.
Make Update
from restrected statement arrow.
updateAllColumn :: (PersistableWidth r, TableDerivable r) => RestrictedStatement r (PlaceHolders p) -> Update (r, p) Source #
Same as updateAllColumn
.
Make Update
from restrected statement arrow.
updateAllColumnNoPH :: (PersistableWidth r, TableDerivable r) => RestrictedStatement r () -> Update r Source #
Same as updateAllColumnNoPH
.
Make Update
from restrected statement arrow.
insertValue' :: TableDerivable r => Config -> Register r (PlaceHolders p) -> Insert p Source #
Same as insertValue'
.
Make Insert
from register arrow using configuration.
insertValue :: TableDerivable r => Register r (PlaceHolders p) -> Insert p Source #
Same as insertValue
.
Make Insert
from register arrow.
insertValueNoPH :: TableDerivable r => Register r () -> Insert () Source #
Same as insertValueNoPH
.
Make Insert
from register arrow.
delete' :: TableDerivable r => Config -> RestrictedStatement r (PlaceHolders p) -> Delete p Source #
delete :: TableDerivable r => RestrictedStatement r (PlaceHolders p) -> Delete p Source #
deleteNoPH :: TableDerivable r => RestrictedStatement r () -> Delete () Source #
Same as deleteNoPH
.
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 (Record Flat r) a Source #
Arrow type corresponding to AssignStatement
type RestrictedStatement r a = QueryA Restrict (Record Flat r) a Source #
Arrow type corresponding to RestrictedStatement
Deprecated
derivedUpdate' :: TableDerivable r => Config -> AssignStatement r (PlaceHolders p) -> Update p Source #
derivedUpdate :: TableDerivable r => AssignStatement r (PlaceHolders p) -> Update p Source #
Deprecated: use update
instead of this.
Deprecated.
derivedInsertValue' :: TableDerivable r => Config -> Register r (PlaceHolders p) -> Insert p Source #
Deprecated: use insertValue'
instead of this.
Deprecated.
derivedInsertValue :: TableDerivable r => Register r (PlaceHolders p) -> Insert p Source #
Deprecated: use insertValue
instead of this.
Deprecated.
derivedDelete' :: TableDerivable r => Config -> RestrictedStatement r (PlaceHolders p) -> Delete p Source #
Deprecated: use derivedDelete'
instead of this.
Deprecated.
derivedDelete :: TableDerivable r => RestrictedStatement r (PlaceHolders p) -> Delete p Source #
Deprecated: use derivedDelete
instead of this.
Deprecated.