Current section

Files

Jump to
ecto3_mnesia lib ecto adapters mnesia query qlc context.ex
Raw

lib/ecto/adapters/mnesia/query/qlc/context.ex

defmodule Ecto.Adapters.Mnesia.Query.Qlc.Context do
@moduledoc false
alias Ecto.Adapters.Mnesia.Source
defstruct sources: [],
sources_index: %{},
qualifiers: [],
joins: [],
bindings: [],
extra_bindings: [],
extra_index: 0
@type t :: %__MODULE__{}
def new(sources) do
sources_index =
sources
|> Enum.with_index()
|> Map.new(fn {s, i} -> {i, s} end)
%__MODULE__{
sources: sources,
sources_index: sources_index
}
end
def source_var(%{sources_index: sources}, index, field) do
sources
|> Map.get(index)
|> Source.to_erl_var(field)
end
def binding_var(context, i) do
v = :"B#{i}"
{v, %{context | bindings: [v | context.bindings]}}
end
def bindings(context), do: Enum.reverse(context.bindings)
def extra_binding(context, value) do
var = :"EB#{context.extra_index}"
{var,
%{
context
| extra_index: context.extra_index + 1,
extra_bindings: [{var, value} | context.extra_bindings]
}}
end
def extra_bindings(context), do: Enum.reverse(context.extra_bindings)
end