Modules
Connection handle for ArcadeDB — pure data, no process.
A server-returned ArcadeDB error, normalized to a typed reason.
Server-side database export over ArcadeDB's EXPORT DATABASE file://<name> command (symmetric to
Arcadic.Import). The target is a bare <name> written to the server's configured exports
directory — a path/traversal character is rejected value-free (ArcadeDB itself rejects a directory
in the target: "Export file cannot contain path change"). with: settings (e.g. format: "jsonl",
overwrite: true) reuse Arcadic.Import's no-parens grammar: names Arcadic.Identifier-validated,
values number/boolean/string (string values charset-allowlisted, injection-inert). Tenant-blind;
every rejection is value-free (never echoes the name/value — AGENTS.md Rule 3). The success row
(operation/toUrl/totalRecords/…) is top-level-@props-stripped by Result.normalize (a
shallow Map.drop per row — correct because the export row is flat) via command/4.
Allowlist validation for identifiers arcadic places into a URL path or a statement (database names, labels, property names).
Bulk load over ArcadeDB's IMPORT DATABASE command (imports a CSV / JSON / JSONL / GraphML /
Neo4j / OrientDB / ArcadeDB export into conn.database, server-side).
Behaviour for an ArcadeDB migration — a versioned pair of forward/backward steps.
Migrations are tenant-blind schema changes; author raw DDL/DML via Arcadic.command/4
in up/1 and down/1.
Declares an ordered list of migration modules.
Runs Arcadic.Migrations in order and tracks applied versions in the
_arcadic_migrations document type. Tenant-blind: it runs DDL/DML and records
integer versions — no tenant, scope, or Ash concept. Assumes single-process,
deploy-time execution (like every migration tool); it does not take an advisory
lock, so do not run two migrators concurrently against one database.
Normalizes an ArcadeDB command/query response envelope into a list of rows.
Read-only introspection of ArcadeDB schema metadata — types, properties, indexes, and
buckets — over the SQL SELECT FROM schema:* surface (Cypher does not parse it).
Server-level admin: create/drop/list databases, existence, readiness. Every
identifier is allowlist-validated BEFORE any request reaches the wire (fixes the
interpolation surface a hand-written create database <name> would open). Returns
are tagged tuples — a transport failure is never swallowed into a bare boolean.
Not delegated from the Arcadic facade: destructive admin stays namespaced.
Value-free :telemetry.span/3 wrapper. Owns the metadata allowlist — the single
enforcement point for "no statement text, no params, no values, and NO database
name" (the DB name is the tenant/mode selector upstream; tenant-blind includes
telemetry). An off-allowlist key raises rather than shipping identity downstream.
Mirrors ash_age's R7 allowlist pattern.
Session transactions. transaction/3 begins a session, runs the fun with a
session-scoped conn, and commits on a normal return. On an exception it rolls
back and RERAISES (postgrex semantics — unexpected failures propagate, they do
not become {:error, …}). Use rollback/2 for an intentional abort that yields
{:error, reason}. Nesting raises — there is no verified HTTP savepoint contract.
The transport seam (charter D2). One implementation ships — Arcadic.Transport.HTTP
(Req/Finch). A future Bolt adapter implements the same callbacks. Callbacks are
SEMANTIC (mode/session), not HTTP-verb-shaped, so a non-HTTP transport can honor
them. This behaviour is also the mock seam consumed by ash_arcadic's tests.
Bolt transport for ArcadeDB via the boltx driver (Bolt v4). Verified interop
(spec §15 P19/P20). The consumer starts a Bolt connection with start_link/1
(which encodes the ArcadeDB-correct defaults — Bolt v4 pin, and the plaintext
bolt scheme by default; pass scheme: "bolt+s" for TLS, see below) and passes
it as transport_options: [bolt: conn_ref].
The HTTP Cypher transport (the only implementation of Arcadic.Transport).
A transport/network failure with no HTTP response (connection refused, timeout,
closed). reason is the underlying Mint/Finch reason atom — value-free.
ArcadeDB dense vector search — tenant-blind index DDL and nearest-neighbour /
hybrid-fusion query builders over ArcadeDB's LSM_VECTOR surface.