Skip to content

Commit b6c1628

Browse files
authored
Merge pull request #2593 from yahonda/backport-2592-to-release81
Backport #2592 to release81: Use default_sequence_name to identify sequence when renaming a table
2 parents 55c2aad + e3c4dfa commit b6c1628

2 files changed

Lines changed: 23 additions & 1 deletion

File tree

lib/active_record/connection_adapters/oracle_enhanced/schema_statements.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -259,7 +259,7 @@ def rename_table(table_name, new_name, **options) # :nodoc:
259259
schema_cache.clear_data_source_cache!(table_name.to_s)
260260
schema_cache.clear_data_source_cache!(new_name.to_s)
261261
execute "RENAME #{quote_table_name(table_name)} TO #{quote_table_name(new_name)}"
262-
execute "RENAME #{quote_table_name("#{table_name}_seq")} TO #{default_sequence_name(new_name)}" rescue nil
262+
execute "RENAME #{default_sequence_name(table_name)} TO #{default_sequence_name(new_name)}" rescue nil
263263

264264
rename_table_indexes(table_name, new_name, **options)
265265
end

spec/active_record/connection_adapters/oracle_enhanced/schema_statements_spec.rb

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -296,13 +296,15 @@ class ::TestEmployee < ActiveRecord::Base; end
296296
end
297297

298298
after(:each) do
299+
long_name = ("a" * (@conn.sequence_name_length - 3)).to_sym
299300
schema_define do
300301
drop_table :test_employees_no_primary_key, if_exists: true
301302
drop_table :test_employees, if_exists: true
302303
drop_table :new_test_employees, if_exists: true
303304
drop_table :test_employees_no_pkey, if_exists: true
304305
drop_table :new_test_employees_no_pkey, if_exists: true
305306
drop_table :aaaaaaaaaaaaaaaaaaaaaaaaaaa, if_exists: true
307+
drop_table long_name, if_exists: true
306308
end
307309
end
308310

@@ -329,6 +331,26 @@ class ::TestEmployee < ActiveRecord::Base; end
329331
@conn.rename_table("test_employees_no_pkey", "new_test_employees_no_pkey")
330332
end.not_to raise_error
331333
end
334+
335+
it "renames the auto-generated sequence when the source table name is long enough to truncate it" do
336+
long_source = "a" * (@conn.sequence_name_length - 3)
337+
schema_define do
338+
create_table long_source.to_sym, force: true do |t|
339+
t.string :first_name
340+
end
341+
end
342+
343+
expected_old_seq = @conn.default_sequence_name(long_source).upcase
344+
expected_new_seq = @conn.default_sequence_name("new_test_employees").upcase
345+
346+
@conn.rename_table(long_source, "new_test_employees")
347+
348+
sequences = @conn.select_values(
349+
"SELECT sequence_name FROM user_sequences WHERE sequence_name IN ('#{expected_old_seq}', '#{expected_new_seq}')"
350+
)
351+
expect(sequences).to include(expected_new_seq)
352+
expect(sequences).not_to include(expected_old_seq)
353+
end
332354
end
333355

334356
describe "add index" do

0 commit comments

Comments
 (0)