module Opaleye.SQLite.Order (module Opaleye.SQLite.Order, O.Order) where
import qualified Opaleye.SQLite.Column as C
import Opaleye.SQLite.QueryArr (Query)
import qualified Opaleye.SQLite.Internal.QueryArr as Q
import qualified Opaleye.SQLite.Internal.Order as O
import qualified Opaleye.SQLite.PGTypes as T
import qualified Opaleye.SQLite.Internal.HaskellDB.PrimQuery as HPQ
orderBy :: O.Order a -> Query a -> Query a
orderBy :: Order a -> Query a -> Query a
orderBy Order a
os Query a
q =
(((), Tag) -> (a, PrimQuery, Tag)) -> Query a
forall a b. ((a, Tag) -> (b, PrimQuery, Tag)) -> QueryArr a b
Q.simpleQueryArr (Order a -> (a, PrimQuery, Tag) -> (a, PrimQuery, Tag)
forall a. Order a -> (a, PrimQuery, Tag) -> (a, PrimQuery, Tag)
O.orderByU Order a
os ((a, PrimQuery, Tag) -> (a, PrimQuery, Tag))
-> (((), Tag) -> (a, PrimQuery, Tag))
-> ((), Tag)
-> (a, PrimQuery, Tag)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Query a -> ((), Tag) -> (a, PrimQuery, Tag)
forall a b. QueryArr a b -> (a, Tag) -> (b, PrimQuery, Tag)
Q.runSimpleQueryArr Query a
q)
asc :: PGOrd b => (a -> C.Column b) -> O.Order a
asc :: (a -> Column b) -> Order a
asc = OrderOp -> (a -> Column b) -> Order a
forall a b. OrderOp -> (a -> Column b) -> Order a
O.order OrderOp :: OrderDirection -> OrderNulls -> OrderOp
HPQ.OrderOp { orderDirection :: OrderDirection
HPQ.orderDirection = OrderDirection
HPQ.OpAsc
, orderNulls :: OrderNulls
HPQ.orderNulls = OrderNulls
HPQ.NullsLast }
desc :: PGOrd b => (a -> C.Column b) -> O.Order a
desc :: (a -> Column b) -> Order a
desc = OrderOp -> (a -> Column b) -> Order a
forall a b. OrderOp -> (a -> Column b) -> Order a
O.order OrderOp :: OrderDirection -> OrderNulls -> OrderOp
HPQ.OrderOp { orderDirection :: OrderDirection
HPQ.orderDirection = OrderDirection
HPQ.OpDesc
, orderNulls :: OrderNulls
HPQ.orderNulls = OrderNulls
HPQ.NullsFirst }
ascNullsFirst :: PGOrd b => (a -> C.Column b) -> O.Order a
ascNullsFirst :: (a -> Column b) -> Order a
ascNullsFirst = OrderOp -> (a -> Column b) -> Order a
forall a b. OrderOp -> (a -> Column b) -> Order a
O.order OrderOp :: OrderDirection -> OrderNulls -> OrderOp
HPQ.OrderOp { orderDirection :: OrderDirection
HPQ.orderDirection = OrderDirection
HPQ.OpAsc
, orderNulls :: OrderNulls
HPQ.orderNulls = OrderNulls
HPQ.NullsFirst }
descNullsLast :: PGOrd b => (a -> C.Column b) -> O.Order a
descNullsLast :: (a -> Column b) -> Order a
descNullsLast = OrderOp -> (a -> Column b) -> Order a
forall a b. OrderOp -> (a -> Column b) -> Order a
O.order OrderOp :: OrderDirection -> OrderNulls -> OrderOp
HPQ.OrderOp { orderDirection :: OrderDirection
HPQ.orderDirection = OrderDirection
HPQ.OpDesc
, orderNulls :: OrderNulls
HPQ.orderNulls = OrderNulls
HPQ.NullsLast }
limit :: Int -> Query a -> Query a
limit :: Int -> Query a -> Query a
limit Int
n Query a
a = (((), Tag) -> (a, PrimQuery, Tag)) -> Query a
forall a b. ((a, Tag) -> (b, PrimQuery, Tag)) -> QueryArr a b
Q.simpleQueryArr (Int -> (a, PrimQuery, Tag) -> (a, PrimQuery, Tag)
forall a. Int -> (a, PrimQuery, Tag) -> (a, PrimQuery, Tag)
O.limit' Int
n ((a, PrimQuery, Tag) -> (a, PrimQuery, Tag))
-> (((), Tag) -> (a, PrimQuery, Tag))
-> ((), Tag)
-> (a, PrimQuery, Tag)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Query a -> ((), Tag) -> (a, PrimQuery, Tag)
forall a b. QueryArr a b -> (a, Tag) -> (b, PrimQuery, Tag)
Q.runSimpleQueryArr Query a
a)
offset :: Int -> Query a -> Query a
offset :: Int -> Query a -> Query a
offset Int
n Query a
a = (((), Tag) -> (a, PrimQuery, Tag)) -> Query a
forall a b. ((a, Tag) -> (b, PrimQuery, Tag)) -> QueryArr a b
Q.simpleQueryArr (Int -> (a, PrimQuery, Tag) -> (a, PrimQuery, Tag)
forall a. Int -> (a, PrimQuery, Tag) -> (a, PrimQuery, Tag)
O.offset' Int
n ((a, PrimQuery, Tag) -> (a, PrimQuery, Tag))
-> (((), Tag) -> (a, PrimQuery, Tag))
-> ((), Tag)
-> (a, PrimQuery, Tag)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Query a -> ((), Tag) -> (a, PrimQuery, Tag)
forall a b. QueryArr a b -> (a, Tag) -> (b, PrimQuery, Tag)
Q.runSimpleQueryArr Query a
a)
class PGOrd a where
instance PGOrd T.PGBool
instance PGOrd T.PGDate
instance PGOrd T.PGFloat8
instance PGOrd T.PGFloat4
instance PGOrd T.PGInt8
instance PGOrd T.PGInt4
instance PGOrd T.PGInt2
instance PGOrd T.PGNumeric
instance PGOrd T.PGText
instance PGOrd T.PGTime
instance PGOrd T.PGTimestamptz
instance PGOrd T.PGTimestamp
instance PGOrd T.PGCitext