Module: Birdspotting::ReorderColumns

Defined in:
lib/birdspotting/reorder_columns.rb

Instance Method Summary collapse

Instance Method Details

#reorder_columns_for(table_name, ordered_columns) ⇒ Object



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