diff options
author | Sean Griffin <sean@thoughtbot.com> | 2015-01-27 09:41:25 -0700 |
---|---|---|
committer | Sean Griffin <sean@thoughtbot.com> | 2015-01-27 09:41:25 -0700 |
commit | a5fcdae0a04d97dbd8fd05af6f352d3e09b2815f (patch) | |
tree | d4ecbd88d02dfe3215ebd06cfec24775652b5c63 /activerecord/lib | |
parent | 16ce2eecd3eb23034555bb37b29c12985243d908 (diff) | |
download | rails-a5fcdae0a04d97dbd8fd05af6f352d3e09b2815f.tar.gz rails-a5fcdae0a04d97dbd8fd05af6f352d3e09b2815f.tar.bz2 rails-a5fcdae0a04d97dbd8fd05af6f352d3e09b2815f.zip |
Move where grouping into `WhereClause`
Diffstat (limited to 'activerecord/lib')
-rw-r--r-- | activerecord/lib/active_record/relation/query_methods.rb | 12 | ||||
-rw-r--r-- | activerecord/lib/active_record/relation/where_clause.rb | 25 |
2 files changed, 26 insertions, 11 deletions
diff --git a/activerecord/lib/active_record/relation/query_methods.rb b/activerecord/lib/active_record/relation/query_methods.rb index 5df1269890..c8b74490c4 100644 --- a/activerecord/lib/active_record/relation/query_methods.rb +++ b/activerecord/lib/active_record/relation/query_methods.rb @@ -852,7 +852,7 @@ module ActiveRecord build_joins(arel, joins_values.flatten) unless joins_values.empty? - collapse_wheres(arel, (where_clause.predicates - [''])) #TODO: Add uniq with real value comparison / ignore uniqs that have binds + arel.where(where_clause.ast) unless where_clause.empty? arel.having(*having_clause.predicates.uniq.reject(&:blank?)) if having_clause.any? @@ -911,16 +911,6 @@ module ActiveRecord end end - def collapse_wheres(arel, wheres) - predicates = wheres.map do |where| - next where if ::Arel::Nodes::Equality === where - where = Arel.sql(where) if String === where - Arel::Nodes::Grouping.new(where) - end - - arel.where(Arel::Nodes::And.new(predicates)) if predicates.present? - end - def association_for_table(table_name) table_name = table_name.to_s @klass._reflect_on_association(table_name) || diff --git a/activerecord/lib/active_record/relation/where_clause.rb b/activerecord/lib/active_record/relation/where_clause.rb index 8b9ba3e633..6c62332609 100644 --- a/activerecord/lib/active_record/relation/where_clause.rb +++ b/activerecord/lib/active_record/relation/where_clause.rb @@ -53,6 +53,10 @@ module ActiveRecord }.to_h end + def ast + Arel::Nodes::And.new(predicates_with_wrapped_sql_literals) + end + def ==(other) other.is_a?(WhereClause) && predicates == other.predicates && @@ -128,6 +132,27 @@ module ActiveRecord columns.include?(column.name) end end + + def predicates_with_wrapped_sql_literals + non_empty_predicates.map do |node| + if Arel::Nodes::Equality === node + node + else + wrap_sql_literal(node) + end + end + end + + def non_empty_predicates + predicates - [''] + end + + def wrap_sql_literal(node) + if ::String === node + node = Arel.sql(node) + end + Arel::Nodes::Grouping.new(node) + end end end end |