From 4c873cbf367d82538dbac914e7eee05b3582b6f1 Mon Sep 17 00:00:00 2001
From: Dmitriy Kiriyenko <dmitriy.kiriyenko@gmail.com>
Date: Tue, 5 Jul 2011 13:17:39 +0300
Subject: Fixed failing query when performing calculation with having based on
 select.

---
 activerecord/lib/active_record/relation/calculations.rb | 1 +
 activerecord/test/cases/calculations_test.rb            | 7 +++++++
 2 files changed, 8 insertions(+)

diff --git a/activerecord/lib/active_record/relation/calculations.rb b/activerecord/lib/active_record/relation/calculations.rb
index 0ac821b2d7..9a7ff87e88 100644
--- a/activerecord/lib/active_record/relation/calculations.rb
+++ b/activerecord/lib/active_record/relation/calculations.rb
@@ -250,6 +250,7 @@ module ActiveRecord
           operation,
           distinct).as(aggregate_alias)
       ]
+      select_values += @select_values unless @having_values.empty?
 
       select_values.concat group_fields.zip(group_aliases).map { |field,aliaz|
         "#{field} AS #{aliaz}"
diff --git a/activerecord/test/cases/calculations_test.rb b/activerecord/test/cases/calculations_test.rb
index 224b3f3d1f..42f98b3d42 100644
--- a/activerecord/test/cases/calculations_test.rb
+++ b/activerecord/test/cases/calculations_test.rb
@@ -170,6 +170,13 @@ class CalculationsTest < ActiveRecord::TestCase
     assert_equal 60,  c[2]
   end
 
+  def test_should_group_by_summed_field_having_condition_from_select
+    c = Account.select("MIN(credit_limit) AS min_credit_limit").group(:firm_id).having("min_credit_limit > 50").sum(:credit_limit)
+    assert_nil       c[1]
+    assert_equal 60, c[2]
+    assert_equal 53, c[9]
+  end
+
   def test_should_group_by_summed_association
     c = Account.sum(:credit_limit, :group => :firm)
     assert_equal 50,   c[companies(:first_firm)]
-- 
cgit v1.2.3