Browse Source

Support unlocalized severity (V) error field, added in PostgreSQL 9.6

Closes issue #116.
Alexander Sedov 8 years ago
parent
commit
57ec0a9ff0
2 changed files with 9 additions and 5 deletions
  1. 1 1
      include/epgsql.hrl
  2. 8 4
      src/epgsql_wire.erl

+ 1 - 1
include/epgsql.hrl

@@ -20,7 +20,7 @@
     code :: binary(),
     codename :: atom(),
     message :: binary(),
-    extra :: [{severity_en | detail | hint | position | internal_position | internal_query
+    extra :: [{severity | detail | hint | position | internal_position | internal_query
                | where | schema_name | table_name | column_name | data_type_name
                | constraint_name | file | line | routine,
                binary()}]

+ 8 - 4
src/epgsql_wire.erl

@@ -62,17 +62,21 @@ decode_error(Bin) ->
     Fields = decode_fields(Bin),
     ErrCode = proplists:get_value($C, Fields),
     ErrName = epgsql_errcodes:to_name(ErrCode),
+    {ErrSeverity, Extra} = case proplists:get_value($V, Fields) of
+        undefined ->
+            {proplists:get_value($S, Fields), []};
+        Severity ->
+            {Severity, [{severity, proplists:get_value($S, Fields)}]}
+    end,
     Error = #error{
-      severity = lower_atom(proplists:get_value($S, Fields)),
+      severity = lower_atom(ErrSeverity),
       code     = ErrCode,
       codename = ErrName,
       message  = proplists:get_value($M, Fields),
-      extra    = lists:sort(lists:foldl(fun decode_error_extra/2, [], Fields))},
+      extra    = lists:sort(Extra ++ lists:foldl(fun decode_error_extra/2, [], Fields))},
     Error.
 
 %% consider updating #error.extra typespec when changing/adding extras
-decode_error_extra({$V, Val}, Acc) ->
-    [{severity_en, Val} | Acc];
 decode_error_extra({$D, Val}, Acc) ->
     [{detail, Val} | Acc];
 decode_error_extra({$H, Val}, Acc) ->