diff --git a/lib/migration/table_dropper.rb b/lib/migration/table_dropper.rb index d710b88ff09..8b7e89a3749 100644 --- a/lib/migration/table_dropper.rb +++ b/lib/migration/table_dropper.rb @@ -18,6 +18,7 @@ module Migration def self.execute_drop(table_name) DB.exec("DROP TABLE IF EXISTS #{table_name}") + BaseDropper.drop_readonly_function(table_name) end end end diff --git a/spec/components/migration/table_dropper_spec.rb b/spec/components/migration/table_dropper_spec.rb index 2f1d2216362..a59da8b9439 100644 --- a/spec/components/migration/table_dropper_spec.rb +++ b/spec/components/migration/table_dropper_spec.rb @@ -14,6 +14,16 @@ describe Migration::TableDropper do SQL end + def function_exists?(function_name, schema_name = 'public') + DB.exec(<<~SQL) > 0 + SELECT 1 + FROM information_schema.routines + WHERE routine_type = 'FUNCTION' AND + routine_name = '#{function_name}' AND + specific_schema = '#{schema_name}' + SQL + end + let(:table_name) { 'table_with_old_name' } before do @@ -56,6 +66,16 @@ describe Migration::TableDropper do expect(table_exists?(table_name)).to eq(false) end + it "should drop the read_only function" do + Migration::TableDropper.execute_drop(table_name) + + schema_name, function_name = Migration::BaseDropper + .readonly_function_name(table_name) + .delete_suffix('()').split('.') + + expect(function_exists?(function_name, schema_name)).to eq(false) + end + it 'should prevent insertions to the table' do begin DB.exec <<~SQL