aboutsummaryrefslogtreecommitdiffstats
path: root/activerecord/lib
diff options
context:
space:
mode:
authorSantiago Pastorino <santiago@wyeworks.com>2012-09-20 12:59:31 -0300
committerAaron Patterson <aaron.patterson@gmail.com>2013-03-03 08:07:19 -0800
commitd2b9862b247693af16ad00e56d4510ef460bcea7 (patch)
treee3fb33b65b19cdf69490936030abc7140e1fec7f /activerecord/lib
parent2e2f8c07d0ee9b209c35e41f69a44c50c501344a (diff)
downloadrails-d2b9862b247693af16ad00e56d4510ef460bcea7.tar.gz
rails-d2b9862b247693af16ad00e56d4510ef460bcea7.tar.bz2
rails-d2b9862b247693af16ad00e56d4510ef460bcea7.zip
Freeze columns only once per Result
Conflicts: activerecord/lib/active_record/result.rb
Diffstat (limited to 'activerecord/lib')
-rw-r--r--activerecord/lib/active_record/result.rb12
1 files changed, 9 insertions, 3 deletions
diff --git a/activerecord/lib/active_record/result.rb b/activerecord/lib/active_record/result.rb
index 9ceab2eabc..b8d2cd2866 100644
--- a/activerecord/lib/active_record/result.rb
+++ b/activerecord/lib/active_record/result.rb
@@ -26,9 +26,15 @@ module ActiveRecord
private
def hash_rows
- @hash_rows ||= @rows.map { |row|
- Hash[@columns.zip(row)]
- }
+ @hash_rows ||=
+ begin
+ # We freeze the strings to prevent them getting duped when
+ # used as keys in ActiveRecord::Model's @attributes hash
+ columns = @columns.map { |c| c.dup.freeze }
+ @rows.map { |row|
+ Hash[columns.zip(row)]
+ }
+ end
end
end
end