Module: ActiveRecord::Calculations

Defined in:
lib/rcache/calculations.rb

Instance Method Summary collapse

Instance Method Details

#execute_simple_calculation(operation, column_name, distinct) ⇒ Object

:nodoc:



3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# File 'lib/rcache/calculations.rb', line 3

def execute_simple_calculation(operation, column_name, distinct) #:nodoc:
  # Postgresql doesn't like ORDER BY when there are no GROUP BY
  relation = reorder(nil)

  if operation == "count" && (relation.limit_value || relation.offset_value)
    # Shortcut when limit is zero.
    return 0 if relation.limit_value == 0

    query_builder = build_count_subquery(relation, column_name, distinct)
  else
    column = aggregate_column(column_name)

    select_value = operation_over_aggregate_column(column, operation, distinct)

    relation.select_values = [select_value]

    query_builder = relation.arel
  end
  query_builder.rcache_value = relation.rcache_value
  type_cast_calculated_value(@klass.connection.select_value(query_builder), column_for(column_name), operation)
end