diff --git a/src/libs/database/impl/Utils.hpp b/src/libs/database/impl/Utils.hpp index 83c7e3df..e49fd6b6 100644 --- a/src/libs/database/impl/Utils.hpp +++ b/src/libs/database/impl/Utils.hpp @@ -53,7 +53,10 @@ namespace Database::Utils RangeResults 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(); diff --git a/src/libs/database/test/Artist.cpp b/src/libs/database/test/Artist.cpp index 3030706c..878d0f24 100644 --- a/src/libs/database/test/Artist.cpp +++ b/src/libs/database/test/Artist.cpp @@ -56,7 +56,7 @@ TEST_F(DatabaseFixture, Artist) EXPECT_EQ(artists.results.front(), artist.getId()); } - + { auto transaction{ session.createReadTransaction() }; @@ -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);