| Copyright | (c) digitally induced GmbH 2020 |
|---|---|
| Safe Haskell | None |
| Language | GHC2021 |
IHP.QueryBuilder.Filter
Contents
Description
This module provides all the filterWhere* functions for building WHERE clauses.
Synopsis
- filterWhere :: forall {k} (name :: Symbol) (table :: Symbol) model value queryBuilderProvider (joinRegister :: k). (KnownSymbol table, KnownSymbol name, DefaultParamEncoder value, HasField name model value, EqOrIsOperator value, model ~ GetModelByTableName table, HasQueryBuilder queryBuilderProvider joinRegister, Table model) => (Proxy name, value) -> queryBuilderProvider table -> queryBuilderProvider table
- filterWhereCaseInsensitive :: forall {k} (name :: Symbol) (table :: Symbol) model value queryBuilderProvider (joinRegister :: k). (KnownSymbol table, KnownSymbol name, DefaultParamEncoder value, HasField name model value, EqOrIsOperator value, model ~ GetModelByTableName table, HasQueryBuilder queryBuilderProvider joinRegister, Table model) => (Proxy name, value) -> queryBuilderProvider table -> queryBuilderProvider table
- filterWhereNot :: forall (name :: Symbol) (table :: Symbol) model value. (KnownSymbol table, KnownSymbol name, DefaultParamEncoder value, HasField name model value, EqOrIsOperator value, model ~ GetModelByTableName table, Table model) => (Proxy name, value) -> QueryBuilder table -> QueryBuilder table
- filterWhereIn :: forall (name :: Symbol) (table :: Symbol) model value queryBuilderProvider joinRegister. (KnownSymbol table, KnownSymbol name, DefaultParamEncoder [value], DefaultParamEncoder value, HasField name model value, model ~ GetModelByTableName table, HasQueryBuilder queryBuilderProvider joinRegister, EqOrIsOperator value, Table model) => (Proxy name, [value]) -> queryBuilderProvider table -> queryBuilderProvider table
- filterWhereInCaseInsensitive :: forall (name :: Symbol) (table :: Symbol) model value queryBuilderProvider joinRegister. (KnownSymbol table, KnownSymbol name, DefaultParamEncoder value, HasField name model value, model ~ GetModelByTableName table, HasQueryBuilder queryBuilderProvider joinRegister, EqOrIsOperator value, Table model) => (Proxy name, [Text]) -> queryBuilderProvider table -> queryBuilderProvider table
- filterWhereIdIn :: forall (table :: Symbol) model queryBuilderProvider joinRegister. (KnownSymbol table, Table model, model ~ GetModelByTableName table, HasQueryBuilder queryBuilderProvider joinRegister, DefaultParamEncoder [PrimaryKey (GetTableName model)]) => [Id model] -> queryBuilderProvider table -> queryBuilderProvider table
- filterWhereNotIn :: forall {k} (name :: Symbol) (table :: Symbol) model value queryBuilderProvider (joinRegister :: k). (KnownSymbol table, KnownSymbol name, DefaultParamEncoder [value], DefaultParamEncoder value, HasField name model value, model ~ GetModelByTableName table, HasQueryBuilder queryBuilderProvider joinRegister, EqOrIsOperator value) => (Proxy name, [value]) -> queryBuilderProvider table -> queryBuilderProvider table
- filterWhereLike :: forall {k} (name :: Symbol) (table :: Symbol) model value queryBuilderProvider (joinRegister :: k). (KnownSymbol table, KnownSymbol name, DefaultParamEncoder value, HasField name model value, model ~ GetModelByTableName table, HasQueryBuilder queryBuilderProvider joinRegister, Table model) => (Proxy name, value) -> queryBuilderProvider table -> queryBuilderProvider table
- filterWhereILike :: forall {k} (name :: Symbol) (table :: Symbol) model value queryBuilderProvider (joinRegister :: k). (KnownSymbol table, KnownSymbol name, DefaultParamEncoder value, HasField name model value, model ~ GetModelByTableName table, HasQueryBuilder queryBuilderProvider joinRegister, Table model) => (Proxy name, value) -> queryBuilderProvider table -> queryBuilderProvider table
- filterWhereMatches :: forall {k} (name :: Symbol) (table :: Symbol) model value queryBuilderProvider (joinRegister :: k). (KnownSymbol table, KnownSymbol name, DefaultParamEncoder value, HasField name model value, table ~ GetTableName model, HasQueryBuilder queryBuilderProvider joinRegister, Table model) => (Proxy name, value) -> queryBuilderProvider table -> queryBuilderProvider table
- filterWhereIMatches :: forall {k} (name :: Symbol) (table :: Symbol) model value queryBuilderProvider (joinRegister :: k). (KnownSymbol table, KnownSymbol name, DefaultParamEncoder value, HasField name model value, model ~ GetModelByTableName table, HasQueryBuilder queryBuilderProvider joinRegister, Table model) => (Proxy name, value) -> queryBuilderProvider table -> queryBuilderProvider table
- filterWherePast :: forall {k} (table :: Symbol) (name :: Symbol) value queryBuilderProvider (joinRegister :: k). (KnownSymbol table, KnownSymbol name, HasField name (GetModelByTableName table) value, HasQueryBuilder queryBuilderProvider joinRegister, Table (GetModelByTableName table)) => Proxy name -> queryBuilderProvider table -> queryBuilderProvider table
- filterWhereFuture :: forall {k} (table :: Symbol) (name :: Symbol) value queryBuilderProvider (joinRegister :: k). (KnownSymbol table, KnownSymbol name, HasField name (GetModelByTableName table) value, HasQueryBuilder queryBuilderProvider joinRegister, Table (GetModelByTableName table)) => Proxy name -> queryBuilderProvider table -> queryBuilderProvider table
- filterWhereGreaterThan :: forall {k} (name :: Symbol) (table :: Symbol) model value queryBuilderProvider (joinRegister :: k). (KnownSymbol table, KnownSymbol name, DefaultParamEncoder value, HasField name model value, model ~ GetModelByTableName table, HasQueryBuilder queryBuilderProvider joinRegister, Table model) => (Proxy name, value) -> queryBuilderProvider table -> queryBuilderProvider table
- filterWhereLarger :: forall {k} (name :: Symbol) (table :: Symbol) model value queryBuilderProvider (joinRegister :: k). (KnownSymbol table, KnownSymbol name, DefaultParamEncoder value, HasField name model value, model ~ GetModelByTableName table, HasQueryBuilder queryBuilderProvider joinRegister, Table model) => (Proxy name, value) -> queryBuilderProvider table -> queryBuilderProvider table
- filterWhereGreaterThanOrEqualTo :: forall {k} (name :: Symbol) (table :: Symbol) model value queryBuilderProvider (joinRegister :: k). (KnownSymbol table, KnownSymbol name, DefaultParamEncoder value, HasField name model value, model ~ GetModelByTableName table, HasQueryBuilder queryBuilderProvider joinRegister, Table model) => (Proxy name, value) -> queryBuilderProvider table -> queryBuilderProvider table
- filterWhereAtLeast :: forall {k} (name :: Symbol) (table :: Symbol) model value queryBuilderProvider (joinRegister :: k). (KnownSymbol table, KnownSymbol name, DefaultParamEncoder value, HasField name model value, model ~ GetModelByTableName table, HasQueryBuilder queryBuilderProvider joinRegister, Table model) => (Proxy name, value) -> queryBuilderProvider table -> queryBuilderProvider table
- filterWhereLessThan :: forall {k} (name :: Symbol) (table :: Symbol) model value queryBuilderProvider (joinRegister :: k). (KnownSymbol table, KnownSymbol name, DefaultParamEncoder value, HasField name model value, model ~ GetModelByTableName table, HasQueryBuilder queryBuilderProvider joinRegister, Table model) => (Proxy name, value) -> queryBuilderProvider table -> queryBuilderProvider table
- filterWhereSmaller :: forall {k} (name :: Symbol) (table :: Symbol) model value queryBuilderProvider (joinRegister :: k). (KnownSymbol table, KnownSymbol name, DefaultParamEncoder value, HasField name model value, model ~ GetModelByTableName table, HasQueryBuilder queryBuilderProvider joinRegister, Table model) => (Proxy name, value) -> queryBuilderProvider table -> queryBuilderProvider table
- filterWhereLessThanOrEqualTo :: forall {k} (name :: Symbol) (table :: Symbol) model value queryBuilderProvider (joinRegister :: k). (KnownSymbol table, KnownSymbol name, DefaultParamEncoder value, HasField name model value, model ~ GetModelByTableName table, HasQueryBuilder queryBuilderProvider joinRegister, Table model) => (Proxy name, value) -> queryBuilderProvider table -> queryBuilderProvider table
- filterWhereAtMost :: forall {k} (name :: Symbol) (table :: Symbol) model value queryBuilderProvider (joinRegister :: k). (KnownSymbol table, KnownSymbol name, DefaultParamEncoder value, HasField name model value, model ~ GetModelByTableName table, HasQueryBuilder queryBuilderProvider joinRegister, Table model) => (Proxy name, value) -> queryBuilderProvider table -> queryBuilderProvider table
- filterWhereSql :: forall {k} (name :: Symbol) (table :: Symbol) model value queryBuilderProvider (joinRegister :: k). (KnownSymbol table, KnownSymbol name, HasField name model value, model ~ GetModelByTableName table, HasQueryBuilder queryBuilderProvider joinRegister, Table model) => (Proxy name, Text) -> queryBuilderProvider table -> queryBuilderProvider table
- filterWhereJoinedTable :: forall {k1} model (name :: Symbol) (table :: Symbol) value queryBuilderProvider (joinRegister :: k1) (table' :: Symbol). (KnownSymbol table, KnownSymbol name, DefaultParamEncoder value, HasField name model value, EqOrIsOperator value, table ~ GetTableName model, HasQueryBuilder queryBuilderProvider joinRegister, IsJoined model joinRegister, Table model) => (Proxy name, value) -> queryBuilderProvider table' -> queryBuilderProvider table'
- filterWhereCaseInsensitiveJoinedTable :: forall {k1} model (name :: Symbol) (table :: Symbol) value queryBuilderProvider (joinRegister :: k1) (table' :: Symbol). (KnownSymbol table, KnownSymbol name, DefaultParamEncoder value, HasField name model value, EqOrIsOperator value, table ~ GetTableName model, HasQueryBuilder queryBuilderProvider joinRegister, IsJoined model joinRegister, Table model) => (Proxy name, value) -> queryBuilderProvider table' -> queryBuilderProvider table'
- filterWhereNotJoinedTable :: forall {k1} model (name :: Symbol) (table :: Symbol) value queryBuilderProvider (joinRegister :: k1) (table' :: Symbol). (KnownSymbol table, KnownSymbol name, DefaultParamEncoder value, HasField name model value, EqOrIsOperator value, table ~ GetTableName model, HasQueryBuilder queryBuilderProvider joinRegister, IsJoined model joinRegister, Table model) => (Proxy name, value) -> queryBuilderProvider table' -> queryBuilderProvider table'
- filterWhereInJoinedTable :: forall {k1} model (name :: Symbol) (table :: Symbol) value queryBuilderProvider (joinRegister :: k1) (table' :: Symbol). (KnownSymbol table, KnownSymbol name, DefaultParamEncoder [value], HasField name model value, table ~ GetTableName model, HasQueryBuilder queryBuilderProvider joinRegister, IsJoined model joinRegister, Table model) => (Proxy name, [value]) -> queryBuilderProvider table' -> queryBuilderProvider table'
- filterWhereNotInJoinedTable :: forall {k1} model (name :: Symbol) (table :: Symbol) value queryBuilderProvider (joinRegister :: k1) (table' :: Symbol). (KnownSymbol table, KnownSymbol name, DefaultParamEncoder [value], HasField name model value, table ~ GetTableName model, HasQueryBuilder queryBuilderProvider joinRegister, IsJoined model joinRegister, Table model) => (Proxy name, [value]) -> queryBuilderProvider table' -> queryBuilderProvider table'
- filterWhereLikeJoinedTable :: forall {k1} model (name :: Symbol) (table :: Symbol) value queryBuilderProvider (joinRegister :: k1) (table' :: Symbol). (KnownSymbol name, KnownSymbol table, table ~ GetTableName model, DefaultParamEncoder value, HasField name model value, model ~ GetModelByTableName table, HasQueryBuilder queryBuilderProvider joinRegister, IsJoined model joinRegister, Table model) => (Proxy name, value) -> queryBuilderProvider table' -> queryBuilderProvider table'
- filterWhereILikeJoinedTable :: forall {k1} model (table :: Symbol) (name :: Symbol) (table' :: Symbol) model' value queryBuilderProvider (joinRegister :: k1). (KnownSymbol table, KnownSymbol name, DefaultParamEncoder value, HasField name model value, table ~ GetTableName model, model' ~ GetModelByTableName table', HasQueryBuilder queryBuilderProvider joinRegister, IsJoined model joinRegister, Table model) => (Proxy name, value) -> queryBuilderProvider table' -> queryBuilderProvider table'
- filterWhereMatchesJoinedTable :: forall {k1} model (table :: Symbol) (name :: Symbol) value queryBuilderProvider (joinRegister :: k1) (table' :: Symbol). (KnownSymbol table, KnownSymbol name, DefaultParamEncoder value, HasField name model value, table ~ GetTableName model, HasQueryBuilder queryBuilderProvider joinRegister, IsJoined model joinRegister, Table model) => (Proxy name, value) -> queryBuilderProvider table' -> queryBuilderProvider table'
- filterWhereIMatchesJoinedTable :: forall {k1} model (table :: Symbol) (name :: Symbol) value queryBuilderProvider (joinRegister :: k1) (table' :: Symbol). (KnownSymbol table, KnownSymbol name, DefaultParamEncoder value, HasField name model value, table ~ GetTableName model, HasQueryBuilder queryBuilderProvider joinRegister, IsJoined model joinRegister, Table model) => (Proxy name, value) -> queryBuilderProvider table' -> queryBuilderProvider table'
Documentation
filterWhere :: forall {k} (name :: Symbol) (table :: Symbol) model value queryBuilderProvider (joinRegister :: k). (KnownSymbol table, KnownSymbol name, DefaultParamEncoder value, HasField name model value, EqOrIsOperator value, model ~ GetModelByTableName table, HasQueryBuilder queryBuilderProvider joinRegister, Table model) => (Proxy name, value) -> queryBuilderProvider table -> queryBuilderProvider table Source #
Adds a simple WHERE x = y condition to the query.
Example: Only show projects where active is True.
activeProjects <- query @Project
|> filterWhere (#active, True)
|> fetch
-- SELECT * FROM projects WHERE active = TrueExample: Find book with title Learn you a Haskell.
book <- query @Book
|> filterWhere (#title, "Learn you a Haskell")
|> fetchOne
-- SELECT * FROM books WHERE name = 'Learn you a Haskell' LIMIT 1Example: Find active projects owned by the current user.
projects <- query @Project
|> filterWhere (#active, True)
|> filterWhere (#currentUserId, currentUserId)
|> fetch
-- SELECT * FROM projects WHERE active = true AND current_user_id = '..'For dynamic conditions (e.g. involving NOW()), see filterWhereSql.
For WHERE x IN (a, b, c) conditions, take a look at filterWhereIn and filterWhereNotIn.
For WHERE x LIKE a or WHERE x ~ a conditions, see filterWhereLike and filterWhereMatches respectively.
For case-insensitive versions of these operators, see filterWhereILike and filterWhereIMatches.
When your condition is too complex, use a raw sql query with sqlQuery.
filterWhereCaseInsensitive :: forall {k} (name :: Symbol) (table :: Symbol) model value queryBuilderProvider (joinRegister :: k). (KnownSymbol table, KnownSymbol name, DefaultParamEncoder value, HasField name model value, EqOrIsOperator value, model ~ GetModelByTableName table, HasQueryBuilder queryBuilderProvider joinRegister, Table model) => (Proxy name, value) -> queryBuilderProvider table -> queryBuilderProvider table Source #
Adds a WHERE LOWER(x) = LOWER(y) condition to the query.
Example: Get a user by an email address, ignoring case
user <- query @User
|> filterWhereCaseInsensitive (#email, "marc@digitallyinduced.com")
|> fetchOne
-- SELECT * FROM users WHERE LOWER(email) = 'marc@digitallyinduced.com'For high performance it's best to have an index for LOWER(field) in your Schema.sql
>>>CREATE UNIQUE INDEX users_email_index ON users ((LOWER(email)));
filterWhereNot :: forall (name :: Symbol) (table :: Symbol) model value. (KnownSymbol table, KnownSymbol name, DefaultParamEncoder value, HasField name model value, EqOrIsOperator value, model ~ GetModelByTableName table, Table model) => (Proxy name, value) -> QueryBuilder table -> QueryBuilder table Source #
Like filterWhere but negates the condition.
Example: Only show projects created by other users.
activeProjects <- query @Project
|> filterWhereNot (#userId, currentUserId)
|> fetch
-- SELECT * FROM projects WHERE user_id != '23d5ea33-b28e-4f0a-99b3-77a3564a2546'filterWhereIn :: forall (name :: Symbol) (table :: Symbol) model value queryBuilderProvider joinRegister. (KnownSymbol table, KnownSymbol name, DefaultParamEncoder [value], DefaultParamEncoder value, HasField name model value, model ~ GetModelByTableName table, HasQueryBuilder queryBuilderProvider joinRegister, EqOrIsOperator value, Table model) => (Proxy name, [value]) -> queryBuilderProvider table -> queryBuilderProvider table Source #
Adds a WHERE x IN (y) condition to the query.
Example: Only show projects where status is Draft or Active.
visibleProjects <- query @Project
|> filterWhereIn (#status, [Draft, Active])
|> fetch
-- SELECT * FROM projects WHERE status IN ('draft', 'active')For negation use filterWhereNotIn
filterWhereInCaseInsensitive :: forall (name :: Symbol) (table :: Symbol) model value queryBuilderProvider joinRegister. (KnownSymbol table, KnownSymbol name, DefaultParamEncoder value, HasField name model value, model ~ GetModelByTableName table, HasQueryBuilder queryBuilderProvider joinRegister, EqOrIsOperator value, Table model) => (Proxy name, [Text]) -> queryBuilderProvider table -> queryBuilderProvider table Source #
filterWhereIdIn :: forall (table :: Symbol) model queryBuilderProvider joinRegister. (KnownSymbol table, Table model, model ~ GetModelByTableName table, HasQueryBuilder queryBuilderProvider joinRegister, DefaultParamEncoder [PrimaryKey (GetTableName model)]) => [Id model] -> queryBuilderProvider table -> queryBuilderProvider table Source #
filterWhereNotIn :: forall {k} (name :: Symbol) (table :: Symbol) model value queryBuilderProvider (joinRegister :: k). (KnownSymbol table, KnownSymbol name, DefaultParamEncoder [value], DefaultParamEncoder value, HasField name model value, model ~ GetModelByTableName table, HasQueryBuilder queryBuilderProvider joinRegister, EqOrIsOperator value) => (Proxy name, [value]) -> queryBuilderProvider table -> queryBuilderProvider table Source #
Adds a WHERE x NOT IN (y) condition to the query.
Example: Only show projects where status is not Archived
visibleProjects <- query @Project
|> filterWhereNotIn (#status, [Archived])
|> fetch
-- SELECT * FROM projects WHERE status NOT IN ('archived')The inclusive version of this function is called filterWhereIn.
filterWhereLike :: forall {k} (name :: Symbol) (table :: Symbol) model value queryBuilderProvider (joinRegister :: k). (KnownSymbol table, KnownSymbol name, DefaultParamEncoder value, HasField name model value, model ~ GetModelByTableName table, HasQueryBuilder queryBuilderProvider joinRegister, Table model) => (Proxy name, value) -> queryBuilderProvider table -> queryBuilderProvider table Source #
Adds a WHERE x LIKE y condition to the query.
Example: Find titles matching search term.
articles <- query @Article
|> filterWhereLike (#title, "%" <> searchTerm <> "%")
|> fetch
-- SELECT * FROM articles WHERE title LIKE '%..%'filterWhereILike :: forall {k} (name :: Symbol) (table :: Symbol) model value queryBuilderProvider (joinRegister :: k). (KnownSymbol table, KnownSymbol name, DefaultParamEncoder value, HasField name model value, model ~ GetModelByTableName table, HasQueryBuilder queryBuilderProvider joinRegister, Table model) => (Proxy name, value) -> queryBuilderProvider table -> queryBuilderProvider table Source #
Adds a WHERE x ILIKE y condition to the query. Case-insensitive version of filterWhereLike.
Example: Find titles matching search term.
articles <- query @Article
|> filterWhereILike (#title, "%" <> searchTerm <> "%")
|> fetch
-- SELECT * FROM articles WHERE title ILIKE '%..%'filterWhereMatches :: forall {k} (name :: Symbol) (table :: Symbol) model value queryBuilderProvider (joinRegister :: k). (KnownSymbol table, KnownSymbol name, DefaultParamEncoder value, HasField name model value, table ~ GetTableName model, HasQueryBuilder queryBuilderProvider joinRegister, Table model) => (Proxy name, value) -> queryBuilderProvider table -> queryBuilderProvider table Source #
Adds a WHERE x ~ y condition to the query.
Example: Find names with titles in front.
articles <- query @User
|> filterWhereMatches (#name, "^(M(rs|r|iss)|Dr|Sir). ")
|> fetch
-- SELECT * FROM articles WHERE title ~ '^(M(rs|r|iss)|Dr|Sir). 'filterWhereIMatches :: forall {k} (name :: Symbol) (table :: Symbol) model value queryBuilderProvider (joinRegister :: k). (KnownSymbol table, KnownSymbol name, DefaultParamEncoder value, HasField name model value, model ~ GetModelByTableName table, HasQueryBuilder queryBuilderProvider joinRegister, Table model) => (Proxy name, value) -> queryBuilderProvider table -> queryBuilderProvider table Source #
Adds a WHERE x ~* y condition to the query. Case-insensitive version of filterWhereMatches.
filterWherePast :: forall {k} (table :: Symbol) (name :: Symbol) value queryBuilderProvider (joinRegister :: k). (KnownSymbol table, KnownSymbol name, HasField name (GetModelByTableName table) value, HasQueryBuilder queryBuilderProvider joinRegister, Table (GetModelByTableName table)) => Proxy name -> queryBuilderProvider table -> queryBuilderProvider table Source #
Filter all rows by whether a field is in the past, determined by comparing 'NOW()' to the field's value.
Opposite of filterWhereFuture
Example: Fetch all posts scheduled for the past.
publicPosts <- query @Post
|> filterWherePast #scheduledAt
|> fetch
-- SELECT * FROM posts WHERE scheduled_at <= NOW()filterWhereFuture :: forall {k} (table :: Symbol) (name :: Symbol) value queryBuilderProvider (joinRegister :: k). (KnownSymbol table, KnownSymbol name, HasField name (GetModelByTableName table) value, HasQueryBuilder queryBuilderProvider joinRegister, Table (GetModelByTableName table)) => Proxy name -> queryBuilderProvider table -> queryBuilderProvider table Source #
Filter all rows by whether a field is in the future, determined by comparing 'NOW()' to the field's value.
Opposite of filterWherePast
Example: Fetch all posts scheduled for the future.
hiddenPosts <- query @Post
|> filterWhereFuture #scheduledAt
|> fetch
-- SELECT * FROM posts WHERE scheduled_at > NOW()filterWhereGreaterThan :: forall {k} (name :: Symbol) (table :: Symbol) model value queryBuilderProvider (joinRegister :: k). (KnownSymbol table, KnownSymbol name, DefaultParamEncoder value, HasField name model value, model ~ GetModelByTableName table, HasQueryBuilder queryBuilderProvider joinRegister, Table model) => (Proxy name, value) -> queryBuilderProvider table -> queryBuilderProvider table Source #
Adds a WHERE x > y condition to the query.
Example: Find assignments with grade greater than 80.
greatAssignments <- query @Assignment
|> filterWhereGreaterThan (#grade, 80)
|> fetch
-- SELECT * FROM assignments WHERE grade > 80See also: filterWhereLarger, filterWhereGreaterThanOrEqualTo, filterWhereAtLeast
filterWhereLarger :: forall {k} (name :: Symbol) (table :: Symbol) model value queryBuilderProvider (joinRegister :: k). (KnownSymbol table, KnownSymbol name, DefaultParamEncoder value, HasField name model value, model ~ GetModelByTableName table, HasQueryBuilder queryBuilderProvider joinRegister, Table model) => (Proxy name, value) -> queryBuilderProvider table -> queryBuilderProvider table Source #
Alias for filterWhereGreaterThan. Adds a WHERE x > y condition to the query.
Example: Find assignments with grade larger than 80.
greatAssignments <- query @Assignment
|> filterWhereLarger (#grade, 80)
|> fetch
-- SELECT * FROM assignments WHERE grade > 80filterWhereGreaterThanOrEqualTo :: forall {k} (name :: Symbol) (table :: Symbol) model value queryBuilderProvider (joinRegister :: k). (KnownSymbol table, KnownSymbol name, DefaultParamEncoder value, HasField name model value, model ~ GetModelByTableName table, HasQueryBuilder queryBuilderProvider joinRegister, Table model) => (Proxy name, value) -> queryBuilderProvider table -> queryBuilderProvider table Source #
Adds a WHERE x >= y condition to the query.
Example: Find assignments with grade at least 80.
greatAssignments <- query @Assignment
|> filterWhereGreaterThanOrEqualTo (#grade, 80)
|> fetch
-- SELECT * FROM assignments WHERE grade >= 80See also: filterWhereAtLeast, filterWhereGreaterThan, filterWhereLarger
filterWhereAtLeast :: forall {k} (name :: Symbol) (table :: Symbol) model value queryBuilderProvider (joinRegister :: k). (KnownSymbol table, KnownSymbol name, DefaultParamEncoder value, HasField name model value, model ~ GetModelByTableName table, HasQueryBuilder queryBuilderProvider joinRegister, Table model) => (Proxy name, value) -> queryBuilderProvider table -> queryBuilderProvider table Source #
Alias for filterWhereGreaterThanOrEqualTo. Adds a WHERE x >= y condition to the query.
Example: Find assignments with grade at least 80.
greatAssignments <- query @Assignment
|> filterWhereAtLeast (#grade, 80)
|> fetch
-- SELECT * FROM assignments WHERE grade >= 80filterWhereLessThan :: forall {k} (name :: Symbol) (table :: Symbol) model value queryBuilderProvider (joinRegister :: k). (KnownSymbol table, KnownSymbol name, DefaultParamEncoder value, HasField name model value, model ~ GetModelByTableName table, HasQueryBuilder queryBuilderProvider joinRegister, Table model) => (Proxy name, value) -> queryBuilderProvider table -> queryBuilderProvider table Source #
Adds a WHERE x < y condition to the query.
Example: Find assignments with grade less than 60.
poorAssignments <- query @Assignment
|> filterWhereLessThan (#grade, 60)
|> fetch
-- SELECT * FROM assignments WHERE grade < 60See also: filterWhereSmaller, filterWhereLessThanOrEqualTo, filterWhereAtMost
filterWhereSmaller :: forall {k} (name :: Symbol) (table :: Symbol) model value queryBuilderProvider (joinRegister :: k). (KnownSymbol table, KnownSymbol name, DefaultParamEncoder value, HasField name model value, model ~ GetModelByTableName table, HasQueryBuilder queryBuilderProvider joinRegister, Table model) => (Proxy name, value) -> queryBuilderProvider table -> queryBuilderProvider table Source #
Alias for filterWhereLessThan. Adds a WHERE x < y condition to the query.
Example: Find assignments with grade smaller than 60.
poorAssignments <- query @Assignment
|> filterWhereSmaller (#grade, 60)
|> fetch
-- SELECT * FROM assignments WHERE grade < 60filterWhereLessThanOrEqualTo :: forall {k} (name :: Symbol) (table :: Symbol) model value queryBuilderProvider (joinRegister :: k). (KnownSymbol table, KnownSymbol name, DefaultParamEncoder value, HasField name model value, model ~ GetModelByTableName table, HasQueryBuilder queryBuilderProvider joinRegister, Table model) => (Proxy name, value) -> queryBuilderProvider table -> queryBuilderProvider table Source #
Adds a WHERE x <= y condition to the query.
Example: Find assignments with grade at most 60.
poorAssignments <- query @Assignment
|> filterWhereLessThanOrEqualTo (#grade, 60)
|> fetch
-- SELECT * FROM assignments WHERE grade <= 60See also: filterWhereAtMost, filterWhereLessThan, filterWhereSmaller
filterWhereAtMost :: forall {k} (name :: Symbol) (table :: Symbol) model value queryBuilderProvider (joinRegister :: k). (KnownSymbol table, KnownSymbol name, DefaultParamEncoder value, HasField name model value, model ~ GetModelByTableName table, HasQueryBuilder queryBuilderProvider joinRegister, Table model) => (Proxy name, value) -> queryBuilderProvider table -> queryBuilderProvider table Source #
Alias for filterWhereLessThanOrEqualTo. Adds a WHERE x <= y condition to the query.
Example: Find assignments with grade at most 60.
poorAssignments <- query @Assignment
|> filterWhereAtMost (#grade, 60)
|> fetch
-- SELECT * FROM assignments WHERE grade <= 60filterWhereSql :: forall {k} (name :: Symbol) (table :: Symbol) model value queryBuilderProvider (joinRegister :: k). (KnownSymbol table, KnownSymbol name, HasField name model value, model ~ GetModelByTableName table, HasQueryBuilder queryBuilderProvider joinRegister, Table model) => (Proxy name, Text) -> queryBuilderProvider table -> queryBuilderProvider table Source #
Allows to add a custom raw sql where condition
If your query cannot be represented with filterWhereSql, take a look at sqlQuery.
Example: Fetching all projects created in the last 24 hours.
latestProjects <- query @Project
|> filterWhereSql (#startedAt, "< current_timestamp - interval '1 day'")
|> fetch
-- SELECT * FROM projects WHERE started_at < current_timestamp - interval '1 day'Joined table variants
filterWhereJoinedTable :: forall {k1} model (name :: Symbol) (table :: Symbol) value queryBuilderProvider (joinRegister :: k1) (table' :: Symbol). (KnownSymbol table, KnownSymbol name, DefaultParamEncoder value, HasField name model value, EqOrIsOperator value, table ~ GetTableName model, HasQueryBuilder queryBuilderProvider joinRegister, IsJoined model joinRegister, Table model) => (Proxy name, value) -> queryBuilderProvider table' -> queryBuilderProvider table' Source #
Like filterWhere, but takes a type argument specifying the table which holds the column that is to be compared. The column must have been joined before using innerJoin or innerJoinThirdTable. Example:
Example: get posts by user Tom.
tomPosts <- query @Post
|> innerJoin @User (#createdBy, #id)
|> filterWhereJoinedTable @User (#name, "Tom" :: Text)
|> fetch
-- SELECT posts.* FROM posts INNER JOIN users ON posts.created_by = users.id WHERE users.name = 'Tom'filterWhereCaseInsensitiveJoinedTable :: forall {k1} model (name :: Symbol) (table :: Symbol) value queryBuilderProvider (joinRegister :: k1) (table' :: Symbol). (KnownSymbol table, KnownSymbol name, DefaultParamEncoder value, HasField name model value, EqOrIsOperator value, table ~ GetTableName model, HasQueryBuilder queryBuilderProvider joinRegister, IsJoined model joinRegister, Table model) => (Proxy name, value) -> queryBuilderProvider table' -> queryBuilderProvider table' Source #
Like filterWhereJoinedTable, but adds a WHERE LOWER(x) = LOWER(y) condition to the query. Example:
Example: get posts by user Tom, ignoring case.
tomPosts <- query @Post
|> innerJoin @User (#createdBy, #id)
|> filterWhereCaseInsensitiveJoinedTable @User (#name, "Tom" :: Text)
|> fetch
-- SELECT posts.* FROM posts INNER JOIN users ON posts.created_by = users.id WHERE LOWER(users.name) = LOWER('Tom')filterWhereNotJoinedTable :: forall {k1} model (name :: Symbol) (table :: Symbol) value queryBuilderProvider (joinRegister :: k1) (table' :: Symbol). (KnownSymbol table, KnownSymbol name, DefaultParamEncoder value, HasField name model value, EqOrIsOperator value, table ~ GetTableName model, HasQueryBuilder queryBuilderProvider joinRegister, IsJoined model joinRegister, Table model) => (Proxy name, value) -> queryBuilderProvider table' -> queryBuilderProvider table' Source #
Like filterWhereNotJoinedTable but negates the condition.
Example: Only show projects not created by user Tom.
tomPosts <- query @Post
|> innerJoin @User (#createdBy, #id)
|> filterWhereNotJoinedTable @User (#name, "Tom" :: Text)
|> fetch
-- SELECT posts.* FROM posts INNER JOIN users ON posts.created_by = users.id WHERE users.name = 'Tom'filterWhereInJoinedTable :: forall {k1} model (name :: Symbol) (table :: Symbol) value queryBuilderProvider (joinRegister :: k1) (table' :: Symbol). (KnownSymbol table, KnownSymbol name, DefaultParamEncoder [value], HasField name model value, table ~ GetTableName model, HasQueryBuilder queryBuilderProvider joinRegister, IsJoined model joinRegister, Table model) => (Proxy name, [value]) -> queryBuilderProvider table' -> queryBuilderProvider table' Source #
Like filterWhereIn, but takes a type argument specifying the table which holds the column that is compared. The table needs to have been joined before using innerJoin or innerJoinThirdTable.
Example: get posts by Tom and Tim.
tomOrTimPosts <- query @Post
|> innerJoin @User (#createdBy, #id)
|> filterWhereInJoinedTable @User (#name, ["Tom","Tim"])
|> fetch
-- SELECT posts.* FROM posts INNER JOIN users ON posts.created_by = users.id WHERE users.name IN ('Tom', 'Tim')filterWhereNotInJoinedTable :: forall {k1} model (name :: Symbol) (table :: Symbol) value queryBuilderProvider (joinRegister :: k1) (table' :: Symbol). (KnownSymbol table, KnownSymbol name, DefaultParamEncoder [value], HasField name model value, table ~ GetTableName model, HasQueryBuilder queryBuilderProvider joinRegister, IsJoined model joinRegister, Table model) => (Proxy name, [value]) -> queryBuilderProvider table' -> queryBuilderProvider table' Source #
Like filterWhereNotIn, but takes a type argument specifying the table which holds the column that is compared. The table needs to have been joined before using innerJoin or innerJoinThirdTable.
Example: get posts by users not named Tom or Tim.
notTomOrTimPosts <- query @Post
|> innerJoin @User (#createdBy, #id)
|> filterWhereNotInJoinedTable @User (#name, ["Tom","Tim"])
|> fetch
-- SELECT posts.* FROM posts INNER JOIN users ON posts.created_by = users.id WHERE users.name NOT IN ('Tom', 'Tim')filterWhereLikeJoinedTable :: forall {k1} model (name :: Symbol) (table :: Symbol) value queryBuilderProvider (joinRegister :: k1) (table' :: Symbol). (KnownSymbol name, KnownSymbol table, table ~ GetTableName model, DefaultParamEncoder value, HasField name model value, model ~ GetModelByTableName table, HasQueryBuilder queryBuilderProvider joinRegister, IsJoined model joinRegister, Table model) => (Proxy name, value) -> queryBuilderProvider table' -> queryBuilderProvider table' Source #
Like filterWhereLike, but takes a type argument specifying the table which holds the column that is compared. The table needs to have been joined before using innerJoin or innerJoinThirdTable.
Example: Serach for Posts by users whose name contains "olaf" (case insensitive)
olafPosts <- query @Post
|> innerJoin @User (#createdBy, #id)
|> filterWhereLikeJoinedTable @User (#name, "%Olaf%")
|> fetch
-- SELECT posts.* FROM posts INNER JOIN users ON posts.created_by = users.id WHERE users.name LIKE '%Olaf%'filterWhereILikeJoinedTable :: forall {k1} model (table :: Symbol) (name :: Symbol) (table' :: Symbol) model' value queryBuilderProvider (joinRegister :: k1). (KnownSymbol table, KnownSymbol name, DefaultParamEncoder value, HasField name model value, table ~ GetTableName model, model' ~ GetModelByTableName table', HasQueryBuilder queryBuilderProvider joinRegister, IsJoined model joinRegister, Table model) => (Proxy name, value) -> queryBuilderProvider table' -> queryBuilderProvider table' Source #
Like filterWhereILike; case-insensitive version of filterWhereLikeJoinedTable, takes a type argument specifying the table which holds the column that is compared. The table needs to have been joined before using innerJoin or innerJoinThirdTable.
Example: Serach for Posts by users whose name contains "olaf" (case insensitive)
olafPosts <- query @Post
|> innerJoin User (#createdBy, #id)
|> filterWhereILikeJoinedTable User (#name, "%Olaf%")
> -- SELECT posts.* FROM posts INNER JOIN users ON posts.created_by = users.id WHERE users.name ILIKE '%Olaf%'
filterWhereMatchesJoinedTable :: forall {k1} model (table :: Symbol) (name :: Symbol) value queryBuilderProvider (joinRegister :: k1) (table' :: Symbol). (KnownSymbol table, KnownSymbol name, DefaultParamEncoder value, HasField name model value, table ~ GetTableName model, HasQueryBuilder queryBuilderProvider joinRegister, IsJoined model joinRegister, Table model) => (Proxy name, value) -> queryBuilderProvider table' -> queryBuilderProvider table' Source #
Adds a WHERE x ~ y condition to the query, where the column x is held by a joined table.
Example: Find Posts by people with names with titles in front.
articles <- query @Post
|> innerJoin @User (#createdBy, #id)
|> filterWhereMatchesJoinedTable (#title, "^(M(rs|r|iss|s)|Dr|Sir). ")
|> fetch
-- SELECT posts.* FROM posts INNER JOIN users ON posts.created_by = users.id WHERE users.title ~ '^(M(rs|r|iss|s)|Dr|Sir). 'filterWhereIMatchesJoinedTable :: forall {k1} model (table :: Symbol) (name :: Symbol) value queryBuilderProvider (joinRegister :: k1) (table' :: Symbol). (KnownSymbol table, KnownSymbol name, DefaultParamEncoder value, HasField name model value, table ~ GetTableName model, HasQueryBuilder queryBuilderProvider joinRegister, IsJoined model joinRegister, Table model) => (Proxy name, value) -> queryBuilderProvider table' -> queryBuilderProvider table' Source #
Case-insensitive version of filterWhereMatchesJoinedTable