Skip to content

Refactor package scopes to use arel nodes [RUN ALL RSPEC] [RUN AS-IF-FOSS]

Steve Abrams requested to merge 328212-arel_package_scopes into master

🛠 What does this MR do?

This MR updates two scopes in the Packages::Package model to build the order by clause using full arel nodes via the Gitlab::Pagination::Keyset modules.

This will allow us to sort packages by project path using GraphQL while also using keyset pagination.

The change is behind a feature flag to give some safety in the case that the update has an unforeseen effect somewhere the scope is being used.

🐘 Database

The intent is that the query itself does not change in any way, just the way that rails is able to interpret it using arel nodes instead of a string expression. This is an example query using the scope, the only difference is the new query is explicit about null value placement in ordering, but the results and plans remain the same:

Query generated by Packages::GroupPackagesFinder, which is used by the graphql Resolvers::GroupPackagesResolver:

Packages::GroupPackagesFinder.new(user, group, { sort: 'asc', order_by: 'project_path' }).execute

Does this MR meet the acceptance criteria?

Conformity

Availability and Testing

Related to #328212 (closed)

Edited by Steve Abrams

Merge request reports