module ActiveRecord::Calculations

def execute_simple_calculation(operation, column_name, distinct) # :nodoc:

: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