Packages
clickhousex_test
0.4.1
ClickHouse driver for Elixir (uses HTTP). This package was created to support ecto with version > 3.0
Current section
Files
Jump to
Current section
Files
lib/clickhousex/error.ex
defmodule Clickhousex.Error do
@moduledoc """
Defines an error returned from the client.
"""
defexception message: "", code: 0, constraint_violations: []
@type t :: %__MODULE__{
message: binary(),
code: integer(),
constraint_violations: Keyword.t()
}
def exception(message) do
%__MODULE__{
message: to_string(message),
code: get_code(to_string(message)),
constraint_violations: get_constraint_violations(message)
}
end
defp get_code(message) do
case Regex.scan(~r/^Code: (\d+)/i, message) do
[[_, code]] -> translate(code)
_ -> :unknown
end
end
defp translate("57"), do: :table_already_exists
defp translate("60"), do: :base_table_or_view_not_found
defp translate("81"), do: :database_does_not_exists
defp translate("82"), do: :database_already_exists
defp translate("28000"), do: :invalid_authorization
defp translate("08" <> _), do: :connection_exception
defp translate(code), do: code
defp get_constraint_violations(_reason) do
[]
end
end