Client-side SQL parameter formatting for DuckDB Quack queries.
DuckDB's current Quack protocol request shape does not expose server-side bind
parameters. QuackDB therefore formats positional ? placeholders as DuckDB SQL
literals before sending a PrepareRequest.
The formatter scans SQL and ignores placeholders inside quoted strings and SQL
comments. It supports conservative scalar values and raises QuackDB.Error for
unsupported parameter shapes rather than producing lossy SQL.
Summary
Functions
Builds a CALL function(args..., option = value...); statement.
Builds a DuckDB COLUMNS(...) expression.
Builds a DuckDB CUBE (...) grouping expression.
Builds an EXPLAIN ... or EXPLAIN ANALYZE ... statement.
Builds a DuckDB GROUPING SETS (...) grouping expression.
Builds an INSTALL extension; statement.
Builds a DuckDB SQL literal or raises QuackDB.Error for unsupported values.
Builds a LOAD extension; statement.
Builds a DuckDB PIVOT statement.
Builds a DuckDB ROLLUP (...) grouping expression.
Builds a SET name = value; statement.
Builds a SET GLOBAL name = value; statement.
Builds a DuckDB star expression such as * EXCLUDE (...) or table.* REPLACE (...).
Builds a DuckDB *COLUMNS(...) unpacked columns expression.
Builds a DuckDB UNPIVOT statement.
Types
@type parameter() :: nil | boolean() | integer() | float() | String.t() | Decimal.t() | Date.t() | Time.t() | NaiveDateTime.t() | DateTime.t() | QuackDB.Interval.t() | Duration.t() | {:blob, binary()} | {:json, term()} | {:interval, integer(), integer(), integer()} | [parameter()]
Functions
Builds a CALL function(args..., option = value...); statement.
Builds a DuckDB COLUMNS(...) expression.
Builds a DuckDB CUBE (...) grouping expression.
Builds an EXPLAIN ... or EXPLAIN ANALYZE ... statement.
Pass analyze: true to run the query and include DuckDB execution timings.
Pass format: :json, :html, :graphviz, :mermaid, or :text to use
DuckDB's EXPLAIN (FORMAT ...) output.
@spec format(iodata(), [parameter()]) :: {:ok, String.t()} | {:error, QuackDB.Error.t()}
Builds a DuckDB GROUPING SETS (...) grouping expression.
Builds an INSTALL extension; statement.
@spec literal(parameter()) :: {:ok, iodata()} | {:error, QuackDB.Error.t()}
Builds a DuckDB SQL literal or raises QuackDB.Error for unsupported values.
Builds a LOAD extension; statement.
Builds a DuckDB PIVOT statement.
Builds a DuckDB ROLLUP (...) grouping expression.
Builds a SET name = value; statement.
Builds a SET GLOBAL name = value; statement.
Builds a DuckDB star expression such as * EXCLUDE (...) or table.* REPLACE (...).
@spec unpack_columns( :star | String.t() | [atom() | String.t()] | keyword(), keyword() ) :: iodata()
Builds a DuckDB *COLUMNS(...) unpacked columns expression.
Builds a DuckDB UNPIVOT statement.