Skip to content

Commit

Permalink
Get rid of construct_count_options_from_args
Browse files Browse the repository at this point in the history
  • Loading branch information
lifo committed Jan 19, 2010
1 parent 73b179e commit ec63fdc
Show file tree
Hide file tree
Showing 2 changed files with 4 additions and 33 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -176,14 +176,15 @@ def sum(*args)
# 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

Expand Down
30 changes: 0 additions & 30 deletions activerecord/lib/active_record/relation/calculation_methods.rb
Original file line number Diff line number Diff line change
Expand Up @@ -180,32 +180,6 @@ def execute_grouped_calculation(operation, column_name) #:nodoc:
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:
#
Expand Down Expand Up @@ -243,10 +217,6 @@ def type_cast_using_column(value, column)
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(", ")
Expand Down

0 comments on commit ec63fdc

Please sign in to comment.