Skip to content

Commit

Permalink
Merge pull request #7651 from steveklabnik/issue_3956
Browse files Browse the repository at this point in the history
Don't preserve SELECT columns on COUNT

Closes #7651
  • Loading branch information
rafaelfranca committed Sep 17, 2012
2 parents eac9e03 + 9fa3f10 commit 9ae79af
Show file tree
Hide file tree
Showing 2 changed files with 33 additions and 2 deletions.
Expand Up @@ -373,7 +373,8 @@ def custom_counter_sql
# replace the SELECT clause with COUNT(SELECTS), preserving any hints within /* ... */
interpolate(options[:finder_sql]).sub(/SELECT\b(\/\*.*?\*\/ )?(.*)\bFROM\b/im) do
count_with = $2.to_s
count_with = '*' if count_with.blank? || count_with =~ /,/
p count_with
count_with = '*' if count_with.blank? || count_with =~ /,/ || count_with =~ /\.\*/
"SELECT #{$1}COUNT(#{count_with}) FROM"
end
end
Expand Down
Expand Up @@ -46,10 +46,13 @@ def test_should_fail
end
end

class HasManyAssociationsTestForCountDistinctWithFinderSql < ActiveRecord::TestCase
class HasManyAssociationsTestForCountWithFinderSql < ActiveRecord::TestCase
class Invoice < ActiveRecord::Base
ActiveSupport::Deprecation.silence do
has_many :custom_line_items, :class_name => 'LineItem', :finder_sql => "SELECT DISTINCT line_items.amount from line_items"
has_many :custom_full_line_items, :class_name => 'LineItem', :finder_sql => "SELECT line_items.invoice_id, line_items.amount from line_items"
has_many :custom_star_line_items, :class_name => 'LineItem', :finder_sql => "SELECT * from line_items"
has_many :custom_qualified_star_line_items, :class_name => 'LineItem', :finder_sql => "SELECT line_items.* from line_items"
end
end

Expand All @@ -61,6 +64,33 @@ def test_should_count_distinct_results

assert_equal 1, invoice.custom_line_items.count
end

def test_should_count_results_with_multiple_fields
invoice = Invoice.new
invoice.custom_full_line_items << LineItem.new(:amount => 0)
invoice.custom_full_line_items << LineItem.new(:amount => 0)
invoice.save!

assert_equal 2, invoice.custom_full_line_items.count
end

def test_should_count_results_with_star
invoice = Invoice.new
invoice.custom_star_line_items << LineItem.new(:amount => 0)
invoice.custom_star_line_items << LineItem.new(:amount => 0)
invoice.save!

assert_equal 2, invoice.custom_star_line_items.count
end

def test_should_count_results_with_qualified_star
invoice = Invoice.new
invoice.custom_qualified_star_line_items << LineItem.new(:amount => 0)
invoice.custom_qualified_star_line_items << LineItem.new(:amount => 0)
invoice.save!

assert_equal 2, invoice.custom_qualified_star_line_items.count
end
end

class HasManyAssociationsTestForReorderWithJoinDependency < ActiveRecord::TestCase
Expand Down

0 comments on commit 9ae79af

Please sign in to comment.