View Source Ravix.RQL.Query (ravix v0.2.2)

Detructurized Raven Query Language structure

Link to this section Summary

Functions

Adds an negated Ravix.RQL.Tokens.And operation with a Ravix.RQL.Tokens.Condition to the query

Adds an Ravix.RQL.Tokens.And operation with a Ravix.RQL.Tokens.Condition to the query

Executes the delete query in the informed session

Creates a new query for the informed collection or index

Creates a new query with an alias for the informed collection or index

Adds a Ravix.RQL.Tokens.Group operation to the query

Adds a Ravix.RQL.Tokens.Limit operation to the query

Executes the query in the informed session and returns the matched documents

Adds a negated Ravix.RQL.Tokens.Or operation with a Ravix.RQL.Tokens.Condition to the query

Adds an Ravix.RQL.Tokens.Or operation with a Ravix.RQL.Tokens.Condition to the query

Adds a Ravix.RQL.Tokens.Order operation to the query

Create a Query using a raw RQL string

Create a Query using a raw RQL string with replaceable placeholders

Adds a select operation to project fields

Adds a select operation to project fields, leveraging the use of RavenDB Functions

Adds an update operation to the informed query, it supports a Ravix.RQL.Tokens.Update token. The token can be created using the following functions

Executes the patch query in the informed session

Adds a where operation with a Ravix.RQL.Tokens.Condition to the query

Link to this section Types

@type t() :: %Ravix.RQL.Query{
  aliases: map(),
  and_tokens: [Ravix.RQL.Tokens.And.t()],
  from_token: Ravix.RQL.Tokens.From.t() | nil,
  group_token: Ravix.RQL.Tokens.Group.t() | nil,
  is_raw: boolean(),
  limit_token: Ravix.RQL.Tokens.Limit.t() | nil,
  or_tokens: [Ravix.RQL.Tokens.Or.t()],
  order_token: Ravix.RQL.Tokens.Order.t() | nil,
  params_count: non_neg_integer(),
  query_params: map(),
  query_string: String.t(),
  select_token: Ravix.RQL.Tokens.Select.t() | nil,
  update_token: Ravix.RQL.Tokens.Update.t() | nil,
  where_token: Ravix.RQL.Tokens.Where.t() | nil
}

Link to this section Functions

Link to this function

and_not(query, condition)

View Source
@spec and_not(t(), Ravix.RQL.Tokens.Condition.t()) :: t()

Adds an negated Ravix.RQL.Tokens.And operation with a Ravix.RQL.Tokens.Condition to the query

Returns a Ravix.RQL.Query with the and condition

examples

Examples

iex> from = Ravix.RQL.Query.from("cats", "c")
iex> where = Ravix.RQL.Query.where(from, equal_to("cat_name", "Meowvius"))
iex> and_v = Ravix.RQL.Query.and_not(where, equal_to("breed", "Fatto"))
@spec and?(t(), Ravix.RQL.Tokens.Condition.t()) :: t()

Adds an Ravix.RQL.Tokens.And operation with a Ravix.RQL.Tokens.Condition to the query

Returns a Ravix.RQL.Query with the and condition

examples

Examples

iex> from = Ravix.RQL.Query.from("cats", "c")
iex> where = Ravix.RQL.Query.where(from, equal_to("cat_name", "Meowvius"))
iex> and_v = Ravix.RQL.Query.and?(where, equal_to("breed", "Fatto"))
Link to this function

delete_for(query, session_id)

View Source
@spec delete_for(t(), binary()) :: {:error, any()} | {:ok, any()}

Executes the delete query in the informed session

Returns a RavenDB response map

examples

Examples

iex> from("@all_docs")
      |> where(equal_to("cat_name", any_entity.cat_name))
      |> delete_for(session_id)
    {:ok, %{"OperationId" => 2480, "OperationNodeTag" => "A"}}
@spec from(nil | String.t()) :: {:error, :query_document_must_be_informed} | t()

Creates a new query for the informed collection or index

Returns a Ravix.RQL.Query or an {:error, :query_document_must_be_informed} if no collection/index was informed

examples

Examples

iex> Ravix.RQL.Query.from("test")
Link to this function

from(document, as_alias)

View Source
@spec from(nil | String.t(), String.t()) ::
  {:error, :query_document_must_be_informed} | t()

Creates a new query with an alias for the informed collection or index

Returns a Ravix.RQL.Query or an {:error, :query_document_must_be_informed} if no collection/index was informed

examples

Examples

iex> Ravix.RQL.Query.from("test", "t")
@spec group_by(t(), String.t() | [String.t()]) :: t()

Adds a Ravix.RQL.Tokens.Group operation to the query

Returns a Ravix.RQL.Query with the group_by condition

examples

Examples

iex> from = Ravix.RQL.Query.from("cats", "c")
iex> grouped = Ravix.RQL.Query.group_by(from, "breed")
Link to this function

limit(query, skip, next)

View Source
@spec limit(t(), non_neg_integer(), non_neg_integer()) :: t()

Adds a Ravix.RQL.Tokens.Limit operation to the query

Returns a Ravix.RQL.Query with the limit condition

examples

Examples

iex> from = Ravix.RQL.Query.from("cats", "c")
iex> limit = Ravix.RQL.Query.limit(from, 5, 10)
Link to this function

list_all(query, session_id)

View Source
@spec list_all(t(), binary()) :: {:error, any()} | {:ok, any()}

Executes the query in the informed session and returns the matched documents

Returns a RavenDB response map

examples

Examples

iex> from("Cats")
      |> select("name")
      |> where(equal_to("name", cat.name))
      |> list_all(session_id)
    {:ok, %{
        "DurationInMs" => 62,
        "IncludedPaths" => nil,
        "Includes" => %{},
        "IndexName" => "Auto/Cats/By@metadata.@last-modifiedAndidAndname",
        "IndexTimestamp" => "2022-04-22T20:03:03.8373804",
        "IsStale" => false,
        "LastQueryTime" => "2022-04-22T20:03:04.3475275",
        "LongTotalResults" => 1,
        "NodeTag" => "A",
        "ResultEtag" => 6489530344045176783,
        "Results" => [
          %{
            "@metadata" => %{
              "@change-vector" => "A:6445-HJrwf2z3c0G/FHJPm3zK3w",
              "@id" => "beee79e2-2560-408c-a680-253e9bd7d12e",
              "@index-score" => 3.079441547393799,
              "@last-modified" => "2022-04-22T20:03:03.7477980Z",
              "@projection" => true
            },
            "name" => "Lily"
          }
        ],
        "ScannedResults" => 0,
        "SkippedResults" => 0,
        "TotalResults" => 1
      }
    }
Link to this function

or_not(query, condition)

View Source
@spec or_not(t(), Ravix.RQL.Tokens.Condition.t()) :: t()

Adds a negated Ravix.RQL.Tokens.Or operation with a Ravix.RQL.Tokens.Condition to the query

Returns a Ravix.RQL.Query with the and condition

examples

Examples

iex> from = Ravix.RQL.Query.from("cats", "c")
iex> where = Ravix.RQL.Query.where(from, equal_to("cat_name", "Meowvius"))
iex> or_v = Ravix.RQL.Query.or_not(where, equal_to("breed", "Fatto"))
@spec or?(t(), Ravix.RQL.Tokens.Condition.t()) :: t()

Adds an Ravix.RQL.Tokens.Or operation with a Ravix.RQL.Tokens.Condition to the query

Returns a Ravix.RQL.Query with the and condition

examples

Examples

iex> from = Ravix.RQL.Query.from("cats", "c")
iex> where = Ravix.RQL.Query.where(from, equal_to("cat_name", "Meowvius"))
iex> or_v = Ravix.RQL.Query.or?(where, equal_to("breed", "Fatto"))
@spec order_by(
  t(),
  [{:asc, String.t()} | {:desc, String.t()}, ...]
  | {:asc, String.t()}
  | {:desc, String.t()}
) :: t()

Adds a Ravix.RQL.Tokens.Order operation to the query

Returns a Ravix.RQL.Query with the ordering condition

examples

Examples

iex> from = Ravix.RQL.Query.from("cats", "c")
iex> ordered = Ravix.RQL.Query.order_by(from, [{"@metadata.@last-modified", :desc}, {"name", :asc}])
@spec raw(String.t()) :: t()

Create a Query using a raw RQL string

Returns a Ravix.RQL.Query with the raw query

examples

Examples

iex> raw = Ravix.RQL.Query.raw("from @all_docs where cat_name = "Fluffers"")
@spec raw(String.t(), map()) :: t()

Create a Query using a raw RQL string with replaceable placeholders

Returns a Ravix.RQL.Query with the raw query and parameters

examples

Examples

iex> raw = Ravix.RQL.Query.raw("from @all_docs where cat_name = $p1", %{p1: "Fluffers"})
@spec select(t(), Ravix.RQL.Tokens.Select.allowed_select_params()) :: t()

Adds a select operation to project fields

Returns a Ravix.RQL.Query with the select condition

examples

Examples

iex> from = Ravix.RQL.Query.from("cats", "c")
iex> select = Ravix.RQL.Query.select(from, ["name", "breed"])
Link to this function

select_function(query, fields)

View Source
@spec select_function(t(), Keyword.t()) :: t()

Adds a select operation to project fields, leveraging the use of RavenDB Functions

Returns a Ravix.RQL.Query with the select condition

examples

Examples

iex> from = Ravix.RQL.Query.from("cats", "c")
iex> select = Ravix.RQL.Query.select_function(from, ooga: "c.name")
@spec update(t(), Ravix.RQL.Tokens.Update.t()) :: t()

Adds an update operation to the informed query, it supports a Ravix.RQL.Tokens.Update token. The token can be created using the following functions:

Ravix.RQL.Tokens.Update.set(%Update{}, field, new_value) to set values Ravix.RQL.Tokens.Update.inc(%Update{}, field, value_to_inc) to inc values Ravix.RQL.Tokens.Update.dec(%Update{}, field, value_to_dec) to dec values

Returns a Ravix.RQL.Query with the update operation

examples

Examples

iex> from = Ravix.RQL.Query.from("cats", "c")
iex> update = Ravix.RQL.Query.update(from, set(%Update{}, :cat_name, "Fluffer, the hand-ripper"))
Link to this function

update_for(query, session_id)

View Source
@spec update_for(t(), binary()) :: {:error, any()} | {:ok, any()}

Executes the patch query in the informed session

Returns a RavenDB response map

examples

Examples

iex> from("@all_docs", "a")
      |> update(set(%Update{}, :cat_name, "Fluffer, the hand-ripper"))
      |> where(equal_to("cat_name", any_entity.cat_name))
      |> update_for(session_id)
    {:ok, %{"OperationId" => 2480, "OperationNodeTag" => "A"}}
@spec where(t(), Ravix.RQL.Tokens.Condition.t()) :: t()

Adds a where operation with a Ravix.RQL.Tokens.Condition to the query

Returns a Ravix.RQL.Query with the where condition

examples

Examples

iex> from = Ravix.RQL.Query.from("cats", "c")
iex> where = Ravix.RQL.Query.where(from, equal_to("cat_name", "Meowvius"))