module YesodDsl.Generator.Require where
import YesodDsl.AST
import Text.Shakespeare.Text hiding (toText)
import qualified Data.Text as T
import YesodDsl.Generator.Common
import YesodDsl.Generator.Esqueleto
import Control.Monad.State
requireStmts :: State Context String
requireStmts = do
ps <- gets ctxHandlerParams
liftM concat $ mapM f $ zip ([1..] :: [Int]) ps
where
f (requireId,(Require sq)) = do
ctx <- get
put $ ctx { ctxNames = sqAliases sq }
mw <- case sqWhere sq of
Just expr -> do
e <- hsBoolExpr expr
return $ "where_ (" ++ e ++ ")\n"
Nothing -> return ""
jes <- liftM concat $ mapM mapJoinExpr (reverse $ sqJoins sq)
put ctx
return $ let maybeWhere = mw
joinExprs = jes in
T.unpack $(codegenFile "codegen/require-select-query.cg")
where
(limit, offset) = sqLimitOffset sq
(selectEntity, selectVar) = sqFrom sq
f _ = return ""