Packages
postgrex
0.13.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
Current section
Files
Jump to
Current section
Files
lib/postgrex/extensions/record.ex
defmodule Postgrex.Extensions.Record do
@moduledoc false
import Postgrex.BinaryUtils, warn: false
@behaviour Postgrex.SuperExtension
def init(_), do: nil
def matching(_),
do: [send: "record_send"]
def format(_),
do: :super_binary
def oids(%Postgrex.TypeInfo{comp_elems: []}, _),
do: nil
def oids(%Postgrex.TypeInfo{comp_elems: comp_oids}, _),
do: comp_oids
def encode(_) do
quote location: :keep do
tuple, oids, types when is_tuple(tuple) ->
# encode_tuple/3 defined by TypeModule
case encode_tuple(tuple, oids, types) do
:error ->
raise ArgumentError,
"expected a tuple of size #{length(oids)}, got: #{inspect tuple}"
data ->
[<<IO.iodata_length(data)+4::int32, tuple_size(tuple)::int32>> |
data]
end
other, _, _ ->
raise ArgumentError,
Postgrex.Utils.encode_msg(other, "a tuple")
end
end
def decode(_) do
quote location: :keep do
<<len::int32, binary::binary-size(len)>>, nil, types ->
<<count::int32, data::binary>> = binary
# decode_tuple/3 defined by TypeModule
decode_tuple(data, count, types)
<<len::int32, binary::binary-size(len)>>, oids, types ->
<<_::int32, data::binary>> = binary
# decode_tuple/3 defined by TypeModule
decode_tuple(data, oids, types)
end
end
end