Browse Source

Cleaner usage of NULL in array decoder. #212

Sergey Prokhorov 5 years ago
parent
commit
243361e5cd
1 changed files with 5 additions and 5 deletions
  1. 5 5
      src/epgsql_binary.erl

+ 5 - 5
src/epgsql_binary.erl

@@ -27,7 +27,7 @@
          oid_db :: epgsql_oid_db:db()}).
 -record(array_decoder,
         {element_decoder :: decoder(),
-         nulls :: nulls() }).
+         null_term :: any() }).
 -record(array_encoder,
         {element_encoder :: epgsql_codec:codec_entry(),
          n_dims = 0 :: non_neg_integer(),
@@ -148,7 +148,7 @@ oid_to_decoder(?RECORD_ARRAY_OID, binary, Codec) ->
     {fun ?MODULE:decode_array/3, array,
      #array_decoder{
         element_decoder = oid_to_decoder(?RECORD_OID, binary, Codec),
-        nulls = Codec#codec.nulls}};
+        null_term = null(Codec)}};
 oid_to_decoder(Oid, Format, #codec{oid_db = Db} = Codec) ->
     case epgsql_oid_db:find_by_oid(Oid, Db) of
         undefined when Format == binary ->
@@ -176,11 +176,11 @@ make_decoder(Name, Mod, State, _Codec, text, false) ->
         false ->
             {fun epgsql_codec_noop:decode_text/3, undefined, []}
     end;
-make_decoder(Name, Mod, State, #codec{nulls = Nulls}, binary, true) ->
+make_decoder(Name, Mod, State, Codec, binary, true) ->
     {fun ?MODULE:decode_array/3, array,
      #array_decoder{
         element_decoder = {fun Mod:decode/3, Name, State},
-        nulls = Nulls}};
+        null_term = null(Codec)}};
 make_decoder(Name, Mod, State, _Codec, binary, false) ->
     {fun Mod:decode/3, Name, State}.
 
@@ -215,7 +215,7 @@ decode_array1(Data, [Len | T], ArrayDecoder) ->
 decode_elements(Rest, Acc, 0, _ArDec) ->
     {lists:reverse(Acc), Rest};
 decode_elements(<<-1:?int32, Rest/binary>>, Acc, N,
-                #array_decoder{nulls = [Null | _]} = ArDec) ->
+                #array_decoder{null_term = Null} = ArDec) ->
     decode_elements(Rest, [Null | Acc], N - 1, ArDec);
 decode_elements(<<Len:?int32, Value:Len/binary, Rest/binary>>, Acc, N,
                 #array_decoder{element_decoder = ElemDecoder} = ArDecoder) ->