Class: ActiveRecord::ConnectionAdapters::AlterTable
Do not use. This class is for internal use only.
| Relationships & Source Files | |
| Extension / Inclusion / Inheritance Descendants | |
|
Subclasses:
|
|
| Inherits: | Object |
| Defined in: | activerecord/lib/active_record/connection_adapters/abstract/schema_definitions.rb |
Constant Summary
-
COMBINABLE_COMMANDS =
# File 'activerecord/lib/active_record/connection_adapters/abstract/schema_definitions.rb', line 701
Commands from CommandRecorder that can be dispatched directly to
AlterTablemethods (combinable into a single ALTER TABLE statement). Subclasses may extend.%i[ add_column remove_column remove_columns change_column_default add_timestamps remove_timestamps add_foreign_key remove_foreign_key add_check_constraint remove_check_constraint ].freeze
Class Method Summary
- .new(td) ⇒ AlterTable constructor
Instance Attribute Summary
- #deferred_operations readonly
- #empty? ⇒ Boolean readonly
- #operations readonly
Instance Method Summary
- #add_check_constraint(expression, **options)
- #add_column(column_name, type, **options)
- #add_foreign_key(to_table, **options)
- #add_timestamps(**options)
- #change_column_default(column_name, default_or_changes)
- #change_column_null(name, null)
- #drop_check_constraint(constraint_name)
- #drop_constraint(constraint_name)
- #drop_foreign_key(name)
- #name
- #remove_check_constraint(expression = nil, **options)
- #remove_column(column_name, _type = nil)
- #remove_columns(*column_names)
- #remove_foreign_key(to_table = nil, **options)
- #remove_timestamps
- #rename_column(from_name, to_name)
Constructor Details
.new(td) ⇒ AlterTable
# File 'activerecord/lib/active_record/connection_adapters/abstract/schema_definitions.rb', line 716
def initialize(td) @td = td @operations = [] @deferred_operations = [] end
Instance Attribute Details
#deferred_operations (readonly)
[ GitHub ]# File 'activerecord/lib/active_record/connection_adapters/abstract/schema_definitions.rb', line 714
attr_reader :operations, :deferred_operations
#empty? ⇒ Boolean (readonly)
[ GitHub ]
# File 'activerecord/lib/active_record/connection_adapters/abstract/schema_definitions.rb', line 802
def empty? @operations.empty? end
#operations (readonly)
[ GitHub ]# File 'activerecord/lib/active_record/connection_adapters/abstract/schema_definitions.rb', line 714
attr_reader :operations, :deferred_operations
Instance Method Details
#add_check_constraint(expression, **options)
[ GitHub ]# File 'activerecord/lib/active_record/connection_adapters/abstract/schema_definitions.rb', line 783
def add_check_constraint(expression, **) return unless @td.conn.supports_check_constraints? @operations << AddCheckConstraint.new(@td.new_check_constraint_definition(expression, )) end
#add_column(column_name, type, **options)
[ GitHub ]# File 'activerecord/lib/active_record/connection_adapters/abstract/schema_definitions.rb', line 724
def add_column(column_name, type, **) column_name = column_name.to_s type = type.to_sym @operations << AddColumnDefinition.new(@td.new_column_definition(column_name, type, **)) end
#add_foreign_key(to_table, **options)
[ GitHub ]# File 'activerecord/lib/active_record/connection_adapters/abstract/schema_definitions.rb', line 765
def add_foreign_key(to_table, **) conn = @td.conn return unless conn.use_foreign_keys? = conn.(name, to_table, ) @operations << AddForeignKey.new(@td.new_foreign_key_definition(to_table, )) end
#add_timestamps(**options)
[ GitHub ]# File 'activerecord/lib/active_record/connection_adapters/abstract/schema_definitions.rb', line 754
def (**) [:null] = false if [:null].nil? add_column(:created_at, :datetime, **) add_column(:updated_at, :datetime, **) end
#change_column_default(column_name, default_or_changes)
[ GitHub ]# File 'activerecord/lib/active_record/connection_adapters/abstract/schema_definitions.rb', line 738
def change_column_default(column_name, default_or_changes) conn = @td.conn column = conn.send(:column_for, name, column_name) return unless column default = conn.send(:extract_new_default_value, default_or_changes) @operations << ChangeColumnDefaultDefinition.new(column, default) end
#change_column_null(name, null)
[ GitHub ]# File 'activerecord/lib/active_record/connection_adapters/abstract/schema_definitions.rb', line 750
def change_column_null(name, null) @operations << ChangeColumnNull.new(name, null) end
#drop_check_constraint(constraint_name)
[ GitHub ]# File 'activerecord/lib/active_record/connection_adapters/abstract/schema_definitions.rb', line 794
def drop_check_constraint(constraint_name) @operations << DropCheckConstraint.new(constraint_name) end
#drop_constraint(constraint_name)
[ GitHub ]# File 'activerecord/lib/active_record/connection_adapters/abstract/schema_definitions.rb', line 798
def drop_constraint(constraint_name) @operations << DropConstraint.new(constraint_name) end
#drop_foreign_key(name)
[ GitHub ]# File 'activerecord/lib/active_record/connection_adapters/abstract/schema_definitions.rb', line 779
def drop_foreign_key(name) @operations << DropForeignKey.new(name) end
#name
[ GitHub ]# File 'activerecord/lib/active_record/connection_adapters/abstract/schema_definitions.rb', line 722
def name; @td.name; end
#remove_check_constraint(expression = nil, **options)
[ GitHub ]# File 'activerecord/lib/active_record/connection_adapters/abstract/schema_definitions.rb', line 788
def remove_check_constraint(expression = nil, **) conn = @td.conn return unless conn.supports_check_constraints? drop_check_constraint(conn.send(:check_constraint_for!, name, expression: expression, **).name) end
#remove_column(column_name, _type = nil)
[ GitHub ]# File 'activerecord/lib/active_record/connection_adapters/abstract/schema_definitions.rb', line 730
def remove_column(column_name, _type = nil, **) @operations << DropColumn.new(column_name) end
#remove_columns(*column_names)
[ GitHub ]# File 'activerecord/lib/active_record/connection_adapters/abstract/schema_definitions.rb', line 734
def remove_columns(*column_names, **) column_names.each { |column_name| remove_column(column_name) } end
#remove_foreign_key(to_table = nil, **options)
[ GitHub ]# File 'activerecord/lib/active_record/connection_adapters/abstract/schema_definitions.rb', line 772
def remove_foreign_key(to_table = nil, **) conn = @td.conn return unless conn.use_foreign_keys? to_table ||= [:to_table] drop_foreign_key(conn.send(:foreign_key_for!, name, to_table: to_table, **).name) end
#remove_timestamps
[ GitHub ]# File 'activerecord/lib/active_record/connection_adapters/abstract/schema_definitions.rb', line 760
def (**) remove_column(:updated_at) remove_column(:created_at) end
#rename_column(from_name, to_name)
[ GitHub ]# File 'activerecord/lib/active_record/connection_adapters/abstract/schema_definitions.rb', line 746
def rename_column(from_name, to_name) @operations << RenameColumn.new(from_name, to_name) end