From f88a8209793f453aa1e8c32e98c27e418009f4ea Mon Sep 17 00:00:00 2001 From: MAEDA Go Date: Wed, 12 Jun 2024 22:13:09 +0900 Subject: [PATCH 1/3] Improve performance of Version model by reducing redundant SQL count queries --- app/models/version.rb | 24 ++++++++++-------------- 1 file changed, 10 insertions(+), 14 deletions(-) diff --git a/app/models/version.rb b/app/models/version.rb index eed2e22d7..016334197 100644 --- a/app/models/version.rb +++ b/app/models/version.rb @@ -45,22 +45,17 @@ module FixedIssuesExtension # Returns the completion percentage of this version based on the amount of open/closed issues # and the time spent on the open issues. def completed_percent - if count == 0 - 0 - elsif open_count == 0 - 100 - else - issues_progress(false) + issues_progress(true) - end + return 0 if open_count + closed_count == 0 + return 100 if open_count == 0 + + issues_progress(false) + issues_progress(true) end # Returns the percentage of issues that have been marked as 'closed'. def closed_percent - if count == 0 - 0 - else - issues_progress(false) - end + return 0 if open_count + closed_count == 0 + + issues_progress(false) end private @@ -105,14 +100,15 @@ module FixedIssuesExtension @issues_progress ||= {} @issues_progress[open] ||= begin progress = 0 - if count > 0 + issues_count = open_count + closed_count + if issues_count > 0 done = self.open(open).sum do |c| estimated = c.total_estimated_hours.to_f estimated = estimated_average unless estimated > 0.0 ratio = c.closed? ? 100 : (c.done_ratio || 0) estimated * ratio end - progress = done / (estimated_average * count) + progress = done / (estimated_average * issues_count) end progress end -- 2.44.0