1{-# language DataKinds #-}
2{-# language LambdaCase #-}
4{-# language ScopedTypeVariables #-}
5{-# language TypeApplications #-}
7{-# options_ghc -fno-warn-redundant-constraints #-}
11 , (<.), (<=.), (>.), (>=.)
12 , (<?), (<=?), (>?), (>=?)
13 , leastExpr, greatestExpr
21import qualified Opaleye.Internal.HaskellDB.PrimQuery as Opaleye
24import Rel8.Expr ( Expr( Expr ) )
25import Rel8.Expr.Bool ( (&&.), (||.), coalesce )
26import Rel8.Expr.Null ( isNull, isNonNull, nullable, unsafeLiftOpNullable )
27import Rel8.Expr.Opaleye ( zipPrimExprsWith )
28import Rel8.Schema.Nullability
29 ( Nullability( NonNullable, Nullable )
30 , Nullabilizes, nullabilization
32import Rel8.Type.Ord ( DBOrd )
35lt :: DBOrd a => Expr a -> Expr a -> Expr Bool
36lt = zipPrimExprsWith (Opaleye.BinExpr (Opaleye.:<))
39le :: DBOrd a => Expr a -> Expr a -> Expr Bool
40le = zipPrimExprsWith (Opaleye.BinExpr (Opaleye.:<=))
43gt :: DBOrd a => Expr a -> Expr a -> Expr Bool
44gt = zipPrimExprsWith (Opaleye.BinExpr (Opaleye.:>))
47ge :: DBOrd a => Expr a -> Expr a -> Expr Bool
48ge = zipPrimExprsWith (Opaleye.BinExpr (Opaleye.:>=))
51slt :: DBOrd db => Nullability db a -> Expr a -> Expr a -> Expr Bool
53 Nullable -> \ma mb -> isNull ma &&. isNonNull mb ||. ma <? mb
57sle :: DBOrd db => Nullability db a -> Expr a -> Expr a -> Expr Bool
59 Nullable -> \ma mb -> isNull ma ||. ma <=? mb
63sgt :: DBOrd db => Nullability db a -> Expr a -> Expr a -> Expr Bool
65 Nullable -> \ma mb -> isNonNull ma &&. isNull mb ||. ma >? mb
69sge :: DBOrd db => Nullability db a -> Expr a -> Expr a -> Expr Bool
71 Nullable -> \ma mb -> isNull mb ||. ma >=? mb
75(<.) :: (DBOrd db, Nullabilizes db a) => Expr a -> Expr a -> Expr Bool
76(<.) = slt nullabilization
80(<=.) :: (DBOrd db, Nullabilizes db a) => Expr a -> Expr a -> Expr Bool
81(<=.) = sle nullabilization
85(>.) :: (DBOrd db, Nullabilizes db a) => Expr a -> Expr a -> Expr Bool
86(>.) = sgt nullabilization
90(>=.) :: (DBOrd db, Nullabilizes db a) => Expr a -> Expr a -> Expr Bool
91(>=.) = sge nullabilization
95(<?) :: DBOrd a => Expr (Maybe a) -> Expr (Maybe a) -> Expr Bool
96a <? b = coalesce $ unsafeLiftOpNullable lt a b
100(<=?) :: DBOrd a => Expr (Maybe a) -> Expr (Maybe a) -> Expr Bool
101a <=? b = coalesce $ unsafeLiftOpNullable le a b
105(>?) :: DBOrd a => Expr (Maybe a) -> Expr (Maybe a) -> Expr Bool
106a >? b = coalesce $ unsafeLiftOpNullable gt a b
110(>=?) :: DBOrd a => Expr (Maybe a) -> Expr (Maybe a) -> Expr Bool
111a >=? b = coalesce $ unsafeLiftOpNullable ge a b
115leastExpr :: forall a db. (DBOrd db, Nullabilizes db a)
116 => Expr a -> Expr a -> Expr a
117leastExpr ma mb = case nullabilization @a of
118 Nullable -> nullable ma (\a -> nullable mb (least_ a) mb) ma
119 NonNullable -> least_ ma mb
121 least_ (Expr a) (Expr b) = Expr (Opaleye.FunExpr "LEAST" [a, b])
124greatestExpr :: forall a db. (DBOrd db, Nullabilizes db a)
125 => Expr a -> Expr a -> Expr a
126greatestExpr ma mb = case nullabilization @a of
127 Nullable -> nullable mb (\a -> nullable ma (greatest_ a) mb) ma
128 NonNullable -> greatest_ ma mb
130 greatest_ (Expr a) (Expr b) = Expr (Opaleye.FunExpr "GREATEST" [a, b])
keysesc to close
- j k
- move down, up
- enter
- open
- esc
- back, or up a level
- 1 2 3 4
- readme, files, commits, refs
- /
- filter
- y
- copy the clone command
- c
- compare the chosen commit with another (or shift-click both)
- ?
- show or hide this list