提交 a89d20cf 编写于 作者: R Ryuta Kamizono

Type cast aggregations values for table name unqalified column in joins tables

Follow up of #39292 and #39259.
上级 31062c9d
......@@ -308,11 +308,10 @@ def execute_simple_calculation(operation, column_name, distinct) #:nodoc:
result = skip_query_cache_if_necessary { @klass.connection.select_all(query_builder) }
type_cast_calculated_value(result.cast_values.first, operation) do |value|
if type = column.try(:type_caster) || klass.attribute_types[column_name.to_s]
type.deserialize(value)
else
value
type = column.try(:type_caster) || klass.attribute_types.fetch(name = column_name.to_s) do
lookup_cast_type_from_join_dependencies(name, build_join_dependencies) || Type.default_value
end
type.deserialize(value)
end
end
......@@ -379,11 +378,10 @@ def execute_grouped_calculation(operation, column_name, distinct) #:nodoc:
key = key_records[key] if associated
result[key] = type_cast_calculated_value(row[column_alias], operation) do |value|
if type ||= column.try(:type_caster) || klass.attribute_types[column_name.to_s]
type.deserialize(value)
else
value
type ||= column.try(:type_caster) || klass.attribute_types.fetch(name = column_name.to_s) do
lookup_cast_type_from_join_dependencies(name, build_join_dependencies) || Type.default_value
end
type.deserialize(value)
end
end
end
......
......@@ -1159,11 +1159,17 @@ def assert_minimum_and_maximum_on_time_attributes(time_class)
assert_instance_of time_class, actual[true]
assert_instance_of time_class, actual[true]
actual = Author.joins(:topics).maximum(:"topics.written_on")
assert_minimum_and_maximum_on_time_attributes_joins_with_column(time_class, :"topics.written_on")
assert_minimum_and_maximum_on_time_attributes_joins_with_column(time_class, :written_on)
end
private :assert_minimum_and_maximum_on_time_attributes
def assert_minimum_and_maximum_on_time_attributes_joins_with_column(time_class, column)
actual = Author.joins(:topics).maximum(column)
assert_equal Time.utc(2004, 7, 15, 14, 28, 0, 9900), actual
assert_instance_of time_class, actual
actual = Author.joins(:topics).minimum(:"topics.written_on")
actual = Author.joins(:topics).minimum(column)
assert_equal Time.utc(2003, 7, 16, 14, 28, 11, 223300), actual
assert_instance_of time_class, actual
......@@ -1172,17 +1178,17 @@ def assert_minimum_and_maximum_on_time_attributes(time_class)
2 => Time.utc(2004, 7, 15, 14, 28, 0, 9900),
}
actual = Author.joins(:topics).group(:id).maximum(:"topics.written_on")
actual = Author.joins(:topics).group(:id).maximum(column)
assert_equal expected, actual
assert_instance_of time_class, actual[1]
assert_instance_of time_class, actual[2]
actual = Author.joins(:topics).group(:id).minimum(:"topics.written_on")
actual = Author.joins(:topics).group(:id).minimum(column)
assert_equal expected, actual
assert_instance_of time_class, actual[1]
assert_instance_of time_class, actual[2]
end
private :assert_minimum_and_maximum_on_time_attributes
private :assert_minimum_and_maximum_on_time_attributes_joins_with_column
def test_select_avg_with_group_by_as_virtual_attribute_with_sql
rails_core = companies(:rails_core)
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册