module ActiveRecord::Calculations
def execute_simple_calculation(operation, column_name, distinct) # :nodoc:
def execute_simple_calculation(operation, column_name, distinct) # :nodoc: if operation == "count" && (column_name == :all && distinct || has_limit_or_offset?) # Shortcut when limit is zero. return 0 if limit_value == 0 query_builder = build_count_subquery(spawn, column_name, distinct) else # PostgreSQL doesn't like ORDER BY when there are no GROUP BY relation = unscope(:order).distinct!(false) column = aggregate_column(column_name) select_value = operation_over_aggregate_column(column, operation, distinct) select_value.distinct = true if operation == "sum" && distinct relation.select_values = [select_value] query_builder = relation.arel end result = skip_query_cache_if_necessary { @klass.connection.select_all(query_builder, "#{@klass.name} #{operation.capitalize}") } if operation != "count" type = column.try(:type_caster) || lookup_cast_type_from_join_dependencies(column_name.to_s) || Type.default_value type = type.subtype if Enum::EnumType === type end type_cast_calculated_value(result.cast_values.first, operation, type) end