Packages
postgrex
0.20.0
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
Security advisory:
This version has known vulnerabilities.
View advisories
Current section
Files
Jump to
Current section
Files
lib/postgrex/extensions/jsonb.ex
defmodule Postgrex.Extensions.JSONB do
@moduledoc false
import Postgrex.BinaryUtils, warn: false
def init(opts) do
json =
Keyword.get_lazy(opts, :json, fn ->
Application.get_env(:postgrex, :json_library, Jason)
end)
{json, Keyword.get(opts, :decode_binary, :copy)}
end
def matching({nil, _}),
do: []
def matching(_),
do: [type: "jsonb"]
def format(_),
do: :binary
def encode({library, _}) do
quote location: :keep do
map ->
data = unquote(library).encode_to_iodata!(map)
[<<IO.iodata_length(data) + 1::int32(), 1>> | data]
end
end
def decode({library, :copy}) do
quote location: :keep do
<<len::int32(), data::binary-size(len)>> ->
<<1, json::binary>> = data
json
|> :binary.copy()
|> unquote(library).decode!()
end
end
def decode({library, :reference}) do
quote location: :keep do
<<len::int32(), data::binary-size(len)>> ->
<<1, json::binary>> = data
unquote(library).decode!(json)
end
end
end