zf

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

record.ex (1260B)


      1 defmodule Postgrex.Extensions.Record do
      2   @moduledoc false
      3   import Postgrex.BinaryUtils, warn: false
      4   @behaviour Postgrex.SuperExtension
      5 
      6   def init(_), do: nil
      7 
      8   def matching(_),
      9     do: [send: "record_send"]
     10 
     11   def format(_),
     12     do: :super_binary
     13 
     14   def oids(%Postgrex.TypeInfo{comp_elems: []}, _),
     15     do: nil
     16 
     17   def oids(%Postgrex.TypeInfo{comp_elems: comp_oids}, _),
     18     do: comp_oids
     19 
     20   def encode(_) do
     21     quote location: :keep do
     22       tuple, oids, types when is_tuple(tuple) ->
     23         # encode_tuple/3 defined by TypeModule
     24         data = encode_tuple(tuple, oids, types)
     25         [<<IO.iodata_length(data) + 4::int32(), tuple_size(tuple)::int32()>> | data]
     26 
     27       other, _, _ ->
     28         raise DBConnection.EncodeError, Postgrex.Utils.encode_msg(other, "a tuple")
     29     end
     30   end
     31 
     32   def decode(_) do
     33     quote location: :keep do
     34       <<len::int32(), binary::binary-size(len)>>, nil, types ->
     35         <<count::int32(), data::binary>> = binary
     36         # decode_tuple/3 defined by TypeModule
     37         decode_tuple(data, count, types)
     38 
     39       <<len::int32(), binary::binary-size(len)>>, oids, types ->
     40         <<_::int32(), data::binary>> = binary
     41         # decode_tuple/3 defined by TypeModule
     42         decode_tuple(data, oids, types)
     43     end
     44   end
     45 end