QuackDB (quackdb v0.1.1)

Copy Markdown View Source

Remote DuckDB Quack protocol client.

The public API is backed by DBConnection so it can grow into an Ecto adapter without changing the lower-level protocol codec.

Summary

Types

start_option()

@type start_option() ::
  {:uri, String.t()} | {:token, String.t()} | {:name, GenServer.name()}

Functions

child_spec(options)

@spec child_spec([start_option()]) :: Supervisor.child_spec()

column_batches(connection, statement, params \\ [], options \\ [])

@spec column_batches(DBConnection.conn(), iodata(), [term()], Keyword.t()) ::
  Enumerable.t()

Streams query results as column-oriented batches.

Each item is a map from disambiguated column names to the values in that fetch batch. This keeps large analytical results vector-shaped without materializing the whole result set. Prefer columnar_batches/4 when you also need batch metadata.

columnar(connection, statement, params \\ [], options \\ [])

@spec columnar(DBConnection.conn(), iodata(), [term()], Keyword.t()) ::
  {:ok, QuackDB.Columns.t()} | {:error, Exception.t()}

Runs a query and returns a QuackDB.Columns struct.

This preserves column order, original names, row count, and result metadata in addition to the column vectors.

columnar!(connection, statement, params \\ [], options \\ [])

@spec columnar!(DBConnection.conn(), iodata(), [term()], Keyword.t()) ::
  QuackDB.Columns.t()

columnar_batches(connection, statement, params \\ [], options \\ [])

@spec columnar_batches(DBConnection.conn(), iodata(), [term()], Keyword.t()) ::
  Enumerable.t()

Streams query results as QuackDB.Columns batches.

columns(connection, statement, params \\ [], options \\ [])

@spec columns(DBConnection.conn(), iodata(), [term()], Keyword.t()) ::
  {:ok, %{required(String.t()) => [term()]}} | {:error, Exception.t()}

Runs a query and returns its result as a column-oriented map.

Duplicate column names are disambiguated with suffixes such as _2 and _3. Prefer columnar/4 when you also need column order and result metadata.

columns!(connection, statement, params \\ [], options \\ [])

@spec columns!(DBConnection.conn(), iodata(), [term()], Keyword.t()) :: %{
  required(String.t()) => [term()]
}

maps(connection, statement, params \\ [], options \\ [])

@spec maps(DBConnection.conn(), iodata(), [term()], Keyword.t()) :: Enumerable.t()

ping(connection, options \\ [])

@spec ping(DBConnection.conn(), Keyword.t()) :: :ok | {:error, Exception.t()}

prepare(connection, statement, options \\ [])

@spec prepare(DBConnection.conn(), iodata(), Keyword.t()) ::
  {:ok, QuackDB.Query.t()} | {:error, Exception.t()}

prepare_execute(connection, statement, params \\ [], options \\ [])

@spec prepare_execute(DBConnection.conn(), iodata(), [term()], Keyword.t()) ::
  {:ok, QuackDB.Query.t(), QuackDB.Result.t()} | {:error, Exception.t()}

query(connection, statement, params \\ [], options \\ [])

@spec query(DBConnection.conn(), iodata(), [term()], Keyword.t()) ::
  {:ok, QuackDB.Result.t()} | {:error, Exception.t()}

query!(connection, statement, params \\ [], options \\ [])

@spec query!(DBConnection.conn(), iodata(), [term()], Keyword.t()) ::
  QuackDB.Result.t()

rows(connection, statement, params \\ [], options \\ [])

@spec rows(DBConnection.conn(), iodata(), [term()], Keyword.t()) :: Enumerable.t()

start_link(options)

@spec start_link([start_option()]) :: GenServer.on_start()

stream(connection, statement, params \\ [], options \\ [])

@spec stream(DBConnection.conn(), iodata(), [term()], Keyword.t()) ::
  QuackDB.Stream.t()