From fa987cb8ec4cc48018aac4949567823587155765 Mon Sep 17 00:00:00 2001 From: Guillermo Iguaran Date: Fri, 8 Feb 2013 14:22:10 -0500 Subject: [PATCH] Reverting 16f6f25 (Change behaviour with empty array in where clause) --- activerecord/CHANGELOG.md | 5 ----- .../associations/has_many_through_association.rb | 2 +- .../lib/active_record/relation/predicate_builder.rb | 2 -- activerecord/test/cases/finder_test.rb | 9 +++++++++ activerecord/test/cases/relation/where_test.rb | 4 +--- activerecord/test/cases/relations_test.rb | 5 ++--- 6 files changed, 13 insertions(+), 14 deletions(-) diff --git a/activerecord/CHANGELOG.md b/activerecord/CHANGELOG.md index 69394c9f64a89..bd2f0eb0bc866 100644 --- a/activerecord/CHANGELOG.md +++ b/activerecord/CHANGELOG.md @@ -1,10 +1,5 @@ ## Rails 4.0.0 (unreleased) ## -* Raise `ArgumentError` instead of generating `column IN (NULL)` SQL when - empty array is used in where clause value. - - *Roberto Miranda* - * Raise `ArgumentError` instead of generating invalid SQL when empty hash is used in where clause value. diff --git a/activerecord/lib/active_record/associations/has_many_through_association.rb b/activerecord/lib/active_record/associations/has_many_through_association.rb index 2099effbeb294..d1458f30ba256 100644 --- a/activerecord/lib/active_record/associations/has_many_through_association.rb +++ b/activerecord/lib/active_record/associations/has_many_through_association.rb @@ -136,7 +136,7 @@ def delete_records(records, method) records = load_target if records == :all scope = through_association.scope - scope.where! construct_join_attributes(*records) unless records.empty? + scope.where! construct_join_attributes(*records) case method when :destroy diff --git a/activerecord/lib/active_record/relation/predicate_builder.rb b/activerecord/lib/active_record/relation/predicate_builder.rb index db2588e7252fb..24cbae83de9a8 100644 --- a/activerecord/lib/active_record/relation/predicate_builder.rb +++ b/activerecord/lib/active_record/relation/predicate_builder.rb @@ -17,8 +17,6 @@ def self.build_from_hash(klass, attributes, default_table) queries.concat expand(association && association.klass, table, k, v) end end - elsif value.is_a?(Array) && value.empty? - raise ArgumentError, "Condition value in SQL clause can't be an empty array" else column = column.to_s diff --git a/activerecord/test/cases/finder_test.rb b/activerecord/test/cases/finder_test.rb index 683e4fbd97e42..a9fa107749bba 100644 --- a/activerecord/test/cases/finder_test.rb +++ b/activerecord/test/cases/finder_test.rb @@ -808,6 +808,15 @@ def test_find_with_nil_inside_set_passed_for_one_attribute assert_equal [2, 1].sort, client_of.compact.sort end + def test_find_with_nil_inside_set_passed_for_attribute + client_of = Company.all.merge!( + :where => { :client_of => [nil] }, + :order => 'client_of DESC' + ).map { |x| x.client_of } + + assert_equal [], client_of.compact + end + def test_with_limiting_with_custom_select posts = Post.references(:authors).merge( :includes => :author, :select => ' posts.*, authors.id as "author_id"', diff --git a/activerecord/test/cases/relation/where_test.rb b/activerecord/test/cases/relation/where_test.rb index ccbfcc0549b94..8c8f4267a9944 100644 --- a/activerecord/test/cases/relation/where_test.rb +++ b/activerecord/test/cases/relation/where_test.rb @@ -98,9 +98,7 @@ def test_where_with_table_name_and_empty_hash end def test_where_with_table_name_and_empty_array - assert_raises(ArgumentError) do - Post.where(:id => []) - end + assert_equal 0, Post.where(:id => []).count end def test_where_with_empty_hash_and_no_foreign_key diff --git a/activerecord/test/cases/relations_test.rb b/activerecord/test/cases/relations_test.rb index 981aa14e980a6..379c0c0758cf4 100644 --- a/activerecord/test/cases/relations_test.rb +++ b/activerecord/test/cases/relations_test.rb @@ -515,9 +515,8 @@ def test_find_ids end def test_find_in_empty_array - assert_raises(ArgumentError) do - Author.all.where(:id => []) - end + authors = Author.all.where(:id => []) + assert authors.to_a.blank? end def test_where_with_ar_object