module Database.Relational.Query.Monad.Trans.JoinState (
JoinContext, primeJoinContext, updateProduct, joinProduct
) where
import Prelude hiding (product)
import qualified Database.Relational.Query.Internal.Product as Product
import Database.Relational.Query.Internal.Sub (QueryProductNode, JoinProduct)
newtype JoinContext =
JoinContext
{ product :: Maybe QueryProductNode
}
primeJoinContext :: JoinContext
primeJoinContext = JoinContext Nothing
updateProduct' :: (Maybe QueryProductNode -> Maybe QueryProductNode) -> JoinContext -> JoinContext
updateProduct' uf ctx = ctx { product = uf . product $ ctx }
updateProduct :: (Maybe QueryProductNode -> QueryProductNode) -> JoinContext -> JoinContext
updateProduct uf = updateProduct' (Just . uf)
joinProduct :: JoinContext -> JoinProduct
joinProduct = fmap Product.nodeTree . product