Selecto.Subfilter.SQL (Selecto v0.4.3)
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
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).
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.