diff options
author | GitLab Bot <gitlab-bot@gitlab.com> | 2022-03-04 21:20:01 +0300 |
---|---|---|
committer | GitLab Bot <gitlab-bot@gitlab.com> | 2022-03-04 21:20:01 +0300 |
commit | 698fe342b9fff4e569aa0f14a1973271144ff1a5 (patch) | |
tree | 102aa942c5903ecf7543bc9d087c0c7e3eaa6510 /app/services/boards/base_items_list_service.rb | |
parent | 73e15fde38825a490903ef88933d8896585f3008 (diff) |
Add latest changes from gitlab-org/gitlab@master
Diffstat (limited to 'app/services/boards/base_items_list_service.rb')
-rw-r--r-- | app/services/boards/base_items_list_service.rb | 27 |
1 files changed, 19 insertions, 8 deletions
diff --git a/app/services/boards/base_items_list_service.rb b/app/services/boards/base_items_list_service.rb index a3e24844587..01fad14d036 100644 --- a/app/services/boards/base_items_list_service.rb +++ b/app/services/boards/base_items_list_service.rb @@ -12,21 +12,32 @@ module Boards end # rubocop: disable CodeReuse/ActiveRecord - def metadata - issuables = item_model.arel_table - keys = metadata_fields.keys + def metadata(required_fields = [:issue_count, :total_issue_weight]) + fields = metadata_fields(required_fields) + keys = fields.keys # TODO: eliminate need for SQL literal fragment - columns = Arel.sql(metadata_fields.values_at(*keys).join(', ')) - results = item_model.where(id: init_collection.select(issuables[:id])).pluck(columns) + columns = Arel.sql(fields.values_at(*keys).join(', ')) + results = item_model.where(id: collection_ids) + results = query_additions(results, required_fields) + results = results.select(columns) - Hash[keys.zip(results.flatten)] + Hash[keys.zip(results.pluck(columns).flatten)] end # rubocop: enable CodeReuse/ActiveRecord private - def metadata_fields - { size: 'COUNT(*)' } + # override if needed + def query_additions(items, required_fields) + items + end + + def collection_ids + @collection_ids ||= init_collection.select(item_model.arel_table[:id]) + end + + def metadata_fields(required_fields) + required_fields&.include?(:issue_count) ? { size: 'COUNT(*)' } : {} end def order(items) |