aboutsummaryrefslogtreecommitdiffstats
path: root/activerecord/lib/active_record/relation/query_methods.rb
diff options
context:
space:
mode:
authorSean Griffin <sean@thoughtbot.com>2015-01-26 16:36:14 -0700
committerSean Griffin <sean@thoughtbot.com>2015-01-26 16:36:14 -0700
commitbdc5141652770fd227455681cde1f9899f55b0b9 (patch)
treecace53ff2962478db07e47a8e6443523815750be /activerecord/lib/active_record/relation/query_methods.rb
parent8436e2c2bd91c1a57fb1273218a5428cc2c6b45a (diff)
downloadrails-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.rb25
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