@@ -557,7 +557,7 @@ def remove_index(table_name, options = {})
557557
558558 def indexes ( table_name , name = nil )
559559 ActiveRecord ::Base . connection . instance_variable_get ( "@connection" ) [ "AutoCommit" ] = false
560- __indexes ( table_name , name )
560+ get_indexes ( table_name , name )
561561 ensure
562562 ActiveRecord ::Base . connection . instance_variable_get ( "@connection" ) [ "AutoCommit" ] = true
563563 end
@@ -802,25 +802,26 @@ def remove_default_constraint(table_name, column_name)
802802 end
803803
804804 def remove_indexes ( table_name , column_name )
805- __indexes ( table_name ) . select { | idx | idx . columns . include? column_name } . each do |idx |
806- remove_index ( table_name , { :name => idx . name } )
805+ get_indexes ( table_name ) . select { | index | index . columns . include? ( column_name . to_s ) } . each do |index |
806+ remove_index ( table_name , { :name => index . name } )
807807 end
808808 end
809809
810- def __indexes ( table_name , name = nil )
811- indexes = [ ]
812- execute ( "EXEC sp_helpindex #{ quote_table_name ( table_name ) } " , name ) do |handle |
813- if handle . column_info . any?
814- handle . each do |index |
815- unique = index [ 1 ] =~ /unique/
816- primary = index [ 1 ] =~ /primary key/
817- if !primary
818- indexes << IndexDefinition . new ( table_name , index [ 0 ] , unique , index [ 2 ] . split ( ", " ) . map { |e | e . gsub ( '(-)' , '' ) } )
819- end
810+ def get_indexes ( table_name , name = nil )
811+ select ( "EXEC sp_helpindex #{ quote_table_name ( table_name ) } " , name ) . inject ( [ ] ) do |indexes , index |
812+ if index [ 'index_description' ] =~ /primary key/
813+ indexes
814+ else
815+ name = index [ 'index_name' ]
816+ unique = index [ 'index_description' ] =~ /unique/
817+ columns = index [ 'index_keys' ] . split ( ',' ) . map do |column |
818+ column . strip!
819+ column . gsub! '(-)' , '' if column . ends_with? ( '(-)' )
820+ column
820821 end
822+ indexes << IndexDefinition . new ( table_name , name , unique , columns )
821823 end
822824 end
823- indexes
824825 end
825826
826827 # IDENTITY INSERTS =========================================#
0 commit comments