Current section
Files
Jump to
Current section
Files
lib/ex_arrow/adbc/error.ex
defmodule ExArrow.ADBC.Error do
@moduledoc """
ADBC error or diagnostic message.
Drivers return errors as strings; ExArrow passes them through as `{:error, message}`.
When available, `message` may include driver-specific details (e.g. SQLSTATE, vendor code).
Use this module to normalize or inspect errors if you need structured handling.
Future versions may parse `message` into `sqlstate` and `vendor_code` where the driver
provides them in a known format.
"""
defstruct [:message, :sqlstate, :vendor_code]
@type t :: %__MODULE__{
message: String.t(),
sqlstate: String.t() | nil,
vendor_code: integer() | nil
}
@doc """
Wraps a raw error (string from NIF/driver) into an Error struct.
`sqlstate` and `vendor_code` are left as nil unless parsed from the message.
"""
@spec from_message(String.t()) :: t()
def from_message(message) when is_binary(message) do
%__MODULE__{message: message, sqlstate: nil, vendor_code: nil}
end
@doc """
Returns the error message (string).
Accepts either an Error struct or a raw string for convenience.
"""
@spec message(t() | String.t()) :: String.t()
def message(%__MODULE__{message: msg}), do: msg
def message(msg) when is_binary(msg), do: msg
end