From bf1494a1018a0bdc50dac4e87fdbf4b6b03083fa Mon Sep 17 00:00:00 2001 From: Ryuta Kamizono Date: Mon, 8 Apr 2019 17:43:56 +0900 Subject: Fix GROUP BY with calculate longer name field to respect `table_alias_length` Follow up of c9e4c848eeeb8999b778fa1ae52185ca5537fffe. --- activerecord/lib/active_record/relation/calculations.rb | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) (limited to 'activerecord/lib/active_record/relation/calculations.rb') diff --git a/activerecord/lib/active_record/relation/calculations.rb b/activerecord/lib/active_record/relation/calculations.rb index 910c6b3214..801e312658 100644 --- a/activerecord/lib/active_record/relation/calculations.rb +++ b/activerecord/lib/active_record/relation/calculations.rb @@ -319,12 +319,11 @@ module ActiveRecord group_aliases = group_fields.map { |field| field = connection.visitor.compile(field) if Arel.arel_node?(field) - column_alias_for(field) + column_alias_for(field.to_s.downcase) } group_columns = group_aliases.zip(group_fields) - aggregate_alias = "#{operation}_#{column_name.to_s.downcase}" - aggregate_alias = column_alias_for(aggregate_alias) unless aggregate_alias.match?(/\A\w+\z/) + aggregate_alias = column_alias_for("#{operation}_#{column_name.to_s.downcase}") select_values = [ operation_over_aggregate_column( @@ -369,7 +368,7 @@ module ActiveRecord end] end - # Converts the given keys to the value that the database adapter returns as + # Converts the given field to the value that the database adapter returns as # a usable column name: # # column_alias_for("users.id") # => "users_id" @@ -377,7 +376,9 @@ module ActiveRecord # column_alias_for("count(distinct users.id)") # => "count_distinct_users_id" # column_alias_for("count(*)") # => "count_all" def column_alias_for(field) - column_alias = field.to_s.downcase + return field if field.match?(/\A\w{,#{connection.table_alias_length}}\z/) + + column_alias = +field column_alias.gsub!(/\*/, "all") column_alias.gsub!(/\W+/, " ") column_alias.strip! -- cgit v1.2.3