diff options
author | Matthew Draper <matthew@trebex.net> | 2015-12-19 02:48:23 +1030 |
---|---|---|
committer | Matthew Draper <matthew@trebex.net> | 2015-12-19 02:48:23 +1030 |
commit | f07211f4f4404415693a3e526f60eb97ac598c22 (patch) | |
tree | 87e1669da482358606c699f3aed61baf27a67b34 /activerecord/lib | |
parent | 905a2a176b0a512af9756df3970428749c4d5f41 (diff) | |
parent | cda0c1f6a7101f17f27773b76c1da52bc524aa27 (diff) | |
download | rails-f07211f4f4404415693a3e526f60eb97ac598c22.tar.gz rails-f07211f4f4404415693a3e526f60eb97ac598c22.tar.bz2 rails-f07211f4f4404415693a3e526f60eb97ac598c22.zip |
Merge pull request #22658 from greysteil/handle-specified-schema-in-index-remove
Handle specified schemas when removing a Postgres index
Diffstat (limited to 'activerecord/lib')
-rw-r--r-- | activerecord/lib/active_record/connection_adapters/postgresql/schema_statements.rb | 19 |
1 files changed, 16 insertions, 3 deletions
diff --git a/activerecord/lib/active_record/connection_adapters/postgresql/schema_statements.rb b/activerecord/lib/active_record/connection_adapters/postgresql/schema_statements.rb index 98a3ce6782..67e727d8ed 100644 --- a/activerecord/lib/active_record/connection_adapters/postgresql/schema_statements.rb +++ b/activerecord/lib/active_record/connection_adapters/postgresql/schema_statements.rb @@ -507,14 +507,27 @@ module ActiveRecord end def remove_index(table_name, options = {}) #:nodoc: - index_name = index_name_for_remove(table_name, options) + table = Utils.extract_schema_qualified_name(table_name.to_s) + + if options.is_a?(Hash) && options.key?(:name) + provided_index = Utils.extract_schema_qualified_name(options[:name].to_s) + + options[:name] = provided_index.identifier + table = PostgreSQL::Name.new(provided_index.schema, table.identifier) unless table.schema.present? + + if provided_index.schema.present? && table.schema != provided_index.schema + raise ArgumentError.new("Index schema '#{provided_index.schema}' does not match table schema '#{table.schema}'") + end + end + + index_to_remove = PostgreSQL::Name.new(table.schema, index_name_for_remove(table.to_s, options)) algorithm = - if Hash === options && options.key?(:algorithm) + if options.is_a?(Hash) && options.key?(:algorithm) index_algorithms.fetch(options[:algorithm]) do raise ArgumentError.new("Algorithm must be one of the following: #{index_algorithms.keys.map(&:inspect).join(', ')}") end end - execute "DROP INDEX #{algorithm} #{quote_table_name(index_name)}" + execute "DROP INDEX #{algorithm} #{quote_table_name(index_to_remove)}" end # Renames an index of a table. Raises error if length of new |