module Database.Relational.Monad.Trans.JoinState (
JoinContext, primeJoinContext, updateProduct, joinProduct
) where
import Prelude hiding (product)
import Data.DList (DList, toList)
import Database.Relational.Internal.ContextType (Flat)
import Database.Relational.SqlSyntax (JoinProduct, Node, Predicate)
import qualified Database.Relational.SqlSyntax as Product
newtype JoinContext =
JoinContext
{ product :: Maybe (Node (DList (Predicate Flat)))
}
primeJoinContext :: JoinContext
primeJoinContext = JoinContext Nothing
updateProduct :: (Maybe (Node (DList (Predicate Flat))) -> Node (DList (Predicate Flat)))
-> JoinContext
-> JoinContext
updateProduct uf ctx = ctx { product = Just . uf . product $ ctx }
joinProduct :: JoinContext -> JoinProduct
joinProduct = fmap (fmap toList . Product.nodeTree) . product