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 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 a nocache statement

Append an on statement

Append an order by clause to a given query

Append a parallel statement

Append a put statement

Append a remove statement

Append retry statement

Append a return statement

Append a set statement

Append a skip statement

Append a from statement

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(arg1, query, params)

Append abstract statement

iex> ExOrient.QueryBuilder.append_abstract(true, "CREATE CLASS Person", %{})
{"CREATE CLASS Person ABSTRACT", %{}}
append_add(kv, query, params)

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(num, query, params)

Append batch statement

iex> ExOrient.QueryBuilder.append_batch(200, "CREATE EDGE Test", %{})
{"CREATE EDGE Test BATCH 200", %{}}
append_cluster(cluster, query, params)

Append a cluster statement

iex> ExOrient.QueryBuilder.append_cluster("Name", "CREATE VERTEX V1", %{})
{"CREATE VERTEX V1 CLUSTER Name", %{}}
append_content(map, query, params)

Append a content statement

iex> ExOrient.QueryBuilder.append_content(%{key: "val"}, "INSERT INTO Test", %{})
{~s/INSERT INTO Test CONTENT {"key":"val"}/, %{}}
append_edge(class, query, params)

Append edge statement

iex> ExOrient.QueryBuilder.append_edge("#10:0", "DELETE", %{})
{"DELETE EDGE #10:0", %{}}
append_extends(class, query, params)

Append extends statement

iex> ExOrient.QueryBuilder.append_extends("E", "CREATE CLASS Person", %{})
{"CREATE CLASS Person EXTENDS E", %{}}
append_fetchplan(plan, query, params)

Append fetch plan

iex> ExOrient.QueryBuilder.append_fetchplan("*:-1", "SELECT FROM Test", %{})
{"SELECT FROM Test FETCHPLAN *:-1", %{}}
append_force(arg1, query, params)

Append force

iex> ExOrient.QueryBuilder.append_force(true, "DROP PROPERTY Person.name", %{})
{"DROP PROPERTY Person.name FORCE", %{}}
append_from(class, query, params)

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)", %{}}
append_group_by(field, query, params)

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_increment(kv, query, params)

Append an increment statement

iex> ExOrient.QueryBuilder.append_increment([number: 5], "UPDATE Counter", %{})
{"UPDATE Counter INCREMENT number = :increment_number", %{"increment_number" => 5}}
append_let(map, query, params)

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_limit(number, query, params)

Append a limit statement

iex> ExOrient.QueryBuilder.append_limit(10, "SELECT FROM Test", %{})
{"SELECT FROM Test LIMIT 10", %{}}
append_lock(atom, query, params)

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_merge(map, query, params)

Append a merge statement

iex> ExOrient.QueryBuilder.append_merge(%{key: "val"}, "UPDATE Person", %{})
{~s/UPDATE Person MERGE {"key":"val"}/, %{}}
append_metadata(map, query, params)

Append metadata

iex> ExOrient.QueryBuilder.append_metadata(%{ignoreNullValues: false}, "CREATE INDEX Test", %{})
{~S/CREATE INDEX Test METADATA {"ignoreNullValues":false}/, %{}}
append_nocache(arg1, query, params)

Append a nocache statement

iex> ExOrient.QueryBuilder.append_nocache(true, "SELECT FROM Test", %{})
{"SELECT FROM Test NOCACHE", %{}}
append_on(on, query, params)

Append an on statement

iex> ExOrient.QueryBuilder.append_on("Movie (thumbs)", "CREATE INDEX thumbsAuthor", %{})
{"CREATE INDEX thumbsAuthor ON Movie (thumbs)", %{}}
append_order_by(fields, order \\ "ASC", query, params)

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_parallel(arg1, query, params)

Append a parallel statement

iex> ExOrient.QueryBuilder.append_parallel(true, "SELECT FROM Test", %{})
{"SELECT FROM Test PARALLEL", %{}}
append_polymorphic(arg1, query, params)

Append polymorphic

iex> ExOrient.QueryBuilder.append_polymorphic(true, "TRUNCATE CLASS Person", %{})
{"TRUNCATE CLASS Person POLYMORPHIC", %{}}
append_put(list, query, params)

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_remove(field, query, params)

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(num, query, params)

Append retry statement

iex> ExOrient.QueryBuilder.append_retry(10, "CREATE EDGE Test", %{})
{"CREATE EDGE Test RETRY 10", %{}}
append_return(sql, query, params)

Append a return statement

iex> ExOrient.QueryBuilder.append_return("@rid", "INSERT INTO Test", %{})
{"INSERT INTO Test RETURN @rid", %{}}
append_set(kv, query, params)

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_skip(number, query, params)

Append a skip statement

iex> ExOrient.QueryBuilder.append_skip(20, "SELECT FROM Test", %{})
{"SELECT FROM Test SKIP 20", %{}}
append_timeout(millis, query, params)

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_to(subquery, query, params)

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_type(type, query, params)

Append a type

iex> ExOrient.QueryBuilder.append_type(:string, "CREATE INDEX Test", %{})
{"CREATE INDEX Test STRING", %{}}
append_unsafe(arg1, query, params)

Append unsafe

iex> ExOrient.QueryBuilder.append_unsafe(true, "TRUNCATE CLASS Person", %{})
{"TRUNCATE CLASS Person UNSAFE", %{}}
append_unwind(field, query, params)

Append an unwind statement to a query

iex> ExOrient.QueryBuilder.append_unwind(:friend, "SELECT FROM People", %{})
{"SELECT FROM People UNWIND friend", %{}}
append_upsert(arg1, query, params)

Append an upsert statement

iex> ExOrient.QueryBuilder.append_upsert(true, "UPDATE Person", %{})
{"UPDATE Person UPSERT", %{}}
append_values(arg1, query, params)

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(class, query, params)

Append vertex statement

iex> ExOrient.QueryBuilder.append_vertex("#10:0", "DELETE", %{})
{"DELETE VERTEX #10:0", %{}}
append_wait(millis, query, params)

Append wait statement

iex> ExOrient.QueryBuilder.append_wait(100, "CREATE EDGE Test", %{})
{"CREATE EDGE Test WAIT 100", %{}}
append_where(clause_or_map, logical \\ :and, query, params)

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.

class_name(module)

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"
combine_params(query, params)

Put some parameters into a query string. We try not to use this if we don’t have to.

to_list(list)

Convert a single item to a list

iex> ExOrient.QueryBuilder.to_list([:a, :b])
[:a, :b]

iex> ExOrient.QueryBuilder.to_list(:a)
[:a]
wrap_in_parens(str)

Wrap a given str in parentheses.

iex> ExOrient.QueryBuilder.wrap_in_parens("hello")
"(hello)"
wrap_in_square_brackets(str)

Wrap a given str in square brackets.

iex> ExOrient.QueryBuilder.wrap_in_square_brackets("test")
"[test]"