Base.exists? doesn't rescue exceptions to avoid hiding SQL errors. Closes #10458.

git-svn-id: http://svn-commit.rubyonrails.org/rails/trunk@8375 5ecf4fe2-1ee6-0310-87b1-e25e094e27de
This commit is contained in:
Jeremy Kemper
2007-12-11 01:53:54 +00:00
parent 9aca06fbee
commit f67add4283
3 changed files with 13 additions and 4 deletions

View File

@@ -1,5 +1,7 @@
*SVN*
* Base.exists? doesn't rescue exceptions to avoid hiding SQL errors. #10458 [Michael Klishin]
* Documentation: Active Record exceptions, destroy_all and delete_all. #10444, #10447 [Michael Klishin]

View File

@@ -550,9 +550,8 @@ module ActiveRecord #:nodoc:
# Person.exists?(:name => "David")
# Person.exists?(['name LIKE ?', "%#{query}%"])
def exists?(id_or_conditions)
!find(:first, :select => "#{table_name}.#{primary_key}", :conditions => expand_id_conditions(id_or_conditions)).nil?
rescue ActiveRecord::ActiveRecordError
false
!find(:first, :select => "#{quoted_table_name}.#{primary_key}",
:conditions => expand_id_conditions(id_or_conditions)).nil?
end
# Creates an object (or multiple objects) and saves it to the database, if validations pass.

View File

@@ -28,7 +28,15 @@ class FinderTest < Test::Unit::TestCase
assert Topic.exists?(:author_name => "Mary", :approved => true)
assert Topic.exists?(["parent_id = ?", 1])
assert !Topic.exists?(45)
assert !Topic.exists?("foo")
begin
assert !Topic.exists?("foo")
rescue ActiveRecord::StatementInvalid
# PostgreSQL complains about string comparison with integer field
rescue Exception
flunk
end
assert_raise(NoMethodError) { Topic.exists?([1,2]) }
end