module Database.Relational.Query.Monad.Assign (
Assign, AssignStatement,
extract,
) where
import Control.Monad.Trans.Class (lift)
import Database.Relational.Query.Component (Config, QueryRestriction, Assignments)
import Database.Relational.Query.Context (Flat)
import Database.Relational.Query.Table (Table)
import Database.Relational.Query.Projection (Projection)
import Database.Relational.Query.Monad.Class (MonadQualify(..))
import Database.Relational.Query.Monad.Restrict (Restrict)
import qualified Database.Relational.Query.Monad.Restrict as Restrict
import Database.Relational.Query.Monad.Trans.Assigning (Assignings, extractAssignments)
import Database.Relational.Query.Monad.Type (ConfigureQuery)
type Assign r = Assignings r Restrict
type AssignStatement r a = Projection Flat r -> Assign r a
instance MonadQualify ConfigureQuery (Assign r) where
liftQualify = lift . liftQualify
extract :: Assign r a -> Config -> ((a, Table r -> Assignments), QueryRestriction Flat)
extract = Restrict.extract . extractAssignments