3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
# File 'lib/birdspotting/reorder_columns.rb', line 3
def reorder_columns_for(table_name, ordered_columns)
check_if_supported
check_all_columns_present(ordered_columns, table_name)
column_types = column_types(table_name)
count = 0
ordered_columns.zip(ordered_columns.rotate)[0...-1].each do |column, column_after|
sql_type = column_types[column_after.to_s]
sql = <<~SQL
ALTER TABLE #{table_name} MODIFY COLUMN #{column_after} #{sql_type} AFTER #{column}, ALGORITHM=INPLACE, LOCK=NONE
SQL
message = "Moving #{column_after} after #{column} (#{count += 1} of #{ordered_columns.count})"
say_with_time message do
ActiveRecord::Base.connection.execute sql
end
end
end
|