View Source Ecto.Adapters.SQL.Connection behaviour (Ecto SQL v3.11.3)

Specifies the behaviour to be implemented by all SQL connections.

Summary

Types

The cached query which is a DBConnection Query

The query name

The SQL statement

Callbacks

Receives a query and must return a SELECT query.

Receives options and returns DBConnection supervisor child specification.

Receives a query result and returns a list of logs.

Returns a DELETE for the filters returning the given returning.

Receives a query and must return a DELETE query.

Receives a DDL command and returns a query that executes it.

Executes an EXPLAIN query or similar depending on the adapter to obtains statistics of the given query.

Returns an INSERT for the given rows in table returning the given returning.

Runs the given statement as a query.

Runs the given statement as a multi-result query.

Returns a stream that prepares and executes the given query with DBConnection.

Returns a queryable to check if the given table exists.

Receives the exception returned by query/4.

Returns an UPDATE for the given fields in table filtered by filters returning the given returning.

Receives a query and values to update and must return an UPDATE query.

Types

@type cached() :: map()

The cached query which is a DBConnection Query

@type connection() :: DBConnection.conn()
@type name() :: String.t()

The query name

@type params() :: [term()]
@type statement() :: String.t()

The SQL statement

Callbacks

@callback all(query :: Ecto.Query.t()) :: iodata()

Receives a query and must return a SELECT query.

@callback child_spec(options :: Keyword.t()) ::
  :supervisor.child_spec() | {module(), Keyword.t()}

Receives options and returns DBConnection supervisor child specification.

@callback ddl_logs(result :: term()) :: [
  {Logger.level(), Logger.message(), Logger.metadata()}
]

Receives a query result and returns a list of logs.

Link to this callback

delete(prefix, table, filters, returning)

View Source
@callback delete(
  prefix :: String.t(),
  table :: String.t(),
  filters :: [atom()],
  returning :: [atom()]
) :: iodata()

Returns a DELETE for the filters returning the given returning.

@callback delete_all(query :: Ecto.Query.t()) :: iodata()

Receives a query and must return a DELETE query.

Link to this callback

execute(connection, cached, params, options)

View Source
@callback execute(connection(), cached(), params(), options :: Keyword.t()) ::
  {:ok, cached(), term()} | {:ok, term()} | {:error | :reset, Exception.t()}

Executes a cached query.

@callback execute_ddl(command :: Ecto.Adapter.Migration.command()) ::
  String.t() | [iodata()]

Receives a DDL command and returns a query that executes it.

Link to this callback

explain_query(connection, query, params, opts)

View Source
@callback explain_query(
  connection(),
  query :: String.t(),
  params :: Keyword.t(),
  opts :: Keyword.t()
) :: {:ok, term()} | {:error, Exception.t()}

Executes an EXPLAIN query or similar depending on the adapter to obtains statistics of the given query.

Receives the connection, query, params for the query, and all opts including those related to the EXPLAIN statement and shared opts.

Must execute the explain query and return the result.

Link to this callback

insert(prefix, table, header, rows, on_conflict, returning, placeholders)

View Source
@callback insert(
  prefix :: String.t(),
  table :: String.t(),
  header :: [atom()],
  rows :: [[atom() | nil]],
  on_conflict :: Ecto.Adapter.Schema.on_conflict(),
  returning :: [atom()],
  placeholders :: [term()]
) :: iodata()

Returns an INSERT for the given rows in table returning the given returning.

Link to this callback

prepare_execute(connection, name, statement, params, options)

View Source
@callback prepare_execute(
  connection(),
  name(),
  statement(),
  params(),
  options :: Keyword.t()
) ::
  {:ok, cached(), term()} | {:error, Exception.t()}

Prepares and executes the given query with DBConnection.

Link to this callback

query(connection, statement, params, options)

View Source
@callback query(connection(), statement(), params(), options :: Keyword.t()) ::
  {:ok, term()} | {:error, Exception.t()}

Runs the given statement as a query.

Link to this callback

query_many(connection, statement, params, options)

View Source
@callback query_many(connection(), statement(), params(), options :: Keyword.t()) ::
  {:ok, term()} | {:error, Exception.t()}

Runs the given statement as a multi-result query.

Link to this callback

stream(connection, statement, params, options)

View Source
@callback stream(connection(), statement(), params(), options :: Keyword.t()) :: Enum.t()

Returns a stream that prepares and executes the given query with DBConnection.

Link to this callback

table_exists_query(table)

View Source
@callback table_exists_query(table :: String.t()) :: {iodata(), [term()]}

Returns a queryable to check if the given table exists.

Link to this callback

to_constraints(exception, options)

View Source
@callback to_constraints(exception :: Exception.t(), options :: Keyword.t()) ::
  Keyword.t()

Receives the exception returned by query/4.

The constraints are in the keyword list and must return the constraint type, like :unique, and the constraint name as a string, for example:

[unique: "posts_title_index"]

Must return an empty list if the error does not come from any constraint.

Link to this callback

update(prefix, table, fields, filters, returning)

View Source
@callback update(
  prefix :: String.t(),
  table :: String.t(),
  fields :: [atom()],
  filters :: [atom()],
  returning :: [atom()]
) :: iodata()

Returns an UPDATE for the given fields in table filtered by filters returning the given returning.

@callback update_all(query :: Ecto.Query.t()) :: iodata()

Receives a query and values to update and must return an UPDATE query.