| Copyright | 2013-2017 Kei Hibino |
|---|---|
| License | BSD3 |
| Maintainer | ex8k.hibino@gmail.com |
| Stability | experimental |
| Portability | unknown |
| Safe Haskell | None |
| Language | Haskell2010 |
Database.Relational.Relation
Description
This module integrate monadic operations to compose complex queries with re-usable Relation type.
Synopsis
- table :: Table r -> Relation () r
- derivedRelation :: TableDerivable r => Relation () r
- tableOf :: TableDerivable r => Relation () r -> Table r
- relation :: QuerySimple (Record Flat r) -> Relation () r
- relation' :: SimpleQuery p r -> Relation p r
- aggregateRelation :: QueryAggregate (Record Aggregated r) -> Relation () r
- aggregateRelation' :: AggregatedQuery p r -> Relation p r
- data UniqueRelation p c r
- unsafeUnique :: Relation p r -> UniqueRelation p c r
- unUnique :: UniqueRelation p c r -> Relation p r
- uniqueRelation' :: QueryUnique (PlaceHolders p, Record c r) -> UniqueRelation p c r
- aggregatedUnique :: Relation ph r -> Pi r a -> (Record Flat a -> Record Aggregated b) -> UniqueRelation ph Flat b
- query :: (MonadQualify ConfigureQuery m, MonadQuery m) => Relation () r -> m (Record Flat r)
- queryMaybe :: (MonadQualify ConfigureQuery m, MonadQuery m) => Relation () r -> m (Record Flat (Maybe r))
- queryList :: MonadQualify ConfigureQuery m => Relation () r -> m (RecordList (Record c) r)
- queryList' :: MonadQualify ConfigureQuery m => Relation p r -> m (PlaceHolders p, RecordList (Record c) r)
- queryScalar :: (MonadQualify ConfigureQuery m, ScalarDegree r) => UniqueRelation () c r -> m (Record c (Maybe r))
- queryScalar' :: (MonadQualify ConfigureQuery m, ScalarDegree r) => UniqueRelation p c r -> m (PlaceHolders p, Record c (Maybe r))
- uniqueQuery' :: UniqueRelation p c r -> QueryUnique (PlaceHolders p, Record c r)
- uniqueQueryMaybe' :: UniqueRelation p c r -> QueryUnique (PlaceHolders p, Record c (Maybe r))
Relation type
derivedRelation :: TableDerivable r => Relation () r Source #
Inferred Relation.
tableOf :: TableDerivable r => Relation () r -> Table r Source #
Interface to derive Table type object.
relation :: QuerySimple (Record Flat r) -> Relation () r Source #
Finalize QuerySimple monad and generate Relation.
relation' :: SimpleQuery p r -> Relation p r Source #
Finalize QuerySimple monad and generate Relation with place-holder parameter p.
aggregateRelation :: QueryAggregate (Record Aggregated r) -> Relation () r Source #
Finalize QueryAggregate monad and geneate Relation.
aggregateRelation' :: AggregatedQuery p r -> Relation p r Source #
Finalize QueryAggregate monad and geneate Relation with place-holder parameter p.
data UniqueRelation p c r Source #
Unique relation type to compose scalar queries.
unsafeUnique :: Relation p r -> UniqueRelation p c r Source #
Unsafely specify unique relation.
unUnique :: UniqueRelation p c r -> Relation p r Source #
Discard unique attribute.
uniqueRelation' :: QueryUnique (PlaceHolders p, Record c r) -> UniqueRelation p c r Source #
Finalize QueryUnique monad and generate UniqueRelation.
aggregatedUnique :: Relation ph r -> Pi r a -> (Record Flat a -> Record Aggregated b) -> UniqueRelation ph Flat b Source #
Aggregated UniqueRelation.
Query using relation
query :: (MonadQualify ConfigureQuery m, MonadQuery m) => Relation () r -> m (Record Flat r) Source #
Join sub-query. Query result is not NodeAttr.
queryMaybe :: (MonadQualify ConfigureQuery m, MonadQuery m) => Relation () r -> m (Record Flat (Maybe r)) Source #
Join sub-query. Query result is NodeAttr.
The combinations of query and queryMaybe express
inner joins, left outer joins, right outer joins, and full outer joins.
Here is an example of a right outer join:
outerJoin = relation $ do
e <- queryMaybe employee
d <- query department
on $ e ?! E.deptId' .=. just (d ! D.deptId')
return $ (,) |$| e |*| d
queryList :: MonadQualify ConfigureQuery m => Relation () r -> m (RecordList (Record c) r) Source #
List sub-query, for IN and EXIST.
queryList' :: MonadQualify ConfigureQuery m => Relation p r -> m (PlaceHolders p, RecordList (Record c) r) Source #
List sub-query, for IN and EXIST with place-holder parameter p.
queryScalar :: (MonadQualify ConfigureQuery m, ScalarDegree r) => UniqueRelation () c r -> m (Record c (Maybe r)) Source #
Scalar sub-query.
queryScalar' :: (MonadQualify ConfigureQuery m, ScalarDegree r) => UniqueRelation p c r -> m (PlaceHolders p, Record c (Maybe r)) Source #
Scalar sub-query with place-holder parameter p.
uniqueQuery' :: UniqueRelation p c r -> QueryUnique (PlaceHolders p, Record c r) Source #
Join unique sub-query with place-holder parameter p.
uniqueQueryMaybe' :: UniqueRelation p c r -> QueryUnique (PlaceHolders p, Record c (Maybe r)) Source #
Join unique sub-query with place-holder parameter p. Query result is NodeAttr.