diff options
author | Sean Griffin <sean@thoughtbot.com> | 2015-01-26 16:36:14 -0700 |
---|---|---|
committer | Sean Griffin <sean@thoughtbot.com> | 2015-01-26 16:36:14 -0700 |
commit | bdc5141652770fd227455681cde1f9899f55b0b9 (patch) | |
tree | cace53ff2962478db07e47a8e6443523815750be /activerecord/lib/active_record/relation/query_methods.rb | |
parent | 8436e2c2bd91c1a57fb1273218a5428cc2c6b45a (diff) | |
download | rails-bdc5141652770fd227455681cde1f9899f55b0b9.tar.gz rails-bdc5141652770fd227455681cde1f9899f55b0b9.tar.bz2 rails-bdc5141652770fd227455681cde1f9899f55b0b9.zip |
Move the `from` bind logic to a `FromClause` class
Contrary to my previous commit message, it wasn't overkill, and led to
much cleaner code.
[Sean Griffin & anthonynavarre]
Diffstat (limited to 'activerecord/lib/active_record/relation/query_methods.rb')
-rw-r--r-- | activerecord/lib/active_record/relation/query_methods.rb | 25 |
1 files changed, 13 insertions, 12 deletions
diff --git a/activerecord/lib/active_record/relation/query_methods.rb b/activerecord/lib/active_record/relation/query_methods.rb index 3e33eb8b06..6d300372cb 100644 --- a/activerecord/lib/active_record/relation/query_methods.rb +++ b/activerecord/lib/active_record/relation/query_methods.rb @@ -1,8 +1,9 @@ -require 'active_support/core_ext/array/wrap' -require 'active_support/core_ext/string/filters' -require 'active_model/forbidden_attributes_protection' +require "active_record/relation/from_clause" require "active_record/relation/where_clause" require "active_record/relation/where_clause_factory" +require 'active_model/forbidden_attributes_protection' +require 'active_support/core_ext/array/wrap' +require 'active_support/core_ext/string/filters' module ActiveRecord module QueryMethods @@ -93,7 +94,7 @@ module ActiveRecord end def bind_values - from_bind_values + where_clause.binds + having_clause.binds + from_clause.binds + where_clause.binds + having_clause.binds end def create_with_value # :nodoc: @@ -740,12 +741,7 @@ module ActiveRecord end def from!(value, subquery_name = nil) # :nodoc: - self.from_value = [value, subquery_name] - if value.is_a? Relation - self.from_bind_values = value.arel.bind_values + value.bind_values - else - self.from_bind_values = [] - end + self.from_clause = Relation::FromClause.new(value, subquery_name) self end @@ -870,7 +866,7 @@ module ActiveRecord build_select(arel, select_values.uniq) arel.distinct(distinct_value) - arel.from(build_from) if from_value + arel.from(build_from) unless from_clause.empty? arel.lock(lock_value) if lock_value arel @@ -932,7 +928,8 @@ module ActiveRecord end def build_from - opts, name = from_value + opts = from_clause.value + name = from_clause.name case opts when Relation name ||= 'subquery' @@ -1097,5 +1094,9 @@ module ActiveRecord @where_clause_factory ||= Relation::WhereClauseFactory.new(klass, predicate_builder) end alias having_clause_factory where_clause_factory + + def new_from_clause + Relation::FromClause.empty + end end end |