aboutsummaryrefslogtreecommitdiffstats
path: root/activerecord/lib
diff options
context:
space:
mode:
authorPaul Nikitochkin <paul.nikitochkin@gmail.com>2013-08-24 19:12:05 +0300
committerPaul Nikitochkin <paul.nikitochkin@gmail.com>2013-09-13 16:37:10 +0300
commitfbbb6c87fd5e8fcd913c0dbf518024edd7538072 (patch)
tree0663c678b8a52e45de6eb2e86d8ead0d65fb543f /activerecord/lib
parent97a19c6b4b71d1e12d62d880ec8c8eed357b3d3c (diff)
downloadrails-fbbb6c87fd5e8fcd913c0dbf518024edd7538072.tar.gz
rails-fbbb6c87fd5e8fcd913c0dbf518024edd7538072.tar.bz2
rails-fbbb6c87fd5e8fcd913c0dbf518024edd7538072.zip
Collapse where constraints to one where constraint
In order to remove duplication with joining arel where constraints with `AND`, all constraints on `build_arel` are collapsed into one head node: `Arel::Nodes::And` Closes: #11963
Diffstat (limited to 'activerecord/lib')
-rw-r--r--activerecord/lib/active_record/relation/query_methods.rb11
1 files changed, 5 insertions, 6 deletions
diff --git a/activerecord/lib/active_record/relation/query_methods.rb b/activerecord/lib/active_record/relation/query_methods.rb
index 1c6ea94c0b..5d0df32582 100644
--- a/activerecord/lib/active_record/relation/query_methods.rb
+++ b/activerecord/lib/active_record/relation/query_methods.rb
@@ -882,14 +882,13 @@ module ActiveRecord
end
def collapse_wheres(arel, wheres)
- equalities = wheres.grep(Arel::Nodes::Equality)
-
- arel.where(Arel::Nodes::And.new(equalities)) unless equalities.empty?
-
- (wheres - equalities).each do |where|
+ predicates = wheres.map do |where|
+ next where if ::Arel::Nodes::Equality === where
where = Arel.sql(where) if String === where
- arel.where(Arel::Nodes::Grouping.new(where))
+ Arel::Nodes::Grouping.new(where)
end
+
+ arel.where(Arel::Nodes::And.new(predicates)) if predicates.present?
end
def build_where(opts, other = [])