# `EctoFoundationDB.Indexer`
[🔗](https://github.com/foundationdb-beam/ecto_foundationdb/blob/main/lib/ecto_foundationdb/indexer.ex#L1)

Implement this behaviour to create a custom index.

Each Indexer has access to read, write, and **clear** any and all data in the database.
A faulty implementation may lead to data loss or corruption.

# `clear`
[🔗](https://github.com/foundationdb-beam/ecto_foundationdb/blob/main/lib/ecto_foundationdb/indexer.ex#L27)

```elixir
@callback clear(
  EctoFoundationDB.Tenant.t(),
  :erlfdb.transaction(),
  EctoFoundationDB.Index.t(),
  Ecto.Schema.t(),
  tuple()
) :: :ok
```

# `create`
[🔗](https://github.com/foundationdb-beam/ecto_foundationdb/blob/main/lib/ecto_foundationdb/indexer.ex#L17)

```elixir
@callback create(
  EctoFoundationDB.Tenant.t(),
  :erlfdb.transaction(),
  EctoFoundationDB.Index.t(),
  Ecto.Schema.t(),
  tuple(),
  integer()
) :: {integer(), {:erlfdb.key(), :erlfdb.key()}}
```

# `create_range`
[🔗](https://github.com/foundationdb-beam/ecto_foundationdb/blob/main/lib/ecto_foundationdb/indexer.ex#L14)

```elixir
@callback create_range(EctoFoundationDB.Tenant.t(), EctoFoundationDB.Index.t()) ::
  {:erlfdb.key(), :erlfdb.key()}
```

# `drop_ranges`
[🔗](https://github.com/foundationdb-beam/ecto_foundationdb/blob/main/lib/ecto_foundationdb/indexer.ex#L15)

```elixir
@callback drop_ranges(EctoFoundationDB.Tenant.t(), EctoFoundationDB.Index.t()) ::
  [:erlfdb.key()] | [{:erlfdb.key(), :erlfdb.key()}]
```

# `range`
[🔗](https://github.com/foundationdb-beam/ecto_foundationdb/blob/main/lib/ecto_foundationdb/indexer.ex#L36)

```elixir
@callback range(EctoFoundationDB.Index.t(), EctoFoundationDB.QueryPlan.t(), Keyword.t()) ::
  tuple()
```

# `set`
[🔗](https://github.com/foundationdb-beam/ecto_foundationdb/blob/main/lib/ecto_foundationdb/indexer.ex#L26)

```elixir
@callback set(
  EctoFoundationDB.Tenant.t(),
  :erlfdb.transaction(),
  EctoFoundationDB.Index.t(),
  Ecto.Schema.t(),
  tuple()
) :: :ok
```

# `unpack`
[🔗](https://github.com/foundationdb-beam/ecto_foundationdb/blob/main/lib/ecto_foundationdb/indexer.ex#L37)
*optional* 

```elixir
@callback unpack(EctoFoundationDB.Index.t(), EctoFoundationDB.QueryPlan.t(), tuple()) ::
  tuple()
```

# `update`
[🔗](https://github.com/foundationdb-beam/ecto_foundationdb/blob/main/lib/ecto_foundationdb/indexer.ex#L28)
*optional* 

```elixir
@callback update(
  EctoFoundationDB.Tenant.t(),
  :erlfdb.transaction(),
  EctoFoundationDB.Index.t(),
  Ecto.Schema.t(),
  tuple(),
  Keyword.t()
) :: :ok
```

# `clear`
[🔗](https://github.com/foundationdb-beam/ecto_foundationdb/blob/main/lib/ecto_foundationdb/indexer.ex#L57)

# `create`
[🔗](https://github.com/foundationdb-beam/ecto_foundationdb/blob/main/lib/ecto_foundationdb/indexer.ex#L46)

# `create_range`
[🔗](https://github.com/foundationdb-beam/ecto_foundationdb/blob/main/lib/ecto_foundationdb/indexer.ex#L40)

# `drop_ranges`
[🔗](https://github.com/foundationdb-beam/ecto_foundationdb/blob/main/lib/ecto_foundationdb/indexer.ex#L43)

# `range`
[🔗](https://github.com/foundationdb-beam/ecto_foundationdb/blob/main/lib/ecto_foundationdb/indexer.ex#L79)

# `set`
[🔗](https://github.com/foundationdb-beam/ecto_foundationdb/blob/main/lib/ecto_foundationdb/indexer.ex#L49)

# `unpack`
[🔗](https://github.com/foundationdb-beam/ecto_foundationdb/blob/main/lib/ecto_foundationdb/indexer.ex#L82)

# `update`
[🔗](https://github.com/foundationdb-beam/ecto_foundationdb/blob/main/lib/ecto_foundationdb/indexer.ex#L65)

---

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