relational-query-0.12.0.0: Typeful, Modular, Relational, algebraic query engine

Copyright2013-2017 Kei Hibino
LicenseBSD3
Maintainerex8k.hibino@gmail.com
Stabilityexperimental
Portabilityunknown
Safe HaskellNone
LanguageHaskell2010

Database.Relational.Relation

Contents

Description

This module integrate monadic operations to compose complex queries with re-usable Relation type.

Synopsis

Relation type

table :: Table r -> Relation () r Source #

Simple Relation from Table.

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' :: 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.

Query using relation

query :: (MonadQualify ConfigureQuery m, MonadQuery m) => Relation () r -> m (Record Flat r) Source #

Join sub-query. Query result is not Maybe.

queryMaybe :: (MonadQualify ConfigureQuery m, MonadQuery m) => Relation () r -> m (Record Flat (Maybe r)) Source #

Join sub-query. Query result is Maybe. 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 Maybe.