Packages
pillar
0.23.0
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/rollback.ex
defmodule Pillar.Migrations.Rollback do
@moduledoc false
alias Pillar
alias Pillar.Connection
alias Pillar.Migrations.Base
def rollback_n_migrations(%Connection{} = connection, rollback_count) do
:ok = Base.create_migration_history_table(connection)
files_and_modules = Base.compile_migration_files()
migrations_for_rollback =
connection
|> list_of_success_migrations()
|> Enum.sort()
|> Enum.take(-Kernel.abs(rollback_count))
migrations_for_rollback
|> Enum.map(fn filename ->
{_filename, module} =
Enum.find(files_and_modules, fn {fname, _module} -> fname == filename end)
:ok = do_rollback(connection, module)
delete_migration_from_table(connection, filename)
filename
end)
end
def do_rollback(connection, module) do
if function_exported?(module, :down, 0) do
sql = module.down
{:ok, _result} = Pillar.query(connection, sql, %{})
:ok
else
:ok
end
end
def list_of_success_migrations(connection) do
sql = "SELECT migration FROM pillar_migrations"
{:ok, data} = Pillar.select(connection, sql, %{})
data
|> Enum.map(fn %{"migration" => name} -> name end)
|> Enum.sort()
end
def delete_migration_from_table(connection, migration) do
sql = "ALTER TABLE pillar_migrations DELETE WHERE migration == {name}"
{:ok, _result} = Pillar.query(connection, sql, %{name: migration})
:ok
end
end