Selecto.Subfilter.SQL (Selecto v0.3.16)

Generate SQL WHERE clauses for subfilters from the Subfilter Registry.

This module coordinates with strategy-specific builders to generate optimized SQL for EXISTS, IN, ANY, ALL, and aggregation subqueries.

main-functions

Main Functions

  • generate/1: Generate SQL for all subfilters in a registry.
  • generate_for_subfilter/2: Generate SQL for a single subfilter.

examples

Examples

iex> {:ok, sql, params} = Selecto.Subfilter.SQL.generate(registry)
iex> "WHERE (EXISTS (SELECT 1 FROM ...)) AND (film_id IN (SELECT ...))"

Link to this section Summary

Functions

Generate SQL WHERE clauses for all subfilters in the registry.

Generate SQL for a single subfilter.

Link to this section Functions

Link to this function

generate(registry)

@spec generate(Selecto.Subfilter.Registry.t()) ::
  {:ok, String.t(), [any()]} | {:error, Selecto.Subfilter.Error.t()}

Generate SQL WHERE clauses for all subfilters in the registry.

This function iterates through all registered subfilters, determines the appropriate strategy, and delegates to the corresponding SQL builder. It then combines the generated SQL clauses using the specified compound operators (AND/OR).

Link to this function

generate_for_subfilter(spec, join_resolution, registry)

@spec generate_for_subfilter(
  Selecto.Subfilter.Spec.t(),
  Selecto.Subfilter.JoinPathResolver.JoinResolution.t(),
  Selecto.Subfilter.Registry.t()
) :: {:ok, String.t(), [any()]} | {:error, Selecto.Subfilter.Error.t()}

Generate SQL for a single subfilter.

This is useful for debugging or for cases where you need to generate SQL for a single subfilter outside of the main registry flow.