diff --git a/src/libs/database/impl/Artist.cpp b/src/libs/database/impl/Artist.cpp
index b602ae0b..8d3782bc 100644
--- a/src/libs/database/impl/Artist.cpp
+++ b/src/libs/database/impl/Artist.cpp
@@ -50,7 +50,8 @@ namespace lms::db
|| params.track.isValid()
|| params.release.isValid()
|| params.clusters.size() == 1
- || params.mediaLibrary.isValid())
+ || params.mediaLibrary.isValid()
+ || params.label.isValid())
{
query.join("track_artist_link t_a_l ON t_a_l.artist_id = a.id");
}
@@ -59,7 +60,8 @@ namespace lms::db
|| params.sortMethod == ArtistSortMethod::AddedDesc
|| params.writtenAfter.isValid()
|| params.release.isValid()
- || params.mediaLibrary.isValid())
+ || params.mediaLibrary.isValid()
+ || params.label.isValid())
{
query.join("track t ON t.id = t_a_l.track_id");
@@ -71,6 +73,12 @@ namespace lms::db
if (params.mediaLibrary.isValid())
query.where("t.media_library_id = ?").bind(params.mediaLibrary);
+
+ if (params.label.isValid())
+ {
+ query.join("release_label r_l ON r_l.release_id = t.release_id");
+ query.where("r_l.label_id = ?").bind(params.label);
+ }
}
if (params.linkType)
diff --git a/src/libs/database/impl/Listen.cpp b/src/libs/database/impl/Listen.cpp
index 9c5b6c17..0bf51cdb 100644
--- a/src/libs/database/impl/Listen.cpp
+++ b/src/libs/database/impl/Listen.cpp
@@ -42,10 +42,18 @@ namespace lms::db
assert(!params.artist.isValid()); // poor check
- if (params.library.isValid())
+ if (params.library.isValid() || params.label.isValid())
{
query.join("track t ON t.id = t_a_l.track_id");
+ }
+
+ if (params.library.isValid())
query.where("t.media_library_id = ?").bind(params.library);
+
+ if (params.label.isValid())
+ {
+ query.join("release_label r_l ON t.release_id = r_l.release_id");
+ query.where("r_l.label_id = ?").bind(params.label);
}
if (params.linkType)
@@ -113,6 +121,12 @@ namespace lms::db
if (params.library.isValid())
query.where("t.media_library_id = ?").bind(params.library);
+ if (params.label.isValid())
+ {
+ query.join("release_label r_l ON r_l.release_id = r.id");
+ query.where("r_l.label_id = ?").bind(params.label);
+ }
+
if (!params.clusters.empty())
{
std::ostringstream oss;
@@ -160,6 +174,12 @@ namespace lms::db
if (params.library.isValid())
query.where("t.media_library_id = ?").bind(params.library);
+ if (params.label.isValid())
+ {
+ query.join("release_label r_l ON r_l.release_id = t.release_id");
+ query.where("r_l.label_id = ?").bind(params.label);
+ }
+
if (!params.clusters.empty())
{
std::ostringstream oss;
diff --git a/src/libs/database/impl/Migration.cpp b/src/libs/database/impl/Migration.cpp
index a75ca82f..08c8d31d 100644
--- a/src/libs/database/impl/Migration.cpp
+++ b/src/libs/database/impl/Migration.cpp
@@ -1074,6 +1074,9 @@ FROM tracklist)");
void migrateFromV81(Session& session)
{
+ // Make sure we remove all the previoulsy created index, the createIndexesIfNeeded will recreate them all
+ dropIndexes(session);
+
// Add country + release country
utils::executeCommand(*session.getDboSession(), R"(CREATE TABLE IF NOT EXISTS "country" (
"id" integer primary key autoincrement,
diff --git a/src/libs/database/impl/Release.cpp b/src/libs/database/impl/Release.cpp
index 6c19be1f..392dc3d2 100644
--- a/src/libs/database/impl/Release.cpp
+++ b/src/libs/database/impl/Release.cpp
@@ -28,6 +28,7 @@
#include "database/Image.hpp"
#include "database/Session.hpp"
#include "database/Track.hpp"
+#include "database/Types.hpp"
#include "database/User.hpp"
#include "EnumSetTraits.hpp"
@@ -76,6 +77,12 @@ namespace lms::db
if (params.mediaLibrary.isValid())
query.where("t.media_library_id = ?").bind(params.mediaLibrary);
+ if (params.label.isValid())
+ {
+ query.join("release_label r_l ON r_l.release_id = r.id");
+ query.where("r_l.label_id = ?").bind(params.label);
+ }
+
if (params.directory.isValid())
query.where("t.directory_id = ?").bind(params.directory);
@@ -332,6 +339,24 @@ namespace lms::db
return utils::fetchQuerySingleResult(session.getDboSession()->query>("SELECT l from label l").where("l.name = ?").bind(name));
}
+ void Label::find(Session& session, LabelSortMethod sortMethod, std::function func)
+ {
+ session.checkReadTransaction();
+
+ auto query{ session.getDboSession()->find