# `Ecto.Schema.Metadata`
[🔗](https://github.com/elixir-ecto/ecto/blob/v3.13.6/lib/ecto/schema/metadata.ex#L1)

Stores metadata of a struct.

## State

The state of the schema is stored in the `:state` field and allows
following values:

  * `:built` - the struct was constructed in memory and is not persisted
    to database yet;
  * `:loaded` - the struct was loaded from database and represents
    persisted data;
  * `:deleted` - the struct was deleted and no longer represents persisted
    data.

## Source

The `:source` tracks the (table or collection) where the struct is or should
be persisted to.

## Prefix

Tracks the source prefix in the data storage.

## Context

The `:context` field represents additional state some databases require
for proper updates of data. It is not used by the built-in adapters of
`Ecto.Adapters.Postgres` and `Ecto.Adapters.MySQL`.

## Schema

The `:schema` field refers the module name for the schema this metadata belongs to.

# `context`

```elixir
@type context() :: any()
```

# `state`

```elixir
@type state() :: :built | :loaded | :deleted
```

# `t`

```elixir
@type t() :: t(module())
```

# `t`

```elixir
@type t(schema) :: %Ecto.Schema.Metadata{
  context: context(),
  prefix: Ecto.Schema.prefix(),
  schema: schema,
  source: Ecto.Schema.source(),
  state: state()
}
```

---

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