aboutsummaryrefslogtreecommitdiffstats
path: root/activerecord
diff options
context:
space:
mode:
authorPratik Naik <pratiknaik@gmail.com>2010-01-19 20:43:03 +0530
committerPratik Naik <pratiknaik@gmail.com>2010-01-19 20:43:03 +0530
commitec63fdcff35d9ee195e11043ba3219b1e341a3f2 (patch)
treede7bbcac06efcb46464775bef5c5e425fabe7fb9 /activerecord
parent73b179eb689611ac0518584b21f2304756a7e981 (diff)
downloadrails-ec63fdcff35d9ee195e11043ba3219b1e341a3f2.tar.gz
rails-ec63fdcff35d9ee195e11043ba3219b1e341a3f2.tar.bz2
rails-ec63fdcff35d9ee195e11043ba3219b1e341a3f2.zip
Get rid of construct_count_options_from_args
Diffstat (limited to 'activerecord')
-rw-r--r--activerecord/lib/active_record/associations/association_collection.rb7
-rw-r--r--activerecord/lib/active_record/relation/calculation_methods.rb30
2 files changed, 4 insertions, 33 deletions
diff --git a/activerecord/lib/active_record/associations/association_collection.rb b/activerecord/lib/active_record/associations/association_collection.rb
index e9402d3547..9487d16123 100644
--- a/activerecord/lib/active_record/associations/association_collection.rb
+++ b/activerecord/lib/active_record/associations/association_collection.rb
@@ -176,14 +176,15 @@ module ActiveRecord
# be used for the query. If no +:counter_sql+ was supplied, but +:finder_sql+ was set, the
# descendant's +construct_sql+ method will have set :counter_sql automatically.
# Otherwise, construct options and pass them with scope to the target class's +count+.
- def count(*args)
+ def count(column_name = nil, options = {})
if @reflection.options[:counter_sql]
@reflection.klass.count_by_sql(@counter_sql)
else
- column_name, options = @reflection.klass.scoped.send(:construct_count_options_from_args, *args)
+ column_name, options = nil, column_name if column_name.is_a?(Hash)
+
if @reflection.options[:uniq]
# This is needed because 'SELECT count(DISTINCT *)..' is not valid SQL.
- column_name = "#{@reflection.quoted_table_name}.#{@reflection.klass.primary_key}" if column_name == :all
+ column_name = "#{@reflection.quoted_table_name}.#{@reflection.klass.primary_key}" unless column_name
options.merge!(:distinct => true)
end
diff --git a/activerecord/lib/active_record/relation/calculation_methods.rb b/activerecord/lib/active_record/relation/calculation_methods.rb
index b96b69a18e..53d8594da8 100644
--- a/activerecord/lib/active_record/relation/calculation_methods.rb
+++ b/activerecord/lib/active_record/relation/calculation_methods.rb
@@ -180,32 +180,6 @@ module ActiveRecord
end
end
- def construct_count_options_from_args(*args)
- options = {}
- column_name = :all
-
- # Handles count(), count(:column), count(:distinct => true), count(:column, :distinct => true)
- case args.size
- when 0
- select = get_projection_name_from_chained_relations
- column_name = select if select !~ /(,|\*)/
- when 1
- if args[0].is_a?(Hash)
- select = get_projection_name_from_chained_relations
- column_name = select if select !~ /(,|\*)/
- options = args[0]
- else
- column_name = args[0]
- end
- when 2
- column_name, options = args
- else
- raise ArgumentError, "Unexpected parameters passed to count(): #{args.inspect}"
- end
-
- [column_name || :all, options]
- end
-
# Converts the given keys to the value that the database adapter returns as
# a usable column name:
#
@@ -243,10 +217,6 @@ module ActiveRecord
column ? column.type_cast(value) : value
end
- def get_projection_name_from_chained_relations
- @select_values.join(", ") if @select_values.present?
- end
-
def select_for_count
if @select_values.present?
select = @select_values.join(", ")