Ruby on Rails | Screencasts | Download | Documentation | Weblog | Community | Source

Ticket #8718: sqlserver_preserve_autocommit_value_when_getting_indexes.diff

File sqlserver_preserve_autocommit_value_when_getting_indexes.diff, 1.9 kB (added by tomafro, 2 years ago)
  • activerecord/lib/active_record/connection_adapters/sqlserver_adapter.rb

    old new  
    431431      end 
    432432 
    433433      def indexes(table_name, name = nil) 
    434         ActiveRecord::Base.connection.instance_variable_get("@connection")["AutoCommit"] = false 
    435         indexes = []         
    436         execute("EXEC sp_helpindex '#{table_name}'", name) do |handle| 
    437           if handle.column_info.any? 
    438             handle.each do |index|  
    439               unique = index[1] =~ /unique/ 
    440               primary = index[1] =~ /primary key/ 
    441               if !primary 
    442                 indexes << IndexDefinition.new(table_name, index[0], unique, index[2].split(", ").map {|e| e.gsub('(-)','')}) 
     434        # TODO: Does SQL Server 2005 have information_schema.indexes?  If so, use that 
     435        # for 2005 adapter 
     436         
     437        original_autocommit = @connection["AutoCommit"] 
     438        @connection["AutoCommit"] = false if original_autocommit 
     439         
     440        returning(result = []) do 
     441          execute("EXEC sp_helpindex '#{table_name}'", name) do |handle| 
     442            if handle.column_info.any? 
     443              handle.each do |index|  
     444                unique = index[1] =~ /unique/ 
     445                primary = index[1] =~ /primary key/ 
     446                if !primary 
     447                  result << IndexDefinition.new(table_name, index[0], unique, index[2].split(", ").map {|e| e.gsub('(-)','')}) 
     448                end 
    443449              end 
    444450            end 
    445451          end 
    446452        end 
    447         indexes 
    448453      ensure 
    449         ActiveRecord::Base.connection.instance_variable_get("@connection")["AutoCommit"] = true 
     454        @connection["AutoCommit"] = true if original_autocommit 
    450455      end 
    451456             
    452457      def rename_table(name, new_name)