raw.ex (908B)
1 defmodule Postgrex.Extensions.Raw do 2 @moduledoc false 3 import Postgrex.BinaryUtils, warn: false 4 5 use Postgrex.BinaryExtension, 6 send: "bpcharsend", 7 send: "textsend", 8 send: "varcharsend", 9 send: "byteasend", 10 send: "enum_send", 11 send: "unknownsend", 12 send: "citextsend", 13 send: "charsend" 14 15 def init(opts), do: Keyword.fetch!(opts, :decode_binary) 16 17 def encode(_) do 18 quote location: :keep, generated: true do 19 bin when is_binary(bin) -> 20 [<<byte_size(bin)::int32()>> | bin] 21 22 other -> 23 raise DBConnection.EncodeError, Postgrex.Utils.encode_msg(other, "a binary") 24 end 25 end 26 27 def decode(:copy) do 28 quote location: :keep do 29 <<len::int32(), value::binary-size(len)>> -> :binary.copy(value) 30 end 31 end 32 33 def decode(:reference) do 34 quote location: :keep do 35 <<len::int32(), value::binary-size(len)>> -> value 36 end 37 end 38 end