Current section
Files
Jump to
Current section
Files
lib/query.ex
defmodule AshAge.Query do
@moduledoc """
Query structure for AGE graph queries.
"""
defstruct [:resource, :graph, :label, :repo, :expression, :limit, :offset]
@type t :: %__MODULE__{
resource: module(),
graph: atom(),
label: atom() | String.t(),
repo: module(),
expression: Ash.Filter.t() | nil,
limit: non_neg_integer() | nil,
offset: non_neg_integer() | nil
}
@doc """
Converts a query to Cypher with parameters.
"""
@spec to_cypher(t()) :: {String.t(), map()}
def to_cypher(%__MODULE__{} = query) do
base = "MATCH (n:#{query.label} {$params})"
{where, params} =
if query.expression do
case AshAge.Query.Filter.translate(query.expression, query) do
{:ok, _query, clause, params} -> {clause, params}
_ -> {"", %{}}
end
else
{"", %{}}
end
cypher =
base <>
if where == "" do
""
else
" WHERE " <> where
end
{cypher, params}
end
@doc """
Adds a parameter to the query.
"""
def add_param(query, _value) do
{query, "$param#{map_size(query.expression || {}) + 1}"}
end
end