data: fixed file clearing to clear only elements with no more source_locations
This commit is contained in:
@@ -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());
|
||||
}
|
||||
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user