diff options
author | Erich Menge <erich.menge@me.com> | 2012-05-15 19:51:27 -0500 |
---|---|---|
committer | Erich Menge <erich.menge@me.com> | 2012-05-16 12:02:02 -0500 |
commit | c90f16da626a7edac45f7027b127ad874619455a (patch) | |
tree | ef6e0729f1f6657dbc3c7789ae2293c5c6cc61f2 /activerecord | |
parent | 7994496ab4127cf15323563acd55170b9d35821a (diff) | |
download | rails-c90f16da626a7edac45f7027b127ad874619455a.tar.gz rails-c90f16da626a7edac45f7027b127ad874619455a.tar.bz2 rails-c90f16da626a7edac45f7027b127ad874619455a.zip |
Fixes issue where SQL fragments prevented type casting based on column type.
Diffstat (limited to 'activerecord')
-rw-r--r-- | activerecord/lib/active_record/relation/calculations.rb | 11 | ||||
-rw-r--r-- | activerecord/test/cases/calculations_test.rb | 3 |
2 files changed, 6 insertions, 8 deletions
diff --git a/activerecord/lib/active_record/relation/calculations.rb b/activerecord/lib/active_record/relation/calculations.rb index aa2f325f74..862009b1ba 100644 --- a/activerecord/lib/active_record/relation/calculations.rb +++ b/activerecord/lib/active_record/relation/calculations.rb @@ -147,17 +147,12 @@ module ActiveRecord end result = klass.connection.select_all(select(column_name).arel, nil, bind_values) - types = result.column_types.merge klass.column_types - column = types[key] + column = klass.column_types[key] || result.column_types.values.first result.map do |attributes| raise ArgumentError, "Pluck expects to select just one attribute: #{attributes.inspect}" unless attributes.one? - value = klass.initialize_attributes(attributes).first[1] - if column - column.type_cast value - else - value - end + value = klass.initialize_attributes(attributes).values.first + column ? column.type_cast(value) : value end end diff --git a/activerecord/test/cases/calculations_test.rb b/activerecord/test/cases/calculations_test.rb index c9a70bae77..f8bd11e3d0 100644 --- a/activerecord/test/cases/calculations_test.rb +++ b/activerecord/test/cases/calculations_test.rb @@ -468,6 +468,9 @@ class CalculationsTest < ActiveRecord::TestCase def test_pluck_with_selection_clause assert_equal [50, 53, 55, 60], Account.pluck('DISTINCT credit_limit').sort + assert_equal [50, 53, 55, 60], Account.pluck('DISTINCT accounts.credit_limit').sort + assert_equal [50, 53, 55, 60], Account.pluck('DISTINCT(credit_limit)').sort + assert_equal [50 + 53 + 55 + 60], Account.pluck('SUM(DISTINCT(credit_limit))') end def test_pluck_expects_a_single_selection |