Current section
Files
Jump to
Current section
Files
lib/ash_clickhouse/error.ex
defmodule AshClickhouse.Error do
@moduledoc """
Error types for the AshClickhouse data layer.
Errors raised or returned by the data layer are wrapped in one of these
structs so that Ash can present consistent, structured error messages.
"""
defmodule ClickhouseError do
@moduledoc "An error returned by the ClickHouse client."
defexception [:message, :query, :params, :reason]
def from_error(%__MODULE__{} = error), do: error
def from_error(%{message: message} = reason) do
%__MODULE__{message: to_string(message), reason: reason}
end
def from_error(reason) do
%__MODULE__{message: inspect(reason), reason: reason}
end
@impl true
def exception(value) when is_binary(value) do
%__MODULE__{message: value}
end
def exception(opts) when is_list(opts) do
struct!(__MODULE__, opts)
end
def exception(reason) do
from_error(reason)
end
end
defmodule QueryError do
@moduledoc "An error while building or running a query."
defexception [:message, :query, :params]
def from_error(message) when is_binary(message), do: %__MODULE__{message: message}
def from_error(%__MODULE__{} = error), do: error
def from_error(reason), do: %__MODULE__{message: inspect(reason)}
end
defmodule ConfigurationError do
@moduledoc "An error in data layer or repo configuration."
defexception [:message]
def exception(value) when is_binary(value), do: %__MODULE__{message: value}
def exception(opts) when is_list(opts), do: struct!(__MODULE__, opts)
end
@doc """
Wraps a ClickHouse client error into an Ash-compatible error.
"""
@spec wrap_clickhouse_error(term()) :: AshClickhouse.Error.ClickhouseError.t()
def wrap_clickhouse_error(error) do
ClickhouseError.from_error(error)
end
end