summaryrefslogtreecommitdiffstats
path: root/src/library
diff options
context:
space:
mode:
authorJan Holthuis <jan.holthuis@ruhr-uni-bochum.de>2020-12-31 00:42:14 +0100
committerGitHub <noreply@github.com>2020-12-31 00:42:14 +0100
commitcb1d8afb361c9f209b4b9f89f05ae35b4e157eac (patch)
treecb046ebd210054208f4a3f03c52f84b970602b64 /src/library
parent3d51ffebd8f27b0308c73fcb92905e332e16f46f (diff)
parentd49e7cef64ab592f6ba9ce0d9d2c34033e636347 (diff)
Merge pull request #3468 from uklotzde/libraryscanner-cleanup
lp1855783: Execute database cleanup before library scan
Diffstat (limited to 'src/library')
-rw-r--r--src/library/dao/dao.h4
-rw-r--r--src/library/scanner/libraryscanner.cpp58
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