on master help sign in
Document Rel8.Expr.Order
commitd9191817e83ccbe66b20e9a9fcc3fa2f982e8ed3 authorOllie Charles <ollie@ocharles.org.uk> dateTue 23 Mar 2021, 16:29 (6 years ago) parentce15ca4
1 file changed+18
src/Rel8/Expr/Order.hs+18
src/Rel8/Expr/Order.hs+18
@@ -27,6 +27,10 @@ import Rel8.Order ( Order( Order ) )
2727import Rel8.Type.Ord ( DBOrd )
2828
2929
30+-- | Sort a column in ascending order.
31+--
32+-- >>> select c $ orderBy asc $ values [ lit x | x <- [1..5 :: Int32] ]
33+-- [1,2,3,4,5]
3034asc :: DBOrd a => Order (Expr a)
3135asc = Order $ Opaleye.Order (\expr -> [(orderOp, toPrimExpr expr)])
3236 where
@@ -37,6 +41,10 @@ asc = Order $ Opaleye.Order (\expr -> [(orderOp, toPrimExpr expr)])
3741 }
3842
3943
44+-- | Sort a column in descending order.
45+--
46+-- >>> select c $ orderBy desc $ values [ lit x | x <- [1..5 :: Int32] ]
47+-- [5,4,3,2,1]
4048desc :: DBOrd a => Order (Expr a)
4149desc = Order $ Opaleye.Order (\expr -> [(orderOp, toPrimExpr expr)])
4250 where
@@ -47,6 +55,11 @@ desc = Order $ Opaleye.Order (\expr -> [(orderOp, toPrimExpr expr)])
4755 }
4856
4957
58+-- | Transform an ordering so that @null@ values appear first. This corresponds
59+-- to @NULLS FIRST@ in SQL.
60+--
61+-- >>> select c $ orderBy (nullsFirst desc) $ values $ [ nullExpr, nullExpr ] <> [ lit (Just x) | x <- [1..5 :: Int32] ]
62+-- [Nothing,Nothing,Just 5,Just 4,Just 3,Just 2,Just 1]
5063nullsFirst :: Order (Expr a) -> Order (Expr (Maybe a))
5164nullsFirst (Order (Opaleye.Order f)) =
5265 Order $ Opaleye.Order $ fmap (first g) . f . unsafeUnnullify
@@ -55,6 +68,11 @@ nullsFirst (Order (Opaleye.Order f)) =
5568 g orderOp = orderOp { Opaleye.orderNulls = Opaleye.NullsFirst }
5669
5770
71+-- | Transform an ordering so that @null@ values appear first. This corresponds
72+-- to @NULLS LAST@ in SQL.
73+--
74+-- >>> select c $ orderBy (nullsLast desc) $ values $ [ nullExpr, nullExpr ] <> [ lit (Just x) | x <- [1..5 :: Int32] ]
75+-- [Just 5,Just 4,Just 3,Just 2,Just 1,Nothing,Nothing]
5876nullsLast :: Order (Expr a) -> Order (Expr (Maybe a))
5977nullsLast (Order (Opaleye.Order f)) =
6078 Order $ Opaleye.Order $ fmap (first g) . f . unsafeUnnullify