Filters#
Composable SQL statement filters for building WHERE clauses, pagination,
ordering, and search conditions. Filters can be applied to any SQL statement
via apply_filter().
Filter Functions#
- sqlspec.core.filters.apply_filter(statement, filter_obj)[source]#
Apply a statement filter to a SQL query object.
- Parameters:
filter_obj¶ (
StatementFilter) -- The filter to apply.
- Return type:
- Returns:
The modified query object.
- sqlspec.core.filters.canonicalize_filters(filters)[source]#
Deduplicate and sort filters by type and field name for consistent hashing.
- Parameters:
filters¶ (
Sequence[StatementFilter]) -- Sequence of StatementFilter objects- Return type:
- Returns:
Canonically sorted tuple of unique filters
Base#
- class sqlspec.core.filters.StatementFilter[source]#
Bases:
objectAbstract base class for filters that can be appended to a statement.
- __eq__(other)[source]#
Compare filters by their cache key for round-trip and deduplication checks.
- Return type:
- __hash__()[source]#
Hash via the canonical filter key so unhashable members are normalized.
- Return type:
- abstractmethod append_to_statement(statement)[source]#
Append the filter to the statement.
This method modifies the SQL expression and adds parameters via
add_named_parameter()on the returned statement.- Return type:
- extract_parameters()[source]#
Return the parameters this filter would contribute.
This is an introspection helper and is not called during the normal filter-application path (
append_to_statementhandles both expression modification and parameter addition).- Returns:
positional_parameters: List of positional parameter values
named_parameters: Dict of parameter name to value
- Return type:
Tuple of (positional_parameters, named_parameters) where
- class sqlspec.core.filters.PaginationFilter[source]#
Bases:
StatementFilterBase class for pagination-related filters.
Value and Choice Filters#
- class sqlspec.core.filters.BooleanFilter[source]#
Bases:
StatementFilterFilter for boolean comparison queries.
Constructs WHERE field_name = :param clauses.
- class sqlspec.core.filters.ChoicesFilter[source]#
Bases:
InCollectionFilter[T]Filter for field matching a defined set of choice values.
Constructs WHERE ... IN (...) clauses.
Date Filters#
- class sqlspec.core.filters.BeforeAfterFilter[source]#
Bases:
_DatetimeBoundFilterFilter for datetime range queries.
Applies WHERE clauses for before/after datetime filtering.
- __eq__(other)#
Compare filters by their cache key for round-trip and deduplication checks.
- Return type:
- __hash__()#
Hash via the canonical filter key so unhashable members are normalized.
- Return type:
- __reduce__()#
Reconstruct via
cls(*ctor_args)— works on mypyc native classes.
- extract_parameters()#
Extract filter parameters.
- get_cache_key()#
Return cache key for this filter configuration.
- class sqlspec.core.filters.OnBeforeAfterFilter[source]#
Bases:
_DatetimeBoundFilterFilter for inclusive datetime range queries.
Applies WHERE clauses for on-or-before/on-or-after datetime filtering.
- __eq__(other)#
Compare filters by their cache key for round-trip and deduplication checks.
- Return type:
- __hash__()#
Hash via the canonical filter key so unhashable members are normalized.
- Return type:
- __reduce__()#
Reconstruct via
cls(*ctor_args)— works on mypyc native classes.
- extract_parameters()#
Extract filter parameters.
- get_cache_key()#
Return cache key for this filter configuration.
Collection Filters#
- class sqlspec.core.filters.InAnyFilter[source]#
Bases:
StatementFilter,Generic[T]Base class for collection-based filters that support ANY operations.
- class sqlspec.core.filters.InCollectionFilter[source]#
Bases:
InAnyFilter[T]Filter for IN clause queries.
Constructs WHERE ... IN (...) clauses.
- class sqlspec.core.filters.NotInCollectionFilter[source]#
Bases:
InAnyFilter[T]Filter for NOT IN clause queries.
Constructs WHERE ... NOT IN (...) clauses.
- class sqlspec.core.filters.AnyCollectionFilter[source]#
Bases:
InAnyFilter[T]Filter for PostgreSQL-style ANY clause queries.
Constructs WHERE column_name = ANY (array_expression) clauses.
- class sqlspec.core.filters.NotAnyCollectionFilter[source]#
Bases:
InAnyFilter[T]Filter for PostgreSQL-style NOT ANY clause queries.
Constructs WHERE NOT (column_name = ANY (array_expression)) clauses.
Null Filters#
- class sqlspec.core.filters.NullFilter[source]#
Bases:
StatementFilterFilter for IS NULL queries.
Constructs WHERE field_name IS NULL clauses.
- class sqlspec.core.filters.NotNullFilter[source]#
Bases:
StatementFilterFilter for IS NOT NULL queries.
Constructs WHERE field_name IS NOT NULL clauses.
- extract_parameters()[source]#
Extract filter parameters.
Returns empty parameters since IS NOT NULL requires no values.
Pagination#
- class sqlspec.core.filters.LimitOffsetFilter[source]#
Bases:
PaginationFilterFilter for LIMIT and OFFSET clauses.
Adds pagination support through LIMIT/OFFSET SQL clauses.
- class sqlspec.core.filters.OffsetPagination[source]#
Bases:
Generic[T]Container for data returned using limit/offset pagination.
- Parameters:
- __init__(items, limit, offset, total)#
- class sqlspec.core.filters.CursorFilter[source]#
Bases:
PaginationFilterPaginate by ordered keys whose last key uniquely identifies each row.
Replaces ORDER BY, LIMIT, and OFFSET and fetches
limit + 1rows. Assemble results withbuild_page()or the service'spaginate(). Apply this filter last so other filters constrain the inner query when grouping or set operations require wrapping.paginate()enforces that order automatically.- Parameters:
keys¶ (
str|Sequence[CursorKey|str|tuple[str,Literal['asc','desc']]]) -- A column name or sequence of names,(name, direction)tuples, orCursorKeyobjects, including a unique final tiebreaker. Bare names sort ascending.cursor¶ (
str|None) -- Optional token identifying the next or previous page.secret¶ (
str|bytes|None) -- Optional nonempty signing key.
- Raises:
ValueError -- Keys, limit, or secret are invalid.
InvalidCursorError -- The token does not match the requested ordering.
- encode(row, *, backward)[source]#
Mint a token from a selected row.
- Parameters:
- Return type:
- Returns:
A token bound to this filter's ordering and signing key.
- Raises:
ImproperConfigurationError -- A key is missing or unexpectedly NULL.
- class sqlspec.core.filters.CursorKey[source]#
Bases:
objectDeclare a sort key and its result-column name.
- Parameters:
field_name¶ (
str) -- Nonempty SQL column name, optionally qualified.sort_order¶ (
Literal['asc','desc']) -- Ascending or descending traversal.nulls¶ (
Optional[Literal['first','last']]) -- Explicit NULL placement, orNonefor a non-nullable key.result_name¶ (
str|None) -- Selected column name used to extract cursor values.
- Raises:
ValueError -- A name, direction, or NULL placement is invalid.
- class sqlspec.core.CursorPagination[source]#
Bases:
Generic[T]Container for data returned using cursor (keyset) pagination.
- Parameters:
items¶ (
Sequence[TypeVar(T)]) -- List of data being sent as part of the response.next_cursor¶ (
str|None) -- Token for the next page, orNoneon the last page.previous_cursor¶ (
str|None) -- Token for the previous page, orNoneon the first page.has_previous¶ (
bool) -- Whether a page exists before this one.
- __init__(items, limit, next_cursor, previous_cursor, has_next, has_previous)#
Cursor value types#
- sqlspec.core.register_cursor_type(value_type, tag, encoder, decoder)[source]#
Register a cursor value type at application initialization.
- Parameters:
- Raises:
ValueError -- The type or tag is already registered or the tag is invalid.
- Return type:
Ordering#
- class sqlspec.core.filters.OrderByFilter[source]#
Bases:
StatementFilterFilter for ORDER BY clauses.
Adds sorting capability to SQL queries.
- Parameters:
- property nulls: Literal['first', 'last'] | None#
Return the requested NULL placement, or None for the database default.
Search#
- class sqlspec.core.filters.SearchFilter[source]#
Bases:
_TextSearchFilterFilter for text search queries.
Constructs WHERE field_name LIKE '%value%' clauses.
- __eq__(other)#
Compare filters by their cache key for round-trip and deduplication checks.
- Return type:
- __hash__()#
Hash via the canonical filter key so unhashable members are normalized.
- Return type:
- __init__(field_name, value, ignore_case=False)#
- __reduce__()#
Reconstruct via
cls(*ctor_args)— works on mypyc native classes.
- append_to_statement(statement)#
Append the filter to the statement.
This method modifies the SQL expression and adds parameters via
add_named_parameter()on the returned statement.- Return type:
- static escape_like_value(value)#
Escape
%and_metacharacters for safe LIKE/ILIKE pattern matching.Backslash is the default LIKE escape character in PostgreSQL (with
standard_conforming_stringson), SQLite, and MySQL, so the produced pattern is safe without an explicitESCAPEclause on those engines.
- extract_parameters()#
Extract filter parameters.
- get_cache_key()#
Return cache key for this filter configuration.
- class sqlspec.core.filters.NotInSearchFilter[source]#
Bases:
SearchFilterFilter for negated text search queries.
Constructs WHERE field_name NOT LIKE '%value%' clauses.
- __eq__(other)#
Compare filters by their cache key for round-trip and deduplication checks.
- Return type:
- __hash__()#
Hash via the canonical filter key so unhashable members are normalized.
- Return type:
- __init__(field_name, value, ignore_case=False)#
- __reduce__()#
Reconstruct via
cls(*ctor_args)— works on mypyc native classes.
- append_to_statement(statement)#
Append the filter to the statement.
This method modifies the SQL expression and adds parameters via
add_named_parameter()on the returned statement.- Return type:
- static escape_like_value(value)#
Escape
%and_metacharacters for safe LIKE/ILIKE pattern matching.Backslash is the default LIKE escape character in PostgreSQL (with
standard_conforming_stringson), SQLite, and MySQL, so the produced pattern is safe without an explicitESCAPEclause on those engines.
- extract_parameters()#
Extract filter parameters.
- get_cache_key()#
Return cache key for this filter configuration.
Type Aliases#
- sqlspec.core.Pagination#
Generic alias for
CursorPagination[T] | OffsetPagination[T].
- sqlspec.core.filters.FilterTypes#
Union type of all filter classes.
- sqlspec.core.filters.FilterTypeT#
Type variable bound to
StatementFilter.