# `Selecto.Subfilter.SQL`

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

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

## Examples

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

# `generate`

```elixir
@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`

```elixir
@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.

---

*Consult [api-reference.md](api-reference.md) for complete listing*
