Class: ActiveRecord::ConnectionAdapters::MySQL::AlterTable
Do not use. This class is for internal use only.
| Relationships & Source Files | |
| Super Chains via Extension / Inclusion / Inheritance | |
|
Class Chain:
|
|
|
Instance Chain:
|
|
| Inherits: |
ActiveRecord::ConnectionAdapters::AlterTable
|
| Defined in: | activerecord/lib/active_record/connection_adapters/mysql/schema_definitions.rb |
Overview
Active Record MySQL Adapter Alter Table
Constant Summary
-
COMBINABLE_COMMANDS =
# File 'activerecord/lib/active_record/connection_adapters/mysql/schema_definitions.rb', line 120(superclass::COMBINABLE_COMMANDS + %i[change_column rename_column add_index remove_index]).freeze
::ActiveRecord::ConnectionAdapters::AlterTable - Inherited
Class Method Summary
::ActiveRecord::ConnectionAdapters::AlterTable - Inherited
Instance Attribute Summary
- #algorithm rw
- #algorithm=(value) rw
- #lock rw
- #lock=(value) rw
::ActiveRecord::ConnectionAdapters::AlterTable - Inherited
Instance Method Summary
- #add_column(column_name, type, **options)
- #add_index(column_name, **options)
- #change_column(column_name, type, **options)
- #remove_column(column_name, _type = nil, **options)
- #remove_index(column_name = nil, **options)
- #rename_column(from_name, to_name, **options)
- #extract_algorithm_and_lock!(options) private
::ActiveRecord::ConnectionAdapters::AlterTable - Inherited
Constructor Details
This class inherits a constructor from ActiveRecord::ConnectionAdapters::AlterTable
Instance Attribute Details
#algorithm (rw)
[ GitHub ]# File 'activerecord/lib/active_record/connection_adapters/mysql/schema_definitions.rb', line 122
attr_reader :algorithm, :lock
#algorithm=(value) (rw)
[ GitHub ]# File 'activerecord/lib/active_record/connection_adapters/mysql/schema_definitions.rb', line 124
def algorithm=(value) @algorithm = @td.conn.index_algorithm(value) if value end
#lock (rw)
[ GitHub ]# File 'activerecord/lib/active_record/connection_adapters/mysql/schema_definitions.rb', line 122
attr_reader :algorithm, :lock
#lock=(value) (rw)
[ GitHub ]# File 'activerecord/lib/active_record/connection_adapters/mysql/schema_definitions.rb', line 128
def lock=(value) @lock = @td.conn.lock_clause(value) if value end
Instance Method Details
#add_column(column_name, type, **options)
[ GitHub ]# File 'activerecord/lib/active_record/connection_adapters/mysql/schema_definitions.rb', line 132
def add_column(column_name, type, **) extract_algorithm_and_lock!() super end
#add_index(column_name, **options)
[ GitHub ]# File 'activerecord/lib/active_record/connection_adapters/mysql/schema_definitions.rb', line 147
def add_index(column_name, **) extract_algorithm_and_lock!() index, _ = @td.conn.(name, column_name, **) @operations << AddIndex.new(index) end
#change_column(column_name, type, **options)
[ GitHub ]# File 'activerecord/lib/active_record/connection_adapters/mysql/schema_definitions.rb', line 159
def change_column(column_name, type, **) extract_algorithm_and_lock!() conn = @td.conn column = conn.send(:column_for, name, column_name) type ||= column.sql_type unless .key?(:default) [:default] = if column.default_function #=> { column.default_function } else column.default end end unless .key?(:null) [:null] = column.null end unless .key?(:comment) [:comment] = column.comment end if [:collation] == :no_collation .delete(:collation) else [:collation] ||= column.collation if conn.send(:text_type?, type) end unless .key?(:auto_increment) [:auto_increment] = column.auto_increment? end cd = @td.new_column_definition(column.name, type, **) @operations << ChangeColumnDefinition.new(cd, column.name) end
#extract_algorithm_and_lock!(options) (private)
[ GitHub ]#remove_column(column_name, _type = nil, **options)
[ GitHub ]# File 'activerecord/lib/active_record/connection_adapters/mysql/schema_definitions.rb', line 137
def remove_column(column_name, _type = nil, **) extract_algorithm_and_lock!() # MySQL rejects `DROP COLUMN` on a column referenced by a foreign key, # so drop the FK in the same `ALTER TABLE` statement as the column. if fk = @td.conn.send(:foreign_key_for, name, column: column_name) @operations << DropForeignKey.new(fk.name) end super end
#remove_index(column_name = nil, **options)
[ GitHub ]# File 'activerecord/lib/active_record/connection_adapters/mysql/schema_definitions.rb', line 153
def remove_index(column_name = nil, **) extract_algorithm_and_lock!() index_name = @td.conn.send(:index_name_for_remove, name, column_name, ) @operations << DropIndex.new(index_name) end
#rename_column(from_name, to_name, **options)
[ GitHub ]# File 'activerecord/lib/active_record/connection_adapters/mysql/schema_definitions.rb', line 195
def rename_column(from_name, to_name, **) extract_algorithm_and_lock!() conn = @td.conn if conn.send(:supports_rename_column?) super(from_name, to_name) else column = conn.send(:column_for, name, from_name) = { default: column.default, null: column.null, auto_increment: column.auto_increment?, comment: column.comment } current_type = conn.query_one("SHOW COLUMNS FROM #{conn.quote_table_name(name)} LIKE #{conn.quote(from_name)}")["Type"] cd = @td.new_column_definition(to_name, current_type, **) @operations << ChangeColumnDefinition.new(cd, column.name) end end