Skip to content

Commit

Permalink
fix: include pagination.key at reverse mode (backport #20939) (#20954)
Browse files Browse the repository at this point in the history
Co-authored-by: beer-1 <147697694+beer-1@users.noreply.github.com>
Co-authored-by: Facundo <facundomedica@gmail.com>
Co-authored-by: Julien Robert <julien@rbrt.fr>
  • Loading branch information
4 people authored Jul 15, 2024
1 parent d975e01 commit 711d86a
Show file tree
Hide file tree
Showing 3 changed files with 19 additions and 5 deletions.
4 changes: 4 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,10 @@ Ref: https://keepachangelog.com/en/1.0.0/

## [Unreleased]

## Bug Fixes

* [#20939](https://github.com/cosmos/cosmos-sdk/pull/20939) Fix collection reverse iterator to include `pagination.key` in the result.

## [v0.50.8](https://github.com/cosmos/cosmos-sdk/releases/tag/v0.50.8) - 2024-07-15

## Features
Expand Down
10 changes: 5 additions & 5 deletions types/query/collections_pagination.go
Original file line number Diff line number Diff line change
Expand Up @@ -321,11 +321,11 @@ func encodeCollKey[K, V any, C Collection[K, V]](coll C, key K) ([]byte, error)
func getCollIter[K, V any, C Collection[K, V]](ctx context.Context, coll C, prefix, start []byte, reverse bool) (collections.Iterator[K, V], error) {
// TODO: maybe can be simplified
if reverse {
var end []byte
if prefix != nil {
start = storetypes.PrefixEndBytes(append(prefix, start...))
end = prefix
}
// if we are in reverse mode, we need to increase the start key
// to include the start key in the iteration.
start = storetypes.PrefixEndBytes(append(prefix, start...))
end := prefix

return coll.IterateRaw(ctx, end, start, collections.OrderDescending)
}
var end []byte
Expand Down
10 changes: 10 additions & 0 deletions types/query/collections_pagination_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -83,6 +83,16 @@ func TestCollectionPagination(t *testing.T) {
},
expResults: createResults(299, 200),
},
"with key and reverse": {
req: &PageRequest{
Key: encodeKey(199),
Reverse: true,
},
expResp: &PageResponse{
NextKey: encodeKey(99),
},
expResults: createResults(199, 100),
},
"with offset and count total": {
req: &PageRequest{
Offset: 50,
Expand Down

0 comments on commit 711d86a

Please sign in to comment.