module Rel8.Query.Filter
( filter
, where_
)
where
import Prelude hiding ( filter )
import qualified Opaleye.Operators as Opaleye
import Data.Profunctor ( lmap )
import Rel8.Expr ( Expr )
import Rel8.Expr.Opaleye ( toColumn, toPrimExpr )
import Rel8.Query ( Query )
import Rel8.Query.Opaleye ( fromOpaleye )
filter :: (a -> Expr Bool) -> a -> Query a
filter :: forall a. (a -> Expr Bool) -> a -> Query a
filter a -> Expr Bool
f a
a = a
a forall (f :: * -> *) a b. Functor f => a -> f b -> f a
<$ Expr Bool -> Query ()
where_ (a -> Expr Bool
f a
a)
where_ :: Expr Bool -> Query ()
where_ :: Expr Bool -> Query ()
where_ Expr Bool
condition =
forall a. Select a -> Query a
fromOpaleye forall a b. (a -> b) -> a -> b
$ forall (p :: * -> * -> *) a b c.
Profunctor p =>
(a -> b) -> p b c -> p a c
lmap (\()
_ -> forall (n :: Nullability) b. PrimExpr -> Field_ n b
toColumn forall a b. (a -> b) -> a -> b
$ forall a. Expr a -> PrimExpr
toPrimExpr Expr Bool
condition) SelectArr (Field_ 'NonNullable SqlBool) ()
Opaleye.restrict