提交 54a65183 编写于 作者: A Aaron Patterson

fix PG typecasting errors

上级 ac659492
......@@ -241,13 +241,16 @@ def execute_simple_calculation(operation, column_name, distinct) #:nodoc:
select_value = operation_over_aggregate_column(column, operation, distinct)
column_name = select_value.alias
relation.select_values = [select_value]
query_builder = relation.arel
end
result = @klass.connection.select_value(query_builder, nil, relation.bind_values)
type_cast_calculated_value(result, column_for(column_name), operation)
result = @klass.connection.select_all(query_builder, nil, relation.bind_values)
row = result.first
value = row && row.values.first
type_cast_calculated_value(value, result.column_types[column_name], operation)
end
def execute_grouped_calculation(operation, column_name, distinct) #:nodoc:
......
......@@ -8,6 +8,7 @@
require 'models/topic'
require 'models/minivan'
require 'models/speedometer'
require 'models/ship_part'
Company.has_many :accounts
......@@ -33,8 +34,9 @@ def test_should_return_decimal_average_of_integer_field
end
def test_should_return_integer_average_if_db_returns_such
Account.connection.stubs :select_value => 3
value = Account.average(:id)
ShipPart.delete_all
ShipPart.create!(:id => 3, :name => 'foo')
value = ShipPart.average(:id)
assert_equal 3, value
end
......@@ -416,34 +418,19 @@ def test_maximum_with_from_option
def test_maximum_with_not_auto_table_name_prefix_if_column_included
Company.create!(:name => "test", :contracts => [Contract.new(:developer_id => 7)])
# TODO: Investigate why PG isn't being typecast
if current_adapter?(:PostgreSQLAdapter) || current_adapter?(:MysqlAdapter)
assert_equal "7", Company.includes(:contracts).maximum(:developer_id)
else
assert_equal 7, Company.includes(:contracts).maximum(:developer_id)
end
assert_equal 7, Company.includes(:contracts).maximum(:developer_id)
end
def test_minimum_with_not_auto_table_name_prefix_if_column_included
Company.create!(:name => "test", :contracts => [Contract.new(:developer_id => 7)])
# TODO: Investigate why PG isn't being typecast
if current_adapter?(:PostgreSQLAdapter) || current_adapter?(:MysqlAdapter)
assert_equal "7", Company.includes(:contracts).minimum(:developer_id)
else
assert_equal 7, Company.includes(:contracts).minimum(:developer_id)
end
assert_equal 7, Company.includes(:contracts).minimum(:developer_id)
end
def test_sum_with_not_auto_table_name_prefix_if_column_included
Company.create!(:name => "test", :contracts => [Contract.new(:developer_id => 7)])
# TODO: Investigate why PG isn't being typecast
if current_adapter?(:MysqlAdapter) || current_adapter?(:PostgreSQLAdapter)
assert_equal "7", Company.includes(:contracts).sum(:developer_id)
else
assert_equal 7, Company.includes(:contracts).sum(:developer_id)
end
assert_equal 7, Company.includes(:contracts).sum(:developer_id)
end
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册