Skip to content

Commit ba468db

Browse files
committed
Refactor arel_column not to require block
1 parent 615f049 commit ba468db

File tree

2 files changed

+21
-37
lines changed

2 files changed

+21
-37
lines changed

activerecord/lib/active_record/relation/calculations.rb

Lines changed: 12 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -447,10 +447,13 @@ def distinct_select?(column_name)
447447
end
448448

449449
def aggregate_column(column_name)
450-
return column_name if Arel::Expressions === column_name
451-
452-
arel_column(column_name.to_s) do |name|
453-
column_name == :all ? Arel.sql("*", retryable: true) : Arel.sql(name)
450+
case column_name
451+
when Arel::Expressions
452+
column_name
453+
when :all
454+
Arel.star
455+
else
456+
arel_column(column_name)
454457
end
455458
end
456459

@@ -630,27 +633,12 @@ def type_cast_calculated_value(value, operation, type)
630633
end
631634

632635
def select_for_count
633-
if select_values.present?
634-
return select_values.first if select_values.one?
635-
636-
adapter_class = model.adapter_class
637-
select_values.map do |field|
638-
column = if Arel.arel_node?(field)
639-
field
640-
else
641-
arel_column(field.to_s) do |attr_name|
642-
Arel.sql(attr_name)
643-
end
644-
end
645-
646-
if column.is_a?(Arel::Nodes::SqlLiteral)
647-
column
648-
else
649-
"#{adapter_class.quote_table_name(column.relation.name)}.#{adapter_class.quote_column_name(column.name)}"
650-
end
651-
end.join(", ")
652-
else
636+
if select_values.empty?
653637
:all
638+
else
639+
with_connection do |conn|
640+
arel_columns(select_values).map { |column| conn.visitor.compile(column) }.join(", ")
641+
end
654642
end
655643
end
656644

activerecord/lib/active_record/relation/query_methods.rb

Lines changed: 9 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1932,12 +1932,8 @@ def build_with_join_node(name, kind = Arel::Nodes::InnerJoin)
19321932
def arel_columns(columns)
19331933
columns.flat_map do |field|
19341934
case field
1935-
when Symbol
1936-
arel_column(field.to_s) do |attr_name|
1937-
model.adapter_class.quote_table_name(attr_name)
1938-
end
1939-
when String
1940-
arel_column(field, &:itself)
1935+
when Symbol, String
1936+
arel_column(field)
19411937
when Proc
19421938
field.call
19431939
when Hash
@@ -1949,6 +1945,8 @@ def arel_columns(columns)
19491945
end
19501946

19511947
def arel_column(field)
1948+
field = field.name if is_symbol = field.is_a?(Symbol)
1949+
19521950
field = model.attribute_aliases[field] || field
19531951
from = from_clause.name || from_clause.value
19541952

@@ -1959,8 +1957,10 @@ def arel_column(field)
19591957
predicate_builder.resolve_arel_attribute(table, column) do
19601958
lookup_table_klass_from_join_dependencies(table)
19611959
end
1962-
else
1960+
elsif block_given?
19631961
yield field
1962+
else
1963+
Arel.sql(is_symbol ? model.adapter_class.quote_table_name(field) : field)
19641964
end
19651965
end
19661966

@@ -2194,18 +2194,14 @@ def arel_columns_from_hash(fields)
21942194
case columns_aliases
21952195
when Hash
21962196
columns_aliases.map do |column, column_alias|
2197-
arel_column("#{key}.#{column}") do
2198-
predicate_builder.resolve_arel_attribute(key.to_s, column)
2199-
end.as(column_alias.to_s)
2197+
arel_column("#{key}.#{column}").as(column_alias.to_s)
22002198
end
22012199
when Array
22022200
columns_aliases.map do |column|
22032201
arel_column("#{key}.#{column}", &:itself)
22042202
end
22052203
when String, Symbol
2206-
arel_column(key.to_s) do
2207-
predicate_builder.resolve_arel_attribute(model.table_name, key.to_s)
2208-
end.as(columns_aliases.to_s)
2204+
arel_column(key).as(columns_aliases.to_s)
22092205
end
22102206
end
22112207
end

0 commit comments

Comments
 (0)