summaryrefslogtreecommitdiffstats
path: root/modules/indexer/internal/paginator.go
diff options
context:
space:
mode:
Diffstat (limited to 'modules/indexer/internal/paginator.go')
-rw-r--r--modules/indexer/internal/paginator.go21
1 files changed, 7 insertions, 14 deletions
diff --git a/modules/indexer/internal/paginator.go b/modules/indexer/internal/paginator.go
index de0a33c06f..ee204bf047 100644
--- a/modules/indexer/internal/paginator.go
+++ b/modules/indexer/internal/paginator.go
@@ -10,7 +10,7 @@ import (
)
// ParsePaginator parses a db.Paginator into a skip and limit
-func ParsePaginator(paginator db.Paginator, max ...int) (int, int) {
+func ParsePaginator(paginator *db.ListOptions, max ...int) (int, int) {
// Use a very large number to indicate no limit
unlimited := math.MaxInt32
if len(max) > 0 {
@@ -19,22 +19,15 @@ func ParsePaginator(paginator db.Paginator, max ...int) (int, int) {
}
if paginator == nil || paginator.IsListAll() {
+ // It shouldn't happen. In actual usage scenarios, there should not be requests to search all.
+ // But if it does happen, respect it and return "unlimited".
+ // And it's also useful for testing.
return 0, unlimited
}
- // Warning: Do not use GetSkipTake() for *db.ListOptions
- // Its implementation could reset the page size with setting.API.MaxResponseItems
- if listOptions, ok := paginator.(*db.ListOptions); ok {
- if listOptions.Page >= 0 && listOptions.PageSize > 0 {
- var start int
- if listOptions.Page == 0 {
- start = 0
- } else {
- start = (listOptions.Page - 1) * listOptions.PageSize
- }
- return start, listOptions.PageSize
- }
- return 0, unlimited
+ if paginator.PageSize == 0 {
+ // Do not return any results when searching, it's used to get the total count only.
+ return 0, 0
}
return paginator.GetSkipTake()