summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarco Bubke <marco.bubke@qt.io>2021-03-24 18:10:55 +0100
committerMarco Bubke <marco.bubke@qt.io>2021-03-26 12:24:37 +0000
commit7785a3a65184102f3b2679c36092db8b33db8130 (patch)
tree243fe31a40114f60611edc29fc10cf817db6de5c
parenteb516063d371ad3f001d664d44cd3a735c98157b (diff)
downloadqt-creator-7785a3a65184102f3b2679c36092db8b33db8130.tar.gz
Sqlite: Move result count to class declaration
It move the magic number of column results to the sql statement and improves the mock a little bit. Change-Id: I101067444cf27ec5dea0c72de7fd484a7e8710f0 Reviewed-by: Thomas Hartmann <thomas.hartmann@qt.io>
-rw-r--r--src/libs/clangsupport/filepathstorage.h26
-rw-r--r--src/libs/clangsupport/filepathstoragesqlitestatementfactory.h33
-rw-r--r--src/libs/clangsupport/projectpartsstorage.h39
-rw-r--r--src/libs/sqlite/CMakeLists.txt6
-rw-r--r--src/libs/sqlite/sqlite-lib.pri3
-rw-r--r--src/libs/sqlite/sqlite-source.pri3
-rw-r--r--src/libs/sqlite/sqlitebasestatement.h101
-rw-r--r--src/libs/sqlite/sqlitedatabase.cpp10
-rw-r--r--src/libs/sqlite/sqlitedatabase.h8
-rw-r--r--src/libs/sqlite/sqlitedatabasebackend.cpp8
-rw-r--r--src/libs/sqlite/sqlitereadstatement.cpp45
-rw-r--r--src/libs/sqlite/sqlitereadstatement.h34
-rw-r--r--src/libs/sqlite/sqlitereadwritestatement.cpp36
-rw-r--r--src/libs/sqlite/sqlitereadwritestatement.h24
-rw-r--r--src/libs/sqlite/sqlitesessions.cpp24
-rw-r--r--src/libs/sqlite/sqlitewritestatement.cpp43
-rw-r--r--src/libs/sqlite/sqlitewritestatement.h19
-rw-r--r--src/plugins/clangrefactoring/querysqlitestatementfactory.h31
-rw-r--r--src/plugins/clangrefactoring/symbolquery.h64
-rw-r--r--src/plugins/qmldesigner/designercore/imagecache/imagecachestorage.h9
-rw-r--r--src/tools/clangpchmanagerbackend/source/builddependenciesstorage.h50
-rw-r--r--src/tools/clangpchmanagerbackend/source/precompiledheaderstorage.h20
-rw-r--r--src/tools/clangrefactoringbackend/source/symbolstorage.h5
-rw-r--r--tests/unit/unittest/CMakeLists.txt4
-rw-r--r--tests/unit/unittest/builddependenciesstorage-test.cpp155
-rw-r--r--tests/unit/unittest/filepathcache-test.cpp20
-rw-r--r--tests/unit/unittest/filepathstorage-test.cpp209
-rw-r--r--tests/unit/unittest/filepathstoragesqlitestatementfactory-test.cpp10
-rw-r--r--tests/unit/unittest/imagecachestorage-test.cpp9
-rw-r--r--tests/unit/unittest/lastchangedrowid-test.cpp12
-rw-r--r--tests/unit/unittest/mockfilepathstorage.h10
-rw-r--r--tests/unit/unittest/mocksqlitedatabase.h73
-rw-r--r--tests/unit/unittest/mocksqlitereadstatement.cpp284
-rw-r--r--tests/unit/unittest/mocksqlitereadstatement.h334
-rw-r--r--tests/unit/unittest/mocksqlitestatement.h11
-rw-r--r--tests/unit/unittest/mocksqlitewritestatement.h118
-rw-r--r--tests/unit/unittest/mocksymbolstorage.h2
-rw-r--r--tests/unit/unittest/precompiledheaderstorage-test.cpp31
-rw-r--r--tests/unit/unittest/projectpartsstorage-test.cpp152
-rw-r--r--tests/unit/unittest/refactoringdatabaseinitializer-test.cpp190
-rw-r--r--tests/unit/unittest/sqlitedatabase-test.cpp2
-rw-r--r--tests/unit/unittest/sqlitedatabasemock.h3
-rw-r--r--tests/unit/unittest/sqlitereadstatementmock.cpp29
-rw-r--r--tests/unit/unittest/sqlitereadstatementmock.h217
-rw-r--r--tests/unit/unittest/sqlitesessions-test.cpp12
-rw-r--r--tests/unit/unittest/sqlitestatement-test.cpp289
-rw-r--r--tests/unit/unittest/sqlitetable-test.cpp28
-rw-r--r--tests/unit/unittest/sqliteteststatement.h6
-rw-r--r--tests/unit/unittest/sqlitetransaction-test.cpp4
-rw-r--r--tests/unit/unittest/sqlitewritestatementmock.h27
-rw-r--r--tests/unit/unittest/stringcache-test.cpp6
-rw-r--r--tests/unit/unittest/symbolindexer-test.cpp2
-rw-r--r--tests/unit/unittest/symbolindexertaskqueue-test.cpp4
-rw-r--r--tests/unit/unittest/symbolindexing-test.cpp2
-rw-r--r--tests/unit/unittest/symbolquery-test.cpp37
-rw-r--r--tests/unit/unittest/symbolstorage-test.cpp58
-rw-r--r--tests/unit/unittest/unittest.pro8
-rw-r--r--tests/unit/unittest/unittest.qbs4
58 files changed, 1037 insertions, 1966 deletions
diff --git a/src/libs/clangsupport/filepathstorage.h b/src/libs/clangsupport/filepathstorage.h
index 083782fec2..11c30939cd 100644
--- a/src/libs/clangsupport/filepathstorage.h
+++ b/src/libs/clangsupport/filepathstorage.h
@@ -39,7 +39,8 @@ namespace ClangBackEnd {
template <typename StatementFactory>
class FilePathStorage
{
- using ReadStatement = typename StatementFactory::ReadStatement;
+ template<int ResultCount>
+ using ReadStatement = typename StatementFactory::template ReadStatement<ResultCount>;
using WriteStatement = typename StatementFactory::WriteStatement;
using Database = typename StatementFactory::Database;
@@ -84,7 +85,7 @@ public:
Utils::optional<int> readDirectoryId(Utils::SmallStringView directoryPath)
{
- ReadStatement &statement = m_statementFactory.selectDirectoryIdFromDirectoriesByDirectoryPath;
+ auto &statement = m_statementFactory.selectDirectoryIdFromDirectoriesByDirectoryPath;
return statement.template value<int>(directoryPath);
}
@@ -103,7 +104,7 @@ public:
try {
Sqlite::DeferredTransaction transaction{m_statementFactory.database};
- ReadStatement &statement = m_statementFactory.selectDirectoryPathFromDirectoriesByDirectoryId;
+ auto &statement = m_statementFactory.selectDirectoryPathFromDirectoriesByDirectoryId;
auto optionalDirectoryPath = statement.template value<Utils::PathString>(directoryPathId);
@@ -123,9 +124,9 @@ public:
try {
Sqlite::DeferredTransaction transaction{m_statementFactory.database};
- ReadStatement &statement = m_statementFactory.selectAllDirectories;
+ auto &statement = m_statementFactory.selectAllDirectories;
- auto directories = statement.template values<Sources::Directory, 2>(256);
+ auto directories = statement.template values<Sources::Directory>(256);
transaction.commit();
@@ -164,7 +165,7 @@ public:
int writeSourceId(int directoryId, Utils::SmallStringView sourceName)
{
- WriteStatement &statement = m_statementFactory.insertIntoSources;
+ auto &statement = m_statementFactory.insertIntoSources;
statement.write(directoryId, sourceName);
@@ -173,7 +174,7 @@ public:
Utils::optional<int> readSourceId(int directoryId, Utils::SmallStringView sourceName)
{
- ReadStatement &statement = m_statementFactory.selectSourceIdFromSourcesByDirectoryIdAndSourceName;
+ auto &statement = m_statementFactory.selectSourceIdFromSourcesByDirectoryIdAndSourceName;
return statement.template value<int>(directoryId, sourceName);
}
@@ -183,9 +184,10 @@ public:
try {
Sqlite::DeferredTransaction transaction{m_statementFactory.database};
- ReadStatement &statement = m_statementFactory.selectSourceNameAndDirectoryIdFromSourcesBySourceId;
+ auto &statement = m_statementFactory.selectSourceNameAndDirectoryIdFromSourcesBySourceId;
- auto optionalSourceName = statement.template value<Sources::SourceNameAndDirectoryId, 2>(sourceId);
+ auto optionalSourceName = statement.template value<Sources::SourceNameAndDirectoryId>(
+ sourceId);
if (!optionalSourceName)
throw SourceNameIdDoesNotExists();
@@ -203,7 +205,7 @@ public:
try {
Sqlite::DeferredTransaction transaction{m_statementFactory.database};
- ReadStatement &statement = m_statementFactory.selectDirectoryIdFromSourcesBySourceId;
+ auto &statement = m_statementFactory.selectDirectoryIdFromSourcesBySourceId;
auto optionalDirectoryId = statement.template value<int>(sourceId);
@@ -223,9 +225,9 @@ public:
try {
Sqlite::DeferredTransaction transaction{m_statementFactory.database};
- ReadStatement &statement = m_statementFactory.selectAllSources;
+ auto &statement = m_statementFactory.selectAllSources;
- auto sources = statement.template values<Sources::Source, 3>(8192);
+ auto sources = statement.template values<Sources::Source>(8192);
transaction.commit();
diff --git a/src/libs/clangsupport/filepathstoragesqlitestatementfactory.h b/src/libs/clangsupport/filepathstoragesqlitestatementfactory.h
index f0d261dd49..1698fcf064 100644
--- a/src/libs/clangsupport/filepathstoragesqlitestatementfactory.h
+++ b/src/libs/clangsupport/filepathstoragesqlitestatementfactory.h
@@ -35,8 +35,9 @@ class FilePathStorageSqliteStatementFactory
{
public:
using Database = DatabaseType;
- using ReadStatement = typename DatabaseType::ReadStatement;
- using WriteStatement = typename DatabaseType::WriteStatement;
+ template<int ResultCount>
+ using ReadStatement = typename Database::template ReadStatement<ResultCount>;
+ using WriteStatement = typename Database::WriteStatement;
FilePathStorageSqliteStatementFactory(Database &database)
: database(database)
@@ -45,32 +46,28 @@ public:
public:
Database &database;
- ReadStatement selectDirectoryIdFromDirectoriesByDirectoryPath{
- "SELECT directoryId FROM directories WHERE directoryPath = ?",
- database
- };
- ReadStatement selectDirectoryPathFromDirectoriesByDirectoryId{
+ ReadStatement<1> selectDirectoryIdFromDirectoriesByDirectoryPath{
+ "SELECT directoryId FROM directories WHERE directoryPath = ?", database};
+ ReadStatement<1> selectDirectoryPathFromDirectoriesByDirectoryId{
"SELECT directoryPath FROM directories WHERE directoryId = ?", database};
- ReadStatement selectAllDirectories{"SELECT directoryPath, directoryId FROM directories", database};
+ ReadStatement<2> selectAllDirectories{"SELECT directoryPath, directoryId FROM directories",
+ database};
WriteStatement insertIntoDirectories{
"INSERT INTO directories(directoryPath) VALUES (?)",
database
};
- ReadStatement selectSourceIdFromSourcesByDirectoryIdAndSourceName{
- "SELECT sourceId FROM sources WHERE directoryId = ? AND sourceName = ?",
- database
- };
- ReadStatement selectSourceNameAndDirectoryIdFromSourcesBySourceId{
- "SELECT sourceName, directoryId FROM sources WHERE sourceId = ?",
- database
- };
- ReadStatement selectDirectoryIdFromSourcesBySourceId{
+ ReadStatement<1> selectSourceIdFromSourcesByDirectoryIdAndSourceName{
+ "SELECT sourceId FROM sources WHERE directoryId = ? AND sourceName = ?", database};
+ ReadStatement<2> selectSourceNameAndDirectoryIdFromSourcesBySourceId{
+ "SELECT sourceName, directoryId FROM sources WHERE sourceId = ?", database};
+ ReadStatement<1> selectDirectoryIdFromSourcesBySourceId{
"SELECT directoryId FROM sources WHERE sourceId = ?", database};
WriteStatement insertIntoSources{
"INSERT INTO sources(directoryId, sourceName) VALUES (?,?)",
database
};
- ReadStatement selectAllSources{"SELECT sourceName, directoryId, sourceId FROM sources", database};
+ ReadStatement<3> selectAllSources{"SELECT sourceName, directoryId, sourceId FROM sources",
+ database};
};
} // namespace ClangBackEnd
diff --git a/src/libs/clangsupport/projectpartsstorage.h b/src/libs/clangsupport/projectpartsstorage.h
index 6363ae708f..fa211b83bc 100644
--- a/src/libs/clangsupport/projectpartsstorage.h
+++ b/src/libs/clangsupport/projectpartsstorage.h
@@ -36,7 +36,8 @@ namespace ClangBackEnd {
template<typename Database = Sqlite::Database>
class ProjectPartsStorage final : public ProjectPartsStorageInterface
{
- using ReadStatement = typename Database::ReadStatement;
+ template<int ResultCount>
+ using ReadStatement = typename Database::template ReadStatement<ResultCount>;
using WriteStatement = typename Database::WriteStatement;
public:
@@ -52,7 +53,7 @@ public:
try {
Sqlite::DeferredTransaction transaction{database};
- auto values = fetchProjectPartsStatement.template values<ProjectPartContainer, 8>(4096);
+ auto values = fetchProjectPartsStatement.template values<ProjectPartContainer>(4096);
transaction.commit();
@@ -91,7 +92,7 @@ public:
Sqlite::DeferredTransaction transaction{database};
for (ProjectPartId projectPartId : projectPartIds) {
- auto value = fetchProjectPartByIdStatement.template value<ProjectPartContainer, 8>(
+ auto value = fetchProjectPartByIdStatement.template value<ProjectPartContainer>(
projectPartId.projectPathId);
if (value) {
value->headerPathIds = fetchHeaders(projectPartId);
@@ -243,9 +244,9 @@ public:
try {
Sqlite::DeferredTransaction transaction{database};
- ReadStatement &statement = getProjectPartArtefactsBySourceId;
+ auto &statement = getProjectPartArtefactsBySourceId;
- auto value = statement.template value<ProjectPartArtefact, 8>(sourceId.filePathId);
+ auto value = statement.template value<ProjectPartArtefact>(sourceId.filePathId);
transaction.commit();
@@ -260,9 +261,9 @@ public:
try {
Sqlite::DeferredTransaction transaction{database};
- ReadStatement &statement = getProjectPartArtefactsByProjectPartId;
+ auto &statement = getProjectPartArtefactsByProjectPartId;
- auto value = statement.template value<ProjectPartArtefact, 8>(projectPartId.projectPathId);
+ auto value = statement.template value<ProjectPartArtefact>(projectPartId.projectPathId);
transaction.commit();
@@ -342,9 +343,9 @@ public:
try {
Sqlite::DeferredTransaction transaction{database};
- ReadStatement &statement = fetchAllProjectPartNamesAndIdsStatement;
+ auto &statement = fetchAllProjectPartNamesAndIdsStatement;
- auto values = statement.template values<Internal::ProjectPartNameId, 2>(256);
+ auto values = statement.template values<Internal::ProjectPartNameId>(256);
transaction.commit();
@@ -357,18 +358,18 @@ public:
public:
Sqlite::ImmediateNonThrowingDestructorTransaction transaction;
Database &database;
- mutable ReadStatement fetchProjectPartIdStatement{
+ mutable ReadStatement<1> fetchProjectPartIdStatement{
"SELECT projectPartId FROM projectParts WHERE projectPartName = ?", database};
mutable WriteStatement insertProjectPartNameStatement{
"INSERT INTO projectParts(projectPartName) VALUES (?)", database};
- mutable ReadStatement fetchProjectPartNameStatement{
+ mutable ReadStatement<1> fetchProjectPartNameStatement{
"SELECT projectPartName FROM projectParts WHERE projectPartId = ?", database};
- mutable ReadStatement fetchProjectPartsStatement{
+ mutable ReadStatement<8> fetchProjectPartsStatement{
"SELECT toolChainArguments, compilerMacros, systemIncludeSearchPaths, "
"projectIncludeSearchPaths, projectPartId, language, languageVersion, languageExtension "
"FROM projectParts",
database};
- mutable ReadStatement fetchProjectPartByIdStatement{
+ mutable ReadStatement<8> fetchProjectPartByIdStatement{
"SELECT toolChainArguments, compilerMacros, systemIncludeSearchPaths, "
"projectIncludeSearchPaths, projectPartId, language, languageVersion, languageExtension "
"FROM projectParts WHERE projectPartId = ?",
@@ -378,13 +379,13 @@ public:
"systemIncludeSearchPaths=?004, projectIncludeSearchPaths=?005, language=?006, "
"languageVersion=?007, languageExtension=?008 WHERE projectPartId = ?001",
database};
- mutable ReadStatement getProjectPartArtefactsBySourceId{
+ mutable ReadStatement<8> getProjectPartArtefactsBySourceId{
"SELECT toolChainArguments, compilerMacros, systemIncludeSearchPaths, "
"projectIncludeSearchPaths, projectPartId, language, languageVersion, languageExtension "
"FROM projectParts WHERE projectPartId = (SELECT "
"projectPartId FROM projectPartsFiles WHERE sourceId = ?)",
database};
- mutable ReadStatement getProjectPartArtefactsByProjectPartId{
+ mutable ReadStatement<8> getProjectPartArtefactsByProjectPartId{
"SELECT toolChainArguments, compilerMacros, systemIncludeSearchPaths, "
"projectIncludeSearchPaths, projectPartId, language, languageVersion, languageExtension "
"FROM projectParts WHERE projectPartId = ?",
@@ -397,17 +398,17 @@ public:
"INSERT INTO projectPartsHeaders(projectPartId, sourceId) VALUES (?,?)", database};
WriteStatement insertProjectPartsSourcesStatement{
"INSERT INTO projectPartsSources(projectPartId, sourceId) VALUES (?,?)", database};
- mutable ReadStatement fetchProjectPartsHeadersByIdStatement{
+ mutable ReadStatement<1> fetchProjectPartsHeadersByIdStatement{
"SELECT sourceId FROM projectPartsHeaders WHERE projectPartId = ? ORDER BY sourceId",
database};
- mutable ReadStatement fetchProjectPartsSourcesByIdStatement{
+ mutable ReadStatement<1> fetchProjectPartsSourcesByIdStatement{
"SELECT sourceId FROM projectPartsSources WHERE projectPartId = ? ORDER BY sourceId",
database};
- mutable ReadStatement fetchProjectPrecompiledHeaderBuildTimeStatement{
+ mutable ReadStatement<1> fetchProjectPrecompiledHeaderBuildTimeStatement{
"SELECT projectPchBuildTime FROM precompiledHeaders WHERE projectPartId = ?", database};
WriteStatement resetDependentIndexingTimeStampsStatement{
"UPDATE fileStatuses SET indexingTimeStamp = NULL WHERE sourceId = ?", database};
- mutable ReadStatement fetchAllProjectPartNamesAndIdsStatement{
+ mutable ReadStatement<2> fetchAllProjectPartNamesAndIdsStatement{
"SELECT projectPartName, projectPartId FROM projectParts", database};
};
} // namespace ClangBackEnd
diff --git a/src/libs/sqlite/CMakeLists.txt b/src/libs/sqlite/CMakeLists.txt
index f684fa0849..4bf3ae91df 100644
--- a/src/libs/sqlite/CMakeLists.txt
+++ b/src/libs/sqlite/CMakeLists.txt
@@ -30,15 +30,15 @@ add_qtc_library(Sqlite
sqliteexception.cpp sqliteexception.h
sqliteglobal.cpp sqliteglobal.h
sqliteindex.h
- sqlitereadstatement.cpp sqlitereadstatement.h
- sqlitereadwritestatement.cpp sqlitereadwritestatement.h
+ sqlitereadstatement.h
+ sqlitereadwritestatement.h
sqlitesessionchangeset.cpp sqlitesessionchangeset.h
sqlitesessions.cpp sqlitesessions.h
sqlitetable.h
sqlitetransaction.h
sqlitetransaction.h
sqlitevalue.h
- sqlitewritestatement.cpp sqlitewritestatement.h
+ sqlitewritestatement.h
sqlstatementbuilder.cpp sqlstatementbuilder.h
sqlstatementbuilderexception.h
tableconstraints.h
diff --git a/src/libs/sqlite/sqlite-lib.pri b/src/libs/sqlite/sqlite-lib.pri
index fd02c8801f..87b63eb388 100644
--- a/src/libs/sqlite/sqlite-lib.pri
+++ b/src/libs/sqlite/sqlite-lib.pri
@@ -15,11 +15,8 @@ SOURCES += \
$$PWD/sqlitedatabasebackend.cpp \
$$PWD/sqliteexception.cpp \
$$PWD/sqliteglobal.cpp \
- $$PWD/sqlitereadstatement.cpp \
- $$PWD/sqlitereadwritestatement.cpp \
$$PWD/sqlitesessionchangeset.cpp \
$$PWD/sqlitesessions.cpp \
- $$PWD/sqlitewritestatement.cpp \
$$PWD/sqlstatementbuilder.cpp \
$$PWD/utf8string.cpp \
$$PWD/utf8stringvector.cpp \
diff --git a/src/libs/sqlite/sqlite-source.pri b/src/libs/sqlite/sqlite-source.pri
index 5729293901..e951f2e1a7 100644
--- a/src/libs/sqlite/sqlite-source.pri
+++ b/src/libs/sqlite/sqlite-source.pri
@@ -10,12 +10,9 @@ SOURCES += \
sqlitedatabaseconnectionproxy.cpp \
sqliteexception.cpp \
sqliteglobal.cpp \
- sqlitereadstatement.cpp \
- sqlitereadwritestatement.cpp \
sqlitestatement.cpp \
sqlitetransaction.cpp \
sqliteworkerthread.cpp \
- sqlitewritestatement.cpp \
sqlstatementbuilder.cpp \
utf8string.cpp \
utf8stringvector.cpp \
diff --git a/src/libs/sqlite/sqlitebasestatement.h b/src/libs/sqlite/sqlitebasestatement.h
index d59e9adb14..68b821a14c 100644
--- a/src/libs/sqlite/sqlitebasestatement.h
+++ b/src/libs/sqlite/sqlitebasestatement.h
@@ -159,7 +159,7 @@ extern template SQLITE_EXPORT Utils::SmallStringView BaseStatement::fetchValue<U
extern template SQLITE_EXPORT Utils::SmallString BaseStatement::fetchValue<Utils::SmallString>(int column) const;
extern template SQLITE_EXPORT Utils::PathString BaseStatement::fetchValue<Utils::PathString>(int column) const;
-template <typename BaseStatement>
+template<typename BaseStatement, int ResultCount>
class StatementImplementation : public BaseStatement
{
@@ -192,18 +192,15 @@ public:
resetter.reset();
}
- template <typename ResultType,
- int ResultTypeCount = 1>
+ template<typename ResultType>
std::vector<ResultType> values(std::size_t reserveSize)
{
- BaseStatement::checkColumnCount(ResultTypeCount);
-
Resetter resetter{*this};
std::vector<ResultType> resultValues;
resultValues.reserve(std::max(reserveSize, m_maximumResultCount));
while (BaseStatement::next())
- emplaceBackValues<ResultTypeCount>(resultValues);
+ emplaceBackValues(resultValues);
setMaximumResultCount(resultValues.size());
@@ -212,11 +209,9 @@ public:
return resultValues;
}
- template<typename ResultType, int ResultTypeCount = 1, typename... QueryTypes>
+ template<typename ResultType, typename... QueryTypes>
auto values(std::size_t reserveSize, const QueryTypes &...queryValues)
{
- BaseStatement::checkColumnCount(ResultTypeCount);
-
Resetter resetter{*this};
std::vector<ResultType> resultValues;
resultValues.reserve(std::max(reserveSize, m_maximumResultCount));
@@ -224,7 +219,7 @@ public:
bindValues(queryValues...);
while (BaseStatement::next())
- emplaceBackValues<ResultTypeCount>(resultValues);
+ emplaceBackValues(resultValues);
setMaximumResultCount(resultValues.size());
@@ -233,66 +228,16 @@ public:
return resultValues;
}
- template<typename ResultType, int ResultTypeCount = 1, typename QueryElementType>
- auto values(std::size_t reserveSize, const std::vector<QueryElementType> &queryValues)
- {
- BaseStatement::checkColumnCount(ResultTypeCount);
-
- std::vector<ResultType> resultValues;
- resultValues.reserve(std::max(reserveSize, m_maximumResultCount));
-
- for (const QueryElementType &queryValue : queryValues) {
- Resetter resetter{*this};
- bindValues(queryValue);
-
- while (BaseStatement::next())
- emplaceBackValues<ResultTypeCount>(resultValues);
-
- setMaximumResultCount(resultValues.size());
-
- resetter.reset();
- }
-
- return resultValues;
- }
-
- template<typename ResultType, int ResultTypeCount = 1, typename... QueryElementTypes>
- auto values(std::size_t reserveSize,
- const std::vector<std::tuple<QueryElementTypes...>> &queryTuples)
- {
- BaseStatement::checkColumnCount(ResultTypeCount);
-
- using Container = std::vector<ResultType>;
- Container resultValues;
- resultValues.reserve(std::max(reserveSize, m_maximumResultCount));
-
- for (const auto &queryTuple : queryTuples) {
- Resetter resetter{*this};
- bindTupleValues(queryTuple);
-
- while (BaseStatement::next())
- emplaceBackValues<ResultTypeCount>(resultValues);
-
- setMaximumResultCount(resultValues.size());
-
- resetter.reset();
- }
-
- return resultValues;
- }
-
- template<typename ResultType, int ResultTypeCount = 1, typename... QueryTypes>
+ template<typename ResultType, typename... QueryTypes>
auto value(const QueryTypes &...queryValues)
{
- BaseStatement::checkColumnCount(ResultTypeCount);
-
Resetter resetter{*this};
Utils::optional<ResultType> resultValue;
bindValues(queryValues...);
if (BaseStatement::next())
- resultValue = assignValue<Utils::optional<ResultType>, ResultTypeCount>();
+ resultValue = assignValue<Utils::optional<ResultType>>();
resetter.reset();
@@ -311,17 +256,15 @@ public:
return statement.template fetchValue<Type>(0);
}
- template<int ResultTypeCount = 1, typename Callable, typename... QueryTypes>
+ template<typename Callable, typename... QueryTypes>
void readCallback(Callable &&callable, const QueryTypes &...queryValues)
{
- BaseStatement::checkColumnCount(ResultTypeCount);
-
Resetter resetter{*this};
bindValues(queryValues...);
while (BaseStatement::next()) {
- auto control = callCallable<ResultTypeCount>(callable);
+ auto control = callCallable(callable);
if (control == CallbackControl::Abort)
break;
@@ -333,14 +276,12 @@ public:
template<int ResultTypeCount = 1, typename Container, typename... QueryTypes>
void readTo(Container &container, const QueryTypes &...queryValues)
{
- BaseStatement::checkColumnCount(ResultTypeCount);
-
Resetter resetter{*this};
bindValues(queryValues...);
while (BaseStatement::next())
- emplaceBackValues<ResultTypeCount>(container);
+ emplaceBackValues(container);
resetter.reset();
}
@@ -399,18 +340,21 @@ private:
int column;
};
- template <typename ContainerType,
- int... ColumnIndices>
+ constexpr int resultCount(int localResultCount) const
+ {
+ return ResultCount < 0 ? localResultCount : ResultCount;
+ }
+
+ template<typename ContainerType, int... ColumnIndices>
void emplaceBackValues(ContainerType &container, std::integer_sequence<int, ColumnIndices...>)
{
container.emplace_back(ValueGetter(*this, ColumnIndices)...);
}
- template <int ResultTypeCount,
- typename ContainerType>
+ template<typename ContainerType>
void emplaceBackValues(ContainerType &container)
{
- emplaceBackValues(container, std::make_integer_sequence<int, ResultTypeCount>{});
+ emplaceBackValues(container, std::make_integer_sequence<int, ResultCount>{});
}
template <typename ResultOptionalType,
@@ -420,11 +364,10 @@ private:
return ResultOptionalType(Utils::in_place, ValueGetter(*this, ColumnIndices)...);
}
- template <typename ResultOptionalType,
- int ResultTypeCount>
+ template<typename ResultOptionalType>
ResultOptionalType assignValue()
{
- return assignValue<ResultOptionalType>(std::make_integer_sequence<int, ResultTypeCount>{});
+ return assignValue<ResultOptionalType>(std::make_integer_sequence<int, ResultCount>{});
}
template<typename Callable, int... ColumnIndices>
@@ -433,10 +376,10 @@ private:
return std::invoke(callable, ValueGetter(*this, ColumnIndices)...);
}
- template<int ResultTypeCount, typename Callable>
+ template<typename Callable>
CallbackControl callCallable(Callable &&callable)
{
- return callCallable(callable, std::make_integer_sequence<int, ResultTypeCount>{});
+ return callCallable(callable, std::make_integer_sequence<int, ResultCount>{});
}
template<typename ValueType>
diff --git a/src/libs/sqlite/sqlitedatabase.cpp b/src/libs/sqlite/sqlitedatabase.cpp
index 994dfd3c03..2cae9b2fc3 100644
--- a/src/libs/sqlite/sqlitedatabase.cpp
+++ b/src/libs/sqlite/sqlitedatabase.cpp
@@ -47,11 +47,11 @@ public:
public:
Database &database;
- ReadWriteStatement deferredBegin{"BEGIN", database};
- ReadWriteStatement immediateBegin{"BEGIN IMMEDIATE", database};
- ReadWriteStatement exclusiveBegin{"BEGIN EXCLUSIVE", database};
- ReadWriteStatement commitBegin{"COMMIT", database};
- ReadWriteStatement rollbackBegin{"ROLLBACK", database};
+ ReadWriteStatement<> deferredBegin{"BEGIN", database};
+ ReadWriteStatement<> immediateBegin{"BEGIN IMMEDIATE", database};
+ ReadWriteStatement<> exclusiveBegin{"BEGIN EXCLUSIVE", database};
+ ReadWriteStatement<> commitBegin{"COMMIT", database};
+ ReadWriteStatement<> rollbackBegin{"ROLLBACK", database};
Sessions sessions{database, "main", "databaseSessions"};
};
diff --git a/src/libs/sqlite/sqlitedatabase.h b/src/libs/sqlite/sqlitedatabase.h
index 63afb6e72e..077e2723e0 100644
--- a/src/libs/sqlite/sqlitedatabase.h
+++ b/src/libs/sqlite/sqlitedatabase.h
@@ -42,8 +42,10 @@ namespace Sqlite {
using namespace std::chrono_literals;
+template<int ResultCount>
class ReadStatement;
class WriteStatement;
+template<int ResultCount>
class ReadWriteStatement;
class SQLITE_EXPORT Database final : public TransactionInterface, public DatabaseInterface
@@ -54,9 +56,11 @@ class SQLITE_EXPORT Database final : public TransactionInterface, public Databas
public:
using MutexType = std::mutex;
- using ReadStatement = Sqlite::ReadStatement;
+ template<int ResultCount>
+ using ReadStatement = Sqlite::ReadStatement<ResultCount>;
using WriteStatement = Sqlite::WriteStatement;
- using ReadWriteStatement = Sqlite::ReadWriteStatement;
+ template<int ResultCount = 0>
+ using ReadWriteStatement = Sqlite::ReadWriteStatement<ResultCount>;
using BusyHandler = DatabaseBackend::BusyHandler;
Database();
diff --git a/src/libs/sqlite/sqlitedatabasebackend.cpp b/src/libs/sqlite/sqlitedatabasebackend.cpp
index 46097406e8..0101e82626 100644
--- a/src/libs/sqlite/sqlitedatabasebackend.cpp
+++ b/src/libs/sqlite/sqlitedatabasebackend.cpp
@@ -128,7 +128,9 @@ sqlite3 *DatabaseBackend::sqliteDatabaseHandle() const
void DatabaseBackend::setPragmaValue(Utils::SmallStringView pragmaKey, Utils::SmallStringView newPragmaValue)
{
- execute(Utils::SmallString{"PRAGMA ", pragmaKey, "='", newPragmaValue, "'"});
+ ReadWriteStatement<1>{Utils::SmallString{"PRAGMA ", pragmaKey, "='", newPragmaValue, "'"},
+ m_database}
+ .execute();
Utils::SmallString pragmeValueInDatabase = toValue<Utils::SmallString>("PRAGMA " + pragmaKey);
checkPragmaValue(pragmeValueInDatabase, newPragmaValue);
@@ -172,7 +174,7 @@ void DatabaseBackend::setLastInsertedRowId(int64_t rowId)
void DatabaseBackend::execute(Utils::SmallStringView sqlStatement)
{
try {
- ReadWriteStatement statement(sqlStatement, m_database);
+ ReadWriteStatement<0> statement(sqlStatement, m_database);
statement.execute();
} catch (StatementIsBusy &) {
execute(sqlStatement);
@@ -454,7 +456,7 @@ template <typename Type>
Type DatabaseBackend::toValue(Utils::SmallStringView sqlStatement)
{
try {
- ReadWriteStatement statement(sqlStatement, m_database);
+ ReadWriteStatement<1> statement(sqlStatement, m_database);
statement.next();
diff --git a/src/libs/sqlite/sqlitereadstatement.cpp b/src/libs/sqlite/sqlitereadstatement.cpp
deleted file mode 100644
index 91e672985b..0000000000
--- a/src/libs/sqlite/sqlitereadstatement.cpp
+++ /dev/null
@@ -1,45 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of Qt Creator.
-**
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-****************************************************************************/
-
-#include "sqlitereadstatement.h"
-
-#include "sqlite3.h"
-
-namespace Sqlite {
-
-ReadStatement::ReadStatement(Utils::SmallStringView sqlStatement,
- Database &database)
- : StatementImplementation(sqlStatement, database)
-{
- checkIsReadOnlyStatement();
-}
-
-void ReadStatement::checkIsReadOnlyStatement()
-{
- if (!isReadOnlyStatement())
- throw NotReadOnlySqlStatement("SqliteStatement::SqliteReadStatement: is not read only statement!");
-}
-
-} // namespace Sqlite
diff --git a/src/libs/sqlite/sqlitereadstatement.h b/src/libs/sqlite/sqlitereadstatement.h
index 236aab67f1..eb9c4e5cc5 100644
--- a/src/libs/sqlite/sqlitereadstatement.h
+++ b/src/libs/sqlite/sqlitereadstatement.h
@@ -29,19 +29,37 @@
namespace Sqlite {
-class SQLITE_EXPORT ReadStatement final : protected StatementImplementation<BaseStatement>
+template<int ResultCount>
+class ReadStatement final : protected StatementImplementation<BaseStatement, ResultCount>
{
+ using Base = StatementImplementation<BaseStatement, ResultCount>;
+
public:
- explicit ReadStatement(Utils::SmallStringView sqlStatement, Database &database);
+ ReadStatement(Utils::SmallStringView sqlStatement, Database &database)
+ : Base{sqlStatement, database}
+ {
+ checkIsReadOnlyStatement();
+ Base::checkColumnCount(ResultCount);
+ }
- using StatementImplementation::readCallback;
- using StatementImplementation::readTo;
- using StatementImplementation::toValue;
- using StatementImplementation::value;
- using StatementImplementation::values;
+ using Base::readCallback;
+ using Base::readTo;
+ using Base::toValue;
+ using Base::value;
+ using Base::values;
protected:
- void checkIsReadOnlyStatement();
+ void checkIsReadOnlyStatement()
+ {
+ if (!Base::isReadOnlyStatement())
+ throw NotReadOnlySqlStatement(
+ "SqliteStatement::SqliteReadStatement: is not read only statement!");
+ }
};
+template<int ResultCount>
+ReadStatement(ReadStatement<ResultCount> &) -> ReadStatement<ResultCount>;
+template<int ResultCount>
+ReadStatement(const ReadStatement<ResultCount> &) -> ReadStatement<ResultCount>;
+
} // namespace Sqlite
diff --git a/src/libs/sqlite/sqlitereadwritestatement.cpp b/src/libs/sqlite/sqlitereadwritestatement.cpp
deleted file mode 100644
index 8910ffd7f0..0000000000
--- a/src/libs/sqlite/sqlitereadwritestatement.cpp
+++ /dev/null
@@ -1,36 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of Qt Creator.
-**
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-****************************************************************************/
-
-#include "sqlitereadwritestatement.h"
-
-namespace Sqlite {
-
-ReadWriteStatement::ReadWriteStatement(Utils::SmallStringView sqlStatement,
- Database &database)
- : StatementImplementation(sqlStatement, database)
-{
-}
-
-} // namespace Sqlite
diff --git a/src/libs/sqlite/sqlitereadwritestatement.h b/src/libs/sqlite/sqlitereadwritestatement.h
index 6adc9ebb35..4e2aecabc7 100644
--- a/src/libs/sqlite/sqlitereadwritestatement.h
+++ b/src/libs/sqlite/sqlitereadwritestatement.h
@@ -29,20 +29,26 @@
namespace Sqlite {
-class SQLITE_EXPORT ReadWriteStatement final : protected StatementImplementation<BaseStatement>
+template<int ResultCount = 0>
+class ReadWriteStatement final : protected StatementImplementation<BaseStatement, ResultCount>
{
friend class DatabaseBackend;
+ using Base = StatementImplementation<BaseStatement, ResultCount>;
public:
- ReadWriteStatement(Utils::SmallStringView sqlStatement, Database &database);
+ ReadWriteStatement(Utils::SmallStringView sqlStatement, Database &database)
+ : Base{sqlStatement, database}
+ {
+ Base::checkColumnCount(ResultCount);
+ }
- using StatementImplementation::execute;
- using StatementImplementation::readCallback;
- using StatementImplementation::readTo;
- using StatementImplementation::toValue;
- using StatementImplementation::value;
- using StatementImplementation::values;
- using StatementImplementation::write;
+ using Base::execute;
+ using Base::readCallback;
+ using Base::readTo;
+ using Base::toValue;
+ using Base::value;
+ using Base::values;
+ using Base::write;
};
} // namespace Sqlite
diff --git a/src/libs/sqlite/sqlitesessions.cpp b/src/libs/sqlite/sqlitesessions.cpp
index b1fc236171..df668fdc59 100644
--- a/src/libs/sqlite/sqlitesessions.cpp
+++ b/src/libs/sqlite/sqlitesessions.cpp
@@ -127,10 +127,10 @@ void Internal::SessionsBase::createSessionTable(Database &database)
void Sessions::revert()
{
- ReadStatement selectChangeSets{Utils::PathString{"SELECT changeset FROM ",
- sessionsTableName,
- " ORDER BY id DESC"},
- database};
+ ReadStatement<1> selectChangeSets{Utils::PathString{"SELECT changeset FROM ",
+ sessionsTableName,
+ " ORDER BY id DESC"},
+ database};
auto changeSets = selectChangeSets.values<SessionChangeSet>(1024);
@@ -151,10 +151,10 @@ void Sessions::revert()
void Sessions::apply()
{
- ReadStatement selectChangeSets{Utils::PathString{"SELECT changeset FROM ",
- sessionsTableName,
- " ORDER BY id"},
- database};
+ ReadStatement<1> selectChangeSets{Utils::PathString{"SELECT changeset FROM ",
+ sessionsTableName,
+ " ORDER BY id"},
+ database};
auto changeSets = selectChangeSets.values<SessionChangeSet>(1024);
@@ -187,10 +187,10 @@ void Sessions::deleteAll()
SessionChangeSets Sessions::changeSets() const
{
- ReadStatement selectChangeSets{Utils::PathString{"SELECT changeset FROM ",
- sessionsTableName,
- " ORDER BY id DESC"},
- database};
+ ReadStatement<1> selectChangeSets{Utils::PathString{"SELECT changeset FROM ",
+ sessionsTableName,
+ " ORDER BY id DESC"},
+ database};
return selectChangeSets.values<SessionChangeSet>(1024);
}
diff --git a/src/libs/sqlite/sqlitewritestatement.cpp b/src/libs/sqlite/sqlitewritestatement.cpp
deleted file mode 100644
index 89fce7abf3..0000000000
--- a/src/libs/sqlite/sqlitewritestatement.cpp
+++ /dev/null
@@ -1,43 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of Qt Creator.
-**
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-****************************************************************************/
-
-#include "sqlitewritestatement.h"
-
-namespace Sqlite {
-
-WriteStatement::WriteStatement(Utils::SmallStringView sqlStatement,
- Database &database)
- : StatementImplementation(sqlStatement, database)
-{
- checkIsWritableStatement();
-}
-
-void WriteStatement::checkIsWritableStatement()
-{
- if (isReadOnlyStatement())
- throw NotWriteSqlStatement("SqliteStatement::SqliteWriteStatement: is not a writable statement!");
-}
-
-} // namespace Sqlite
diff --git a/src/libs/sqlite/sqlitewritestatement.h b/src/libs/sqlite/sqlitewritestatement.h
index 4dbcd4f9c6..1a0bb5832c 100644
--- a/src/libs/sqlite/sqlitewritestatement.h
+++ b/src/libs/sqlite/sqlitewritestatement.h
@@ -29,17 +29,28 @@
namespace Sqlite {
-class SQLITE_EXPORT WriteStatement : protected StatementImplementation<BaseStatement>
+class WriteStatement : protected StatementImplementation<BaseStatement, -1>
{
+ using Base = StatementImplementation<BaseStatement, -1>;
+
public:
- explicit WriteStatement(Utils::SmallStringView sqlStatement, Database &database);
+ WriteStatement(Utils::SmallStringView sqlStatement, Database &database)
+ : StatementImplementation(sqlStatement, database)
+ {
+ checkIsWritableStatement();
+ }
- using StatementImplementation::execute;
using StatementImplementation::database;
+ using StatementImplementation::execute;
using StatementImplementation::write;
protected:
- void checkIsWritableStatement();
+ void checkIsWritableStatement()
+ {
+ if (Base::isReadOnlyStatement())
+ throw NotWriteSqlStatement(
+ "SqliteStatement::SqliteWriteStatement: is not a writable statement!");
+ }
};
} // namespace Sqlite
diff --git a/src/plugins/clangrefactoring/querysqlitestatementfactory.h b/src/plugins/clangrefactoring/querysqlitestatementfactory.h
index 65d8289579..b503a72b0a 100644
--- a/src/plugins/clangrefactoring/querysqlitestatementfactory.h
+++ b/src/plugins/clangrefactoring/querysqlitestatementfactory.h
@@ -27,51 +27,54 @@
namespace ClangRefactoring {
-template<typename Database,
- typename ReadStatement>
+template<typename Database>
class QuerySqliteStatementFactory
{
public:
using DatabaseType = Database;
- using ReadStatementType = ReadStatement;
+ template<int ResultCount>
+ using ReadStatement = typename Database::template ReadStatement<ResultCount>;
QuerySqliteStatementFactory(Database &database)
: database(database)
{}
Database &database;
- ReadStatement selectLocationsForSymbolLocation{
+ ReadStatement<3> selectLocationsForSymbolLocation{
"SELECT sourceId, line, column FROM locations WHERE symbolId = "
" (SELECT symbolId FROM locations WHERE sourceId=? AND line=? AND column=?) "
"ORDER BY sourceId, line, column",
database};
- ReadStatement selectSourceUsagesForSymbolLocation{
+ ReadStatement<3> selectSourceUsagesForSymbolLocation{
"SELECT directoryPath || '/' || sourceName, line, column "
"FROM locations NATURAL JOIN sources NATURAL JOIN directories "
"WHERE symbolId = (SELECT symbolId FROM locations WHERE sourceId=? AND line=? AND "
"column=?)",
database};
- ReadStatement selectSourceUsagesOrderedForSymbolLocation{
+ ReadStatement<3> selectSourceUsagesOrderedForSymbolLocation{
"SELECT directoryPath || '/' || sourceName, line, column "
"FROM locations NATURAL JOIN sources NATURAL JOIN directories "
"WHERE symbolId = (SELECT symbolId FROM locations WHERE sourceId=? AND line=? AND "
"column=?) ORDER BY locationKind LIMIT 2",
database};
- ReadStatement selectSourceUsagesByLocationKindForSymbolLocation{
+ ReadStatement<3> selectSourceUsagesByLocationKindForSymbolLocation{
"SELECT directoryPath || '/' || sourceName, line, column "
"FROM locations NATURAL JOIN sources NATURAL JOIN directories "
"WHERE symbolId = (SELECT symbolId FROM locations WHERE sourceId=? AND line=? AND "
"column=?) AND locationKind = ?",
database};
- ReadStatement selectSymbolsForKindAndStartsWith{
- "SELECT symbolId, symbolName, signature FROM symbols WHERE symbolKind = ? AND symbolName LIKE ?",
+ ReadStatement<3> selectSymbolsForKindAndStartsWith{
+ "SELECT symbolId, symbolName, signature FROM symbols WHERE symbolKind = ? AND symbolName "
+ "LIKE ?",
database};
- ReadStatement selectSymbolsForKindAndStartsWith2{
- "SELECT symbolId, symbolName, signature FROM symbols WHERE symbolKind IN (?,?) AND symbolName LIKE ?",
+ ReadStatement<3> selectSymbolsForKindAndStartsWith2{
+ "SELECT symbolId, symbolName, signature FROM symbols WHERE symbolKind IN (?,?) AND "
+ "symbolName LIKE ?",
database};
- ReadStatement selectSymbolsForKindAndStartsWith3{
- "SELECT symbolId, symbolName, signature FROM symbols WHERE symbolKind IN (?,?,?) AND symbolName LIKE ?",
+ ReadStatement<3> selectSymbolsForKindAndStartsWith3{
+ "SELECT symbolId, symbolName, signature FROM symbols WHERE symbolKind IN (?,?,?) AND "
+ "symbolName LIKE ?",
database};
- ReadStatement selectLocationOfSymbol{
+ ReadStatement<3> selectLocationOfSymbol{
"SELECT sourceId, line, column FROM locations AS l WHERE symbolId = ? AND locationKind = ?",
database};
};
diff --git a/src/plugins/clangrefactoring/symbolquery.h b/src/plugins/clangrefactoring/symbolquery.h
index 2468369c82..7ceab186fd 100644
--- a/src/plugins/clangrefactoring/symbolquery.h
+++ b/src/plugins/clangrefactoring/symbolquery.h
@@ -40,8 +40,6 @@ namespace ClangRefactoring {
template <typename StatementFactory>
class SymbolQuery final : public SymbolQueryInterface
{
- using ReadStatement = typename StatementFactory::ReadStatementType;
-
public:
SymbolQuery(StatementFactory &statementFactory)
: m_statementFactory(statementFactory)
@@ -51,28 +49,28 @@ public:
int line,
int utf8Column) const override
{
- ReadStatement &locationsStatement = m_statementFactory.selectLocationsForSymbolLocation;
+ auto &locationsStatement = m_statementFactory.selectLocationsForSymbolLocation;
const std::size_t reserveSize = 128;
- return locationsStatement.template values<SourceLocation, 3>(reserveSize,
- filePathId.filePathId,
- line,
- utf8Column);
+ return locationsStatement.template values<SourceLocation>(reserveSize,
+ filePathId.filePathId,
+ line,
+ utf8Column);
}
CppTools::Usages sourceUsagesAt(ClangBackEnd::FilePathId filePathId,
int line,
int utf8Column) const override
{
- ReadStatement &locationsStatement = m_statementFactory.selectSourceUsagesForSymbolLocation;
+ auto &locationsStatement = m_statementFactory.selectSourceUsagesForSymbolLocation;
const std::size_t reserveSize = 128;
- return locationsStatement.template values<CppTools::Usage, 3>(reserveSize,
- filePathId.filePathId,
- line,
- utf8Column);
+ return locationsStatement.template values<CppTools::Usage>(reserveSize,
+ filePathId.filePathId,
+ line,
+ utf8Column);
}
CppTools::Usages sourceUsagesAtByLocationKind(ClangBackEnd::FilePathId filePathId,
@@ -80,46 +78,46 @@ public:
int utf8Column,
ClangBackEnd::SourceLocationKind kind) const override
{
- ReadStatement &locationsStatement = m_statementFactory.selectSourceUsagesByLocationKindForSymbolLocation;
+ auto &locationsStatement = m_statementFactory.selectSourceUsagesByLocationKindForSymbolLocation;
const std::size_t reserveSize = 128;
- return locationsStatement.template values<CppTools::Usage, 3>(reserveSize,
- filePathId.filePathId,
- line,
- utf8Column,
- int(kind));
+ return locationsStatement.template values<CppTools::Usage>(reserveSize,
+ filePathId.filePathId,
+ line,
+ utf8Column,
+ int(kind));
}
CppTools::Usages declarationsAt(ClangBackEnd::FilePathId filePathId,
int line,
int utf8Column) const override
{
- ReadStatement &locationsStatement = m_statementFactory.selectSourceUsagesOrderedForSymbolLocation;
+ auto &locationsStatement = m_statementFactory.selectSourceUsagesOrderedForSymbolLocation;
const std::size_t reserveSize = 128;
- return locationsStatement.template values<CppTools::Usage, 3>(reserveSize,
- filePathId.filePathId,
- line,
- utf8Column);
+ return locationsStatement.template values<CppTools::Usage>(reserveSize,
+ filePathId.filePathId,
+ line,
+ utf8Column);
}
Symbols symbolsWithOneSymbolKinds(ClangBackEnd::SymbolKind symbolKind,
Utils::SmallStringView searchTerm) const
{
- ReadStatement &statement = m_statementFactory.selectSymbolsForKindAndStartsWith;
+ auto &statement = m_statementFactory.selectSymbolsForKindAndStartsWith;
- return statement.template values<Symbol, 3>(100, int(symbolKind), searchTerm);
+ return statement.template values<Symbol>(100, int(symbolKind), searchTerm);
}
Symbols symbolsWithTwoSymbolKinds(ClangBackEnd::SymbolKind symbolKind1,
ClangBackEnd::SymbolKind symbolKind2,
Utils::SmallStringView searchTerm) const
{
- ReadStatement &statement = m_statementFactory.selectSymbolsForKindAndStartsWith2;
+ auto &statement = m_statementFactory.selectSymbolsForKindAndStartsWith2;
- return statement.template values<Symbol, 3>(100, int(symbolKind1), int(symbolKind2), searchTerm);
+ return statement.template values<Symbol>(100, int(symbolKind1), int(symbolKind2), searchTerm);
}
Symbols symbolsWithThreeSymbolKinds(ClangBackEnd::SymbolKind symbolKind1,
@@ -127,9 +125,13 @@ public:
ClangBackEnd::SymbolKind symbolKind3,
Utils::SmallStringView searchTerm) const
{
- ReadStatement &statement = m_statementFactory.selectSymbolsForKindAndStartsWith3;
+ auto &statement = m_statementFactory.selectSymbolsForKindAndStartsWith3;
- return statement.template values<Symbol, 3>(100, int(symbolKind1), int(symbolKind2), int(symbolKind3), searchTerm);
+ return statement.template values<Symbol>(100,
+ int(symbolKind1),
+ int(symbolKind2),
+ int(symbolKind3),
+ searchTerm);
}
Symbols symbols(const ClangBackEnd::SymbolKinds &symbolKinds,
@@ -148,9 +150,9 @@ public:
Utils::optional<SourceLocation> locationForSymbolId(SymbolId symbolId,
ClangBackEnd::SourceLocationKind kind) const override
{
- ReadStatement &statement = m_statementFactory.selectLocationOfSymbol;
+ auto &statement = m_statementFactory.selectLocationOfSymbol;
- return statement.template value<SourceLocation, 3>(symbolId, int(kind));
+ return statement.template value<SourceLocation>(symbolId, int(kind));
}
private:
StatementFactory &m_statementFactory;
diff --git a/src/plugins/qmldesigner/designercore/imagecache/imagecachestorage.h b/src/plugins/qmldesigner/designercore/imagecache/imagecachestorage.h
index f34dd2fca4..bf589d951d 100644
--- a/src/plugins/qmldesigner/designercore/imagecache/imagecachestorage.h
+++ b/src/plugins/qmldesigner/designercore/imagecache/imagecachestorage.h
@@ -43,7 +43,8 @@ template<typename DatabaseType>
class ImageCacheStorage : public ImageCacheStorageInterface
{
public:
- using ReadStatement = typename DatabaseType::ReadStatement;
+ template<int ResultCount>
+ using ReadStatement = typename DatabaseType::template ReadStatement<ResultCount>;
using WriteStatement = typename DatabaseType::WriteStatement;
ImageCacheStorage(DatabaseType &database)
@@ -272,11 +273,11 @@ public:
DatabaseType &database;
Initializer initializer{database};
Sqlite::ImmediateNonThrowingDestructorTransaction transaction{database};
- mutable ReadStatement selectImageStatement{
+ mutable ReadStatement<1> selectImageStatement{
"SELECT image FROM images WHERE name=?1 AND mtime >= ?2", database};
- mutable ReadStatement selectSmallImageStatement{
+ mutable ReadStatement<1> selectSmallImageStatement{
"SELECT smallImage FROM images WHERE name=?1 AND mtime >= ?2", database};
- mutable ReadStatement selectIconStatement{
+ mutable ReadStatement<1> selectIconStatement{
"SELECT icon FROM icons WHERE name=?1 AND mtime >= ?2", database};
WriteStatement upsertImageStatement{
"INSERT INTO images(name, mtime, image, smallImage) VALUES (?1, ?2, ?3, ?4) ON "
diff --git a/src/tools/clangpchmanagerbackend/source/builddependenciesstorage.h b/src/tools/clangpchmanagerbackend/source/builddependenciesstorage.h
index 96dd3205bc..19b3a98280 100644
--- a/src/tools/clangpchmanagerbackend/source/builddependenciesstorage.h
+++ b/src/tools/clangpchmanagerbackend/source/builddependenciesstorage.h
@@ -43,7 +43,8 @@ namespace ClangBackEnd {
template<typename Database=Sqlite::Database>
class BuildDependenciesStorage final : public BuildDependenciesStorageInterface
{
- using ReadStatement = typename Database::ReadStatement;
+ template<int ResultCount>
+ using ReadStatement = typename Database::template ReadStatement<ResultCount>;
using WriteStatement = typename Database::WriteStatement;
public:
BuildDependenciesStorage(Database &database)
@@ -99,7 +100,7 @@ public:
long long fetchLowestLastModifiedTime(FilePathId sourceId) const override
{
- ReadStatement &statement = getLowestLastModifiedTimeOfDependencies;
+ auto &statement = getLowestLastModifiedTimeOfDependencies;
return statement.template value<long long>(sourceId.filePathId).value_or(0);
}
@@ -143,12 +144,12 @@ public:
SourceEntries fetchDependSources(FilePathId sourceId, ProjectPartId projectPartId) const override
{
return fetchSourceDependenciesStatement
- .template values<SourceEntry, 4>(300, sourceId.filePathId, projectPartId.projectPathId);
+ .template values<SourceEntry>(300, sourceId.filePathId, projectPartId.projectPathId);
}
UsedMacros fetchUsedMacros(FilePathId sourceId) const override
{
- return fetchUsedMacrosStatement.template values<UsedMacro, 2>(128, sourceId.filePathId);
+ return fetchUsedMacrosStatement.template values<UsedMacro>(128, sourceId.filePathId);
}
void updatePchCreationTimeStamp(long long pchCreationTimeStamp, ProjectPartId projectPartId) override
@@ -191,8 +192,7 @@ public:
try {
Sqlite::DeferredTransaction transaction{database};
- auto timeStamps = fetchIndexingTimeStampsStatement.template values<SourceTimeStamp, 2>(
- 1024);
+ auto timeStamps = fetchIndexingTimeStampsStatement.template values<SourceTimeStamp>(1024);
transaction.commit();
@@ -208,7 +208,7 @@ public:
Sqlite::DeferredTransaction transaction{database};
auto timeStamps = fetchIncludedIndexingTimeStampsStatement
- .template values<SourceTimeStamp, 2>(1024, sourcePathId.filePathId);
+ .template values<SourceTimeStamp>(1024, sourcePathId.filePathId);
transaction.commit();
@@ -325,10 +325,12 @@ public:
"DELETE FROM newUsedMacros",
database
};
- mutable ReadStatement getLowestLastModifiedTimeOfDependencies{
- "WITH RECURSIVE sourceIds(sourceId) AS (VALUES(?) UNION SELECT dependencySourceId FROM sourceDependencies, sourceIds WHERE sourceDependencies.sourceId = sourceIds.sourceId) SELECT min(lastModified) FROM fileStatuses, sourceIds WHERE fileStatuses.sourceId = sourceIds.sourceId",
- database
- };
+ mutable ReadStatement<1> getLowestLastModifiedTimeOfDependencies{
+ "WITH RECURSIVE sourceIds(sourceId) AS (VALUES(?) UNION SELECT dependencySourceId FROM "
+ "sourceDependencies, sourceIds WHERE sourceDependencies.sourceId = sourceIds.sourceId) "
+ "SELECT min(lastModified) FROM fileStatuses, sourceIds WHERE fileStatuses.sourceId = "
+ "sourceIds.sourceId",
+ database};
WriteStatement insertIntoNewSourceDependenciesStatement{
"INSERT INTO newSourceDependencies(sourceId, dependencySourceId) VALUES (?,?)",
database
@@ -356,13 +358,13 @@ public:
"CONFLICT(sourceId, projectPartId) DO UPDATE SET sourceType = ?003, "
"hasMissingIncludes = ?004",
database};
- mutable ReadStatement fetchPchSourcesStatement{
+ mutable ReadStatement<1> fetchPchSourcesStatement{
"SELECT sourceId FROM projectPartsFiles WHERE projectPartId = ? AND sourceType IN (0, 1, "
"3, 4) ORDER BY sourceId",
database};
- mutable ReadStatement fetchSourcesStatement{
+ mutable ReadStatement<1> fetchSourcesStatement{
"SELECT sourceId FROM projectPartsFiles WHERE projectPartId = ? ORDER BY sourceId", database};
- mutable ReadStatement fetchSourceDependenciesStatement{
+ mutable ReadStatement<4> fetchSourceDependenciesStatement{
"WITH RECURSIVE collectedDependencies(sourceId) AS (VALUES(?) UNION "
"SELECT dependencySourceId FROM sourceDependencies, "
"collectedDependencies WHERE sourceDependencies.sourceId == "
@@ -371,16 +373,14 @@ public:
"collectedDependencies NATURAL JOIN projectPartsFiles WHERE "
"projectPartId = ? ORDER BY sourceId",
database};
- mutable ReadStatement fetchProjectPartIdStatement{
- "SELECT projectPartId FROM projectParts WHERE projectPartName = ?",
- database
- };
+ mutable ReadStatement<1> fetchProjectPartIdStatement{
+ "SELECT projectPartId FROM projectParts WHERE projectPartName = ?", database};
WriteStatement insertProjectPartNameStatement{
"INSERT INTO projectParts(projectPartName) VALUES (?)", database};
- mutable ReadStatement fetchUsedMacrosStatement{
- "SELECT macroName, sourceId FROM usedMacros WHERE sourceId = ? ORDER BY sourceId, macroName",
- database
- };
+ mutable ReadStatement<2> fetchUsedMacrosStatement{
+ "SELECT macroName, sourceId FROM usedMacros WHERE sourceId = ? ORDER BY sourceId, "
+ "macroName",
+ database};
WriteStatement updatePchCreationTimeStampStatement{
"UPDATE projectPartsFiles SET pchCreationTimeStamp = ?001 WHERE projectPartId = ?002",
database};
@@ -390,16 +390,16 @@ public:
"INSERT INTO fileStatuses(sourceId, indexingTimeStamp) VALUES (?001, ?002) ON "
"CONFLICT(sourceId) DO UPDATE SET indexingTimeStamp = ?002",
database};
- mutable ReadStatement fetchIncludedIndexingTimeStampsStatement{
+ mutable ReadStatement<2> fetchIncludedIndexingTimeStampsStatement{
"WITH RECURSIVE collectedDependencies(sourceId) AS (VALUES(?) UNION SELECT "
"dependencySourceId FROM sourceDependencies, collectedDependencies WHERE "
"sourceDependencies.sourceId == collectedDependencies.sourceId) SELECT DISTINCT sourceId, "
"indexingTimeStamp FROM collectedDependencies NATURAL LEFT JOIN fileStatuses ORDER BY "
"sourceId",
database};
- mutable ReadStatement fetchIndexingTimeStampsStatement{
+ mutable ReadStatement<2> fetchIndexingTimeStampsStatement{
"SELECT sourceId, indexingTimeStamp FROM fileStatuses ORDER BY sourceId", database};
- mutable ReadStatement fetchDependentSourceIdsStatement{
+ mutable ReadStatement<1> fetchDependentSourceIdsStatement{
"WITH RECURSIVE collectedDependencies(sourceId) AS (VALUES(?) UNION SELECT "
"sourceDependencies.sourceId FROM sourceDependencies, collectedDependencies WHERE "
"sourceDependencies.dependencySourceId == collectedDependencies.sourceId) SELECT sourceId "
diff --git a/src/tools/clangpchmanagerbackend/source/precompiledheaderstorage.h b/src/tools/clangpchmanagerbackend/source/precompiledheaderstorage.h
index 8592757692..58b3747a57 100644
--- a/src/tools/clangpchmanagerbackend/source/precompiledheaderstorage.h
+++ b/src/tools/clangpchmanagerbackend/source/precompiledheaderstorage.h
@@ -38,7 +38,8 @@ namespace ClangBackEnd {
template<typename Database=Sqlite::Database>
class PrecompiledHeaderStorage final : public PrecompiledHeaderStorageInterface
{
- using ReadStatement = typename Database::ReadStatement;
+ template<int ResultCount>
+ using ReadStatement = typename Database::template ReadStatement<ResultCount>;
using WriteStatement = typename Database::WriteStatement;
public:
PrecompiledHeaderStorage(Database &database)
@@ -184,7 +185,7 @@ public:
try {
Sqlite::DeferredTransaction transaction{database};
- auto value = fetchPrecompiledHeadersStatement.template value<PchPaths, 2>(
+ auto value = fetchPrecompiledHeadersStatement.template value<PchPaths>(
projectPartId.projectPathId);
transaction.commit();
@@ -204,7 +205,7 @@ public:
try {
Sqlite::DeferredTransaction transaction{database};
- auto value = fetchTimeStampsStatement.template value<PrecompiledHeaderTimeStamps, 2>(
+ auto value = fetchTimeStampsStatement.template value<PrecompiledHeaderTimeStamps>(
projectPartId.projectPathId);
transaction.commit();
@@ -265,23 +266,22 @@ public:
"systemPchPath=NULL,systemPchBuildTime=NULL,projectPchPath=NULL,projectPchBuildTime=NULL "
"WHERE projectPartId = ?",
database};
- ReadStatement fetchSystemPrecompiledHeaderPathStatement{
+ ReadStatement<1> fetchSystemPrecompiledHeaderPathStatement{
"SELECT systemPchPath FROM precompiledHeaders WHERE projectPartId = ?", database};
- mutable ReadStatement fetchPrecompiledHeaderStatement{
+ mutable ReadStatement<1> fetchPrecompiledHeaderStatement{
"SELECT ifnull(nullif(projectPchPath, ''), systemPchPath) "
"FROM precompiledHeaders WHERE projectPartId = ?",
database};
- mutable ReadStatement fetchPrecompiledHeadersStatement{
+ mutable ReadStatement<2> fetchPrecompiledHeadersStatement{
"SELECT projectPchPath, systemPchPath FROM precompiledHeaders WHERE projectPartId = ?",
database};
- mutable ReadStatement fetchTimeStampsStatement{
+ mutable ReadStatement<2> fetchTimeStampsStatement{
"SELECT projectPchBuildTime, systemPchBuildTime FROM precompiledHeaders WHERE "
"projectPartId = ?",
database};
- mutable ReadStatement fetchAllPchPathsStatement{
+ mutable ReadStatement<1> fetchAllPchPathsStatement{
"SELECT DISTINCT systemPchPath FROM precompiledHeaders UNION ALL SELECT "
"DISTINCT projectPchPath FROM precompiledHeaders",
database};
};
-
-}
+} // namespace ClangBackEnd
diff --git a/src/tools/clangrefactoringbackend/source/symbolstorage.h b/src/tools/clangrefactoringbackend/source/symbolstorage.h
index 89855b98cb..bc2d96b5f1 100644
--- a/src/tools/clangrefactoringbackend/source/symbolstorage.h
+++ b/src/tools/clangrefactoringbackend/source/symbolstorage.h
@@ -45,7 +45,8 @@ template<typename DatabaseType = Sqlite::Database>
class SymbolStorage final : public SymbolStorageInterface
{
using Database = DatabaseType;
- using ReadStatement = typename Database::ReadStatement;
+ template<int ResultCount>
+ using ReadStatement = typename Database::template ReadStatement<ResultCount>;
using WriteStatement = typename Database::WriteStatement;
public:
@@ -166,7 +167,7 @@ public:
"INSERT OR IGNORE INTO newLocations(temporarySymbolId, line, column, sourceId, "
"locationKind) VALUES(?,?,?,?,?)",
database};
- ReadStatement selectNewSourceIdsStatement{
+ ReadStatement<1> selectNewSourceIdsStatement{
"SELECT DISTINCT sourceId FROM newLocations WHERE NOT EXISTS (SELECT sourceId FROM sources "
"WHERE newLocations.sourceId == sources.sourceId)",
database};
diff --git a/tests/unit/unittest/CMakeLists.txt b/tests/unit/unittest/CMakeLists.txt
index acbebe0fb1..73f70489e8 100644
--- a/tests/unit/unittest/CMakeLists.txt
+++ b/tests/unit/unittest/CMakeLists.txt
@@ -110,12 +110,8 @@ add_qtc_test(unittest GTEST
mocksearch.h
mocksearchhandle.h
mocksearchresult.h
- mocksqlitedatabase.h
- mocksqlitereadstatement.cpp
- mocksqlitereadstatement.h
mocksqlitestatement.h
mocksqlitetransactionbackend.h
- mocksqlitewritestatement.h
mocksymbolindexertaskqueue.h
mocksymbolindexing.h
mocksymbolquery.h
diff --git a/tests/unit/unittest/builddependenciesstorage-test.cpp b/tests/unit/unittest/builddependenciesstorage-test.cpp
index 125ac526d5..f39d1dc2bb 100644
--- a/tests/unit/unittest/builddependenciesstorage-test.cpp
+++ b/tests/unit/unittest/builddependenciesstorage-test.cpp
@@ -26,7 +26,7 @@
#include "googletest.h"
#include "mockfilepathcaching.h"
-#include "mocksqlitedatabase.h"
+#include "sqlitedatabasemock.h"
#include <builddependenciesstorage.h>
#include <refactoringdatabaseinitializer.h>
@@ -48,37 +48,40 @@ using Sqlite::Database;
using Sqlite::Table;
using Utils::PathString;
-using Storage = ClangBackEnd::BuildDependenciesStorage<MockSqliteDatabase>;
+using Storage = ClangBackEnd::BuildDependenciesStorage<SqliteDatabaseMock>;
class BuildDependenciesStorage : public testing::Test
{
protected:
- NiceMock<MockSqliteDatabase> mockDatabase;
- Storage storage{mockDatabase};
- MockSqliteWriteStatement &insertIntoNewUsedMacrosStatement = storage.insertIntoNewUsedMacrosStatement;
- MockSqliteWriteStatement &syncNewUsedMacrosStatement =storage.syncNewUsedMacrosStatement;
- MockSqliteWriteStatement &deleteOutdatedUsedMacrosStatement = storage.deleteOutdatedUsedMacrosStatement;
- MockSqliteWriteStatement &deleteNewUsedMacrosTableStatement = storage.deleteNewUsedMacrosTableStatement;
- MockSqliteWriteStatement &insertOrUpdateFileStatusesStatement = storage.insertOrUpdateFileStatusesStatement;
- MockSqliteWriteStatement &insertIntoNewSourceDependenciesStatement = storage.insertIntoNewSourceDependenciesStatement;
- MockSqliteWriteStatement &syncNewSourceDependenciesStatement = storage.syncNewSourceDependenciesStatement;
- MockSqliteWriteStatement &deleteOutdatedSourceDependenciesStatement = storage.deleteOutdatedSourceDependenciesStatement;
- MockSqliteWriteStatement &deleteNewSourceDependenciesStatement = storage.deleteNewSourceDependenciesStatement;
- MockSqliteReadStatement &getLowestLastModifiedTimeOfDependencies = storage.getLowestLastModifiedTimeOfDependencies;
- MockSqliteWriteStatement &insertOrUpdateProjectPartsFilesStatement = storage.insertOrUpdateProjectPartsFilesStatement;
- MockSqliteReadStatement &fetchSourceDependenciesStatement = storage.fetchSourceDependenciesStatement;
- MockSqliteReadStatement &fetchProjectPartIdStatement = storage.fetchProjectPartIdStatement;
- MockSqliteReadStatement &fetchUsedMacrosStatement = storage.fetchUsedMacrosStatement;
- MockSqliteWriteStatement &insertProjectPartNameStatement = storage.insertProjectPartNameStatement;
- MockSqliteWriteStatement &updatePchCreationTimeStampStatement = storage.updatePchCreationTimeStampStatement;
- MockSqliteWriteStatement &deleteAllProjectPartsFilesWithProjectPartNameStatement
+ NiceMock<SqliteDatabaseMock> databaseMock;
+ template<int ResultCount>
+ using ReadStatement = NiceMock<SqliteDatabaseMock>::ReadStatement<ResultCount>;
+ using WriteStatement = NiceMock<SqliteDatabaseMock>::WriteStatement;
+ Storage storage{databaseMock};
+ WriteStatement &insertIntoNewUsedMacrosStatement = storage.insertIntoNewUsedMacrosStatement;
+ WriteStatement &syncNewUsedMacrosStatement = storage.syncNewUsedMacrosStatement;
+ WriteStatement &deleteOutdatedUsedMacrosStatement = storage.deleteOutdatedUsedMacrosStatement;
+ WriteStatement &deleteNewUsedMacrosTableStatement = storage.deleteNewUsedMacrosTableStatement;
+ WriteStatement &insertOrUpdateFileStatusesStatement = storage.insertOrUpdateFileStatusesStatement;
+ WriteStatement &insertIntoNewSourceDependenciesStatement = storage.insertIntoNewSourceDependenciesStatement;
+ WriteStatement &syncNewSourceDependenciesStatement = storage.syncNewSourceDependenciesStatement;
+ WriteStatement &deleteOutdatedSourceDependenciesStatement = storage.deleteOutdatedSourceDependenciesStatement;
+ WriteStatement &deleteNewSourceDependenciesStatement = storage.deleteNewSourceDependenciesStatement;
+ ReadStatement<1> &getLowestLastModifiedTimeOfDependencies = storage.getLowestLastModifiedTimeOfDependencies;
+ WriteStatement &insertOrUpdateProjectPartsFilesStatement = storage.insertOrUpdateProjectPartsFilesStatement;
+ ReadStatement<4> &fetchSourceDependenciesStatement = storage.fetchSourceDependenciesStatement;
+ ReadStatement<1> &fetchProjectPartIdStatement = storage.fetchProjectPartIdStatement;
+ ReadStatement<2> &fetchUsedMacrosStatement = storage.fetchUsedMacrosStatement;
+ WriteStatement &insertProjectPartNameStatement = storage.insertProjectPartNameStatement;
+ WriteStatement &updatePchCreationTimeStampStatement = storage.updatePchCreationTimeStampStatement;
+ WriteStatement &deleteAllProjectPartsFilesWithProjectPartNameStatement
= storage.deleteAllProjectPartsFilesWithProjectPartNameStatement;
- MockSqliteReadStatement &fetchPchSourcesStatement = storage.fetchPchSourcesStatement;
- MockSqliteReadStatement &fetchSourcesStatement = storage.fetchSourcesStatement;
- MockSqliteWriteStatement &inserOrUpdateIndexingTimesStampStatement = storage.inserOrUpdateIndexingTimesStampStatement;
- MockSqliteReadStatement &fetchIndexingTimeStampsStatement = storage.fetchIndexingTimeStampsStatement;
- MockSqliteReadStatement &fetchIncludedIndexingTimeStampsStatement = storage.fetchIncludedIndexingTimeStampsStatement;
- MockSqliteReadStatement &fetchDependentSourceIdsStatement = storage.fetchDependentSourceIdsStatement;
+ ReadStatement<1> &fetchPchSourcesStatement = storage.fetchPchSourcesStatement;
+ ReadStatement<1> &fetchSourcesStatement = storage.fetchSourcesStatement;
+ WriteStatement &inserOrUpdateIndexingTimesStampStatement = storage.inserOrUpdateIndexingTimesStampStatement;
+ ReadStatement<2> &fetchIndexingTimeStampsStatement = storage.fetchIndexingTimeStampsStatement;
+ ReadStatement<2> &fetchIncludedIndexingTimeStampsStatement = storage.fetchIncludedIndexingTimeStampsStatement;
+ ReadStatement<1> &fetchDependentSourceIdsStatement = storage.fetchDependentSourceIdsStatement;
};
TEST_F(BuildDependenciesStorage, ConvertStringsToJson)
@@ -132,14 +135,24 @@ TEST_F(BuildDependenciesStorage, AddTablesInConstructor)
{
InSequence s;
- EXPECT_CALL(mockDatabase, immediateBegin());
- EXPECT_CALL(mockDatabase, execute(Eq("CREATE TEMPORARY TABLE newUsedMacros(sourceId INTEGER, macroName TEXT)")));
- EXPECT_CALL(mockDatabase, execute(Eq("CREATE INDEX IF NOT EXISTS index_newUsedMacros_sourceId_macroName ON newUsedMacros(sourceId, macroName)")));
- EXPECT_CALL(mockDatabase, execute(Eq("CREATE TEMPORARY TABLE newSourceDependencies(sourceId INTEGER, dependencySourceId TEXT)")));
- EXPECT_CALL(mockDatabase, execute(Eq("CREATE INDEX IF NOT EXISTS index_newSourceDependencies_sourceId_dependencySourceId ON newSourceDependencies(sourceId, dependencySourceId)")));
- EXPECT_CALL(mockDatabase, commit());
-
- Storage storage{mockDatabase};
+ EXPECT_CALL(databaseMock, immediateBegin());
+ EXPECT_CALL(databaseMock,
+ execute(
+ Eq("CREATE TEMPORARY TABLE newUsedMacros(sourceId INTEGER, macroName TEXT)")));
+ EXPECT_CALL(databaseMock,
+ execute(Eq("CREATE INDEX IF NOT EXISTS index_newUsedMacros_sourceId_macroName ON "
+ "newUsedMacros(sourceId, macroName)")));
+ EXPECT_CALL(databaseMock,
+ execute(Eq("CREATE TEMPORARY TABLE newSourceDependencies(sourceId INTEGER, "
+ "dependencySourceId TEXT)")));
+ EXPECT_CALL(
+ databaseMock,
+ execute(
+ Eq("CREATE INDEX IF NOT EXISTS index_newSourceDependencies_sourceId_dependencySourceId "
+ "ON newSourceDependencies(sourceId, dependencySourceId)")));
+ EXPECT_CALL(databaseMock, commit());
+
+ Storage storage{databaseMock};
}
TEST_F(BuildDependenciesStorage, FetchLowestLastModifiedTimeIfNoModificationTimeExists)
@@ -165,8 +178,12 @@ TEST_F(BuildDependenciesStorage, AddNewUsedMacroTable)
{
InSequence s;
- EXPECT_CALL(mockDatabase, execute(Eq("CREATE TEMPORARY TABLE newUsedMacros(sourceId INTEGER, macroName TEXT)")));
- EXPECT_CALL(mockDatabase, execute(Eq("CREATE INDEX IF NOT EXISTS index_newUsedMacros_sourceId_macroName ON newUsedMacros(sourceId, macroName)")));
+ EXPECT_CALL(databaseMock,
+ execute(
+ Eq("CREATE TEMPORARY TABLE newUsedMacros(sourceId INTEGER, macroName TEXT)")));
+ EXPECT_CALL(databaseMock,
+ execute(Eq("CREATE INDEX IF NOT EXISTS index_newUsedMacros_sourceId_macroName ON "
+ "newUsedMacros(sourceId, macroName)")));
storage.createNewUsedMacrosTable();
}
@@ -175,8 +192,14 @@ TEST_F(BuildDependenciesStorage, AddNewSourceDependenciesTable)
{
InSequence s;
- EXPECT_CALL(mockDatabase, execute(Eq("CREATE TEMPORARY TABLE newSourceDependencies(sourceId INTEGER, dependencySourceId TEXT)")));
- EXPECT_CALL(mockDatabase, execute(Eq("CREATE INDEX IF NOT EXISTS index_newSourceDependencies_sourceId_dependencySourceId ON newSourceDependencies(sourceId, dependencySourceId)")));
+ EXPECT_CALL(databaseMock,
+ execute(Eq("CREATE TEMPORARY TABLE newSourceDependencies(sourceId INTEGER, "
+ "dependencySourceId TEXT)")));
+ EXPECT_CALL(
+ databaseMock,
+ execute(
+ Eq("CREATE INDEX IF NOT EXISTS index_newSourceDependencies_sourceId_dependencySourceId "
+ "ON newSourceDependencies(sourceId, dependencySourceId)")));
storage.createNewSourceDependenciesTable();
}
@@ -200,9 +223,9 @@ TEST_F(BuildDependenciesStorage, UpdatePchCreationTimeStamp)
{
InSequence s;
- EXPECT_CALL(mockDatabase, immediateBegin());
+ EXPECT_CALL(databaseMock, immediateBegin());
EXPECT_CALL(updatePchCreationTimeStampStatement, write(TypedEq<long long>(101), TypedEq<int>(1)));
- EXPECT_CALL(mockDatabase, commit());
+ EXPECT_CALL(databaseMock, commit());
storage.updatePchCreationTimeStamp(101, 1);
}
@@ -255,9 +278,9 @@ TEST_F(BuildDependenciesStorage, FetchPchSourcesCalls)
{
InSequence s;
- EXPECT_CALL(mockDatabase, deferredBegin());
+ EXPECT_CALL(databaseMock, deferredBegin());
EXPECT_CALL(fetchPchSourcesStatement, valuesReturnFilePathIds(_, 22));
- EXPECT_CALL(mockDatabase, commit());
+ EXPECT_CALL(databaseMock, commit());
auto sources = storage.fetchPchSources(22);
}
@@ -266,13 +289,13 @@ TEST_F(BuildDependenciesStorage, FetchPchSourcesCallsIsBusy)
{
InSequence s;
- EXPECT_CALL(mockDatabase, deferredBegin());
+ EXPECT_CALL(databaseMock, deferredBegin());
EXPECT_CALL(fetchPchSourcesStatement, valuesReturnFilePathIds(_, 22))
.WillOnce(Throw(Sqlite::StatementIsBusy{""}));
- EXPECT_CALL(mockDatabase, rollback());
- EXPECT_CALL(mockDatabase, deferredBegin());
+ EXPECT_CALL(databaseMock, rollback());
+ EXPECT_CALL(databaseMock, deferredBegin());
EXPECT_CALL(fetchPchSourcesStatement, valuesReturnFilePathIds(_, 22));
- EXPECT_CALL(mockDatabase, commit());
+ EXPECT_CALL(databaseMock, commit());
auto sources = storage.fetchPchSources(22);
}
@@ -291,13 +314,13 @@ TEST_F(BuildDependenciesStorage, FetchIndexingTimeStampsIsBusy)
{
InSequence s;
- EXPECT_CALL(mockDatabase, deferredBegin());
+ EXPECT_CALL(databaseMock, deferredBegin());
EXPECT_CALL(fetchIndexingTimeStampsStatement, valuesReturnSourceTimeStamps(1024))
.WillOnce(Throw(Sqlite::StatementIsBusy{""}));
- EXPECT_CALL(mockDatabase, rollback());
- EXPECT_CALL(mockDatabase, deferredBegin());
+ EXPECT_CALL(databaseMock, rollback());
+ EXPECT_CALL(databaseMock, deferredBegin());
EXPECT_CALL(fetchIndexingTimeStampsStatement, valuesReturnSourceTimeStamps(1024));
- EXPECT_CALL(mockDatabase, commit());
+ EXPECT_CALL(databaseMock, commit());
storage.fetchIndexingTimeStamps();
}
@@ -306,12 +329,12 @@ TEST_F(BuildDependenciesStorage, InsertIndexingTimeStampWithoutTransaction)
{
InSequence s;
- EXPECT_CALL(mockDatabase, immediateBegin()).Times(0);
+ EXPECT_CALL(databaseMock, immediateBegin()).Times(0);
EXPECT_CALL(inserOrUpdateIndexingTimesStampStatement,
write(TypedEq<int>(1), TypedEq<long long>(34)));
EXPECT_CALL(inserOrUpdateIndexingTimesStampStatement,
write(TypedEq<int>(2), TypedEq<long long>(34)));
- EXPECT_CALL(mockDatabase, commit()).Times(0);
+ EXPECT_CALL(databaseMock, commit()).Times(0);
storage.insertOrUpdateIndexingTimeStampsWithoutTransaction({1, 2}, 34);
}
@@ -320,12 +343,12 @@ TEST_F(BuildDependenciesStorage, InsertIndexingTimeStamp)
{
InSequence s;
- EXPECT_CALL(mockDatabase, immediateBegin());
+ EXPECT_CALL(databaseMock, immediateBegin());
EXPECT_CALL(inserOrUpdateIndexingTimesStampStatement,
write(TypedEq<int>(1), TypedEq<long long>(34)));
EXPECT_CALL(inserOrUpdateIndexingTimesStampStatement,
write(TypedEq<int>(2), TypedEq<long long>(34)));
- EXPECT_CALL(mockDatabase, commit());
+ EXPECT_CALL(databaseMock, commit());
storage.insertOrUpdateIndexingTimeStamps({1, 2}, 34);
}
@@ -334,13 +357,13 @@ TEST_F(BuildDependenciesStorage, InsertIndexingTimeStampsIsBusy)
{
InSequence s;
- EXPECT_CALL(mockDatabase, immediateBegin()).WillOnce(Throw(Sqlite::StatementIsBusy{""}));
- EXPECT_CALL(mockDatabase, immediateBegin());
+ EXPECT_CALL(databaseMock, immediateBegin()).WillOnce(Throw(Sqlite::StatementIsBusy{""}));
+ EXPECT_CALL(databaseMock, immediateBegin());
EXPECT_CALL(inserOrUpdateIndexingTimesStampStatement,
write(TypedEq<int>(1), TypedEq<long long>(34)));
EXPECT_CALL(inserOrUpdateIndexingTimesStampStatement,
write(TypedEq<int>(2), TypedEq<long long>(34)));
- EXPECT_CALL(mockDatabase, commit());
+ EXPECT_CALL(databaseMock, commit());
storage.insertOrUpdateIndexingTimeStamps({1, 2}, 34);
}
@@ -349,15 +372,15 @@ TEST_F(BuildDependenciesStorage, FetchIncludedIndexingTimeStampsIsBusy)
{
InSequence s;
- EXPECT_CALL(mockDatabase, deferredBegin());
+ EXPECT_CALL(databaseMock, deferredBegin());
EXPECT_CALL(fetchIncludedIndexingTimeStampsStatement,
valuesReturnSourceTimeStamps(1024, TypedEq<int>(1)))
.WillOnce(Throw(Sqlite::StatementIsBusy{""}));
- EXPECT_CALL(mockDatabase, rollback());
- EXPECT_CALL(mockDatabase, deferredBegin());
+ EXPECT_CALL(databaseMock, rollback());
+ EXPECT_CALL(databaseMock, deferredBegin());
EXPECT_CALL(fetchIncludedIndexingTimeStampsStatement,
valuesReturnSourceTimeStamps(1024, TypedEq<int>(1)));
- EXPECT_CALL(mockDatabase, commit());
+ EXPECT_CALL(databaseMock, commit());
storage.fetchIncludedIndexingTimeStamps(1);
}
@@ -366,16 +389,16 @@ TEST_F(BuildDependenciesStorage, FetchDependentSourceIdsIsBusy)
{
InSequence s;
- EXPECT_CALL(mockDatabase, deferredBegin());
+ EXPECT_CALL(databaseMock, deferredBegin());
EXPECT_CALL(fetchDependentSourceIdsStatement, valuesReturnFilePathIds(1024, TypedEq<int>(3)));
EXPECT_CALL(fetchDependentSourceIdsStatement, valuesReturnFilePathIds(1024, TypedEq<int>(2)))
.WillOnce(Throw(Sqlite::StatementIsBusy{""}));
- EXPECT_CALL(mockDatabase, rollback());
- EXPECT_CALL(mockDatabase, deferredBegin());
+ EXPECT_CALL(databaseMock, rollback());
+ EXPECT_CALL(databaseMock, deferredBegin());
EXPECT_CALL(fetchDependentSourceIdsStatement, valuesReturnFilePathIds(1024, TypedEq<int>(3)));
EXPECT_CALL(fetchDependentSourceIdsStatement, valuesReturnFilePathIds(1024, TypedEq<int>(2)));
EXPECT_CALL(fetchDependentSourceIdsStatement, valuesReturnFilePathIds(1024, TypedEq<int>(7)));
- EXPECT_CALL(mockDatabase, commit());
+ EXPECT_CALL(databaseMock, commit());
storage.fetchDependentSourceIds({3, 2, 7});
}
diff --git a/tests/unit/unittest/filepathcache-test.cpp b/tests/unit/unittest/filepathcache-test.cpp
index 4b43d3924c..fce075ab46 100644
--- a/tests/unit/unittest/filepathcache-test.cpp
+++ b/tests/unit/unittest/filepathcache-test.cpp
@@ -26,7 +26,7 @@
#include "googletest.h"
#include "mockfilepathstorage.h"
-#include "mocksqlitedatabase.h"
+#include "sqlitedatabasemock.h"
#include <filepathcache.h>
@@ -75,10 +75,10 @@ protected:
}
protected:
- NiceMock<MockSqliteDatabase> mockDatabase;
- NiceMock<MockFilePathStorage> mockStorage{mockDatabase};
+ NiceMock<SqliteDatabaseMock> databaseMock;
+ NiceMock<MockFilePathStorage> mockStorage{databaseMock};
Cache cache{mockStorage};
- NiceMock<MockFilePathStorage> mockStorageFilled{mockDatabase};
+ NiceMock<MockFilePathStorage> mockStorageFilled{databaseMock};
Cache cacheNotFilled{mockStorageFilled};
};
@@ -402,14 +402,14 @@ TEST_F(FilePathCache, AddFilePathsCalls)
Cache cacheFilled{mockStorageFilled};
InSequence s;
- EXPECT_CALL(mockDatabase, deferredBegin());
+ EXPECT_CALL(databaseMock, deferredBegin());
EXPECT_CALL(mockStorageFilled, fetchDirectoryIdUnguarded(Eq("/path3/to"))).WillOnce(Return(7));
EXPECT_CALL(mockStorageFilled, fetchDirectoryIdUnguarded(Eq("/path/to"))).Times(0);
EXPECT_CALL(mockStorageFilled, fetchSourceIdUnguarded(5, Eq("file.h"))).WillOnce(Return(99));
EXPECT_CALL(mockStorageFilled, fetchSourceIdUnguarded(6, Eq("file2.h"))).WillOnce(Return(106));
EXPECT_CALL(mockStorageFilled, fetchSourceIdUnguarded(7, Eq("file.h"))).WillOnce(Return(101));
EXPECT_CALL(mockStorageFilled, fetchSourceIdUnguarded(5, Eq("file.cpp"))).Times(0);
- EXPECT_CALL(mockDatabase, commit());
+ EXPECT_CALL(databaseMock, commit());
cacheFilled.addFilePaths(
FilePathViews{"/path3/to/file.h", "/path/to/file.h", "/path2/to/file2.h", "/path/to/file.cpp"});
@@ -420,10 +420,10 @@ TEST_F(FilePathCache, DontUseTransactionIfNotAddingFilesInAddFilePathsCalls)
Cache cacheFilled{mockStorageFilled};
InSequence s;
- EXPECT_CALL(mockDatabase, deferredBegin()).Times(0);
+ EXPECT_CALL(databaseMock, deferredBegin()).Times(0);
EXPECT_CALL(mockStorageFilled, fetchDirectoryIdUnguarded(Eq("/path/to"))).Times(0);
EXPECT_CALL(mockStorageFilled, fetchSourceIdUnguarded(5, Eq("file.cpp"))).Times(0);
- EXPECT_CALL(mockDatabase, commit()).Times(0);
+ EXPECT_CALL(databaseMock, commit()).Times(0);
cacheFilled.addFilePaths(FilePathViews{"/path/to/file.cpp"});
}
@@ -433,10 +433,10 @@ TEST_F(FilePathCache, UseTransactionIfAddingFilesOnlyInAddFilePathsCalls)
Cache cacheFilled{mockStorageFilled};
InSequence s;
- EXPECT_CALL(mockDatabase, deferredBegin());
+ EXPECT_CALL(databaseMock, deferredBegin());
EXPECT_CALL(mockStorageFilled, fetchDirectoryIdUnguarded(Eq("/path/to"))).Times(0);
EXPECT_CALL(mockStorageFilled, fetchSourceIdUnguarded(5, Eq("file.h")));
- EXPECT_CALL(mockDatabase, commit());
+ EXPECT_CALL(databaseMock, commit());
cacheFilled.addFilePaths(FilePathViews{"/path/to/file.h"});
}
diff --git a/tests/unit/unittest/filepathstorage-test.cpp b/tests/unit/unittest/filepathstorage-test.cpp
index e943ab43da..b982156bcf 100644
--- a/tests/unit/unittest/filepathstorage-test.cpp
+++ b/tests/unit/unittest/filepathstorage-test.cpp
@@ -26,17 +26,18 @@
#include "googletest.h"
#include "mockmutex.h"
-#include "mocksqlitedatabase.h"
-#include "mocksqlitereadstatement.h"
-#include "mocksqlitewritestatement.h"
+#include "sqlitedatabasemock.h"
#include <filepathstorage.h>
#include <filepathstoragesqlitestatementfactory.h>
namespace {
-using StatementFactory = ClangBackEnd::FilePathStorageSqliteStatementFactory<NiceMock<MockSqliteDatabase>>;
+using StatementFactory = ClangBackEnd::FilePathStorageSqliteStatementFactory<NiceMock<SqliteDatabaseMock>>;
using Storage = ClangBackEnd::FilePathStorage<StatementFactory>;
+template<int ResultCount>
+using ReadStatement = NiceMock<SqliteDatabaseMock>::ReadStatement<ResultCount>;
+using WriteStatement = NiceMock<SqliteDatabaseMock>::WriteStatement;
using ClangBackEnd::Sources::Directory;
using ClangBackEnd::Sources::Source;
@@ -54,7 +55,7 @@ protected:
ON_CALL(selectDirectoryIdFromDirectoriesByDirectoryPath,
valueReturnInt32(Utils::SmallStringView("/path/to")))
.WillByDefault(Return(Utils::optional<int>(5)));
- ON_CALL(mockDatabase, lastInsertedRowId())
+ ON_CALL(databaseMock, lastInsertedRowId())
.WillByDefault(Return(12));
ON_CALL(selectAllDirectories, valuesReturnStdVectorDirectory(_))
.WillByDefault(Return(std::vector<Directory>{{"/path/to", 1}, {"/other/path", 2}}));
@@ -98,17 +99,17 @@ protected:
}
protected:
- NiceMock<MockSqliteDatabase> mockDatabase;
- StatementFactory factory{mockDatabase};
- MockSqliteReadStatement &selectDirectoryIdFromDirectoriesByDirectoryPath = factory.selectDirectoryIdFromDirectoriesByDirectoryPath;
- MockSqliteReadStatement &selectSourceIdFromSourcesByDirectoryIdAndSourceName = factory.selectSourceIdFromSourcesByDirectoryIdAndSourceName;
- MockSqliteReadStatement &selectDirectoryPathFromDirectoriesByDirectoryId = factory.selectDirectoryPathFromDirectoriesByDirectoryId;
- MockSqliteReadStatement &selectSourceNameAndDirectoryIdFromSourcesBySourceId = factory.selectSourceNameAndDirectoryIdFromSourcesBySourceId;
- MockSqliteReadStatement &selectAllDirectories = factory.selectAllDirectories;
- MockSqliteWriteStatement &insertIntoDirectories = factory.insertIntoDirectories;
- MockSqliteWriteStatement &insertIntoSources = factory.insertIntoSources;
- MockSqliteReadStatement &selectAllSources = factory.selectAllSources;
- MockSqliteReadStatement &selectDirectoryIdFromSourcesBySourceId = factory.selectDirectoryIdFromSourcesBySourceId;
+ NiceMock<SqliteDatabaseMock> databaseMock;
+ StatementFactory factory{databaseMock};
+ ReadStatement<1> &selectDirectoryIdFromDirectoriesByDirectoryPath = factory.selectDirectoryIdFromDirectoriesByDirectoryPath;
+ ReadStatement<1> &selectSourceIdFromSourcesByDirectoryIdAndSourceName = factory.selectSourceIdFromSourcesByDirectoryIdAndSourceName;
+ ReadStatement<1> &selectDirectoryPathFromDirectoriesByDirectoryId = factory.selectDirectoryPathFromDirectoriesByDirectoryId;
+ ReadStatement<2> &selectSourceNameAndDirectoryIdFromSourcesBySourceId = factory.selectSourceNameAndDirectoryIdFromSourcesBySourceId;
+ ReadStatement<2> &selectAllDirectories = factory.selectAllDirectories;
+ WriteStatement &insertIntoDirectories = factory.insertIntoDirectories;
+ WriteStatement &insertIntoSources = factory.insertIntoSources;
+ ReadStatement<3> &selectAllSources = factory.selectAllSources;
+ ReadStatement<1> &selectDirectoryIdFromSourcesBySourceId = factory.selectDirectoryIdFromSourcesBySourceId;
Storage storage{factory};
};
@@ -229,10 +230,10 @@ TEST_F(FilePathStorage, CallSelectForFetchingDirectoryIdForKnownPath)
{
InSequence s;
- EXPECT_CALL(mockDatabase, deferredBegin());
+ EXPECT_CALL(databaseMock, deferredBegin());
EXPECT_CALL(selectDirectoryIdFromDirectoriesByDirectoryPath,
valueReturnInt32(TypedEq<Utils::SmallStringView>("/path/to")));
- EXPECT_CALL(mockDatabase, commit());
+ EXPECT_CALL(databaseMock, commit());
storage.fetchDirectoryId("/path/to");
}
@@ -241,10 +242,10 @@ TEST_F(FilePathStorage, CallSelectForFetchingSourceIdForKnownPath)
{
InSequence s;
- EXPECT_CALL(mockDatabase, deferredBegin());
+ EXPECT_CALL(databaseMock, deferredBegin());
EXPECT_CALL(selectSourceIdFromSourcesByDirectoryIdAndSourceName,
valueReturnInt32(5, Eq("file.h")));
- EXPECT_CALL(mockDatabase, commit());
+ EXPECT_CALL(databaseMock, commit());
storage.fetchSourceId(5, "file.h");
}
@@ -267,11 +268,11 @@ TEST_F(FilePathStorage, CallSelectAndWriteForFetchingDirectoryIdForUnknownPath)
{
InSequence s;
- EXPECT_CALL(mockDatabase, deferredBegin());
+ EXPECT_CALL(databaseMock, deferredBegin());
EXPECT_CALL(selectDirectoryIdFromDirectoriesByDirectoryPath,
valueReturnInt32(TypedEq<Utils::SmallStringView>("/some/not/known/path")));
EXPECT_CALL(insertIntoDirectories, write(TypedEq<Utils::SmallStringView>("/some/not/known/path")));
- EXPECT_CALL(mockDatabase, commit());
+ EXPECT_CALL(databaseMock, commit());
storage.fetchDirectoryId("/some/not/known/path");
}
@@ -280,12 +281,12 @@ TEST_F(FilePathStorage, CallSelectAndWriteForFetchingSourceIdForUnknownEntry)
{
InSequence s;
- EXPECT_CALL(mockDatabase, deferredBegin());
+ EXPECT_CALL(databaseMock, deferredBegin());
EXPECT_CALL(selectSourceIdFromSourcesByDirectoryIdAndSourceName,
valueReturnInt32(5, Eq("unknownfile.h")));
EXPECT_CALL(insertIntoSources,
write(TypedEq<int>(5), TypedEq<Utils::SmallStringView>("unknownfile.h")));
- EXPECT_CALL(mockDatabase, commit());
+ EXPECT_CALL(databaseMock, commit());
storage.fetchSourceId(5, "unknownfile.h");
}
@@ -294,13 +295,13 @@ TEST_F(FilePathStorage, RestartFetchDirectoryIDIfTheStatementIsBusyInBeginBecaus
{
InSequence s;
- EXPECT_CALL(mockDatabase, deferredBegin()).WillOnce(Throw(Sqlite::StatementIsBusy("busy")));
- EXPECT_CALL(mockDatabase, rollback()).Times(0);
- EXPECT_CALL(mockDatabase, deferredBegin());
+ EXPECT_CALL(databaseMock, deferredBegin()).WillOnce(Throw(Sqlite::StatementIsBusy("busy")));
+ EXPECT_CALL(databaseMock, rollback()).Times(0);
+ EXPECT_CALL(databaseMock, deferredBegin());
EXPECT_CALL(selectDirectoryIdFromDirectoriesByDirectoryPath,
valueReturnInt32(TypedEq<Utils::SmallStringView>("/other/unknow/path")));
EXPECT_CALL(insertIntoDirectories, write(TypedEq<Utils::SmallStringView>("/other/unknow/path")));
- EXPECT_CALL(mockDatabase, commit());
+ EXPECT_CALL(databaseMock, commit());
storage.fetchDirectoryId("/other/unknow/path");
}
@@ -310,17 +311,17 @@ TEST_F(FilePathStorage,
{
InSequence s;
- EXPECT_CALL(mockDatabase, deferredBegin());
+ EXPECT_CALL(databaseMock, deferredBegin());
EXPECT_CALL(selectDirectoryIdFromDirectoriesByDirectoryPath,
valueReturnInt32(TypedEq<Utils::SmallStringView>("/other/unknow/path")));
EXPECT_CALL(insertIntoDirectories, write(TypedEq<Utils::SmallStringView>("/other/unknow/path")))
.WillOnce(Throw(Sqlite::StatementIsBusy("busy")));
- EXPECT_CALL(mockDatabase, rollback());
- EXPECT_CALL(mockDatabase, deferredBegin());
+ EXPECT_CALL(databaseMock, rollback());
+ EXPECT_CALL(databaseMock, deferredBegin());
EXPECT_CALL(selectDirectoryIdFromDirectoriesByDirectoryPath,
valueReturnInt32(TypedEq<Utils::SmallStringView>("/other/unknow/path")));
EXPECT_CALL(insertIntoDirectories, write(TypedEq<Utils::SmallStringView>("/other/unknow/path")));
- EXPECT_CALL(mockDatabase, commit());
+ EXPECT_CALL(databaseMock, commit());
storage.fetchDirectoryId("/other/unknow/path");
}
@@ -329,16 +330,16 @@ TEST_F(FilePathStorage, CallSelectAndWriteForFetchingDirectoryIdTwoTimesIfTheInd
{
InSequence s;
- EXPECT_CALL(mockDatabase,deferredBegin());
+ EXPECT_CALL(databaseMock,deferredBegin());
EXPECT_CALL(selectDirectoryIdFromDirectoriesByDirectoryPath,
valueReturnInt32(TypedEq<Utils::SmallStringView>("/other/unknow/path")));
EXPECT_CALL(insertIntoDirectories, write(TypedEq<Utils::SmallStringView>("/other/unknow/path")))
.WillOnce(Throw(Sqlite::ConstraintPreventsModification("busy")));
- EXPECT_CALL(mockDatabase, rollback());
- EXPECT_CALL(mockDatabase,deferredBegin());
+ EXPECT_CALL(databaseMock, rollback());
+ EXPECT_CALL(databaseMock,deferredBegin());
EXPECT_CALL(selectDirectoryIdFromDirectoriesByDirectoryPath,
valueReturnInt32(TypedEq<Utils::SmallStringView>("/other/unknow/path")));
- EXPECT_CALL(mockDatabase, commit());
+ EXPECT_CALL(databaseMock, commit());
storage.fetchDirectoryId("/other/unknow/path");
}
@@ -347,14 +348,14 @@ TEST_F(FilePathStorage, RestartFetchSourceIdIfTheStatementIsBusyInBeginBecauseTh
{
InSequence s;
- EXPECT_CALL(mockDatabase, deferredBegin()).WillOnce(Throw(Sqlite::StatementIsBusy("busy")));
- EXPECT_CALL(mockDatabase, rollback()).Times(0);
- EXPECT_CALL(mockDatabase, deferredBegin());
+ EXPECT_CALL(databaseMock, deferredBegin()).WillOnce(Throw(Sqlite::StatementIsBusy("busy")));
+ EXPECT_CALL(databaseMock, rollback()).Times(0);
+ EXPECT_CALL(databaseMock, deferredBegin());
EXPECT_CALL(selectSourceIdFromSourcesByDirectoryIdAndSourceName,
valueReturnInt32(5, Eq("otherunknownfile.h")));
EXPECT_CALL(insertIntoSources,
write(TypedEq<int>(5), TypedEq<Utils::SmallStringView>("otherunknownfile.h")));
- EXPECT_CALL(mockDatabase, commit());
+ EXPECT_CALL(databaseMock, commit());
storage.fetchSourceId(5, "otherunknownfile.h");
}
@@ -364,19 +365,19 @@ TEST_F(FilePathStorage,
{
InSequence s;
- EXPECT_CALL(mockDatabase, deferredBegin());
+ EXPECT_CALL(databaseMock, deferredBegin());
EXPECT_CALL(selectSourceIdFromSourcesByDirectoryIdAndSourceName,
valueReturnInt32(5, Eq("otherunknownfile.h")));
EXPECT_CALL(insertIntoSources,
write(TypedEq<int>(5), TypedEq<Utils::SmallStringView>("otherunknownfile.h")))
.WillOnce(Throw(Sqlite::StatementIsBusy("busy")));
- EXPECT_CALL(mockDatabase, rollback());
- EXPECT_CALL(mockDatabase, deferredBegin());
+ EXPECT_CALL(databaseMock, rollback());
+ EXPECT_CALL(databaseMock, deferredBegin());
EXPECT_CALL(selectSourceIdFromSourcesByDirectoryIdAndSourceName,
valueReturnInt32(5, Eq("otherunknownfile.h")));
EXPECT_CALL(insertIntoSources,
write(TypedEq<int>(5), TypedEq<Utils::SmallStringView>("otherunknownfile.h")));
- EXPECT_CALL(mockDatabase, commit());
+ EXPECT_CALL(databaseMock, commit());
storage.fetchSourceId(5, "otherunknownfile.h");
}
@@ -385,18 +386,18 @@ TEST_F(FilePathStorage, CallSelectAndWriteForFetchingSourceTwoTimesIfTheIndexIsC
{
InSequence s;
- EXPECT_CALL(mockDatabase,deferredBegin());
+ EXPECT_CALL(databaseMock,deferredBegin());
EXPECT_CALL(selectSourceIdFromSourcesByDirectoryIdAndSourceName,
valueReturnInt32(5, Eq("otherunknownfile.h")));
EXPECT_CALL(insertIntoSources,
write(TypedEq<int>(5), TypedEq<Utils::SmallStringView>("otherunknownfile.h")))
.WillOnce(Throw(Sqlite::ConstraintPreventsModification("busy")));
- EXPECT_CALL(mockDatabase, rollback());
- EXPECT_CALL(mockDatabase,deferredBegin());
+ EXPECT_CALL(databaseMock, rollback());
+ EXPECT_CALL(databaseMock,deferredBegin());
EXPECT_CALL(selectSourceIdFromSourcesByDirectoryIdAndSourceName,
valueReturnInt32(5, Eq("otherunknownfile.h")))
.WillOnce(Return(Utils::optional<int>(42)));
- EXPECT_CALL(mockDatabase, commit());
+ EXPECT_CALL(databaseMock, commit());
storage.fetchSourceId(5, "otherunknownfile.h");
}
@@ -417,27 +418,27 @@ TEST_F(FilePathStorage, SelectAllSources)
TEST_F(FilePathStorage, CallSelectAllDirectories)
{
- EXPECT_CALL(mockDatabase, deferredBegin());
+ EXPECT_CALL(databaseMock, deferredBegin());
EXPECT_CALL(selectAllDirectories, valuesReturnStdVectorDirectory(256));
- EXPECT_CALL(mockDatabase, commit());
+ EXPECT_CALL(databaseMock, commit());
storage.fetchAllDirectories();
}
TEST_F(FilePathStorage, CallSelectAllSources)
{
- EXPECT_CALL(mockDatabase, deferredBegin());
+ EXPECT_CALL(databaseMock, deferredBegin());
EXPECT_CALL(selectAllSources, valuesReturnStdVectorSource(8192));
- EXPECT_CALL(mockDatabase, commit());
+ EXPECT_CALL(databaseMock, commit());
storage.fetchAllSources();
}
TEST_F(FilePathStorage, CallValueForFetchDirectoryPathForId)
{
- EXPECT_CALL(mockDatabase, deferredBegin());
+ EXPECT_CALL(databaseMock, deferredBegin());
EXPECT_CALL(selectDirectoryPathFromDirectoriesByDirectoryId, valueReturnPathString(5));
- EXPECT_CALL(mockDatabase, commit());
+ EXPECT_CALL(databaseMock, commit());
storage.fetchDirectoryPath(5);
}
@@ -456,9 +457,9 @@ TEST_F(FilePathStorage, ThrowAsFetchingDirectoryPathForNonExistingId)
TEST_F(FilePathStorage, CallValueForFetchSoureNameForId)
{
- EXPECT_CALL(mockDatabase, deferredBegin());
+ EXPECT_CALL(databaseMock, deferredBegin());
EXPECT_CALL(selectSourceNameAndDirectoryIdFromSourcesBySourceId, valueReturnSourceNameAndDirectoryId(42));
- EXPECT_CALL(mockDatabase, commit());
+ EXPECT_CALL(databaseMock, commit());
storage.fetchSourceNameAndDirectoryId(42);
}
@@ -480,15 +481,15 @@ TEST_F(FilePathStorage, RestartFetchSourceNameIfTheStatementIsBusyInBegin)
{
InSequence s;
- EXPECT_CALL(mockDatabase, lock());
- EXPECT_CALL(mockDatabase, deferredBegin()).WillOnce(Throw(Sqlite::StatementIsBusy("busy")));
- EXPECT_CALL(mockDatabase, rollback()).Times(0);
- EXPECT_CALL(mockDatabase, unlock());
- EXPECT_CALL(mockDatabase, lock());
- EXPECT_CALL(mockDatabase, deferredBegin());
+ EXPECT_CALL(databaseMock, lock());
+ EXPECT_CALL(databaseMock, deferredBegin()).WillOnce(Throw(Sqlite::StatementIsBusy("busy")));
+ EXPECT_CALL(databaseMock, rollback()).Times(0);
+ EXPECT_CALL(databaseMock, unlock());
+ EXPECT_CALL(databaseMock, lock());
+ EXPECT_CALL(databaseMock, deferredBegin());
EXPECT_CALL(selectSourceNameAndDirectoryIdFromSourcesBySourceId, valueReturnSourceNameAndDirectoryId(42));
- EXPECT_CALL(mockDatabase, commit());
- EXPECT_CALL(mockDatabase, unlock());
+ EXPECT_CALL(databaseMock, commit());
+ EXPECT_CALL(databaseMock, unlock());
storage.fetchSourceNameAndDirectoryId(42);
}
@@ -497,15 +498,15 @@ TEST_F(FilePathStorage, RestartFetchDirectoryPathIfTheStatementIsBusyInBegin)
{
InSequence s;
- EXPECT_CALL(mockDatabase, lock());
- EXPECT_CALL(mockDatabase, deferredBegin()).WillOnce(Throw(Sqlite::StatementIsBusy("busy")));
- EXPECT_CALL(mockDatabase, rollback()).Times(0);
- EXPECT_CALL(mockDatabase, unlock());
- EXPECT_CALL(mockDatabase, lock());
- EXPECT_CALL(mockDatabase, deferredBegin());
+ EXPECT_CALL(databaseMock, lock());
+ EXPECT_CALL(databaseMock, deferredBegin()).WillOnce(Throw(Sqlite::StatementIsBusy("busy")));
+ EXPECT_CALL(databaseMock, rollback()).Times(0);
+ EXPECT_CALL(databaseMock, unlock());
+ EXPECT_CALL(databaseMock, lock());
+ EXPECT_CALL(databaseMock, deferredBegin());
EXPECT_CALL(selectDirectoryPathFromDirectoriesByDirectoryId, valueReturnPathString(5));
- EXPECT_CALL(mockDatabase, commit());
- EXPECT_CALL(mockDatabase, unlock());
+ EXPECT_CALL(databaseMock, commit());
+ EXPECT_CALL(databaseMock, unlock());
storage.fetchDirectoryPath(5);
}
@@ -514,15 +515,15 @@ TEST_F(FilePathStorage, RestartFetchAllDirectoriesIfBeginIsBusy)
{
InSequence s;
- EXPECT_CALL(mockDatabase, lock());
- EXPECT_CALL(mockDatabase, deferredBegin()).WillOnce(Throw(Sqlite::StatementIsBusy("busy")));
- EXPECT_CALL(mockDatabase, rollback()).Times(0);
- EXPECT_CALL(mockDatabase, unlock());
- EXPECT_CALL(mockDatabase, lock());
- EXPECT_CALL(mockDatabase, deferredBegin());
+ EXPECT_CALL(databaseMock, lock());
+ EXPECT_CALL(databaseMock, deferredBegin()).WillOnce(Throw(Sqlite::StatementIsBusy("busy")));
+ EXPECT_CALL(databaseMock, rollback()).Times(0);
+ EXPECT_CALL(databaseMock, unlock());
+ EXPECT_CALL(databaseMock, lock());
+ EXPECT_CALL(databaseMock, deferredBegin());
EXPECT_CALL(selectAllDirectories, valuesReturnStdVectorDirectory(256));
- EXPECT_CALL(mockDatabase, commit());
- EXPECT_CALL(mockDatabase, unlock());
+ EXPECT_CALL(databaseMock, commit());
+ EXPECT_CALL(databaseMock, unlock());
storage.fetchAllDirectories();
}
@@ -531,15 +532,15 @@ TEST_F(FilePathStorage, RestartFetchAllSourcesIfBeginIsBusy)
{
InSequence s;
- EXPECT_CALL(mockDatabase, lock());
- EXPECT_CALL(mockDatabase, deferredBegin()).WillOnce(Throw(Sqlite::StatementIsBusy("busy")));
- EXPECT_CALL(mockDatabase, rollback()).Times(0);
- EXPECT_CALL(mockDatabase, unlock());
- EXPECT_CALL(mockDatabase, lock());
- EXPECT_CALL(mockDatabase, deferredBegin());
+ EXPECT_CALL(databaseMock, lock());
+ EXPECT_CALL(databaseMock, deferredBegin()).WillOnce(Throw(Sqlite::StatementIsBusy("busy")));
+ EXPECT_CALL(databaseMock, rollback()).Times(0);
+ EXPECT_CALL(databaseMock, unlock());
+ EXPECT_CALL(databaseMock, lock());
+ EXPECT_CALL(databaseMock, deferredBegin());
EXPECT_CALL(selectAllSources, valuesReturnStdVectorSource(8192));
- EXPECT_CALL(mockDatabase, commit());
- EXPECT_CALL(mockDatabase, unlock());
+ EXPECT_CALL(databaseMock, commit());
+ EXPECT_CALL(databaseMock, unlock());
storage.fetchAllSources();
}
@@ -560,11 +561,11 @@ TEST_F(FilePathStorage, FetchDirectoryIdCalls)
{
InSequence s;
- EXPECT_CALL(mockDatabase, lock());
- EXPECT_CALL(mockDatabase, deferredBegin());
+ EXPECT_CALL(databaseMock, lock());
+ EXPECT_CALL(databaseMock, deferredBegin());
EXPECT_CALL(selectDirectoryIdFromSourcesBySourceId, valueReturnInt32(TypedEq<int>(42)));
- EXPECT_CALL(mockDatabase, commit());
- EXPECT_CALL(mockDatabase, unlock());
+ EXPECT_CALL(databaseMock, commit());
+ EXPECT_CALL(databaseMock, unlock());
storage.fetchDirectoryId(42);
}
@@ -573,15 +574,15 @@ TEST_F(FilePathStorage, FetchDirectoryIdCallsDatabaseIsBusy)
{
InSequence s;
- EXPECT_CALL(mockDatabase, lock());
- EXPECT_CALL(mockDatabase, deferredBegin()).WillOnce(Throw(Sqlite::StatementIsBusy("busy")));
- EXPECT_CALL(mockDatabase, rollback()).Times(0);
- EXPECT_CALL(mockDatabase, unlock());
- EXPECT_CALL(mockDatabase, lock());
- EXPECT_CALL(mockDatabase, deferredBegin());
+ EXPECT_CALL(databaseMock, lock());
+ EXPECT_CALL(databaseMock, deferredBegin()).WillOnce(Throw(Sqlite::StatementIsBusy("busy")));
+ EXPECT_CALL(databaseMock, rollback()).Times(0);
+ EXPECT_CALL(databaseMock, unlock());
+ EXPECT_CALL(databaseMock, lock());
+ EXPECT_CALL(databaseMock, deferredBegin());
EXPECT_CALL(selectDirectoryIdFromSourcesBySourceId, valueReturnInt32(TypedEq<int>(42)));
- EXPECT_CALL(mockDatabase, commit());
- EXPECT_CALL(mockDatabase, unlock());
+ EXPECT_CALL(databaseMock, commit());
+ EXPECT_CALL(databaseMock, unlock());
storage.fetchDirectoryId(42);
}
@@ -590,11 +591,11 @@ TEST_F(FilePathStorage, FetchDirectoryIdCallsThrows)
{
InSequence s;
- EXPECT_CALL(mockDatabase, lock());
- EXPECT_CALL(mockDatabase, deferredBegin());
+ EXPECT_CALL(databaseMock, lock());
+ EXPECT_CALL(databaseMock, deferredBegin());
EXPECT_CALL(selectDirectoryIdFromSourcesBySourceId, valueReturnInt32(TypedEq<int>(41)));
- EXPECT_CALL(mockDatabase, rollback());
- EXPECT_CALL(mockDatabase, unlock());
+ EXPECT_CALL(databaseMock, rollback());
+ EXPECT_CALL(databaseMock, unlock());
ASSERT_ANY_THROW(storage.fetchDirectoryId(41));
}
diff --git a/tests/unit/unittest/filepathstoragesqlitestatementfactory-test.cpp b/tests/unit/unittest/filepathstoragesqlitestatementfactory-test.cpp
index 42c1d0541a..0fb06aa87a 100644
--- a/tests/unit/unittest/filepathstoragesqlitestatementfactory-test.cpp
+++ b/tests/unit/unittest/filepathstoragesqlitestatementfactory-test.cpp
@@ -26,21 +26,19 @@
#include "googletest.h"
#include "mockmutex.h"
-#include "mocksqlitedatabase.h"
-#include "mocksqlitereadstatement.h"
-#include "mocksqlitewritestatement.h"
+#include "sqlitedatabasemock.h"
#include <filepathstoragesqlitestatementfactory.h>
namespace {
-using StatementFactory = ClangBackEnd::FilePathStorageSqliteStatementFactory<NiceMock<MockSqliteDatabase>>;
+using StatementFactory = ClangBackEnd::FilePathStorageSqliteStatementFactory<NiceMock<SqliteDatabaseMock>>;
class FilePathStorageSqliteStatementFactory : public testing::Test
{
protected:
- NiceMock<MockSqliteDatabase> mockDatabase;
- StatementFactory factory{mockDatabase};
+ NiceMock<SqliteDatabaseMock> databaseMock;
+ StatementFactory factory{databaseMock};
};
TEST_F(FilePathStorageSqliteStatementFactory, SelectDirectoryIdFromDirectoriesByDirectoryPath)
diff --git a/tests/unit/unittest/imagecachestorage-test.cpp b/tests/unit/unittest/imagecachestorage-test.cpp
index d1246452a2..50995e6c40 100644
--- a/tests/unit/unittest/imagecachestorage-test.cpp
+++ b/tests/unit/unittest/imagecachestorage-test.cpp
@@ -55,14 +55,15 @@ MATCHER_P2(IsIconEntry,
class ImageCacheStorageTest : public testing::Test
{
protected:
- using ReadStatement = QmlDesigner::ImageCacheStorage<SqliteDatabaseMock>::ReadStatement;
+ template<int ResultCount>
+ using ReadStatement = QmlDesigner::ImageCacheStorage<SqliteDatabaseMock>::ReadStatement<ResultCount>;
using WriteStatement = QmlDesigner::ImageCacheStorage<SqliteDatabaseMock>::WriteStatement;
NiceMock<SqliteDatabaseMock> databaseMock;
QmlDesigner::ImageCacheStorage<SqliteDatabaseMock> storage{databaseMock};
- ReadStatement &selectImageStatement = storage.selectImageStatement;
- ReadStatement &selectSmallImageStatement = storage.selectSmallImageStatement;
- ReadStatement &selectIconStatement = storage.selectIconStatement;
+ ReadStatement<1> &selectImageStatement = storage.selectImageStatement;
+ ReadStatement<1> &selectSmallImageStatement = storage.selectSmallImageStatement;
+ ReadStatement<1> &selectIconStatement = storage.selectIconStatement;
WriteStatement &upsertImageStatement = storage.upsertImageStatement;
WriteStatement &upsertIconStatement = storage.upsertIconStatement;
QImage image1{10, 10, QImage::Format_ARGB32};
diff --git a/tests/unit/unittest/lastchangedrowid-test.cpp b/tests/unit/unittest/lastchangedrowid-test.cpp
index aee2d187e3..2ceb8b1731 100644
--- a/tests/unit/unittest/lastchangedrowid-test.cpp
+++ b/tests/unit/unittest/lastchangedrowid-test.cpp
@@ -25,7 +25,7 @@
#include "googletest.h"
-#include "mocksqlitedatabase.h"
+#include "sqlitedatabasemock.h"
#include <lastchangedrowid.h>
@@ -34,7 +34,7 @@ namespace {
class LastChangedRowId : public testing::Test
{
protected:
- NiceMock<MockSqliteDatabase> mockSqliteDatabase;
+ NiceMock<SqliteDatabaseMock> mockSqliteDatabase;
Sqlite::LastChangedRowId<1> lastRowId{mockSqliteDatabase, "main", "foo"};
};
@@ -112,7 +112,7 @@ TEST_F(LastChangedRowId, TakeLastRowIdResetsRowIdToMinusOne)
class LastChangedRowIdWithTwoTables : public testing::Test
{
protected:
- NiceMock<MockSqliteDatabase> mockSqliteDatabase;
+ NiceMock<SqliteDatabaseMock> mockSqliteDatabase;
Sqlite::LastChangedRowId<2> lastRowId{mockSqliteDatabase, "main", "foo", "bar"};
};
@@ -197,7 +197,7 @@ TEST_F(LastChangedRowIdWithTwoTables, TakeLastRowIdResetsRowIdToMinusOne)
class LastChangedRowIdWithThreeTables : public testing::Test
{
protected:
- NiceMock<MockSqliteDatabase> mockSqliteDatabase;
+ NiceMock<SqliteDatabaseMock> mockSqliteDatabase;
Sqlite::LastChangedRowId<3> lastRowId{mockSqliteDatabase, "main", "foo", "bar", "too"};
};
@@ -290,7 +290,7 @@ TEST_F(LastChangedRowIdWithThreeTables, TakeLastRowIdResetsRowIdToMinusOne)
class LastChangedRowIdWithNoDatabaseAndTable : public testing::Test
{
protected:
- NiceMock<MockSqliteDatabase> mockSqliteDatabase;
+ NiceMock<SqliteDatabaseMock> mockSqliteDatabase;
Sqlite::LastChangedRowId<> lastRowId{mockSqliteDatabase};
};
@@ -350,7 +350,7 @@ TEST_F(LastChangedRowIdWithNoDatabaseAndTable, TakeLastRowIdResetsRowIdToMinusOn
class LastChangedRowIdWithNoTable : public testing::Test
{
protected:
- NiceMock<MockSqliteDatabase> mockSqliteDatabase;
+ NiceMock<SqliteDatabaseMock> mockSqliteDatabase;
Sqlite::LastChangedRowId<> lastRowId{mockSqliteDatabase, "main"};
};
diff --git a/tests/unit/unittest/mockfilepathstorage.h b/tests/unit/unittest/mockfilepathstorage.h
index cc6cfa07c7..0ea6c1b16d 100644
--- a/tests/unit/unittest/mockfilepathstorage.h
+++ b/tests/unit/unittest/mockfilepathstorage.h
@@ -27,15 +27,15 @@
#include "googletest.h"
-#include "mocksqlitedatabase.h"
+#include "sqlitedatabasemock.h"
#include <filepathstoragesources.h>
class MockFilePathStorage
{
public:
- MockFilePathStorage(MockSqliteDatabase &mockDatabase)
- : mockDatabase{mockDatabase}
+ MockFilePathStorage(SqliteDatabaseMock &databaseMock)
+ : databaseMock{databaseMock}
{}
MOCK_METHOD1(fetchDirectoryId, int(Utils::SmallStringView directoryPath));
@@ -50,8 +50,8 @@ public:
MOCK_METHOD0(fetchAllDirectories, std::vector<ClangBackEnd::Sources::Directory>());
MOCK_METHOD0(fetchAllSources, std::vector<ClangBackEnd::Sources::Source>());
- MockSqliteDatabase &database() { return mockDatabase; }
+ SqliteDatabaseMock &database() { return databaseMock; }
- MockSqliteDatabase &mockDatabase;
+ SqliteDatabaseMock &databaseMock;
};
diff --git a/tests/unit/unittest/mocksqlitedatabase.h b/tests/unit/unittest/mocksqlitedatabase.h
deleted file mode 100644
index 7a4a8b9e75..0000000000
--- a/tests/unit/unittest/mocksqlitedatabase.h
+++ /dev/null
@@ -1,73 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of Qt Creator.
-**
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-****************************************************************************/
-
-#pragma once
-
-#include "googletest.h"
-
-#include "mocksqlitereadstatement.h"
-#include "mocksqlitetransactionbackend.h"
-#include "mocksqlitewritestatement.h"
-
-#include <sqlitedatabaseinterface.h>
-#include <sqlitetable.h>
-#include <sqlitetransaction.h>
-
-#include <utils/smallstringview.h>
-
-class MockSqliteDatabase : public MockSqliteTransactionBackend, public Sqlite::DatabaseInterface
-{
-public:
- using ReadStatement = NiceMock<MockSqliteReadStatement>;
- using WriteStatement = NiceMock<MockSqliteWriteStatement>;
-
- MOCK_METHOD1(execute,
- void (Utils::SmallStringView sqlStatement));
-
- MOCK_CONST_METHOD0(lastInsertedRowId,
- int64_t ());
-
- MOCK_CONST_METHOD1(setLastInsertedRowId,
- void (int64_t));
-
- MOCK_CONST_METHOD0(isInitialized,
- bool ());
-
- MOCK_METHOD1(setIsInitialized,
- void (bool));
-
- MOCK_METHOD0(walCheckpointFull, void());
-
- MOCK_METHOD2(setUpdateHook,
- void(void *object,
- void (*)(void *object, int, char const *database, char const *, long long rowId)));
-
- MOCK_METHOD0(resetUpdateHook, void());
-
- MOCK_METHOD0(applyAndUpdateSessions, void());
-
- MOCK_METHOD1(setAttachedTables, void(const Utils::SmallStringVector &tables));
-};
-
diff --git a/tests/unit/unittest/mocksqlitereadstatement.cpp b/tests/unit/unittest/mocksqlitereadstatement.cpp
deleted file mode 100644
index 1f5bc53759..0000000000
--- a/tests/unit/unittest/mocksqlitereadstatement.cpp
+++ /dev/null
@@ -1,284 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of Qt Creator.
-**
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-****************************************************************************/
-
-#include "mocksqlitereadstatement.h"
-
-template <>
-SourceLocations
-MockSqliteReadStatement::values<SourceLocation, 3>(std::size_t reserveSize,
- const int &sourceId,
- const int &line,
- const int &column)
-{
- return valuesReturnSourceLocations(reserveSize, sourceId, line, column);
-}
-
-template <>
-CppTools::Usages
-MockSqliteReadStatement::values<CppTools::Usage, 3>(
- std::size_t reserveSize,
- const int &sourceId,
- const int &line,
- const int &column)
-{
- return valuesReturnSourceUsages(reserveSize, sourceId, line, column);
-}
-
-template<>
-CppTools::Usages MockSqliteReadStatement::values<CppTools::Usage, 3>(std::size_t reserveSize,
- const int &sourceId,
- const int &line,
- const int &column,
- const int &locationKind)
-{
- return valuesReturnSourceUsages(reserveSize, sourceId, line, column, locationKind);
-}
-
-template <>
-Symbols
-MockSqliteReadStatement::values<Symbol, 3>(
- std::size_t reserveSize,
- const int &symbolKind,
- const Utils::SmallStringView &searchTerm)
-{
- return valuesReturnSymbols(reserveSize, symbolKind, searchTerm);
-}
-
-template <>
-Symbols
-MockSqliteReadStatement::values<Symbol, 3>(
- std::size_t reserveSize,
- const int &symbolKind1,
- const int &symbolKind2,
- const Utils::SmallStringView &searchTerm)
-{
- return valuesReturnSymbols(reserveSize, symbolKind1, symbolKind2, searchTerm);
-
-}
-
-template <>
-Symbols
-MockSqliteReadStatement::values<Symbol, 3>(
- std::size_t reserveSize,
- const int &symbolKind1,
- const int &symbolKind2,
- const int &symbolKind3,
- const Utils::SmallStringView &searchTerm)
-{
- return valuesReturnSymbols(reserveSize, symbolKind1, symbolKind2, symbolKind3, searchTerm);
-
-}
-
-template <>
-UsedMacros
-MockSqliteReadStatement::values<ClangBackEnd::UsedMacro, 2>(
- std::size_t reserveSize,
- const int &sourceId)
-{
- return valuesReturnUsedMacros(reserveSize, sourceId);
-}
-
-template<>
-FilePathIds MockSqliteReadStatement::values<ClangBackEnd::FilePathId>(std::size_t reserveSize,
- const int &projectPartId)
-{
- return valuesReturnFilePathIds(reserveSize, projectPartId);
-}
-
-template<>
-ClangBackEnd::FilePaths MockSqliteReadStatement::values<ClangBackEnd::FilePath>(std::size_t reserveSize)
-{
- return valuesReturnFilePaths(reserveSize);
-}
-
-template <>
-std::vector<Sources::Directory> MockSqliteReadStatement::values<Sources::Directory, 2>(std::size_t reserveSize)
-{
- return valuesReturnStdVectorDirectory(reserveSize);
-}
-
-template<>
-std::vector<Sources::Source> MockSqliteReadStatement::values<Sources::Source, 3>(std::size_t reserveSize)
-{
- return valuesReturnStdVectorSource(reserveSize);
-}
-
-template<>
-ProjectPartNameIds MockSqliteReadStatement::values<ProjectPartNameId, 2>(std::size_t reserveSize)
-{
- return valuesReturnProjectPartNameIds(reserveSize);
-}
-
-template <>
-Utils::optional<int>
-MockSqliteReadStatement::value<int>(const Utils::SmallStringView &text)
-{
- return valueReturnInt32(text);
-}
-
-template <>
-Utils::optional<int>
-MockSqliteReadStatement::value<int>(const Utils::PathString &text)
-{
- return valueReturnInt32(text);
-}
-
-template<>
-Utils::optional<ClangBackEnd::ProjectPartId> MockSqliteReadStatement::value<ClangBackEnd::ProjectPartId>(
- const Utils::SmallStringView &text)
-{
- return valueReturnProjectPartId(text);
-}
-
-template <>
-Utils::optional<int>
-MockSqliteReadStatement::value<int>(const int &directoryId, const Utils::SmallStringView &text)
-{
- return valueReturnInt32(directoryId, text);
-}
-
-template<>
-Utils::optional<int> MockSqliteReadStatement::value<int>(const int &value)
-{
- return valueReturnInt32(value);
-}
-
-template <>
-Utils::optional<long long>
-MockSqliteReadStatement::value<long long>(const int &sourceId)
-{
- return valueReturnInt64(sourceId);
-}
-
-template <>
-Utils::optional<Utils::PathString>
-MockSqliteReadStatement::value<Utils::PathString>(const int &directoryId)
-{
- return valueReturnPathString(directoryId);
-}
-
-template <>
-Utils::optional<Utils::PathString>
-MockSqliteReadStatement::value<Utils::PathString>(const Utils::SmallStringView &path)
-{
- return valueReturnPathString(path);
-}
-
-template<>
-Utils::optional<ClangBackEnd::FilePath> MockSqliteReadStatement::value<ClangBackEnd::FilePath>(
- const int &path)
-{
- return valueReturnFilePath(path);
-}
-
-template <>
-Utils::optional<ClangBackEnd::ProjectPartArtefact>
-MockSqliteReadStatement::value<ClangBackEnd::ProjectPartArtefact, 8>(const int& sourceId)
-{
- return valueReturnProjectPartArtefact(sourceId);
-}
-
-template <>
-Utils::optional<ClangBackEnd::ProjectPartArtefact>
-MockSqliteReadStatement::value<ClangBackEnd::ProjectPartArtefact, 8>(const Utils::SmallStringView &projectPartName)
-{
- return valueReturnProjectPartArtefact(projectPartName);
-}
-
-template<>
-Utils::optional<ClangBackEnd::ProjectPartContainer>
-MockSqliteReadStatement::value<ClangBackEnd::ProjectPartContainer, 8>(const int &id)
-{
- return valueReturnProjectPartContainer(id);
-}
-
-template<>
-ClangBackEnd::ProjectPartContainers MockSqliteReadStatement::values<ClangBackEnd::ProjectPartContainer,
- 8>(std::size_t reserveSize)
-{
- return valuesReturnProjectPartContainers(reserveSize);
-}
-
-template<>
-Utils::optional<ClangBackEnd::ProjectPartPch>
-MockSqliteReadStatement::value<ClangBackEnd::ProjectPartPch, 3>(const int &projectPartId)
-{
- return valueReturnProjectPartPch(projectPartId);
-}
-
-template<>
-Utils::optional<ClangBackEnd::PchPaths> MockSqliteReadStatement::value<ClangBackEnd::PchPaths, 2>(
- const int &projectPartId)
-{
- return valueReturnPchPaths(projectPartId);
-}
-
-template<>
-Utils::optional<Utils::SmallString> MockSqliteReadStatement::value<Utils::SmallString>(const int &sourceId)
-{
- return valueReturnSmallString(sourceId);
-}
-
-template <>
-Utils::optional<SourceLocation>
-MockSqliteReadStatement::value<SourceLocation, 3>(const long long &symbolId, const int &locationKind)
-{
- return valueReturnSourceLocation(symbolId, locationKind);
-}
-
-template<>
-SourceEntries MockSqliteReadStatement::values<SourceEntry, 4>(std::size_t reserveSize,
- const int &filePathId,
- const int &projectPartId)
-{
- return valuesReturnSourceEntries(reserveSize, filePathId, projectPartId);
-}
-
-template<>
-SourceTimeStamps MockSqliteReadStatement::values<SourceTimeStamp, 2>(std::size_t reserveSize)
-{
- return valuesReturnSourceTimeStamps(reserveSize);
-}
-
-template<>
-SourceTimeStamps MockSqliteReadStatement::values<SourceTimeStamp, 2>(std::size_t reserveSize,
- const int &sourcePathId)
-{
- return valuesReturnSourceTimeStamps(reserveSize, sourcePathId);
-}
-
-template <>
-Utils::optional<Sources::SourceNameAndDirectoryId>
-MockSqliteReadStatement::value<Sources::SourceNameAndDirectoryId, 2>(const int &id)
-{
- return valueReturnSourceNameAndDirectoryId(id);
-}
-
-template<>
-Utils::optional<ClangBackEnd::PrecompiledHeaderTimeStamps>
-MockSqliteReadStatement::value<ClangBackEnd::PrecompiledHeaderTimeStamps, 2>(const int &projectPartId)
-{
- return valuesReturnPrecompiledHeaderTimeStamps(projectPartId);
-}
diff --git a/tests/unit/unittest/mocksqlitereadstatement.h b/tests/unit/unittest/mocksqlitereadstatement.h
deleted file mode 100644
index 11a7b126e5..0000000000
--- a/tests/unit/unittest/mocksqlitereadstatement.h
+++ /dev/null
@@ -1,334 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of Qt Creator.
-**
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-****************************************************************************/
-
-#pragma once
-
-#include "googletest.h"
-
-#include <sourcelocations.h>
-
-#include <filepathstoragesources.h>
-#include <pchpaths.h>
-#include <projectpartartefact.h>
-#include <projectpartcontainer.h>
-#include <projectpartpch.h>
-#include <projectpartstoragestructs.h>
-#include <sourceentry.h>
-#include <stringcachefwd.h>
-#include <symbol.h>
-#include <usedmacro.h>
-
-#include <cpptools/usages.h>
-
-#include <utils/optional.h>
-#include <utils/smallstring.h>
-
-#include <cstdint>
-#include <tuple>
-#include <vector>
-
-using ClangBackEnd::FilePathIds;
-using ClangBackEnd::SourceEntries;
-using ClangBackEnd::SourceEntry;
-using ClangBackEnd::SourceTimeStamp;
-using ClangBackEnd::SourceTimeStamps;
-using ClangRefactoring::SourceLocation;
-using ClangRefactoring::SourceLocations;
-using std::int64_t;
-namespace Sources = ClangBackEnd::Sources;
-using ClangBackEnd::PrecompiledHeaderTimeStamps;
-using ClangBackEnd::UsedMacros;
-using ClangBackEnd::Internal::ProjectPartNameId;
-using ClangBackEnd::Internal::ProjectPartNameIds;
-using ClangRefactoring::Symbol;
-using ClangRefactoring::Symbols;
-
-class MockSqliteDatabase;
-
-class MockSqliteReadStatement
-{
-public:
- MockSqliteReadStatement() = default;
- MockSqliteReadStatement(Utils::SmallStringView sqlStatement, MockSqliteDatabase &)
- : sqlStatement(sqlStatement)
- {}
-
- MOCK_METHOD4(valuesReturnSourceLocations,
- SourceLocations(std::size_t, int, int, int));
-
- MOCK_METHOD4(valuesReturnSourceUsages, CppTools::Usages(std::size_t, int, int, int));
-
- MOCK_METHOD5(valuesReturnSourceUsages, CppTools::Usages(std::size_t, int, int, int, int));
-
- MOCK_METHOD1(valuesReturnStdVectorDirectory,
- std::vector<Sources::Directory>(std::size_t));
-
- MOCK_METHOD1(valuesReturnStdVectorSource,
- std::vector<Sources::Source>(std::size_t));
-
- MOCK_METHOD3(valuesReturnSourceEntries,
- SourceEntries(std::size_t, int, int));
-
- MOCK_METHOD2(valuesReturnUsedMacros, UsedMacros(std::size_t, int));
-
- MOCK_METHOD2(valuesReturnFilePathIds, FilePathIds(std::size_t, int));
-
- MOCK_METHOD1(valuesReturnProjectPartNameIds, ProjectPartNameIds(std::size_t));
-
- MOCK_METHOD1(valueReturnInt32, Utils::optional<int>(Utils::SmallStringView));
-
- MOCK_METHOD2(valueReturnInt32, Utils::optional<int>(int, Utils::SmallStringView));
-
- MOCK_METHOD1(valueReturnInt32, Utils::optional<int>(int));
-
- MOCK_METHOD1(valueReturnInt64, Utils::optional<long long>(int));
-
- MOCK_METHOD1(valueReturnPathString,
- Utils::optional<Utils::PathString>(int));
-
- MOCK_METHOD1(valueReturnPathString,
- Utils::optional<Utils::PathString>(Utils::SmallStringView));
-
- MOCK_METHOD1(valueReturnFilePath, Utils::optional<ClangBackEnd::FilePath>(int));
-
- MOCK_METHOD1(valuesReturnFilePaths, ClangBackEnd::FilePaths(std::size_t));
-
- MOCK_METHOD1(valueReturnSmallString,
- Utils::optional<Utils::SmallString>(int));
-
- MOCK_METHOD1(valueReturnSourceNameAndDirectoryId,
- Utils::optional<Sources::SourceNameAndDirectoryId>(int));
-
- MOCK_METHOD1(valueReturnProjectPartArtefact,
- Utils::optional<ClangBackEnd::ProjectPartArtefact>(int));
-
- MOCK_METHOD1(valueReturnProjectPartArtefact,
- Utils::optional<ClangBackEnd::ProjectPartArtefact>(Utils::SmallStringView));
- MOCK_METHOD1(valuesReturnProjectPartArtefacts, ClangBackEnd::ProjectPartArtefacts(std::size_t));
- MOCK_METHOD1(valueReturnProjectPartContainer,
- Utils::optional<ClangBackEnd::ProjectPartContainer>(int));
- MOCK_METHOD1(valuesReturnProjectPartContainers, ClangBackEnd::ProjectPartContainers(std::size_t));
- MOCK_METHOD1(valueReturnProjectPartPch, Utils::optional<ClangBackEnd::ProjectPartPch>(int));
-
- MOCK_METHOD1(valueReturnPchPaths, Utils::optional<ClangBackEnd::PchPaths>(int));
-
- MOCK_METHOD3(valuesReturnSymbols, Symbols(std::size_t, int, Utils::SmallStringView));
-
- MOCK_METHOD4(valuesReturnSymbols,
- Symbols(std::size_t, int, int, Utils::SmallStringView));
-
- MOCK_METHOD5(valuesReturnSymbols,
- Symbols(std::size_t, int, int, int, Utils::SmallStringView));
-
- MOCK_METHOD2(valueReturnSourceLocation,
- SourceLocation(long long, int));
-
- MOCK_METHOD1(valueReturnProjectPartId,
- Utils::optional<ClangBackEnd::ProjectPartId>(Utils::SmallStringView));
-
- MOCK_METHOD1(valuesReturnSourceTimeStamps, SourceTimeStamps(std::size_t));
- MOCK_METHOD2(valuesReturnSourceTimeStamps, SourceTimeStamps(std::size_t, int sourcePathId));
-
- MOCK_METHOD1(valuesReturnPrecompiledHeaderTimeStamps,
- PrecompiledHeaderTimeStamps(int projectPartId));
-
- template<typename ResultType, int ResultTypeCount = 1, typename... QueryType>
- std::vector<ResultType> values(std::size_t reserveSize, const QueryType &... queryValues);
-
- template <typename ResultType,
- int ResultTypeCount = 1,
- typename... QueryType>
- std::vector<ResultType> values(std::size_t reserveSize);
-
- template <typename ResultType,
- int ResultTypeCount = 1,
- template <typename...> class QueryContainerType,
- typename QueryElementType>
- std::vector<ResultType> values(std::size_t reserveSize,
- const QueryContainerType<QueryElementType> &queryValues);
-
- template <typename ResultType,
- int ResultTypeCount = 1,
- typename... QueryTypes>
- Utils::optional<ResultType> value(const QueryTypes&... queryValues);
-
-public:
- Utils::SmallString sqlStatement;
-};
-
-template <>
-SourceLocations
-MockSqliteReadStatement::values<SourceLocation, 3>(
- std::size_t reserveSize,
- const int &sourceId,
- const int &line,
- const int &column);
-
-template <>
-CppTools::Usages
-MockSqliteReadStatement::values<CppTools::Usage, 3>(
- std::size_t reserveSize,
- const int &sourceId,
- const int &line,
- const int &column);
-
-template<>
-CppTools::Usages MockSqliteReadStatement::values<CppTools::Usage, 3>(std::size_t reserveSize,
- const int &sourceId,
- const int &line,
- const int &column,
- const int &locationKind);
-
-template <>
-Symbols
-MockSqliteReadStatement::values<Symbol, 3>(
- std::size_t reserveSize,
- const int&,
- const Utils::SmallStringView&);
-
-template <>
-Symbols
-MockSqliteReadStatement::values<Symbol, 3>(
- std::size_t reserveSize,
- const int&,
- const int&,
- const Utils::SmallStringView&);
-
-template <>
-Symbols
-MockSqliteReadStatement::values<Symbol, 3>(
- std::size_t reserveSize,
- const int&,
- const int&,
- const int&,
- const Utils::SmallStringView&);
-
-template <>
-UsedMacros
-MockSqliteReadStatement::values<ClangBackEnd::UsedMacro, 2>(
- std::size_t reserveSize,
- const int &sourceId);
-
-template<>
-FilePathIds MockSqliteReadStatement::values<ClangBackEnd::FilePathId>(std::size_t reserveSize,
- const int &projectPartId);
-
-template<>
-ClangBackEnd::FilePaths MockSqliteReadStatement::values<ClangBackEnd::FilePath>(std::size_t reserveSize);
-
-template <>
-std::vector<Sources::Directory> MockSqliteReadStatement::values<Sources::Directory, 2>(std::size_t reserveSize);
-
-template<>
-std::vector<Sources::Source> MockSqliteReadStatement::values<Sources::Source, 3>(std::size_t reserveSize);
-
-template<>
-ProjectPartNameIds MockSqliteReadStatement::values<ProjectPartNameId, 2>(std::size_t reserveSize);
-
-template<>
-Utils::optional<int> MockSqliteReadStatement::value<int>(const Utils::SmallStringView &);
-
-template <>
-Utils::optional<int>
-MockSqliteReadStatement::value<int>(const Utils::PathString&);
-
-template<>
-Utils::optional<ClangBackEnd::ProjectPartId> MockSqliteReadStatement::value<ClangBackEnd::ProjectPartId>(
- const Utils::SmallStringView &);
-
-template<>
-Utils::optional<ClangBackEnd::FilePath> MockSqliteReadStatement::value<ClangBackEnd::FilePath>(
- const int &);
-
-template <>
-Utils::optional<int>
-MockSqliteReadStatement::value<int>(const int&, const Utils::SmallStringView&);
-
-template<>
-Utils::optional<int> MockSqliteReadStatement::value<int>(const int &);
-
-template <>
-Utils::optional<long long>
-MockSqliteReadStatement::value<long long>(const ClangBackEnd::FilePathId&);
-
-template <>
-Utils::optional<Utils::PathString>
-MockSqliteReadStatement::value<Utils::PathString>(const int&);
-
-template <>
-Utils::optional<Utils::PathString>
-MockSqliteReadStatement::value<Utils::PathString>(const Utils::SmallStringView&);
-
-template <>
-Utils::optional<ClangBackEnd::ProjectPartArtefact>
-MockSqliteReadStatement::value<ClangBackEnd::ProjectPartArtefact, 8>(const int&);
-
-template <>
-Utils::optional<ClangBackEnd::ProjectPartArtefact>
-MockSqliteReadStatement::value<ClangBackEnd::ProjectPartArtefact, 8>(const int&);
-
-template<>
-Utils::optional<ClangBackEnd::ProjectPartContainer>
-MockSqliteReadStatement::value<ClangBackEnd::ProjectPartContainer, 8>(const int &);
-
-template<>
-Utils::optional<ClangBackEnd::PchPaths> MockSqliteReadStatement::value<ClangBackEnd::PchPaths, 2>(
- const int &);
-
-template<>
-ClangBackEnd::ProjectPartContainers MockSqliteReadStatement::values<ClangBackEnd::ProjectPartContainer,
- 8>(std::size_t reserveSize);
-
-template<>
-Utils::optional<ClangBackEnd::ProjectPartPch>
-MockSqliteReadStatement::value<ClangBackEnd::ProjectPartPch, 3>(const int &);
-
-template <>
-Utils::optional<Utils::SmallString>
-MockSqliteReadStatement::value<Utils::SmallString>(const int&);
-
-template <>
-Utils::optional<SourceLocation>
-MockSqliteReadStatement::value<SourceLocation, 3>(const long long &symbolId, const int &locationKind);
-
-template<>
-SourceEntries MockSqliteReadStatement::values<SourceEntry, 4>(std::size_t reserveSize,
- const int &,
- const int &);
-
-template<>
-SourceTimeStamps MockSqliteReadStatement::values<SourceTimeStamp, 2>(std::size_t reserveSize);
-
-template<>
-SourceTimeStamps MockSqliteReadStatement::values<SourceTimeStamp, 2>(std::size_t reserveSize,
- const int &sourcePathId);
-
-template <>
-Utils::optional<Sources::SourceNameAndDirectoryId>
-MockSqliteReadStatement::value<Sources::SourceNameAndDirectoryId, 2>(const int&);
-
-template<>
-Utils::optional<ClangBackEnd::PrecompiledHeaderTimeStamps>
-MockSqliteReadStatement::value<ClangBackEnd::PrecompiledHeaderTimeStamps, 2>(const int &);
diff --git a/tests/unit/unittest/mocksqlitestatement.h b/tests/unit/unittest/mocksqlitestatement.h
index 141eb9520b..ff556a9a4d 100644
--- a/tests/unit/unittest/mocksqlitestatement.h
+++ b/tests/unit/unittest/mocksqlitestatement.h
@@ -58,6 +58,8 @@ public:
MOCK_METHOD1(prepare, void(Utils::SmallStringView sqlStatement));
MOCK_METHOD1(checkColumnCount, void(int));
+
+ MOCK_CONST_METHOD0(isReadOnlyStatement, bool());
};
template<>
@@ -96,13 +98,12 @@ Utils::PathString BaseMockSqliteStatement::fetchValue<Utils::PathString>(int col
return fetchPathStringValue(column);
}
-class MockSqliteStatement : public Sqlite::StatementImplementation<NiceMock<BaseMockSqliteStatement>>
+template<int ResultCount = 1>
+class MockSqliteStatement
+ : public Sqlite::StatementImplementation<NiceMock<BaseMockSqliteStatement>, ResultCount>
{
public:
- explicit MockSqliteStatement()
- : Sqlite::StatementImplementation<NiceMock<BaseMockSqliteStatement>>()
- {}
-
+ explicit MockSqliteStatement() {}
protected:
void checkIsWritableStatement();
diff --git a/tests/unit/unittest/mocksqlitewritestatement.h b/tests/unit/unittest/mocksqlitewritestatement.h
deleted file mode 100644
index 329c5f7f39..0000000000
--- a/tests/unit/unittest/mocksqlitewritestatement.h
+++ /dev/null
@@ -1,118 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of Qt Creator.
-**
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-****************************************************************************/
-
-#pragma once
-
-#include "googletest.h"
-
-#include <utils/smallstring.h>
-
-class MockSqliteDatabase;
-
-class MockSqliteWriteStatement
-{
-public:
- MockSqliteWriteStatement() = default;
- MockSqliteWriteStatement(Utils::SmallStringView sqlStatement, MockSqliteDatabase &)
- : sqlStatement(sqlStatement)
- {}
-
- MOCK_METHOD0(execute,
- void ());
-
- MOCK_METHOD2(bind, void(int, Utils::SmallStringView));
-
- MOCK_METHOD2(bindValues,
- void (Utils::SmallStringView, Utils::SmallStringView));
-
- MOCK_METHOD4(write,
- void (uint, Utils::SmallStringView, Utils::SmallStringView, uint));
-
- MOCK_METHOD4(write,
- void (uint, uint, uint, uint));
-
- MOCK_METHOD4(write,
- void (long long, int, int, int));
-
- MOCK_METHOD5(write,
- void (long long, int, int, int, int));
-
- MOCK_METHOD2(write, void(uint, Utils::SmallStringView));
-
- MOCK_METHOD2(write, void(int, Utils::SmallStringView));
-
- MOCK_METHOD2(write, void(Utils::SmallStringView, Utils::SmallStringView));
-
- MOCK_METHOD3(write, void(int, Utils::SmallStringView, long long));
-
- MOCK_METHOD3(write,
- void (Utils::SmallStringView, Utils::SmallStringView, Utils::SmallStringView));
-
- MOCK_METHOD4(write,
- void (Utils::SmallStringView,
- Utils::SmallStringView,
- Utils::SmallStringView,
- Utils::SmallStringView));
-
- MOCK_METHOD8(write,
- void(int,
- Utils::SmallStringView,
- Utils::SmallStringView,
- Utils::SmallStringView,
- Utils::SmallStringView,
- int,
- int,
- int));
-
- MOCK_METHOD1(write,
- void (Utils::SmallStringView));
-
- MOCK_METHOD1(write,
- void (long long));
-
- MOCK_METHOD1(write,
- void (int));
-
- MOCK_METHOD2(write, void(int, long long));
-
- MOCK_METHOD2(write,
- void (int, int));
-
- MOCK_METHOD3(write,
- void (uint, uint, uint));
-
- MOCK_METHOD3(write, void(int, off_t, time_t));
-
- MOCK_METHOD2(write,
- void (uint, uint));
-
- MOCK_METHOD2(write,
- void (uchar, int));
- MOCK_METHOD4(write, void(int, int, uchar, uchar));
- MOCK_METHOD2(write,
- void (long long, int));
- MOCK_METHOD2(write, void(long long, Utils::SmallStringView));
- Utils::SmallString sqlStatement;
-};
diff --git a/tests/unit/unittest/mocksymbolstorage.h b/tests/unit/unittest/mocksymbolstorage.h
index a174389735..ae5c0f775a 100644
--- a/tests/unit/unittest/mocksymbolstorage.h
+++ b/tests/unit/unittest/mocksymbolstorage.h
@@ -27,7 +27,7 @@
#include "googletest.h"
-#include "mocksqlitedatabase.h"
+#include "sqlitedatabasemock.h"
#include <symbolstorageinterface.h>
diff --git a/tests/unit/unittest/precompiledheaderstorage-test.cpp b/tests/unit/unittest/precompiledheaderstorage-test.cpp
index 77574a28b9..d388f5fb43 100644
--- a/tests/unit/unittest/precompiledheaderstorage-test.cpp
+++ b/tests/unit/unittest/precompiledheaderstorage-test.cpp
@@ -24,7 +24,7 @@
****************************************************************************/
#include "googletest.h"
-#include "mocksqlitedatabase.h"
+#include "sqlitedatabasemock.h"
#include <precompiledheaderstorage.h>
#include <refactoringdatabaseinitializer.h>
@@ -35,25 +35,28 @@
namespace {
-using Storage = ClangBackEnd::PrecompiledHeaderStorage<NiceMock<MockSqliteDatabase>>;
+using Storage = ClangBackEnd::PrecompiledHeaderStorage<NiceMock<SqliteDatabaseMock>>;
+template<int ResultCount>
+using ReadStatement = NiceMock<SqliteDatabaseMock>::ReadStatement<ResultCount>;
+using WriteStatement = NiceMock<SqliteDatabaseMock>::WriteStatement;
class PrecompiledHeaderStorage : public testing::Test
{
protected:
- NiceMock<MockSqliteDatabase> database;
+ NiceMock<SqliteDatabaseMock> database;
Storage storage{database};
- MockSqliteWriteStatement &insertProjectPrecompiledHeaderStatement = storage.insertProjectPrecompiledHeaderStatement;
- MockSqliteWriteStatement &deleteProjectPrecompiledHeaderStatement = storage.deleteProjectPrecompiledHeaderStatement;
- MockSqliteWriteStatement &deleteProjectPrecompiledHeaderPathAndSetBuildTimeStatement
+ WriteStatement &insertProjectPrecompiledHeaderStatement = storage.insertProjectPrecompiledHeaderStatement;
+ WriteStatement &deleteProjectPrecompiledHeaderStatement = storage.deleteProjectPrecompiledHeaderStatement;
+ WriteStatement &deleteProjectPrecompiledHeaderPathAndSetBuildTimeStatement
= storage.deleteProjectPrecompiledHeaderPathAndSetBuildTimeStatement;
- MockSqliteWriteStatement &insertSystemPrecompiledHeaderStatement = storage.insertSystemPrecompiledHeaderStatement;
- MockSqliteWriteStatement &deleteSystemPrecompiledHeaderStatement = storage.deleteSystemPrecompiledHeaderStatement;
- MockSqliteWriteStatement &deleteSystemAndProjectPrecompiledHeaderStatement = storage.deleteSystemAndProjectPrecompiledHeaderStatement;
- MockSqliteReadStatement &fetchSystemPrecompiledHeaderPathStatement = storage.fetchSystemPrecompiledHeaderPathStatement;
- MockSqliteReadStatement &fetchPrecompiledHeaderStatement = storage.fetchPrecompiledHeaderStatement;
- MockSqliteReadStatement &fetchPrecompiledHeadersStatement = storage.fetchPrecompiledHeadersStatement;
- MockSqliteReadStatement &fetchTimeStampsStatement = storage.fetchTimeStampsStatement;
- MockSqliteReadStatement &fetchAllPchPathsStatement = storage.fetchAllPchPathsStatement;
+ WriteStatement &insertSystemPrecompiledHeaderStatement = storage.insertSystemPrecompiledHeaderStatement;
+ WriteStatement &deleteSystemPrecompiledHeaderStatement = storage.deleteSystemPrecompiledHeaderStatement;
+ WriteStatement &deleteSystemAndProjectPrecompiledHeaderStatement = storage.deleteSystemAndProjectPrecompiledHeaderStatement;
+ ReadStatement<1> &fetchSystemPrecompiledHeaderPathStatement = storage.fetchSystemPrecompiledHeaderPathStatement;
+ ReadStatement<1> &fetchPrecompiledHeaderStatement = storage.fetchPrecompiledHeaderStatement;
+ ReadStatement<2> &fetchPrecompiledHeadersStatement = storage.fetchPrecompiledHeadersStatement;
+ ReadStatement<2> &fetchTimeStampsStatement = storage.fetchTimeStampsStatement;
+ ReadStatement<1> &fetchAllPchPathsStatement = storage.fetchAllPchPathsStatement;
};
TEST_F(PrecompiledHeaderStorage, UseTransaction)
diff --git a/tests/unit/unittest/projectpartsstorage-test.cpp b/tests/unit/unittest/projectpartsstorage-test.cpp
index b67cd5a37c..1039f55d35 100644
--- a/tests/unit/unittest/projectpartsstorage-test.cpp
+++ b/tests/unit/unittest/projectpartsstorage-test.cpp
@@ -25,7 +25,7 @@
#include "googletest.h"
-#include "mocksqlitedatabase.h"
+#include "sqlitedatabasemock.h"
#include <builddependenciesstorage.h>
#include <projectpartsstorage.h>
@@ -72,7 +72,10 @@ protected:
class ProjectPartsStorage : public testing::Test, public Data
{
- using Storage = ClangBackEnd::ProjectPartsStorage<MockSqliteDatabase>;
+ using Storage = ClangBackEnd::ProjectPartsStorage<SqliteDatabaseMock>;
+ template<int ResultCount>
+ using ReadStatement = NiceMock<SqliteDatabaseMock>::ReadStatement<ResultCount>;
+ using WriteStatement = NiceMock<SqliteDatabaseMock>::WriteStatement;
protected:
ProjectPartsStorage()
@@ -90,26 +93,25 @@ protected:
ON_CALL(fetchProjectPartsSourcesByIdStatement, valuesReturnFilePathIds(_, Eq(2)))
.WillByDefault(Return(projectPart2.sourcePathIds));
}
- NiceMock<MockSqliteDatabase> mockDatabase;
- Storage storage{mockDatabase};
- MockSqliteReadStatement &fetchProjectPartIdStatement = storage.fetchProjectPartIdStatement;
- MockSqliteWriteStatement &insertProjectPartNameStatement = storage.insertProjectPartNameStatement;
- MockSqliteReadStatement &fetchProjectPartNameStatement = storage.fetchProjectPartNameStatement;
- MockSqliteReadStatement &fetchProjectPartsStatement = storage.fetchProjectPartsStatement;
- MockSqliteReadStatement &fetchProjectPartByIdStatement = storage.fetchProjectPartByIdStatement;
- MockSqliteWriteStatement &updateProjectPartStatement = storage.updateProjectPartStatement;
- MockSqliteReadStatement &getProjectPartArtefactsBySourceId = storage.getProjectPartArtefactsBySourceId;
- MockSqliteReadStatement &getProjectPartArtefactsByProjectPartId = storage.getProjectPartArtefactsByProjectPartId;
- MockSqliteWriteStatement &deleteProjectPartsHeadersByIdStatement = storage.deleteProjectPartsHeadersByIdStatement;
- MockSqliteWriteStatement &deleteProjectPartsSourcesByIdStatement = storage.deleteProjectPartsSourcesByIdStatement;
- MockSqliteWriteStatement &insertProjectPartsHeadersStatement = storage.insertProjectPartsHeadersStatement;
- MockSqliteWriteStatement &insertProjectPartsSourcesStatement = storage.insertProjectPartsSourcesStatement;
- MockSqliteReadStatement &fetchProjectPartsHeadersByIdStatement = storage.fetchProjectPartsHeadersByIdStatement;
- MockSqliteReadStatement &fetchProjectPartsSourcesByIdStatement = storage.fetchProjectPartsSourcesByIdStatement;
- MockSqliteReadStatement &fetchProjectPrecompiledHeaderPathStatement = storage.fetchProjectPrecompiledHeaderBuildTimeStatement;
- MockSqliteReadStatement &fetchProjectPrecompiledHeaderBuildTimeStatement = storage.fetchProjectPrecompiledHeaderBuildTimeStatement;
- MockSqliteWriteStatement &resetDependentIndexingTimeStampsStatement = storage.resetDependentIndexingTimeStampsStatement;
- MockSqliteReadStatement &fetchAllProjectPartNamesAndIdsStatement = storage.fetchAllProjectPartNamesAndIdsStatement;
+ NiceMock<SqliteDatabaseMock> databaseMock;
+ Storage storage{databaseMock};
+ ReadStatement<1> &fetchProjectPartIdStatement = storage.fetchProjectPartIdStatement;
+ WriteStatement &insertProjectPartNameStatement = storage.insertProjectPartNameStatement;
+ ReadStatement<1> &fetchProjectPartNameStatement = storage.fetchProjectPartNameStatement;
+ ReadStatement<8> &fetchProjectPartsStatement = storage.fetchProjectPartsStatement;
+ ReadStatement<8> &fetchProjectPartByIdStatement = storage.fetchProjectPartByIdStatement;
+ WriteStatement &updateProjectPartStatement = storage.updateProjectPartStatement;
+ ReadStatement<8> &getProjectPartArtefactsBySourceId = storage.getProjectPartArtefactsBySourceId;
+ ReadStatement<8> &getProjectPartArtefactsByProjectPartId = storage.getProjectPartArtefactsByProjectPartId;
+ WriteStatement &deleteProjectPartsHeadersByIdStatement = storage.deleteProjectPartsHeadersByIdStatement;
+ WriteStatement &deleteProjectPartsSourcesByIdStatement = storage.deleteProjectPartsSourcesByIdStatement;
+ WriteStatement &insertProjectPartsHeadersStatement = storage.insertProjectPartsHeadersStatement;
+ WriteStatement &insertProjectPartsSourcesStatement = storage.insertProjectPartsSourcesStatement;
+ ReadStatement<1> &fetchProjectPartsHeadersByIdStatement = storage.fetchProjectPartsHeadersByIdStatement;
+ ReadStatement<1> &fetchProjectPartsSourcesByIdStatement = storage.fetchProjectPartsSourcesByIdStatement;
+ ReadStatement<1> &fetchProjectPrecompiledHeaderBuildTimeStatement = storage.fetchProjectPrecompiledHeaderBuildTimeStatement;
+ WriteStatement &resetDependentIndexingTimeStampsStatement = storage.resetDependentIndexingTimeStampsStatement;
+ ReadStatement<2> &fetchAllProjectPartNamesAndIdsStatement = storage.fetchAllProjectPartNamesAndIdsStatement;
IncludeSearchPaths systemIncludeSearchPaths{{"/includes", 1, IncludeSearchPathType::BuiltIn},
{"/other/includes", 2, IncludeSearchPathType::System}};
IncludeSearchPaths projectIncludeSearchPaths{{"/project/includes", 1, IncludeSearchPathType::User},
@@ -134,11 +136,11 @@ TEST_F(ProjectPartsStorage, CallsFetchProjectIdWithNonExistingProjectPartName)
{
InSequence s;
- EXPECT_CALL(mockDatabase, deferredBegin());
+ EXPECT_CALL(databaseMock, deferredBegin());
EXPECT_CALL(fetchProjectPartIdStatement,
valueReturnProjectPartId(TypedEq<Utils::SmallStringView>("test")));
EXPECT_CALL(insertProjectPartNameStatement, write(TypedEq<Utils::SmallStringView>("test")));
- EXPECT_CALL(mockDatabase, commit());
+ EXPECT_CALL(databaseMock, commit());
storage.fetchProjectPartId("test");
}
@@ -158,12 +160,12 @@ TEST_F(ProjectPartsStorage, CallsFetchProjectIdWithExistingProjectPart)
{
InSequence s;
- EXPECT_CALL(mockDatabase, deferredBegin());
+ EXPECT_CALL(databaseMock, deferredBegin());
EXPECT_CALL(fetchProjectPartIdStatement,
valueReturnProjectPartId(TypedEq<Utils::SmallStringView>("test")))
.WillOnce(Return(Utils::optional<ProjectPartId>{20}));
EXPECT_CALL(insertProjectPartNameStatement, write(TypedEq<Utils::SmallStringView>("test"))).Times(0);
- EXPECT_CALL(mockDatabase, commit());
+ EXPECT_CALL(databaseMock, commit());
storage.fetchProjectPartId("test");
}
@@ -184,17 +186,17 @@ TEST_F(ProjectPartsStorage, CallsFetchProjectIdWithBusyDatabaset)
{
InSequence s;
- EXPECT_CALL(mockDatabase, deferredBegin());
+ EXPECT_CALL(databaseMock, deferredBegin());
EXPECT_CALL(fetchProjectPartIdStatement,
valueReturnProjectPartId(TypedEq<Utils::SmallStringView>("test")));
EXPECT_CALL(insertProjectPartNameStatement, write(TypedEq<Utils::SmallStringView>("test")))
.WillOnce(Throw(Sqlite::StatementIsBusy("busy")));
- EXPECT_CALL(mockDatabase, rollback());
- EXPECT_CALL(mockDatabase, deferredBegin());
+ EXPECT_CALL(databaseMock, rollback());
+ EXPECT_CALL(databaseMock, deferredBegin());
EXPECT_CALL(fetchProjectPartIdStatement,
valueReturnProjectPartId(TypedEq<Utils::SmallStringView>("test")));
EXPECT_CALL(insertProjectPartNameStatement, write(TypedEq<Utils::SmallStringView>("test")));
- EXPECT_CALL(mockDatabase, commit());
+ EXPECT_CALL(databaseMock, commit());
storage.fetchProjectPartId("test");
}
@@ -204,7 +206,7 @@ TEST_F(ProjectPartsStorage, FetchProjectIdWithNonExistingProjectPartName)
ON_CALL(fetchProjectPartIdStatement,
valueReturnProjectPartId(TypedEq<Utils::SmallStringView>("test")))
.WillByDefault(Return(Utils::optional<ProjectPartId>{}));
- ON_CALL(mockDatabase, lastInsertedRowId()).WillByDefault(Return(21));
+ ON_CALL(databaseMock, lastInsertedRowId()).WillByDefault(Return(21));
auto id = storage.fetchProjectPartId("test");
@@ -216,7 +218,7 @@ TEST_F(ProjectPartsStorage, FetchProjectIdWithNonExistingProjectPartNameUnguarde
ON_CALL(fetchProjectPartIdStatement,
valueReturnProjectPartId(TypedEq<Utils::SmallStringView>("test")))
.WillByDefault(Return(Utils::optional<ProjectPartId>{}));
- ON_CALL(mockDatabase, lastInsertedRowId()).WillByDefault(Return(21));
+ ON_CALL(databaseMock, lastInsertedRowId()).WillByDefault(Return(21));
auto id = storage.fetchProjectPartIdUnguarded("test");
@@ -232,7 +234,7 @@ TEST_F(ProjectPartsStorage, FetchProjectIdWithNonExistingProjectPartNameAndIsBus
EXPECT_CALL(fetchProjectPartIdStatement,
valueReturnProjectPartId(TypedEq<Utils::SmallStringView>("test")))
.WillOnce(Return(ClangBackEnd::ProjectPartId{21}));
- ON_CALL(mockDatabase, lastInsertedRowId()).WillByDefault(Return(21));
+ ON_CALL(databaseMock, lastInsertedRowId()).WillByDefault(Return(21));
auto id = storage.fetchProjectPartId("test");
@@ -265,10 +267,10 @@ TEST_F(ProjectPartsStorage, FetchProjectPartName)
{
InSequence s;
- EXPECT_CALL(mockDatabase, deferredBegin());
+ EXPECT_CALL(databaseMock, deferredBegin());
EXPECT_CALL(fetchProjectPartNameStatement, valueReturnPathString(TypedEq<int>(12)))
.WillOnce(Return(Utils::optional<Utils::PathString>{"test"}));
- EXPECT_CALL(mockDatabase, commit());
+ EXPECT_CALL(databaseMock, commit());
storage.fetchProjectPartName(12);
}
@@ -277,14 +279,14 @@ TEST_F(ProjectPartsStorage, FetchProjectPartNameStatementIsBusy)
{
InSequence s;
- EXPECT_CALL(mockDatabase, deferredBegin());
+ EXPECT_CALL(databaseMock, deferredBegin());
EXPECT_CALL(fetchProjectPartNameStatement, valueReturnPathString(TypedEq<int>(12)))
.WillOnce(Throw(Sqlite::StatementIsBusy{""}));
- EXPECT_CALL(mockDatabase, rollback());
- EXPECT_CALL(mockDatabase, deferredBegin());
+ EXPECT_CALL(databaseMock, rollback());
+ EXPECT_CALL(databaseMock, deferredBegin());
EXPECT_CALL(fetchProjectPartNameStatement, valueReturnPathString(TypedEq<int>(12)))
.WillOnce(Return(Utils::optional<Utils::PathString>{"test"}));
- EXPECT_CALL(mockDatabase, commit());
+ EXPECT_CALL(databaseMock, commit());
storage.fetchProjectPartName(12);
}
@@ -293,9 +295,9 @@ TEST_F(ProjectPartsStorage, FetchProjectParts)
{
InSequence s;
- EXPECT_CALL(mockDatabase, deferredBegin());
+ EXPECT_CALL(databaseMock, deferredBegin());
EXPECT_CALL(fetchProjectPartsStatement, valuesReturnProjectPartContainers(4096));
- EXPECT_CALL(mockDatabase, commit());
+ EXPECT_CALL(databaseMock, commit());
storage.fetchProjectParts();
}
@@ -304,7 +306,7 @@ TEST_F(ProjectPartsStorage, FetchProjectPartsByIds)
{
InSequence s;
- EXPECT_CALL(mockDatabase, deferredBegin());
+ EXPECT_CALL(databaseMock, deferredBegin());
EXPECT_CALL(fetchProjectPartByIdStatement, valueReturnProjectPartContainer(Eq(1)));
EXPECT_CALL(fetchProjectPartsHeadersByIdStatement, valuesReturnFilePathIds(1024, Eq(1)));
EXPECT_CALL(fetchProjectPartsSourcesByIdStatement, valuesReturnFilePathIds(1024, Eq(1)));
@@ -313,7 +315,7 @@ TEST_F(ProjectPartsStorage, FetchProjectPartsByIds)
EXPECT_CALL(fetchProjectPartsHeadersByIdStatement, valuesReturnFilePathIds(1024, Eq(2)));
EXPECT_CALL(fetchProjectPartsSourcesByIdStatement, valuesReturnFilePathIds(1024, Eq(2)));
EXPECT_CALL(fetchProjectPrecompiledHeaderBuildTimeStatement, valueReturnInt64(Eq(2)));
- EXPECT_CALL(mockDatabase, commit());
+ EXPECT_CALL(databaseMock, commit());
storage.fetchProjectParts({1, 2});
}
@@ -322,15 +324,15 @@ TEST_F(ProjectPartsStorage, FetchProjectPartsByIdsIsBusy)
{
InSequence s;
- EXPECT_CALL(mockDatabase, deferredBegin());
+ EXPECT_CALL(databaseMock, deferredBegin());
EXPECT_CALL(fetchProjectPartByIdStatement, valueReturnProjectPartContainer(Eq(1)));
EXPECT_CALL(fetchProjectPartByIdStatement, valueReturnProjectPartContainer(Eq(2)))
.WillOnce(Throw(Sqlite::StatementIsBusy{""}));
- EXPECT_CALL(mockDatabase, rollback());
- EXPECT_CALL(mockDatabase, deferredBegin());
+ EXPECT_CALL(databaseMock, rollback());
+ EXPECT_CALL(databaseMock, deferredBegin());
EXPECT_CALL(fetchProjectPartByIdStatement, valueReturnProjectPartContainer(Eq(1)));
EXPECT_CALL(fetchProjectPartByIdStatement, valueReturnProjectPartContainer(Eq(2)));
- EXPECT_CALL(mockDatabase, commit());
+ EXPECT_CALL(databaseMock, commit());
storage.fetchProjectParts({1, 2});
}
@@ -385,7 +387,7 @@ TEST_F(ProjectPartsStorage, UpdateProjectParts)
{
InSequence sequence;
- EXPECT_CALL(mockDatabase, immediateBegin());
+ EXPECT_CALL(databaseMock, immediateBegin());
EXPECT_CALL(updateProjectPartStatement,
write(TypedEq<int>(1),
TypedEq<Utils::SmallStringView>(R"(["-m32"])"),
@@ -416,7 +418,7 @@ TEST_F(ProjectPartsStorage, UpdateProjectParts)
EXPECT_CALL(deleteProjectPartsSourcesByIdStatement, write(TypedEq<int>(2)));
EXPECT_CALL(insertProjectPartsSourcesStatement, write(TypedEq<int>(2), TypedEq<int>(7)));
EXPECT_CALL(insertProjectPartsSourcesStatement, write(TypedEq<int>(2), TypedEq<int>(8)));
- EXPECT_CALL(mockDatabase, commit());
+ EXPECT_CALL(databaseMock, commit());
storage.updateProjectParts({projectPart1, projectPart2});
}
@@ -425,8 +427,8 @@ TEST_F(ProjectPartsStorage, UpdateProjectPartsIsBusy)
{
InSequence sequence;
- EXPECT_CALL(mockDatabase, immediateBegin()).WillOnce(Throw(Sqlite::StatementIsBusy{""}));
- EXPECT_CALL(mockDatabase, immediateBegin());
+ EXPECT_CALL(databaseMock, immediateBegin()).WillOnce(Throw(Sqlite::StatementIsBusy{""}));
+ EXPECT_CALL(databaseMock, immediateBegin());
EXPECT_CALL(updateProjectPartStatement,
write(TypedEq<int>(1),
TypedEq<Utils::SmallStringView>(R"(["-m32"])"),
@@ -436,7 +438,7 @@ TEST_F(ProjectPartsStorage, UpdateProjectPartsIsBusy)
2,
35,
2));
- EXPECT_CALL(mockDatabase, commit());
+ EXPECT_CALL(databaseMock, commit());
storage.updateProjectParts({projectPart1});
}
@@ -445,10 +447,10 @@ TEST_F(ProjectPartsStorage, FetchProjectPartArtefactBySourceIdCallsValueInStatem
{
InSequence s;
- EXPECT_CALL(mockDatabase, deferredBegin());
+ EXPECT_CALL(databaseMock, deferredBegin());
EXPECT_CALL(getProjectPartArtefactsBySourceId, valueReturnProjectPartArtefact(1))
.WillRepeatedly(Return(artefact));
- EXPECT_CALL(mockDatabase, commit());
+ EXPECT_CALL(databaseMock, commit());
storage.fetchProjectPartArtefact(FilePathId{1});
}
@@ -457,14 +459,14 @@ TEST_F(ProjectPartsStorage, FetchProjectPartArtefactBySourceIdCallsValueInStatem
{
InSequence s;
- EXPECT_CALL(mockDatabase, deferredBegin());
+ EXPECT_CALL(databaseMock, deferredBegin());
EXPECT_CALL(getProjectPartArtefactsBySourceId, valueReturnProjectPartArtefact(1))
.WillOnce(Throw(Sqlite::StatementIsBusy{""}));
- EXPECT_CALL(mockDatabase, rollback());
- EXPECT_CALL(mockDatabase, deferredBegin());
+ EXPECT_CALL(databaseMock, rollback());
+ EXPECT_CALL(databaseMock, deferredBegin());
EXPECT_CALL(getProjectPartArtefactsBySourceId, valueReturnProjectPartArtefact(1))
.WillRepeatedly(Return(artefact));
- EXPECT_CALL(mockDatabase, commit());
+ EXPECT_CALL(databaseMock, commit());
storage.fetchProjectPartArtefact(FilePathId{1});
}
@@ -483,10 +485,10 @@ TEST_F(ProjectPartsStorage, FetchProjectPartArtefactByProjectPartIdCallsValueInS
{
InSequence s;
- EXPECT_CALL(mockDatabase, deferredBegin());
+ EXPECT_CALL(databaseMock, deferredBegin());
EXPECT_CALL(getProjectPartArtefactsByProjectPartId, valueReturnProjectPartArtefact(74))
.WillRepeatedly(Return(artefact));
- EXPECT_CALL(mockDatabase, commit());
+ EXPECT_CALL(databaseMock, commit());
storage.fetchProjectPartArtefact(ProjectPartId{74});
}
@@ -505,14 +507,14 @@ TEST_F(ProjectPartsStorage, FetchProjectPartArtefactByProjectPartIdReturnArtefac
{
InSequence s;
- EXPECT_CALL(mockDatabase, deferredBegin());
+ EXPECT_CALL(databaseMock, deferredBegin());
EXPECT_CALL(getProjectPartArtefactsByProjectPartId, valueReturnProjectPartArtefact(74))
.WillOnce(Throw(Sqlite::StatementIsBusy{""}));
- EXPECT_CALL(mockDatabase, rollback());
- EXPECT_CALL(mockDatabase, deferredBegin());
+ EXPECT_CALL(databaseMock, rollback());
+ EXPECT_CALL(databaseMock, deferredBegin());
EXPECT_CALL(getProjectPartArtefactsByProjectPartId, valueReturnProjectPartArtefact(74))
.WillRepeatedly(Return(artefact));
- EXPECT_CALL(mockDatabase, commit());
+ EXPECT_CALL(databaseMock, commit());
storage.fetchProjectPartArtefact(ProjectPartId{74});
}
@@ -521,12 +523,12 @@ TEST_F(ProjectPartsStorage, ResetDependentIndexingTimeStamps)
{
InSequence s;
- EXPECT_CALL(mockDatabase, immediateBegin());
+ EXPECT_CALL(databaseMock, immediateBegin());
EXPECT_CALL(resetDependentIndexingTimeStampsStatement, write(TypedEq<int>(3)));
EXPECT_CALL(resetDependentIndexingTimeStampsStatement, write(TypedEq<int>(4)));
EXPECT_CALL(resetDependentIndexingTimeStampsStatement, write(TypedEq<int>(7)));
EXPECT_CALL(resetDependentIndexingTimeStampsStatement, write(TypedEq<int>(8)));
- EXPECT_CALL(mockDatabase, commit());
+ EXPECT_CALL(databaseMock, commit());
storage.resetIndexingTimeStamps({projectPart1, projectPart2});
}
@@ -535,13 +537,13 @@ TEST_F(ProjectPartsStorage, ResetDependentIndexingTimeStampsIsBusy)
{
InSequence s;
- EXPECT_CALL(mockDatabase, immediateBegin()).WillOnce(Throw(Sqlite::StatementIsBusy{""}));
- EXPECT_CALL(mockDatabase, immediateBegin());
+ EXPECT_CALL(databaseMock, immediateBegin()).WillOnce(Throw(Sqlite::StatementIsBusy{""}));
+ EXPECT_CALL(databaseMock, immediateBegin());
EXPECT_CALL(resetDependentIndexingTimeStampsStatement, write(TypedEq<int>(3)));
EXPECT_CALL(resetDependentIndexingTimeStampsStatement, write(TypedEq<int>(4)));
EXPECT_CALL(resetDependentIndexingTimeStampsStatement, write(TypedEq<int>(7)));
EXPECT_CALL(resetDependentIndexingTimeStampsStatement, write(TypedEq<int>(8)));
- EXPECT_CALL(mockDatabase, commit());
+ EXPECT_CALL(databaseMock, commit());
storage.resetIndexingTimeStamps({projectPart1, projectPart2});
}
@@ -550,10 +552,10 @@ TEST_F(ProjectPartsStorage, FetchAllProjectPartNamesAndIdsCalls)
{
InSequence s;
- EXPECT_CALL(mockDatabase, deferredBegin());
+ EXPECT_CALL(databaseMock, deferredBegin());
EXPECT_CALL(fetchAllProjectPartNamesAndIdsStatement, valuesReturnProjectPartNameIds(_))
.WillRepeatedly(Return(projectPartNameIds));
- EXPECT_CALL(mockDatabase, commit());
+ EXPECT_CALL(databaseMock, commit());
storage.fetchAllProjectPartNamesAndIds();
}
@@ -562,14 +564,14 @@ TEST_F(ProjectPartsStorage, FetchAllProjectPartNamesAndIdsCallsIsBusy)
{
InSequence s;
- EXPECT_CALL(mockDatabase, deferredBegin());
+ EXPECT_CALL(databaseMock, deferredBegin());
EXPECT_CALL(fetchAllProjectPartNamesAndIdsStatement, valuesReturnProjectPartNameIds(_))
.WillOnce(Throw(Sqlite::StatementIsBusy{""}));
- EXPECT_CALL(mockDatabase, rollback());
- EXPECT_CALL(mockDatabase, deferredBegin());
+ EXPECT_CALL(databaseMock, rollback());
+ EXPECT_CALL(databaseMock, deferredBegin());
EXPECT_CALL(fetchAllProjectPartNamesAndIdsStatement, valuesReturnProjectPartNameIds(_))
.WillRepeatedly(Return(projectPartNameIds));
- EXPECT_CALL(mockDatabase, commit());
+ EXPECT_CALL(databaseMock, commit());
storage.fetchAllProjectPartNamesAndIds();
}
diff --git a/tests/unit/unittest/refactoringdatabaseinitializer-test.cpp b/tests/unit/unittest/refactoringdatabaseinitializer-test.cpp
index 7af00158df..89df28be9f 100644
--- a/tests/unit/unittest/refactoringdatabaseinitializer-test.cpp
+++ b/tests/unit/unittest/refactoringdatabaseinitializer-test.cpp
@@ -25,30 +25,30 @@
#include "googletest.h"
-#include <mocksqlitedatabase.h>
+#include <sqlitedatabasemock.h>
#include <refactoringdatabaseinitializer.h>
namespace {
-using Initializer = ClangBackEnd::RefactoringDatabaseInitializer<NiceMock<MockSqliteDatabase>>;
+using Initializer = ClangBackEnd::RefactoringDatabaseInitializer<NiceMock<SqliteDatabaseMock>>;
using Sqlite::Table;
class RefactoringDatabaseInitializer : public testing::Test
{
protected:
- NiceMock<MockSqliteDatabase> mockDatabase;
- Initializer initializer{mockDatabase};
+ NiceMock<SqliteDatabaseMock> databaseMock;
+ Initializer initializer{databaseMock};
};
TEST_F(RefactoringDatabaseInitializer, AddSymbolsTable)
{
InSequence s;
- EXPECT_CALL(mockDatabase, execute(Eq("CREATE TABLE IF NOT EXISTS symbols(symbolId INTEGER PRIMARY KEY, usr TEXT, symbolName TEXT, symbolKind INTEGER, signature TEXT)")));
- EXPECT_CALL(mockDatabase, execute(Eq("CREATE INDEX IF NOT EXISTS index_symbols_usr ON symbols(usr)")));
- EXPECT_CALL(mockDatabase, execute(Eq("CREATE INDEX IF NOT EXISTS index_symbols_symbolKind_symbolName ON symbols(symbolKind, symbolName)")));
+ EXPECT_CALL(databaseMock, execute(Eq("CREATE TABLE IF NOT EXISTS symbols(symbolId INTEGER PRIMARY KEY, usr TEXT, symbolName TEXT, symbolKind INTEGER, signature TEXT)")));
+ EXPECT_CALL(databaseMock, execute(Eq("CREATE INDEX IF NOT EXISTS index_symbols_usr ON symbols(usr)")));
+ EXPECT_CALL(databaseMock, execute(Eq("CREATE INDEX IF NOT EXISTS index_symbols_symbolKind_symbolName ON symbols(symbolKind, symbolName)")));
initializer.createSymbolsTable();
}
@@ -57,10 +57,10 @@ TEST_F(RefactoringDatabaseInitializer, AddLocationsTable)
{
InSequence s;
- EXPECT_CALL(mockDatabase, execute(Eq("CREATE TABLE IF NOT EXISTS locations(symbolId INTEGER, line INTEGER, column INTEGER, sourceId INTEGER, locationKind INTEGER)")));
- EXPECT_CALL(mockDatabase, execute(Eq("CREATE UNIQUE INDEX IF NOT EXISTS index_locations_sourceId_line_column ON locations(sourceId, line, column)")));
- EXPECT_CALL(mockDatabase, execute(Eq("CREATE INDEX IF NOT EXISTS index_locations_sourceId_locationKind ON locations(sourceId, locationKind)")));
- EXPECT_CALL(mockDatabase,
+ EXPECT_CALL(databaseMock, execute(Eq("CREATE TABLE IF NOT EXISTS locations(symbolId INTEGER, line INTEGER, column INTEGER, sourceId INTEGER, locationKind INTEGER)")));
+ EXPECT_CALL(databaseMock, execute(Eq("CREATE UNIQUE INDEX IF NOT EXISTS index_locations_sourceId_line_column ON locations(sourceId, line, column)")));
+ EXPECT_CALL(databaseMock, execute(Eq("CREATE INDEX IF NOT EXISTS index_locations_sourceId_locationKind ON locations(sourceId, locationKind)")));
+ EXPECT_CALL(databaseMock,
execute(Eq(
"CREATE INDEX IF NOT EXISTS index_locations_symbolId ON locations(symbolId)")));
initializer.createLocationsTable();
@@ -70,8 +70,8 @@ TEST_F(RefactoringDatabaseInitializer, AddSourcesTable)
{
InSequence s;
- EXPECT_CALL(mockDatabase, execute(Eq("CREATE TABLE IF NOT EXISTS sources(sourceId INTEGER PRIMARY KEY, directoryId INTEGER, sourceName TEXT)")));
- EXPECT_CALL(mockDatabase, execute(Eq("CREATE UNIQUE INDEX IF NOT EXISTS index_sources_directoryId_sourceName ON sources(directoryId, sourceName)")));
+ EXPECT_CALL(databaseMock, execute(Eq("CREATE TABLE IF NOT EXISTS sources(sourceId INTEGER PRIMARY KEY, directoryId INTEGER, sourceName TEXT)")));
+ EXPECT_CALL(databaseMock, execute(Eq("CREATE UNIQUE INDEX IF NOT EXISTS index_sources_directoryId_sourceName ON sources(directoryId, sourceName)")));
initializer.createSourcesTable();
}
@@ -80,8 +80,8 @@ TEST_F(RefactoringDatabaseInitializer, AddDirectoriesTable)
{
InSequence s;
- EXPECT_CALL(mockDatabase, execute(Eq("CREATE TABLE IF NOT EXISTS directories(directoryId INTEGER PRIMARY KEY, directoryPath TEXT)")));
- EXPECT_CALL(mockDatabase, execute(Eq("CREATE UNIQUE INDEX IF NOT EXISTS index_directories_directoryPath ON directories(directoryPath)")));
+ EXPECT_CALL(databaseMock, execute(Eq("CREATE TABLE IF NOT EXISTS directories(directoryId INTEGER PRIMARY KEY, directoryPath TEXT)")));
+ EXPECT_CALL(databaseMock, execute(Eq("CREATE UNIQUE INDEX IF NOT EXISTS index_directories_directoryPath ON directories(directoryPath)")));
initializer.createDirectoriesTable();
}
@@ -90,12 +90,12 @@ TEST_F(RefactoringDatabaseInitializer, AddProjectPartsTable)
{
InSequence s;
- EXPECT_CALL(mockDatabase,
+ EXPECT_CALL(databaseMock,
execute(Eq("CREATE TABLE IF NOT EXISTS projectParts(projectPartId INTEGER PRIMARY "
"KEY, projectPartName TEXT, toolChainArguments TEXT, compilerMacros "
"TEXT, systemIncludeSearchPaths TEXT, projectIncludeSearchPaths TEXT, "
"language INTEGER, languageVersion INTEGER, languageExtension INTEGER)")));
- EXPECT_CALL(mockDatabase, execute(Eq("CREATE UNIQUE INDEX IF NOT EXISTS index_projectParts_projectPartName ON projectParts(projectPartName)")));
+ EXPECT_CALL(databaseMock, execute(Eq("CREATE UNIQUE INDEX IF NOT EXISTS index_projectParts_projectPartName ON projectParts(projectPartName)")));
initializer.createProjectPartsTable();
}
@@ -104,12 +104,12 @@ TEST_F(RefactoringDatabaseInitializer, AddProjectPartsFilesTable)
{
InSequence s;
- EXPECT_CALL(mockDatabase,
+ EXPECT_CALL(databaseMock,
execute(Eq("CREATE TABLE IF NOT EXISTS projectPartsFiles(projectPartId INTEGER, "
"sourceId INTEGER, sourceType INTEGER, pchCreationTimeStamp INTEGER, "
"hasMissingIncludes INTEGER)")));
- EXPECT_CALL(mockDatabase, execute(Eq("CREATE UNIQUE INDEX IF NOT EXISTS index_projectPartsFiles_sourceId_projectPartId ON projectPartsFiles(sourceId, projectPartId)")));
- EXPECT_CALL(mockDatabase,
+ EXPECT_CALL(databaseMock, execute(Eq("CREATE UNIQUE INDEX IF NOT EXISTS index_projectPartsFiles_sourceId_projectPartId ON projectPartsFiles(sourceId, projectPartId)")));
+ EXPECT_CALL(databaseMock,
execute(Eq(
"CREATE INDEX IF NOT EXISTS index_projectPartsFiles_projectPartId_sourceType "
"ON projectPartsFiles(projectPartId, sourceType)")));
@@ -121,9 +121,9 @@ TEST_F(RefactoringDatabaseInitializer, AddUsedMacrosTable)
{
InSequence s;
- EXPECT_CALL(mockDatabase, execute(Eq("CREATE TABLE IF NOT EXISTS usedMacros(usedMacroId INTEGER PRIMARY KEY, sourceId INTEGER, macroName TEXT)")));
- EXPECT_CALL(mockDatabase, execute(Eq("CREATE INDEX IF NOT EXISTS index_usedMacros_sourceId_macroName ON usedMacros(sourceId, macroName)")));
- EXPECT_CALL(mockDatabase, execute(Eq("CREATE INDEX IF NOT EXISTS index_usedMacros_macroName ON usedMacros(macroName)")));
+ EXPECT_CALL(databaseMock, execute(Eq("CREATE TABLE IF NOT EXISTS usedMacros(usedMacroId INTEGER PRIMARY KEY, sourceId INTEGER, macroName TEXT)")));
+ EXPECT_CALL(databaseMock, execute(Eq("CREATE INDEX IF NOT EXISTS index_usedMacros_sourceId_macroName ON usedMacros(sourceId, macroName)")));
+ EXPECT_CALL(databaseMock, execute(Eq("CREATE INDEX IF NOT EXISTS index_usedMacros_macroName ON usedMacros(macroName)")));
initializer.createUsedMacrosTable();
}
@@ -133,7 +133,7 @@ TEST_F(RefactoringDatabaseInitializer, AddFileStatusesTable)
InSequence s;
EXPECT_CALL(
- mockDatabase,
+ databaseMock,
execute(Eq(
"CREATE TABLE IF NOT EXISTS fileStatuses(sourceId INTEGER PRIMARY KEY, size INTEGER, "
"lastModified INTEGER, indexingTimeStamp INTEGER)")));
@@ -145,16 +145,16 @@ TEST_F(RefactoringDatabaseInitializer, AddSourceDependenciesTable)
{
InSequence s;
- EXPECT_CALL(mockDatabase,
+ EXPECT_CALL(databaseMock,
execute(Eq("CREATE TABLE IF NOT EXISTS sourceDependencies(sourceId INTEGER, "
"dependencySourceId INTEGER)")));
EXPECT_CALL(
- mockDatabase,
+ databaseMock,
execute(
Eq("CREATE INDEX IF NOT EXISTS index_sourceDependencies_sourceId_dependencySourceId ON "
"sourceDependencies(sourceId, dependencySourceId)")));
EXPECT_CALL(
- mockDatabase,
+ databaseMock,
execute(
Eq("CREATE INDEX IF NOT EXISTS index_sourceDependencies_dependencySourceId_sourceId ON "
"sourceDependencies(dependencySourceId, sourceId)")));
@@ -166,7 +166,7 @@ TEST_F(RefactoringDatabaseInitializer, AddPrecompiledHeaderTable)
{
InSequence s;
- EXPECT_CALL(mockDatabase, execute(Eq("CREATE TABLE IF NOT EXISTS precompiledHeaders(projectPartId INTEGER PRIMARY KEY, projectPchPath TEXT, projectPchBuildTime INTEGER, systemPchPath TEXT, systemPchBuildTime INTEGER)")));
+ EXPECT_CALL(databaseMock, execute(Eq("CREATE TABLE IF NOT EXISTS precompiledHeaders(projectPartId INTEGER PRIMARY KEY, projectPchPath TEXT, projectPchBuildTime INTEGER, systemPchPath TEXT, systemPchBuildTime INTEGER)")));
initializer.createPrecompiledHeadersTable();
}
@@ -175,10 +175,10 @@ TEST_F(RefactoringDatabaseInitializer, AddProjectPartsHeadersTable)
{
InSequence s;
- EXPECT_CALL(mockDatabase,
+ EXPECT_CALL(databaseMock,
execute(Eq("CREATE TABLE IF NOT EXISTS projectPartsHeaders(projectPartId INTEGER, "
"sourceId INTEGER)")));
- EXPECT_CALL(mockDatabase,
+ EXPECT_CALL(databaseMock,
execute(Eq("CREATE INDEX IF NOT EXISTS index_projectPartsHeaders_projectPartId ON "
"projectPartsHeaders(projectPartId)")));
@@ -189,10 +189,10 @@ TEST_F(RefactoringDatabaseInitializer, AddProjectPartsSourcesTable)
{
InSequence s;
- EXPECT_CALL(mockDatabase,
+ EXPECT_CALL(databaseMock,
execute(Eq("CREATE TABLE IF NOT EXISTS projectPartsSources(projectPartId INTEGER, "
"sourceId INTEGER)")));
- EXPECT_CALL(mockDatabase,
+ EXPECT_CALL(databaseMock,
execute(Eq("CREATE INDEX IF NOT EXISTS index_projectPartsSources_projectPartId ON "
"projectPartsSources(projectPartId)")));
@@ -203,166 +203,166 @@ TEST_F(RefactoringDatabaseInitializer, CreateInTheContructor)
{
InSequence s;
- EXPECT_CALL(mockDatabase, isInitialized()).WillOnce(Return(false));
- EXPECT_CALL(mockDatabase, exclusiveBegin());
- EXPECT_CALL(mockDatabase,
+ EXPECT_CALL(databaseMock, isInitialized()).WillOnce(Return(false));
+ EXPECT_CALL(databaseMock, exclusiveBegin());
+ EXPECT_CALL(databaseMock,
execute(Eq("CREATE TABLE IF NOT EXISTS symbols(symbolId INTEGER PRIMARY KEY, usr "
"TEXT, symbolName TEXT, symbolKind INTEGER, signature TEXT)")));
- EXPECT_CALL(mockDatabase,
+ EXPECT_CALL(databaseMock,
execute(Eq("CREATE INDEX IF NOT EXISTS index_symbols_usr ON symbols(usr)")));
- EXPECT_CALL(mockDatabase,
+ EXPECT_CALL(databaseMock,
execute(Eq("CREATE INDEX IF NOT EXISTS index_symbols_symbolKind_symbolName ON "
"symbols(symbolKind, symbolName)")));
- EXPECT_CALL(mockDatabase,
+ EXPECT_CALL(databaseMock,
execute(Eq("CREATE TABLE IF NOT EXISTS locations(symbolId INTEGER, line INTEGER, "
"column INTEGER, sourceId INTEGER, locationKind INTEGER)")));
- EXPECT_CALL(mockDatabase,
+ EXPECT_CALL(databaseMock,
execute(Eq("CREATE UNIQUE INDEX IF NOT EXISTS index_locations_sourceId_line_column "
"ON locations(sourceId, line, column)")));
- EXPECT_CALL(mockDatabase,
+ EXPECT_CALL(databaseMock,
execute(Eq("CREATE INDEX IF NOT EXISTS index_locations_sourceId_locationKind ON "
"locations(sourceId, locationKind)")));
- EXPECT_CALL(mockDatabase,
+ EXPECT_CALL(databaseMock,
execute(Eq(
"CREATE INDEX IF NOT EXISTS index_locations_symbolId ON locations(symbolId)")));
- EXPECT_CALL(mockDatabase,
+ EXPECT_CALL(databaseMock,
execute(Eq("CREATE TABLE IF NOT EXISTS sources(sourceId INTEGER PRIMARY KEY, "
"directoryId INTEGER, sourceName TEXT)")));
- EXPECT_CALL(mockDatabase,
+ EXPECT_CALL(databaseMock,
execute(Eq("CREATE UNIQUE INDEX IF NOT EXISTS index_sources_directoryId_sourceName "
"ON sources(directoryId, sourceName)")));
- EXPECT_CALL(mockDatabase,
+ EXPECT_CALL(databaseMock,
execute(Eq("CREATE TABLE IF NOT EXISTS directories(directoryId INTEGER PRIMARY "
"KEY, directoryPath TEXT)")));
- EXPECT_CALL(mockDatabase,
+ EXPECT_CALL(databaseMock,
execute(Eq("CREATE UNIQUE INDEX IF NOT EXISTS index_directories_directoryPath ON "
"directories(directoryPath)")));
- EXPECT_CALL(mockDatabase,
+ EXPECT_CALL(databaseMock,
execute(
Eq("CREATE TABLE IF NOT EXISTS projectParts(projectPartId INTEGER PRIMARY "
"KEY, projectPartName TEXT, toolChainArguments TEXT, compilerMacros "
"TEXT, systemIncludeSearchPaths TEXT, projectIncludeSearchPaths TEXT, "
"language INTEGER, languageVersion INTEGER, languageExtension INTEGER)")));
- EXPECT_CALL(mockDatabase,
+ EXPECT_CALL(databaseMock,
execute(Eq("CREATE UNIQUE INDEX IF NOT EXISTS index_projectParts_projectPartName "
"ON projectParts(projectPartName)")));
- EXPECT_CALL(mockDatabase,
+ EXPECT_CALL(databaseMock,
execute(Eq("CREATE TABLE IF NOT EXISTS projectPartsFiles(projectPartId INTEGER, "
"sourceId INTEGER, sourceType INTEGER, pchCreationTimeStamp INTEGER, "
"hasMissingIncludes INTEGER)")));
EXPECT_CALL(
- mockDatabase,
+ databaseMock,
execute(
Eq("CREATE UNIQUE INDEX IF NOT EXISTS index_projectPartsFiles_sourceId_projectPartId "
"ON projectPartsFiles(sourceId, projectPartId)")));
EXPECT_CALL(
- mockDatabase,
+ databaseMock,
execute(Eq("CREATE INDEX IF NOT EXISTS index_projectPartsFiles_projectPartId_sourceType ON "
"projectPartsFiles(projectPartId, sourceType)")));
- EXPECT_CALL(mockDatabase,
+ EXPECT_CALL(databaseMock,
execute(Eq("CREATE TABLE IF NOT EXISTS usedMacros(usedMacroId INTEGER PRIMARY KEY, "
"sourceId INTEGER, macroName TEXT)")));
- EXPECT_CALL(mockDatabase,
+ EXPECT_CALL(databaseMock,
execute(Eq("CREATE INDEX IF NOT EXISTS index_usedMacros_sourceId_macroName ON "
"usedMacros(sourceId, macroName)")));
EXPECT_CALL(
- mockDatabase,
+ databaseMock,
execute(
Eq("CREATE INDEX IF NOT EXISTS index_usedMacros_macroName ON usedMacros(macroName)")));
EXPECT_CALL(
- mockDatabase,
+ databaseMock,
execute(Eq(
"CREATE TABLE IF NOT EXISTS fileStatuses(sourceId INTEGER PRIMARY KEY, size INTEGER, "
"lastModified INTEGER, indexingTimeStamp INTEGER)")));
- EXPECT_CALL(mockDatabase,
+ EXPECT_CALL(databaseMock,
execute(Eq("CREATE TABLE IF NOT EXISTS sourceDependencies(sourceId INTEGER, "
"dependencySourceId INTEGER)")));
EXPECT_CALL(
- mockDatabase,
+ databaseMock,
execute(
Eq("CREATE INDEX IF NOT EXISTS index_sourceDependencies_sourceId_dependencySourceId ON "
"sourceDependencies(sourceId, dependencySourceId)")));
EXPECT_CALL(
- mockDatabase,
+ databaseMock,
execute(
Eq("CREATE INDEX IF NOT EXISTS index_sourceDependencies_dependencySourceId_sourceId ON "
"sourceDependencies(dependencySourceId, sourceId)")));
- EXPECT_CALL(mockDatabase,
+ EXPECT_CALL(databaseMock,
execute(Eq("CREATE TABLE IF NOT EXISTS precompiledHeaders(projectPartId INTEGER "
"PRIMARY KEY, projectPchPath TEXT, projectPchBuildTime INTEGER, "
"systemPchPath TEXT, systemPchBuildTime INTEGER)")));
- EXPECT_CALL(mockDatabase,
+ EXPECT_CALL(databaseMock,
execute(Eq("CREATE TABLE IF NOT EXISTS projectPartsHeaders(projectPartId INTEGER, "
"sourceId INTEGER)")));
- EXPECT_CALL(mockDatabase,
+ EXPECT_CALL(databaseMock,
execute(Eq("CREATE INDEX IF NOT EXISTS index_projectPartsHeaders_projectPartId ON "
"projectPartsHeaders(projectPartId)")));
- EXPECT_CALL(mockDatabase,
+ EXPECT_CALL(databaseMock,
execute(Eq("CREATE TABLE IF NOT EXISTS projectPartsSources(projectPartId INTEGER, "
"sourceId INTEGER)")));
- EXPECT_CALL(mockDatabase,
+ EXPECT_CALL(databaseMock,
execute(Eq("CREATE INDEX IF NOT EXISTS index_projectPartsSources_projectPartId ON "
"projectPartsSources(projectPartId)")));
- EXPECT_CALL(mockDatabase, commit());
- EXPECT_CALL(mockDatabase, setIsInitialized(true));
+ EXPECT_CALL(databaseMock, commit());
+ EXPECT_CALL(databaseMock, setIsInitialized(true));
- Initializer initializer{mockDatabase};
+ Initializer initializer{databaseMock};
}
TEST_F(RefactoringDatabaseInitializer, DontCreateIfAlreadyInitialized)
{
InSequence s;
- EXPECT_CALL(mockDatabase, isInitialized()).WillOnce(Return(true));
- EXPECT_CALL(mockDatabase, exclusiveBegin()).Times(0);
- EXPECT_CALL(mockDatabase, execute(Eq("CREATE TABLE IF NOT EXISTS symbols(symbolId INTEGER PRIMARY KEY, usr TEXT, symbolName TEXT, symbolKind INTEGER, signature TEXT)"))).Times(0);
- EXPECT_CALL(mockDatabase, execute(Eq("CREATE INDEX IF NOT EXISTS index_symbols_usr ON symbols(usr)"))).Times(0);
- EXPECT_CALL(mockDatabase, execute(Eq("CREATE INDEX IF NOT EXISTS index_symbols_symbolKind_symbolName ON symbols(symbolKind, symbolName)"))).Times(0);
- EXPECT_CALL(mockDatabase, execute(Eq("CREATE TABLE IF NOT EXISTS locations(symbolId INTEGER, line INTEGER, column INTEGER, sourceId INTEGER, locationKind INTEGER)"))).Times(0);
- EXPECT_CALL(mockDatabase, execute(Eq("CREATE UNIQUE INDEX IF NOT EXISTS index_locations_sourceId_line_column ON locations(sourceId, line, column)"))).Times(0);
- EXPECT_CALL(mockDatabase, execute(Eq("CREATE INDEX IF NOT EXISTS index_locations_sourceId_locationKind ON locations(sourceId, locationKind)"))).Times(0);
- EXPECT_CALL(mockDatabase, execute(Eq("CREATE TABLE IF NOT EXISTS sources(sourceId INTEGER PRIMARY KEY, directoryId INTEGER, sourceName TEXT, sourceType INTEGER)"))).Times(0);
- EXPECT_CALL(mockDatabase, execute(Eq("CREATE UNIQUE INDEX IF NOT EXISTS index_sources_directoryId_sourceName ON sources(directoryId, sourceName)"))).Times(0);
- EXPECT_CALL(mockDatabase, execute(Eq("CREATE TABLE IF NOT EXISTS directories(directoryId INTEGER PRIMARY KEY, directoryPath TEXT)"))).Times(0);
- EXPECT_CALL(mockDatabase, execute(Eq("CREATE UNIQUE INDEX IF NOT EXISTS index_directories_directoryPath ON directories(directoryPath)"))).Times(0);
- EXPECT_CALL(mockDatabase,
+ EXPECT_CALL(databaseMock, isInitialized()).WillOnce(Return(true));
+ EXPECT_CALL(databaseMock, exclusiveBegin()).Times(0);
+ EXPECT_CALL(databaseMock, execute(Eq("CREATE TABLE IF NOT EXISTS symbols(symbolId INTEGER PRIMARY KEY, usr TEXT, symbolName TEXT, symbolKind INTEGER, signature TEXT)"))).Times(0);
+ EXPECT_CALL(databaseMock, execute(Eq("CREATE INDEX IF NOT EXISTS index_symbols_usr ON symbols(usr)"))).Times(0);
+ EXPECT_CALL(databaseMock, execute(Eq("CREATE INDEX IF NOT EXISTS index_symbols_symbolKind_symbolName ON symbols(symbolKind, symbolName)"))).Times(0);
+ EXPECT_CALL(databaseMock, execute(Eq("CREATE TABLE IF NOT EXISTS locations(symbolId INTEGER, line INTEGER, column INTEGER, sourceId INTEGER, locationKind INTEGER)"))).Times(0);
+ EXPECT_CALL(databaseMock, execute(Eq("CREATE UNIQUE INDEX IF NOT EXISTS index_locations_sourceId_line_column ON locations(sourceId, line, column)"))).Times(0);
+ EXPECT_CALL(databaseMock, execute(Eq("CREATE INDEX IF NOT EXISTS index_locations_sourceId_locationKind ON locations(sourceId, locationKind)"))).Times(0);
+ EXPECT_CALL(databaseMock, execute(Eq("CREATE TABLE IF NOT EXISTS sources(sourceId INTEGER PRIMARY KEY, directoryId INTEGER, sourceName TEXT, sourceType INTEGER)"))).Times(0);
+ EXPECT_CALL(databaseMock, execute(Eq("CREATE UNIQUE INDEX IF NOT EXISTS index_sources_directoryId_sourceName ON sources(directoryId, sourceName)"))).Times(0);
+ EXPECT_CALL(databaseMock, execute(Eq("CREATE TABLE IF NOT EXISTS directories(directoryId INTEGER PRIMARY KEY, directoryPath TEXT)"))).Times(0);
+ EXPECT_CALL(databaseMock, execute(Eq("CREATE UNIQUE INDEX IF NOT EXISTS index_directories_directoryPath ON directories(directoryPath)"))).Times(0);
+ EXPECT_CALL(databaseMock,
execute(Eq("CREATE TABLE IF NOT EXISTS projectParts(projectPartId INTEGER PRIMARY "
"KEY, projectPartName TEXT, toolChainArguments TEXT, compilerMacros "
"TEXT, includeSearchPaths TEXT)")))
.Times(0);
- EXPECT_CALL(mockDatabase, execute(Eq("CREATE UNIQUE INDEX IF NOT EXISTS index_projectParts_projectPartName ON projectParts(projectPartName)"))).Times(0);
- EXPECT_CALL(mockDatabase, execute(Eq("CREATE TABLE IF NOT EXISTS projectPartsFiles(projectPartId INTEGER, sourceId INTEGER)"))).Times(0);
- EXPECT_CALL(mockDatabase, execute(Eq("CREATE UNIQUE INDEX IF NOT EXISTS index_projectPartsFiles_sourceId_projectPartId ON projectPartsFiles(sourceId, projectPartId)"))).Times(0);
- EXPECT_CALL(mockDatabase, execute(Eq("CREATE INDEX IF NOT EXISTS index_projectPartsFiles_projectPartId ON projectPartsFiles(projectPartId)"))).Times(0);
- EXPECT_CALL(mockDatabase, execute(Eq("CREATE TABLE IF NOT EXISTS usedMacros(usedMacroId INTEGER PRIMARY KEY, sourceId INTEGER, macroName TEXT)"))).Times(0);
- EXPECT_CALL(mockDatabase, execute(Eq("CREATE INDEX IF NOT EXISTS index_usedMacros_sourceId_macroName ON usedMacros(sourceId, macroName)"))).Times(0);
- EXPECT_CALL(mockDatabase, execute(Eq("CREATE INDEX IF NOT EXISTS index_usedMacros_macroName ON usedMacros(macroName)"))).Times(0);
- EXPECT_CALL(mockDatabase,
+ EXPECT_CALL(databaseMock, execute(Eq("CREATE UNIQUE INDEX IF NOT EXISTS index_projectParts_projectPartName ON projectParts(projectPartName)"))).Times(0);
+ EXPECT_CALL(databaseMock, execute(Eq("CREATE TABLE IF NOT EXISTS projectPartsFiles(projectPartId INTEGER, sourceId INTEGER)"))).Times(0);
+ EXPECT_CALL(databaseMock, execute(Eq("CREATE UNIQUE INDEX IF NOT EXISTS index_projectPartsFiles_sourceId_projectPartId ON projectPartsFiles(sourceId, projectPartId)"))).Times(0);
+ EXPECT_CALL(databaseMock, execute(Eq("CREATE INDEX IF NOT EXISTS index_projectPartsFiles_projectPartId ON projectPartsFiles(projectPartId)"))).Times(0);
+ EXPECT_CALL(databaseMock, execute(Eq("CREATE TABLE IF NOT EXISTS usedMacros(usedMacroId INTEGER PRIMARY KEY, sourceId INTEGER, macroName TEXT)"))).Times(0);
+ EXPECT_CALL(databaseMock, execute(Eq("CREATE INDEX IF NOT EXISTS index_usedMacros_sourceId_macroName ON usedMacros(sourceId, macroName)"))).Times(0);
+ EXPECT_CALL(databaseMock, execute(Eq("CREATE INDEX IF NOT EXISTS index_usedMacros_macroName ON usedMacros(macroName)"))).Times(0);
+ EXPECT_CALL(databaseMock,
execute(Eq("CREATE TABLE IF NOT EXISTS fileStatuses(sourceId INTEGER PRIMARY KEY, "
"size INTEGER, lastModified INTEGER, indexingTimeStamp INTEGER)")))
.Times(0);
- EXPECT_CALL(mockDatabase, execute(Eq("CREATE TABLE IF NOT EXISTS sourceDependencies(sourceId INTEGER, dependencySourceId INTEGER)"))).Times(0);
- EXPECT_CALL(mockDatabase, execute(Eq("CREATE INDEX IF NOT EXISTS index_sourceDependencies_sourceId_dependencySourceId ON sourceDependencies(sourceId, dependencySourceId)"))).Times(0);
- EXPECT_CALL(mockDatabase, execute(Eq("CREATE TABLE IF NOT EXISTS precompiledHeaders(projectPartId INTEGER PRIMARY KEY, pchPath TEXT, pchBuildTime INTEGER)"))).Times(0);
- EXPECT_CALL(mockDatabase,
+ EXPECT_CALL(databaseMock, execute(Eq("CREATE TABLE IF NOT EXISTS sourceDependencies(sourceId INTEGER, dependencySourceId INTEGER)"))).Times(0);
+ EXPECT_CALL(databaseMock, execute(Eq("CREATE INDEX IF NOT EXISTS index_sourceDependencies_sourceId_dependencySourceId ON sourceDependencies(sourceId, dependencySourceId)"))).Times(0);
+ EXPECT_CALL(databaseMock, execute(Eq("CREATE TABLE IF NOT EXISTS precompiledHeaders(projectPartId INTEGER PRIMARY KEY, pchPath TEXT, pchBuildTime INTEGER)"))).Times(0);
+ EXPECT_CALL(databaseMock,
execute(Eq("CREATE TABLE IF NOT EXISTS projectPartsHeaders(projectPartId INTEGER, "
"sourceId INTEGER)")))
.Times(0);
- EXPECT_CALL(mockDatabase,
+ EXPECT_CALL(databaseMock,
execute(Eq("CREATE INDEX IF NOT EXISTS index_projectPartsHeaders_projectPartId ON "
"projectPartsHeaders(projectPartId)")))
.Times(0);
- EXPECT_CALL(mockDatabase,
+ EXPECT_CALL(databaseMock,
execute(Eq("CREATE TABLE IF NOT EXISTS projectPartsSources(projectPartId INTEGER, "
"sourceId INTEGER)")))
.Times(0);
- EXPECT_CALL(mockDatabase,
+ EXPECT_CALL(databaseMock,
execute(Eq("CREATE INDEX IF NOT EXISTS index_projectPartsSources_projectPartId ON "
"projectPartsSources(projectPartId)")))
.Times(0);
- EXPECT_CALL(mockDatabase, commit()).Times(0);
+ EXPECT_CALL(databaseMock, commit()).Times(0);
- Initializer initializer{mockDatabase};
+ Initializer initializer{databaseMock};
}
}
diff --git a/tests/unit/unittest/sqlitedatabase-test.cpp b/tests/unit/unittest/sqlitedatabase-test.cpp
index a93100c3e0..7ba3648a1c 100644
--- a/tests/unit/unittest/sqlitedatabase-test.cpp
+++ b/tests/unit/unittest/sqlitedatabase-test.cpp
@@ -73,7 +73,7 @@ protected:
std::vector<Utils::SmallString> names() const
{
- return Sqlite::ReadStatement("SELECT name FROM test", database).values<Utils::SmallString>(8);
+ return Sqlite::ReadStatement<1>("SELECT name FROM test", database).values<Utils::SmallString>(8);
}
static void updateHookCallback(
diff --git a/tests/unit/unittest/sqlitedatabasemock.h b/tests/unit/unittest/sqlitedatabasemock.h
index 8c1179e424..d65dd3f0fa 100644
--- a/tests/unit/unittest/sqlitedatabasemock.h
+++ b/tests/unit/unittest/sqlitedatabasemock.h
@@ -40,7 +40,8 @@
class SqliteDatabaseMock : public SqliteTransactionBackendMock, public Sqlite::DatabaseInterface
{
public:
- using ReadStatement = NiceMock<SqliteReadStatementMock>;
+ template<int ResultCount>
+ using ReadStatement = NiceMock<SqliteReadStatementMock<ResultCount>>;
using WriteStatement = NiceMock<SqliteWriteStatementMock>;
MOCK_METHOD(void, prepare, (Utils::SmallStringView sqlStatement), ());
diff --git a/tests/unit/unittest/sqlitereadstatementmock.cpp b/tests/unit/unittest/sqlitereadstatementmock.cpp
index e3e22d4e16..742b17b314 100644
--- a/tests/unit/unittest/sqlitereadstatementmock.cpp
+++ b/tests/unit/unittest/sqlitereadstatementmock.cpp
@@ -27,34 +27,9 @@
#include "sqlitedatabasemock.h"
-SqliteReadStatementMock::SqliteReadStatementMock(Utils::SmallStringView sqlStatement,
- SqliteDatabaseMock &databaseMock)
+SqliteReadStatementMockBase::SqliteReadStatementMockBase(Utils::SmallStringView sqlStatement,
+ SqliteDatabaseMock &databaseMock)
: sqlStatement(sqlStatement)
{
databaseMock.prepare(sqlStatement);
}
-
-template<>
-std::vector<Utils::SmallString> SqliteReadStatementMock::values<Utils::SmallString>(std::size_t reserveSize)
-{
- return valuesReturnStringVector(reserveSize);
-}
-
-template<>
-std::vector<long long> SqliteReadStatementMock::values<long long>(std::size_t reserveSize)
-{
- return valuesReturnRowIds(reserveSize);
-}
-
-template<>
-Utils::optional<long long> SqliteReadStatementMock::value<long long>()
-{
- return valueReturnLongLong();
-}
-
-template<>
-Utils::optional<Sqlite::ByteArrayBlob> SqliteReadStatementMock::value<Sqlite::ByteArrayBlob>(
- const Utils::SmallStringView &name, const long long &blob)
-{
- return valueReturnBlob(name, blob);
-}
diff --git a/tests/unit/unittest/sqlitereadstatementmock.h b/tests/unit/unittest/sqlitereadstatementmock.h
index f74cce1e8e..4c48bd9d0e 100644
--- a/tests/unit/unittest/sqlitereadstatementmock.h
+++ b/tests/unit/unittest/sqlitereadstatementmock.h
@@ -27,7 +27,19 @@
#include "googletest.h"
+#include <cpptools/usages.h>
+#include <filepathstoragesources.h>
+#include <pchpaths.h>
+#include <projectpartartefact.h>
+#include <projectpartcontainer.h>
+#include <projectpartpch.h>
+#include <projectpartstoragestructs.h>
+#include <sourceentry.h>
+#include <sourcelocations.h>
#include <sqliteblob.h>
+#include <stringcachefwd.h>
+#include <symbol.h>
+#include <usedmacro.h>
#include <utils/optional.h>
#include <utils/smallstring.h>
@@ -37,57 +49,196 @@
#include <tuple>
#include <vector>
+using ClangBackEnd::FilePathIds;
+using ClangBackEnd::SourceEntries;
+using ClangBackEnd::SourceEntry;
+using ClangBackEnd::SourceTimeStamp;
+using ClangBackEnd::SourceTimeStamps;
+using ClangRefactoring::SourceLocation;
+using ClangRefactoring::SourceLocations;
+using std::int64_t;
+namespace Sources = ClangBackEnd::Sources;
+using ClangBackEnd::PrecompiledHeaderTimeStamps;
+using ClangBackEnd::UsedMacros;
+using ClangBackEnd::Internal::ProjectPartNameId;
+using ClangBackEnd::Internal::ProjectPartNameIds;
+using ClangRefactoring::Symbol;
+using ClangRefactoring::Symbols;
+
class SqliteDatabaseMock;
-class SqliteReadStatementMock
+class SqliteReadStatementMockBase
{
public:
- SqliteReadStatementMock() = default;
- SqliteReadStatementMock(Utils::SmallStringView sqlStatement, SqliteDatabaseMock &databaseMock);
+ SqliteReadStatementMockBase() = default;
+ SqliteReadStatementMockBase(Utils::SmallStringView sqlStatement, SqliteDatabaseMock &databaseMock);
MOCK_METHOD(std::vector<Utils::SmallString>, valuesReturnStringVector, (std::size_t), ());
MOCK_METHOD(std::vector<long long>, valuesReturnRowIds, (std::size_t), ());
- MOCK_METHOD(Utils::optional<long long>, valueReturnLongLong, (), ());
+ MOCK_METHOD(Utils::optional<long long>, valueReturnInt64, (), ());
MOCK_METHOD(Utils::optional<Sqlite::ByteArrayBlob>,
valueReturnBlob,
(Utils::SmallStringView, long long),
());
- template<typename ResultType, int ResultTypeCount = 1, typename... QueryType>
- std::vector<ResultType> values(std::size_t reserveSize, const QueryType &... queryValues);
+ MOCK_METHOD(SourceLocations, valuesReturnSourceLocations, (std::size_t, int, int, int), ());
- template <typename ResultType,
- int ResultTypeCount = 1,
- typename... QueryType>
- std::vector<ResultType> values(std::size_t reserveSize);
+ MOCK_METHOD(CppTools::Usages, valuesReturnSourceUsages, (std::size_t, int, int, int), ());
- template <typename ResultType,
- int ResultTypeCount = 1,
- template <typename...> class QueryContainerType,
- typename QueryElementType>
- std::vector<ResultType> values(std::size_t reserveSize,
- const QueryContainerType<QueryElementType> &queryValues);
+ MOCK_METHOD(CppTools::Usages, valuesReturnSourceUsages, (std::size_t, int, int, int, int), ());
- template <typename ResultType,
- int ResultTypeCount = 1,
- typename... QueryTypes>
- Utils::optional<ResultType> value(const QueryTypes&... queryValues);
+ MOCK_METHOD(std::vector<Sources::Directory>, valuesReturnStdVectorDirectory, (std::size_t), ());
-public:
- Utils::SmallString sqlStatement;
-};
+ MOCK_METHOD(std::vector<Sources::Source>, valuesReturnStdVectorSource, (std::size_t), ());
+
+ MOCK_METHOD(SourceEntries, valuesReturnSourceEntries, (std::size_t, int, int), ());
+
+ MOCK_METHOD(UsedMacros, valuesReturnUsedMacros, (std::size_t, int), ());
+
+ MOCK_METHOD(FilePathIds, valuesReturnFilePathIds, (std::size_t, int), ());
+
+ MOCK_METHOD(ProjectPartNameIds, valuesReturnProjectPartNameIds, (std::size_t), ());
+
+ MOCK_METHOD(Utils::optional<int>, valueReturnInt32, (Utils::SmallStringView), ());
+
+ MOCK_METHOD(Utils::optional<int>, valueReturnInt32, (int, Utils::SmallStringView), ());
+
+ MOCK_METHOD(Utils::optional<int>, valueReturnInt32, (int), ());
+
+ MOCK_METHOD(Utils::optional<long long>, valueReturnInt64, (int), ());
+
+ MOCK_METHOD(Utils::optional<Utils::PathString>, valueReturnPathString, (int), ());
-template<>
-std::vector<Utils::SmallString> SqliteReadStatementMock::values<Utils::SmallString>(
- std::size_t reserveSize);
+ MOCK_METHOD(Utils::optional<Utils::PathString>, valueReturnPathString, (Utils::SmallStringView), ());
-template<>
-std::vector<long long> SqliteReadStatementMock::values<long long>(std::size_t reserveSize);
+ MOCK_METHOD(Utils::optional<ClangBackEnd::FilePath>, valueReturnFilePath, (int), ());
-template<>
-Utils::optional<long long> SqliteReadStatementMock::value<long long>();
+ MOCK_METHOD(ClangBackEnd::FilePaths, valuesReturnFilePaths, (std::size_t), ());
-template<>
-Utils::optional<Sqlite::ByteArrayBlob> SqliteReadStatementMock::value<Sqlite::ByteArrayBlob>(
- const Utils::SmallStringView &name, const long long &blob);
+ MOCK_METHOD(Utils::optional<Utils::SmallString>, valueReturnSmallString, (int), ());
+
+ MOCK_METHOD(Utils::optional<Sources::SourceNameAndDirectoryId>,
+ valueReturnSourceNameAndDirectoryId,
+ (int) );
+
+ MOCK_METHOD(Utils::optional<ClangBackEnd::ProjectPartArtefact>,
+ valueReturnProjectPartArtefact,
+ (int) );
+
+ MOCK_METHOD(Utils::optional<ClangBackEnd::ProjectPartArtefact>,
+ valueReturnProjectPartArtefact,
+ (Utils::SmallStringView));
+ MOCK_METHOD(ClangBackEnd::ProjectPartArtefacts, valuesReturnProjectPartArtefacts, (std::size_t), ());
+ MOCK_METHOD(Utils::optional<ClangBackEnd::ProjectPartContainer>,
+ valueReturnProjectPartContainer,
+ (int) );
+ MOCK_METHOD(ClangBackEnd::ProjectPartContainers,
+ valuesReturnProjectPartContainers,
+ (std::size_t),
+ ());
+ MOCK_METHOD(Utils::optional<ClangBackEnd::ProjectPartPch>, valueReturnProjectPartPch, (int), ());
+
+ MOCK_METHOD(Utils::optional<ClangBackEnd::PchPaths>, valueReturnPchPaths, (int), ());
+
+ MOCK_METHOD(Symbols, valuesReturnSymbols, (std::size_t, int, Utils::SmallStringView), ());
+
+ MOCK_METHOD(Symbols, valuesReturnSymbols, (std::size_t, int, int, Utils::SmallStringView), ());
+
+ MOCK_METHOD(Symbols, valuesReturnSymbols, (std::size_t, int, int, int, Utils::SmallStringView), ());
+
+ MOCK_METHOD(SourceLocation, valueReturnSourceLocation, (long long, int), ());
+
+ MOCK_METHOD(Utils::optional<ClangBackEnd::ProjectPartId>,
+ valueReturnProjectPartId,
+ (Utils::SmallStringView));
+
+ MOCK_METHOD(SourceTimeStamps, valuesReturnSourceTimeStamps, (std::size_t), ());
+ MOCK_METHOD(SourceTimeStamps, valuesReturnSourceTimeStamps, (std::size_t, int sourcePathId), ());
+
+ MOCK_METHOD(Utils::optional<PrecompiledHeaderTimeStamps>,
+ valuesReturnPrecompiledHeaderTimeStamps,
+ (int projectPartId));
+
+ template<typename ResultType, typename... QueryTypes>
+ auto value(const QueryTypes &...queryValues)
+ {
+ if constexpr (std::is_same_v<ResultType, Sqlite::ByteArrayBlob>)
+ return valueReturnBlob(queryValues...);
+ else if constexpr (std::is_same_v<ResultType, ClangBackEnd::ProjectPartId>)
+ return valueReturnProjectPartId(queryValues...);
+ else if constexpr (std::is_same_v<ResultType, int>)
+ return valueReturnInt32(queryValues...);
+ else if constexpr (std::is_same_v<ResultType, long long>)
+ return valueReturnInt64(queryValues...);
+ else if constexpr (std::is_same_v<ResultType, Utils::PathString>)
+ return valueReturnPathString(queryValues...);
+ else if constexpr (std::is_same_v<ResultType, ClangBackEnd::FilePath>)
+ return valueReturnFilePath(queryValues...);
+ else if constexpr (std::is_same_v<ResultType, ClangBackEnd::ProjectPartArtefact>)
+ return valueReturnProjectPartArtefact(queryValues...);
+ else if constexpr (std::is_same_v<ResultType, ClangBackEnd::ProjectPartContainer>)
+ return valueReturnProjectPartContainer(queryValues...);
+ else if constexpr (std::is_same_v<ResultType, ClangBackEnd::ProjectPartPch>)
+ return valueReturnProjectPartPch(queryValues...);
+ else if constexpr (std::is_same_v<ResultType, ClangBackEnd::PchPaths>)
+ return valueReturnPchPaths(queryValues...);
+ else if constexpr (std::is_same_v<ResultType, Utils::SmallString>)
+ return valueReturnSmallString(queryValues...);
+ else if constexpr (std::is_same_v<ResultType, SourceLocation>)
+ return valueReturnSourceLocation(queryValues...);
+ else if constexpr (std::is_same_v<ResultType, Sources::SourceNameAndDirectoryId>)
+ return valueReturnSourceNameAndDirectoryId(queryValues...);
+ else if constexpr (std::is_same_v<ResultType, ClangBackEnd::PrecompiledHeaderTimeStamps>)
+ return valuesReturnPrecompiledHeaderTimeStamps(queryValues...);
+ else
+ static_assert(!std::is_same_v<ResultType, ResultType>,
+ "SqliteReadStatementMock::value does not handle result type!");
+ }
+
+ template<typename ResultType, typename... QueryType>
+ auto values(std::size_t reserveSize, const QueryType &...queryValues)
+ {
+ if constexpr (std::is_same_v<ResultType, Utils::SmallString>)
+ return valuesReturnStringVector(reserveSize);
+ else if constexpr (std::is_same_v<ResultType, long long>)
+ return valuesReturnRowIds(reserveSize);
+ else if constexpr (std::is_same_v<ResultType, SourceLocation>)
+ return valuesReturnSourceLocations(reserveSize, queryValues...);
+ else if constexpr (std::is_same_v<ResultType, CppTools::Usage>)
+ return valuesReturnSourceUsages(reserveSize, queryValues...);
+ else if constexpr (std::is_same_v<ResultType, Symbol>)
+ return valuesReturnSymbols(reserveSize, queryValues...);
+ else if constexpr (std::is_same_v<ResultType, ClangBackEnd::UsedMacro>)
+ return valuesReturnUsedMacros(reserveSize, queryValues...);
+ else if constexpr (std::is_same_v<ResultType, ClangBackEnd::FilePathId>)
+ return valuesReturnFilePathIds(reserveSize, queryValues...);
+ else if constexpr (std::is_same_v<ResultType, ClangBackEnd::FilePath>)
+ return valuesReturnFilePaths(reserveSize);
+ else if constexpr (std::is_same_v<ResultType, Sources::Directory>)
+ return valuesReturnStdVectorDirectory(reserveSize);
+ else if constexpr (std::is_same_v<ResultType, Sources::Source>)
+ return valuesReturnStdVectorSource(reserveSize);
+ else if constexpr (std::is_same_v<ResultType, ProjectPartNameId>)
+ return valuesReturnProjectPartNameIds(reserveSize);
+ else if constexpr (std::is_same_v<ResultType, ClangBackEnd::ProjectPartContainer>)
+ return valuesReturnProjectPartContainers(reserveSize);
+ else if constexpr (std::is_same_v<ResultType, SourceEntry>)
+ return valuesReturnSourceEntries(reserveSize, queryValues...);
+ else if constexpr (std::is_same_v<ResultType, SourceTimeStamp>)
+ return valuesReturnSourceTimeStamps(reserveSize, queryValues...);
+ else
+ static_assert(!std::is_same_v<ResultType, ResultType>,
+ "SqliteReadStatementMock::values does not handle result type!");
+ }
+
+public:
+ Utils::SmallString sqlStatement;
+};
+
+template<int ResultCount>
+class SqliteReadStatementMock : public SqliteReadStatementMockBase
+{
+public:
+ using SqliteReadStatementMockBase::SqliteReadStatementMockBase;
+};
diff --git a/tests/unit/unittest/sqlitesessions-test.cpp b/tests/unit/unittest/sqlitesessions-test.cpp
index 31c7137551..10575731fb 100644
--- a/tests/unit/unittest/sqlitesessions-test.cpp
+++ b/tests/unit/unittest/sqlitesessions-test.cpp
@@ -124,8 +124,8 @@ class Sessions : public testing::Test
protected:
Sessions() { sessions.setAttachedTables({"data", "tags"}); }
- std::vector<Data> fetchData() { return selectData.values<Data, 3>(8); }
- std::vector<Tag> fetchTags() { return selectTags.values<Tag, 2>(8); }
+ std::vector<Data> fetchData() { return selectData.values<Data>(8); }
+ std::vector<Tag> fetchTags() { return selectTags.values<Tag>(8); }
protected:
Sqlite::Database database{":memory:", Sqlite::JournalMode::Memory};
@@ -150,10 +150,10 @@ protected:
"DELETE FROM tags WHERE dataId=(SELECT id FROM data WHERE name=?)", database};
Sqlite::WriteStatement insertTag{
"INSERT INTO tags(dataId, tag) VALUES ((SELECT id FROM data WHERE name=?1), ?2) ", database};
- Sqlite::ReadStatement selectData{"SELECT name, number, value FROM data", database};
- Sqlite::ReadStatement selectTags{"SELECT name, tag FROM tags JOIN data ON data.id=tags.dataId",
- database};
- Sqlite::ReadStatement selectChangeSets{"SELECT changeset FROM testsessions", database};
+ Sqlite::ReadStatement<3> selectData{"SELECT name, number, value FROM data", database};
+ Sqlite::ReadStatement<2> selectTags{
+ "SELECT name, tag FROM tags JOIN data ON data.id=tags.dataId", database};
+ Sqlite::ReadStatement<1> selectChangeSets{"SELECT changeset FROM testsessions", database};
};
TEST_F(Sessions, DontThrowForCommittingWithoutSessionStart)
diff --git a/tests/unit/unittest/sqlitestatement-test.cpp b/tests/unit/unittest/sqlitestatement-test.cpp
index 1639c1dd1f..065ad8d976 100644
--- a/tests/unit/unittest/sqlitestatement-test.cpp
+++ b/tests/unit/unittest/sqlitestatement-test.cpp
@@ -121,12 +121,12 @@ struct Output
TEST_F(SqliteStatement, ThrowsStatementHasErrorForWrongSqlStatement)
{
- ASSERT_THROW(ReadStatement("blah blah blah", database), Sqlite::StatementHasError);
+ ASSERT_THROW(ReadStatement<0>("blah blah blah", database), Sqlite::StatementHasError);
}
TEST_F(SqliteStatement, ThrowsNotReadOnlySqlStatementForWritableSqlStatementInReadStatement)
{
- ASSERT_THROW(ReadStatement("INSERT INTO test(name, number) VALUES (?, ?)", database),
+ ASSERT_THROW(ReadStatement<0>("INSERT INTO test(name, number) VALUES (?, ?)", database),
Sqlite::NotReadOnlySqlStatement);
}
@@ -143,7 +143,7 @@ TEST_F(SqliteStatement, CountRows)
while (statement.next())
++nextCount;
- int sqlCount = ReadStatement::toValue<int>("SELECT count(*) FROM test", database);
+ int sqlCount = ReadStatement<1>::toValue<int>("SELECT count(*) FROM test", database);
ASSERT_THAT(nextCount, sqlCount);
}
@@ -174,24 +174,28 @@ TEST_F(SqliteStatement, Value)
TEST_F(SqliteStatement, ToIntegerValue)
{
- auto value = ReadStatement::toValue<int>("SELECT number FROM test WHERE name='foo'", database);
+ auto value = ReadStatement<1>::toValue<int>("SELECT number FROM test WHERE name='foo'", database);
ASSERT_THAT(value, 23);
}
TEST_F(SqliteStatement, ToLongIntegerValue)
{
- ASSERT_THAT(ReadStatement::toValue<qint64>("SELECT number FROM test WHERE name='foo'", database), Eq(23));
+ ASSERT_THAT(ReadStatement<1>::toValue<qint64>("SELECT number FROM test WHERE name='foo'", database),
+ Eq(23));
}
TEST_F(SqliteStatement, ToDoubleValue)
{
- ASSERT_THAT(ReadStatement::toValue<double>("SELECT number FROM test WHERE name='foo'", database), 23.3);
+ ASSERT_THAT(ReadStatement<1>::toValue<double>("SELECT number FROM test WHERE name='foo'", database),
+ 23.3);
}
TEST_F(SqliteStatement, ToStringValue)
{
- ASSERT_THAT(ReadStatement::toValue<Utils::SmallString>("SELECT name FROM test WHERE name='foo'", database), "foo");
+ ASSERT_THAT(ReadStatement<1>::toValue<Utils::SmallString>(
+ "SELECT name FROM test WHERE name='foo'", database),
+ "foo");
}
TEST_F(SqliteStatement, BindNull)
@@ -544,16 +548,15 @@ TEST_F(SqliteStatement, CannotReadFromClosedDatabase)
{
database.close();
- ASSERT_THROW(ReadStatement("SELECT * FROM test", database),
- Sqlite::DatabaseIsNotOpen);
+ ASSERT_THROW(ReadStatement<3>("SELECT * FROM test", database), Sqlite::DatabaseIsNotOpen);
}
TEST_F(SqliteStatement, GetTupleValuesWithoutArguments)
{
using Tuple = std::tuple<Utils::SmallString, double, int>;
- ReadStatement statement("SELECT name, number, value FROM test", database);
+ ReadStatement<3> statement("SELECT name, number, value FROM test", database);
- auto values = statement.values<Tuple, 3>(3);
+ auto values = statement.values<Tuple>(3);
ASSERT_THAT(values,
UnorderedElementsAre(Tuple{"bar", 0, 1}, Tuple{"foo", 23.3, 2}, Tuple{"poo", 40.0, 3}));
@@ -561,7 +564,7 @@ TEST_F(SqliteStatement, GetTupleValuesWithoutArguments)
TEST_F(SqliteStatement, GetSingleValuesWithoutArguments)
{
- ReadStatement statement("SELECT name FROM test", database);
+ ReadStatement<1> statement("SELECT name FROM test", database);
std::vector<Utils::SmallString> values = statement.values<Utils::SmallString>(3);
@@ -586,7 +589,7 @@ public:
TEST_F(SqliteStatement, GetSingleSqliteValuesWithoutArguments)
{
- ReadStatement statement("SELECT number FROM test", database);
+ ReadStatement<1> statement("SELECT number FROM test", database);
database.execute("INSERT INTO test VALUES (NULL, NULL, NULL)");
std::vector<FooValue> values = statement.values<FooValue>(3);
@@ -596,9 +599,9 @@ TEST_F(SqliteStatement, GetSingleSqliteValuesWithoutArguments)
TEST_F(SqliteStatement, GetStructValuesWithoutArguments)
{
- ReadStatement statement("SELECT name, number, value FROM test", database);
+ ReadStatement<3> statement("SELECT name, number, value FROM test", database);
- auto values = statement.values<Output, 3>(3);
+ auto values = statement.values<Output>(3);
ASSERT_THAT(values,
UnorderedElementsAre(Output{"bar", "blah", 1},
@@ -608,7 +611,7 @@ TEST_F(SqliteStatement, GetStructValuesWithoutArguments)
TEST_F(SqliteStatement, GetValuesForSingleOutputWithBindingMultipleTimes)
{
- ReadStatement statement("SELECT name FROM test WHERE number=?", database);
+ ReadStatement<1> statement("SELECT name FROM test WHERE number=?", database);
statement.values<Utils::SmallString>(3, 40);
std::vector<Utils::SmallString> values = statement.values<Utils::SmallString>(3, 40);
@@ -616,56 +619,13 @@ TEST_F(SqliteStatement, GetValuesForSingleOutputWithBindingMultipleTimes)
ASSERT_THAT(values, ElementsAre("poo"));
}
-TEST_F(SqliteStatement, GetValuesForMultipleOutputValuesAndContainerQueryValues)
-{
- using Tuple = std::tuple<Utils::SmallString, double, double>;
- std::vector<double> queryValues = {40, 23.3};
- ReadStatement statement("SELECT name, number, value FROM test WHERE number=?", database);
-
- auto values = statement.values<Tuple, 3>(3, queryValues);
-
- ASSERT_THAT(values, UnorderedElementsAre(Tuple{"poo", 40, 3.}, Tuple{"foo", 23.3, 2.}));
-}
-
-TEST_F(SqliteStatement, GetValuesForSingleOutputValuesAndContainerQueryValues)
-{
- std::vector<double> queryValues = {40, 23.3};
- ReadStatement statement("SELECT name FROM test WHERE number=?", database);
-
- std::vector<Utils::SmallString> values = statement.values<Utils::SmallString>(3, queryValues);
-
- ASSERT_THAT(values, UnorderedElementsAre("poo", "foo"));
-}
-
-TEST_F(SqliteStatement, GetValuesForMultipleOutputValuesAndContainerQueryTupleValues)
-{
- using Tuple = std::tuple<Utils::SmallString, Utils::SmallString, int>;
- using ResultTuple = std::tuple<Utils::SmallString, double, int>;
- std::vector<Tuple> queryValues = {{"poo", "40", 3}, {"bar", "blah", 1}};
- ReadStatement statement("SELECT name, number, value FROM test WHERE name= ? AND number=? AND value=?", database);
-
- auto values = statement.values<ResultTuple, 3>(3, queryValues);
-
- ASSERT_THAT(values, UnorderedElementsAre(ResultTuple{"poo", 40, 3}, ResultTuple{"bar", 0, 1}));
-}
-
-TEST_F(SqliteStatement, GetValuesForSingleOutputValuesAndContainerQueryTupleValues)
-{
- using Tuple = std::tuple<Utils::SmallString, Utils::SmallString>;
- std::vector<Tuple> queryValues = {{"poo", "40"}, {"bar", "blah"}};
- ReadStatement statement("SELECT name FROM test WHERE name= ? AND number=?", database);
-
- std::vector<Utils::SmallString> values = statement.values<Utils::SmallString>(3, queryValues);
-
- ASSERT_THAT(values, UnorderedElementsAre("poo", "bar"));
-}
-
TEST_F(SqliteStatement, GetValuesForMultipleOutputValuesAndMultipleQueryValue)
{
using Tuple = std::tuple<Utils::SmallString, Utils::SmallString, long long>;
- ReadStatement statement("SELECT name, number, value FROM test WHERE name=? AND number=? AND value=?", database);
+ ReadStatement<3> statement(
+ "SELECT name, number, value FROM test WHERE name=? AND number=? AND value=?", database);
- auto values = statement.values<Tuple, 3>(3, "bar", "blah", 1);
+ auto values = statement.values<Tuple>(3, "bar", "blah", 1);
ASSERT_THAT(values, ElementsAre(Tuple{"bar", "blah", 1}));
}
@@ -673,49 +633,29 @@ TEST_F(SqliteStatement, GetValuesForMultipleOutputValuesAndMultipleQueryValue)
TEST_F(SqliteStatement, CallGetValuesForMultipleOutputValuesAndMultipleQueryValueMultipleTimes)
{
using Tuple = std::tuple<Utils::SmallString, Utils::SmallString, long long>;
- ReadStatement statement("SELECT name, number, value FROM test WHERE name=? AND number=?", database);
- statement.values<Tuple, 3>(3, "bar", "blah");
+ ReadStatement<3> statement("SELECT name, number, value FROM test WHERE name=? AND number=?",
+ database);
+ statement.values<Tuple>(3, "bar", "blah");
- auto values = statement.values<Tuple, 3>(3, "bar", "blah");
+ auto values = statement.values<Tuple>(3, "bar", "blah");
ASSERT_THAT(values, ElementsAre(Tuple{"bar", "blah", 1}));
}
TEST_F(SqliteStatement, GetStructOutputValuesAndMultipleQueryValue)
{
- ReadStatement statement("SELECT name, number, value FROM test WHERE name=? AND number=? AND value=?", database);
+ ReadStatement<3> statement(
+ "SELECT name, number, value FROM test WHERE name=? AND number=? AND value=?", database);
- auto values = statement.values<Output, 3>(3, "bar", "blah", 1);
+ auto values = statement.values<Output>(3, "bar", "blah", 1);
ASSERT_THAT(values, ElementsAre(Output{"bar", "blah", 1}));
}
-TEST_F(SqliteStatement, GetStructOutputValuesAndContainerQueryValues)
-{
- std::vector<double> queryValues = {40, 23.3};
- ReadStatement statement("SELECT name, number, value FROM test WHERE number=?", database);
-
- auto values = statement.values<Output, 3>(3, queryValues);
-
- ASSERT_THAT(values, ElementsAre(Output{"poo", "40", 3},
- Output{"foo", "23.3", 2}));
-}
-
-TEST_F(SqliteStatement, GetStructOutputValuesAndContainerQueryTupleValues)
-{
- using Tuple = std::tuple<Utils::SmallString, Utils::SmallString, int>;
- std::vector<Tuple> queryValues = {{"poo", "40", 3}, {"bar", "blah", 1}};
- ReadStatement statement("SELECT name, number, value FROM test WHERE name= ? AND number=? AND value=?", database);
-
- auto values = statement.values<Output, 3>(3, queryValues);
-
- ASSERT_THAT(values, UnorderedElementsAre(Output{"poo", "40", 3}, Output{"bar", "blah", 1}));
-}
-
TEST_F(SqliteStatement, GetBlobValues)
{
database.execute("INSERT INTO test VALUES ('blob', 40, x'AABBCCDD')");
- ReadStatement statement("SELECT value FROM test WHERE name='blob'", database);
+ ReadStatement<1> statement("SELECT value FROM test WHERE name='blob'", database);
const int value = 0xDDCCBBAA;
auto bytePointer = reinterpret_cast<const Sqlite::byte *>(&value);
Sqlite::BlobView bytes{bytePointer, 4};
@@ -727,7 +667,7 @@ TEST_F(SqliteStatement, GetBlobValues)
TEST_F(SqliteStatement, GetEmptyBlobValueForInteger)
{
- ReadStatement statement("SELECT value FROM test WHERE name='poo'", database);
+ ReadStatement<1> statement("SELECT value FROM test WHERE name='poo'", database);
auto value = statement.value<Sqlite::Blob>();
@@ -736,7 +676,7 @@ TEST_F(SqliteStatement, GetEmptyBlobValueForInteger)
TEST_F(SqliteStatement, GetEmptyBlobValueForFloat)
{
- ReadStatement statement("SELECT number FROM test WHERE name='foo'", database);
+ ReadStatement<1> statement("SELECT number FROM test WHERE name='foo'", database);
auto value = statement.value<Sqlite::Blob>();
@@ -745,7 +685,7 @@ TEST_F(SqliteStatement, GetEmptyBlobValueForFloat)
TEST_F(SqliteStatement, GetEmptyBlobValueForText)
{
- ReadStatement statement("SELECT number FROM test WHERE name='bar'", database);
+ ReadStatement<1> statement("SELECT number FROM test WHERE name='bar'", database);
auto value = statement.value<Sqlite::Blob>();
@@ -754,7 +694,8 @@ TEST_F(SqliteStatement, GetEmptyBlobValueForText)
TEST_F(SqliteStatement, GetOptionalSingleValueAndMultipleQueryValue)
{
- ReadStatement statement("SELECT name FROM test WHERE name=? AND number=? AND value=?", database);
+ ReadStatement<1> statement("SELECT name FROM test WHERE name=? AND number=? AND value=?",
+ database);
auto value = statement.value<Utils::SmallString>("bar", "blah", 1);
@@ -763,9 +704,10 @@ TEST_F(SqliteStatement, GetOptionalSingleValueAndMultipleQueryValue)
TEST_F(SqliteStatement, GetOptionalOutputValueAndMultipleQueryValue)
{
- ReadStatement statement("SELECT name, number, value FROM test WHERE name=? AND number=? AND value=?", database);
+ ReadStatement<3> statement(
+ "SELECT name, number, value FROM test WHERE name=? AND number=? AND value=?", database);
- auto value = statement.value<Output, 3>("bar", "blah", 1);
+ auto value = statement.value<Output>("bar", "blah", 1);
ASSERT_THAT(value.value(), Eq(Output{"bar", "blah", 1}));
}
@@ -773,9 +715,10 @@ TEST_F(SqliteStatement, GetOptionalOutputValueAndMultipleQueryValue)
TEST_F(SqliteStatement, GetOptionalTupleValueAndMultipleQueryValue)
{
using Tuple = std::tuple<Utils::SmallString, Utils::SmallString, long long>;
- ReadStatement statement("SELECT name, number, value FROM test WHERE name=? AND number=? AND value=?", database);
+ ReadStatement<3> statement(
+ "SELECT name, number, value FROM test WHERE name=? AND number=? AND value=?", database);
- auto value = statement.value<Tuple, 3>("bar", "blah", 1);
+ auto value = statement.value<Tuple>("bar", "blah", 1);
ASSERT_THAT(value.value(), Eq(Tuple{"bar", "blah", 1}));
}
@@ -837,65 +780,6 @@ TEST_F(SqliteStatement, GetValuesWithSimpleArgumentsCallsResetIfExceptionIsThrow
EXPECT_THROW(mockStatement.values<int>(3, "foo", "bar"), Sqlite::StatementHasError);
}
-TEST_F(SqliteStatement, GetValuesWithVectorArgumentsCallsReset)
-{
- MockSqliteStatement mockStatement;
-
- EXPECT_CALL(mockStatement, reset()).Times(2);
-
- mockStatement.values<int>(3, std::vector<Utils::SmallString>{"bar", "foo"});
-}
-
-TEST_F(SqliteStatement, GetValuesWithVectorArgumentCallsResetIfExceptionIsThrown)
-{
- MockSqliteStatement mockStatement;
- ON_CALL(mockStatement, next()).WillByDefault(Throw(Sqlite::StatementHasError("")));
-
- EXPECT_CALL(mockStatement, reset());
-
- EXPECT_THROW(mockStatement.values<int>(3, std::vector<Utils::SmallString>{"bar", "foo"}),
- Sqlite::StatementHasError);
-}
-
-TEST_F(SqliteStatement, GetValuesWithTupleArgumentsCallsReset)
-{
- MockSqliteStatement mockStatement;
-
- EXPECT_CALL(mockStatement, reset()).Times(2);
-
- mockStatement.values<int>(3, std::vector<std::tuple<int>>{{1}, {2}});
-}
-
-TEST_F(SqliteStatement, GetValuesWithTupleArgumentsCallsResetIfExceptionIsThrown)
-{
- MockSqliteStatement mockStatement;
- ON_CALL(mockStatement, next()).WillByDefault(Throw(Sqlite::StatementHasError("")));
-
- EXPECT_CALL(mockStatement, reset());
-
- EXPECT_THROW(mockStatement.values<int>(3, std::vector<std::tuple<int>>{{1}, {2}}),
- Sqlite::StatementHasError);
-}
-
-TEST_F(SqliteStatement, DoubleThrowExceptionsInReset)
-{
- MockSqliteStatement mockStatement;
- ON_CALL(mockStatement, next()).WillByDefault(Throw(Sqlite::StatementHasError("")));
- ON_CALL(mockStatement, reset()).WillByDefault(Throw(Sqlite::StatementHasError("")));
-
- ASSERT_THROW(mockStatement.values<int>(3, std::vector<std::tuple<int>>{{1}, {2}}),
- Sqlite::StatementHasError);
-}
-
-TEST_F(SqliteStatement, ThrowExceptionOnlyInReset)
-{
- MockSqliteStatement mockStatement;
- ON_CALL(mockStatement, reset()).WillByDefault(Throw(Sqlite::StatementHasError("")));
-
- ASSERT_THROW(mockStatement.values<int>(3, std::vector<std::tuple<int>>{{1}, {2}}),
- Sqlite::StatementHasError);
-}
-
TEST_F(SqliteStatement, ResetIfWriteIsThrowingException)
{
MockSqliteStatement mockStatement;
@@ -917,138 +801,101 @@ TEST_F(SqliteStatement, ResetIfExecuteThrowsException)
ASSERT_ANY_THROW(mockStatement.execute());
}
-TEST_F(SqliteStatement, ThrowInvalidColumnFetchedForToManyArgumentsForValue)
-{
- SqliteTestStatement statement("SELECT name, number FROM test", database);
-
- ASSERT_THROW(statement.value<int>(), Sqlite::ColumnCountDoesNotMatch);
-}
-
-TEST_F(SqliteStatement, ThrowInvalidColumnFetchedForToManyArgumentsForValues)
-{
- SqliteTestStatement statement("SELECT name, number FROM test", database);
-
- ASSERT_THROW(statement.values<int>(1), Sqlite::ColumnCountDoesNotMatch);
-}
-
-TEST_F(SqliteStatement, ThrowInvalidColumnFetchedForToManyArgumentsForValuesWithArguments)
-{
- SqliteTestStatement statement("SELECT name, number FROM test WHERE name=?", database);
-
- ASSERT_THROW(statement.values<int>(1, 2), Sqlite::ColumnCountDoesNotMatch);
-}
-
-TEST_F(SqliteStatement, ThrowInvalidColumnFetchedForToManyArgumentsForValuesWithVectorArguments)
+TEST_F(SqliteStatement, ReadStatementThrowsColumnCountDoesNotMatch)
{
- SqliteTestStatement statement("SELECT name, number FROM test", database);
-
- ASSERT_THROW(statement.values<int>(1, std::vector<int>{}), Sqlite::ColumnCountDoesNotMatch);
-}
-
-TEST_F(SqliteStatement, ThrowInvalidColumnFetchedForToManyArgumentsForValuesWithTupleArguments)
-{
- SqliteTestStatement statement("SELECT name, number FROM test", database);
+ MockFunction<Sqlite::CallbackControl(Utils::SmallStringView)> callbackMock;
- ASSERT_THROW(statement.values<int>(1, std::vector<std::tuple<int>>{}),
+ ASSERT_THROW(ReadStatement<1> statement("SELECT name, number FROM test", database),
Sqlite::ColumnCountDoesNotMatch);
}
-TEST_F(SqliteStatement, ThrowInvalidColumnFetchedForToManyArgumentsForToValues)
+TEST_F(SqliteStatement, ReadWriteStatementThrowsColumnCountDoesNotMatch)
{
- ASSERT_THROW(SqliteTestStatement::toValue<int>("SELECT name, number FROM test", database),
+ MockFunction<Sqlite::CallbackControl(Utils::SmallStringView)> callbackMock;
+
+ ASSERT_THROW(ReadWriteStatement<1> statement("SELECT name, number FROM test", database),
Sqlite::ColumnCountDoesNotMatch);
}
TEST_F(SqliteStatement, ReadCallback)
{
MockFunction<Sqlite::CallbackControl(Utils::SmallStringView, long long)> callbackMock;
- ReadStatement statement("SELECT name, value FROM test", database);
+ ReadStatement<2> statement("SELECT name, value FROM test", database);
EXPECT_CALL(callbackMock, Call(Eq("bar"), Eq(1)));
EXPECT_CALL(callbackMock, Call(Eq("foo"), Eq(2)));
EXPECT_CALL(callbackMock, Call(Eq("poo"), Eq(3)));
- statement.readCallback<2>(callbackMock.AsStdFunction());
+ statement.readCallback(callbackMock.AsStdFunction());
}
TEST_F(SqliteStatement, ReadCallbackCalledWithArguments)
{
MockFunction<Sqlite::CallbackControl(Utils::SmallStringView, long long)> callbackMock;
- ReadStatement statement("SELECT name, value FROM test WHERE value=?", database);
+ ReadStatement<2> statement("SELECT name, value FROM test WHERE value=?", database);
EXPECT_CALL(callbackMock, Call(Eq("foo"), Eq(2)));
- statement.readCallback<2>(callbackMock.AsStdFunction(), 2);
+ statement.readCallback(callbackMock.AsStdFunction(), 2);
}
TEST_F(SqliteStatement, ReadCallbackAborts)
{
MockFunction<Sqlite::CallbackControl(Utils::SmallStringView, long long)> callbackMock;
- ReadStatement statement("SELECT name, value FROM test ORDER BY name", database);
+ ReadStatement<2> statement("SELECT name, value FROM test ORDER BY name", database);
EXPECT_CALL(callbackMock, Call(Eq("bar"), Eq(1)));
EXPECT_CALL(callbackMock, Call(Eq("foo"), Eq(2))).WillOnce(Return(Sqlite::CallbackControl::Abort));
EXPECT_CALL(callbackMock, Call(Eq("poo"), Eq(3))).Times(0);
- statement.readCallback<2>(callbackMock.AsStdFunction());
-}
-
-TEST_F(SqliteStatement, ThrowInvalidColumnFetchedForToManyArgumentsForReadCallback)
-{
- MockFunction<Sqlite::CallbackControl(Utils::SmallStringView)> callbackMock;
- SqliteTestStatement statement("SELECT name, number FROM test", database);
-
- ASSERT_THROW(statement.readCallback<1>(callbackMock.AsStdFunction()),
- Sqlite::ColumnCountDoesNotMatch);
+ statement.readCallback(callbackMock.AsStdFunction());
}
TEST_F(SqliteStatement, ReadCallbackCallsResetAfterCallbacks)
{
MockFunction<Sqlite::CallbackControl(Utils::SmallStringView, long long)> callbackMock;
- MockSqliteStatement mockStatement;
+ MockSqliteStatement<2> mockStatement;
EXPECT_CALL(mockStatement, reset());
- mockStatement.readCallback<2>(callbackMock.AsStdFunction());
+ mockStatement.readCallback(callbackMock.AsStdFunction());
}
TEST_F(SqliteStatement, ReadCallbackCallsResetAfterCallbacksAborts)
{
MockFunction<Sqlite::CallbackControl(Utils::SmallStringView, long long)> callbackMock;
- MockSqliteStatement mockStatement;
+ MockSqliteStatement<2> mockStatement;
ON_CALL(callbackMock, Call(_, _)).WillByDefault(Return(Sqlite::CallbackControl::Abort));
EXPECT_CALL(mockStatement, reset());
- mockStatement.readCallback<2>(callbackMock.AsStdFunction());
+ mockStatement.readCallback(callbackMock.AsStdFunction());
}
TEST_F(SqliteStatement, ReadCallbackThrowsForError)
{
MockFunction<Sqlite::CallbackControl(Utils::SmallStringView, long long)> callbackMock;
- MockSqliteStatement mockStatement;
+ MockSqliteStatement<2> mockStatement;
ON_CALL(mockStatement, next()).WillByDefault(Throw(Sqlite::StatementHasError("")));
- ASSERT_THROW(mockStatement.readCallback<2>(callbackMock.AsStdFunction()),
- Sqlite::StatementHasError);
+ ASSERT_THROW(mockStatement.readCallback(callbackMock.AsStdFunction()), Sqlite::StatementHasError);
}
TEST_F(SqliteStatement, ReadCallbackCallsResetIfExceptionIsThrown)
{
MockFunction<Sqlite::CallbackControl(Utils::SmallStringView, long long)> callbackMock;
- MockSqliteStatement mockStatement;
+ MockSqliteStatement<2> mockStatement;
ON_CALL(mockStatement, next()).WillByDefault(Throw(Sqlite::StatementHasError("")));
EXPECT_CALL(mockStatement, reset());
- EXPECT_THROW(mockStatement.readCallback<2>(callbackMock.AsStdFunction()),
- Sqlite::StatementHasError);
+ EXPECT_THROW(mockStatement.readCallback(callbackMock.AsStdFunction()), Sqlite::StatementHasError);
}
TEST_F(SqliteStatement, ReadToContainer)
{
std::deque<FooValue> values;
- ReadStatement statement("SELECT number FROM test", database);
+ ReadStatement<1> statement("SELECT number FROM test", database);
statement.readTo<1>(values);
@@ -1058,21 +905,13 @@ TEST_F(SqliteStatement, ReadToContainer)
TEST_F(SqliteStatement, ReadToContainerCallCallbackWithArguments)
{
std::deque<FooValue> values;
- ReadStatement statement("SELECT number FROM test WHERE value=?", database);
+ ReadStatement<1> statement("SELECT number FROM test WHERE value=?", database);
statement.readTo(values, 2);
ASSERT_THAT(values, ElementsAre(Eq(23.3)));
}
-TEST_F(SqliteStatement, ThrowInvalidColumnFetchedForToManyArgumentsForReadTo)
-{
- std::deque<FooValue> values;
- SqliteTestStatement statement("SELECT name, number FROM test", database);
-
- ASSERT_THROW(statement.readTo<1>(values, 2), Sqlite::ColumnCountDoesNotMatch);
-}
-
TEST_F(SqliteStatement, ReadToCallsResetAfterPushingAllValuesBack)
{
std::deque<FooValue> values;
diff --git a/tests/unit/unittest/sqlitetable-test.cpp b/tests/unit/unittest/sqlitetable-test.cpp
index f96b451785..b916ad5bc8 100644
--- a/tests/unit/unittest/sqlitetable-test.cpp
+++ b/tests/unit/unittest/sqlitetable-test.cpp
@@ -27,7 +27,7 @@
#include "spydummy.h"
#include <sqlitecolumn.h>
-#include <mocksqlitedatabase.h>
+#include <sqlitedatabasemock.h>
#include <sqlitetable.h>
namespace {
@@ -45,7 +45,7 @@ using Sqlite::OpenMode;
class SqliteTable : public ::testing::Test
{
protected:
- NiceMock<MockSqliteDatabase> mockDatabase;
+ NiceMock<SqliteDatabaseMock> databaseMock;
Sqlite::Table table;
Utils::SmallString tableName = "testTable";
};
@@ -93,9 +93,9 @@ TEST_F(SqliteTable, InitializeTable)
table.addColumn("name");
table.addColumn("value");
- EXPECT_CALL(mockDatabase, execute(Eq("CREATE TEMPORARY TABLE IF NOT EXISTS testTable(name NUMERIC, value NUMERIC) WITHOUT ROWID")));
+ EXPECT_CALL(databaseMock, execute(Eq("CREATE TEMPORARY TABLE IF NOT EXISTS testTable(name NUMERIC, value NUMERIC) WITHOUT ROWID")));
- table.initialize(mockDatabase);
+ table.initialize(databaseMock);
}
TEST_F(SqliteTable, InitializeTableWithIndex)
@@ -107,11 +107,11 @@ TEST_F(SqliteTable, InitializeTableWithIndex)
table.addIndex({column});
table.addIndex({column2});
- EXPECT_CALL(mockDatabase, execute(Eq("CREATE TABLE testTable(name NUMERIC, value NUMERIC)")));
- EXPECT_CALL(mockDatabase, execute(Eq("CREATE INDEX IF NOT EXISTS index_testTable_name ON testTable(name)")));
- EXPECT_CALL(mockDatabase, execute(Eq("CREATE INDEX IF NOT EXISTS index_testTable_value ON testTable(value)")));
+ EXPECT_CALL(databaseMock, execute(Eq("CREATE TABLE testTable(name NUMERIC, value NUMERIC)")));
+ EXPECT_CALL(databaseMock, execute(Eq("CREATE INDEX IF NOT EXISTS index_testTable_name ON testTable(name)")));
+ EXPECT_CALL(databaseMock, execute(Eq("CREATE INDEX IF NOT EXISTS index_testTable_value ON testTable(value)")));
- table.initialize(mockDatabase);
+ table.initialize(databaseMock);
}
TEST_F(SqliteTable, AddForeignKeyColumnWithTableCalls)
@@ -125,11 +125,11 @@ TEST_F(SqliteTable, AddForeignKeyColumnWithTableCalls)
ForeignKeyAction::Cascade,
Enforment::Deferred);
- EXPECT_CALL(mockDatabase,
+ EXPECT_CALL(databaseMock,
execute(Eq("CREATE TABLE testTable(name INTEGER REFERENCES foreignTable ON UPDATE "
"SET NULL ON DELETE CASCADE DEFERRABLE INITIALLY DEFERRED)")));
- table.initialize(mockDatabase);
+ table.initialize(databaseMock);
}
TEST_F(SqliteTable, AddForeignKeyColumnWithColumnCalls)
@@ -145,12 +145,12 @@ TEST_F(SqliteTable, AddForeignKeyColumnWithColumnCalls)
Enforment::Deferred);
EXPECT_CALL(
- mockDatabase,
+ databaseMock,
execute(
Eq("CREATE TABLE testTable(name TEXT REFERENCES foreignTable(foreignColumn) ON UPDATE "
"SET DEFAULT ON DELETE RESTRICT DEFERRABLE INITIALLY DEFERRED)")));
- table.initialize(mockDatabase);
+ table.initialize(databaseMock);
}
TEST_F(SqliteTable, AddColumn)
@@ -299,10 +299,10 @@ TEST_F(SqliteTable, AddPrimaryTableContraint)
const auto &nameColumn = table.addColumn("name");
table.addPrimaryKeyContraint({idColumn, nameColumn});
- EXPECT_CALL(mockDatabase,
+ EXPECT_CALL(databaseMock,
execute(
Eq("CREATE TABLE testTable(id NUMERIC, name NUMERIC, PRIMARY KEY(id, name))")));
- table.initialize(mockDatabase);
+ table.initialize(databaseMock);
}
} // namespace
diff --git a/tests/unit/unittest/sqliteteststatement.h b/tests/unit/unittest/sqliteteststatement.h
index 8705280ca6..f2fe6ba295 100644
--- a/tests/unit/unittest/sqliteteststatement.h
+++ b/tests/unit/unittest/sqliteteststatement.h
@@ -27,11 +27,13 @@
#include <sqlitebasestatement.h>
-class SqliteTestStatement : public Sqlite::StatementImplementation<Sqlite::BaseStatement>
+class SqliteTestStatement : public Sqlite::StatementImplementation<Sqlite::BaseStatement, 1>
{
+ using Base = Sqlite::StatementImplementation<Sqlite::BaseStatement, 1>;
+
public:
explicit SqliteTestStatement(Utils::SmallStringView sqlStatement, Sqlite::Database &database)
- : Sqlite::StatementImplementation<Sqlite::BaseStatement>(sqlStatement, database)
+ : Base(sqlStatement, database)
{}
};
diff --git a/tests/unit/unittest/sqlitetransaction-test.cpp b/tests/unit/unittest/sqlitetransaction-test.cpp
index 0aa426db67..aaadd22d13 100644
--- a/tests/unit/unittest/sqlitetransaction-test.cpp
+++ b/tests/unit/unittest/sqlitetransaction-test.cpp
@@ -27,9 +27,9 @@
#include "mocksqlitetransactionbackend.h"
-#include <sqlitetransaction.h>
+#include <sqlitedatabasemock.h>
#include <sqliteexception.h>
-#include <mocksqlitedatabase.h>
+#include <sqlitetransaction.h>
namespace {
diff --git a/tests/unit/unittest/sqlitewritestatementmock.h b/tests/unit/unittest/sqlitewritestatementmock.h
index 64ce061d60..30f8383b6b 100644
--- a/tests/unit/unittest/sqlitewritestatementmock.h
+++ b/tests/unit/unittest/sqlitewritestatementmock.h
@@ -74,8 +74,35 @@ public:
Utils::SmallStringView,
Utils::SmallStringView),
());
+ MOCK_METHOD(void,
+ write,
+ (int,
+ Utils::SmallStringView,
+ Utils::SmallStringView,
+ Utils::SmallStringView,
+ Utils::SmallStringView,
+ int,
+ int,
+ int),
+ ());
MOCK_METHOD(void, write, (void *, long long), ());
+ MOCK_METHOD(void, write, (int), ());
+ MOCK_METHOD(void, write, (int, long long), ());
+ MOCK_METHOD(void, write, (int, int), ());
+ MOCK_METHOD(void, write, (uint, uint, uint), ());
+ MOCK_METHOD(void, write, (int, off_t, time_t), ());
+ MOCK_METHOD(void, write, (uint, uint), ());
+ MOCK_METHOD(void, write, (uchar, int), ());
+ MOCK_METHOD(void, write, (int, int, uchar, uchar), ());
+ MOCK_METHOD(void, write, (long long, int), ());
+ MOCK_METHOD(void, write, (uint, Utils::SmallStringView, Utils::SmallStringView, uint), ());
+ MOCK_METHOD(void, write, (uint, uint, uint, uint), ());
+ MOCK_METHOD(void, write, (long long, int, int, int), ());
+ MOCK_METHOD(void, write, (long long, int, int, int, int), ());
+ MOCK_METHOD(void, write, (uint, Utils::SmallStringView), ());
+ MOCK_METHOD(void, write, (int, Utils::SmallStringView), ());
+ MOCK_METHOD(void, write, (int, Utils::SmallStringView, long long), ());
Utils::SmallString sqlStatement;
};
diff --git a/tests/unit/unittest/stringcache-test.cpp b/tests/unit/unittest/stringcache-test.cpp
index 5a2b1d404d..625de6e5a5 100644
--- a/tests/unit/unittest/stringcache-test.cpp
+++ b/tests/unit/unittest/stringcache-test.cpp
@@ -27,7 +27,7 @@
#include "mockfilepathstorage.h"
#include "mockmutex.h"
-#include "mocksqlitedatabase.h"
+#include "sqlitedatabasemock.h"
#include <stringcache.h>
@@ -86,8 +86,8 @@ protected:
}
protected:
- NiceMock<MockSqliteDatabase> mockDatabase;
- NiceMock<MockFilePathStorage> mockStorage{mockDatabase};
+ NiceMock<SqliteDatabaseMock> databaseMock;
+ NiceMock<MockFilePathStorage> mockStorage{databaseMock};
StorageIdFunction mockStorageFetchDirectyId;
StorageStringFunction mockStorageFetchDirectyPath;
Cache cache;
diff --git a/tests/unit/unittest/symbolindexer-test.cpp b/tests/unit/unittest/symbolindexer-test.cpp
index 25c7056f02..63c8d04f6d 100644
--- a/tests/unit/unittest/symbolindexer-test.cpp
+++ b/tests/unit/unittest/symbolindexer-test.cpp
@@ -263,7 +263,7 @@ protected:
mockProjectPartsStorage,
mockModifiedTimeChecker,
testEnvironment};
- NiceMock<MockSqliteDatabase> mockSqliteDatabase;
+ NiceMock<SqliteDatabaseMock> mockSqliteDatabase;
SymbolIndexerTaskQueue indexerQueue{indexerScheduler, progressCounter, mockSqliteDatabase};
Scheduler indexerScheduler{collectorManger,
indexerQueue,
diff --git a/tests/unit/unittest/symbolindexertaskqueue-test.cpp b/tests/unit/unittest/symbolindexertaskqueue-test.cpp
index 1364091161..7862231a66 100644
--- a/tests/unit/unittest/symbolindexertaskqueue-test.cpp
+++ b/tests/unit/unittest/symbolindexertaskqueue-test.cpp
@@ -25,7 +25,7 @@
#include "googletest.h"
-#include "mocksqlitedatabase.h"
+#include "sqlitedatabasemock.h"
#include "mocktaskscheduler.h"
#include <symbolindexertaskqueue.h>
@@ -55,7 +55,7 @@ protected:
NiceMock<MockFunction<void(int, int)>> mockSetProgressCallback;
ClangBackEnd::ProgressCounter progressCounter{mockSetProgressCallback.AsStdFunction()};
NiceMock<MockTaskScheduler<Callable>> mockTaskScheduler;
- NiceMock<MockSqliteDatabase> mockSqliteDatabase;
+ NiceMock<SqliteDatabaseMock> mockSqliteDatabase;
ClangBackEnd::SymbolIndexerTaskQueue queue{mockTaskScheduler, progressCounter, mockSqliteDatabase};
};
diff --git a/tests/unit/unittest/symbolindexing-test.cpp b/tests/unit/unittest/symbolindexing-test.cpp
index 67411efd37..d2233d9516 100644
--- a/tests/unit/unittest/symbolindexing-test.cpp
+++ b/tests/unit/unittest/symbolindexing-test.cpp
@@ -54,7 +54,7 @@ using ClangRefactoring::QuerySqliteStatementFactory;
using Utils::PathString;
using SL = ClangRefactoring::SourceLocations;
-using StatementFactory = QuerySqliteStatementFactory<Database, ReadStatement>;
+using StatementFactory = QuerySqliteStatementFactory<Database>;
using Query = SymbolQuery<StatementFactory>;
MATCHER_P3(IsLocation, filePathId, line, column,
diff --git a/tests/unit/unittest/symbolquery-test.cpp b/tests/unit/unittest/symbolquery-test.cpp
index 3ff541564e..e01891fa33 100644
--- a/tests/unit/unittest/symbolquery-test.cpp
+++ b/tests/unit/unittest/symbolquery-test.cpp
@@ -25,8 +25,7 @@
#include "googletest.h"
-#include "mocksqlitedatabase.h"
-#include "mocksqlitereadstatement.h"
+#include "sqlitedatabasemock.h"
#include <querysqlitestatementfactory.h>
#include <refactoringdatabaseinitializer.h>
@@ -42,28 +41,32 @@ using ClangRefactoring::QuerySqliteStatementFactory;
using Sqlite::Database;
using ClangBackEnd::SourceLocationKind;
using ClangBackEnd::SymbolKind;
-using MockStatementFactory = QuerySqliteStatementFactory<MockSqliteDatabase,
- MockSqliteReadStatement>;
+using MockStatementFactory = QuerySqliteStatementFactory<SqliteDatabaseMock>;
using MockQuery = ClangRefactoring::SymbolQuery<MockStatementFactory>;
-using RealStatementFactory = QuerySqliteStatementFactory<Sqlite::Database,
- Sqlite::ReadStatement>;
+using RealStatementFactory = QuerySqliteStatementFactory<Sqlite::Database>;
using RealQuery = ClangRefactoring::SymbolQuery<RealStatementFactory>;
class SymbolQuery : public testing::Test
{
+ template<int ResultCount>
+ using ReadStatement = typename SqliteDatabaseMock::template ReadStatement<ResultCount>;
+
protected:
- NiceMock<MockSqliteDatabase> mockDatabase;
- MockStatementFactory mockStatementFactory{mockDatabase};
- MockSqliteReadStatement &selectLocationsForSymbolLocation = mockStatementFactory.selectLocationsForSymbolLocation;
- MockSqliteReadStatement &selectSourceUsagesForSymbolLocation = mockStatementFactory.selectSourceUsagesForSymbolLocation;
- MockSqliteReadStatement &selectSymbolsForKindAndStartsWith = mockStatementFactory.selectSymbolsForKindAndStartsWith;
- MockSqliteReadStatement &selectSymbolsForKindAndStartsWith2 = mockStatementFactory.selectSymbolsForKindAndStartsWith2;
- MockSqliteReadStatement &selectSymbolsForKindAndStartsWith3 = mockStatementFactory.selectSymbolsForKindAndStartsWith3;
- MockSqliteReadStatement &selectLocationOfSymbol = mockStatementFactory.selectLocationOfSymbol;
- MockSqliteReadStatement &selectSourceUsagesOrderedForSymbolLocation = mockStatementFactory
- .selectSourceUsagesOrderedForSymbolLocation;
- MockSqliteReadStatement &selectSourceUsagesByLocationKindForSymbolLocation
+ NiceMock<SqliteDatabaseMock> databaseMock;
+ MockStatementFactory mockStatementFactory{databaseMock};
+ ReadStatement<3> &selectLocationsForSymbolLocation = mockStatementFactory.selectLocationsForSymbolLocation;
+ ReadStatement<3> &selectSourceUsagesForSymbolLocation = mockStatementFactory
+ .selectSourceUsagesForSymbolLocation;
+ ReadStatement<3> &selectSymbolsForKindAndStartsWith = mockStatementFactory.selectSymbolsForKindAndStartsWith;
+ ReadStatement<3> &selectSymbolsForKindAndStartsWith2 = mockStatementFactory
+ .selectSymbolsForKindAndStartsWith2;
+ ReadStatement<3> &selectSymbolsForKindAndStartsWith3 = mockStatementFactory
+ .selectSymbolsForKindAndStartsWith3;
+ ReadStatement<3> &selectLocationOfSymbol = mockStatementFactory.selectLocationOfSymbol;
+ ReadStatement<3> &selectSourceUsagesOrderedForSymbolLocation = mockStatementFactory
+ .selectSourceUsagesOrderedForSymbolLocation;
+ ReadStatement<3> &selectSourceUsagesByLocationKindForSymbolLocation
= mockStatementFactory.selectSourceUsagesByLocationKindForSymbolLocation;
SourceLocations locations{{1, 1, 1}, {1, 2, 3}, {2, 1, 1}, {2, 3, 1}, {4, 1, 1}, {4, 1, 3}};
MockQuery query{mockStatementFactory};
diff --git a/tests/unit/unittest/symbolstorage-test.cpp b/tests/unit/unittest/symbolstorage-test.cpp
index c480296f12..a73d261fcc 100644
--- a/tests/unit/unittest/symbolstorage-test.cpp
+++ b/tests/unit/unittest/symbolstorage-test.cpp
@@ -26,7 +26,7 @@
#include "googletest.h"
#include "mockfilepathcaching.h"
-#include "mocksqlitedatabase.h"
+#include "sqlitedatabasemock.h"
#include <builddependenciesstorage.h>
#include <refactoringdatabaseinitializer.h>
@@ -52,23 +52,27 @@ using Sqlite::Database;
using Sqlite::Table;
using Utils::PathString;
-using Storage = ClangBackEnd::SymbolStorage<MockSqliteDatabase>;
+using Storage = ClangBackEnd::SymbolStorage<SqliteDatabaseMock>;
+using DatabaseType = Database;
+template<int ResultCount>
+using ReadStatement = typename SqliteDatabaseMock::template ReadStatement<ResultCount>;
+using WriteStatement = typename SqliteDatabaseMock::WriteStatement;
class SymbolStorage : public testing::Test
{
protected:
- NiceMock<MockSqliteDatabase> mockDatabase;
- Storage storage{mockDatabase};
- MockSqliteWriteStatement &insertSymbolsToNewSymbolsStatement = storage.insertSymbolsToNewSymbolsStatement;
- MockSqliteWriteStatement &insertLocationsToNewLocationsStatement = storage.insertLocationsToNewLocationsStatement;
- MockSqliteReadStatement &selectNewSourceIdsStatement = storage.selectNewSourceIdsStatement;
- MockSqliteWriteStatement &addNewSymbolsToSymbolsStatement = storage.addNewSymbolsToSymbolsStatement;
- MockSqliteWriteStatement &syncNewSymbolsFromSymbolsStatement = storage.syncNewSymbolsFromSymbolsStatement;
- MockSqliteWriteStatement &syncSymbolsIntoNewLocationsStatement = storage.syncSymbolsIntoNewLocationsStatement;
- MockSqliteWriteStatement &deleteAllLocationsFromUpdatedFilesStatement = storage.deleteAllLocationsFromUpdatedFilesStatement;
- MockSqliteWriteStatement &insertNewLocationsInLocationsStatement = storage.insertNewLocationsInLocationsStatement;
- MockSqliteWriteStatement &deleteNewSymbolsTableStatement = storage.deleteNewSymbolsTableStatement;
- MockSqliteWriteStatement &deleteNewLocationsTableStatement = storage.deleteNewLocationsTableStatement;
+ NiceMock<SqliteDatabaseMock> databaseMock;
+ Storage storage{databaseMock};
+ WriteStatement &insertSymbolsToNewSymbolsStatement = storage.insertSymbolsToNewSymbolsStatement;
+ WriteStatement &insertLocationsToNewLocationsStatement = storage.insertLocationsToNewLocationsStatement;
+ ReadStatement<1> &selectNewSourceIdsStatement = storage.selectNewSourceIdsStatement;
+ WriteStatement &addNewSymbolsToSymbolsStatement = storage.addNewSymbolsToSymbolsStatement;
+ WriteStatement &syncNewSymbolsFromSymbolsStatement = storage.syncNewSymbolsFromSymbolsStatement;
+ WriteStatement &syncSymbolsIntoNewLocationsStatement = storage.syncSymbolsIntoNewLocationsStatement;
+ WriteStatement &deleteAllLocationsFromUpdatedFilesStatement = storage.deleteAllLocationsFromUpdatedFilesStatement;
+ WriteStatement &insertNewLocationsInLocationsStatement = storage.insertNewLocationsInLocationsStatement;
+ WriteStatement &deleteNewSymbolsTableStatement = storage.deleteNewSymbolsTableStatement;
+ WriteStatement &deleteNewLocationsTableStatement = storage.deleteNewLocationsTableStatement;
SymbolEntries symbolEntries{{1, {"functionUSR", "function", SymbolKind::Function}},
{2, {"function2USR", "function2", SymbolKind::Function}}};
SourceLocationEntries sourceLocations{{1, 3, {42, 23}, SourceLocationKind::Declaration},
@@ -156,9 +160,9 @@ TEST_F(SymbolStorage, AddNewSymbolsTable)
{
InSequence s;
- EXPECT_CALL(mockDatabase, execute(Eq("CREATE TEMPORARY TABLE newSymbols(temporarySymbolId INTEGER PRIMARY KEY, symbolId INTEGER, usr TEXT, symbolName TEXT, symbolKind INTEGER)")));
- EXPECT_CALL(mockDatabase, execute(Eq("CREATE INDEX IF NOT EXISTS index_newSymbols_usr_symbolName ON newSymbols(usr, symbolName)")));
- EXPECT_CALL(mockDatabase, execute(Eq("CREATE INDEX IF NOT EXISTS index_newSymbols_symbolId ON newSymbols(symbolId)")));
+ EXPECT_CALL(databaseMock, execute(Eq("CREATE TEMPORARY TABLE newSymbols(temporarySymbolId INTEGER PRIMARY KEY, symbolId INTEGER, usr TEXT, symbolName TEXT, symbolKind INTEGER)")));
+ EXPECT_CALL(databaseMock, execute(Eq("CREATE INDEX IF NOT EXISTS index_newSymbols_usr_symbolName ON newSymbols(usr, symbolName)")));
+ EXPECT_CALL(databaseMock, execute(Eq("CREATE INDEX IF NOT EXISTS index_newSymbols_symbolId ON newSymbols(symbolId)")));
storage.createNewSymbolsTable();
}
@@ -167,8 +171,8 @@ TEST_F(SymbolStorage, AddNewLocationsTable)
{
InSequence s;
- EXPECT_CALL(mockDatabase, execute(Eq("CREATE TEMPORARY TABLE newLocations(temporarySymbolId INTEGER, symbolId INTEGER, sourceId INTEGER, line INTEGER, column INTEGER, locationKind INTEGER)")));
- EXPECT_CALL(mockDatabase, execute(Eq("CREATE UNIQUE INDEX IF NOT EXISTS index_newLocations_sourceId_line_column ON newLocations(sourceId, line, column)")));
+ EXPECT_CALL(databaseMock, execute(Eq("CREATE TEMPORARY TABLE newLocations(temporarySymbolId INTEGER, symbolId INTEGER, sourceId INTEGER, line INTEGER, column INTEGER, locationKind INTEGER)")));
+ EXPECT_CALL(databaseMock, execute(Eq("CREATE UNIQUE INDEX IF NOT EXISTS index_newLocations_sourceId_line_column ON newLocations(sourceId, line, column)")));
storage.createNewLocationsTable();
}
@@ -177,15 +181,15 @@ TEST_F(SymbolStorage, AddTablesInConstructor)
{
InSequence s;
- EXPECT_CALL(mockDatabase, immediateBegin());
- EXPECT_CALL(mockDatabase, execute(Eq("CREATE TEMPORARY TABLE newSymbols(temporarySymbolId INTEGER PRIMARY KEY, symbolId INTEGER, usr TEXT, symbolName TEXT, symbolKind INTEGER)")));
- EXPECT_CALL(mockDatabase, execute(Eq("CREATE INDEX IF NOT EXISTS index_newSymbols_usr_symbolName ON newSymbols(usr, symbolName)")));
- EXPECT_CALL(mockDatabase, execute(Eq("CREATE INDEX IF NOT EXISTS index_newSymbols_symbolId ON newSymbols(symbolId)")));
- EXPECT_CALL(mockDatabase, execute(Eq("CREATE TEMPORARY TABLE newLocations(temporarySymbolId INTEGER, symbolId INTEGER, sourceId INTEGER, line INTEGER, column INTEGER, locationKind INTEGER)")));
- EXPECT_CALL(mockDatabase, execute(Eq("CREATE UNIQUE INDEX IF NOT EXISTS index_newLocations_sourceId_line_column ON newLocations(sourceId, line, column)")));
- EXPECT_CALL(mockDatabase, commit());
+ EXPECT_CALL(databaseMock, immediateBegin());
+ EXPECT_CALL(databaseMock, execute(Eq("CREATE TEMPORARY TABLE newSymbols(temporarySymbolId INTEGER PRIMARY KEY, symbolId INTEGER, usr TEXT, symbolName TEXT, symbolKind INTEGER)")));
+ EXPECT_CALL(databaseMock, execute(Eq("CREATE INDEX IF NOT EXISTS index_newSymbols_usr_symbolName ON newSymbols(usr, symbolName)")));
+ EXPECT_CALL(databaseMock, execute(Eq("CREATE INDEX IF NOT EXISTS index_newSymbols_symbolId ON newSymbols(symbolId)")));
+ EXPECT_CALL(databaseMock, execute(Eq("CREATE TEMPORARY TABLE newLocations(temporarySymbolId INTEGER, symbolId INTEGER, sourceId INTEGER, line INTEGER, column INTEGER, locationKind INTEGER)")));
+ EXPECT_CALL(databaseMock, execute(Eq("CREATE UNIQUE INDEX IF NOT EXISTS index_newLocations_sourceId_line_column ON newLocations(sourceId, line, column)")));
+ EXPECT_CALL(databaseMock, commit());
- Storage storage{mockDatabase};
+ Storage storage{databaseMock};
}
} // namespace
diff --git a/tests/unit/unittest/unittest.pro b/tests/unit/unittest/unittest.pro
index 2d8d51b7ba..2a1a2d8ec5 100644
--- a/tests/unit/unittest/unittest.pro
+++ b/tests/unit/unittest/unittest.pro
@@ -97,7 +97,6 @@ SOURCES += \
unittests-main.cpp \
utf8-test.cpp \
symbolstorage-test.cpp \
- mocksqlitereadstatement.cpp \
symbolquery-test.cpp \
sqliteindex-test.cpp \
sqlitetransaction-test.cpp \
@@ -191,6 +190,8 @@ SOURCES += \
unsavedfiles-test.cpp \
unsavedfile-test.cpp \
utf8positionfromlinecolumn-test.cpp \
+ clangreferencescollector-test.cpp \
+ clangdocumentsuspenderresumer-test.cpp \
readexporteddiagnostics-test.cpp
!isEmpty(QTC_UNITTEST_BUILD_CPP_PARSER):SOURCE += \
@@ -203,11 +204,9 @@ SOURCES += \
!isEmpty(LIBTOOLING_LIBS) {
SOURCES += \
gtest-llvm-printing.cpp \
- clangdocumentsuspenderresumer-test.cpp \
clangquerygatherer-test.cpp \
clangqueryprojectfindfilter-test.cpp \
clangquery-test.cpp \
- clangreferencescollector-test.cpp \
pchcreator-test.cpp \
refactoringclientserverinprocess-test.cpp \
refactoringclient-test.cpp \
@@ -275,9 +274,6 @@ HEADERS += \
testenvironment.h \
mocksymbolscollector.h \
mocksymbolstorage.h \
- mocksqlitewritestatement.h \
- mocksqlitedatabase.h \
- mocksqlitereadstatement.h \
google-using-declarations.h \
mocksymbolindexing.h \
sqliteteststatement.h \
diff --git a/tests/unit/unittest/unittest.qbs b/tests/unit/unittest/unittest.qbs
index 61ad2fb529..cb3b8cda31 100644
--- a/tests/unit/unittest/unittest.qbs
+++ b/tests/unit/unittest/unittest.qbs
@@ -263,12 +263,8 @@ Project {
"mocksearch.h",
"mocksearchhandle.h",
"mocksearchresult.h",
- "mocksqlitedatabase.h",
- "mocksqlitereadstatement.cpp",
- "mocksqlitereadstatement.h",
"mocksqlitestatement.h",
"mocksqlitetransactionbackend.h",
- "mocksqlitewritestatement.h",
"mocksymbolindexertaskqueue.h",
"mocksymbolindexing.h",
"mocksymbolquery.h",