aboutsummaryrefslogtreecommitdiffstats
path: root/activerecord/lib/active_record/relation/calculation_methods.rb
diff options
context:
space:
mode:
authorPratik Naik <pratiknaik@gmail.com>2010-01-12 22:20:53 +0530
committerPratik Naik <pratiknaik@gmail.com>2010-01-12 22:25:55 +0530
commita04486dc997979a2d87fc013d30b6e71a3df4a64 (patch)
treefe3df7946d7fac940124f017fa0de7af335dba75 /activerecord/lib/active_record/relation/calculation_methods.rb
parentb078f7fd3910b0b174bc951cc8c0d27536b09c16 (diff)
downloadrails-a04486dc997979a2d87fc013d30b6e71a3df4a64.tar.gz
rails-a04486dc997979a2d87fc013d30b6e71a3df4a64.tar.bz2
rails-a04486dc997979a2d87fc013d30b6e71a3df4a64.zip
Delay building arel relation as long as possible for improved introspection
Diffstat (limited to 'activerecord/lib/active_record/relation/calculation_methods.rb')
-rw-r--r--activerecord/lib/active_record/relation/calculation_methods.rb14
1 files changed, 5 insertions, 9 deletions
diff --git a/activerecord/lib/active_record/relation/calculation_methods.rb b/activerecord/lib/active_record/relation/calculation_methods.rb
index 5246c7bc5d..e6f62ee49a 100644
--- a/activerecord/lib/active_record/relation/calculation_methods.rb
+++ b/activerecord/lib/active_record/relation/calculation_methods.rb
@@ -25,7 +25,7 @@ module ActiveRecord
operation = operation.to_s.downcase
if operation == "count"
- joins = @relation.joins(relation)
+ joins = arel.joins(arel)
if joins.present? && joins =~ /LEFT OUTER/i
distinct = true
column_name = @klass.primary_key if column_name == :all
@@ -40,7 +40,7 @@ module ActiveRecord
distinct = options[:distinct] || distinct
column_name = :all if column_name.blank? && operation == "count"
- if @relation.send(:groupings).any?
+ if arel.send(:groupings).any?
return execute_grouped_calculation(operation, column_name)
else
return execute_simple_calculation(operation, column_name, distinct)
@@ -63,7 +63,7 @@ module ActiveRecord
end
def execute_grouped_calculation(operation, column_name) #:nodoc:
- group_attr = @relation.send(:groupings).first.value
+ group_attr = arel.send(:groupings).first.value
association = @klass.reflect_on_association(group_attr.to_sym)
associated = association && association.macro == :belongs_to # only count belongs_to associations
group_field = associated ? association.primary_key_name : group_attr
@@ -165,12 +165,8 @@ module ActiveRecord
column ? column.type_cast(value) : value
end
- def get_projection_name_from_chained_relations(relation = @relation)
- if relation.respond_to?(:projections) && relation.projections.present?
- relation.send(:select_clauses).join(', ')
- elsif relation.respond_to?(:relation)
- get_projection_name_from_chained_relations(relation.relation)
- end
+ def get_projection_name_from_chained_relations
+ @select_values.join(", ") if @select_values.present?
end
end