{-# language DataKinds #-}
{-# language FlexibleContexts #-}
{-# language GADTs #-}
{-# language ScopedTypeVariables #-}
{-# language TypeApplications #-}
{-# options_ghc -fno-warn-redundant-constraints #-}
module Rel8.Expr.Ord
( (<.), (<=.), (>.), (>=.)
, (<?), (<=?), (>?), (>=?)
, leastExpr, greatestExpr
)
where
import Prelude
import qualified Opaleye.Internal.HaskellDB.PrimQuery as Opaleye
import Rel8.Expr ( Expr( Expr ) )
import Rel8.Expr.Bool ( (&&.), (||.), coalesce )
import Rel8.Expr.Null ( isNull, isNonNull, nullableExpr, unsafeLiftOpNull )
import Rel8.Expr.Opaleye ( toPrimExpr, zipPrimExprsWith )
import Rel8.Schema.Null ( Nullity( Null, NotNull ), Sql, nullable )
import Rel8.Type.Ord ( DBOrd )
lt :: DBOrd a => Expr a -> Expr a -> Expr Bool
lt :: forall a. DBOrd a => Expr a -> Expr a -> Expr Bool
lt = forall a b c.
(PrimExpr -> PrimExpr -> PrimExpr) -> Expr a -> Expr b -> Expr c
zipPrimExprsWith (BinOp -> PrimExpr -> PrimExpr -> PrimExpr
Opaleye.BinExpr BinOp
(Opaleye.:<))
le :: DBOrd a => Expr a -> Expr a -> Expr Bool
le :: forall a. DBOrd a => Expr a -> Expr a -> Expr Bool
le = forall a b c.
(PrimExpr -> PrimExpr -> PrimExpr) -> Expr a -> Expr b -> Expr c
zipPrimExprsWith (BinOp -> PrimExpr -> PrimExpr -> PrimExpr
Opaleye.BinExpr BinOp
(Opaleye.:<=))
gt :: DBOrd a => Expr a -> Expr a -> Expr Bool
gt :: forall a. DBOrd a => Expr a -> Expr a -> Expr Bool
gt = forall a b c.
(PrimExpr -> PrimExpr -> PrimExpr) -> Expr a -> Expr b -> Expr c
zipPrimExprsWith (BinOp -> PrimExpr -> PrimExpr -> PrimExpr
Opaleye.BinExpr BinOp
(Opaleye.:>))
ge :: DBOrd a => Expr a -> Expr a -> Expr Bool
ge :: forall a. DBOrd a => Expr a -> Expr a -> Expr Bool
ge = forall a b c.
(PrimExpr -> PrimExpr -> PrimExpr) -> Expr a -> Expr b -> Expr c
zipPrimExprsWith (BinOp -> PrimExpr -> PrimExpr -> PrimExpr
Opaleye.BinExpr BinOp
(Opaleye.:>=))
(<.) :: forall a. Sql DBOrd a => Expr a -> Expr a -> Expr Bool
<. :: forall a. Sql DBOrd a => Expr a -> Expr a -> Expr Bool
(<.) = case forall a. Nullable a => Nullity a
nullable @a of
Nullity a
Null -> \Expr a
ma Expr a
mb -> forall a. Expr (Maybe a) -> Expr Bool
isNull Expr a
ma Expr Bool -> Expr Bool -> Expr Bool
&&. forall a. Expr (Maybe a) -> Expr Bool
isNonNull Expr a
mb Expr Bool -> Expr Bool -> Expr Bool
||. Expr a
ma forall a. DBOrd a => Expr (Maybe a) -> Expr (Maybe a) -> Expr Bool
<? Expr a
mb
Nullity a
NotNull -> forall a. DBOrd a => Expr a -> Expr a -> Expr Bool
lt
infix 4 <.
(<=.) :: forall a. Sql DBOrd a => Expr a -> Expr a -> Expr Bool
<=. :: forall a. Sql DBOrd a => Expr a -> Expr a -> Expr Bool
(<=.) = case forall a. Nullable a => Nullity a
nullable @a of
Nullity a
Null -> \Expr a
ma Expr a
mb -> forall a. Expr (Maybe a) -> Expr Bool
isNull Expr a
ma Expr Bool -> Expr Bool -> Expr Bool
||. Expr a
ma forall a. DBOrd a => Expr (Maybe a) -> Expr (Maybe a) -> Expr Bool
<=? Expr a
mb
Nullity a
NotNull -> forall a. DBOrd a => Expr a -> Expr a -> Expr Bool
le
infix 4 <=.
(>.) :: forall a. Sql DBOrd a => Expr a -> Expr a -> Expr Bool
>. :: forall a. Sql DBOrd a => Expr a -> Expr a -> Expr Bool
(>.) = case forall a. Nullable a => Nullity a
nullable @a of
Nullity a
Null -> \Expr a
ma Expr a
mb -> forall a. Expr (Maybe a) -> Expr Bool
isNonNull Expr a
ma Expr Bool -> Expr Bool -> Expr Bool
&&. forall a. Expr (Maybe a) -> Expr Bool
isNull Expr a
mb Expr Bool -> Expr Bool -> Expr Bool
||. Expr a
ma forall a. DBOrd a => Expr (Maybe a) -> Expr (Maybe a) -> Expr Bool
>? Expr a
mb
Nullity a
NotNull -> forall a. DBOrd a => Expr a -> Expr a -> Expr Bool
gt
infix 4 >.
(>=.) :: forall a. Sql DBOrd a => Expr a -> Expr a -> Expr Bool
>=. :: forall a. Sql DBOrd a => Expr a -> Expr a -> Expr Bool
(>=.) = case forall a. Nullable a => Nullity a
nullable @a of
Nullity a
Null -> \Expr a
ma Expr a
mb -> forall a. Expr (Maybe a) -> Expr Bool
isNull Expr a
mb Expr Bool -> Expr Bool -> Expr Bool
||. Expr a
ma forall a. DBOrd a => Expr (Maybe a) -> Expr (Maybe a) -> Expr Bool
>=? Expr a
mb
Nullity a
NotNull -> forall a. DBOrd a => Expr a -> Expr a -> Expr Bool
ge
infix 4 >=.
(<?) :: DBOrd a => Expr (Maybe a) -> Expr (Maybe a) -> Expr Bool
Expr (Maybe a)
a <? :: forall a. DBOrd a => Expr (Maybe a) -> Expr (Maybe a) -> Expr Bool
<? Expr (Maybe a)
b = Expr (Maybe Bool) -> Expr Bool
coalesce forall a b. (a -> b) -> a -> b
$ forall c a b.
NotNull c =>
(Expr a -> Expr b -> Expr c)
-> Expr (Maybe a) -> Expr (Maybe b) -> Expr (Maybe c)
unsafeLiftOpNull forall a. DBOrd a => Expr a -> Expr a -> Expr Bool
lt Expr (Maybe a)
a Expr (Maybe a)
b
infix 4 <?
(<=?) :: DBOrd a => Expr (Maybe a) -> Expr (Maybe a) -> Expr Bool
Expr (Maybe a)
a <=? :: forall a. DBOrd a => Expr (Maybe a) -> Expr (Maybe a) -> Expr Bool
<=? Expr (Maybe a)
b = Expr (Maybe Bool) -> Expr Bool
coalesce forall a b. (a -> b) -> a -> b
$ forall c a b.
NotNull c =>
(Expr a -> Expr b -> Expr c)
-> Expr (Maybe a) -> Expr (Maybe b) -> Expr (Maybe c)
unsafeLiftOpNull forall a. DBOrd a => Expr a -> Expr a -> Expr Bool
le Expr (Maybe a)
a Expr (Maybe a)
b
infix 4 <=?
(>?) :: DBOrd a => Expr (Maybe a) -> Expr (Maybe a) -> Expr Bool
Expr (Maybe a)
a >? :: forall a. DBOrd a => Expr (Maybe a) -> Expr (Maybe a) -> Expr Bool
>? Expr (Maybe a)
b = Expr (Maybe Bool) -> Expr Bool
coalesce forall a b. (a -> b) -> a -> b
$ forall c a b.
NotNull c =>
(Expr a -> Expr b -> Expr c)
-> Expr (Maybe a) -> Expr (Maybe b) -> Expr (Maybe c)
unsafeLiftOpNull forall a. DBOrd a => Expr a -> Expr a -> Expr Bool
gt Expr (Maybe a)
a Expr (Maybe a)
b
infix 4 >?
(>=?) :: DBOrd a => Expr (Maybe a) -> Expr (Maybe a) -> Expr Bool
Expr (Maybe a)
a >=? :: forall a. DBOrd a => Expr (Maybe a) -> Expr (Maybe a) -> Expr Bool
>=? Expr (Maybe a)
b = Expr (Maybe Bool) -> Expr Bool
coalesce forall a b. (a -> b) -> a -> b
$ forall c a b.
NotNull c =>
(Expr a -> Expr b -> Expr c)
-> Expr (Maybe a) -> Expr (Maybe b) -> Expr (Maybe c)
unsafeLiftOpNull forall a. DBOrd a => Expr a -> Expr a -> Expr Bool
ge Expr (Maybe a)
a Expr (Maybe a)
b
infix 4 >=?
leastExpr :: forall a. Sql DBOrd a => Expr a -> Expr a -> Expr a
leastExpr :: forall a. Sql DBOrd a => Expr a -> Expr a -> Expr a
leastExpr Expr a
ma Expr a
mb = case forall a. Nullable a => Nullity a
nullable @a of
Nullity a
Null -> forall b a.
Expr b -> (Expr a -> Expr b) -> Expr (Maybe a) -> Expr b
nullableExpr Expr a
ma (\Expr a
a -> forall b a.
Expr b -> (Expr a -> Expr b) -> Expr (Maybe a) -> Expr b
nullableExpr Expr a
mb (forall {a} {a} {a}. Expr a -> Expr a -> Expr a
least_ Expr a
a) Expr a
mb) Expr a
ma
Nullity a
NotNull -> forall {a} {a} {a}. Expr a -> Expr a -> Expr a
least_ Expr a
ma Expr a
mb
where
least_ :: Expr a -> Expr a -> Expr a
least_ Expr a
a Expr a
b = forall a. PrimExpr -> Expr a
Expr (Name -> [PrimExpr] -> PrimExpr
Opaleye.FunExpr Name
"LEAST" [forall a. Expr a -> PrimExpr
toPrimExpr Expr a
a, forall a. Expr a -> PrimExpr
toPrimExpr Expr a
b])
greatestExpr :: forall a. Sql DBOrd a => Expr a -> Expr a -> Expr a
greatestExpr :: forall a. Sql DBOrd a => Expr a -> Expr a -> Expr a
greatestExpr Expr a
ma Expr a
mb = case forall a. Nullable a => Nullity a
nullable @a of
Nullity a
Null -> forall b a.
Expr b -> (Expr a -> Expr b) -> Expr (Maybe a) -> Expr b
nullableExpr Expr a
mb (\Expr a
a -> forall b a.
Expr b -> (Expr a -> Expr b) -> Expr (Maybe a) -> Expr b
nullableExpr Expr a
ma (forall {a} {a} {a}. Expr a -> Expr a -> Expr a
greatest_ Expr a
a) Expr a
mb) Expr a
ma
Nullity a
NotNull -> forall {a} {a} {a}. Expr a -> Expr a -> Expr a
greatest_ Expr a
ma Expr a
mb
where
greatest_ :: Expr a -> Expr a -> Expr a
greatest_ Expr a
a Expr a
b =
forall a. PrimExpr -> Expr a
Expr (Name -> [PrimExpr] -> PrimExpr
Opaleye.FunExpr Name
"GREATEST" [forall a. Expr a -> PrimExpr
toPrimExpr Expr a
a, forall a. Expr a -> PrimExpr
toPrimExpr Expr a
b])