diff --git a/src/lib/data/SqliteStorage.cpp b/src/lib/data/SqliteStorage.cpp index e415f068..ba63fe46 100644 --- a/src/lib/data/SqliteStorage.cpp +++ b/src/lib/data/SqliteStorage.cpp @@ -160,6 +160,14 @@ void SqliteStorage::removeNameHierarchyElement(Id id) ).c_str()); } +void SqliteStorage::removeElementsWithLocationInFiles(const std::vector& fileIds) +{ + m_database.execDML(( + "DELETE FROM element WHERE id IN (SELECT element_id FROM source_location " + "WHERE source_location.file_node_id IN (" + utility::join(utility::toStrings(fileIds), ',') + "));" + ).c_str()); +} + void SqliteStorage::removeFile(Id id) { if (isFile(id)) diff --git a/src/lib/data/SqliteStorage.h b/src/lib/data/SqliteStorage.h index 48e3ac12..8c412fc4 100644 --- a/src/lib/data/SqliteStorage.h +++ b/src/lib/data/SqliteStorage.h @@ -40,6 +40,7 @@ public: void removeElement(Id id); void removeNameHierarchyElement(Id id); + void removeElementsWithLocationInFiles(const std::vector& fileIds); void removeFile(Id id); void removeFiles(const std::vector& fileIds); void removeUnusedNameHierarchyElements(); diff --git a/src/lib/data/Storage.cpp b/src/lib/data/Storage.cpp index 78247c2d..d56c1d04 100644 --- a/src/lib/data/Storage.cpp +++ b/src/lib/data/Storage.cpp @@ -87,6 +87,7 @@ void Storage::clearFileElements(const std::vector& filePaths) if (fileNodeIds.size()) { + m_sqliteStorage.removeElementsWithLocationInFiles(fileNodeIds); m_sqliteStorage.removeFiles(fileNodeIds); } }