未验证 提交 f1dc5e6b 编写于 作者: R Ryuta Kamizono 提交者: GitHub

Merge pull request #39284 from kamipo/support_native_rename_column

Support native RENAME COLUMN syntax for MySQL
......@@ -1493,6 +1493,10 @@ def add_column_for_alter(table_name, column_name, type, **options)
schema_creation.accept(AddColumnDefinition.new(cd))
end
def rename_column_for_alter(table_name, column_name, new_column_name)
"RENAME COLUMN #{quote_column_name(column_name)} TO #{quote_column_name(new_column_name)}"
end
def remove_column_for_alter(table_name, column_name, type = nil, **options)
"DROP COLUMN #{quote_column_name(column_name)}"
end
......
......@@ -667,6 +667,8 @@ def change_column_for_alter(table_name, column_name, type, options = {})
end
def rename_column_for_alter(table_name, column_name, new_column_name)
return super if supports_rename_column?
column = column_for(table_name, column_name)
options = {
default: column.default,
......@@ -701,6 +703,14 @@ def supports_rename_index?
end
end
def supports_rename_column?
if mariadb?
database_version >= "10.5.2"
else
database_version >= "8.0.3"
end
end
def configure_connection
variables = @config.fetch(:variables, {}).stringify_keys
......
......@@ -437,7 +437,7 @@ def change_table_comment(table_name, comment_or_changes) # :nodoc:
# Renames a column in a table.
def rename_column(table_name, column_name, new_column_name) #:nodoc:
clear_cache!
execute "ALTER TABLE #{quote_table_name(table_name)} RENAME COLUMN #{quote_column_name(column_name)} TO #{quote_column_name(new_column_name)}"
execute("ALTER TABLE #{quote_table_name(table_name)} #{rename_column_for_alter(table_name, column_name, new_column_name)}")
rename_column_indexes(table_name, column_name, new_column_name)
end
......
......@@ -170,7 +170,11 @@ def test_logs_name_rename_column_for_alter
@connection.execute "CREATE TABLE `bar_baz` (`foo` varchar(255))"
@subscriber.logged.clear
@connection.send(:rename_column_for_alter, "bar_baz", "foo", "foo2")
assert_equal "SCHEMA", @subscriber.logged[0][1]
if @connection.send(:supports_rename_column?)
assert_empty @subscriber.logged
else
assert_equal "SCHEMA", @subscriber.logged[0][1]
end
ensure
@connection.execute "DROP TABLE `bar_baz`"
end
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册