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

Column-oriented query result.

This struct preserves column order and result metadata while exposing vectors in
a map keyed by disambiguated column names. It is intended for analytical
workflows and as a stable bridge toward future Arrow/columnar integrations.

# `t`

```elixir
@type t() :: %QuackDB.Columns{
  columns: %{required(String.t()) =&gt; [term()]},
  command: QuackDB.Result.command() | nil,
  connection_id: String.t() | nil,
  messages: [map()] | nil,
  metadata: map(),
  names: [String.t()],
  num_rows: non_neg_integer(),
  original_names: [String.t()]
}
```

# `fetch`

```elixir
@spec fetch(t(), String.t()) :: {:ok, [term()]} | :error
```

Returns a column vector by disambiguated name.

# `get`

```elixir
@spec get(t(), String.t(), term()) :: [term()] | term()
```

Returns a column vector by disambiguated name, or `default` when absent.

# `get_and_update`

Raises because column result structs are read-only.

# `pop`

Raises because column result structs are read-only.

# `to_maps`

```elixir
@spec to_maps(t()) :: [%{required(String.t()) =&gt; term()}]
```

Converts column vectors to row maps keyed by disambiguated column names.

# `to_rows`

```elixir
@spec to_rows(t()) :: [[term()]]
```

Converts column vectors back to row lists.

---

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