Query Modifiers¶
Helpers for modifying SQL statements by appending WHERE, LIMIT, OFFSET clauses and building condition expressions programmatically.
ConditionFactory¶
Statement Modifiers¶
- sqlspec.core.query_modifiers.apply_where(expression, condition)[source]¶
Apply WHERE condition to an expression using AND.
Works with SELECT, UPDATE, and DELETE expressions.
- Parameters:
- Return type:
Expression- Returns:
Modified expression with WHERE condition
- Raises:
SQLSpecError – If expression type doesn’t support WHERE
- sqlspec.core.query_modifiers.apply_or_where(expression, condition)[source]¶
Apply WHERE condition to an expression using OR.
Combines the new condition with any existing WHERE clause using OR.
- Parameters:
- Return type:
Expression- Returns:
Modified expression with OR condition
- Raises:
SQLSpecError – If expression type doesn’t support WHERE or has no existing WHERE
- sqlspec.core.query_modifiers.apply_limit(expression, limit_value)[source]¶
Apply LIMIT clause to expression.
- Parameters:
- Return type:
Expression- Returns:
Modified expression with LIMIT
- Raises:
SQLSpecError – If expression does not support LIMIT
- sqlspec.core.query_modifiers.apply_offset(expression, offset_value)[source]¶
Apply OFFSET clause to expression.
- Parameters:
- Return type:
Expression- Returns:
Modified expression with OFFSET
- Raises:
SQLSpecError – If expression does not support OFFSET
- sqlspec.core.query_modifiers.apply_select_only(expression, columns)[source]¶
Replace SELECT clause with only specified columns.
- sqlspec.core.query_modifiers.safe_modify_with_cte(expression, modification_fn)[source]¶
Safely apply a modification, preserving CTEs at top level.
This ensures CTEs stay at the outermost level even when the modification would normally wrap them in a subquery. This fixes issue #301 where CTEs inside subqueries generate invalid SQL.
Condition Builders¶
- sqlspec.core.query_modifiers.create_condition(column, param_name, condition_factory)[source]¶
Create parameterized condition expression.
This is a pure function - parameter value binding happens in the caller.
- Parameters:
- Return type:
Expression- Returns:
Condition expression with placeholder
- sqlspec.core.query_modifiers.create_between_condition(column, low_param, high_param)[source]¶
Create BETWEEN condition.
- sqlspec.core.query_modifiers.create_in_condition(column, param_names)[source]¶
Create IN condition with multiple placeholders.
- sqlspec.core.query_modifiers.create_not_in_condition(column, param_names)[source]¶
Create NOT IN condition with multiple placeholders.
Expression Helpers¶
- sqlspec.core.query_modifiers.expr_eq(col, placeholder)[source]¶
Create equality expression: column = :param.
- Return type:
Expression
- sqlspec.core.query_modifiers.expr_neq(col, placeholder)[source]¶
Create not-equal expression: column != :param.
- Return type:
Expression
- sqlspec.core.query_modifiers.expr_gt(col, placeholder)[source]¶
Create greater-than expression: column > :param.
- Return type:
Expression
- sqlspec.core.query_modifiers.expr_gte(col, placeholder)[source]¶
Create greater-than-or-equal expression: column >= :param.
- Return type:
Expression
- sqlspec.core.query_modifiers.expr_lt(col, placeholder)[source]¶
Create less-than expression: column < :param.
- Return type:
Expression
- sqlspec.core.query_modifiers.expr_lte(col, placeholder)[source]¶
Create less-than-or-equal expression: column <= :param.
- Return type:
Expression
- sqlspec.core.query_modifiers.expr_like(col, placeholder)[source]¶
Create LIKE expression: column LIKE :param.
- Return type:
Expression
- sqlspec.core.query_modifiers.expr_not_like(col, placeholder)[source]¶
Create NOT LIKE expression: NOT (column LIKE :param).
- Return type:
Expression
- sqlspec.core.query_modifiers.expr_ilike(col, placeholder)[source]¶
Create case-insensitive LIKE expression: column ILIKE :param.
- Return type:
Expression
Utilities¶
- sqlspec.core.query_modifiers.extract_column_name(column)[source]¶
Extract column name from column expression for parameter naming.