Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'lib/gitlab/pagination/cursor_based_keyset.rb')
-rw-r--r--lib/gitlab/pagination/cursor_based_keyset.rb31
1 files changed, 28 insertions, 3 deletions
diff --git a/lib/gitlab/pagination/cursor_based_keyset.rb b/lib/gitlab/pagination/cursor_based_keyset.rb
index ee8259cc671..592f635c14e 100644
--- a/lib/gitlab/pagination/cursor_based_keyset.rb
+++ b/lib/gitlab/pagination/cursor_based_keyset.rb
@@ -10,6 +10,20 @@ module Gitlab
::Packages::BuildInfo => { id: :desc }
}.freeze
+ SUPPORTED_MULTI_ORDERING = {
+ Group => { name: [:asc] },
+ AuditEvent => { id: [:desc] },
+ User => {
+ id: [:asc, :desc],
+ name: [:asc, :desc],
+ username: [:asc, :desc],
+ created_at: [:asc, :desc],
+ updated_at: [:asc, :desc]
+ },
+ ::Ci::Build => { id: [:desc] },
+ ::Packages::BuildInfo => { id: [:desc] }
+ }.freeze
+
# Relation types that are enforced in this list
# enforce the use of keyset pagination, thus erroring out requests
# made with offset pagination above a certain limit.
@@ -19,7 +33,11 @@ module Gitlab
ENFORCED_TYPES = [Group].freeze
def self.available_for_type?(relation)
- SUPPORTED_ORDERING.key?(relation.klass)
+ if Feature.enabled?(:api_keyset_pagination_multi_order)
+ SUPPORTED_MULTI_ORDERING.key?(relation.klass)
+ else
+ SUPPORTED_ORDERING.key?(relation.klass)
+ end
end
def self.available?(cursor_based_request_context, relation)
@@ -32,9 +50,16 @@ module Gitlab
end
def self.order_satisfied?(relation, cursor_based_request_context)
- order_by_from_request = cursor_based_request_context.order_by
+ if Feature.enabled?(:api_keyset_pagination_multi_order)
+ order_by_from_request = cursor_based_request_context.order
+ sort_from_request = cursor_based_request_context.sort
+
+ SUPPORTED_MULTI_ORDERING[relation.klass][order_by_from_request]&.include?(sort_from_request)
+ else
+ order_by_from_request = cursor_based_request_context.order_by
- SUPPORTED_ORDERING[relation.klass] == order_by_from_request
+ SUPPORTED_ORDERING[relation.klass] == order_by_from_request
+ end
end
private_class_method :order_satisfied?
end