提交 a7628099 编写于 作者: S Soutaro Matsumoto 提交者: Sean Griffin

Qualify column names in calculation

Column names inserted via `group` have to be qualified with table name.
上级 d99db6b8
* Qualify column name inserted by `group` in calculation
Giving `group` an unqualified column name now works, even if the relation
has `JOIN` with another table which also has a column of the name.
*Soutaro Matsumoto*
* Don't cache prepared statements containing an IN clause or a SQL literal, as
these queries will change often and are unlikely to have a cache hit.
......
......@@ -297,7 +297,7 @@ def execute_grouped_calculation(operation, column_name, distinct) #:nodoc:
]
select_values += select_values unless having_clause.empty?
select_values.concat group_fields.zip(group_aliases).map { |field,aliaz|
select_values.concat arel_columns(group_fields).zip(group_aliases).map { |field,aliaz|
if field.respond_to?(:as)
field.as(aliaz)
else
......
......@@ -102,6 +102,25 @@ def test_should_group_by_summed_field
assert_equal 60, c[2]
end
def test_should_generate_valid_sql_with_joins_and_group
assert_nothing_raised ActiveRecord::StatementInvalid do
AuditLog.joins(:developer).group(:id).count
end
end
def test_should_calculate_against_given_relation
developer = Developer.create!(name: "developer")
developer.audit_logs.create!(message: "first log")
developer.audit_logs.create!(message: "second log")
c = developer.audit_logs.joins(:developer).group(:id).count
assert_equal developer.audit_logs.count, c.size
developer.audit_logs.each do |log|
assert_equal 1, c[log.id]
end
end
def test_should_order_by_grouped_field
c = Account.group(:firm_id).order("firm_id").sum(:credit_limit)
assert_equal [1, 2, 6, 9], c.keys.compact
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册