summaryrefslogtreecommitdiff
path: root/spec
diff options
context:
space:
mode:
authorYorick Peterse <yorickpeterse@gmail.com>2016-03-07 12:56:46 +0100
committerRobert Speicher <rspeicher@gmail.com>2016-03-11 15:26:32 -0500
commit4f3fa519c627b7caf45273226ae438181dfbc392 (patch)
tree9cf5ecd427d262fab71d7f4bc821e61e2277dace /spec
parentc2df121f8eeaf8e0fccab43f5b181f70f3725e58 (diff)
downloadgitlab-ce-4f3fa519c627b7caf45273226ae438181dfbc392.tar.gz
Use a UNION in MergeRequest.in_projects
The OR condition for source_project_id/target_project_id leads to a query plan that performs rather poorly on PostgreSQL due to the use of sub-queries. Because Rails offers no easy alternative for this particular problem we're forced to using a UNION for both conditions. The resulting query performs much faster than just using an OR.
Diffstat (limited to 'spec')
-rw-r--r--spec/models/merge_request_spec.rb6
1 files changed, 6 insertions, 0 deletions
diff --git a/spec/models/merge_request_spec.rb b/spec/models/merge_request_spec.rb
index 59c40922abb..8bf68013fd2 100644
--- a/spec/models/merge_request_spec.rb
+++ b/spec/models/merge_request_spec.rb
@@ -80,6 +80,12 @@ describe MergeRequest, models: true do
it { is_expected.to respond_to(:merge_when_build_succeeds) }
end
+ describe '.in_projects' do
+ it 'returns the merge requests for a set of projects' do
+ expect(described_class.in_projects(Project.all)).to eq([subject])
+ end
+ end
+
describe '#to_reference' do
it 'returns a String reference to the object' do
expect(subject.to_reference).to eq "!#{subject.iid}"