Current section
Files
Jump to
Current section
Files
lib/aql/for.ex
defmodule Durango.AQL.For do
defmacro inject_parser() do
quote do
alias Durango.Query
alias Durango.Dsl
def parse_query(%Query{} = q, [{:for, labels}, {:in_inbound, {prev_label, attr}} | rest ]) do
Query.ensure_in_locals!(q, prev_label)
labels = Dsl.Helpers.extract_labels(labels)
q
|> Query.put_local_var(labels)
|> Query.append_tokens([
"FOR",
Dsl.Helpers.stringify(labels, ", "),
"IN",
"INBOUND",
Dsl.Helpers.stringify(prev_label),
Dsl.Helpers.stringify(attr),
])
|> parse_query(rest)
end
def parse_query(%Query{} = q, [{:for, labels}, {:in, collection} | rest ]) do
labels = Dsl.Helpers.extract_labels(labels)
q
|> Query.append_tokens([
"FOR",
Dsl.Helpers.stringify(labels, ", "),
"IN",
Dsl.Helpers.stringify(collection),
])
|> Query.put_local_var(labels)
|> Query.put_collection(labels, collection)
|> Dsl.parse_query(rest)
end
def parse_query(%Query{} = q, [{:for, labels}, {:in_outbound, {prev_label, attr}} | rest ]) do
Query.ensure_in_locals!(q, prev_label)
labels = Dsl.Helpers.extract_labels(labels)
q
|> Query.put_local_var(labels)
|> Query.append_tokens([
"FOR",
Dsl.Helpers.stringify(labels, ", "),
"IN",
"OUTBOUND",
Dsl.Helpers.stringify(prev_label),
Dsl.Helpers.stringify(attr),
])
|> Dsl.parse_query(rest)
end
def parse_query(%Query{} = q, [{:for, {:in, _, [labels, collection]}} | rest ]) do
labels = Dsl.Helpers.extract_labels(labels)
q
|> Query.append_tokens([
"FOR",
Dsl.Helpers.stringify(labels, ", "),
"IN",
Dsl.Helpers.stringify(collection),
])
|> Query.put_local_var(labels)
|> Query.put_collection(labels, collection)
|> Dsl.parse_query(rest)
end
end
end
end