Skip to main content

lib/quack_db/analytics.ex

defmodule QuackDB.Analytics do
  import QuackDB.SQL.Fragment, only: [table: 1]

  @moduledoc """
  Direct SQL helpers for DuckDB analytical statements.
  """

  @doc "Builds a DuckDB `SUMMARIZE` profiling query for a table, source, or `{:query, sql}` tuple."
  @spec summarize(String.t() | atom() | {:query, iodata()}) :: iodata()
  def summarize(source) when is_atom(source), do: summarize(Atom.to_string(source))

  def summarize(source) when is_binary(source) do
    ["SUMMARIZE SELECT * FROM ", table(source)]
  end

  def summarize({:query, query}) do
    ["SUMMARIZE ", query]
  end
end