このコミットが含まれているのは:
@@ -59,17 +59,24 @@ class CountsQuery
|
||||
def summary
|
||||
expression = axis == 'month' ? "DATE_FORMAT(#{ @table }.created_at, '%Y-%m')" :
|
||||
"#{ @table }.created_by_user_id"
|
||||
grouped = @scope.group(Arel.sql(expression))
|
||||
sql = grouped.select(Arel.sql("#{ expression } AS group_key")).to_sql
|
||||
groups = @scope.klass.connection.select_value("SELECT COUNT(*) FROM (#{ sql }) counts_groups")
|
||||
group_order = axis == 'user' ? 'MAX(counts_actor.name)' : expression
|
||||
expressions = { 'group' => [group_order], 'count' => ['COUNT(*)'] }
|
||||
final = ["(#{ expression }) IS NULL ASC", "#{ expression } ASC"]
|
||||
rows = grouped.order(Arel.sql(order_sql(expressions, final)))
|
||||
.limit(limit).offset((page - 1) * limit).count
|
||||
names = axis == 'user' ? User.where(id: rows.keys.compact).pluck(:id, :name).to_h : {}
|
||||
sql = @scope.group(Arel.sql(expression)).select(Arel.sql(
|
||||
"#{ expression } AS group_key, COUNT(*) AS record_count, " +
|
||||
"#{ group_order } AS group_name")).to_sql
|
||||
connection = @scope.klass.connection
|
||||
source = "FROM (#{ sql }) counts_groups"
|
||||
groups = connection.select_value("SELECT COUNT(*) #{ source }")
|
||||
expressions = { 'group' => ['group_name'], 'count' => ['record_count'] }
|
||||
order = order_sql(expressions, ['group_key IS NULL ASC', 'group_key ASC'])
|
||||
rows = connection.select_all(
|
||||
"SELECT group_key, group_name, record_count #{ source } " +
|
||||
"ORDER BY #{ order } LIMIT #{ limit } OFFSET #{ (page - 1) * limit }")
|
||||
{ group_count: groups.to_i,
|
||||
groups: rows.map { |key, value| { key:, name: names[key], count: value } } }
|
||||
groups: rows.map do |row|
|
||||
{ key: row['group_key'],
|
||||
name: axis == 'user' ? row['group_name'] : nil,
|
||||
count: row['record_count'].to_i }
|
||||
end }
|
||||
end
|
||||
|
||||
private
|
||||
@@ -168,9 +175,9 @@ class CountsQuery
|
||||
first = timestamp('from')
|
||||
last = timestamp('before')
|
||||
raise ArgumentError if first && last && first >= last
|
||||
raise ArgumentError unless ['0', '1'].include?(@params.fetch('latest', '0'))
|
||||
raise ArgumentError unless ['0', '1'].include?(@params.fetch('latest', '1'))
|
||||
|
||||
@scope = @scope.where(Arel.sql(latest_expression)) if @params['latest'] == '1'
|
||||
@scope = @scope.where(Arel.sql(latest_expression)) unless @params['latest'] == '0'
|
||||
@scope = @scope.where("#{ @table }.created_at >= ?", first) if first
|
||||
@scope = @scope.where("#{ @table }.created_at < ?", last) if last
|
||||
if @params['resource_id'].present?
|
||||
|
||||
新しいイシューから参照
ユーザーをブロックする