@@ -27,6 +27,10 @@ import Rel8.Order ( Order( Order ) )
27import Rel8.Type.Ord ( DBOrd )
27import Rel8.Type.Ord ( DBOrd )
30+-- | Sort a column in ascending order.
32+-- >>> select c $ orderBy asc $ values [ lit x | x <- [1..5 :: Int32] ]
30asc :: DBOrd a => Order (Expr a)
34asc :: DBOrd a => Order (Expr a)
31asc = Order $ Opaleye.Order (\expr -> [(orderOp, toPrimExpr expr)])
35asc = Order $ Opaleye.Order (\expr -> [(orderOp, toPrimExpr expr)])
@@ -37,6 +41,10 @@ asc = Order $ Opaleye.Order (\expr -> [(orderOp, toPrimExpr expr)])
44+-- | Sort a column in descending order.
46+-- >>> select c $ orderBy desc $ values [ lit x | x <- [1..5 :: Int32] ]
40desc :: DBOrd a => Order (Expr a)
48desc :: DBOrd a => Order (Expr a)
41desc = Order $ Opaleye.Order (\expr -> [(orderOp, toPrimExpr expr)])
49desc = Order $ Opaleye.Order (\expr -> [(orderOp, toPrimExpr expr)])
@@ -47,6 +55,11 @@ desc = Order $ Opaleye.Order (\expr -> [(orderOp, toPrimExpr expr)])
58+-- | Transform an ordering so that @null@ values appear first. This corresponds
59+-- to @NULLS FIRST@ in SQL.
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]
50nullsFirst :: Order (Expr a) -> Order (Expr (Maybe a))
63nullsFirst :: Order (Expr a) -> Order (Expr (Maybe a))
51nullsFirst (Order (Opaleye.Order f)) =
64nullsFirst (Order (Opaleye.Order f)) =
52 Order $ Opaleye.Order $ fmap (first g) . f . unsafeUnnullify
65 Order $ Opaleye.Order $ fmap (first g) . f . unsafeUnnullify
@@ -55,6 +68,11 @@ nullsFirst (Order (Opaleye.Order f)) =
55 g orderOp = orderOp { Opaleye.orderNulls = Opaleye.NullsFirst }
68 g orderOp = orderOp { Opaleye.orderNulls = Opaleye.NullsFirst }
71+-- | Transform an ordering so that @null@ values appear first. This corresponds
72+-- to @NULLS LAST@ in SQL.
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]
58nullsLast :: Order (Expr a) -> Order (Expr (Maybe a))
76nullsLast :: Order (Expr a) -> Order (Expr (Maybe a))
59nullsLast (Order (Opaleye.Order f)) =
77nullsLast (Order (Opaleye.Order f)) =
60 Order $ Opaleye.Order $ fmap (first g) . f . unsafeUnnullify
78 Order $ Opaleye.Order $ fmap (first g) . f . unsafeUnnullify