aboutsummaryrefslogtreecommitdiffstats
path: root/activerecord/lib/active_record/core.rb
diff options
context:
space:
mode:
authorSean Griffin <sean@thoughtbot.com>2014-12-26 13:53:56 -0700
committerSean Griffin <sean@thoughtbot.com>2014-12-26 13:53:56 -0700
commit1d6bb77636aeec734079f63e1c14429b34e79ed9 (patch)
tree6e0f0930c1947d5f1d9ff1e95e12ca5992c25ff8 /activerecord/lib/active_record/core.rb
parented1a775da3921797fc74d69bb392b2cc0ad57ef1 (diff)
downloadrails-1d6bb77636aeec734079f63e1c14429b34e79ed9.tar.gz
rails-1d6bb77636aeec734079f63e1c14429b34e79ed9.tar.bz2
rails-1d6bb77636aeec734079f63e1c14429b34e79ed9.zip
Inject the `PredicateBuilder` into the `Relation` instance
Construction of relations can be a hotspot, we don't want to create one of these in the constructor. This also allows us to do more expensive things in the predicate builder's constructor, since it's created once per AR::Base subclass
Diffstat (limited to 'activerecord/lib/active_record/core.rb')
-rw-r--r--activerecord/lib/active_record/core.rb6
1 files changed, 5 insertions, 1 deletions
diff --git a/activerecord/lib/active_record/core.rb b/activerecord/lib/active_record/core.rb
index 94d1e07069..65ca1f6fd3 100644
--- a/activerecord/lib/active_record/core.rb
+++ b/activerecord/lib/active_record/core.rb
@@ -248,10 +248,14 @@ module ActiveRecord
end
end
+ def predicate_builder # :nodoc:
+ @predicate_builder ||= PredicateBuilder.new(self, arel_table)
+ end
+
private
def relation #:nodoc:
- relation = Relation.create(self, arel_table)
+ relation = Relation.create(self, arel_table, predicate_builder)
if finder_needs_type_condition?
relation.where(type_condition).create_with(inheritance_column.to_sym => sti_name)