diff --git a/src/libs/database/impl/Migration.cpp b/src/libs/database/impl/Migration.cpp index 4833d28d..c6e1e1b6 100644 --- a/src/libs/database/impl/Migration.cpp +++ b/src/libs/database/impl/Migration.cpp @@ -34,7 +34,7 @@ namespace lms::db { namespace { - static constexpr Version LMS_DATABASE_VERSION{ 97 }; + static constexpr Version LMS_DATABASE_VERSION{ 98 }; } VersionInfo::VersionInfo() @@ -1417,6 +1417,12 @@ WHERE art.image_id IS NULL)"); dropIndexes(session); } + void migrateFromV97(Session& session) + { + // Removed not that useful indexes + dropIndexes(session); + } + bool doDbMigration(Session& session) { constexpr std::string_view outdatedMsg{ "Outdated database, please rebuild it (delete the .db file and restart)" }; @@ -1490,6 +1496,7 @@ WHERE art.image_id IS NULL)"); { 94, migrateFromV94 }, { 95, migrateFromV95 }, { 96, migrateFromV96 }, + { 97, migrateFromV97 }, }; bool migrationPerformed{}; diff --git a/src/libs/database/impl/Session.cpp b/src/libs/database/impl/Session.cpp index 8d03aaef..fbb5194f 100644 --- a/src/libs/database/impl/Session.cpp +++ b/src/libs/database/impl/Session.cpp @@ -289,10 +289,9 @@ namespace lms::db utils::executeCommand(_session, "CREATE INDEX IF NOT EXISTS track_artist_link_artist_idx ON track_artist_link(artist_id)"); utils::executeCommand(_session, "CREATE INDEX IF NOT EXISTS track_artist_link_artist_mbid_matched_artist_idx ON track_artist_link(artist_mbid_matched, artist_id)"); utils::executeCommand(_session, "CREATE INDEX IF NOT EXISTS track_artist_link_artist_track_idx ON track_artist_link(artist_id, track_id)"); - utils::executeCommand(_session, "CREATE INDEX IF NOT EXISTS track_artist_link_artist_type_idx ON track_artist_link(artist_id, type)"); + utils::executeCommand(_session, "CREATE INDEX IF NOT EXISTS track_artist_link_artist_type_track_idx ON track_artist_link(artist_id, type, track_id)"); utils::executeCommand(_session, "CREATE INDEX IF NOT EXISTS track_artist_link_track_artist_idx ON track_artist_link(track_id, artist_id)"); - utils::executeCommand(_session, "CREATE INDEX IF NOT EXISTS track_artist_link_track_type_idx ON track_artist_link(track_id,type)"); - utils::executeCommand(_session, "CREATE INDEX IF NOT EXISTS track_artist_link_type_track_artist_idx ON track_artist_link(type, track_id, artist_id)"); + utils::executeCommand(_session, "CREATE INDEX IF NOT EXISTS track_artist_link_track_type_idx ON track_artist_link(track_id, type)"); utils::executeCommand(_session, "CREATE INDEX IF NOT EXISTS track_features_track_idx ON track_features(track_id)"); @@ -384,6 +383,8 @@ namespace lms::db bool Session::areAllTablesEmpty() { + checkReadTransaction(); + const std::vector entryList{ utils::fetchQueryResults(_session.query("SELECT name FROM sqlite_master WHERE type='table' AND name NOT LIKE 'sqlite_%'")) }; return std::all_of(entryList.cbegin(), entryList.cend(), [this](const std::string& entry) { diff --git a/src/libs/database/include/database/Session.hpp b/src/libs/database/include/database/Session.hpp index c07f43c5..b1e3f5c7 100644 --- a/src/libs/database/include/database/Session.hpp +++ b/src/libs/database/include/database/Session.hpp @@ -47,6 +47,8 @@ namespace lms::db void execute(std::string_view statement); + void optimize(); // need to acquire a write transaction + // All these methods will acquire transactions void fullAnalyze(); // helper for retrieveEntriesToAnalyze + analyzeEntry void retrieveEntriesToAnalyze(std::vector& entryList);