Skip to content

Commit d18f6c6

Browse files
committed
fix: properly encode decimal scale & preicison into snapshots
1 parent f020345 commit d18f6c6

File tree

2 files changed

+19
-11
lines changed

2 files changed

+19
-11
lines changed

lib/migration_generator/migration_generator.ex

Lines changed: 14 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -3384,29 +3384,35 @@ defmodule AshPostgres.MigrationGenerator do
33843384
references
33853385
|> Map.update!(:on_delete, &(&1 && references_on_delete_to_binary(&1)))
33863386
end)
3387-
|> Map.update!(:type, fn type -> sanitize_type(type, attribute[:size]) end)
3387+
|> Map.update!(:type, fn type ->
3388+
sanitize_type(type, attribute[:size], attribute[:precision], attribute[:scale])
3389+
end)
33883390
end
33893391

33903392
defp references_on_delete_to_binary(value) when is_atom(value), do: value
33913393
defp references_on_delete_to_binary({:nilify, columns}), do: [:nilify, columns]
33923394

3393-
defp sanitize_type({:array, type}, size) do
3394-
["array", sanitize_type(type, size)]
3395+
defp sanitize_type({:array, type}, size, scale, precision) do
3396+
["array", sanitize_type(type, size, scale, precision)]
33953397
end
33963398

3397-
defp sanitize_type(:varchar, size) when not is_nil(size) do
3399+
defp sanitize_type(:varchar, size, _scale, _precision) when not is_nil(size) do
33983400
["varchar", size]
33993401
end
34003402

3401-
defp sanitize_type(:binary, size) when not is_nil(size) do
3403+
defp sanitize_type(:binary, size, _scale, _precision) when not is_nil(size) do
34023404
["binary", size]
34033405
end
34043406

3405-
defp sanitize_type(type, size) when is_atom(type) and is_integer(size) do
3406-
[sanitize_type(type, nil), size]
3407+
defp sanitize_type(:decimal, _size, scale, precision) do
3408+
["decimal", scale, precision] |> Enum.reject(&is_nil/1)
3409+
end
3410+
3411+
defp sanitize_type(type, size, precision, decimal) when is_atom(type) and is_integer(size) do
3412+
[sanitize_type(type, nil, precision, decimal), size]
34073413
end
34083414

3409-
defp sanitize_type(type, _) do
3415+
defp sanitize_type(type, _, _, _) do
34103416
type
34113417
end
34123418

test/migration_generator_test.exs

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2877,10 +2877,12 @@ defmodule AshPostgres.MigrationGeneratorTest do
28772877
# Check the second migration file
28782878
second_migration = File.read!(Enum.at(migration_files, 1))
28792879

2880+
[up, _down] = String.split(second_migration, "def down")
2881+
28802882
# Should contain the alter statement removing precision and scale
2881-
assert second_migration =~ ~S[modify :price, :decimal]
2882-
refute second_migration =~ ~S[precision:]
2883-
refute second_migration =~ ~S[scale:]
2883+
assert up =~ ~S[modify :price, :decimal]
2884+
refute up =~ ~S[precision:]
2885+
refute up =~ ~S[scale:]
28842886
end
28852887

28862888
test "works with decimal references that have precision and scale" do

0 commit comments

Comments
 (0)