aboutsummaryrefslogtreecommitdiffstats
path: root/activerecord/lib/active_record/associations
diff options
context:
space:
mode:
authorAaron Patterson <aaron.patterson@gmail.com>2014-04-22 11:28:21 -0500
committerAaron Patterson <aaron.patterson@gmail.com>2014-04-22 11:28:21 -0500
commit86d6f05e695c545b7e744c958c8d740d0cdf5486 (patch)
treea0ef527e1077147e5c29ea4c821bc8fee65676de /activerecord/lib/active_record/associations
parentbdd64912ac80818d338c2c7fea224b0b243ac5d4 (diff)
downloadrails-86d6f05e695c545b7e744c958c8d740d0cdf5486.tar.gz
rails-86d6f05e695c545b7e744c958c8d740d0cdf5486.tar.bz2
rails-86d6f05e695c545b7e744c958c8d740d0cdf5486.zip
use statement cache for belongs_to relations
Diffstat (limited to 'activerecord/lib/active_record/associations')
-rw-r--r--activerecord/lib/active_record/associations/collection_association.rb2
-rw-r--r--activerecord/lib/active_record/associations/singular_association.rb13
2 files changed, 13 insertions, 2 deletions
diff --git a/activerecord/lib/active_record/associations/collection_association.rb b/activerecord/lib/active_record/associations/collection_association.rb
index b623f1375d..3a0a5165b6 100644
--- a/activerecord/lib/active_record/associations/collection_association.rb
+++ b/activerecord/lib/active_record/associations/collection_association.rb
@@ -416,7 +416,7 @@ module ActiveRecord
return scope.to_a if reflection.scope_chain.any?(&:any?)
conn = klass.connection
- sc = reflection.association_scope_cache(conn) do
+ sc = reflection.association_scope_cache(conn, owner) do
StatementCache.create(conn) { |params|
as = AssociationScope.create { params.bind }
target_scope.merge as.scope(self, conn)
diff --git a/activerecord/lib/active_record/associations/singular_association.rb b/activerecord/lib/active_record/associations/singular_association.rb
index ba28e91633..f2e3a4e40f 100644
--- a/activerecord/lib/active_record/associations/singular_association.rb
+++ b/activerecord/lib/active_record/associations/singular_association.rb
@@ -39,7 +39,18 @@ module ActiveRecord
end
def get_records
- scope.limit(1).to_a
+ return scope.limit(1).to_a if reflection.scope_chain.any?(&:any?)
+
+ conn = klass.connection
+ sc = reflection.association_scope_cache(conn, owner) do
+ StatementCache.create(conn) { |params|
+ as = AssociationScope.create { params.bind }
+ target_scope.merge(as.scope(self, conn)).limit(1)
+ }
+ end
+
+ binds = AssociationScope.get_bind_values(owner, reflection.chain)
+ sc.execute binds, klass, klass.connection
end
def find_target