Browse files

Optimize ActiveRecord::Base#exists? to use #select_all instead of #fi…

…nd. Closes #10605 [jamesh, fcheung, protocool]

git-svn-id: http://svn-commit.rubyonrails.org/rails/trunk@8531 5ecf4fe2-1ee6-0310-87b1-e25e094e27de
  • Loading branch information...
1 parent 744b1d7 commit 0ad24df6ed389c1d57970c6e7650c5b1b7ae7676 @technoweenie technoweenie committed Jan 2, 2008
Showing with 10 additions and 2 deletions.
  1. +2 −0 activerecord/CHANGELOG
  2. +8 −2 activerecord/lib/active_record/base.rb
View
2 activerecord/CHANGELOG
@@ -1,5 +1,7 @@
*SVN*
+* Optimize ActiveRecord::Base#exists? to use #select_all instead of #find. Closes #10605 [jamesh, fcheung, protocool]
+
* Don't unnecessarily load has_many associations in after_update callbacks. Closes #6822 [stopdropandrew, canadaduane]
* Eager belongs_to :include infers the foreign key from the association name rather than the class name. #10517 [Jonathan Viney]
View
10 activerecord/lib/active_record/base.rb
@@ -548,8 +548,14 @@ def find_by_sql(sql)
# Person.exists?(:name => "David")
# Person.exists?(['name LIKE ?', "%#{query}%"])
def exists?(id_or_conditions)
- !find(:first, :select => "#{quoted_table_name}.#{primary_key}",
- :conditions => expand_id_conditions(id_or_conditions)).nil?
+ connection.select_all(
+ construct_finder_sql(
+ :select => "#{quoted_table_name}.#{primary_key}",
+ :conditions => expand_id_conditions(id_or_conditions),
+ :limit => 1
+ ),
+ "#{name} Exists"
+ ).size > 0
end
# Creates an object (or multiple objects) and saves it to the database, if validations pass.

0 comments on commit 0ad24df

Please sign in to comment.