diff options
Diffstat (limited to 'src/library')
-rw-r--r-- | src/library/dao/dao.h | 4 | ||||
-rw-r--r-- | src/library/scanner/libraryscanner.cpp | 58 |
2 files changed, 34 insertions, 28 deletions
diff --git a/src/library/dao/dao.h b/src/library/dao/dao.h index 837cc939ef..13bfe53206 100644 --- a/src/library/dao/dao.h +++ b/src/library/dao/dao.h @@ -13,6 +13,10 @@ class DAO { m_database = database; } + const QSqlDatabase& database() const { + return m_database; + } + protected: QSqlDatabase m_database; }; diff --git a/src/library/scanner/libraryscanner.cpp b/src/library/scanner/libraryscanner.cpp index 5aa3e2858e..f75e24c246 100644 --- a/src/library/scanner/libraryscanner.cpp +++ b/src/library/scanner/libraryscanner.cpp @@ -38,6 +38,34 @@ int execCleanupQuery(FwdSqlQuery& query) { return query.numRowsAffected(); } +/// Clean up the database and fix inconsistencies from previous runs. +/// See also: https://bugs.launchpad.net/mixxx/+bug/1846945 +void cleanUpDatabase(const QSqlDatabase& database) { + kLogger.info() + << "Cleaning up database..."; + PerformanceTimer timer; + timer.start(); + const auto sqlStmt = QStringLiteral( + "DELETE FROM LibraryHashes WHERE hash<>:unequalHash " + "AND directory_path NOT IN " + "(SELECT directory FROM track_locations)"); + FwdSqlQuery query(database, sqlStmt); + query.bindValue( + QStringLiteral(":unequalHash"), + static_cast<mixxx::cache_key_signed_t>(mixxx::invalidCacheKey())); + auto numRows = execCleanupQuery(query); + if (numRows < 0) { + kLogger.warning() + << "Failed to delete orphaned directory hashes"; + } else if (numRows > 0) { + kLogger.info() + << "Deleted" << numRows << "orphaned directory hashes"; + } + kLogger.info() + << "Finished database cleanup:" + << timer.elapsed().debugMillisWithUnit(); +} + } // anonymous namespace LibraryScanner::LibraryScanner( @@ -113,34 +141,6 @@ void LibraryScanner::run() { return; } - // Clean up the database and fix inconsistencies from previous runs. - // See also: https://bugs.launchpad.net/mixxx/+bug/1846945 - { - kLogger.info() - << "Cleaning up database..."; - PerformanceTimer timer; - timer.start(); - const auto sqlStmt = QStringLiteral( - "DELETE FROM LibraryHashes WHERE hash <> :unequalHash " - "AND directory_path NOT IN " - "(SELECT directory FROM track_locations)"); - FwdSqlQuery query(dbConnection, sqlStmt); - query.bindValue( - QStringLiteral(":unequalHash"), - static_cast<mixxx::cache_key_signed_t>(mixxx::invalidCacheKey())); - auto numRows = execCleanupQuery(query); - if (numRows < 0) { - kLogger.warning() - << "Failed to delete orphaned directory hashes"; - } else if (numRows > 0) { - kLogger.info() - << "Deleted" << numRows << "orphaned directory hashes)"; - } - kLogger.info() - << "Finished database cleanup:" - << timer.elapsed().debugMillisWithUnit(); - } - m_libraryHashDao.initialize(dbConnection); m_cueDao.initialize(dbConnection); m_trackDao.initialize(dbConnection); @@ -160,6 +160,8 @@ void LibraryScanner::slotStartScan() { kLogger.debug() << "slotStartScan()"; DEBUG_ASSERT(m_state == STARTING); + cleanUpDatabase(m_libraryHashDao.database()); + // Recursively scan each directory in the directories table. m_libraryRootDirs = m_directoryDao.getDirs(); // If there are no directories then we have nothing to do. Cleanup and |