ex_orient v1.4.0 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 force
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, keyword list, 3-elem tuple, or list of
3-elem tuples. Maps, keyword lists, single tuples are all 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
Put some parameters into a query string. We try not to use this if we don’t have to
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 force
iex> ExOrient.QueryBuilder.append_force(true, "DROP PROPERTY Person.name", %{})
{"DROP PROPERTY Person.name FORCE", %{}}
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, keyword list, 3-elem tuple, or list of
3-elem tuples. Maps, keyword lists, single tuples are all 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.
iex> ExOrient.QueryBuilder.class_name(Models.Person)
"Person"
iex> ExOrient.QueryBuilder.class_name("User")
"User"
Put some parameters into a query string. We try not to use this if we don’t have to.
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)"