1
0
Fork 0
mirror of https://github.com/rails/rails.git synced 2022-11-09 12:12:34 -05:00

Merge pull request #33618 from yskkin/bulk_change_table_comment

Fix bulk change table ignores comment option on PostgreSQL.
This commit is contained in:
Ryuta Kamizono 2018-08-15 14:26:31 +09:00 committed by GitHub
commit f7a4b875df
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 16 additions and 3 deletions

View file

@ -700,6 +700,11 @@ module ActiveRecord
sql sql
end end
def add_column_for_alter(table_name, column_name, type, options = {})
return super unless options.key?(:comment)
[super, Proc.new { change_column_comment(table_name, column_name, options[:comment]) }]
end
def change_column_for_alter(table_name, column_name, type, options = {}) def change_column_for_alter(table_name, column_name, type, options = {})
sqls = [change_column_sql(table_name, column_name, type, options)] sqls = [change_column_sql(table_name, column_name, type, options)]
sqls << change_column_default_for_alter(table_name, column_name, options[:default]) if options.key?(:default) sqls << change_column_default_for_alter(table_name, column_name, options[:default]) if options.key?(:default)
@ -708,7 +713,6 @@ module ActiveRecord
sqls sqls
end end
# Changes the default value of a table column. # Changes the default value of a table column.
def change_column_default_for_alter(table_name, column_name, default_or_changes) # :nodoc: def change_column_default_for_alter(table_name, column_name, default_or_changes) # :nodoc:
column = column_for(table_name, column_name) column = column_for(table_name, column_name)

View file

@ -793,12 +793,20 @@ if ActiveRecord::Base.connection.supports_bulk_alter?
end end
def test_adding_multiple_columns def test_adding_multiple_columns
assert_queries(1) do classname = ActiveRecord::Base.connection.class.name[/[^:]*$/]
expected_query_count = {
"Mysql2Adapter" => 1,
"PostgreSQLAdapter" => 2, # one for bulk change, one for comment
}.fetch(classname) {
raise "need an expected query count for #{classname}"
}
assert_queries(expected_query_count) do
with_bulk_change_table do |t| with_bulk_change_table do |t|
t.column :name, :string t.column :name, :string
t.string :qualification, :experience t.string :qualification, :experience
t.integer :age, default: 0 t.integer :age, default: 0
t.date :birthdate t.date :birthdate, comment: "This is a comment"
t.timestamps null: true t.timestamps null: true
end end
end end
@ -806,6 +814,7 @@ if ActiveRecord::Base.connection.supports_bulk_alter?
assert_equal 8, columns.size assert_equal 8, columns.size
[:name, :qualification, :experience].each { |s| assert_equal :string, column(s).type } [:name, :qualification, :experience].each { |s| assert_equal :string, column(s).type }
assert_equal "0", column(:age).default assert_equal "0", column(:age).default
assert_equal "This is a comment", column(:birthdate).comment
end end
def test_removing_columns def test_removing_columns