mirror of
https://github.com/rails/rails.git
synced 2022-11-09 12:12:34 -05:00
Merge pull request #25507 from bquorning/optimize-for-first-result-and-remove-mysql-select_one
Remove #select_one from Mysql2Adapter
This commit is contained in:
commit
e12e7a8f87
3 changed files with 17 additions and 14 deletions
|
@ -13,19 +13,6 @@ module ActiveRecord
|
|||
result
|
||||
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)
|
||||
@connection.query_options.merge!(as: :hash)
|
||||
select_result(to_sql(arel, binds), name, binds) do |result|
|
||||
@connection.next_result while @connection.more_results?
|
||||
result.first
|
||||
end
|
||||
ensure
|
||||
@connection.query_options.merge!(as: :array)
|
||||
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 = [])
|
||||
|
|
|
@ -75,8 +75,14 @@ module ActiveRecord
|
|||
hash_rows[idx]
|
||||
end
|
||||
|
||||
def first
|
||||
return nil if @rows.empty?
|
||||
Hash[@columns.zip(@rows.first)]
|
||||
end
|
||||
|
||||
def last
|
||||
hash_rows.last
|
||||
return nil if @rows.empty?
|
||||
Hash[@columns.zip(@rows.last)]
|
||||
end
|
||||
|
||||
def cast_values(type_overrides = {}) # :nodoc:
|
||||
|
|
|
@ -22,6 +22,16 @@ module ActiveRecord
|
|||
], result.to_hash
|
||||
end
|
||||
|
||||
test "first returns first row as a hash" do
|
||||
assert_equal(
|
||||
{'col_1' => 'row 1 col 1', 'col_2' => 'row 1 col 2'}, result.first)
|
||||
end
|
||||
|
||||
test "last returns last row as a hash" do
|
||||
assert_equal(
|
||||
{'col_1' => 'row 3 col 1', 'col_2' => 'row 3 col 2'}, result.last)
|
||||
end
|
||||
|
||||
test "each with block returns row hashes" do
|
||||
result.each do |row|
|
||||
assert_equal ['col_1', 'col_2'], row.keys
|
||||
|
|
Loading…
Reference in a new issue