ash v0.1.8 Ash.DataLayer behaviour View Source

The interface for being an ash data layer.

Typically this will be provided by an extension, but you could implement one yourself and add it to your resource with @data_layer YourDataLayer

This is a large behaviour, and this capability is not complete, but the idea is to have a large amount of optional callbacks, and use the can?/2 callback to ensure that the engine only ever tries to interact with the data layer in ways that it supports.

Link to this section Summary

Link to this section Types

Link to this type

feature()

View Source
feature() ::
  :transact
  | :async_engine
  | {:filter, filter_type()}
  | {:filter_related, Ash.relationship_cardinality()}
  | :upsert
Link to this type

filter_type()

View Source
filter_type() :: :eq | :in

Link to this section Functions

Link to this function

can?(feature, resource)

View Source
can?(feature(), Ash.resource()) :: boolean()
Link to this function

create(resource, changeset)

View Source
create(Ash.resource(), Ecto.Changeset.t()) ::
  {:ok, Ash.record()} | {:error, term()}
Link to this function

custom_filters(resource)

View Source
Link to this function

filter(query, filter, resource)

View Source
filter(Ash.data_layer_query(), Ash.filter(), Ash.resource()) ::
  {:ok, Ash.data_layer_query()} | {:error, term()}
Link to this function

limit(query, limit, resource)

View Source
limit(Ash.data_layer_query(), limit :: non_neg_integer(), Ash.resource()) ::
  {:ok, Ash.data_layer_query()} | {:error, term()}
Link to this function

offset(query, offset, resource)

View Source
offset(Ash.data_layer_query(), offset :: non_neg_integer(), Ash.resource()) ::
  {:ok, Ash.data_layer_query()} | {:error, term()}
Link to this function

resource_to_query(resource)

View Source
resource_to_query(Ash.resource()) :: Ash.data_layer_query()
Link to this function

run_query(query, central_resource)

View Source
run_query(Ash.data_layer_query(), central_resource :: Ash.resource()) ::
  {:ok, [Ash.record()]} | {:error, term()}
Link to this function

sort(query, sort, resource)

View Source
sort(Ash.data_layer_query(), Ash.sort(), Ash.resource()) ::
  {:ok, Ash.data_layer_query()} | {:error, term()}
Link to this function

transact(resource, func)

View Source
Link to this function

update(resource, changeset)

View Source
update(Ash.resource(), Ecto.Changeset.t()) ::
  {:ok, Ash.record()} | {:error, term()}
Link to this function

upsert(resource, changeset)

View Source
upsert(Ash.resource(), Ecto.Changeset.t()) ::
  {:ok, Ash.record()} | {:error, term()}

Link to this section Callbacks

Link to this callback

can_query_async?(arg1)

View Source
can_query_async?(Ash.resource()) :: boolean()
Link to this callback

create(arg1, changeset)

View Source
create(Ash.resource(), changeset :: Ecto.Changeset.t()) ::
  {:ok, Ash.resource()} | {:error, term()}
Link to this callback

custom_filters(arg1)

View Source (optional)
custom_filters(Ash.resource()) :: map()
Link to this callback

destroy(record)

View Source
destroy(record :: Ash.record()) :: :ok | {:error, term()}
Link to this callback

filter(arg1, arg2, resource)

View Source
filter(Ash.data_layer_query(), Ash.filter(), resource :: Ash.resource()) ::
  {:ok, Ash.data_layer_query()} | {:error, term()}
Link to this callback

limit(arg1, limit, resource)

View Source
limit(
  Ash.data_layer_query(),
  limit :: non_neg_integer(),
  resource :: Ash.resource()
) :: {:ok, Ash.data_layer_query()} | {:error, term()}
Link to this callback

offset(arg1, offset, resource)

View Source
offset(
  Ash.data_layer_query(),
  offset :: non_neg_integer(),
  resource :: Ash.resource()
) :: {:ok, Ash.data_layer_query()} | {:error, term()}
Link to this callback

resource_to_query(arg1)

View Source
resource_to_query(Ash.resource()) :: Ash.data_layer_query()
Link to this callback

run_query(arg1, arg2)

View Source
run_query(Ash.data_layer_query(), Ash.resource()) ::
  {:ok, [Ash.resource()]} | {:error, term()}
Link to this callback

sort(arg1, arg2, resource)

View Source
sort(Ash.data_layer_query(), Ash.sort(), resource :: Ash.resource()) ::
  {:ok, Ash.data_layer_query()} | {:error, term()}
Link to this callback

transaction(arg1, function)

View Source (optional)
transaction(Ash.resource(), (() -> term())) :: {:ok, term()} | {:error, term()}
Link to this callback

update(arg1, changeset)

View Source
update(Ash.resource(), changeset :: Ecto.Changeset.t()) ::
  {:ok, Ash.resource()} | {:error, term()}
Link to this callback

upsert(arg1, changeset)

View Source (optional)
upsert(Ash.resource(), changeset :: Ecto.Changeset.t()) ::
  {:ok, Ash.resource()} | {:error, term()}