Packages
pillar
0.23.1
0.40.0
0.39.0
0.38.0
0.37.0
0.36.0
0.35.0
0.34.1
0.34.0
0.33.1
0.33.0
0.32.0
0.31.0
0.30.0
0.29.1
0.29.0
0.28.0
0.27.0
0.26.1
0.26.0
0.25.1
0.25.0
0.24.0
0.23.3
0.23.2
0.23.1
0.23.0
0.22.0
0.21.0
0.20.0
0.19.0
0.18.2
0.18.1
0.18.0
0.17.3
0.17.2
0.17.1
0.17.0
0.16.2
0.16.1
0.16.0
0.15.0
0.14.0
0.13.1
0.13.0
0.12.0
0.11.0
0.10.0
0.9.1
0.9.0
0.8.1
0.8.0
0.7.0
0.6.0
0.5.1
0.5.0
0.4.0
0.3.2
0.3.1
0.3.0
0.2.1
0.2.0
0.1.0
Elixir client for ClickHouse, a fast open-source Online Analytical Processing (OLAP) database management system.
Current section
Files
Jump to
Current section
Files
lib/pillar/migrations/migrations_macro.ex
defmodule Pillar.MigrationsMacro do
@moduledoc """
Migration's mechanism
For generation migration files use task `Mix.Tasks.Pillar.Gen.Migration`
For launching migration define own mix task or release task with code below:
```
conn = Pillar.Connection.new(connection_string)
Pillar.Migrations.migrate(conn)
```
"""
defmacro __using__(args) when is_list(args) do
quote do
alias Pillar.Connection
alias Pillar.Migrations.Generator
alias Pillar.Migrations.Migrate
alias Pillar.Migrations.Rollback
@default_path_suffix "priv/pillar_migrations"
@path_suffix Keyword.get(unquote(args), :path_suffix, @default_path_suffix)
def generate(name) do
template = Generator.migration_template(name)
with filepath <- Generator.migration_filepath(name, migrations_path()),
:ok <- File.mkdir_p!(Path.dirname(filepath)),
:ok <- File.write!(filepath, template) do
filepath
end
end
def migrate(%Connection{} = conn, path \\ nil) do
Migrate.run_all_migrations(conn, path || migrations_path())
end
def rollback(%Connection{} = conn, path \\ nil, count_of_migrations \\ 1) do
Rollback.rollback_n_migrations(conn, path || migrations_path(), count_of_migrations)
end
@doc """
Directory, where contains list of migrations.
Warning: In case of build releases directory should be copied with app
"""
def migrations_path do
Path.join([get_path_prefix(), @path_suffix])
end
defp get_path_prefix do
case Keyword.get(unquote(args), :path_prefix) do
nil ->
case Keyword.get(unquote(args), :otp_app) do
nil ->
""
otp_app when is_atom(otp_app) ->
Application.app_dir(otp_app)
end
path_prefix when is_binary(path_prefix) ->
path_prefix
end
end
end
end
end