ash_postgres/lib/custom_aggregate.ex

27 lines
621 B
Elixir
Raw Permalink Normal View History

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])
)
"""
2023-04-06 04:32:28 +12:00
@callback dynamic(opts :: Keyword.t(), binding :: integer) :: Ecto.Query.dynamic_expr()
defmacro __using__(_) do
quote do
@behaviour AshPostgres.CustomAggregate
end
end
end