Fixed results inconsistencies when using search3

This commit is contained in:
emeric
2024-04-19 08:56:48 +02:00
parent 38d0115069
commit 697233dcef
10 changed files with 29 additions and 14 deletions
+5 -2
View File
@@ -133,10 +133,13 @@ namespace lms::db
{
case ArtistSortMethod::None:
break;
case ArtistSortMethod::ByName:
case ArtistSortMethod::Id:
query.orderBy("a.id");
break;
case ArtistSortMethod::Name:
query.orderBy("a.name COLLATE NOCASE");
break;
case ArtistSortMethod::BySortName:
case ArtistSortMethod::SortName:
query.orderBy("a.sort_name COLLATE NOCASE");
break;
case ArtistSortMethod::Random:
+3
View File
@@ -168,6 +168,9 @@ namespace lms::db
{
case ReleaseSortMethod::None:
break;
case ReleaseSortMethod::Id:
query.orderBy("r.id");
break;
case ReleaseSortMethod::Name:
query.orderBy("r.name COLLATE NOCASE");
break;
+3
View File
@@ -153,6 +153,9 @@ namespace lms::db
{
case TrackSortMethod::None:
break;
case TrackSortMethod::Id:
query.orderBy("t.id");
break;
case TrackSortMethod::LastWritten:
query.orderBy("t.file_last_write DESC");
break;
+5 -2
View File
@@ -108,8 +108,9 @@ namespace lms::db
enum class ArtistSortMethod
{
None,
ByName,
BySortName,
Id,
Name,
SortName,
Random,
LastWritten,
StarredDateDesc,
@@ -118,6 +119,7 @@ namespace lms::db
enum class ReleaseSortMethod
{
None,
Id,
Name,
ArtistNameThenName,
Date,
@@ -138,6 +140,7 @@ namespace lms::db
enum class TrackSortMethod
{
None,
Id,
Random,
LastWritten,
StarredDateDesc,
+5 -5
View File
@@ -588,21 +588,21 @@ namespace lms::db::tests
}
{
const auto artists{ Artist::findIds(session, Artist::FindParameters {}.setKeywords({"MyArtist%"}).setSortMethod(ArtistSortMethod::ByName)) };
const auto artists{ Artist::findIds(session, Artist::FindParameters {}.setKeywords({"MyArtist%"}).setSortMethod(ArtistSortMethod::Name)) };
ASSERT_EQ(artists.results.size(), 2);
EXPECT_EQ(artists.results[0], artist1.getId());
EXPECT_EQ(artists.results[1], artist4.getId());
}
{
const auto artists{ Artist::findIds(session, Artist::FindParameters {}.setKeywords({"%MyArtist"}).setSortMethod(ArtistSortMethod::ByName)) };
const auto artists{ Artist::findIds(session, Artist::FindParameters {}.setKeywords({"%MyArtist"}).setSortMethod(ArtistSortMethod::Name)) };
ASSERT_EQ(artists.results.size(), 2);
EXPECT_EQ(artists.results[0], artist2.getId());
EXPECT_EQ(artists.results[1], artist5.getId());
}
{
const auto artists{ Artist::findIds(session, Artist::FindParameters {}.setKeywords({"_MyArtist"}).setSortMethod(ArtistSortMethod::ByName)) };
const auto artists{ Artist::findIds(session, Artist::FindParameters {}.setKeywords({"_MyArtist"}).setSortMethod(ArtistSortMethod::Name)) };
ASSERT_EQ(artists.results.size(), 1);
EXPECT_EQ(artists.results[0], artist3.getId());
}
@@ -624,8 +624,8 @@ namespace lms::db::tests
{
auto transaction{ session.createReadTransaction() };
auto allArtistsByName{ Artist::findIds(session, Artist::FindParameters {}.setSortMethod(ArtistSortMethod::ByName)) };
auto allArtistsBySortName{ Artist::findIds(session, Artist::FindParameters {}.setSortMethod(ArtistSortMethod::BySortName)) };
auto allArtistsByName{ Artist::findIds(session, Artist::FindParameters {}.setSortMethod(ArtistSortMethod::Name)) };
auto allArtistsBySortName{ Artist::findIds(session, Artist::FindParameters {}.setSortMethod(ArtistSortMethod::SortName)) };
ASSERT_EQ(allArtistsByName.results.size(), 2);
EXPECT_EQ(allArtistsByName.results.front(), artistA.getId());
@@ -1,5 +1,5 @@
/*
* Copyright (C) 2023 Emeric Poupon
* Copyright (C) 2024 Emeric Poupon
*
* This file is part of LMS.
*
@@ -197,7 +197,7 @@ namespace lms::api::subsonic
{
feedback::IFeedbackService::ArtistFindParameters artistFindParams;
artistFindParams.setUser(context.userId);
artistFindParams.setSortMethod(ArtistSortMethod::BySortName);
artistFindParams.setSortMethod(ArtistSortMethod::SortName);
for (const ArtistId artistId : feedbackService.findStarredArtists(artistFindParams).results)
{
if (auto artist{ Artist::find(context.dbSession, artistId) })
@@ -109,7 +109,7 @@ namespace lms::api::subsonic
if (!user)
throw UserNotAuthorizedError{};
parameters.setSortMethod(ArtistSortMethod::BySortName);
parameters.setSortMethod(ArtistSortMethod::SortName);
switch (user->getSubsonicArtistListMode())
{
case SubsonicArtistListMode::AllArtists:
@@ -329,7 +329,7 @@ namespace lms::api::subsonic
directoryNode.setAttribute("name", "Music");
// TODO: this does not scale when a lot of artists are present
Artist::find(context.dbSession, Artist::FindParameters{}.setSortMethod(ArtistSortMethod::BySortName), [&](const Artist::pointer& artist)
Artist::find(context.dbSession, Artist::FindParameters{}.setSortMethod(ArtistSortMethod::SortName), [&](const Artist::pointer& artist)
{
directoryNode.addArrayChild("child", createArtistNode(context, artist, user, false /* no id3 */));
});
@@ -132,6 +132,7 @@ namespace lms::api::subsonic
params.setKeywords(keywords);
params.setRange(Range{ artistOffset, artistCount });
params.setMediaLibrary(mediaLibrary);
params.setSortMethod(ArtistSortMethod::Id); // must be consistent with both methods
Artist::find(context.dbSession, params, [&](const Artist::pointer& artist)
{
@@ -197,6 +198,7 @@ namespace lms::api::subsonic
params.setKeywords(keywords);
params.setRange(Range{ albumOffset, albumCount });
params.setMediaLibrary(mediaLibrary);
params.setSortMethod(ReleaseSortMethod::Id); // must be consistent with both methods
Release::find(context.dbSession, params, [&](const Release::pointer& release)
{
@@ -262,6 +264,7 @@ namespace lms::api::subsonic
params.setKeywords(keywords);
params.setRange(Range{ songOffset, songCount });
params.setMediaLibrary(mediaLibrary);
params.setSortMethod(TrackSortMethod::Id); // must be consistent with both methods
Track::find(context.dbSession, params, [&](const Track::pointer& track)
{
+1 -1
View File
@@ -119,7 +119,7 @@ namespace lms::ui
Artist::FindParameters params;
params.setClusters(getFilters().getClusterIds());
params.setLinkType(_linkType);
params.setSortMethod(ArtistSortMethod::BySortName);
params.setSortMethod(ArtistSortMethod::SortName);
params.setRange(range);
{