Ecto.Adapter.Queryable поведение
Исходный кодОпределяет API запросов, который требуется от адаптеров.
Если ваш адаптер может обрабатывать только одну или несколько функций запросов, добавьте собственные реализации этих функций непосредственно в Repo, используя вместо этого Ecto.Adapter.__before_compile__/1.
Сводка
- adapter_meta()
Прокси-тип для метаданных адаптера
- query_cache()
Метаданные запроса, передаваемые в
execute/5, для кеширования.- query_meta()
Поля метаданных Ecto.Query (хранятся в кеше)
Типы
- execute(adapter_meta, query_meta, query_cache, params, options)
Выполняет предварительно подготовленный запрос.
- prepare(atom, query)
Команды, вызываемые для подготовки запроса.
- stream(adapter_meta, query_meta, query_cache, params, options)
Передаёт поток предварительно подготовленного запроса.
Обратные вызовы
- plan_query(operation, adapter, queryable)
Планирует запрос с помощью указанного адаптера.
- prepare_query(operation, repo_name_or_pid, queryable, opts \\ [])
Планирует и подготавливает запрос для указанного репозитория, используя его кеш запросов.
Функции
Типы
adapter_meta()Исходный код
@type adapter_meta() :: Ecto.Adapter.adapter_meta()
Прокси-тип для метаданных адаптера
cached()Исходный код
@type cached() :: term()
options()Исходный код
@type options() :: Keyword.t()
prepared()Исходный код
@type prepared() :: term()
query_cache()Исходный код
@type query_cache() ::
{:nocache, prepared()}
| {:cache, cache_function :: (cached() -> :ok), prepared()}
| {:cached, update_function :: (cached() -> :ok),
reset_function :: (prepared() -> :ok), cached()} Метаданные запроса, передаваемые в execute/5, для кеширования.
Кеш может находиться в одном из 3 состояний, описанных ниже.
Если задано {:nocache, prepared}, это означает, что запрос не был и не может быть закеширован. Значение prepared — это значение, возвращённое prepare/2.
Если задано {:cache, cache_function, prepared}, это означает, что запрос можно кешировать и его необходимо закешировать, вызвав функцию cache_function с выбранной вами записью кеша. После вызова cache_function при следующей передаче того же запроса в execute/5 он получит кортеж :cached.
Если задано {:cached, update_function, reset_function, cached}, это означает, что запрос уже закеширован. При необходимости обновить закешированный результат можно вызвать update_function/1. Также можно вызвать reset_function/1 с новым подготовленным запросом, чтобы принудительно закешировать запрос заново. Если вызвано reset_function/1, при следующей передаче того же запроса в execute/5 он получит кортеж :cache.
query_meta()Исходный код
@type query_meta() :: %{sources: tuple(), preloads: term(), select: map()} Поля метаданных Ecto.Query (хранятся в кеше)
selected()Исходный код
@type selected() :: term()
Обратные вызовы
execute(adapter_meta, query_meta, query_cache, params, options)Исходный код
@callback execute(
adapter_meta(),
query_meta(),
query_cache(),
params :: list(),
options()
) ::
{non_neg_integer(), [[selected()]] | nil} Выполняет предварительно подготовленный запрос.
Поле query_meta — это карта, содержащая некоторые поля структуры Ecto.Query после нормализации. Например, значения selected запросом, которые затем необходимо вернуть, можно найти в query_meta.
query_cache и его состояние описаны в query_cache/0.
params — это список параметров запроса. Например, для запроса вида from Post, where: [id: ^123] значение params будет равно [123].
Наконец, options — это список ключевых слов с параметрами, переданными операции Repo, которая инициировала вызов адаптера. Допускается любой параметр: это механизм, позволяющий пользователям Ecto настраивать поведение адаптера для каждой операции.
Функция должна возвращать кортеж, содержащий количество записей и набор результатов в виде списка списков. Содержимое записей в самом списке зависит от того, что было выбрано запросом. Набор результатов также может быть nil, если никакие значения не выбираются.
prepare(atom, query)Исходный код
@callback prepare(atom :: :all | :update_all | :delete_all, query :: Ecto.Query.t()) ::
{:cache, prepared()} | {:nocache, prepared()} Команды, вызываемые для подготовки запроса.
Используется в Ecto.Repo.all/2, Ecto.Repo.update_all/3 и Ecto.Repo.delete_all/2. Возвращает кортеж, указывающий, можно ли кешировать этот запрос, и запрос prepared. Запрос prepared — это любой термин, который будет передан адаптеру в execute/5.
stream(adapter_meta, query_meta, query_cache, params, options)Исходный код
@callback stream(adapter_meta(), query_meta(), query_cache(), params :: list(), options()) :: Enumerable.t()
Передаёт поток предварительно подготовленного запроса.
Описание аргументов см. в execute/5.
Возвращает поток значений.
Функции
plan_query(operation, adapter, queryable)Исходный код
Планирует запрос с помощью указанного адаптера.
Для этой функции не требуется репозиторий, поэтому кеш не используется.
prepare_query(operation, repo_name_or_pid, queryable, opts \\ [])Исходный код
Планирует и подготавливает запрос для указанного репозитория, используя его кеш запросов.
Эта операция использует кеш запросов, если он доступен, кроме случаев, когда в качестве параметра передано query_cache: false: тогда кеш запросов не используется.
© 2014 Chris McCord
Licensed under the MIT License.
https://ecto.hexdocs.pm/Ecto.Adapter.Queryable.html