data: fixed file clearing to clear only elements with no more source_locations

This commit is contained in:
Eberhard Graether
2015-10-12 11:42:19 +02:00
parent 29afd80673
commit 27bf5108ab
6 changed files with 35 additions and 18 deletions
+19 -2
View File
@@ -162,9 +162,26 @@ void SqliteStorage::removeNameHierarchyElement(Id id)
void SqliteStorage::removeElementsWithLocationInFiles(const std::vector<Id>& fileIds)
{
CppSQLite3Query q = m_database.execQuery((
"SELECT id, element_id FROM source_location WHERE file_node_id IN (" + utility::join(utility::toStrings(fileIds), ',') + ");"
).c_str());
std::vector<Id> sourceLocationIds;
std::vector<Id> elementIds;
while (!q.eof())
{
sourceLocationIds.push_back(q.getIntField(0, 0));
elementIds.push_back(q.getIntField(1, 0));
q.nextRow();
}
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), ',') + "));"
"DELETE FROM source_location WHERE id IN (" + utility::join(utility::toStrings(sourceLocationIds), ',') + ");"
).c_str());
m_database.execDML((
"DELETE FROM element WHERE element.id IN (" + utility::join(utility::toStrings(elementIds), ',') + ") AND element.id NOT IN "
"( SELECT source_location.element_id FROM source_location WHERE source_location.element_id == element.id );"
).c_str());
}