View Source Ecto.Adapter.Schema behaviour (Ecto v3.12.5)

Specifies the schema API required from adapters.

Summary

Callbacks

Called to autogenerate a value for id/embed_id/binary_id.

Deletes a single struct with the given filters.

Updates a single struct with the given filters.

Types

adapter_meta()

@type adapter_meta() :: Ecto.Adapter.adapter_meta()

Proxy type to the adapter meta

constraints()

@type constraints() :: Keyword.t()

fields()

@type fields() :: Keyword.t()

filters()

@type filters() :: Keyword.t()

on_conflict()

@type on_conflict() ::
  {:raise, list(), []}
  | {:nothing, list(), [atom()]}
  | {[atom()], list(), [atom()]}
  | {Ecto.Query.t(), list(), [atom()]}

options()

@type options() :: Keyword.t()

placeholders()

@type placeholders() :: [term()]

returning()

@type returning() :: [atom()]

schema_meta()

@type schema_meta() :: %{
  autogenerate_id:
    {schema_field :: atom(), source_field :: atom(), Ecto.Type.t()},
  context: term(),
  prefix: binary() | nil,
  schema: atom(),
  source: binary()
}

Ecto.Schema metadata fields

Callbacks

autogenerate(field_type)

@callback autogenerate(field_type :: :id | :binary_id | :embed_id) :: term() | nil

Called to autogenerate a value for id/embed_id/binary_id.

Returns the autogenerated value, or nil if it must be autogenerated inside the storage or raise if not supported.

delete(adapter_meta, schema_meta, filters, returning, options)

@callback delete(adapter_meta(), schema_meta(), filters(), returning(), options()) ::
  {:ok, fields()} | {:invalid, constraints()} | {:error, :stale}

Deletes a single struct with the given filters.

While filters can be any record column, it is expected that at least the primary key (or any other key that uniquely identifies an existing record) be given as a filter. Therefore, in case there is no record matching the given filters, {:error, :stale} is returned.

insert(adapter_meta, schema_meta, fields, on_conflict, returning, options)

@callback insert(
  adapter_meta(),
  schema_meta(),
  fields(),
  on_conflict(),
  returning(),
  options()
) ::
  {:ok, fields()} | {:invalid, constraints()}

Inserts a single new struct in the data store.

Autogenerate

The primary key will be automatically included in returning if the field has type :id or :binary_id and no value was set by the developer or none was autogenerated by the adapter.

insert_all(adapter_meta, schema_meta, header, list, on_conflict, returning, placeholders, options)

@callback insert_all(
  adapter_meta(),
  schema_meta(),
  header :: [atom()],
  [[{atom(), term() | {Ecto.Query.t(), list()}}]],
  on_conflict(),
  returning(),
  placeholders(),
  options()
) :: {non_neg_integer(), [[term()]] | nil}

Inserts multiple entries into the data store.

In case an Ecto.Query given as any of the field values by the user, it will be sent to the adapter as a tuple with in the shape of {query, params}.

update(adapter_meta, schema_meta, fields, filters, returning, options)

@callback update(
  adapter_meta(),
  schema_meta(),
  fields(),
  filters(),
  returning(),
  options()
) ::
  {:ok, fields()} | {:invalid, constraints()} | {:error, :stale}

Updates a single struct with the given filters.

While filters can be any record column, it is expected that at least the primary key (or any other key that uniquely identifies an existing record) be given as a filter. Therefore, in case there is no record matching the given filters, {:error, :stale} is returned.