GraphNight.Client (graphnight v1.0.0)

Copy Markdown

High-level client for GraphNight semantic layer.

Provides a convenient Elixir API for working with GraphNight models and queries.

Summary

Types

Opaque engine handle returned by init/1.

Functions

Build a simple aggregation query.

Create a new datasource.

Create a new model.

Dry-run a query (returns SQL without executing).

Get a datasource by name.

Initialize a GraphNight engine with the given storage path.

List all datasources.

List all models, optionally filtered by datasource.

Update an existing model.

Types

engine()

@type engine() :: GraphNight.engine()

Opaque engine handle returned by init/1.

Functions

build_query(opts)

@spec build_query(keyword()) :: GraphNight.Query.t()

Build a simple aggregation query.

Example

query = GraphNight.Client.build_query(
  name: "orders",
  measures: [GraphNight.Measure.new("revenue:sum")],
  dimensions: [GraphNight.Dimension.new("status")],
  filters: [GraphNight.Filter.eq("status", "completed")]
)

create_datasource(engine, ds)

@spec create_datasource(engine(), GraphNight.DataSource.t()) ::
  {:ok, GraphNight.DataSource.t()} | {:error, String.t()}

Create a new datasource.

create_model(engine, model)

@spec create_model(engine(), GraphNight.Model.t()) ::
  {:ok, GraphNight.Model.t()} | {:error, String.t()}

Create a new model.

delete_model(engine, name, datasource \\ nil)

@spec delete_model(engine(), String.t(), String.t() | nil) ::
  {:ok, boolean()} | {:error, String.t()}

Delete a model.

dry_run_query(engine, query)

@spec dry_run_query(engine(), GraphNight.Query.t()) ::
  {:ok, GraphNight.QueryResult.t()} | {:error, String.t()}

Dry-run a query (returns SQL without executing).

execute_query(engine, query, dry_run \\ false)

@spec execute_query(engine(), GraphNight.Query.t(), boolean()) ::
  {:ok, GraphNight.QueryResult.t()} | {:error, String.t()}

Execute a query.

Returns a QueryResult with data, columns, SQL, and execution time.

get_datasource(engine, name)

@spec get_datasource(engine(), String.t()) ::
  {:ok, GraphNight.DataSource.t() | nil} | {:error, String.t()}

Get a datasource by name.

get_model(engine, name, datasource \\ nil)

@spec get_model(engine(), String.t(), String.t() | nil) ::
  {:ok, GraphNight.Model.t() | nil} | {:error, String.t()}

Get a model by name.

init(storage_path)

@spec init(String.t()) :: {:ok, engine()} | {:error, String.t()}

Initialize a GraphNight engine with the given storage path.

Example

{:ok, engine} = GraphNight.Client.init("./graphnight_data")

list_datasources(engine)

@spec list_datasources(engine()) ::
  {:ok, [GraphNight.DataSource.t()]} | {:error, String.t()}

List all datasources.

list_models(engine, datasource \\ nil)

@spec list_models(engine(), String.t() | nil) ::
  {:ok, [GraphNight.Model.t()]} | {:error, String.t()}

List all models, optionally filtered by datasource.

update_model(engine, name, model)

@spec update_model(engine(), String.t(), GraphNight.Model.t()) ::
  {:ok, GraphNight.Model.t()} | {:error, String.t()}

Update an existing model.