ex_orient v0.1.2 ExOrient.QueryBuilder
Logic for building query strings to be used in DB commands. This is used in
ExOrient.DB
function calls.
Summary
Functions
Append abstract statement
Append an add statement
Append batch statement
Append a cluster statement
Append a content statement
Append edge statement
Append extends statement
Append fetch plan
Append a from statement
Add a group by clause to a given query
. field
can be a string or atom
Append an increment statement
Add a let block to a query for a given map
Append a limit statement
Append a lock statement
Append a merge statement
Append metadata
Append a nocache statement
Append an on statement
Append an order by clause to a given query
Append a parallel statement
Append polymorphic
Append a put statement
Append a remove statement
Append retry statement
Append a return statement
Append a set statement
Append a skip statement
Append timeout
Append a from statement
Append a type
Append unsafe
Append an unwind statement to a query
Append an upsert statement
Append a values statement
Append vertex statement
Append wait statement
Append a where clause based on a map, 3-elem tuple, or list of 3-elem tuples. Maps and single tuples are both converted to lists of 3-elem tuples and passed down the line. You can also specify a logical operator, such as “OR”. “AND” is used by default if you have multiple fields in your where clause. If you’re doing anything more complicated, you can also pass a string to use directly as the WHERE clause, although this is not preferred
Return a DB class name for a given module name or string
Convert a single item to a list
Wrap a given str
in parentheses
Wrap a given str
in square brackets
Functions
Append abstract statement
iex> ExOrient.QueryBuilder.append_abstract(true, "CREATE CLASS Person", %{})
{"CREATE CLASS Person ABSTRACT", %{}}
Append an add statement
iex> ExOrient.QueryBuilder.append_add([something: "#9:0"], "UPDATE Person", %{})
{"UPDATE Person ADD something = :add_something", %{"add_something" => "#9:0"}}
Append batch statement
iex> ExOrient.QueryBuilder.append_batch(200, "CREATE EDGE Test", %{})
{"CREATE EDGE Test BATCH 200", %{}}
Append a cluster statement
iex> ExOrient.QueryBuilder.append_cluster("Name", "CREATE VERTEX V1", %{})
{"CREATE VERTEX V1 CLUSTER Name", %{}}
Append a content statement
iex> ExOrient.QueryBuilder.append_content(%{key: "val"}, "INSERT INTO Test", %{})
{~s/INSERT INTO Test CONTENT {"key":"val"}/, %{}}
Append edge statement
iex> ExOrient.QueryBuilder.append_edge("#10:0", "DELETE", %{})
{"DELETE EDGE #10:0", %{}}
Append extends statement
iex> ExOrient.QueryBuilder.append_extends("E", "CREATE CLASS Person", %{})
{"CREATE CLASS Person EXTENDS E", %{}}
Append fetch plan
iex> ExOrient.QueryBuilder.append_fetchplan("*:-1", "SELECT FROM Test", %{})
{"SELECT FROM Test FETCHPLAN *:-1", %{}}
Append a from statement
iex> ExOrient.QueryBuilder.append_from("#10:0", "CREATE EDGE Watched", %{})
{"CREATE EDGE Watched FROM #10:0", %{}}
iex> ExOrient.QueryBuilder.append_from("SELECT FROM account", "CREATE EDGE Watched", %{})
{"CREATE EDGE Watched FROM (SELECT FROM account)", %{}}
Add a group by clause to a given query
. field
can be a string or atom.
iex> ExOrient.QueryBuilder.append_group_by(:name, "SELECT FROM Test", %{})
{"SELECT FROM Test GROUP BY name", %{}}
Append an increment statement
iex> ExOrient.QueryBuilder.append_increment([number: 5], "UPDATE Counter", %{})
{"UPDATE Counter INCREMENT number = :increment_number", %{"increment_number" => 5}}
Add a let block to a query for a given map
.
iex> ExOrient.QueryBuilder.append_let(%{"$n" => :name}, "SELECT FROM Test", %{})
{"SELECT FROM Test LET $n = name", %{}}
Append a limit statement
iex> ExOrient.QueryBuilder.append_limit(10, "SELECT FROM Test", %{})
{"SELECT FROM Test LIMIT 10", %{}}
Append a lock statement
iex> ExOrient.QueryBuilder.append_lock(:default, "SELECT FROM Test", %{})
{"SELECT FROM Test LOCK DEFAULT", %{}}
iex> ExOrient.QueryBuilder.append_lock(:record, "SELECT FROM Test", %{})
{"SELECT FROM Test LOCK RECORD", %{}}
Append a merge statement
iex> ExOrient.QueryBuilder.append_merge(%{key: "val"}, "UPDATE Person", %{})
{~s/UPDATE Person MERGE {"key":"val"}/, %{}}
Append metadata
iex> ExOrient.QueryBuilder.append_metadata(%{ignoreNullValues: false}, "CREATE INDEX Test", %{})
{~S/CREATE INDEX Test METADATA {"ignoreNullValues":false}/, %{}}
Append a nocache statement
iex> ExOrient.QueryBuilder.append_nocache(true, "SELECT FROM Test", %{})
{"SELECT FROM Test NOCACHE", %{}}
Append an on statement
iex> ExOrient.QueryBuilder.append_on("Movie (thumbs)", "CREATE INDEX thumbsAuthor", %{})
{"CREATE INDEX thumbsAuthor ON Movie (thumbs)", %{}}
Append an order by clause to a given query
.
iex> ExOrient.QueryBuilder.append_order_by(:name, "SELECT FROM Test", %{})
{"SELECT FROM Test ORDER BY name ASC", %{}}
Append a parallel statement
iex> ExOrient.QueryBuilder.append_parallel(true, "SELECT FROM Test", %{})
{"SELECT FROM Test PARALLEL", %{}}
Append polymorphic
iex> ExOrient.QueryBuilder.append_polymorphic(true, "TRUNCATE CLASS Person", %{})
{"TRUNCATE CLASS Person POLYMORPHIC", %{}}
Append a put statement
iex> ExOrient.QueryBuilder.append_put([addresses: {"CLE", "#12:0"}], "UPDATE Person", %{})
{"UPDATE Person PUT addresses = :put_addresses_key, :put_addresses_val", %{"put_addresses_key" => "CLE", "put_addresses_val" => "#12:0"}}
Append a remove statement
iex> ExOrient.QueryBuilder.append_remove(:name, "UPDATE ProgrammingLanguage", %{})
{"UPDATE ProgrammingLanguage REMOVE name", %{}}
iex> ExOrient.QueryBuilder.append_remove([meta: "type"], "UPDATE ProgrammingLanguage", %{})
{"UPDATE ProgrammingLanguage REMOVE meta = :remove_meta", %{"remove_meta" => "type"}}
Append retry statement
iex> ExOrient.QueryBuilder.append_retry(10, "CREATE EDGE Test", %{})
{"CREATE EDGE Test RETRY 10", %{}}
Append a return statement
iex> ExOrient.QueryBuilder.append_return("@rid", "INSERT INTO Test", %{})
{"INSERT INTO Test RETURN @rid", %{}}
Append a set statement
iex> ExOrient.QueryBuilder.append_set([key: "val"], "INSERT INTO Test", %{})
{"INSERT INTO Test SET key = :set_key", %{"set_key" => "val"}}
Append a skip statement
iex> ExOrient.QueryBuilder.append_skip(20, "SELECT FROM Test", %{})
{"SELECT FROM Test SKIP 20", %{}}
Append timeout
iex> ExOrient.QueryBuilder.append_timeout(5000, "SELECT FROM Test", %{})
{"SELECT FROM Test TIMEOUT 5000", %{}}
iex> ExOrient.QueryBuilder.append_timeout({5000, :return}, "SELECT FROM Test", %{})
{"SELECT FROM Test TIMEOUT 5000 RETURN", %{}}
iex> ExOrient.QueryBuilder.append_timeout({5000, :exception}, "SELECT FROM Test", %{})
{"SELECT FROM Test TIMEOUT 5000 EXCEPTION", %{}}
Append a from statement
iex> ExOrient.QueryBuilder.append_to("#10:0", "CREATE EDGE Watched", %{})
{"CREATE EDGE Watched TO #10:0", %{}}
iex> ExOrient.QueryBuilder.append_to("SELECT FROM account", "CREATE EDGE Watched", %{})
{"CREATE EDGE Watched TO (SELECT FROM account)", %{}}
Append a type
iex> ExOrient.QueryBuilder.append_type(:string, "CREATE INDEX Test", %{})
{"CREATE INDEX Test STRING", %{}}
Append unsafe
iex> ExOrient.QueryBuilder.append_unsafe(true, "TRUNCATE CLASS Person", %{})
{"TRUNCATE CLASS Person UNSAFE", %{}}
Append an unwind statement to a query
iex> ExOrient.QueryBuilder.append_unwind(:friend, "SELECT FROM People", %{})
{"SELECT FROM People UNWIND friend", %{}}
Append an upsert statement
iex> ExOrient.QueryBuilder.append_upsert(true, "UPDATE Person", %{})
{"UPDATE Person UPSERT", %{}}
Append a values statement
iex> ExOrient.QueryBuilder.append_values({[:name, :type], ["Elixir", "Awesome"]}, "INSERT INTO Test", %{})
{"INSERT INTO Test (name, type) VALUES (:values_name, :values_type)", %{"values_name" => "Elixir", "values_type" => "Awesome"}}
Append vertex statement
iex> ExOrient.QueryBuilder.append_vertex("#10:0", "DELETE", %{})
{"DELETE VERTEX #10:0", %{}}
Append wait statement
iex> ExOrient.QueryBuilder.append_wait(100, "CREATE EDGE Test", %{})
{"CREATE EDGE Test WAIT 100", %{}}
Append a where clause based on a map, 3-elem tuple, or list of 3-elem tuples. Maps and single tuples are both converted to lists of 3-elem tuples and passed down the line. You can also specify a logical operator, such as “OR”. “AND” is used by default if you have multiple fields in your where clause. If you’re doing anything more complicated, you can also pass a string to use directly as the WHERE clause, although this is not preferred.
iex> ExOrient.QueryBuilder.append_where(%{name: "Elixir"}, "SELECT FROM Test", %{})
{"SELECT FROM Test WHERE name = :where_name", %{"where_name" => "Elixir"}}
iex> ExOrient.QueryBuilder.append_where({:name, "=", "Elixir"}, "SELECT FROM Test", %{})
{"SELECT FROM Test WHERE name = :where_name", %{"where_name" => "Elixir"}}
iex> ExOrient.QueryBuilder.append_where([{:name, "=", "Elixir"}, {:type, "=", "Awesome"}], "OR", "SELECT FROM Test", %{})
{"SELECT FROM Test WHERE name = :where_name OR type = :where_type", %{"where_name" => "Elixir", "where_type" => "Awesome"}}
iex> ExOrient.QueryBuilder.append_where("name = :name", "SELECT FROM Test", %{name: "Elixir"})
{"SELECT FROM Test WHERE name = :name", %{name: "Elixir"}}
Return a DB class name for a given module name or string.
iex> ExOrient.QueryBuilder.class_name(Models.Person)
"Person"
iex> ExOrient.QueryBuilder.class_name("User")
"User"
Convert a single item to a list
iex> ExOrient.QueryBuilder.to_list([:a, :b])
[:a, :b]
iex> ExOrient.QueryBuilder.to_list(:a)
[:a]
Wrap a given str
in parentheses.
iex> ExOrient.QueryBuilder.wrap_in_parens("hello")
"(hello)"