diff --git a/app/finders/issuable_finder.rb b/app/finders/issuable_finder.rb index 477093ddadfb96493e2e3adb06b4c9e67394e1c7..0005206970b9b0977b8cf3410fe0552f5cc1c606 100644 --- a/app/finders/issuable_finder.rb +++ b/app/finders/issuable_finder.rb @@ -483,6 +483,7 @@ def by_project(items) # rubocop: disable CodeReuse/ActiveRecord def by_search(items) return items unless search + return items if items.is_a?(ActiveRecord::NullRelation) if use_cte_for_search? cte = Gitlab::SQL::RecursiveCTE.new(klass.table_name) diff --git a/spec/finders/issues_finder_spec.rb b/spec/finders/issues_finder_spec.rb index c27ce263bf0eee231ad501839d75700e05dda7e1..6c10a61727963e05300839ca7f3455fc7d763e9d 100644 --- a/spec/finders/issues_finder_spec.rb +++ b/spec/finders/issues_finder_spec.rb @@ -163,6 +163,20 @@ end end + context 'filtering by nonexistent author ID and issue term using CTE for search' do + let(:params) do + { + author_id: 'does-not-exist', + search: 'git', + attempt_group_search_optimizations: true + } + end + + it 'returns no results' do + expect(issues).to be_empty + end + end + context 'filtering by milestone' do let(:params) { { milestone_title: milestone.title } } diff --git a/spec/finders/merge_requests_finder_spec.rb b/spec/finders/merge_requests_finder_spec.rb index a396284f1e940171fad5184ca415db3df386103c..bc85a622119394dbcb501d7f9a6b04638d4211d4 100644 --- a/spec/finders/merge_requests_finder_spec.rb +++ b/spec/finders/merge_requests_finder_spec.rb @@ -23,6 +23,18 @@ expect(merge_requests).to contain_exactly(merge_request1) end + it 'filters by nonexistent author ID and MR term using CTE for search' do + params = { + author_id: 'does-not-exist', + search: 'git', + attempt_group_search_optimizations: true + } + + merge_requests = described_class.new(user, params).execute + + expect(merge_requests).to be_empty + end + it 'filters by projects' do params = { projects: [project2.id, project3.id] }