aboutsummaryrefslogtreecommitdiffstats
path: root/activerecord/lib/active_record/connection_adapters/mysql2_adapter.rb
diff options
context:
space:
mode:
authorRyuta Kamizono <kamipo@gmail.com>2015-12-27 23:12:41 +0900
committerRyuta Kamizono <kamipo@gmail.com>2015-12-27 23:12:41 +0900
commitbf79aa4fc14aeb2646331e767038acf0b77e9e7f (patch)
treeea732e021574697e7bf3b6495b0bc85192164d80 /activerecord/lib/active_record/connection_adapters/mysql2_adapter.rb
parentd5363e58135ea279f2a08c1a2d852ae2d11f0d65 (diff)
downloadrails-bf79aa4fc14aeb2646331e767038acf0b77e9e7f.tar.gz
rails-bf79aa4fc14aeb2646331e767038acf0b77e9e7f.tar.bz2
rails-bf79aa4fc14aeb2646331e767038acf0b77e9e7f.zip
Improve `select_one` in `Mysql2Adapter`
Avoid instanciate `ActiveRecord::Result` and calling `ActiveRecord::Result#hash_rows` for the performance.
Diffstat (limited to 'activerecord/lib/active_record/connection_adapters/mysql2_adapter.rb')
-rw-r--r--activerecord/lib/active_record/connection_adapters/mysql2_adapter.rb10
1 files changed, 10 insertions, 0 deletions
diff --git a/activerecord/lib/active_record/connection_adapters/mysql2_adapter.rb b/activerecord/lib/active_record/connection_adapters/mysql2_adapter.rb
index f4686b680c..7fbe2307c7 100644
--- a/activerecord/lib/active_record/connection_adapters/mysql2_adapter.rb
+++ b/activerecord/lib/active_record/connection_adapters/mysql2_adapter.rb
@@ -127,6 +127,16 @@ module ActiveRecord
# execute(sql, name).map { |row| row.first }
# end
+ # Returns a record hash with the column names as keys and column values
+ # as values.
+ def select_one(arel, name = nil, binds = [])
+ arel, binds = binds_from_relation(arel, binds)
+ execute(to_sql(arel, binds), name).each(as: :hash) do |row|
+ @connection.next_result while @connection.more_results?
+ return row
+ end
+ end
+
# Returns an array of arrays containing the field values.
# Order is the same as that returned by +columns+.
def select_rows(sql, name = nil, binds = [])