Module: ArJdbc::MySQL::BulkChangeTable

Included in:
ArJdbc::MySQL
Defined in:
lib/arjdbc/mysql/bulk_change_table.rb

Instance Method Summary collapse

Instance Method Details

#add_column_sql(table_name, column_name, type, options = {}) ⇒ Object



35
36
37
38
39
40
# 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 = {}) ⇒ Object (protected)



120
121
122
123
# 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 = {}) ⇒ Object (protected)



130
131
132
# 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

#bulk_change_table(table_name, operations) ⇒ Object



17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
# 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

#change_column_sql(table_name, column_name, type, options = {}) ⇒ Object



48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
# 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) ⇒ Object (protected)



112
113
114
# 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) ⇒ Object (protected)



116
117
118
# 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 = {}) ⇒ Object (protected)



125
126
127
128
# 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) ⇒ Object (protected)



134
135
136
# File 'lib/arjdbc/mysql/bulk_change_table.rb', line 134

def remove_timestamps_sql(table_name)
  [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) ⇒ Object



80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
# 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

#supports_bulk_alter?Boolean

Returns:

  • (Boolean)


15
# File 'lib/arjdbc/mysql/bulk_change_table.rb', line 15

def supports_bulk_alter?; true end