<?xml version="1.0" encoding="UTF-8"?>
<commit>
  <added type="array">
    <added>
      <filename>test/cases/mirroring_test.rb</filename>
    </added>
  </added>
  <modified type="array">
    <modified>
      <diff>@@ -15,17 +15,19 @@ module ActiveRecord
       mode        = config[:mode] ? config[:mode].to_s.upcase : 'ADO'
       username    = config[:username] ? config[:username].to_s : 'sa'
       password    = config[:password] ? config[:password].to_s : ''
+      mirror_url = nil
       if mode == &quot;ODBC&quot;
         raise ArgumentError, &quot;Missing DSN. Argument ':dsn' must be set in order for this adapter to work.&quot; unless config.has_key?(:dsn)
         dsn       = config[:dsn]
         driver_url = &quot;DBI:ODBC:#{dsn}&quot;
+        mirror_url = &quot;DBI:ODBC:#{config[:dsn_mirror]}&quot; if config[:dsn_mirror]
       else
         raise ArgumentError, &quot;Missing Database. Argument ':database' must be set in order for this adapter to work.&quot; unless config.has_key?(:database)
         database  = config[:database]
         host      = config[:host] ? config[:host].to_s : 'localhost'
         driver_url = &quot;DBI:ADO:Provider=SQLOLEDB;Data Source=#{host};Initial Catalog=#{database};User ID=#{username};Password=#{password};&quot;
       end
-      ConnectionAdapters::SQLServerAdapter.new(logger, [driver_url, username, password])
+      ConnectionAdapters::SQLServerAdapter.new(logger, [driver_url, username, password], (mirror_url ? [driver_url, mirror_url] : nil) )
     end
     
     protected
@@ -183,8 +185,10 @@ module ActiveRecord
         
       end
       
-      def initialize(logger, connection_options)
+      def initialize(logger, connection_options, mirror_dsns=nil)
+        @logger = logger
         @connection_options = connection_options
+        @mirror_dsns = mirror_dsns
         connect
         super(raw_connection, logger)
         initialize_sqlserver_caches
@@ -743,13 +747,26 @@ module ActiveRecord
       
       # CONNECTION MANAGEMENT ====================================#
       
-      def connect
-        driver_url, username, password = @connection_options
-        @connection = DBI.connect(driver_url, username, password)
+      def connect        
+        if @mirror_dsns
+          raise DBI::DatabaseError.new('Communication link failure') unless connect_mirror(0) || connect_mirror(1)
+        else     
+          driver_url, username, password = @connection_options
+          @connection = DBI.connect(driver_url, username, password)
+        end  
         configure_connection
       rescue
         raise unless @auto_connecting
       end
+
+      def connect_mirror(index = 0)        
+        @connection = DBI.connect(@mirror_dsns[index], @connection_options[1], @connection_options[2])
+        @logger.info &quot;#{adapter_name} connection established to: #{@mirror_dsns[index]}&quot; if @logger        
+        true
+      rescue DBI::DatabaseError =&gt; e
+        @logger.info &quot;#{adapter_name} connecting to: #{@mirror_dsns[index]} FAILED&quot; if @logger        
+        false
+      end
       
       def configure_connection
         raw_connection['AutoCommit'] = true</diff>
      <filename>lib/active_record/connection_adapters/sqlserver_adapter.rb</filename>
    </modified>
  </modified>
  <removed type="array"/>
  <parents type="array">
    <parent>
      <id>515b040b2ca3b0114893106789d9fe235e6edfbb</id>
    </parent>
  </parents>
  <author>
    <name>Igor Anic</name>
    <email>igor.anic@gmail.com</email>
  </author>
  <url>http://github.com/ianic/2000-2005-adapter/commit/20bf73a1c3d632f8d1649c851040887ec20983aa</url>
  <id>20bf73a1c3d632f8d1649c851040887ec20983aa</id>
  <committed-date>2009-05-11T14:06:59-07:00</committed-date>
  <authored-date>2009-05-11T14:06:59-07:00</authored-date>
  <message>Database mirroring support for ODBC connections.
For more information please look at test/cases/mirroring_test.rb</message>
  <tree>8d33534cdff8028c9e067804621945d4990f5924</tree>
  <committer>
    <name>Igor Anic</name>
    <email>igor.anic@gmail.com</email>
  </committer>
</commit>
