Skip to content
Snippets Groups Projects
Commit 3b940253 authored by Danis Kirasirov's avatar Danis Kirasirov
Browse files

Использование offset/limit в items.BatchProcessor

parent 67448583
No related branches found
No related tags found
No related merge requests found
......@@ -16,9 +16,7 @@ type BatchProcessor struct {
FindPublishedOptions *FindPublishedOptions
Filter *Filter
// Deprecated использовать offset, limit
pageSize, pageNum int
limit int
sort []string
processed int
}
......@@ -39,7 +37,7 @@ func (b *BatchProcessor) getBatch(ctx context.Context) ([]*Item, bool, error) {
Regular: b.FindPublishedOptions.Regular,
Hidden: b.FindPublishedOptions.Hidden,
Templates: b.FindPublishedOptions.Templates,
FindOptions: *options.NewFindOptions(b.pageNum, b.pageSize, b.sort...),
FindOptions: *options.GetFindOptions(b.processed, b.limit, b.sort...),
},
)
} else {
......@@ -54,14 +52,13 @@ func (b *BatchProcessor) getBatch(ctx context.Context) ([]*Item, bool, error) {
Regular: b.FindOptions.Regular,
Hidden: b.FindOptions.Hidden,
Templates: b.FindOptions.Templates,
FindOptions: *options.NewFindOptions(b.pageNum, b.pageSize, b.sort...),
FindOptions: *options.GetFindOptions(b.processed, b.limit, b.sort...),
},
)
}
if err == nil {
b.processed += len(res)
b.pageNum++
}
return res, b.processed != total, err
......@@ -86,32 +83,35 @@ func (b *BatchProcessor) next(ctx context.Context) (res []*Item, next bool, err
}
func (b *BatchProcessor) reducePageSize() bool {
if b.pageSize == 1 {
if b.limit == 1 {
return false
}
b.pageNum = 2 * b.pageNum
b.pageSize = b.pageSize / 2
b.limit /= 2
return true
}
func (b *BatchProcessor) Do(ctx context.Context, f func(batch []*Item) error) (int, error) {
if b.FindOptions == nil && b.FindPublishedOptions == nil {
b.FindOptions = new(FindOptions)
}
if b.FindOptions != nil {
b.pageSize = b.FindOptions.PageSize
b.limit = b.FindOptions.PageSize
b.sort = b.FindOptions.Sort
if b.FindOptions.Limit != 0 {
b.limit = b.FindOptions.Limit
}
}
if b.FindPublishedOptions != nil {
b.pageSize = b.FindPublishedOptions.PageSize
b.limit = b.FindPublishedOptions.PageSize
b.sort = b.FindPublishedOptions.Sort
if b.FindPublishedOptions.Limit != 0 {
b.limit = b.FindPublishedOptions.Limit
}
}
if b.pageSize == 0 {
b.pageSize = 128
if b.limit == 0 {
b.limit = 128
}
if b.Filter != nil && (len(b.Filter.ID) > 0 || len(b.Filter.Q) > 0) && !data.Contains("_id", b.sort) {
......
......@@ -39,12 +39,18 @@ type FindOptions struct {
FieldOptions
}
// Deprecated использовать GetFindOptions
// NewFindOptions создает новые результаты поиска
func NewFindOptions(pageNum, pageSize int, sort ...string) *FindOptions {
return GetFindOptions(pageNum*pageSize, pageSize, sort...)
}
// GetFindOptions создает новые параметры поиска
func GetFindOptions(offset, limit int, sort ...string) *FindOptions {
return &FindOptions{
PaginationOptions: PaginationOptions{
PageNum: pageNum,
PageSize: pageSize,
Offset: offset,
Limit: limit,
},
SortOptions: SortOptions{
Sort: sort,
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment