ash v0.4.0 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
Specs
feature() :: :transact | :async_engine | {:filter, filter_type()} | {:filter_related, Ash.relationship_cardinality()} | :upsert | :composite_primary_key
Specs
filter_type() :: :eq | :in
Link to this section Functions
Specs
can?(feature(), Ash.resource()) :: boolean()
Specs
create(Ash.resource(), Ecto.Changeset.t()) :: {:ok, Ash.record()} | {:error, term()}
Specs
filter(Ash.data_layer_query(), Ash.filter(), Ash.resource()) :: {:ok, Ash.data_layer_query()} | {:error, term()}
Specs
limit(Ash.data_layer_query(), limit :: non_neg_integer(), Ash.resource()) :: {:ok, Ash.data_layer_query()} | {:error, term()}
Specs
offset(Ash.data_layer_query(), offset :: non_neg_integer(), Ash.resource()) :: {:ok, Ash.data_layer_query()} | {:error, term()}
Specs
resource_to_query(Ash.resource()) :: Ash.data_layer_query()
Specs
run_query(Ash.data_layer_query(), central_resource :: Ash.resource()) :: {:ok, [Ash.record()]} | {:error, term()}
Specs
sort(Ash.data_layer_query(), Ash.sort(), Ash.resource()) :: {:ok, Ash.data_layer_query()} | {:error, term()}
Specs
update(Ash.resource(), Ecto.Changeset.t()) :: {:ok, Ash.record()} | {:error, term()}
Specs
upsert(Ash.resource(), Ecto.Changeset.t()) :: {:ok, Ash.record()} | {:error, term()}
Link to this section Callbacks
Specs
can?(Ash.resource(), feature()) :: boolean()
Specs
can_query_async?(Ash.resource()) :: boolean()
Specs
create(Ash.resource(), changeset :: Ecto.Changeset.t()) :: {:ok, Ash.resource()} | {:error, term()}
Specs
custom_filters(Ash.resource()) :: map()
Specs
destroy(record :: Ash.record()) :: :ok | {:error, term()}
Specs
filter(Ash.data_layer_query(), Ash.filter(), resource :: Ash.resource()) :: {:ok, Ash.data_layer_query()} | {:error, term()}
Specs
limit( Ash.data_layer_query(), limit :: non_neg_integer(), resource :: Ash.resource() ) :: {:ok, Ash.data_layer_query()} | {:error, term()}
Specs
offset( Ash.data_layer_query(), offset :: non_neg_integer(), resource :: Ash.resource() ) :: {:ok, Ash.data_layer_query()} | {:error, term()}
Specs
resource_to_query(Ash.resource()) :: Ash.data_layer_query()
Specs
run_query(Ash.data_layer_query(), Ash.resource()) :: {:ok, [Ash.resource()]} | {:error, term()}
Specs
sort(Ash.data_layer_query(), Ash.sort(), resource :: Ash.resource()) :: {:ok, Ash.data_layer_query()} | {:error, term()}
Specs
transaction(Ash.resource(), (() -> term())) :: {:ok, term()} | {:error, term()}
Specs
update(Ash.resource(), changeset :: Ecto.Changeset.t()) :: {:ok, Ash.resource()} | {:error, term()}
Specs
upsert(Ash.resource(), changeset :: Ecto.Changeset.t()) :: {:ok, Ash.resource()} | {:error, term()}