zf

zenflows testing
git clone https://s.sonu.ch/~srfsh/zf.git
Log | Files | Refs | Submodules | README | LICENSE

alter.exs (2432B)


      1 defmodule Ecto.Integration.AlterTest do
      2   use Ecto.Integration.Case, async: false
      3 
      4   alias Ecto.Integration.PoolRepo
      5 
      6   defmodule AlterMigrationOne do
      7     use Ecto.Migration
      8 
      9     def up do
     10       create table(:alter_col_type) do
     11         add :value, :integer
     12       end
     13 
     14       execute "INSERT INTO alter_col_type (value) VALUES (1)"
     15     end
     16 
     17     def down do
     18       drop table(:alter_col_type)
     19     end
     20   end
     21 
     22   defmodule AlterMigrationTwo do
     23     use Ecto.Migration
     24 
     25     def up do
     26       alter table(:alter_col_type) do
     27         modify :value, :numeric
     28       end
     29     end
     30 
     31     def down do
     32       alter table(:alter_col_type) do
     33         modify :value, :integer
     34       end
     35     end
     36   end
     37 
     38   import Ecto.Query, only: [from: 1, from: 2]
     39 
     40   defp run(direction, repo, module) do
     41     Ecto.Migration.Runner.run(repo, repo.config(), 1, module, :forward, direction, direction, log: false)
     42   end
     43 
     44   test "reset cache on returning query after alter column type" do
     45     values = from v in "alter_col_type", select: v.value
     46 
     47     assert :ok == run(:up, PoolRepo, AlterMigrationOne)
     48     assert PoolRepo.all(values) == [1]
     49 
     50     assert :ok == run(:up, PoolRepo, AlterMigrationTwo)
     51     [%Decimal{}] = PoolRepo.all(values)
     52 
     53     PoolRepo.transaction(fn() ->
     54       assert [%Decimal{}] = PoolRepo.all(values)
     55       assert :ok == run(:down, PoolRepo, AlterMigrationTwo)
     56 
     57       # Optionally fail once with database error when
     58       # already prepared on connection (and clear cache)
     59       try do
     60         PoolRepo.all(values, [mode: :savepoint])
     61       rescue
     62         _ ->
     63           assert PoolRepo.all(values) == [1]
     64       else
     65         result ->
     66           assert result == [1]
     67       end
     68     end)
     69   after
     70     assert :ok == run(:down, PoolRepo, AlterMigrationOne)
     71   end
     72 
     73   test "reset cache on parameterized query after alter column type" do
     74     values = from v in "alter_col_type"
     75 
     76     assert :ok == run(:up, PoolRepo, AlterMigrationOne)
     77     assert PoolRepo.update_all(values, [set: [value: 2]]) == {1, nil}
     78 
     79     assert :ok == run(:up, PoolRepo, AlterMigrationTwo)
     80     assert PoolRepo.update_all(values, [set: [value: 3]]) == {1, nil}
     81 
     82     PoolRepo.transaction(fn() ->
     83       assert PoolRepo.update_all(values, [set: [value: Decimal.new(5)]]) == {1, nil}
     84       assert :ok == run(:down, PoolRepo, AlterMigrationTwo)
     85       assert PoolRepo.update_all(values, [set: [value: 6]]) == {1, nil}
     86     end)
     87   after
     88     assert :ok == run(:down, PoolRepo, AlterMigrationOne)
     89   end
     90 end