Fixed badly reported offset when hitting the end of the collection

This commit is contained in:
emeric
2024-03-12 13:40:32 +01:00
parent 4ea6d0dd09
commit 9da781cff6
2 changed files with 65 additions and 5 deletions
+3 -3
View File
@@ -53,7 +53,10 @@ namespace Database::Utils
RangeResults<ResultType> res;
if (range)
{
res.range.offset = range->offset;
applyRange(query, Range{ range->offset, range->size + 1 });
}
auto collection{ query.resultList() };
res.results.assign(collection.begin(), collection.end());
@@ -62,10 +65,7 @@ namespace Database::Utils
// TODO may optim by not actually requesting the last one
res.moreResults = true;
res.results.pop_back();
res.range.offset = range->offset;
}
else
res.moreResults = false;
res.range.size = res.results.size();
+61 -1
View File
@@ -78,6 +78,66 @@ TEST_F(DatabaseFixture, Artist)
}
}
TEST_F(DatabaseFixture, MultipleArtists)
{
{
auto transaction{ session.createReadTransaction() };
auto artists{ Artist::findIds(session, Artist::FindParameters {}) };
ASSERT_EQ(artists.results.size(), 0);
ASSERT_FALSE(artists.moreResults);
ASSERT_EQ(artists.range.offset, 0);
ASSERT_EQ(artists.range.size, 0);
}
ScopedArtist artist1{ session, "MyArtist1" };
ScopedArtist artist2{ session, "MyArtist2" };
ScopedArtist artist3{ session, "MyArtist3" };
{
auto transaction{ session.createReadTransaction() };
auto artists{ Artist::findIds(session, Artist::FindParameters{}) };
ASSERT_EQ(artists.results.size(), 3);
ASSERT_FALSE(artists.moreResults);
ASSERT_EQ(artists.range.offset, 0);
ASSERT_EQ(artists.range.size, 3);
}
{
auto transaction{ session.createReadTransaction() };
auto artists{ Artist::findIds(session, Artist::FindParameters{}.setRange(Range{0,1})) };
ASSERT_EQ(artists.results.size(), 1);
ASSERT_TRUE(artists.moreResults);
ASSERT_EQ(artists.range.offset, 0);
ASSERT_EQ(artists.range.size, 1);
EXPECT_EQ(artists.results[0], artist1.getId());
}
{
auto transaction{ session.createReadTransaction() };
auto artists{ Artist::findIds(session, Artist::FindParameters{}.setRange(Range{1,1})) };
ASSERT_EQ(artists.results.size(), 1);
ASSERT_TRUE(artists.moreResults);
ASSERT_EQ(artists.range.offset, 1);
ASSERT_EQ(artists.range.size, 1);
EXPECT_EQ(artists.results[0], artist2.getId());
}
{
auto transaction{ session.createReadTransaction() };
auto artists{ Artist::findIds(session, Artist::FindParameters{}.setRange(Range{2,1})) };
ASSERT_EQ(artists.results.size(), 1);
ASSERT_FALSE(artists.moreResults);
ASSERT_EQ(artists.range.offset, 2);
ASSERT_EQ(artists.range.size, 1);
EXPECT_EQ(artists.results[0], artist3.getId());
}
}
TEST_F(DatabaseFixture, Artist_singleTrack)
{
ScopedTrack track{ session, "MyTrack" };
@@ -174,7 +234,7 @@ TEST_F(DatabaseFixture, Artist_singleTrack_mediaLibrary)
ASSERT_EQ(artists.results.size(), 1);
EXPECT_EQ(artists.results.front(), artist.getId());
}
{
{
auto transaction{ session.createReadTransaction() };
auto artists{ Artist::findIds(session, Artist::FindParameters{}.setMediaLibrary(otherLibrary->getId())) };
EXPECT_EQ(artists.results.size(), 0);