Packages
ecto
1.1.4
3.14.1
3.14.0
3.13.6
3.13.5
3.13.4
3.13.3
3.13.2
3.13.1
3.13.0
3.12.6
3.12.5
3.12.4
3.12.3
3.12.2
3.12.1
3.12.0
3.11.2
3.11.1
3.11.0
3.10.3
3.10.2
3.10.1
3.10.0
3.9.6
3.9.5
3.9.4
3.9.3
3.9.2
3.9.1
3.9.0
3.8.4
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.8
3.5.7
3.5.6
3.5.5
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.6
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.5
3.2.4
3.2.3
3.2.2
3.2.1
3.2.0
3.1.7
3.1.6
3.1.5
3.1.4
3.1.3
3.1.2
3.1.1
3.1.0
3.0.9
3.0.8
3.0.7
3.0.6
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
2.2.12
2.2.11
2.2.10
2.2.9
2.2.8
2.2.7
2.2.6
2.2.5
2.2.4
2.2.3
2.2.2
2.2.1
2.2.0
2.2.0-rc.1
2.2.0-rc.0
2.1.6
2.1.5
2.1.4
2.1.3
2.1.2
2.1.1
2.1.0
2.1.0-rc.5
2.1.0-rc.4
2.1.0-rc.3
2.1.0-rc.2
2.1.0-rc.1
2.1.0-rc.0
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.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
2.0.0-beta.2
2.0.0-beta.1
2.0.0-beta.0
1.1.9
1.1.8
1.1.7
1.1.6
1.1.5
1.1.4
1.1.3
1.1.2
1.1.1
1.1.0
1.0.7
1.0.6
1.0.5
1.0.4
1.0.3
1.0.2
1.0.1
1.0.0
0.16.0
0.15.0
0.14.3
0.14.2
0.14.1
0.14.0
0.13.1
0.13.0
0.12.1
0.12.0
0.12.0-rc
0.11.3
0.11.2
0.11.1
0.11.0
0.10.3
0.10.2
0.10.1
0.10.0
0.9.0
0.8.1
0.8.0
0.7.2
0.7.1
0.7.0
0.6.0
0.5.1
0.5.0
0.4.0
0.3.0
0.2.8
0.2.7
0.2.6
0.2.5
0.2.4
0.2.3
0.2.2
0.2.1
0.2.0
0.1.0
A toolkit for data mapping and language integrated query for Elixir
Current section
Files
Jump to
Current section
Files
integration_test/sql/migration.exs
defmodule Ecto.Integration.MigrationTest do
use ExUnit.Case
alias Ecto.Integration.TestRepo
defmodule CreateMigration do
use Ecto.Migration
@table table(:create_table_migration)
@index index(:create_table_migration, [:value], unique: true)
def up do
create @table do
add :value, :integer
end
create @index
end
def down do
drop @index
drop @table
end
end
defmodule AddColumnMigration do
use Ecto.Migration
def up do
create table(:add_col_migration) do
add :value, :integer
end
alter table(:add_col_migration) do
add :to_be_added, :integer
end
execute "INSERT INTO add_col_migration (value, to_be_added) VALUES (1, 2)"
end
def down do
drop table(:add_col_migration)
end
end
defmodule AlterColumnMigration do
use Ecto.Migration
def up do
create table(:alter_col_migration) do
add :from_null_to_not_null, :integer
add :from_not_null_to_null, :integer, null: false
add :from_default_to_no_default, :integer, default: 0
add :from_no_default_to_default, :integer
end
alter table(:alter_col_migration) do
modify :from_null_to_not_null, :string, null: false
modify :from_not_null_to_null, :string, null: true
modify :from_default_to_no_default, :integer, default: nil
modify :from_no_default_to_default, :integer, default: 0
end
execute "INSERT INTO alter_col_migration (from_null_to_not_null) VALUES ('foo')"
end
def down do
drop table(:alter_col_migration)
end
end
defmodule AlterForeignKeyMigration do
use Ecto.Migration
def up do
create table(:alter_fk_users)
create table(:alter_fk_posts) do
add :alter_fk_user_id, :id
end
alter table(:alter_fk_posts) do
modify :alter_fk_user_id, references(:alter_fk_users, on_delete: :nilify_all)
end
execute "INSERT INTO alter_fk_users (id) VALUES ('1')"
execute "INSERT INTO alter_fk_posts (id, alter_fk_user_id) VALUES ('1', '1')"
execute "DELETE FROM alter_fk_users"
end
def down do
drop table(:alter_fk_posts)
drop table(:alter_fk_users)
end
end
defmodule DropColumnMigration do
use Ecto.Migration
def up do
create table(:drop_col_migration) do
add :value, :integer
add :to_be_removed, :integer
end
execute "INSERT INTO drop_col_migration (value, to_be_removed) VALUES (1, 2)"
alter table(:drop_col_migration) do
remove :to_be_removed
end
end
def down do
drop table(:drop_col_migration)
end
end
defmodule RenameColumnMigration do
use Ecto.Migration
def up do
create table(:rename_col_migration) do
add :to_be_renamed, :integer
end
rename table(:rename_col_migration), :to_be_renamed, to: :was_renamed
execute "INSERT INTO rename_col_migration (was_renamed) VALUES (1)"
end
def down do
drop table(:rename_col_migration)
end
end
defmodule OnDeleteMigration do
use Ecto.Migration
def up do
create table(:parent1)
create table(:parent2)
create table(:ref_migration) do
add :parent1, references(:parent1, on_delete: :nilify_all)
end
alter table(:ref_migration) do
add :parent2, references(:parent2, on_delete: :delete_all)
end
end
def down do
drop table(:ref_migration)
drop table(:parent1)
drop table(:parent2)
end
end
defmodule ReferencesRollbackMigration do
use Ecto.Migration
def change do
create table(:parent) do
add :name, :string
end
create table(:child) do
add :parent_id, references(:parent)
end
end
end
defmodule RenameMigration do
use Ecto.Migration
@table_current table(:posts_migration)
@table_new table(:new_posts_migration)
def up do
create @table_current
rename @table_current, to: @table_new
end
def down do
drop @table_new
end
end
defmodule PrefixMigration do
use Ecto.Migration
@prefix "ecto_prefix_test"
def up do
execute TestRepo.create_prefix(@prefix)
create table(:first, prefix: @prefix)
create table(:second, prefix: @prefix) do
add :first_id, references(:first)
end
end
def down do
drop table(:second, prefix: @prefix)
drop table(:first, prefix: @prefix)
execute TestRepo.drop_prefix(@prefix)
end
end
defmodule NoSQLMigration do
use Ecto.Migration
def up do
create table(:collection, options: [capped: true])
execute create: "collection"
end
end
defmodule Parent do
use Ecto.Schema
schema "parent" do
end
end
defmodule NoErrorTableMigration do
use Ecto.Migration
def change do
create_if_not_exists table(:existing) do
add :name, :string
end
create_if_not_exists table(:existing) do
add :name, :string
end
create_if_not_exists table(:existing)
drop_if_exists table(:existing)
drop_if_exists table(:existing)
end
end
defmodule NoErrorIndexMigration do
use Ecto.Migration
def change do
create_if_not_exists index(:posts, [:title])
create_if_not_exists index(:posts, [:title])
drop_if_exists index(:posts, [:title])
drop_if_exists index(:posts, [:title])
end
end
defmodule InferredDropIndexMigration do
use Ecto.Migration
def change do
create index(:posts, [:title])
end
end
import Ecto.Query, only: [from: 2]
import Ecto.Migrator, only: [up: 4, down: 4]
test "create and drop table and indexes" do
assert :ok == up(TestRepo, 20050906120000, CreateMigration, log: false)
assert :ok == down(TestRepo, 20050906120000, CreateMigration, log: false)
end
test "correctly infers how to drop index" do
assert :ok == up(TestRepo, 20050906120000, InferredDropIndexMigration, log: false)
assert :ok == down(TestRepo, 20050906120000, InferredDropIndexMigration, log: false)
end
test "supports references" do
assert :ok == up(TestRepo, 20050906120000, OnDeleteMigration, log: false)
parent1 = TestRepo.insert! Ecto.put_meta(%Parent{}, source: "parent1")
parent2 = TestRepo.insert! Ecto.put_meta(%Parent{}, source: "parent2")
writer = "INSERT INTO ref_migration (parent1, parent2) VALUES (#{parent1.id}, #{parent2.id})"
Ecto.Adapters.SQL.query! TestRepo, writer, []
reader = from r in "ref_migration", select: {r.parent1, r.parent2}
assert TestRepo.all(reader) == [{parent1.id, parent2.id}]
TestRepo.delete!(parent1)
assert TestRepo.all(reader) == [{nil, parent2.id}]
TestRepo.delete!(parent2)
assert TestRepo.all(reader) == []
assert :ok == down(TestRepo, 20050906120000, OnDeleteMigration, log: false)
end
test "rolls back references in change/1" do
assert :ok == up(TestRepo, 19850423000000, ReferencesRollbackMigration, log: false)
assert :ok == down(TestRepo, 19850423000000, ReferencesRollbackMigration, log: false)
end
test "create table if not exists and drop table if exists does not raise on failure" do
assert :ok == up(TestRepo, 19850423000001, NoErrorTableMigration, log: false)
end
@tag :create_index_if_not_exists
test "create index if not exists and drop index if exists does not raise on failure" do
assert :ok == up(TestRepo, 19850423000002, NoErrorIndexMigration, log: false)
end
test "raises on NoSQL migrations" do
assert_raise ArgumentError, ~r"does not support keyword lists in :options", fn ->
up(TestRepo, 20150704120000, NoSQLMigration, log: false)
end
end
@tag :add_column
test "add column" do
assert :ok == up(TestRepo, 20070906120000, AddColumnMigration, log: false)
assert [2] == TestRepo.all from p in "add_col_migration", select: p.to_be_added
:ok = down(TestRepo, 20070906120000, AddColumnMigration, log: false)
end
@tag :modify_column
test "modify column" do
assert :ok == up(TestRepo, 20080906120000, AlterColumnMigration, log: false)
assert ["foo"] ==
TestRepo.all from p in "alter_col_migration", select: p.from_null_to_not_null
assert [nil] ==
TestRepo.all from p in "alter_col_migration", select: p.from_not_null_to_null
assert [nil] ==
TestRepo.all from p in "alter_col_migration", select: p.from_default_to_no_default
assert [0] ==
TestRepo.all from p in "alter_col_migration", select: p.from_no_default_to_default
query = "INSERT INTO alter_col_migration (from_not_null_to_null) VALUES ('foo')"
assert catch_error(Ecto.Adapters.SQL.query!(TestRepo, query, []))
:ok = down(TestRepo, 20080906120000, AlterColumnMigration, log: false)
end
@tag :modify_foreign_key
test "modify foreign key" do
assert :ok == up(TestRepo, 20130802170000, AlterForeignKeyMigration, log: false)
assert [nil] == TestRepo.all from p in "alter_fk_posts", select: p.alter_fk_user_id
:ok = down(TestRepo, 20130802170000, AlterForeignKeyMigration, log: false)
end
@tag :remove_column
test "remove column" do
assert :ok == up(TestRepo, 20090906120000, DropColumnMigration, log: false)
assert catch_error(TestRepo.all from p in "drop_col_migration", select: p.to_be_removed)
:ok = down(TestRepo, 20090906120000, DropColumnMigration, log: false)
end
@tag :rename_column
test "rename column" do
assert :ok == up(TestRepo, 20150718120000, RenameColumnMigration, log: false)
assert [1] == TestRepo.all from p in "rename_col_migration", select: p.was_renamed
:ok = down(TestRepo, 20150718120000, RenameColumnMigration, log: false)
end
@tag :rename_table
test "rename table" do
assert :ok == up(TestRepo, 20150712120000, RenameMigration, log: false)
assert :ok == down(TestRepo, 20150712120000, RenameMigration, log: false)
end
@tag :prefix
test "prefix" do
assert :ok == up(TestRepo, 20151012120000, PrefixMigration, log: false)
assert :ok == down(TestRepo, 20151012120000, PrefixMigration, log: false)
end
end