Packages
ecto_sql
3.0.0-rc.1
3.14.0
3.13.5
3.13.4
3.13.3
3.13.2
3.13.1
3.13.0
3.12.1
3.12.0
3.11.3
3.11.2
3.11.1
3.11.0
3.10.2
3.10.1
3.10.0
3.9.2
3.9.1
3.9.0
3.8.3
3.8.2
3.8.1
3.8.0
3.7.2
3.7.1
3.7.0
3.6.2
3.6.1
3.6.0
3.5.4
3.5.3
3.5.2
3.5.1
3.5.0
3.5.0-rc.1
3.5.0-rc.0
3.4.5
3.4.4
3.4.3
3.4.2
3.4.1
3.4.0
3.3.4
3.3.3
3.3.2
3.3.1
3.3.0
3.2.2
3.2.1
3.2.0
3.1.6
3.1.5
3.1.4
3.1.3
3.1.2
3.1.1
3.1.0
3.0.5
3.0.4
3.0.3
3.0.2
3.0.1
3.0.0
3.0.0-rc.1
3.0.0-rc.0
SQL-based adapters for Ecto and database migrations
Current section
Files
Jump to
Current section
Files
lib/ecto/migration/schema_migration.ex
defmodule Ecto.Migration.SchemaMigration do
# Defines a schema that works with a table that tracks schema migrations.
# The table name defaults to `schema_migrations`.
@moduledoc false
use Ecto.Schema
import Ecto.Query, only: [from: 2]
@primary_key false
schema "schema_migrations" do
field :version, :integer
timestamps updated_at: false
end
@opts [timeout: :infinity, log: false]
def ensure_schema_migrations_table!(repo, prefix) do
table_name = repo |> get_source |> String.to_atom()
table = %Ecto.Migration.Table{name: table_name, prefix: prefix}
meta = Ecto.Adapter.lookup_meta(repo)
commands = [
{:add, :version, :bigint, primary_key: true},
{:add, :inserted_at, :naive_datetime, []}
]
# DDL queries do not log, so we do not need to pass log: false here.
repo.__adapter__.execute_ddl(meta, {:create_if_not_exists, table, commands}, @opts)
end
def versions(repo, prefix) do
from(p in get_source(repo), select: type(p.version, :integer))
|> Map.put(:prefix, prefix)
end
def up(repo, version, prefix) do
%__MODULE__{version: version}
|> Ecto.put_meta(prefix: prefix, source: get_source(repo))
|> repo.insert!(@opts)
end
def down(repo, version, prefix) do
from(p in get_source(repo), where: p.version == type(^version, :integer))
|> Map.put(:prefix, prefix)
|> repo.delete_all(@opts)
end
def get_source(repo) do
Keyword.get(repo.config, :migration_source, "schema_migrations")
end
end