diff options
author | Jan Provaznik <jprovaznik@gitlab.com> | 2017-12-22 16:44:53 +0100 |
---|---|---|
committer | Jan Provaznik <jprovaznik@gitlab.com> | 2018-01-02 12:07:26 +0100 |
commit | 017c1297cdcfbb7431dbbc0445e29d1c95d934c0 (patch) | |
tree | e3cb16e2473cc744fd75907a53c924d23e0a8bca | |
parent | 05292ba958c20ac560cdc43e90d954cb201eaf62 (diff) | |
download | gitlab-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.yml | 5 | ||||
-rw-r--r-- | lib/gitlab/search_results.rb | 5 | ||||
-rw-r--r-- | spec/lib/gitlab/search_results_spec.rb | 35 |
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 |