Git Product home page Git Product logo

arangodb_ecto's Introduction

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 _key field as required by ArangoDB. For that reason you unfortunately also have to manually specify the foreign_key when using associations.

defmodule User do
  use ArangoDB.Ecto.Schema

  schema "users" do
    field :name, :string
    field :age, :integer
    has_many :posts, Post, foreign_key: :author__key
    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_SRV
  • ARANGO_USR
  • ARANGO_PWD

arangodb_ecto's People

Contributors

mpoeter avatar mtoeltsch avatar pinx avatar

Watchers

Fred Every avatar James Cloos avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.