Packages
postgrex
0.22.1
1.0.0-rc.1
retired
1.0.0-rc.0
retired
0.22.3
0.22.2
0.22.1
0.22.0
0.21.1
0.21.0
0.20.0
0.19.3
0.19.2
0.19.1
0.19.0
0.18.0
0.17.5
0.17.4
0.17.3
0.17.2
0.17.1
0.17.0
0.16.5
0.16.4
0.16.3
0.16.2
0.16.1
0.16.0
0.15.13
0.15.12
0.15.11
0.15.10
0.15.9
0.15.8
0.15.7
0.15.6
0.15.5
0.15.4
0.15.3
0.15.2
0.15.1
0.15.0
0.14.3
0.14.2
0.14.1
0.14.0
0.14.0-rc.1
0.14.0-rc.0
0.13.5
0.13.4
0.13.3
0.13.2
0.13.1
0.13.0
0.13.0-rc.0
0.12.2
0.12.1
0.12.0
0.11.2
0.11.1
0.11.0
0.10.0
0.9.1
0.9.0
0.8.4
0.8.3
0.8.2
0.8.1
0.8.0
0.7.0
0.6.0
0.5.5
0.5.4
0.5.3
0.5.2
0.5.1
0.5.0
0.4.2
PostgreSQL driver for Elixir
Security advisory:
This version has known vulnerabilities.
View advisories
Current section
Files
Jump to
Current section
Files
lib/postgrex/error.ex
defmodule Postgrex.Error do
defexception [:message, :postgres, :connection_id, :query]
@type t :: %Postgrex.Error{}
@metadata [:table, :column, :constraint, :hint]
def exception(opts) do
postgres =
if fields = Keyword.get(opts, :postgres) do
code = fields.code
fields
|> Map.put(:pg_code, code)
|> Map.put(:code, Postgrex.ErrorCode.code_to_name(code))
end
message = Keyword.get(opts, :message)
connection_id = Keyword.get(opts, :connection_id)
%Postgrex.Error{postgres: postgres, message: message, connection_id: connection_id}
end
def message(e) do
if map = e.postgres do
IO.iodata_to_binary([
map.severity,
?\s,
map.pg_code,
?\s,
[?(, Atom.to_string(map.code), ?)],
?\s,
map.message,
build_query(e.query),
build_metadata(map),
build_detail(map)
])
else
e.message
end
end
defp build_query(nil), do: []
defp build_query(query), do: ["\n\n query: ", query]
defp build_metadata(map) do
metadata = for k <- @metadata, v = map[k], do: "\n #{k}: #{v}"
case metadata do
[] -> []
_ -> ["\n" | metadata]
end
end
defp build_detail(%{detail: detail}) when is_binary(detail), do: ["\n\n" | detail]
defp build_detail(_), do: []
end
defmodule Postgrex.QueryError do
defexception [:message]
end