Ecto.Adapter behaviour
This module specifies the adapter API that an adapter is required to implement.
Types ↑
t :: module
source :: binary
returning :: [atom]
autogenerate_id :: {field :: atom, type :: :id | :binary_id, value :: term} | nil
Callbacks
Specs:
- all(repo, query :: Ecto.Query.t, params :: list, options) :: [[term]] | no_return
Fetches all results from the data store based on the given query.
Specs:
- delete(repo, source, filters, autogenerate_id, options) :: {:ok, Keyword.t} | {:error, :stale} | no_return
Deletes a sigle model 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) to be given as filter. Therefore,
in case there is no record matching the given filters,
{:error, :stale}
is returned.
Autogenerate
The autogenerate_id
tells if there is an autogenerated primary key and
if so, its name type and value. The type is :id
or :binary_id
and
the adapter should raise if it cannot handle those types.
If the value is nil
, it means there is no autogenerate primary key.
Specs:
- delete_all(repo, query :: Ecto.Query.t, params :: list, options :: Keyword.t) :: {integer, nil} | no_return
Deletes all entities matching the given query.
The query shall only have where
and join
expressions and a
single from
expression. It returns a tuple containing the number
of entries and any returned result as second element
Specs:
- id_types(repo) :: %{binary_id: Ecto.Type.custom}
Returns the binary id type for this adapter.
If the database adapter does not support provide binary id functionality, Ecto.UUID is recommended.
Specs:
- insert(repo, source, fields, autogenerate_id, returning, options) :: {:ok, Keyword.t} | no_return
Inserts a single new model in the data store.
Autogenerate
The autogenerate_id
tells if there is a primary key to be autogenerated
and, if so, its name, type and value. The type is :id
or :binary_id
and
the adapter should raise if it cannot handle those types.
If the value is nil
, it means no value was supplied by the user and
the database MUST return a new one.
autogenerate_id
also allows drivers to detect if a value was assigned
to a primary key that does not support assignment. In this case, value
will be a non nil
value.
Specs:
- start_link(repo, options) :: {:ok, pid} | :ok | {:error, {:already_started, pid}} | {:error, term}
Starts any connection pooling or supervision and return {:ok, pid}
or just :ok
if nothing needs to be done.
Returns {:error, {:already_started, pid}}
if the repo already
started or {:error, term}
in case anything else goes wrong.
Adapter start
Because some Ecto tasks like migration may run without starting
the parent application, it is recommended that start_link in
adapters make sure the adapter application is started by calling
Application.ensure_all_started/1
.
Specs:
- stop(repo) :: :ok
Stops any connection pooling or supervision started with start_link/1
.
Specs:
- update(repo, source, fields, filters, autogenerate_id, returning, options) :: {:ok, Keyword.t} | {:error, :stale} | no_return
Updates a single model 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) to be given as filter. Therefore,
in case there is no record matching the given filters,
{:error, :stale}
is returned.
Autogenerate
The autogenerate_id
tells if there is an autogenerated primary key and
if so, its name type and value. The type is :id
or :binary_id
and
the adapter should raise if it cannot handle those types.
If the value is nil
, it means there is no autogenerate primary key.
autogenerate_id
also allows drivers to detect if a value was assigned
to a primary key that does not support assignment. In this case, value
will be a non nil
value.
Specs:
- update_all(repo, query :: Ecto.Query.t, params :: list, options) :: {integer, nil} | no_return
Updates all entities matching the given query with the values given.
The query shall only have where
and join
expressions and a
single from
expression. It returns a tuple containing the number
of entries and any returned result as second element