diff options
3 files changed, 35 insertions, 29 deletions
diff --git a/activerecord/lib/active_record/base.rb b/activerecord/lib/active_record/base.rb index 4e743ec826..8750e226b9 100644 --- a/activerecord/lib/active_record/base.rb +++ b/activerecord/lib/active_record/base.rb @@ -747,7 +747,7 @@ module ActiveRecord #:nodoc:          undefine_attribute_methods          reset_column_cache          @column_names = @content_columns = @dynamic_methods_hash = @inheritance_column = nil -        @relation = nil +        @arel_engine = @relation = nil        end        def reset_column_cache # :nodoc: @@ -856,7 +856,13 @@ module ActiveRecord #:nodoc:        end        def arel_engine -        self +        @arel_engine ||= begin +          if self == ActiveRecord::Base +            ActiveRecord::Base +          else +            connection_handler.connection_pools[name] ? self : superclass.arel_engine +          end +        end        end        # Returns a scope for this class without taking into account the default_scope. diff --git a/activerecord/lib/active_record/connection_adapters/abstract/connection_specification.rb b/activerecord/lib/active_record/connection_adapters/abstract/connection_specification.rb index 5a6d13e64b..3716937689 100644 --- a/activerecord/lib/active_record/connection_adapters/abstract/connection_specification.rb +++ b/activerecord/lib/active_record/connection_adapters/abstract/connection_specification.rb @@ -50,34 +50,34 @@ module ActiveRecord      # may be returned on an error.      def self.establish_connection(spec = nil)        case spec -      when nil -        raise AdapterNotSpecified unless defined?(Rails.env) -        establish_connection(Rails.env) -      when ConnectionSpecification -        self.connection_handler.establish_connection(name, spec) -      when Symbol, String -        if configuration = configurations[spec.to_s] -          establish_connection(configuration) +        when nil +          raise AdapterNotSpecified unless defined?(Rails.env) +          establish_connection(Rails.env) +        when ConnectionSpecification +          self.connection_handler.establish_connection(name, spec) +        when Symbol, String +          if configuration = configurations[spec.to_s] +            establish_connection(configuration) +          else +            raise AdapterNotSpecified, "#{spec} database is not configured" +          end          else -          raise AdapterNotSpecified, "#{spec} database is not configured" -        end -      else -        spec = spec.symbolize_keys -        unless spec.key?(:adapter) then raise AdapterNotSpecified, "database configuration does not specify adapter" end +          spec = spec.symbolize_keys +          unless spec.key?(:adapter) then raise AdapterNotSpecified, "database configuration does not specify adapter" end -        begin -          require "active_record/connection_adapters/#{spec[:adapter]}_adapter" -        rescue LoadError => e -          raise "Please install the #{spec[:adapter]} adapter: `gem install activerecord-#{spec[:adapter]}-adapter` (#{e})" -        end +          begin +            require "active_record/connection_adapters/#{spec[:adapter]}_adapter" +          rescue LoadError => e +            raise "Please install the #{spec[:adapter]} adapter: `gem install activerecord-#{spec[:adapter]}-adapter` (#{e})" +          end -        adapter_method = "#{spec[:adapter]}_connection" -        unless respond_to?(adapter_method) -          raise AdapterNotFound, "database configuration specifies nonexistent #{spec[:adapter]} adapter" -        end +          adapter_method = "#{spec[:adapter]}_connection" +          unless respond_to?(adapter_method) +            raise AdapterNotFound, "database configuration specifies nonexistent #{spec[:adapter]} adapter" +          end -        remove_connection -        establish_connection(ConnectionSpecification.new(spec, adapter_method)) +          remove_connection +          establish_connection(ConnectionSpecification.new(spec, adapter_method))        end      end diff --git a/activerecord/test/cases/multiple_db_test.rb b/activerecord/test/cases/multiple_db_test.rb index 3daf81c828..bd51388e05 100644 --- a/activerecord/test/cases/multiple_db_test.rb +++ b/activerecord/test/cases/multiple_db_test.rb @@ -84,8 +84,8 @@ class MultipleDbTest < ActiveRecord::TestCase      assert_equal "Ruby Developer", Entrant.find(1).name    end -  def test_connections -    assert_not_equal Entrant.connection, Course.connection -    assert_equal Entrant.connection, Bird.connection +  def test_arel_table_engines +    assert_not_equal Entrant.arel_engine, Course.arel_engine +    assert_equal Entrant.arel_engine, Bird.arel_engine    end  end  | 
