aboutsummaryrefslogtreecommitdiffstats
path: root/activerecord/lib/active_record/connection_adapters/abstract/schema_statements.rb
diff options
context:
space:
mode:
authorSeva Orlov <vseorlov@gmail.com>2016-04-11 20:57:19 +0300
committerJeremy Daer <jeremydaer@gmail.com>2016-04-24 14:32:55 -0700
commitc41ef01aec40bfaa9af707551d1e8a1f9f7380d1 (patch)
tree1bb0e0172a8da1110351499cbac01db4f8738973 /activerecord/lib/active_record/connection_adapters/abstract/schema_statements.rb
parent6c6eeda54d0f2c8e689772b50cc5c4419fa82749 (diff)
downloadrails-c41ef01aec40bfaa9af707551d1e8a1f9f7380d1.tar.gz
rails-c41ef01aec40bfaa9af707551d1e8a1f9f7380d1.tar.bz2
rails-c41ef01aec40bfaa9af707551d1e8a1f9f7380d1.zip
remove_index do not fetch indexes if name is specified
There is no need to fetch all table indexes in remove_index if name is specified. If name is wrong, then StatementInvalid will be raised. Signed-off-by: Jeremy Daer <jeremydaer@gmail.com>
Diffstat (limited to 'activerecord/lib/active_record/connection_adapters/abstract/schema_statements.rb')
-rw-r--r--activerecord/lib/active_record/connection_adapters/abstract/schema_statements.rb8
1 files changed, 7 insertions, 1 deletions
diff --git a/activerecord/lib/active_record/connection_adapters/abstract/schema_statements.rb b/activerecord/lib/active_record/connection_adapters/abstract/schema_statements.rb
index d8cc60e924..f65dc4ed5a 100644
--- a/activerecord/lib/active_record/connection_adapters/abstract/schema_statements.rb
+++ b/activerecord/lib/active_record/connection_adapters/abstract/schema_statements.rb
@@ -1185,6 +1185,8 @@ module ActiveRecord
end
def index_name_for_remove(table_name, options = {})
+ return options[:name] if can_remove_index_by_name?(options)
+
# if the adapter doesn't support the indexes call the best we can do
# is return the default index name for the options provided
return index_name(table_name, options) unless respond_to?(:indexes)
@@ -1192,7 +1194,7 @@ module ActiveRecord
checks = []
if options.is_a?(Hash)
- checks << lambda { |i| i.name == options[:name].to_s } if options.has_key?(:name)
+ checks << lambda { |i| i.name == options[:name].to_s } if options.key?(:name)
column_names = Array(options[:column]).map(&:to_s)
else
column_names = Array(options).map(&:to_s)
@@ -1268,6 +1270,10 @@ module ActiveRecord
default_or_changes
end
end
+
+ def can_remove_index_by_name?(options)
+ options.is_a?(Hash) && options.key?(:name) && options.except(:name, :algorithm).empty?
+ end
end
end
end