diff options
author | Aaron Patterson <aaron.patterson@gmail.com> | 2011-02-16 15:11:48 -0800 |
---|---|---|
committer | Aaron Patterson <aaron.patterson@gmail.com> | 2011-02-16 15:11:48 -0800 |
commit | 9c023cc4d2949d10fa6cfa013655d86aae8d8019 (patch) | |
tree | 3d1e5b41477ec49813e1d4baf32bdf96969fba8a | |
parent | ceb2f0f2169203d697acb1602348042609b3c076 (diff) | |
download | rails-9c023cc4d2949d10fa6cfa013655d86aae8d8019.tar.gz rails-9c023cc4d2949d10fa6cfa013655d86aae8d8019.tar.bz2 rails-9c023cc4d2949d10fa6cfa013655d86aae8d8019.zip |
explicitly allowing lolqueries
-rw-r--r-- | activerecord/lib/active_record/relation/query_methods.rb | 11 | ||||
-rw-r--r-- | activerecord/test/cases/relations_test.rb | 13 |
2 files changed, 11 insertions, 13 deletions
diff --git a/activerecord/lib/active_record/relation/query_methods.rb b/activerecord/lib/active_record/relation/query_methods.rb index 6a905b8588..f76681e880 100644 --- a/activerecord/lib/active_record/relation/query_methods.rb +++ b/activerecord/lib/active_record/relation/query_methods.rb @@ -209,16 +209,7 @@ module ActiveRecord def collapse_wheres(arel, wheres) equalities = wheres.grep(Arel::Nodes::Equality) - groups = equalities.group_by do |equality| - equality.left - end - - groups.each do |_, eqls| - test = eqls.inject(eqls.shift) do |memo, expr| - memo.or(expr) - end - arel.where(test) - end + arel.where(Arel::Nodes::And.new(equalities)) unless equalities.empty? (wheres - equalities).each do |where| where = Arel.sql(where) if String === where diff --git a/activerecord/test/cases/relations_test.rb b/activerecord/test/cases/relations_test.rb index 1e84f5f92d..4b98cc9daf 100644 --- a/activerecord/test/cases/relations_test.rb +++ b/activerecord/test/cases/relations_test.rb @@ -474,10 +474,17 @@ class RelationTest < ActiveRecord::TestCase relation = relation.where(:name => david.name) relation = relation.where(:name => 'Santiago') relation = relation.where(:id => david.id) - assert_equal [david], relation.all + assert_equal [], relation.all end - def test_find_all_with_multiple_ors + def test_multi_where_ands_queries + relation = Author.unscoped + david = authors(:david) + sql = relation.where(:name => david.name).where(:name => 'Santiago').to_sql + assert_match('AND', sql) + end + + def test_find_all_with_multiple_should_use_and david = authors(:david) relation = [ { :name => david.name }, @@ -486,7 +493,7 @@ class RelationTest < ActiveRecord::TestCase ].inject(Author.unscoped) do |memo, param| memo.where(param) end - assert_equal [david], relation.all + assert_equal [], relation.all end def test_find_all_using_where_with_relation |