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