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 (protected)



28
29
30
31
32
33
# File 'lib/arjdbc/mysql/bulk_change_table.rb', line 28

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)



77
78
79
80
# File 'lib/arjdbc/mysql/bulk_change_table.rb', line 77

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) ⇒ Object (protected)



87
88
89
# File 'lib/arjdbc/mysql/bulk_change_table.rb', line 87

def add_timestamps_sql(table_name)
  [add_column_sql(table_name, :created_at, :datetime), add_column_sql(table_name, :updated_at, :datetime)]
end

#bulk_change_table(table_name, operations) ⇒ Object



10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
# File 'lib/arjdbc/mysql/bulk_change_table.rb', line 10

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 (protected)



35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
# File 'lib/arjdbc/mysql/bulk_change_table.rb', line 35

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



69
70
71
# File 'lib/arjdbc/mysql/bulk_change_table.rb', line 69

def remove_column_sql(table_name, column_name, type = nil, options = {})
  "DROP #{quote_column_name(column_name)}"
end

#remove_columns_sql(table_name, *column_names) ⇒ Object (protected)



73
74
75
# File 'lib/arjdbc/mysql/bulk_change_table.rb', line 73

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)



82
83
84
85
# File 'lib/arjdbc/mysql/bulk_change_table.rb', line 82

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)



91
92
93
# File 'lib/arjdbc/mysql/bulk_change_table.rb', line 91

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 (protected)



52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
# File 'lib/arjdbc/mysql/bulk_change_table.rb', line 52

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)


6
7
8
# File 'lib/arjdbc/mysql/bulk_change_table.rb', line 6

def supports_bulk_alter?
  true
end