Order albums by original date, if available (fallback on date)

This commit is contained in:
emeric
2023-06-18 16:08:23 +02:00
parent 85709fa426
commit fe53b6469b
8 changed files with 106 additions and 27 deletions
+8 -2
View File
@@ -41,6 +41,9 @@ createQuery(Session& session, const Release::FindParameters& params)
auto query {session.getDboSession().query<ReleaseId>("SELECT DISTINCT r.id from release r")};
if (params.sortMethod == ReleaseSortMethod::LastWritten
|| params.sortMethod == ReleaseSortMethod::Date
|| params.sortMethod == ReleaseSortMethod::OriginalDate
|| params.sortMethod == ReleaseSortMethod::OriginalDateDesc
|| params.writtenAfter.isValid()
|| params.dateRange
|| params.artist.isValid())
@@ -160,8 +163,11 @@ createQuery(Session& session, const Release::FindParameters& params)
case ReleaseSortMethod::Date:
query.orderBy("t.date, r.name COLLATE NOCASE");
break;
case ReleaseSortMethod::DateDesc:
query.orderBy("t.date DESC, r.name COLLATE NOCASE");
case ReleaseSortMethod::OriginalDate:
query.orderBy("CASE WHEN t.original_date IS NULL THEN t.date ELSE t.original_date END, t.date, r.name COLLATE NOCASE");
break;
case ReleaseSortMethod::OriginalDateDesc:
query.orderBy("CASE WHEN t.original_date IS NULL THEN t.date ELSE t.original_date END DESC, t.date, r.name COLLATE NOCASE");
break;
case ReleaseSortMethod::StarredDateDesc:
assert(params.starringUser.isValid());
@@ -98,7 +98,8 @@ namespace Database
None,
Name,
Date,
DateDesc,
OriginalDate,
OriginalDateDesc,
Random,
LastWritten,
StarredDateDesc,
@@ -530,3 +530,73 @@ TEST_F(DatabaseFixture, Release_releaseType)
EXPECT_TRUE(release.get()->getSecondaryTypes().contains(ReleaseTypeSecondary::Compilation));
}
}
TEST_F(DatabaseFixture, ReleaseSortOrder)
{
ScopedRelease release1 {session, "MyRelease1"};
const Wt::WDate release1Date {Wt::WDate {2000, 2, 3}};
const Wt::WDate release1OriginalDate {Wt::WDate {1993, 4, 5}};
ScopedRelease release2 {session, "MyRelease2"};
const Wt::WDate release2Date {Wt::WDate {1994, 2, 3}};
ScopedTrack track1 {session, "MyTrack1"};
ScopedTrack track2 {session, "MyTrack2"};
ASSERT_LT(release2Date, release1Date);
ASSERT_GT(release2Date, release1OriginalDate);
{
auto transaction {session.createUniqueTransaction()};
track1.get().modify()->setRelease(release1.get());
track1.get().modify()->setOriginalDate(release1OriginalDate);
track1.get().modify()->setDate(release1Date);
track2.get().modify()->setRelease(release2.get());
track2.get().modify()->setDate(release2Date);
}
{
auto transaction {session.createSharedTransaction()};
const auto releases {Release::find(session, Release::FindParameters {}.setSortMethod(ReleaseSortMethod::Name) )};
ASSERT_EQ(releases.results.size(), 2);
EXPECT_EQ(releases.results.front(), release1.getId());
EXPECT_EQ(releases.results.back(), release2.getId());
}
{
auto transaction {session.createSharedTransaction()};
const auto releases {Release::find(session, Release::FindParameters {}.setSortMethod(ReleaseSortMethod::Random) )};
ASSERT_EQ(releases.results.size(), 2);
}
{
auto transaction {session.createSharedTransaction()};
const auto releases {Release::find(session, Release::FindParameters {}.setSortMethod(ReleaseSortMethod::Date) )};
ASSERT_EQ(releases.results.size(), 2);
EXPECT_EQ(releases.results.front(), release2.getId());
EXPECT_EQ(releases.results.back(), release1.getId());
}
{
auto transaction {session.createSharedTransaction()};
const auto releases {Release::find(session, Release::FindParameters {}.setSortMethod(ReleaseSortMethod::OriginalDate) )};
ASSERT_EQ(releases.results.size(), 2);
EXPECT_EQ(releases.results.front(), release1.getId());
EXPECT_EQ(releases.results.back(), release2.getId());
}
{
auto transaction {session.createSharedTransaction()};
const auto releases {Release::find(session, Release::FindParameters {}.setSortMethod(ReleaseSortMethod::OriginalDateDesc) )};
ASSERT_EQ(releases.results.size(), 2);
EXPECT_EQ(releases.results.front(), release2.getId());
EXPECT_EQ(releases.results.back(), release1.getId());
}
}