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