zf

zenflows testing
git clone https://s.sonu.ch/~srfsh/zf.git
Log | Files | Refs | Submodules | README | LICENSE

error.ex (1420B)


      1 defmodule Postgrex.Error do
      2   defexception [:message, :postgres, :connection_id, :query]
      3 
      4   @type t :: %Postgrex.Error{}
      5 
      6   @metadata [:table, :column, :constraint, :hint]
      7 
      8   def exception(opts) do
      9     postgres =
     10       if fields = Keyword.get(opts, :postgres) do
     11         code = fields.code
     12 
     13         fields
     14         |> Map.put(:pg_code, code)
     15         |> Map.put(:code, Postgrex.ErrorCode.code_to_name(code))
     16       end
     17 
     18     message = Keyword.get(opts, :message)
     19     connection_id = Keyword.get(opts, :connection_id)
     20     %Postgrex.Error{postgres: postgres, message: message, connection_id: connection_id}
     21   end
     22 
     23   def message(e) do
     24     if map = e.postgres do
     25       IO.iodata_to_binary([
     26         map.severity,
     27         ?\s,
     28         map.pg_code,
     29         ?\s,
     30         [?(, Atom.to_string(map.code), ?)],
     31         ?\s,
     32         map.message,
     33         build_query(e.query),
     34         build_metadata(map),
     35         build_detail(map)
     36       ])
     37     else
     38       e.message
     39     end
     40   end
     41 
     42   defp build_query(nil), do: []
     43   defp build_query(query), do: ["\n\n    query: ", query]
     44 
     45   defp build_metadata(map) do
     46     metadata = for k <- @metadata, v = map[k], do: "\n    #{k}: #{v}"
     47 
     48     case metadata do
     49       [] -> []
     50       _ -> ["\n" | metadata]
     51     end
     52   end
     53 
     54   defp build_detail(%{detail: detail}) when is_binary(detail), do: ["\n\n" | detail]
     55   defp build_detail(_), do: []
     56 end
     57 
     58 defmodule Postgrex.QueryError do
     59   defexception [:message]
     60 end