From 3c692009c9e09af401c55a9861dc852de15d8b58 Mon Sep 17 00:00:00 2001 From: Go MAEDA Date: Fri, 29 Dec 2023 08:00:23 +0000 Subject: [PATCH] Optimize query models by replacing `map` with `pluck` (#39837). Patch by Go MAEDA (@maeda). git-svn-id: https://svn.redmine.org/redmine/trunk@22575 e93f8b46-1217-0410-a6f0-8f06a7374b81 --- app/models/group.rb | 10 ++-------- app/models/issue_query.rb | 11 +++++++---- app/models/query.rb | 6 +++--- app/models/time_entry_query.rb | 2 +- app/models/user_query.rb | 8 +++----- 5 files changed, 16 insertions(+), 21 deletions(-) diff --git a/app/models/group.rb b/app/models/group.rb index 1cfc6b56c..7b2b4342a 100644 --- a/app/models/group.rb +++ b/app/models/group.rb @@ -47,18 +47,12 @@ class Group < Principal 'custom_fields', :if => lambda {|group, user| user.admin? && !group.builtin?}) + alias_attribute :name, :lastname + def to_s name.to_s end - def name - lastname - end - - def name=(arg) - self.lastname = arg - end - def builtin_type nil end diff --git a/app/models/issue_query.rb b/app/models/issue_query.rb index 037d5a257..b18117cc9 100644 --- a/app/models/issue_query.rb +++ b/app/models/issue_query.rb @@ -159,7 +159,8 @@ class IssueQuery < Query ) add_available_filter( "priority_id", - :type => :list_with_history, :values => IssuePriority.all.collect{|s| [s.name, s.id.to_s]} + :type => :list_with_history, + :values => IssuePriority.pluck(:name, :id).map {|name, id| [name, id.to_s]} ) add_available_filter( "author_id", @@ -171,11 +172,13 @@ class IssueQuery < Query ) add_available_filter( "member_of_group", - :type => :list_optional, :values => lambda {Group.givable.visible.collect {|g| [g.name, g.id.to_s]}} + :type => :list_optional, + :values => lambda {Group.givable.visible.pluck(:name, :id).map {|name, id| [name, id.to_s]}} ) add_available_filter( "assigned_to_role", - :type => :list_optional, :values => lambda {Role.givable.collect {|r| [r.name, r.id.to_s]}} + :type => :list_optional, + :values => lambda {Role.givable.pluck(:name, :id).map {|name, id| [name, id.to_s]}} ) add_available_filter( "fixed_version_id", @@ -195,7 +198,7 @@ class IssueQuery < Query add_available_filter( "category_id", :type => :list_optional_with_history, - :values => lambda {project.issue_categories.collect{|s| [s.name, s.id.to_s]}} + :values => lambda {project.issue_categories.pluck(:name, :id).map {|name, id| [name, id.to_s]}} ) if project add_available_filter "subject", :type => :text add_available_filter "description", :type => :text diff --git a/app/models/query.rb b/app/models/query.rb index 31ffe6a13..9f3ce4c08 100644 --- a/app/models/query.rb +++ b/app/models/query.rb @@ -589,7 +589,7 @@ class Query < ActiveRecord::Base end def subproject_values - project.descendants.visible.collect{|s| [s.name, s.id.to_s]} + project.descendants.visible.pluck(:name, :id).map {|name, id| [name, id.to_s]} end def principals @@ -651,7 +651,7 @@ class Query < ActiveRecord::Base else statuses = IssueStatus.all.sorted end - statuses.collect{|s| [s.name, s.id.to_s]} + statuses.pluck(:name, :id).map {|name, id| [name, id.to_s]} end def watcher_values @@ -996,7 +996,7 @@ class Query < ActiveRecord::Base if field == 'project_id' || (self.type == 'ProjectQuery' && %w[id parent_id].include?(field)) if v.delete('mine') - v += User.current.memberships.map {|m| m.project_id.to_s} + v += User.current.memberships.pluck(:project_id).map(&:to_s) end if v.delete('bookmarks') v += User.current.bookmarked_project_ids diff --git a/app/models/time_entry_query.rb b/app/models/time_entry_query.rb index 28cf11438..bd7b72a7a 100644 --- a/app/models/time_entry_query.rb +++ b/app/models/time_entry_query.rb @@ -80,7 +80,7 @@ class TimeEntryQuery < Query "issue.category_id", :type => :list_optional, :name => l("label_attribute_of_issue", :name => l(:field_category)), - :values => lambda {project.issue_categories.collect{|s| [s.name, s.id.to_s]}} + :values => lambda {project.issue_categories.pluck(:name, :id).map {|name, id| [name, id.to_s]}} ) if project add_available_filter( "issue.subject", diff --git a/app/models/user_query.rb b/app/models/user_query.rb index 2ee71cc54..3e1cb2a74 100644 --- a/app/models/user_query.rb +++ b/app/models/user_query.rb @@ -45,7 +45,7 @@ class UserQuery < Query type: :list_optional, values: ->{ auth_sources_values } add_available_filter "is_member_of_group", type: :list_optional, - values: ->{ Group.givable.visible.map {|g| [g.name, g.id.to_s] } } + values: ->{ Group.givable.visible.pluck(:name, :id).map {|name, id| [name, id.to_s]} } if Setting.twofa? add_available_filter "twofa_scheme", type: :list_optional, @@ -65,9 +65,7 @@ class UserQuery < Query end def auth_sources_values - AuthSource.order(name: :asc).to_a.map do |auth_source| - [auth_source.name, auth_source.id] - end + AuthSource.order(name: :asc).pluck(:name, :id) end def user_statuses_values @@ -131,7 +129,7 @@ class UserQuery < Query def sql_for_is_member_of_group_field(field, operator, value) if ["*", "!*"].include? operator - value = Group.givable.map(&:id) + value = Group.givable.ids end e = operator.start_with?("!") ? "NOT EXISTS" : "EXISTS"