1
0
Fork 0
mirror of https://github.com/rails/rails.git synced 2022-11-09 12:12:34 -05:00

decouple the factory method from the constructing model

The factory method only requires the constructing model to get the
connection object. Since the model is available when calling the factory
method, we can just pass the appropriate connection in.
This commit is contained in:
Aaron Patterson 2014-04-10 17:24:10 -07:00
parent 249fd686fb
commit dbc8c0ee36
3 changed files with 8 additions and 10 deletions

View file

@ -135,7 +135,7 @@ module ActiveRecord
key = primary_key
s = find_by_statement_cache[key] || find_by_statement_cache.synchronize {
find_by_statement_cache[key] ||= StatementCache.create { |params|
find_by_statement_cache[key] ||= StatementCache.create(connection) { |params|
where(key => params[key]).limit(1)
}
}
@ -159,7 +159,7 @@ module ActiveRecord
klass = self
s = find_by_statement_cache[key] || find_by_statement_cache.synchronize {
find_by_statement_cache[key] ||= StatementCache.create { |params|
find_by_statement_cache[key] ||= StatementCache.create(connection) { |params|
wheres = key.each_with_object({}) { |param,o|
o[param] = params[param]
}

View file

@ -76,11 +76,9 @@ module ActiveRecord
attr_reader :bind_map, :query_builder
def self.create(block = Proc.new)
def self.create(connection, block = Proc.new)
relation = block.call Params.new
bind_map = BindMap.new relation.bind_values
klass = relation.klass
connection = klass.connection
query_builder = connection.cacheable_query relation.arel
new query_builder, bind_map
end

View file

@ -15,7 +15,7 @@ module ActiveRecord
Book.create(name: "my book")
Book.create(name: "my other book")
cache = StatementCache.create do |params|
cache = StatementCache.create(Book.connection) do |params|
Book.where(:name => params[:name])
end
@ -30,7 +30,7 @@ module ActiveRecord
b1 = Book.create(name: "my book")
b2 = Book.create(name: "my other book")
cache = StatementCache.create do |params|
cache = StatementCache.create(Book.connection) do |params|
Book.where(id: params[:id])
end
@ -53,7 +53,7 @@ module ActiveRecord
#End
def test_statement_cache_with_simple_statement
cache = ActiveRecord::StatementCache.create do |params|
cache = ActiveRecord::StatementCache.create(Book.connection) do |params|
Book.where(name: "my book").where("author_id > 3")
end
@ -64,7 +64,7 @@ module ActiveRecord
end
def test_statement_cache_with_complex_statement
cache = ActiveRecord::StatementCache.create do |params|
cache = ActiveRecord::StatementCache.create(Book.connection) do |params|
Liquid.joins(:molecules => :electrons).where('molecules.name' => 'dioxane', 'electrons.name' => 'lepton')
end
@ -77,7 +77,7 @@ module ActiveRecord
end
def test_statement_cache_values_differ
cache = ActiveRecord::StatementCache.create do |params|
cache = ActiveRecord::StatementCache.create(Book.connection) do |params|
Book.where(name: "my book")
end