Project

General

Profile

Feature #44374 » 0001-Cache-builtin-group-instances-per-request-to-avoid-r.patch

Go MAEDA, 2026-08-25 11:54

View differences:

app/models/group_builtin.rb
18 18
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
19 19
class GroupBuiltin < Group
20
  class Current < ActiveSupport::CurrentAttributes
21
    attribute :instances
22
  end
23

  
20 24
  validate :validate_uniqueness, :on => :create
21 25
  def validate_uniqueness
......
40 44
    def load_instance
41 45
      return nil if self == GroupBuiltin
42
      instance = unscoped.order(:id).first || create_instance
46
      Current.instances ||= {}
47
      Current.instances[self] ||= unscoped.order(:id).first || create_instance
43 48
    end
44 49
    def create_instance
test/unit/group_test.rb
18 18
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
19 19
require_relative '../test_helper'
20
require 'active_record/testing/query_assertions'
20 21
class GroupTest < ActiveSupport::TestCase
21 22
  include Redmine::I18n
23
  include ActiveRecord::Assertions::QueryAssertions
22 24
  def setup
23 25
    User.current = nil
......
150 152
    end
151 153
  end
154
  def test_builtin_groups_should_be_cached_until_current_attributes_reset
155
    assert_queries_count(1) { Group.anonymous }
156
    assert_no_queries { Group.anonymous }
157

  
158
    GroupBuiltin::Current.reset
159

  
160
    assert_queries_count(1) { Group.anonymous }
161
  end
162

  
152 163
  def test_builtin_in_group_should_be_uniq
153 164
    group = GroupAnonymous.new
154 165
    group.name = 'Foo'
(1-1/2)