aboutsummaryrefslogtreecommitdiffstats
path: root/activerecord/lib/active_record/querying.rb
diff options
context:
space:
mode:
authorAaron Patterson <aaron.patterson@gmail.com>2014-09-27 11:00:58 +0400
committerAaron Patterson <aaron.patterson@gmail.com>2014-09-27 11:00:58 +0400
commitc363fff29f060e6a2effe1e4bb2c4dd4cd805d6e (patch)
treeb5823e39d7d4efd9a2144247c787810b32d12c6a /activerecord/lib/active_record/querying.rb
parent512122d9845f84e1a813fbd04ae80dee8ccdeb9e (diff)
downloadrails-c363fff29f060e6a2effe1e4bb2c4dd4cd805d6e.tar.gz
rails-c363fff29f060e6a2effe1e4bb2c4dd4cd805d6e.tar.bz2
rails-c363fff29f060e6a2effe1e4bb2c4dd4cd805d6e.zip
some object allocation reduction for new AR objects
Benchmark: ```ruby require 'objspace' require 'active_record' ActiveRecord::Base.establish_connection adapter: "sqlite3", database: ":memory:" ActiveRecord::Base.connection.instance_eval do create_table(:articles) { |t| t.string :name } end class Article < ActiveRecord::Base; end a = Article.create name: "foo" a = Article.find a.id N = 10 ObjectSpace::AllocationTracer.trace do N.times { Article.find a.id } end ObjectSpace::AllocationTracer.allocated_count_table table.sort_by { |_,x| x }.each do |k,v| p k => (v / N) end ```
Diffstat (limited to 'activerecord/lib/active_record/querying.rb')
-rw-r--r--activerecord/lib/active_record/querying.rb3
1 files changed, 2 insertions, 1 deletions
diff --git a/activerecord/lib/active_record/querying.rb b/activerecord/lib/active_record/querying.rb
index a9ddd9141f..45b6b1c925 100644
--- a/activerecord/lib/active_record/querying.rb
+++ b/activerecord/lib/active_record/querying.rb
@@ -37,7 +37,8 @@ module ActiveRecord
# Post.find_by_sql ["SELECT body FROM comments WHERE author = :user_id OR approved_by = :user_id", { :user_id => user_id }]
def find_by_sql(sql, binds = [])
result_set = connection.select_all(sanitize_sql(sql), "#{name} Load", binds)
- column_types = result_set.column_types.except(*columns_hash.keys)
+ column_types = result_set.column_types.dup
+ columns_hash.each_key { |k| column_types.delete k }
result_set.map { |record| instantiate(record, column_types) }
end