module ArJdbc::MySQL::BulkChangeTable

Constants

AR41

@private

ChangeColumnDefinition

@private

Public Instance Methods

bulk_change_table(table_name, operations) click to toggle source
# File lib/arjdbc/mysql/bulk_change_table.rb, line 17
def bulk_change_table(table_name, operations)
  sqls = operations.map do |command, args|
    table, arguments = args.shift, args
    method = :"#{command}_sql"

    if respond_to?(method, true)
      send(method, table, *arguments)
    else
      raise "Unknown method called : #{method}(#{arguments.inspect})"
    end
  end
  sqls.flatten!

  execute("ALTER TABLE #{quote_table_name(table_name)} #{sqls.join(", ")}")
end
supports_bulk_alter?() click to toggle source

@override

# File lib/arjdbc/mysql/bulk_change_table.rb, line 15
def supports_bulk_alter?; true end

Protected Instance Methods

add_column_sql(table_name, column_name, type, options = {}) click to toggle source
# File lib/arjdbc/mysql/bulk_change_table.rb, line 35
def add_column_sql(table_name, column_name, type, options = {})
  add_column_sql = "ADD #{quote_column_name(column_name)} #{type_to_sql(type, options[:limit], options[:precision], options[:scale])}"
  add_column_options!(add_column_sql, options)
  add_column_position!(add_column_sql, options)
  add_column_sql
end
add_index_sql(table_name, column_name, options = {}) click to toggle source
# File lib/arjdbc/mysql/bulk_change_table.rb, line 120
def add_index_sql(table_name, column_name, options = {})
  index_name, index_type, index_columns = add_index_options(table_name, column_name, options)
  "ADD #{index_type} INDEX #{index_name} (#{index_columns})"
end
add_timestamps_sql(table_name, options = {}) click to toggle source
# File lib/arjdbc/mysql/bulk_change_table.rb, line 130
def add_timestamps_sql(table_name, options = {})
  [add_column_sql(table_name, :created_at, :datetime, options), add_column_sql(table_name, :updated_at, :datetime, options)]
end
change_column_sql(table_name, column_name, type, options = {}) click to toggle source
# File lib/arjdbc/mysql/bulk_change_table.rb, line 48
def change_column_sql(table_name, column_name, type, options = {})
  column = column_for(table_name, column_name)

  unless options_include_default?(options)
    options[:default] = column.default
  end

  unless options.has_key?(:null)
    options[:null] = column.null
  end

  change_column_sql = "CHANGE #{quote_column_name(column_name)} #{quote_column_name(column_name)} #{type_to_sql(type, options[:limit], options[:precision], options[:scale])}"
  add_column_options!(change_column_sql, options)
  add_column_position!(change_column_sql, options)
  change_column_sql
end
remove_column_sql(table_name, column_name, type = nil, options = nil) click to toggle source
# File lib/arjdbc/mysql/bulk_change_table.rb, line 112
def remove_column_sql(table_name, column_name, type = nil, options = nil)
  "DROP #{quote_column_name(column_name)}"
end
remove_columns_sql(table_name, *column_names) click to toggle source
# File lib/arjdbc/mysql/bulk_change_table.rb, line 116
def remove_columns_sql(table_name, *column_names)
  column_names.map { |column_name| remove_column_sql(table_name, column_name) }
end
remove_index_sql(table_name, options = {}) click to toggle source
# File lib/arjdbc/mysql/bulk_change_table.rb, line 125
def remove_index_sql(table_name, options = {})
  index_name = index_name_for_remove(table_name, options)
  "DROP INDEX #{index_name}"
end
remove_timestamps_sql(table_name, options = nil) click to toggle source
# File lib/arjdbc/mysql/bulk_change_table.rb, line 134
def remove_timestamps_sql(table_name, options = nil)
  [remove_column_sql(table_name, :updated_at), remove_column_sql(table_name, :created_at)]
end
rename_column_sql(table_name, column_name, new_column_name) click to toggle source
# File lib/arjdbc/mysql/bulk_change_table.rb, line 80
def rename_column_sql(table_name, column_name, new_column_name)
  options = {}

  if column = columns(table_name).find { |c| c.name == column_name.to_s }
    options[:default] = column.default
    options[:null] = column.null
    options[:auto_increment] = (column.extra == "auto_increment")
  else
    raise ActiveRecordError, "No such column: #{table_name}.#{column_name}"
  end

  current_type = select_one("SHOW COLUMNS FROM #{quote_table_name(table_name)} LIKE '#{column_name}'", 'SCHEMA')["Type"]
  rename_column_sql = "CHANGE #{quote_column_name(column_name)} #{quote_column_name(new_column_name)} #{current_type}"
  add_column_options!(rename_column_sql, options)
  rename_column_sql
end

Private Instance Methods

add_column_position!(sql, options) click to toggle source
# File lib/arjdbc/mysql/bulk_change_table.rb, line 140
def add_column_position!(sql, options)
  if options[:first]
    sql << " FIRST"
  elsif options[:after]
    sql << " AFTER #{quote_column_name(options[:after])}"
  end
end