Kylie (can't get you out of my graph data base)

Hex.pmHex.pmLicense

Kylie is a blond and small Erlang client for Cayley graph data base

Cayley is an open-source graph data base written in go

kylie


Example:

Eshell V7.0  (abort with ^G)
1> squad:new("Kylie", "is", "singer").
#{object => "singer",predicate => "is",subject => "Kylie"}

2> kylie:add(squad:new(<<"Kylie">>, <<"is">>,<< "singer">>)).
{200, <<"{\"result\": \"Successfully wrote 1 quads.\"}">>}
2>  kylie:add(squad:new(<<"Kylie">>, <<"is">>,<< "songwriter">>)).
{200, <<"{\"result\": \"Successfully wrote 1 quads.\"}">>}
3> kylie:add(squad:new(<<"Kylie">>, <<"is">>,<< "model">>)).
{200, <<"{\"result\": \"Successfully wrote 1 quads.\"}">>}

You can do a generic query with Subject and Predicate.

4> kylie:get_result(<<"Kylie">>, <<"is">>).
{ok, [<<"model">>,<<"singer">>,<<"songwriter">>]}

You can also do a proplisp(?) and generate a query in the Gremblin way.

The idea is build this query:

  g.V('Kylie').Out('recorded').Out('incluided').All()"

With this proplisp:

   [{graph_vertex, <<"Kylie">>}, {out, <<"recorded">>}, {out, <<"incluided">>}, all]
5> kylie:add(squad:new(<<"Kylie">>, <<"recorded">>, <<"Fever">>)).
{200, <<"{\"result\": \"Successfully wrote 1 quads.\"}">>}
6> kylie:add(squad:new(<<"Fever">>, <<"incluided">>, <<"Can't Get You Out of My Head">>)).
{200, <<"{\"result\": \"Successfully wrote 1 quads.\"}">>}
7> kylie:add(squad:new(<<"Fever">>, <<"incluided">>, <<"In Your Eyes">>)),
{200, <<"{\"result\": \"Successfully wrote 1 quads.\"}">>}

8>PropLispQuery = [{graph_vertex, <<"Kylie">>}, {out, <<"recorded">>}, {out, <<"incluided">>}, all].
[{graph_vertex,<<"Kylie">>},{out,<<"recorded">>},{out,<<"incluided">>},all]
9>GremblinQuery = kylie:build_gremblin_human_readable(PropLispQuery).
<<"g.V('Kylie').Out('recorded').Out('incluided').All()">>
10>{ok, Result} = kylie:query(GremblinQuery).
{ok,[<<"Can't Get You Out of My Head">>,<<"In Your Eyes">>]}

Example:

Interactive Elixir (1.3.0) - press Ctrl+C to exit (type h() ENTER for help)
iex(1)> Squad.new("Kylie", "is", "singer")
%{object: "singer", predicate: "is", subject: "Kylie"}

iex(2)> Kylie.add(Squad.new("Kylie", "is", "model"))
{200, "{\"result\": \"Successfully wrote 1 quads.\"}"}
iex(3)> Kylie.add(Squad.new("Kylie", "is", "songwriter"))
{200, "{\"result\": \"Successfully wrote 1 quads.\"}"}
iex(4)> Kylie.add(Squad.new("Kylie", "is", "actress"))
{200, "{\"result\": \"Successfully wrote 1 quads.\"}"}

You can do a generic query with Subject and Predicate.

iex(4)> Kylie.get_result("Kylie", "is")
{ok, ["model","singer","songwriter"]}

You can also do a proplisp(?) and generate a query in the Gremblin way.

The idea is build this query:

  g.V("Kylie").Out("recorded").Out("incluided").All()"

With this proplisp:

   [{:graph_vertex, "Kylie"}, {:out, "recorded"}, {:out, "incluided"}, :all]
iex(5)> Kylie.add(Squad.new("Kylie", "recorded", "Fever"))
{200, "{\"result\": \"Successfully wrote 1 quads.\"}"}
iex(6)> Kylie.add(Squad.new("Fever", "incluided", "Can't Get You Out of My Head"))
{200, "{\"result\": \"Successfully wrote 1 quads.\"}"}
iex(7)> Kylie.add(Squad.new("Fever", "incluided", "In Your Eyes"))
{200, "{\"result\": \"Successfully wrote 1 quads.\"}"}

iex(8)> propLispQuery = [{:graph_vertex, "Kylie"}, {:out, "recorded"}, {:out, "incluided"}, :all]
[{:graph_vertex, "Kylie"}, {:out, "recorded"}, {:out, "incluided"}, :all]
iex(9)> gremblinQuery = Kylie.build_gremblin_human_readable(propLispQuery)
"g.V("Kylie").Out("recorded").Out("incluided").All()"
iex(10)> {ok, result} = Kylie.query(gremblinQuery)
{:ok,["Can't Get You Out of My Head","In Your Eyes"]}