Packages
ash_postgres
2.4.18
2.10.0
2.9.1
2.9.0
2.8.0
2.7.0
2.6.32
2.6.31
2.6.30
2.6.29
2.6.28
2.6.27
2.6.26
2.6.25
2.6.24
2.6.23
2.6.22
2.6.21
2.6.20
2.6.19
2.6.18
2.6.17
2.6.16
2.6.15
2.6.14
2.6.13
2.6.12
2.6.11
2.6.10
2.6.9
2.6.8
2.6.7
2.6.6
2.6.5
2.6.4
2.6.3
2.6.2
2.6.1
2.6.0
2.5.22
2.5.21
2.5.20
2.5.19
2.5.18
2.5.17
2.5.16
2.5.15
2.5.14
2.5.13
2.5.12
2.5.11
2.5.10
2.5.9
2.5.8
2.5.7
2.5.6
2.5.5
2.5.4
2.5.3
2.5.2
2.5.1
2.5.0
2.4.21
2.4.20
2.4.19
2.4.18
2.4.17
2.4.16
2.4.15
2.4.14
2.4.13
2.4.12
2.4.11
2.4.10
2.4.9
2.4.8
2.4.7
2.4.6
2.4.5
2.4.4
2.4.3
2.4.2
2.4.1
2.4.0
2.3.1
2.3.0
2.2.5
2.2.4
2.2.3
2.2.2
2.2.1
2.2.0
2.1.19
2.1.18
2.1.17
2.1.15
2.1.14
2.1.13
2.1.12
2.1.11
2.1.10
2.1.9
2.1.8
2.1.6
2.1.5
2.1.4
2.1.3
2.1.2
2.1.1
2.1.0
2.0.12
2.0.11
2.0.10
2.0.9
2.0.8
2.0.7
2.0.6
2.0.5
2.0.4
2.0.3
2.0.2
2.0.1
2.0.0
2.0.0-rc.15
2.0.0-rc.14
2.0.0-rc.13
2.0.0-rc.12
2.0.0-rc.11
2.0.0-rc.10
2.0.0-rc.9
2.0.0-rc.8
2.0.0-rc.7
2.0.0-rc.6
2.0.0-rc.5
2.0.0-rc.4
2.0.0-rc.3
2.0.0-rc.2
2.0.0-rc.1
2.0.0-rc.0
1.5.30
1.5.29
1.5.28
1.5.27
1.5.26
1.5.25
1.5.24
1.5.23
1.5.22
1.5.21
1.5.20
1.5.19
1.5.18
1.5.17
1.5.16
1.5.15
1.5.14
1.5.13
1.5.12
1.5.11
1.5.10
1.5.9
1.5.8
1.5.7
1.5.6
1.5.5
1.5.4
1.5.3
1.5.2
1.5.1
1.5.0
1.4.0
1.3.68
1.3.67
1.3.66
1.3.65
1.3.64
1.3.63
1.3.62
1.3.61
1.3.60
1.3.59
1.3.58
1.3.56
1.3.55
1.3.54
1.3.53
1.3.52
1.3.51
1.3.50
1.3.49
1.3.48
1.3.47
1.3.46
1.3.45
1.3.44
1.3.43
1.3.42
1.3.41
1.3.40
1.3.39
1.3.38
1.3.37
1.3.36
1.3.35
1.3.34
1.3.33
1.3.32
1.3.31
1.3.30
1.3.29
1.3.28
1.3.26
1.3.25
1.3.24
1.3.23
1.3.22
1.3.21
1.3.20
1.3.19
1.3.18
1.3.17
1.3.16
1.3.15
1.3.14
1.3.12
1.3.11
1.3.10
1.3.9
1.3.8
1.3.6
1.3.5
1.3.4
1.3.3
1.3.2
1.3.1
1.3.0
1.3.0-rc.4
1.3.0-rc.3
1.3.0-rc.2
1.3.0-rc.0
1.2.6
1.2.5
1.2.4
1.2.3
1.2.2
1.2.1
1.2.0
1.2.0-rc.1
1.2.0-rc.0
1.1.3
1.1.2
1.1.1
1.1.0
1.0.0
1.0.0-rc.9
1.0.0-rc.8
1.0.0-rc.7
1.0.0-rc.6
1.0.0-rc.5
1.0.0-rc.4
1.0.0-rc.3
1.0.0-rc.2
1.0.0-rc.1
1.0.0-rc.0
1.0.0-pre.3
1.0.0-pre.2
1.0.0-pre.1
1.0.0-pre.0
0.43.0
0.42.0-rc.7
0.42.0-rc.6
0.42.0-rc.5
0.42.0-rc.4
0.42.0-rc.3
0.42.0-rc.1
0.42.0-rc.0
0.41.7
0.41.6
0.41.5
0.41.4
0.41.3
0.41.2
0.41.1
0.41.0-rc0
retired
0.41.0-rc.9
0.41.0-rc.8
0.41.0-rc.7
0.41.0-rc.6
0.41.0-rc.5
0.41.0-rc.4
0.41.0-rc.3
0.41.0-rc.2
0.41.0-rc.1
0.41.0-rc.0
0.40.11
0.40.10
0.40.9
0.40.8
0.40.7
0.40.6
0.40.5
0.40.4
0.40.3
0.40.2
0.40.1
0.40.0-rc5
0.40.0-rc4
0.40.0-rc3
0.40.0-rc2
0.40.0-rc1
0.39.0-rc0
0.38.11
0.38.10
0.38.9
0.38.8
0.38.7
0.38.6
0.38.5
0.38.4
0.38.3
0.38.2
0.38.1
0.38.0
0.37.8
0.37.7
0.37.6
0.37.5
0.37.4
0.37.3
0.37.2
0.37.1
0.37.0
0.36.5
0.36.4
0.36.3
0.36.2
0.36.1
0.36.0
0.35.5
0.35.4
0.35.3
0.35.1
0.34.5
0.34.4
0.34.3
0.34.2
0.34.1
0.34.0
0.33.1
0.33.0
0.32.2
0.32.1
0.32.0
0.31.1
0.30.1
0.29.6
0.29.5
0.29.4
0.29.3
0.29.2
0.29.1
0.28.1
0.28.0
0.27.0
0.26.2
0.26.1
0.26.0
0.25.5
0.25.4
0.25.3
0.25.2
0.25.1
0.25.0
0.24.0
0.23.2
0.23.1
0.23.0
0.22.1
0.22.0
0.21.0
0.20.1
0.20.0
0.19.0
0.18.0
0.17.0
0.16.1
0.15.0
0.14.0
0.13.0
0.12.1
0.12.0
0.11.2
0.10.0
0.9.0
0.8.0
0.7.0
0.6.0
0.5.0
0.4.0
0.3.0
0.2.1
0.2.0
0.1.4
0.1.3
0.1.2
0.1.1
0.1.1-rc.2
0.1.1-rc.1
0.1.1-rc.0
0.1.0
The PostgreSQL data layer for Ash Framework
Current section
Files
Jump to
Current section
Files
lib/igniter.ex
if Code.ensure_loaded?(Igniter) do
defmodule AshPostgres.Igniter do
@moduledoc "Codemods and utilities for working with AshPostgres & Igniter"
@doc false
def default_repo_contents(otp_app, name, opts \\ []) do
min_pg_version = get_min_pg_version(name, opts)
"""
use AshPostgres.Repo, otp_app: #{inspect(otp_app)}
def min_pg_version do
%Version{major: #{min_pg_version.major}, minor: #{min_pg_version.minor}, patch: #{min_pg_version.patch}}
end
# Don't open unnecessary transactions
# will default to `false` in 4.0
def prefer_transaction? do
false
end
def installed_extensions do
# Add extensions here, and the migration generator will install them.
["ash-functions"]
end
"""
end
def table(igniter, resource) do
igniter
|> Spark.Igniter.get_option(resource, [:postgres, :table])
|> case do
{igniter, {:ok, value}} when is_binary(value) or is_nil(value) ->
{:ok, igniter, value}
{igniter, _} ->
{:error, igniter}
end
end
def repo(igniter, resource) do
igniter
|> Spark.Igniter.get_option(resource, [:postgres, :repo])
|> case do
{igniter, {:ok, value}} when is_atom(value) ->
{:ok, igniter, value}
{igniter, _} ->
{:error, igniter}
end
end
def add_postgres_extension(igniter, repo_name, extension) do
Igniter.Project.Module.find_and_update_module!(igniter, repo_name, fn zipper ->
case Igniter.Code.Function.move_to_def(zipper, :installed_extensions, 0) do
{:ok, zipper} ->
case Igniter.Code.List.append_new_to_list(zipper, extension) do
{:ok, zipper} ->
{:ok, zipper}
_ ->
{:warning,
"Could not add installed extension #{inspect(extension)} to #{inspect(repo_name)}.installed_extensions/0"}
end
_ ->
zipper = Sourceror.Zipper.rightmost(zipper)
code = """
def installed_extensions do
[#{inspect(extension)}]
end
"""
{:ok, Igniter.Code.Common.add_code(zipper, code)}
end
end)
end
def select_repo(igniter, opts \\ []) do
label = Keyword.get(opts, :label, "Which repo should be used?")
generate = Keyword.get(opts, :generate?, false)
case list_repos(igniter) do
{igniter, []} ->
if generate do
repo = Igniter.Project.Module.module_name(igniter, "Repo")
otp_app = Igniter.Project.Application.app_name(igniter)
igniter =
Igniter.Project.Module.create_module(
igniter,
repo,
default_repo_contents(otp_app, repo, opts),
opts
)
{igniter, repo}
else
{igniter, nil}
end
{igniter, [repo]} ->
{igniter, repo}
{igniter, repos} ->
{igniter, Owl.IO.select(repos, label: label, render_as: &inspect/1)}
end
end
def list_repos(igniter) do
Igniter.Project.Module.find_all_matching_modules(igniter, fn _mod, zipper ->
move_to_repo_use(zipper) != :error
end)
end
defp move_to_repo_use(zipper) do
Igniter.Code.Function.move_to_function_call(zipper, :use, [1, 2], fn zipper ->
Igniter.Code.Function.argument_equals?(
zipper,
0,
AshPostgres.Repo
)
end)
end
@doc false
def get_min_pg_version(name, opts) do
if opts[:yes] do
%Version{major: 13, minor: 0, patch: 0}
else
lead_in = """
Generating #{inspect(name)}
What is the minimum PostgreSQL version you will be using?
AshPostgres uses this information when generating queries and migrations,
to choose the best available features for your version of PostgreSQL.
"""
format_request =
"""
Please enter the version in the format major.minor.patch (e.g. 13.4.0)
Default: 16.0.0
❯
"""
prompt =
if opts[:invalid_loop?] do
format_request
else
"#{lead_in}\n\n#{format_request}"
end
prompt
|> String.trim_trailing()
|> Mix.shell().prompt()
|> String.trim()
|> case do
"" -> "16.0.0"
input -> input
end
|> Version.parse()
|> case do
{:ok, version} -> version
:error -> get_min_pg_version(name, Keyword.put(opts, :invalid_loop?, true))
end
end
end
end
end