From 711d86a6919a6fbf2f8834ac9d7cca029e687c8b Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Mon, 15 Jul 2024 14:40:46 +0000 Subject: [PATCH] fix: include pagination.key at reverse mode (backport #20939) (#20954) Co-authored-by: beer-1 <147697694+beer-1@users.noreply.github.com> Co-authored-by: Facundo Co-authored-by: Julien Robert --- CHANGELOG.md | 4 ++++ types/query/collections_pagination.go | 10 +++++----- types/query/collections_pagination_test.go | 10 ++++++++++ 3 files changed, 19 insertions(+), 5 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index e876f17eac..c2fde334e4 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -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 diff --git a/types/query/collections_pagination.go b/types/query/collections_pagination.go index 47ca6d5fbb..9f6be9168c 100644 --- a/types/query/collections_pagination.go +++ b/types/query/collections_pagination.go @@ -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 diff --git a/types/query/collections_pagination_test.go b/types/query/collections_pagination_test.go index 874722d4de..4467355ca2 100644 --- a/types/query/collections_pagination_test.go +++ b/types/query/collections_pagination_test.go @@ -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,