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

DuckDB storage observability helpers.

The functions in this module wrap DuckDB's storage table functions and accept
either a QuackDB connection or a QuackDB-backed Ecto repo. Table arguments may
be schema modules, atoms, strings, or `{prefix, source}` tuples.

# `source`

```elixir
@type source() ::
  module() | atom() | String.t() | {atom() | String.t(), atom() | String.t()}
```

# `checkpoint`

```elixir
@spec checkpoint(
  DBConnection.conn() | module(),
  keyword()
) :: {:ok, QuackDB.Result.t()} | {:error, Exception.t()}
```

Runs `CHECKPOINT` to flush the write-ahead log into the database file.

# `checkpoint!`

```elixir
@spec checkpoint!(
  DBConnection.conn() | module(),
  keyword()
) :: QuackDB.Result.t()
```

Runs `CHECKPOINT`, raising on errors.

# `compression`

```elixir
@spec compression(DBConnection.conn() | module(), source(), keyword()) ::
  {:ok, QuackDB.Storage.CompressionSummary.t()} | {:error, Exception.t()}
```

Returns compression usage grouped by table column.

# `compression!`

```elixir
@spec compression!(DBConnection.conn() | module(), source(), keyword()) ::
  QuackDB.Storage.CompressionSummary.t()
```

Returns compression usage grouped by table column, raising on errors.

# `database_size`

```elixir
@spec database_size(
  DBConnection.conn() | module(),
  keyword()
) :: {:ok, [QuackDB.Storage.DatabaseSize.t()]} | {:error, Exception.t()}
```

Returns DuckDB database size information.

# `database_size!`

```elixir
@spec database_size!(
  DBConnection.conn() | module(),
  keyword()
) :: [QuackDB.Storage.DatabaseSize.t()]
```

Returns DuckDB database size information, raising on errors.

# `force_checkpoint`

```elixir
@spec force_checkpoint(
  DBConnection.conn() | module(),
  keyword()
) :: {:ok, QuackDB.Result.t()} | {:error, Exception.t()}
```

Runs `FORCE CHECKPOINT` to wait for the checkpoint lock and flush storage.

# `force_checkpoint!`

```elixir
@spec force_checkpoint!(
  DBConnection.conn() | module(),
  keyword()
) :: QuackDB.Result.t()
```

Runs `FORCE CHECKPOINT`, raising on errors.

# `info`

```elixir
@spec info(DBConnection.conn() | module(), source(), keyword()) ::
  {:ok, [QuackDB.Storage.Segment.t()]} | {:error, Exception.t()}
```

Returns DuckDB storage segments for a table.

# `info!`

```elixir
@spec info!(DBConnection.conn() | module(), source(), keyword()) :: [
  QuackDB.Storage.Segment.t()
]
```

Returns DuckDB storage segments for a table, raising on errors.

---

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