module Database.Relational.Query.Monad.Type
(
QueryCore, extractCore,
OrderedQuery,
) where
import Database.Relational.Query.Internal.BaseSQL (Duplication)
import Database.Relational.Query.Sub (JoinProduct, QueryRestriction)
import Database.Relational.Query.Context (Flat)
import Database.Relational.Query.Projection (Projection)
import Database.Relational.Query.Projectable (PlaceHolders)
import Database.Relational.Query.Monad.BaseType (ConfigureQuery)
import Database.Relational.Query.Monad.Trans.Join (QueryJoin, extractProduct)
import Database.Relational.Query.Monad.Trans.Restricting (Restrictings, extractRestrict)
import Database.Relational.Query.Monad.Trans.Ordering (Orderings)
type QueryCore = Restrictings Flat (QueryJoin ConfigureQuery)
extractCore :: QueryCore a
-> ConfigureQuery (((a, QueryRestriction Flat), JoinProduct), Duplication)
extractCore = extractProduct . extractRestrict
type OrderedQuery c m p r = Orderings c m (PlaceHolders p, Projection c r)