module ForAlterStatements

Public Class Methods

included(_) click to toggle source
# File lib/active_record/connection_adapters/for_alter.rb, line 5
def included(_)
  STDERR.puts 'Including for_alter statements'
end

Public Instance Methods

add_column_for_alter(table_name, column_name, type, options = {}) click to toggle source
# File lib/active_record/connection_adapters/for_alter.rb, line 78
def add_column_for_alter(table_name, column_name, type, options = {})
  td = create_table_definition(table_name)
  cd = td.new_column_definition(column_name, type, options)
  schema_creation.accept(ActiveRecord::ConnectionAdapters::AddColumnDefinition.new(cd))
end
add_index_for_alter(table_name, column_name, options = {}) click to toggle source
# File lib/active_record/connection_adapters/for_alter.rb, line 54
def add_index_for_alter(table_name, column_name, options = {})
  index_name, index_type, index_columns, _,
    index_algorithm, index_using = add_index_options(table_name, column_name, options)

  index_algorithm[0, 0] = ', ' if index_algorithm.present?
  "ADD #{index_type} INDEX #{quote_column_name(index_name)} #{index_using} (#{index_columns})#{index_algorithm}"
end
add_timestamps_for_alter(table_name, options = {}) click to toggle source
# File lib/active_record/connection_adapters/for_alter.rb, line 67
def add_timestamps_for_alter(table_name, options = {})
  [
    add_column_for_alter(table_name, :created_at, :datetime, options),
    add_column_for_alter(table_name, :updated_at, :datetime, options)
  ]
end
change_column_for_alter(table_name, column_name, type, options = {}) click to toggle source
# File lib/active_record/connection_adapters/for_alter.rb, line 24
def change_column_for_alter(table_name, column_name, type, options = {})
  column = column_for(table_name, column_name)
  type ||= column.sql_type

  options = {
    default: column.default,
    null: column.null,
    comment: column.comment
  }.merge(options)

  td = create_table_definition(table_name)
  cd = td.new_column_definition(column.name, type, options)
  schema_creation.accept(ActiveRecord::ConnectionAdapters::ChangeColumnDefinition.new(cd, column.name))
end
remove_column_for_alter(_table_name, column_name, _type = nil, _options = {}) click to toggle source
# File lib/active_record/connection_adapters/for_alter.rb, line 84
def remove_column_for_alter(_table_name, column_name, _type = nil, _options = {})
  "DROP COLUMN #{quote_column_name(column_name)}"
end
remove_columns_for_alter(table_name, *column_names) click to toggle source
# File lib/active_record/connection_adapters/for_alter.rb, line 88
def remove_columns_for_alter(table_name, *column_names)
  column_names.map { |column_name| remove_column_for_alter(table_name, column_name) }
end
remove_index_for_alter(table_name, options = {}) click to toggle source
# File lib/active_record/connection_adapters/for_alter.rb, line 62
def remove_index_for_alter(table_name, options = {})
  index_name = index_name_for_remove(table_name, options)
  "DROP INDEX #{quote_column_name(index_name)}"
end
remove_timestamps_for_alter(table_name, _options = {}) click to toggle source
# File lib/active_record/connection_adapters/for_alter.rb, line 74
def remove_timestamps_for_alter(table_name, _options = {})
  [remove_column_for_alter(table_name, :updated_at), remove_column_for_alter(table_name, :created_at)]
end
rename_column_for_alter(table_name, column_name, new_column_name) click to toggle source
# File lib/active_record/connection_adapters/for_alter.rb, line 39
def rename_column_for_alter(table_name, column_name, new_column_name)
  column  = column_for(table_name, column_name)
  options = {
    default: column.default,
    null: column.null,
    auto_increment: column.auto_increment?
  }

  columns_sql = "SHOW COLUMNS FROM #{quote_table_name(table_name)} LIKE #{quote(column_name)}"
  current_type = exec_query(columns_sql, 'SCHEMA').first['Type']
  td = create_table_definition(table_name)
  cd = td.new_column_definition(new_column_name, current_type, options)
  schema_creation.accept(ActiveRecord::ConnectionAdapters::ChangeColumnDefinition.new(cd, column.name))
end