| Copyright | (c) digitally induced GmbH 2020 |
|---|---|
| Safe Haskell | None |
| Language | GHC2021 |
IHP.QueryBuilder.Order
Description
This module provides functions for ordering, limiting, and deduplicating query results.
Synopsis
- orderBy :: forall (table :: Symbol) (name :: Symbol) model value. (KnownSymbol table, KnownSymbol name, HasField name model value, model ~ GetModelByTableName table, Table model) => Proxy name -> QueryBuilder table -> QueryBuilder table
- orderByAsc :: forall (name :: Symbol) model (table :: Symbol) value. (KnownSymbol table, KnownSymbol name, HasField name model value, model ~ GetModelByTableName table, Table model) => Proxy name -> QueryBuilder table -> QueryBuilder table
- orderByDesc :: forall (name :: Symbol) model (table :: Symbol) value. (KnownSymbol table, KnownSymbol name, HasField name model value, model ~ GetModelByTableName table, Table model) => Proxy name -> QueryBuilder table -> QueryBuilder table
- limit :: forall (model :: Symbol). Int -> QueryBuilder model -> QueryBuilder model
- offset :: forall (model :: Symbol). Int -> QueryBuilder model -> QueryBuilder model
- distinct :: forall (table :: Symbol). QueryBuilder table -> QueryBuilder table
- distinctOn :: forall (name :: Symbol) model value (table :: Symbol). (KnownSymbol table, KnownSymbol name, HasField name model value, model ~ GetModelByTableName table, Table model) => Proxy name -> QueryBuilder table -> QueryBuilder table
Documentation
orderBy :: forall (table :: Symbol) (name :: Symbol) model value. (KnownSymbol table, KnownSymbol name, HasField name model value, model ~ GetModelByTableName table, Table model) => Proxy name -> QueryBuilder table -> QueryBuilder table Source #
Alias for orderByAsc
orderByAsc :: forall (name :: Symbol) model (table :: Symbol) value. (KnownSymbol table, KnownSymbol name, HasField name model value, model ~ GetModelByTableName table, Table model) => Proxy name -> QueryBuilder table -> QueryBuilder table Source #
Adds an ORDER BY .. ASC to your query.
Use orderByDesc for descending order.
Example: Fetch the 10 oldest books.
query @Book
|> orderBy #createdAt -- > |> limit 10
|> fetch
-- SELECT * FROM books LIMIT 10 ORDER BY created_at ASCorderByDesc :: forall (name :: Symbol) model (table :: Symbol) value. (KnownSymbol table, KnownSymbol name, HasField name model value, model ~ GetModelByTableName table, Table model) => Proxy name -> QueryBuilder table -> QueryBuilder table Source #
Adds an ORDER BY .. DESC to your query.
Use orderBy for ascending order.
Example: Fetch the 10 newest projects (ordered by creation time).
query @Project
|> orderByDesc #createdAt
|> limit 10
|> fetch
-- SELECT * FROM projects LIMIT 10 ORDER BY created_at DESClimit :: forall (model :: Symbol). Int -> QueryBuilder model -> QueryBuilder model Source #
Adds an LIMIT .. to your query.
Example: Fetch 10 posts
query @Post
|> limit 10
|> fetch
-- SELECT * FROM posts LIMIT 10offset :: forall (model :: Symbol). Int -> QueryBuilder model -> QueryBuilder model Source #
Adds an OFFSET .. to your query. Most often used together with LIMIT...
Example: Fetch posts 10-20
query @Post
|> limit 10
|> offset 10
|> fetch
-- SELECT * FROM posts LIMIT 10 OFFSET 10distinct :: forall (table :: Symbol). QueryBuilder table -> QueryBuilder table Source #
Adds a DISTINCT to your query.
Use distinct to remove all duplicate rows from the result
Example: Fetch distinct books
query @Book
|> distinct
|> fetch
-- SELECT DISTINCT * FROM booksdistinctOn :: forall (name :: Symbol) model value (table :: Symbol). (KnownSymbol table, KnownSymbol name, HasField name model value, model ~ GetModelByTableName table, Table model) => Proxy name -> QueryBuilder table -> QueryBuilder table Source #
Adds an @DISTINCT ON .. to your query.
Use distinctOn to return a single row for each distinct value provided.
Example: Fetch one book for each categoryId field
query @Book
|> distinctOn #categoryId
|> fetch
-- SELECT DISTINCT ON (category_id) * FROM books