Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
张重言
rails
提交
a89d20cf
R
rails
项目概览
张重言
/
rails
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
R
rails
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
前往新版Gitcode,体验更适合开发者的 AI 搜索 >>
提交
a89d20cf
编写于
5月 15, 2020
作者:
R
Ryuta Kamizono
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Type cast aggregations values for table name unqalified column in joins tables
Follow up of #39292 and #39259.
上级
31062c9d
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
17 addition
and
13 deletion
+17
-13
activerecord/lib/active_record/relation/calculations.rb
activerecord/lib/active_record/relation/calculations.rb
+6
-8
activerecord/test/cases/calculations_test.rb
activerecord/test/cases/calculations_test.rb
+11
-5
未找到文件。
activerecord/lib/active_record/relation/calculations.rb
浏览文件 @
a89d20cf
...
...
@@ -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
...
...
activerecord/test/cases/calculations_test.rb
浏览文件 @
a89d20cf
...
...
@@ -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.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录