1
0
Fork 0
mirror of https://github.com/rails/rails.git synced 2022-11-09 12:12:34 -05:00

Change exists? so that it doesn't instantiate records [#6127 state:resolved]

This commit is contained in:
Andrew White 2011-03-29 12:51:58 +01:00
parent 84a4ef63a4
commit b155fdadf3
2 changed files with 15 additions and 4 deletions

View file

@ -183,7 +183,9 @@ module ActiveRecord
def exists?(id = nil)
id = id.id if ActiveRecord::Base === id
relation = select("1").limit(1)
join_dependency = construct_join_dependency_for_association_find
relation = construct_relation_for_association_find(join_dependency)
relation = relation.except(:select).select("1").limit(1)
case id
when Array, Hash
@ -192,14 +194,13 @@ module ActiveRecord
relation = relation.where(table[primary_key].eq(id)) if id
end
relation.first ? true : false
connection.select_value(relation.to_sql) ? true : false
end
protected
def find_with_associations
including = (@eager_load_values + @includes_values).uniq
join_dependency = ActiveRecord::Associations::JoinDependency.new(@klass, including, [])
join_dependency = construct_join_dependency_for_association_find
relation = construct_relation_for_association_find(join_dependency)
rows = connection.select_all(relation.to_sql, 'SQL', relation.bind_values)
join_dependency.instantiate(rows)
@ -207,6 +208,11 @@ module ActiveRecord
[]
end
def construct_join_dependency_for_association_find
including = (@eager_load_values + @includes_values).uniq
ActiveRecord::Associations::JoinDependency.new(@klass, including, [])
end
def construct_relation_for_association_calculations
including = (@eager_load_values + @includes_values).uniq
join_dependency = ActiveRecord::Associations::JoinDependency.new(@klass, including, arel.froms.first)

View file

@ -74,6 +74,11 @@ class FinderTest < ActiveRecord::TestCase
end
end
def test_exists_does_not_instantiate_records
Developer.expects(:instantiate).never
Developer.exists?
end
def test_find_by_array_of_one_id
assert_kind_of(Array, Topic.find([ 1 ]))
assert_equal(1, Topic.find([ 1 ]).length)