aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAaron Patterson <aaron.patterson@gmail.com>2013-09-03 12:08:04 -0700
committerAaron Patterson <aaron.patterson@gmail.com>2013-09-03 12:08:04 -0700
commitc64a001dcc9eb1b066ca3ce553c5d20988458e8c (patch)
tree23bc47159e5a11e046d873d7c18a720fa9e7b6ba
parent863c488bb05de3b38a81fa37349977adc0db59e3 (diff)
parentba0568e46d890d57cfef2ea86745bdeb879fefa7 (diff)
downloadrails-c64a001dcc9eb1b066ca3ce553c5d20988458e8c.tar.gz
rails-c64a001dcc9eb1b066ca3ce553c5d20988458e8c.tar.bz2
rails-c64a001dcc9eb1b066ca3ce553c5d20988458e8c.zip
Merge pull request #12065 from SamSaffron/result_optimisation
Perf: micro optimised Result column hash_row creation
-rw-r--r--activerecord/lib/active_record/result.rb16
1 files changed, 15 insertions, 1 deletions
diff --git a/activerecord/lib/active_record/result.rb b/activerecord/lib/active_record/result.rb
index 253368ae5b..d0f1cb5b75 100644
--- a/activerecord/lib/active_record/result.rb
+++ b/activerecord/lib/active_record/result.rb
@@ -93,7 +93,21 @@ module ActiveRecord
# used as keys in ActiveRecord::Base's @attributes hash
columns = @columns.map { |c| c.dup.freeze }
@rows.map { |row|
- Hash[columns.zip(row)]
+ # In the past we used Hash[columns.zip(row)]
+ # though elegant, the verbose way is much more efficient
+ # both time and memory wise cause it avoids a big array allocation
+ # this method is called a lot and needs to be micro optimised
+ hash = {}
+
+ index = 0
+ length = columns.length
+
+ while index < length
+ hash[columns[index]] = row[index]
+ index += 1
+ end
+
+ hash
}
end
end