summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJan Provaznik <jprovaznik@gitlab.com>2017-12-22 16:44:53 +0100
committerJan Provaznik <jprovaznik@gitlab.com>2018-01-02 12:07:26 +0100
commit017c1297cdcfbb7431dbbc0445e29d1c95d934c0 (patch)
treee3cb16e2473cc744fd75907a53c924d23e0a8bca
parent05292ba958c20ac560cdc43e90d954cb201eaf62 (diff)
downloadgitlab-ce-017c1297cdcfbb7431dbbc0445e29d1c95d934c0.tar.gz
Skip projects filter on issues searchjprovazn-search-issues
When searching for issues, an additional subquery is added which filters only issues in a project. If global context is used (no project is specified) this query filters all projects user has access to. In that case we can skip this filter because filtering only projects user has access to is added anyway. The filter is used only if a custom project context is specified Related to #40540
-rw-r--r--changelogs/unreleased/16117-improve-search-for-issues.yml5
-rw-r--r--lib/gitlab/search_results.rb5
-rw-r--r--spec/lib/gitlab/search_results_spec.rb35
3 files changed, 37 insertions, 8 deletions
diff --git a/changelogs/unreleased/16117-improve-search-for-issues.yml b/changelogs/unreleased/16117-improve-search-for-issues.yml
new file mode 100644
index 00000000000..92d5820ddd2
--- /dev/null
+++ b/changelogs/unreleased/16117-improve-search-for-issues.yml
@@ -0,0 +1,5 @@
+---
+title: Improve search query for issues.
+merge_request:
+author:
+type: performance
diff --git a/lib/gitlab/search_results.rb b/lib/gitlab/search_results.rb
index 7037e2e61cc..ca48c6df602 100644
--- a/lib/gitlab/search_results.rb
+++ b/lib/gitlab/search_results.rb
@@ -82,7 +82,10 @@ module Gitlab
end
def issues
- issues = IssuesFinder.new(current_user).execute.where(project_id: project_ids_relation)
+ issues = IssuesFinder.new(current_user).execute
+ unless default_project_filter
+ issues = issues.where(project_id: project_ids_relation)
+ end
issues =
if query =~ /#(\d+)\z/
diff --git a/spec/lib/gitlab/search_results_spec.rb b/spec/lib/gitlab/search_results_spec.rb
index a958baab44f..edd3d74f344 100644
--- a/spec/lib/gitlab/search_results_spec.rb
+++ b/spec/lib/gitlab/search_results_spec.rb
@@ -52,15 +52,36 @@ describe Gitlab::SearchResults do
expect(results.objects('merge_requests')).to include merge_request_2
end
- it 'includes project filter by default' do
- expect(results).to receive(:project_ids_relation).and_call_original
- results.objects('merge_requests')
+ describe '#merge_requests' do
+ it 'includes project filter by default' do
+ expect(results).to receive(:project_ids_relation).and_call_original
+
+ results.objects('merge_requests')
+ end
+
+ it 'it skips project filter if default project context is used' do
+ allow(results).to receive(:default_project_filter).and_return(true)
+
+ expect(results).not_to receive(:project_ids_relation)
+
+ results.objects('merge_requests')
+ end
end
- it 'it skips project filter if default is used' do
- allow(results).to receive(:default_project_filter).and_return(true)
- expect(results).not_to receive(:project_ids_relation)
- results.objects('merge_requests')
+ describe '#issues' do
+ it 'includes project filter by default' do
+ expect(results).to receive(:project_ids_relation).and_call_original
+
+ results.objects('issues')
+ end
+
+ it 'it skips project filter if default project context is used' do
+ allow(results).to receive(:default_project_filter).and_return(true)
+
+ expect(results).not_to receive(:project_ids_relation)
+
+ results.objects('issues')
+ end
end
end