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());
}
+2 -2
View File
@@ -156,12 +156,12 @@ void Storage::finishParsing()
buildHierarchyCache();
}
void Storage::prepareParsingFile()
void Storage::prepareParsingFile(const FilePath& filePath)
{
m_sqliteStorage.beginTransaction();
}
void Storage::finishParsingFile()
void Storage::finishParsingFile(const FilePath& filePath)
{
m_sqliteStorage.commitTransaction();
}
+2 -2
View File
@@ -41,8 +41,8 @@ public:
virtual void startParsing();
virtual void finishParsing();
virtual void prepareParsingFile();
virtual void finishParsingFile();
virtual void prepareParsingFile(const FilePath& filePath);
virtual void finishParsingFile(const FilePath& filePath);
virtual void onError(const ParseLocation& location, const std::string& message);
virtual size_t getErrorCount() const;
+2 -2
View File
@@ -58,8 +58,8 @@ public:
virtual void startParsing() = 0;
virtual void finishParsing() = 0;
virtual void prepareParsingFile() = 0;
virtual void finishParsingFile() = 0;
virtual void prepareParsingFile(const FilePath& filePath) = 0;
virtual void finishParsingFile(const FilePath& filePath) = 0;
virtual void onError(const ParseLocation& location, const std::string& message) = 0;
virtual size_t getErrorCount() const = 0;
+9 -9
View File
@@ -29,7 +29,7 @@ void TaskParseCxx::enter()
for (const FilePath& path : m_parser.getFileRegister()->getUnparsedSourceFilePaths())
{
m_sourcePaths.push(path.absolute().str());
m_sourcePaths.push(path.absolute());
}
m_client->startParsing();
@@ -37,7 +37,7 @@ void TaskParseCxx::enter()
Task::TaskState TaskParseCxx::update()
{
std::string sourcePath;
FilePath sourcePath;
bool isSource = false;
FileRegister* fileRegister = m_parser.getFileRegister();
@@ -53,11 +53,11 @@ Task::TaskState TaskParseCxx::update()
std::vector<FilePath> unparsedHeaders = fileRegister->getUnparsedIncludeFilePaths();
if (unparsedHeaders.size())
{
sourcePath = unparsedHeaders[0].str();
sourcePath = unparsedHeaders[0];
}
}
if (!sourcePath.size())
if (sourcePath.empty())
{
return Task::STATE_FINISHED;
}
@@ -65,19 +65,19 @@ Task::TaskState TaskParseCxx::update()
std::stringstream ss;
ss << "analyzing files (ESC to quit): [";
ss << fileRegister->getParsedFilesCount() << "/" << fileRegister->getFilesCount() << "] ";
ss << sourcePath;
ss << sourcePath.str();
MessageStatus(ss.str(), false, true).dispatch();
m_client->prepareParsingFile();
m_client->prepareParsingFile(sourcePath);
m_parser.runTool(std::vector<std::string>(1, sourcePath));
m_parser.runTool(std::vector<std::string>(1, sourcePath.str()));
m_client->finishParsingFile();
m_client->finishParsingFile(sourcePath);
if (isSource)
{
fileRegister->markSourceFileParsed(sourcePath);
fileRegister->markSourceFileParsed(sourcePath.str());
}
return Task::STATE_RUNNING;
+1 -1
View File
@@ -32,7 +32,7 @@ private:
const Parser::Arguments m_arguments;
const std::vector<FilePath> m_files;
std::queue<std::string> m_sourcePaths;
std::queue<FilePath> m_sourcePaths;
utility::TimePoint m_start;
};