Packages
ecto
2.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/alter.exs
defmodule Ecto.Integration.AlterTest do
use Ecto.Integration.Case, async: false
alias Ecto.Integration.PoolRepo
defmodule AlterMigrationOne do
use Ecto.Migration
def up do
create table(:alter_col_type) do
add :value, :integer
end
execute "INSERT INTO alter_col_type (value) VALUES (1)"
end
def down do
drop table(:alter_col_type)
end
end
defmodule AlterMigrationTwo do
use Ecto.Migration
def up do
alter table(:alter_col_type) do
modify :value, :numeric
end
end
def down do
alter table(:alter_col_type) do
modify :value, :integer
end
end
end
import Ecto.Query, only: [from: 1, from: 2]
import Ecto.Migrator, only: [up: 4, down: 4]
test "reset cache on returning query after alter column type" do
values = from v in "alter_col_type", select: v.value
assert :ok == up(PoolRepo, 20161112120000, AlterMigrationOne, log: false)
assert PoolRepo.all(values) == [1]
assert :ok == up(PoolRepo, 20161112130000, AlterMigrationTwo, log: false)
# optionally fail once with ArgumentError when preparing query prepared on
# another connection (and clear cache)
try do
PoolRepo.all(values)
rescue
err in [ArgumentError] ->
assert Exception.message(err) =~ "stale type"
assert [%Decimal{}] = PoolRepo.all(values)
else
result ->
assert [%Decimal{}] = result
end
PoolRepo.transaction(fn() ->
assert [%Decimal{}] = PoolRepo.all(values)
assert :ok == down(PoolRepo, 20161112130000, AlterMigrationTwo, log: false)
# optionally fail once with database error when already prepared on
# connection (and clear cache)
try do
PoolRepo.all(values, [mode: :savepoint])
catch
:error, _ ->
assert PoolRepo.all(values) == [1]
else
result ->
assert result == [1]
end
end)
after
assert :ok == down(PoolRepo, 20161112120000, AlterMigrationOne, log: false)
end
test "reset cache on paramterised query after alter column type" do
values = from v in "alter_col_type"
assert :ok == up(PoolRepo, 20161112120000, AlterMigrationOne, log: false)
assert PoolRepo.update_all(values, [set: [value: 2]]) == {1, nil}
assert :ok == up(PoolRepo, 20161112130000, AlterMigrationTwo, log: false)
# optionally fail once with ArgumentError when preparing query prepared on
# another connection (and clear cache)
try do
PoolRepo.update_all(values, [set: [value: 3]])
rescue
err in [ArgumentError] ->
assert Exception.message(err) =~ "stale type"
assert PoolRepo.update_all(values, [set: [value: 4]]) == {1, nil}
else
result ->
assert result == {1, nil}
end
PoolRepo.transaction(fn() ->
assert PoolRepo.update_all(values, [set: [value: Decimal.new(5)]]) == {1, nil}
assert :ok == down(PoolRepo, 20161112130000, AlterMigrationTwo, log: false)
assert PoolRepo.update_all(values, [set: [value: 6]]) == {1, nil}
end)
after
assert :ok == down(PoolRepo, 20161112120000, AlterMigrationOne, log: false)
end
end