module ActiveRecord::ConnectionAdapters::SQLServer::CoreExt::Calculations

Public Instance Methods

calculate(operation, column_name) click to toggle source
Calls superclass method
# File lib/active_record/connection_adapters/sqlserver/core_ext/calculations.rb, line 11
def calculate(operation, column_name)
  if klass.connection.sqlserver?
    _calculate(operation, column_name)
  else
    super
  end
end

Private Instance Methods

_calculate(operation, column_name) click to toggle source

Same as original ‘calculate` method except we don’t perform PostgreSQL hack that removes ordering.

# File lib/active_record/connection_adapters/sqlserver/core_ext/calculations.rb, line 22
def _calculate(operation, column_name)
  operation = operation.to_s.downcase

  if @none
    case operation
    when "count", "sum"
      result = group_values.any? ? Hash.new : 0
      return @async ? Promise::Complete.new(result) : result
    when "average", "minimum", "maximum"
      result = group_values.any? ? Hash.new : nil
      return @async ? Promise::Complete.new(result) : result
    end
  end

  if has_include?(column_name)
    relation = apply_join_dependency

    if operation == "count"
      unless distinct_value || distinct_select?(column_name || select_for_count)
        relation.distinct!
        relation.select_values = [ klass.primary_key || table[Arel.star] ]
      end
      # PostgreSQL: ORDER BY expressions must appear in SELECT list when using DISTINCT
      # Start of monkey-patch
      # relation.order_values = [] if group_values.empty?
      # End of monkey-patch
    end

    relation.calculate(operation, column_name)
  else
    perform_calculation(operation, column_name)
  end
end
build_count_subquery(relation, column_name, distinct) click to toggle source
Calls superclass method
# File lib/active_record/connection_adapters/sqlserver/core_ext/calculations.rb, line 56
def build_count_subquery(relation, column_name, distinct)
  return super unless klass.connection.adapter_name == "SQLServer"

  super(relation.unscope(:order), column_name, distinct)
end