Skip to content

Commit 6e3d2a7

Browse files
committed
Revert "Performance: freeze cached rows instead of duping"
This reverts commit cd8e653.
1 parent a5eb297 commit 6e3d2a7

File tree

2 files changed

+14
-5
lines changed

2 files changed

+14
-5
lines changed

activerecord/lib/active_record/base.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -612,7 +612,7 @@ def all(*args)
612612
# Post.find_by_sql ["SELECT title FROM posts WHERE author = ? AND created > ?", author_id, start_date]
613613
# > [#<Post:0x36bff9c @attributes={"first_name"=>"The Cheap Man Buys Twice"}>, ...]
614614
def find_by_sql(sql)
615-
connection.select_all(sanitize_sql(sql), "#{name} Load").map { |record| instantiate(record) }
615+
connection.select_all(sanitize_sql(sql), "#{name} Load").collect! { |record| instantiate(record) }
616616
end
617617

618618
# Checks whether a record exists in the database that matches conditions given. These conditions

activerecord/lib/active_record/connection_adapters/abstract/query_cache.rb

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -72,12 +72,21 @@ def columns_with_query_cache(*args)
7272

7373
private
7474
def cache_sql(sql)
75-
if @query_cache.has_key?(sql)
76-
log_info(sql, "CACHE", 0.0)
77-
@query_cache[sql]
75+
result =
76+
if @query_cache.has_key?(sql)
77+
log_info(sql, "CACHE", 0.0)
78+
@query_cache[sql]
79+
else
80+
@query_cache[sql] = yield
81+
end
82+
83+
if Array === result
84+
result.collect { |row| row.dup }
7885
else
79-
@query_cache[sql] = yield.freeze
86+
result.duplicable? ? result.dup : result
8087
end
88+
rescue TypeError
89+
result
8190
end
8291
end
8392
end

0 commit comments

Comments
 (0)