Packages
ecto_watch
0.15.1
1.1.0
1.0.0
0.15.1
0.15.0
0.14.0
0.13.3
0.13.2
0.13.1
0.13.0
0.12.6
0.12.5
0.12.4
0.12.3
0.12.2
0.12.1
0.12.0
0.11.2
0.11.1
0.11.0
0.10.0
0.9.11
0.9.10
0.9.9
0.9.8
0.9.7
0.9.6
0.9.5
0.9.4
0.9.3
0.9.2
0.9.1
0.9.0
0.8.1
0.8.0
0.7.0
0.6.0
0.6.0-rc2
0.6.0-rc1
0.5.4
0.5.3
0.5.2
0.5.1
0.5.0
0.4.0
0.3.0
0.2.0
0.1.0
EctoWatch allows you to easily get Phoenix.PubSub notifications directly from postgresql.
Current section
Files
Jump to
Current section
Files
lib/ecto_watch/db.ex
defmodule EctoWatch.DB do
@moduledoc "Mockable simple queries to PostgreSQL"
@callback max_identifier_length(repo_mod :: atom()) :: integer()
@callback major_version(repo_mod :: atom()) :: integer()
def supports_create_or_replace_trigger?(repo_mod) do
major_version(repo_mod) >= 14
end
def max_identifier_length(repo_mod), do: mod().max_identifier_length(repo_mod)
def major_version(repo_mod), do: mod().major_version(repo_mod)
defp mod do
Application.get_env(:ecto_watch, EctoWatch.DB)[:mod] || EctoWatch.DB.Live
end
end
defmodule EctoWatch.DB.Live do
@moduledoc "Actual implementation of EctoWatch.DB"
@behaviour EctoWatch.DB
def max_identifier_length(repo_mod) do
query_for_value(repo_mod, "SHOW max_identifier_length")
|> String.to_integer()
end
def major_version(repo_mod) do
version_string = query_for_value(repo_mod, "SHOW server_version")
case Integer.parse(version_string) do
{major_version, _} ->
major_version
_ ->
raise "Unable to parse PostgreSQL major version number from version string: #{inspect(version_string)}"
end
end
defp query_for_value(repo_mod, query) do
case Ecto.Adapters.SQL.query!(repo_mod, query, []) do
%Postgrex.Result{rows: [[value]]} ->
value
other ->
raise "Unexpected result when making query `#{query}`: #{inspect(other)}"
end
end
end