ArangoDB.Ecto
Ecto 2.x adapter for ArangoDB.
It converts Ecto.Query structs to AQL.
At the moment the from, where, order_by, limit
offset and select clauses are supported.
For example, this Ecto query:
from u in "users",
where: like(u.name, "A%") and u.age > 18,
select: [u.name, u.age],
order_by: [desc: u.name],
limit: 10
results in the following AQL query:
FOR u0 IN `users`
FILTER ((u0.`name` LIKE 'A%') && (u0.`age` > 18))
SORT u0.`name` DESC
LIMIT 10
RETURN { `name`: u0.`name`, `age`: u0.`age` }
Usage
In the repository configuration, you need to specify the :adapter:
config :my_app, MyApp.Repo,
adapter: ArangoDB.Ecto,
database: "my_app"
...
The following options can be defined to configure the connection to ArangoDB. Unless specified otherwise, the show default values are used.
host: "localhost",
port: 8529,
scheme: "http",
database: "_system",
arrango_version: 30_000,
headers: %{"Accept": "*/*"},
use_auth: :basic,
username: nil,
password: nil,
When defining your schema, you should use ArangoDB.Ecto.Schema instead of Ecto.Schema.
This implicitly defines the primary key to be the autogenerated id, mapping it to Arango’s
_key field.
If you pass in the option arango_key: true, this translation will not be done,
and your primary key will be _key.
In this case, you will have to manually specify the foreign_key when using associations.
E.g. foreign_key: author__key
defmodule User do
use ArangoDB.Ecto.Schema
schema "users" do
field :name, :string
field :age, :integer
has_many :posts, Post
timestamps()
end
end
defmodule Post do
use ArangoDB.Ecto.Schema
schema "posts" do
field :title, :string
field :text, :binary
belongs_to :author, User
timestamps()
end
end
Installation
If available in Hex, the package can be installed
by adding arangodb_ecto to your list of dependencies in mix.exs:
def deps do
[{:arangodb_ecto, "~> 0.1.0"}]
end
Features not yet implemented
- subqueries
- joins
- on conflict
- upserts
Testing
Before running the tests, configure access to your Arango database by setting these environment variables:
ARANGO_SRVARANGO_USRARANGO_PWD