class BulkAlterTableMigrationsTest
Public Instance Methods
setup()
click to toggle source
# File activerecord/test/cases/migration_test.rb, line 752 def setup @connection = Person.connection @connection.create_table(:delete_me, force: true) { |t| } Person.reset_column_information Person.reset_sequence_name end
test_adding_indexes()
click to toggle source
# File activerecord/test/cases/migration_test.rb, line 797 def test_adding_indexes with_bulk_change_table do |t| t.string :username t.string :name t.integer :age end # Adding an index fires a query every time to check if an index already exists or not assert_queries(3) do with_bulk_change_table do |t| t.index :username, unique: true, name: :awesome_username_index t.index [:name, :age] end end assert_equal 2, indexes.size name_age_index = index(:index_delete_me_on_name_and_age) assert_equal ["name", "age"].sort, name_age_index.columns.sort assert ! name_age_index.unique assert index(:awesome_username_index).unique end
test_adding_multiple_columns()
click to toggle source
# File activerecord/test/cases/migration_test.rb, line 763 def test_adding_multiple_columns assert_queries(1) do with_bulk_change_table do |t| t.column :name, :string t.string :qualification, :experience t.integer :age, default: 0 t.date :birthdate t.timestamps null: true end end assert_equal 8, columns.size [:name, :qualification, :experience].each { |s| assert_equal :string, column(s).type } assert_equal "0", column(:age).default end
test_changing_columns()
click to toggle source
# File activerecord/test/cases/migration_test.rb, line 842 def test_changing_columns with_bulk_change_table do |t| t.string :name t.date :birthdate end assert ! column(:name).default assert_equal :date, column(:birthdate).type # One query for columns (delete_me table) # One query for primary key (delete_me table) # One query to do the bulk change assert_queries(3, ignore_none: true) do with_bulk_change_table do |t| t.change :name, :string, default: "NONAME" t.change :birthdate, :datetime end end assert_equal "NONAME", column(:name).default assert_equal :datetime, column(:birthdate).type end
test_removing_columns()
click to toggle source
# File activerecord/test/cases/migration_test.rb, line 779 def test_removing_columns with_bulk_change_table do |t| t.string :qualification, :experience end [:qualification, :experience].each { |c| assert column(c) } assert_queries(1) do with_bulk_change_table do |t| t.remove :qualification, :experience t.string :qualification_experience end end [:qualification, :experience].each { |c| assert ! column(c) } assert column(:qualification_experience) end
test_removing_index()
click to toggle source
# File activerecord/test/cases/migration_test.rb, line 821 def test_removing_index with_bulk_change_table do |t| t.string :name t.index :name end assert index(:index_delete_me_on_name) assert_queries(3) do with_bulk_change_table do |t| t.remove_index :name t.index :name, name: :new_name_index, unique: true end end assert ! index(:index_delete_me_on_name) new_name_index = index(:new_name_index) assert new_name_index.unique end
Private Instance Methods
column(name)
click to toggle source
# File activerecord/test/cases/migration_test.rb, line 876 def column(name) columns.detect { |c| c.name == name.to_s } end
columns()
click to toggle source
# File activerecord/test/cases/migration_test.rb, line 880 def columns @columns ||= Person.connection.columns("delete_me") end
index(name)
click to toggle source
# File activerecord/test/cases/migration_test.rb, line 884 def index(name) indexes.detect { |i| i.name == name.to_s } end
indexes()
click to toggle source
# File activerecord/test/cases/migration_test.rb, line 888 def indexes @indexes ||= Person.connection.indexes("delete_me") end
with_bulk_change_table() { |t| ... }
click to toggle source
# File activerecord/test/cases/migration_test.rb, line 867 def with_bulk_change_table # Reset columns/indexes cache as we're changing the table @columns = @indexes = nil Person.connection.change_table(:delete_me, bulk: true) do |t| yield t end end