mirror of
https://github.com/rails/rails.git
synced 2022-11-09 12:12:34 -05:00
Fix invalid schema dump when primary key column has a comment
Before this fix it would either generate an invalid schema, passing `comment` option twice to `create_table`, or it move the comment from primary key column to the table if table had no comment when the dump was generated. The situation now is that a comment on primary key will be ignored (not present on schema). Fixes #29966
This commit is contained in:
parent
5f2bc3a6a0
commit
49f31043be
3 changed files with 28 additions and 2 deletions
|
@ -1,3 +1,9 @@
|
|||
* Fix invalid schema when primary key column has a comment
|
||||
|
||||
Fixes #29966
|
||||
|
||||
*Guilherme Goettems Schneider*
|
||||
|
||||
* Fix table comment also being applied to the primary key column
|
||||
|
||||
*Guilherme Goettems Schneider*
|
||||
|
|
|
@ -15,7 +15,7 @@ module ActiveRecord
|
|||
def column_spec_for_primary_key(column)
|
||||
return {} if default_primary_key?(column)
|
||||
spec = { id: schema_type(column).inspect }
|
||||
spec.merge!(prepare_column_options(column).except!(:null))
|
||||
spec.merge!(prepare_column_options(column).except!(:null, :comment))
|
||||
spec[:default] ||= "nil" if explicit_primary_key_default?(column)
|
||||
spec
|
||||
end
|
||||
|
|
|
@ -14,6 +14,9 @@ if ActiveRecord::Base.connection.supports_comments?
|
|||
class BlankComment < ActiveRecord::Base
|
||||
end
|
||||
|
||||
class PkCommented < ActiveRecord::Base
|
||||
end
|
||||
|
||||
setup do
|
||||
@connection = ActiveRecord::Base.connection
|
||||
|
||||
|
@ -35,8 +38,13 @@ if ActiveRecord::Base.connection.supports_comments?
|
|||
t.index :absent_comment
|
||||
end
|
||||
|
||||
@connection.create_table("pk_commenteds", comment: "Table comment", id: false, force: true) do |t|
|
||||
t.integer :id, comment: "Primary key comment", primary_key: true
|
||||
end
|
||||
|
||||
Commented.reset_column_information
|
||||
BlankComment.reset_column_information
|
||||
PkCommented.reset_column_information
|
||||
end
|
||||
|
||||
teardown do
|
||||
|
@ -44,7 +52,7 @@ if ActiveRecord::Base.connection.supports_comments?
|
|||
@connection.drop_table "blank_comments", if_exists: true
|
||||
end
|
||||
|
||||
def test_primary_key_comment
|
||||
def test_default_primary_key_comment
|
||||
column = Commented.columns_hash["id"]
|
||||
assert_nil column.comment
|
||||
end
|
||||
|
@ -169,5 +177,17 @@ if ActiveRecord::Base.connection.supports_comments?
|
|||
column = Commented.columns_hash["name"]
|
||||
assert_nil column.comment
|
||||
end
|
||||
|
||||
def test_comment_on_primary_key
|
||||
column = PkCommented.columns_hash["id"]
|
||||
assert_equal "Primary key comment", column.comment
|
||||
assert_equal "Table comment", @connection.table_comment("pk_commenteds")
|
||||
end
|
||||
|
||||
def test_schema_dump_with_primary_key_comment
|
||||
output = dump_table_schema "pk_commenteds"
|
||||
assert_match %r[create_table "pk_commenteds",.*\s+comment: "Table comment"], output
|
||||
assert_no_match %r[create_table "pk_commenteds",.*\s+comment: "Primary key comment"], output
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
Loading…
Reference in a new issue