From a1bc9d90472c67bac832c049be3d203686acef51 Mon Sep 17 00:00:00 2001 From: Michael Smith Date: Wed, 13 Nov 2024 14:46:07 +1300 Subject: [PATCH] Fix rename_table for compatibility migrations --- .../oracle_enhanced/schema_statements.rb | 4 +-- .../oracle_enhanced/compatibility_spec.rb | 36 +++++++++++++++++++ 2 files changed, 38 insertions(+), 2 deletions(-) create mode 100644 spec/active_record/connection_adapters/oracle_enhanced/compatibility_spec.rb diff --git a/lib/active_record/connection_adapters/oracle_enhanced/schema_statements.rb b/lib/active_record/connection_adapters/oracle_enhanced/schema_statements.rb index 6b20e9210..2481cfa5f 100644 --- a/lib/active_record/connection_adapters/oracle_enhanced/schema_statements.rb +++ b/lib/active_record/connection_adapters/oracle_enhanced/schema_statements.rb @@ -252,7 +252,7 @@ def primary_key(*args) rebuild_primary_key_index_to_default_tablespace(table_name, options) end - def rename_table(table_name, new_name) # :nodoc: + def rename_table(table_name, new_name, **options) # :nodoc: if new_name.to_s.length > DatabaseLimits::IDENTIFIER_MAX_LENGTH raise ArgumentError, "New table name '#{new_name}' is too long; the limit is #{DatabaseLimits::IDENTIFIER_MAX_LENGTH} characters" end @@ -261,7 +261,7 @@ def rename_table(table_name, new_name) # :nodoc: execute "RENAME #{quote_table_name(table_name)} TO #{quote_table_name(new_name)}" execute "RENAME #{quote_table_name("#{table_name}_seq")} TO #{default_sequence_name(new_name)}" rescue nil - rename_table_indexes(table_name, new_name) + rename_table_indexes(table_name, new_name, **options) end def drop_table(table_name, **options) # :nodoc: diff --git a/spec/active_record/connection_adapters/oracle_enhanced/compatibility_spec.rb b/spec/active_record/connection_adapters/oracle_enhanced/compatibility_spec.rb new file mode 100644 index 000000000..f2916fe9d --- /dev/null +++ b/spec/active_record/connection_adapters/oracle_enhanced/compatibility_spec.rb @@ -0,0 +1,36 @@ +# frozen_string_literal: true + +describe "compatibility migrations" do + include SchemaSpecHelper + + before(:all) do + ActiveRecord::Base.establish_connection(CONNECTION_PARAMS) + @conn = ActiveRecord::Base.connection + schema_define do + create_table :test_employees, force: true + end + end + + after(:all) do + schema_define do + drop_table :test_employees, if_exists: true + drop_table :new_test_employees, if_exists: true + end + end + + it "should rename table on 7_0 and below" do + migration = Class.new(ActiveRecord::Migration[7.0]) { + def change + rename_table :test_employees, :new_test_employees + end + }.new + + migration.migrate(:up) + expect(@conn.table_exists?(:new_test_employees)).to be_truthy + expect(@conn.table_exists?(:test_employees)).not_to be_truthy + + migration.migrate(:down) + expect(@conn.table_exists?(:new_test_employees)).not_to be_truthy + expect(@conn.table_exists?(:test_employees)).to be_truthy + end +end