Clang: Add insert file information to symbol storage

We use INSERT OR REPLACE because it is simpler than the insert and update
and we provide the primary key by our self.

Change-Id: I868e040918cc6c2ed183cecc746c89bec136f974
Reviewed-by: Ivan Donchevskii <ivan.donchevskii@qt.io>
This commit is contained in:
Marco Bubke
2018-01-30 13:31:14 +01:00
parent d36fce4970
commit 95ce58cf32
7 changed files with 37 additions and 1 deletions

View File

@@ -182,6 +182,10 @@ public:
"DELETE FROM newUsedMacros", "DELETE FROM newUsedMacros",
database database
}; };
WriteStatement insertFileInformations{
"INSERT OR REPLACE INTO fileInformations(sourceId, size, lastModified) VALUES (?,?,?)",
database
};
}; };
} // namespace ClangBackEnd } // namespace ClangBackEnd

View File

@@ -108,6 +108,16 @@ public:
insertStatement.write(projectPartId, sourceFilePathId.filePathId); insertStatement.write(projectPartId, sourceFilePathId.filePathId);
} }
void insertFileInformations(const FileInformations &fileInformations)
{
WriteStatement &statement = m_statementFactory.insertFileInformations;
for (const FileInformation &fileInformation : fileInformations)
statement.write(fileInformation.filePathId.filePathId,
fileInformation.size,
fileInformation.lastModified);
}
static Utils::SmallString toJson(const Utils::SmallStringVector &strings) static Utils::SmallString toJson(const Utils::SmallStringVector &strings)
{ {
QJsonDocument document; QJsonDocument document;

View File

@@ -25,6 +25,7 @@
#pragma once #pragma once
#include "fileinformation.h"
#include "projectpartentry.h" #include "projectpartentry.h"
#include "sourcelocationentry.h" #include "sourcelocationentry.h"
#include "symbolentry.h" #include "symbolentry.h"
@@ -50,6 +51,7 @@ public:
virtual void updateProjectPartSources(Utils::SmallStringView projectPartName, virtual void updateProjectPartSources(Utils::SmallStringView projectPartName,
const FilePathIds &sourceFilePathIds) = 0; const FilePathIds &sourceFilePathIds) = 0;
virtual void insertOrUpdateUsedMacros(const UsedMacros &usedMacros) = 0; virtual void insertOrUpdateUsedMacros(const UsedMacros &usedMacros) = 0;
virtual void insertFileInformations(const FileInformations &fileInformations) = 0;
}; };
} // namespace ClangBackEnd } // namespace ClangBackEnd

View File

@@ -73,5 +73,8 @@ public:
MOCK_METHOD2(write, MOCK_METHOD2(write,
void (int, int)); void (int, int));
MOCK_METHOD3(write,
void (uint, uint, uint));
Utils::SmallString sqlStatement; Utils::SmallString sqlStatement;
}; };

View File

@@ -46,4 +46,6 @@ public:
const ClangBackEnd::FilePathIds &sourceFilePathIds)); const ClangBackEnd::FilePathIds &sourceFilePathIds));
MOCK_METHOD1(insertOrUpdateUsedMacros, MOCK_METHOD1(insertOrUpdateUsedMacros,
void (const ClangBackEnd::UsedMacros &usedMacros)); void (const ClangBackEnd::UsedMacros &usedMacros));
MOCK_METHOD1(insertFileInformations,
void (const ClangBackEnd::FileInformations &fileInformations));
}; };

View File

@@ -213,4 +213,10 @@ TEST_F(StorageSqliteStatementFactory, DeleteAllInNewUnusedMacros)
ASSERT_THAT(factory.deleteNewUsedMacrosTableStatement.sqlStatement, ASSERT_THAT(factory.deleteNewUsedMacrosTableStatement.sqlStatement,
Eq("DELETE FROM newUsedMacros")); Eq("DELETE FROM newUsedMacros"));
} }
TEST_F(StorageSqliteStatementFactory, InsertFileInformations)
{
ASSERT_THAT(factory.insertFileInformations.sqlStatement,
Eq("INSERT OR REPLACE INTO fileInformations(sourceId, size, lastModified) VALUES (?,?,?)"));
}
} }

View File

@@ -78,6 +78,7 @@ protected:
MockSqliteWriteStatement &syncNewUsedMacrosStatement = statementFactory.syncNewUsedMacrosStatement; MockSqliteWriteStatement &syncNewUsedMacrosStatement = statementFactory.syncNewUsedMacrosStatement;
MockSqliteWriteStatement &deleteOutdatedUsedMacrosStatement = statementFactory.deleteOutdatedUsedMacrosStatement; MockSqliteWriteStatement &deleteOutdatedUsedMacrosStatement = statementFactory.deleteOutdatedUsedMacrosStatement;
MockSqliteWriteStatement &deleteNewUsedMacrosTableStatement = statementFactory.deleteNewUsedMacrosTableStatement; MockSqliteWriteStatement &deleteNewUsedMacrosTableStatement = statementFactory.deleteNewUsedMacrosTableStatement;
MockSqliteWriteStatement &insertFileInformations = statementFactory.insertFileInformations;
SymbolEntries symbolEntries{{1, {"functionUSR", "function"}}, SymbolEntries symbolEntries{{1, {"functionUSR", "function"}},
{2, {"function2USR", "function2"}}}; {2, {"function2USR", "function2"}}};
SourceLocationEntries sourceLocations{{1, {1, 3}, {42, 23}, SymbolType::Declaration}, SourceLocationEntries sourceLocations{{1, {1, 3}, {42, 23}, SymbolType::Declaration},
@@ -148,7 +149,7 @@ TEST_F(SymbolStorage, AddSymbolsAndSourceLocationsCallsWrite)
{ {
InSequence sequence; InSequence sequence;
EXPECT_CALL(insertSymbolsToNewSymbolsStatement, write(An<uint>(), _, _)).Times(2); EXPECT_CALL(insertSymbolsToNewSymbolsStatement, write(An<uint>(), An<Utils::SmallStringView>(), _)).Times(2);
EXPECT_CALL(insertLocationsToNewLocationsStatement, write(1, 42, 23, 3)); EXPECT_CALL(insertLocationsToNewLocationsStatement, write(1, 42, 23, 3));
EXPECT_CALL(insertLocationsToNewLocationsStatement, write(2, 7, 11, 4)); EXPECT_CALL(insertLocationsToNewLocationsStatement, write(2, 7, 11, 4));
EXPECT_CALL(addNewSymbolsToSymbolsStatement, execute()); EXPECT_CALL(addNewSymbolsToSymbolsStatement, execute());
@@ -230,5 +231,13 @@ TEST_F(SymbolStorage, InsertOrUpdateUsedMacros)
storage.insertOrUpdateUsedMacros({{"FOO", {1, 42}}, {"BAR", {1, 43}}}); storage.insertOrUpdateUsedMacros({{"FOO", {1, 42}}, {"BAR", {1, 43}}});
} }
TEST_F(SymbolStorage, InsertFileInformations)
{
EXPECT_CALL(insertFileInformations, write(TypedEq<uint>(42), TypedEq<uint>(1), TypedEq<uint>(2)));
EXPECT_CALL(insertFileInformations, write(TypedEq<uint>(43), TypedEq<uint>(4), TypedEq<uint>(5)));
storage.insertFileInformations({{{1, 42}, 1, 2}, {{1, 43}, 4, 5}});
}
} }