# `QuackDB`
[🔗](https://github.com/elixir-vibe/quackdb/blob/main/lib/quack_db.ex#L1)

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.

# `start_option`

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

# `child_spec`

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

# `prepare`

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

# `prepare_execute`

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

# `query`

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

# `query!`

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

# `start_link`

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

# `stream`

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

---

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