# `Lotus.SQL.FilterInjector`
[🔗](https://github.com/typhoonworks/lotus/blob/v0.16.6/lib/lotus/sql/filter_injector.ex#L1)

Shared helpers for SQL-based sources to inject filter conditions into queries.

Wraps the original query in a CTE and appends WHERE clauses. Each SQL source
calls this with its own `quote_fn` for identifier quoting.

## Example

    quote_fn = fn id -> ~s("#{id}") end
    Lotus.SQL.FilterInjector.apply("SELECT * FROM users", [
      %Lotus.Query.Filter{column: "region", op: :eq, value: "US"}
    ], quote_fn)
    #=> ~s(WITH _base AS (SELECT * FROM users) SELECT * FROM _base WHERE "region" = 'US')

# `apply`

```elixir
@spec apply(String.t(), [Lotus.Query.Filter.t()], (String.t() -&gt; String.t())) ::
  String.t()
```

Wraps the given SQL in a CTE and appends WHERE clauses for each filter.

`quote_fn` is a 1-arity function that quotes an identifier for the target database.

Returns the original SQL unchanged if filters is empty.

# `quote_value`

```elixir
@spec quote_value(term()) :: String.t()
```

Quotes a value as a SQL literal, handling type-appropriate formatting.

---

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