module Rel8.Query.Limit
  ( limit
  , offset
  )
where

-- base
import Prelude

-- opaleye
import qualified Opaleye

-- rel8
import Rel8.Query ( Query )
import Rel8.Query.Opaleye ( mapOpaleye )


-- | @limit n@ select at most @n@ rows from a query.  @limit n@ is equivalent
-- to the SQL @LIMIT n@.
limit :: Word -> Query a -> Query a
limit :: forall a. Word -> Query a -> Query a
limit = forall a b. (Select a -> Select b) -> Query a -> Query b
mapOpaleye forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall a. Int -> Select a -> Select a
Opaleye.limit forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall a b. (Integral a, Num b) => a -> b
fromIntegral


-- | @offset n@ drops the first @n@ rows from a query. @offset n@ is equivalent
-- to the SQL @OFFSET n@.
offset :: Word -> Query a -> Query a
offset :: forall a. Word -> Query a -> Query a
offset = forall a b. (Select a -> Select b) -> Query a -> Query b
mapOpaleye forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall a. Int -> Select a -> Select a
Opaleye.offset forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall a b. (Integral a, Num b) => a -> b
fromIntegral