Lotus.Storage (Lotus v0.16.4)

Copy Markdown View Source

Storage operations for Lotus queries.

Handles CRUD operations for persisting and retrieving queries.

Summary

Functions

Creates a new query.

Deletes a query.

Gets a single query by ID.

Gets a single query by ID.

Lists all queries from the database.

Lists queries with filtering search term.

Run a saved query directly from Storage.

Updates a query.

Types

attrs()

@type attrs() :: map()

changeset_error()

@type changeset_error() :: Ecto.Changeset.t()

id()

@type id() :: integer() | binary()

query_list()

@type query_list() :: [Lotus.Storage.Query.t()]

Functions

create_query(attrs)

@spec create_query(attrs()) ::
  {:ok, Lotus.Storage.Query.t()} | {:error, changeset_error()}

Creates a new query.

Examples

iex> create_query(%{name: "Users", statement: "SELECT * FROM users"})
{:ok, %Query{}}

iex> create_query(%{})
{:error, %Ecto.Changeset{}}

delete_query(query)

@spec delete_query(Lotus.Storage.Query.t()) ::
  {:ok, Lotus.Storage.Query.t()} | {:error, changeset_error()}

Deletes a query.

Examples

iex> delete_query(query)
{:ok, %Query{}}

get_query(id)

@spec get_query(id()) :: Lotus.Storage.Query.t() | nil

Gets a single query by ID.

Returns nil if the Query does not exist.

get_query!(id)

@spec get_query!(id()) :: Lotus.Storage.Query.t() | no_return()

Gets a single query by ID.

Raises Ecto.NoResultsError if the Query does not exist.

list_queries()

@spec list_queries() :: query_list()

Lists all queries from the database.

Returns a list of Query structs.

list_queries_by(opts \\ [])

@spec list_queries_by(keyword()) :: [Lotus.Storage.Query.t()]

Lists queries with filtering search term.

Options

  • :search - Search term to match against query names (case insensitive)

Examples

iex> list_queries_by(search: "user")
[%Query{}, ...]

run(q, opts \\ [])

@spec run(
  Lotus.Storage.Query.t(),
  keyword()
) :: {:ok, Lotus.Result.t()} | {:error, term()}

Run a saved query directly from Storage.

This is a convenience function that delegates to Lotus.run_query/2.

Examples

query = get_query!(123)
{:ok, result} = run(query, statement_timeout_ms: 3_000)

update_query(query, attrs)

@spec update_query(Lotus.Storage.Query.t(), attrs()) ::
  {:ok, Lotus.Storage.Query.t()} | {:error, changeset_error()}

Updates a query.

Examples

iex> update_query(query, %{name: "New Name"})
{:ok, %Query{}}

iex> update_query(query, %{name: ""})
{:error, %Ecto.Changeset{}}