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:
parent
249fd686fb
commit
dbc8c0ee36
3 changed files with 8 additions and 10 deletions
|
@ -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]
|
||||
}
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
Loading…
Reference in a new issue