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

Fix rename_index removing old index with symbols

Some adapters (sqlite3 and older mysql/mariadb) do not support to rename an index directly.
That causes rename_index cannot find an old index to remove.
This commit is contained in:
ayaya zhao 2020-10-21 14:05:02 +08:00
parent 7cc2b57b8d
commit 879a4c9206
2 changed files with 11 additions and 0 deletions

View file

@ -890,6 +890,8 @@ module ActiveRecord
# rename_index :people, 'index_people_on_last_name', 'index_users_on_last_name'
#
def rename_index(table_name, old_name, new_name)
old_name = old_name.to_s
new_name = new_name.to_s
validate_index_length!(table_name, new_name)
# this is a naive implementation; some DBs may support this more efficiently (PostgreSQL, for instance)

View file

@ -37,6 +37,15 @@ module ActiveRecord
assert connection.index_name_exists?(table_name, "new_idx")
end
def test_rename_index_with_symbol
# keep the names short to make Oracle and similar behave
connection.add_index(table_name, [:foo], name: :old_idx)
connection.rename_index(table_name, :old_idx, :new_idx)
assert_not connection.index_name_exists?(table_name, "old_idx")
assert connection.index_name_exists?(table_name, "new_idx")
end
def test_rename_index_too_long
too_long_index_name = good_index_name + "x"
# keep the names short to make Oracle and similar behave