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