Ash DataLayer for ArcadeDB — the "ash_postgres of ArcadeDB". Executes through
the tenant-blind arcadic transport. Exposes an arcade do … end resource
section and implements the Ash.DataLayer behaviour.
use Ash.Resource, data_layer: AshArcadic.DataLayer
arcade do
client MyApp.ArcadicClient # module implementing AshArcadic.Client
label :Person # defaults to the short module name
skip [:computed]
sensitive [:ssn] # binary-storage-typed or skipped
# database "my_db" # per-resource default (non-:context)
# tenant_database {MyApp.Tenancy, :db_for, []} # :context override
endAdvertised capabilities (see can?/2 for the authoritative matrix): CRUD +
MERGE upserts + atomic SET, bulk writes (bulk_create, multi-row bulk
upsert, heterogeneous update_many, query-scoped update_query/
destroy_query), filter/sort/distinct/combinations push-down, offset +
keyset pagination (Ash.stream!), query + relationship aggregates,
expression calculations, standard relationships + Traverse manual
traversal + edge writes, dense/sparse/hybrid vector search, transactions,
:async_engine, telemetry. Multitenancy (:attribute + :context) is
fail-closed on every path; errors are value-free (no value, tenant, or byte
in a message). Per-feature fine print: usage-rules.md.