Commit 5a335c4d authored by Bob Van Landuyt's avatar Bob Van Landuyt

Remove the selects when counting the last page

The last page of the first collection is only loaded into memory when
it is being viewed. If it isn't loaded into memory, the `#size` call
triggers a count query.

This `#count` would generate an invalid query if our custom preloaded
counts are included by adding a separate `as count_column` alias on
top of the count aliases. Removing the selects in this case will make
sure a valid `COUNT(*)` is generated.
parent 4aa18590
---
title: Fix crash when navigating to second page of the group dashbaord when there
are projects and groups on the first page
merge_request: 15456
author:
type: fixed
...@@ -55,7 +55,9 @@ module Gitlab ...@@ -55,7 +55,9 @@ module Gitlab
def first_collection_last_page_size def first_collection_last_page_size
return @first_collection_last_page_size if defined?(@first_collection_last_page_size) return @first_collection_last_page_size if defined?(@first_collection_last_page_size)
@first_collection_last_page_size = paginated_first_collection(first_collection_page_count).count @first_collection_last_page_size = paginated_first_collection(first_collection_page_count)
.except(:select)
.size
end end
end end
end end
...@@ -280,6 +280,17 @@ describe Groups::ChildrenController do ...@@ -280,6 +280,17 @@ describe Groups::ChildrenController do
expect(assigns(:children)).to contain_exactly(other_subgroup, *next_page_projects.take(per_page - 1)) expect(assigns(:children)).to contain_exactly(other_subgroup, *next_page_projects.take(per_page - 1))
end end
context 'with a mixed first page' do
let!(:first_page_subgroups) { [create(:group, :public, parent: group)] }
let!(:first_page_projects) { create_list(:project, per_page, :public, namespace: group) }
it 'correctly calculates the counts' do
get :index, group_id: group.to_param, sort: 'id_asc', page: 2, format: :json
expect(response).to have_gitlab_http_status(200)
end
end
end end
end end
end end
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment