mirror of
https://github.com/rails/rails.git
synced 2022-11-09 12:12:34 -05:00
Allow column_exists?
to be passed type
argument as a string
Currently `conn.column_exists?("testings", "created_at", "datetime")` returns false even if the table has the `created_at` column. That reason is that `column.type` is a symbol but passed `type` is not normalized to symbol unlike `column_name`, it is surprising behavior to me. I've improved that to normalize a value before comparison.
This commit is contained in:
parent
4a40128a3f
commit
1fecebae31
2 changed files with 5 additions and 10 deletions
|
@ -134,7 +134,7 @@ module ActiveRecord
|
|||
column_name = column_name.to_s
|
||||
checks = []
|
||||
checks << lambda { |c| c.name == column_name }
|
||||
checks << lambda { |c| c.type == type } if type
|
||||
checks << lambda { |c| c.type == type.to_sym rescue nil } if type
|
||||
column_options_keys.each do |attr|
|
||||
checks << lambda { |c| c.send(attr) == options[attr] } if options.key?(attr)
|
||||
end
|
||||
|
|
|
@ -139,8 +139,8 @@ class Mysql2ActiveSchemaTest < ActiveRecord::Mysql2TestCase
|
|||
with_real_execute do
|
||||
ActiveRecord::Base.connection.create_table :delete_me
|
||||
ActiveRecord::Base.connection.add_timestamps :delete_me, null: true
|
||||
assert column_present?("delete_me", "updated_at", "datetime")
|
||||
assert column_present?("delete_me", "created_at", "datetime")
|
||||
assert column_exists?("delete_me", "updated_at", "datetime")
|
||||
assert column_exists?("delete_me", "created_at", "datetime")
|
||||
ensure
|
||||
ActiveRecord::Base.connection.drop_table :delete_me rescue nil
|
||||
end
|
||||
|
@ -152,8 +152,8 @@ class Mysql2ActiveSchemaTest < ActiveRecord::Mysql2TestCase
|
|||
t.timestamps null: true
|
||||
end
|
||||
ActiveRecord::Base.connection.remove_timestamps :delete_me, null: true
|
||||
assert_not column_present?("delete_me", "updated_at", "datetime")
|
||||
assert_not column_present?("delete_me", "created_at", "datetime")
|
||||
assert_not column_exists?("delete_me", "updated_at", "datetime")
|
||||
assert_not column_exists?("delete_me", "created_at", "datetime")
|
||||
ensure
|
||||
ActiveRecord::Base.connection.drop_table :delete_me rescue nil
|
||||
end
|
||||
|
@ -194,9 +194,4 @@ class Mysql2ActiveSchemaTest < ActiveRecord::Mysql2TestCase
|
|||
def method_missing(method_symbol, *arguments)
|
||||
ActiveRecord::Base.connection.send(method_symbol, *arguments)
|
||||
end
|
||||
|
||||
def column_present?(table_name, column_name, type)
|
||||
results = ActiveRecord::Base.connection.select_all("SHOW FIELDS FROM #{table_name} LIKE '#{column_name}'")
|
||||
results.first && results.first["Type"] == type
|
||||
end
|
||||
end
|
||||
|
|
Loading…
Reference in a new issue