/usr/lib/ruby/vendor_ruby/sequel/adapters/utils/split_alter_table.rb is in ruby-sequel 4.1.1-1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 | module Sequel::Database::SplitAlterTable
private
# Preprocess the array of operations. If it looks like some operations depend
# on results of earlier operations and may require reloading the schema to
# work correctly, split those operations into separate lists, and between each
# list, remove the cached schema so that the later operations deal with the
# then current table schema.
def apply_alter_table(name, ops)
modified_columns = []
op_groups = [[]]
ops.each do |op|
case op[:op]
when :add_column, :set_column_type, :set_column_null, :set_column_default
if modified_columns.include?(op[:name])
op_groups << []
else
modified_columns << op[:name]
end
when :rename_column
if modified_columns.include?(op[:name]) || modified_columns.include?(op[:new_name])
op_groups << []
end
modified_columns << op[:name] unless modified_columns.include?(op[:name])
modified_columns << op[:new_name] unless modified_columns.include?(op[:new_name])
end
op_groups.last << op
end
op_groups.each do |opgs|
next if opgs.empty?
alter_table_sql_list(name, opgs).each{|sql| execute_ddl(sql)}
remove_cached_schema(name)
end
end
end
|