34 lines
1.4 KiB
Ruby
34 lines
1.4 KiB
Ruby
|
|
class AddExternalNumbersFieldToChecks < ActiveRecord::Migration[7.2]
|
||
|
|
def change
|
||
|
|
reversible do |dir|
|
||
|
|
dir.down do
|
||
|
|
add_column :checks, :external_number, :integer
|
||
|
|
execute <<~SQL
|
||
|
|
UPDATE checks SET
|
||
|
|
external_number = printf('%d.%d.%d', external_number_1, external_number_2, external_number_3)
|
||
|
|
SQL
|
||
|
|
remove_column :checks, :external_number_1, :integer
|
||
|
|
remove_column :checks, :external_number_2, :integer
|
||
|
|
remove_column :checks, :external_number_3, :integer
|
||
|
|
end
|
||
|
|
end
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
reversible do |dir|
|
||
|
|
dir.up do
|
||
|
|
add_column :checks, :external_number_1, :integer
|
||
|
|
add_column :checks, :external_number_2, :integer
|
||
|
|
add_column :checks, :external_number_3, :integer
|
||
|
|
execute <<~SQL
|
||
|
|
UPDATE checks SET
|
||
|
|
external_number_1 = CAST(SUBSTRING(external_number, 1, INSTR(external_number, '.') - 1) AS integer),
|
||
|
|
external_number_2 = CAST(SUBSTRING(SUBSTRING(external_number, INSTR(external_number, '.') + 1), 1, INSTR(SUBSTRING(external_number, INSTR(external_number, '.') + 1), '.') - 1) AS integer),
|
||
|
|
external_number_3 = CAST(SUBSTRING(SUBSTRING(external_number, INSTR(external_number, '.') + 1), INSTR(SUBSTRING(external_number, INSTR(external_number, '.') + 1), '.') + 1) AS integer)
|
||
|
|
SQL
|
||
|
|
remove_column :checks, :external_number
|
||
|
|
end
|
||
|
|
end
|
||
|
|
end
|
||
|
|
end
|