Selecto.Expr (Selecto v0.4.3)
Ergonomic constructors for Selecto filter and selector AST.
This module returns the tuple and list shapes that Selecto already accepts, making dynamic query composition easier without introducing a new execution path.
Link to this section Summary
Functions
Builds an AND filter group.
Appends a filter when a normalized filter is present.
Appends a group-by expression when present.
Appends an order-by expression when present.
Appends a selector when a normalized selector is present.
Builds an array contained-by filter.
Builds an array contains filter.
Builds an array equality filter.
Builds an array overlap filter.
Adds an alias to any selector expression.
Builds an ascending order spec.
Builds an ascending order spec with nulls first.
Builds an ascending order spec with nulls last.
Builds an AVG(...) selector.
Builds a BETWEEN filter.
Builds a shared boolean/operator text search filter.
Builds a CASE expression using {filter, result} pairs.
Builds a COALESCE(...) selector.
Drops nil/empty fragments and wraps the remainder in an AND group.
Drops nil/empty fragments and wraps the remainder in an OR group.
Builds a CONCAT(...) selector.
Builds a contains filter using Selecto's existing :contains operator.
Builds COUNT(*) or COUNT(field) selectors.
Builds COUNT(DISTINCT ...) selectors.
Builds a descending order spec.
Builds a descending order spec with nulls first.
Builds a descending order spec with nulls last.
Builds a suffix LIKE filter.
Builds an equality filter.
Builds an EXISTS (...) filter.
Wraps a field reference or selector expression.
Builds a field-path existence filter for JSONB paths or non-null fields.
Builds a frame tuple for window expressions.
Builds a generic function selector.
Builds a GREATEST(...) selector.
Builds a greater-than filter.
Builds a greater-than-or-equal filter.
Builds an ILIKE filter.
Builds an IN (...) filter.
Builds an IS NULL filter.
Builds a JSON aggregate tuple for Selecto.json_select/2.
Builds a JSON contains filter for Selecto.json_filter/2.
Builds a JSON extract tuple for Selecto.json_select/2 or Selecto.json_order_by/2.
Builds a JSON text extract tuple for Selecto.json_select/2 or Selecto.json_order_by/2.
Builds a JSON object aggregate tuple for Selecto.json_select/2.
Builds a JSON path-exists filter for Selecto.json_filter/2.
Builds a LEAST(...) selector.
Builds a LIKE filter.
Wraps a literal selector value.
Builds a less-than filter.
Builds a less-than-or-equal filter.
Builds a MySQL-oriented full-text search filter that maps onto :text_search.
Builds a MAX(...) selector.
Alias for when_present/2.
Conditionally appends a group-by expression when the value is present.
Conditionally appends an order-by expression when the value is present.
Compacts a list of filters with AND semantics and appends it to the query.
Builds a MIN(...) selector.
Builds a not-equal filter.
Normalizes helper-friendly expression forms into Selecto AST.
Builds a negated filter.
Builds a NOT IN (...) filter.
Builds an IS NOT NULL filter.
Builds a NULLIF(...) selector.
Builds an OR filter group.
Builds a shared phrase-intent text search filter.
Conditionally applies a query pipeline function.
Builds a shared plain-token text search filter.
Builds a GROUP BY ROLLUP(...) keyword spec.
Builds a prefix LIKE filter.
Builds a STDDEV(...) selector.
Builds a field IN (subquery) filter.
Builds a SUM(...) selector.
Builds a full-text search filter using Selecto's :text_search operator.
Builds a registered UDF selector or predicate expression.
Builds a VARIANCE(...) selector.
Builds a shared web-style text search filter.
Builds an expression only when the value is present.
Builds a window-function selector for Selecto.select/2.
Link to this section Types
expr()
@type expr() :: term()
A helper expression that normalizes into Selecto's existing AST.
Link to this section Functions
and(filters)
Builds an AND filter group.
append_filter(selecto, filter)
@spec append_filter(Selecto.Types.t(), term()) :: Selecto.Types.t()
Appends a filter when a normalized filter is present.
append_group_by(selecto, group_spec)
@spec append_group_by(Selecto.Types.t(), term()) :: Selecto.Types.t()
Appends a group-by expression when present.
append_order_by(selecto, order_spec)
@spec append_order_by(Selecto.Types.t(), term()) :: Selecto.Types.t()
Appends an order-by expression when present.
append_select(selecto, selector)
@spec append_select(Selecto.Types.t(), term()) :: Selecto.Types.t()
Appends a selector when a normalized selector is present.
array_contained(field, values)
Builds an array contained-by filter.
array_contains(field, values)
Builds an array contains filter.
array_eq(field, values)
Builds an array equality filter.
array_overlap(field, values)
Builds an array overlap filter.
as(expression, alias_name)
Adds an alias to any selector expression.
asc(expression)
Builds an ascending order spec.
asc_nulls_first(expression)
Builds an ascending order spec with nulls first.
asc_nulls_last(expression)
Builds an ascending order spec with nulls last.
avg(value)
Builds an AVG(...) selector.
between(field, min, max)
Builds a BETWEEN filter.
boolean_search(field, value_or_opts, opts \\ [])
Builds a shared boolean/operator text search filter.
case_when(pairs, else_clause \\ nil)
Builds a CASE expression using {filter, result} pairs.
coalesce(values)
Builds a COALESCE(...) selector.
compact_and(filters)
Drops nil/empty fragments and wraps the remainder in an AND group.
compact_or(filters)
Drops nil/empty fragments and wraps the remainder in an OR group.
concat(values)
Builds a CONCAT(...) selector.
contains(field, value)
Builds a contains filter using Selecto's existing :contains operator.
count(value \\ "*")
Builds COUNT(*) or COUNT(field) selectors.
count_distinct(value)
Builds COUNT(DISTINCT ...) selectors.
desc(expression)
Builds a descending order spec.
desc_nulls_first(expression)
Builds a descending order spec with nulls first.
desc_nulls_last(expression)
Builds a descending order spec with nulls last.
ends_with(field, value)
Builds a suffix LIKE filter.
eq(field, value)
Builds an equality filter.
exists(query, params \\ [])
Builds an EXISTS (...) filter.
field(selector)
Wraps a field reference or selector expression.
field_exists(field)
Builds a field-path existence filter for JSONB paths or non-null fields.
frame(type, start_bound, end_bound)
Builds a frame tuple for window expressions.
func(function_name, args \\ [])
Builds a generic function selector.
greatest(values, maybe_second \\ nil)
Builds a GREATEST(...) selector.
gt(field, value)
Builds a greater-than filter.
gte(field, value)
Builds a greater-than-or-equal filter.
ilike(field, value)
Builds an ILIKE filter.
field in values
Builds an IN (...) filter.
is_null(field)
Builds an IS NULL filter.
json_agg(field, opts \\ [])
Builds a JSON aggregate tuple for Selecto.json_select/2.
json_contains(column, value)
Builds a JSON contains filter for Selecto.json_filter/2.
json_extract(column, path, opts_or_direction \\ [])
Builds a JSON extract tuple for Selecto.json_select/2 or Selecto.json_order_by/2.
json_extract_text(column, path, opts_or_direction \\ [])
Builds a JSON text extract tuple for Selecto.json_select/2 or Selecto.json_order_by/2.
json_object_agg(key_field, value_field, opts \\ [])
Builds a JSON object aggregate tuple for Selecto.json_select/2.
json_path_exists(column, path)
Builds a JSON path-exists filter for Selecto.json_filter/2.
least(values, maybe_second \\ nil)
Builds a LEAST(...) selector.
like(field, value)
Builds a LIKE filter.
lit(value)
Wraps a literal selector value.
lt(field, value)
Builds a less-than filter.
lte(field, value)
Builds a less-than-or-equal filter.
match_against(field, value_or_opts, opts \\ [])
Builds a MySQL-oriented full-text search filter that maps onto :text_search.
max(value)
Builds a MAX(...) selector.
maybe(value, fun)
Alias for when_present/2.
maybe_group_by(selecto, value, fun)
@spec maybe_group_by(Selecto.Types.t(), term(), (term() -> term())) :: Selecto.Types.t()
Conditionally appends a group-by expression when the value is present.
maybe_order_by(selecto, value, fun)
@spec maybe_order_by(Selecto.Types.t(), term(), (term() -> term())) :: Selecto.Types.t()
Conditionally appends an order-by expression when the value is present.
merge_where(selecto, filters)
@spec merge_where(Selecto.Types.t(), [term()]) :: Selecto.Types.t()
Compacts a list of filters with AND semantics and appends it to the query.
min(value)
Builds a MIN(...) selector.
neq(field, value)
Builds a not-equal filter.
normalize(expr)
Normalizes helper-friendly expression forms into Selecto AST.
not filter
Builds a negated filter.
not_in(field, values)
Builds a NOT IN (...) filter.
not_null(field)
Builds an IS NOT NULL filter.
nullif(left, right)
Builds a NULLIF(...) selector.
or(filters)
Builds an OR filter group.
phrase_search(field, value_or_opts, opts \\ [])
Builds a shared phrase-intent text search filter.
pipe_if(query, condition, fun)
Conditionally applies a query pipeline function.
plain_search(field, value_or_opts, opts \\ [])
Builds a shared plain-token text search filter.
rollup(groups)
Builds a GROUP BY ROLLUP(...) keyword spec.
starts_with(field, value)
Builds a prefix LIKE filter.
stddev(value)
Builds a STDDEV(...) selector.
subquery_in(field, query, params \\ [])
Builds a field IN (subquery) filter.
sum(value)
Builds a SUM(...) selector.
text_search(field, value_or_opts, opts \\ [])
Builds a full-text search filter using Selecto's :text_search operator.
udf(function_id, args \\ [])
Builds a registered UDF selector or predicate expression.
variance(value)
Builds a VARIANCE(...) selector.
web_search(field, value_or_opts, opts \\ [])
Builds a shared web-style text search filter.
when_present(value, fun)
Builds an expression only when the value is present.
window(function, arguments \\ [], opts \\ [])
Builds a window-function selector for Selecto.select/2.