1
0
Fork 0
mirror of https://github.com/rails/rails.git synced 2022-11-09 12:12:34 -05:00

Fix select_rows method signature for consistency

Related #22973, #24708.

`select_all`, `select_one`, `select_value`, and `select_values` method
signature is `(arel, name = nil, binds = [])`.
But `select_rows` is `(sql, name = nil, binds = [])`.
This commit is contained in:
Ryuta Kamizono 2016-06-25 18:48:35 +09:00
parent 530e5ff910
commit cb1803591e
3 changed files with 24 additions and 20 deletions

View file

@ -51,8 +51,7 @@ module ActiveRecord
# Returns a single value from a record # Returns a single value from a record
def select_value(arel, name = nil, binds = []) def select_value(arel, name = nil, binds = [])
arel, binds = binds_from_relation arel, binds if result = select_rows(arel, name, binds).first
if result = select_rows(to_sql(arel, binds), name, binds).first
result.first result.first
end end
end end
@ -60,14 +59,13 @@ module ActiveRecord
# Returns an array of the values of the first column in a select: # Returns an array of the values of the first column in a select:
# select_values("SELECT id FROM companies LIMIT 3") => [1,2,3] # select_values("SELECT id FROM companies LIMIT 3") => [1,2,3]
def select_values(arel, name = nil, binds = []) def select_values(arel, name = nil, binds = [])
arel, binds = binds_from_relation arel, binds select_rows(arel, name, binds).map(&:first)
select_rows(to_sql(arel, binds), name, binds).map(&:first)
end end
# Returns an array of arrays containing the field values. # Returns an array of arrays containing the field values.
# Order is the same as that returned by +columns+. # Order is the same as that returned by +columns+.
def select_rows(sql, name = nil, binds = []) def select_rows(arel, name = nil, binds = [])
exec_query(sql, name, binds).rows select_all(arel, name, binds).rows
end end
# Executes the SQL statement in the context of this connection and returns # Executes the SQL statement in the context of this connection and returns

View file

@ -3,7 +3,7 @@ module ActiveRecord
module MySQL module MySQL
module DatabaseStatements module DatabaseStatements
# Returns an ActiveRecord::Result instance. # Returns an ActiveRecord::Result instance.
def select_all(arel, name = nil, binds = [], preparable: nil) def select_all(arel, name = nil, binds = [], preparable: nil) # :nodoc:
result = if ExplainRegistry.collect? && prepared_statements result = if ExplainRegistry.collect? && prepared_statements
unprepared_statement { super } unprepared_statement { super }
else else
@ -15,8 +15,8 @@ module ActiveRecord
# Returns an array of arrays containing the field values. # Returns an array of arrays containing the field values.
# Order is the same as that returned by +columns+. # Order is the same as that returned by +columns+.
def select_rows(sql, name = nil, binds = []) def select_rows(arel, name = nil, binds = []) # :nodoc:
select_result(sql, name, binds) do |result| select_result(arel, name, binds) do |result|
@connection.next_result while @connection.more_results? @connection.next_result while @connection.more_results?
result.to_a result.to_a
end end
@ -58,7 +58,9 @@ module ActiveRecord
@connection.last_id @connection.last_id
end end
def select_result(sql, name = nil, binds = []) def select_result(arel, name, binds)
arel, binds = binds_from_relation(arel, binds)
sql = to_sql(arel, binds)
if without_prepared_statement?(binds) if without_prepared_statement?(binds)
execute_and_free(sql, name) { |result| yield result } execute_and_free(sql, name) { |result| yield result }
else else

View file

@ -7,18 +7,14 @@ module ActiveRecord
PostgreSQL::ExplainPrettyPrinter.new.pp(exec_query(sql, "EXPLAIN", binds)) PostgreSQL::ExplainPrettyPrinter.new.pp(exec_query(sql, "EXPLAIN", binds))
end end
def select_value(arel, name = nil, binds = []) def select_value(arel, name = nil, binds = []) # :nodoc:
arel, binds = binds_from_relation arel, binds select_result(arel, name, binds) do |result|
sql = to_sql(arel, binds)
execute_and_clear(sql, name, binds) do |result|
result.getvalue(0, 0) if result.ntuples > 0 && result.nfields > 0 result.getvalue(0, 0) if result.ntuples > 0 && result.nfields > 0
end end
end end
def select_values(arel, name = nil, binds = []) def select_values(arel, name = nil, binds = []) # :nodoc:
arel, binds = binds_from_relation arel, binds select_result(arel, name, binds) do |result|
sql = to_sql(arel, binds)
execute_and_clear(sql, name, binds) do |result|
if result.nfields > 0 if result.nfields > 0
result.column_values(0) result.column_values(0)
else else
@ -29,8 +25,8 @@ module ActiveRecord
# Executes a SELECT query and returns an array of rows. Each row is an # Executes a SELECT query and returns an array of rows. Each row is an
# array of field values. # array of field values.
def select_rows(sql, name = nil, binds = []) def select_rows(arel, name = nil, binds = []) # :nodoc:
execute_and_clear(sql, name, binds) do |result| select_result(arel, name, binds) do |result|
result.values result.values
end end
end end
@ -179,6 +175,14 @@ module ActiveRecord
def suppress_composite_primary_key(pk) def suppress_composite_primary_key(pk)
pk unless pk.is_a?(Array) pk unless pk.is_a?(Array)
end end
def select_result(arel, name, binds)
arel, binds = binds_from_relation(arel, binds)
sql = to_sql(arel, binds)
execute_and_clear(sql, name, binds) do |result|
yield result
end
end
end end
end end
end end