mirror of
https://github.com/rails/rails.git
synced 2022-11-09 12:12:34 -05:00
Handle specified schemas when removing a Postgres index
This commit is contained in:
parent
cd53b05be8
commit
cda0c1f6a7
2 changed files with 30 additions and 3 deletions
|
@ -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
|
||||
|
|
|
@ -334,6 +334,20 @@ class SchemaTest < ActiveRecord::PostgreSQLTestCase
|
|||
end
|
||||
end
|
||||
|
||||
def test_remove_index_when_schema_specified
|
||||
@connection.execute "CREATE INDEX \"things_Index\" ON #{SCHEMA_NAME}.things (name)"
|
||||
assert_nothing_raised { @connection.remove_index "things", name: "#{SCHEMA_NAME}.things_Index" }
|
||||
|
||||
@connection.execute "CREATE INDEX \"things_Index\" ON #{SCHEMA_NAME}.things (name)"
|
||||
assert_nothing_raised { @connection.remove_index "#{SCHEMA_NAME}.things", name: "things_Index" }
|
||||
|
||||
@connection.execute "CREATE INDEX \"things_Index\" ON #{SCHEMA_NAME}.things (name)"
|
||||
assert_nothing_raised { @connection.remove_index "#{SCHEMA_NAME}.things", name: "#{SCHEMA_NAME}.things_Index" }
|
||||
|
||||
@connection.execute "CREATE INDEX \"things_Index\" ON #{SCHEMA_NAME}.things (name)"
|
||||
assert_raises(ArgumentError) { @connection.remove_index "#{SCHEMA2_NAME}.things", name: "#{SCHEMA_NAME}.things_Index" }
|
||||
end
|
||||
|
||||
def test_primary_key_with_schema_specified
|
||||
[
|
||||
%("#{SCHEMA_NAME}"."#{PK_TABLE_NAME}"),
|
||||
|
|
Loading…
Reference in a new issue