SQL execution with safety checks, param binding, and result shaping.
By default, all queries are read-only. Destructive operations (INSERT, UPDATE,
DELETE, DDL) are blocked at both the application and database level. Pass
read_only: false to allow write operations.
Summary
Types
@type opts() :: [ timeout: non_neg_integer(), statement_timeout_ms: non_neg_integer(), read_only: boolean(), search_path: String.t() | nil ]
@type params() :: list()
@type query_result() :: Lotus.Result.t()
@type repo() :: module()
@type sql() :: String.t()