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

DuckDB catalog and metadata helpers.

These functions wrap DuckDB's logical metadata pragmas and table functions.
They 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()}
```

# `column_defaults`

```elixir
@spec column_defaults(DBConnection.conn() | module(), source(), keyword()) ::
  {:ok, %{required(String.t()) =&gt; String.t()}} | {:error, Exception.t()}
```

Returns column defaults for a table as a map keyed by column name.

# `column_defaults!`

```elixir
@spec column_defaults!(DBConnection.conn() | module(), source(), keyword()) :: %{
  required(String.t()) =&gt; String.t()
}
```

Returns column defaults for a table, raising on errors.

# `databases`

```elixir
@spec databases(
  DBConnection.conn() | module(),
  keyword()
) :: {:ok, [QuackDB.Meta.Database.t()]} | {:error, Exception.t()}
```

Lists attached DuckDB databases.

# `databases!`

```elixir
@spec databases!(
  DBConnection.conn() | module(),
  keyword()
) :: [QuackDB.Meta.Database.t()]
```

Lists attached DuckDB databases, raising on errors.

# `primary_keys`

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

Returns primary-key columns for a table.

# `primary_keys!`

```elixir
@spec primary_keys!(DBConnection.conn() | module(), source(), keyword()) :: [
  QuackDB.Meta.Column.t()
]
```

Returns primary-key columns for a table, raising on errors.

# `table_info`

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

Returns logical column metadata for a table.

# `table_info!`

```elixir
@spec table_info!(DBConnection.conn() | module(), source(), keyword()) :: [
  QuackDB.Meta.Column.t()
]
```

Returns logical column metadata for a table, raising on errors.

# `tables`

```elixir
@spec tables(
  DBConnection.conn() | module(),
  keyword()
) :: {:ok, [QuackDB.Meta.Table.t()]} | {:error, Exception.t()}
```

Lists tables visible to the current DuckDB connection.

# `tables!`

```elixir
@spec tables!(
  DBConnection.conn() | module(),
  keyword()
) :: [QuackDB.Meta.Table.t()]
```

Lists tables visible to the current DuckDB connection, raising on errors.

---

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