ash_postgres/lib/custom_aggregate.ex
2023-04-05 12:32:28 -04:00

26 lines
621 B
Elixir

defmodule AshPostgres.CustomAggregate do
@moduledoc """
A custom aggregate implementation for ecto.
"""
@doc """
The dynamic expression to create the aggregate.
The binding refers to the resource being aggregated,
use `as(^binding)` to reference it.
For example:
Ecto.Query.dynamic(
[],
fragment("string_agg(?, ?)", field(as(^binding), ^opts[:field]), ^opts[:delimiter])
)
"""
@callback dynamic(opts :: Keyword.t(), binding :: integer) :: Ecto.Query.dynamic_expr()
defmacro __using__(_) do
quote do
@behaviour AshPostgres.CustomAggregate
end
end
end