{-# language MonoLocalBinds #-}
module Rel8.Statement.Where
( ppWhere
)
where
import Prelude
import qualified Opaleye.Internal.HaskellDB.Sql.Print as Opaleye
import qualified Opaleye.Internal.Sql as Opaleye
import Text.PrettyPrint ( Doc, (<+>), text )
import Rel8.Expr ( Expr )
import Rel8.Expr.Opaleye ( toPrimExpr )
import Rel8.Schema.Name ( Selects )
import Rel8.Schema.Table ( TableSchema )
import Rel8.Table.Opaleye ( attributes )
ppWhere :: Selects names exprs
=> TableSchema names -> (exprs -> Expr Bool) -> Doc
ppWhere :: TableSchema names -> (exprs -> Expr Bool) -> Doc
ppWhere TableSchema names
schema exprs -> Expr Bool
where_ = String -> Doc
text String
"WHERE" Doc -> Doc -> Doc
<+> Expr Bool -> Doc
forall a. Expr a -> Doc
ppExpr Expr Bool
condition
where
ppExpr :: Expr a -> Doc
ppExpr = SqlExpr -> Doc
Opaleye.ppSqlExpr (SqlExpr -> Doc) -> (Expr a -> SqlExpr) -> Expr a -> Doc
forall b c a. (b -> c) -> (a -> b) -> a -> c
. PrimExpr -> SqlExpr
Opaleye.sqlExpr (PrimExpr -> SqlExpr) -> (Expr a -> PrimExpr) -> Expr a -> SqlExpr
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Expr a -> PrimExpr
forall a. Expr a -> PrimExpr
toPrimExpr
condition :: Expr Bool
condition = exprs -> Expr Bool
where_ (TableSchema names -> exprs
forall names exprs.
Selects names exprs =>
TableSchema names -> exprs
attributes TableSchema names
schema)