From b963d45ca4bd883556be5d410feac995f9b50b81 Mon Sep 17 00:00:00 2001
From: Stan Hu <stanhu@gmail.com>
Date: Fri, 7 Jul 2017 15:03:10 -0700
Subject: [PATCH] Remove many N+1 queries with merge requests API

Identified via `ENABLE_BULLET=1 bundle exec rspec spec/requests/api/merge_requests_spec.rb:34`

Improves speed of #34159
---
 app/models/merge_request.rb | 2 +-
 lib/api/merge_requests.rb   | 4 +++-
 2 files changed, 4 insertions(+), 2 deletions(-)

diff --git a/app/models/merge_request.rb b/app/models/merge_request.rb
index 6ea774470af..84eafde3a06 100644
--- a/app/models/merge_request.rb
+++ b/app/models/merge_request.rb
@@ -14,7 +14,7 @@ class MergeRequest < ActiveRecord::Base
 
   has_many :merge_request_diffs
   has_one :merge_request_diff,
-    -> { order('merge_request_diffs.id DESC') }
+    -> { order('merge_request_diffs.id DESC') }, inverse_of: :merge_request
 
   belongs_to :head_pipeline, foreign_key: "head_pipeline_id", class_name: "Ci::Pipeline"
 
diff --git a/lib/api/merge_requests.rb b/lib/api/merge_requests.rb
index 1118fc7465b..d419d345ec5 100644
--- a/lib/api/merge_requests.rb
+++ b/lib/api/merge_requests.rb
@@ -41,7 +41,9 @@ module API
           args[:milestone_title] = args.delete(:milestone)
           args[:label_name] = args.delete(:labels)
 
-          merge_requests = MergeRequestsFinder.new(current_user, args).execute.inc_notes_with_associations
+          merge_requests = MergeRequestsFinder.new(current_user, args).execute
+                             .inc_notes_with_associations
+                             .preload(:target_project, :author, :assignee, :milestone, :merge_request_diff)
 
           merge_requests.reorder(args[:order_by] => args[:sort])
         end
-- 
GitLab