Overview
TheIHP.QueryBuilder module provides a type-safe, composable way to build SQL queries. It’s the foundation for querying your database in IHP applications.
Key features:
- Type-safe query construction
- Composable query builders using the
|>operator - Support for filtering, ordering, pagination, and joins
- Compile-time guarantees for query correctness
sqlQuery from IHP.ModelSupport.
Creating Queries
Create a new query builder.
Fetching Results
Fetch multiple rows.
Fetch a single row. Throws an error if no record is found.
Fetch a single row or Nothing if not found.
Filtering
Basic Filters
filterWhere
(KnownSymbol field, ToField value) => (Proxy field, value) -> QueryBuilder table -> QueryBuilder table
Add a WHERE condition.
filterWhereNot
(KnownSymbol field, ToField value) => (Proxy field, value) -> QueryBuilder table -> QueryBuilder table
Add a negated WHERE condition.
filterWhereCaseInsensitive
(KnownSymbol field, ToField value) => (Proxy field, value) -> QueryBuilder table -> QueryBuilder table
Case-insensitive WHERE condition.
Range Filters
filterWhereIn
(KnownSymbol field, ToField value) => (Proxy field, [value]) -> QueryBuilder table -> QueryBuilder table
Filter by a list of values (IN clause).
filterWhereNotIn
(KnownSymbol field, ToField value) => (Proxy field, [value]) -> QueryBuilder table -> QueryBuilder table
Filter by excluded values (NOT IN clause).
Filter by a list of IDs.
Pattern Matching
filterWhereLike
(KnownSymbol field) => (Proxy field, Text) -> QueryBuilder table -> QueryBuilder table
SQL LIKE pattern matching (case-sensitive).
filterWhereILike
(KnownSymbol field) => (Proxy field, Text) -> QueryBuilder table -> QueryBuilder table
SQL ILIKE pattern matching (case-insensitive).
Comparison Filters
filterWhereGreaterThan
(KnownSymbol field, ToField value) => (Proxy field, value) -> QueryBuilder table -> QueryBuilder table
Filter by greater than.
filterWhereGreaterThanOrEqualTo
(KnownSymbol field, ToField value) => (Proxy field, value) -> QueryBuilder table -> QueryBuilder table
Filter by greater than or equal to.
filterWhereLessThan
(KnownSymbol field, ToField value) => (Proxy field, value) -> QueryBuilder table -> QueryBuilder table
Filter by less than.
filterWhereLessThanOrEqualTo
(KnownSymbol field, ToField value) => (Proxy field, value) -> QueryBuilder table -> QueryBuilder table
Filter by less than or equal to.
Time-based Filters
Filter for dates in the past.
Filter for dates in the future.
Custom SQL Filters
Add a custom SQL WHERE condition.
Ordering
Order by a field (ascending by default).
Order by a field in ascending order.
Order by a field in descending order.
Pagination
Limit the number of results.
Skip a number of results.
Deduplication
Remove duplicate rows.
Remove duplicates based on a specific field.
Joins
innerJoin
QueryBuilder left -> Proxy rightTable -> Proxy leftField -> Proxy rightField -> QueryBuilder (left, right)
Perform an inner join.
innerJoinThirdTable
QueryBuilder (a, b) -> Proxy thirdTable -> Proxy field1 -> Proxy field2 -> QueryBuilder (a, b, c)
Join a third table to an existing join.
Filtering on Joined Tables
filterWhereJoinedTable
Proxy table -> (Proxy field, value) -> QueryBuilder joined -> QueryBuilder joined
Filter on a joined table.
Order by a field in a joined table.
Unions
Combine two queries with UNION.
Combine multiple queries with OR logic.
SQL Compilation
Compile a query to SQL and parameters.
Compile to a Hasql statement.