forked from qt-creator/qt-creator
ClangPchManager: Fix transactions in precompiled header storage
Change-Id: Ia0333ef7110c97a42d73c70c33157849323fb34d Reviewed-by: Tim Jenssen <tim.jenssen@qt.io>
This commit is contained in:
@@ -133,10 +133,11 @@ public:
|
|||||||
auto value = fetchSystemPrecompiledHeaderPathStatement.template value<FilePath>(
|
auto value = fetchSystemPrecompiledHeaderPathStatement.template value<FilePath>(
|
||||||
projectPartId.projectPathId);
|
projectPartId.projectPathId);
|
||||||
|
|
||||||
|
transaction.commit();
|
||||||
|
|
||||||
if (value)
|
if (value)
|
||||||
return *value;
|
return *value;
|
||||||
|
|
||||||
transaction.commit();
|
|
||||||
} catch (const Sqlite::StatementIsBusy) {
|
} catch (const Sqlite::StatementIsBusy) {
|
||||||
return fetchSystemPrecompiledHeaderPath(projectPartId);
|
return fetchSystemPrecompiledHeaderPath(projectPartId);
|
||||||
}
|
}
|
||||||
@@ -152,10 +153,11 @@ public:
|
|||||||
auto value = fetchPrecompiledHeaderStatement.template value<FilePath>(
|
auto value = fetchPrecompiledHeaderStatement.template value<FilePath>(
|
||||||
projectPartId.projectPathId);
|
projectPartId.projectPathId);
|
||||||
|
|
||||||
|
transaction.commit();
|
||||||
|
|
||||||
if (value)
|
if (value)
|
||||||
return *value;
|
return *value;
|
||||||
|
|
||||||
transaction.commit();
|
|
||||||
} catch (const Sqlite::StatementIsBusy) {
|
} catch (const Sqlite::StatementIsBusy) {
|
||||||
return fetchPrecompiledHeader(projectPartId);
|
return fetchPrecompiledHeader(projectPartId);
|
||||||
}
|
}
|
||||||
@@ -171,10 +173,11 @@ public:
|
|||||||
auto value = fetchPrecompiledHeadersStatement.template value<PchPaths, 2>(
|
auto value = fetchPrecompiledHeadersStatement.template value<PchPaths, 2>(
|
||||||
projectPartId.projectPathId);
|
projectPartId.projectPathId);
|
||||||
|
|
||||||
|
transaction.commit();
|
||||||
|
|
||||||
if (value)
|
if (value)
|
||||||
return *value;
|
return *value;
|
||||||
|
|
||||||
transaction.commit();
|
|
||||||
} catch (const Sqlite::StatementIsBusy) {
|
} catch (const Sqlite::StatementIsBusy) {
|
||||||
return fetchPrecompiledHeaders(projectPartId);
|
return fetchPrecompiledHeaders(projectPartId);
|
||||||
}
|
}
|
||||||
|
@@ -224,6 +224,18 @@ TEST_F(PrecompiledHeaderStorage, FetchSystemPrecompiledHeaderCalls)
|
|||||||
storage.fetchSystemPrecompiledHeaderPath(1);
|
storage.fetchSystemPrecompiledHeaderPath(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
TEST_F(PrecompiledHeaderStorage, FetchSystemPrecompiledHeaderCallsWithReturnValue)
|
||||||
|
{
|
||||||
|
InSequence s;
|
||||||
|
|
||||||
|
EXPECT_CALL(database, deferredBegin());
|
||||||
|
EXPECT_CALL(fetchSystemPrecompiledHeaderPathStatement, valueReturnFilePath(TypedEq<int>(1)))
|
||||||
|
.WillOnce(Return(ClangBackEnd::FilePath{}));
|
||||||
|
EXPECT_CALL(database, commit());
|
||||||
|
|
||||||
|
storage.fetchSystemPrecompiledHeaderPath(1);
|
||||||
|
}
|
||||||
|
|
||||||
TEST_F(PrecompiledHeaderStorage, FetchSystemPrecompiledHeader)
|
TEST_F(PrecompiledHeaderStorage, FetchSystemPrecompiledHeader)
|
||||||
{
|
{
|
||||||
EXPECT_CALL(fetchSystemPrecompiledHeaderPathStatement, valueReturnFilePath(TypedEq<int>(1)))
|
EXPECT_CALL(fetchSystemPrecompiledHeaderPathStatement, valueReturnFilePath(TypedEq<int>(1)))
|
||||||
@@ -263,6 +275,16 @@ TEST_F(PrecompiledHeaderStorage, FetchPrecompiledHeaderCallsValueInStatement)
|
|||||||
storage.fetchPrecompiledHeader(25);
|
storage.fetchPrecompiledHeader(25);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
TEST_F(PrecompiledHeaderStorage, FetchPrecompiledHeaderCallsWithValue)
|
||||||
|
{
|
||||||
|
EXPECT_CALL(database, deferredBegin());
|
||||||
|
EXPECT_CALL(fetchPrecompiledHeaderStatement, valueReturnFilePath(Eq(25)))
|
||||||
|
.WillOnce(Return(ClangBackEnd::FilePath{}));
|
||||||
|
EXPECT_CALL(database, commit());
|
||||||
|
|
||||||
|
storage.fetchPrecompiledHeader(25);
|
||||||
|
}
|
||||||
|
|
||||||
TEST_F(PrecompiledHeaderStorage, FetchPrecompiledHeaderIsBusy)
|
TEST_F(PrecompiledHeaderStorage, FetchPrecompiledHeaderIsBusy)
|
||||||
{
|
{
|
||||||
InSequence s;
|
InSequence s;
|
||||||
@@ -305,6 +327,16 @@ TEST_F(PrecompiledHeaderStorage, FetchPrecompiledHeaderCalls)
|
|||||||
storage.fetchPrecompiledHeaders(25);
|
storage.fetchPrecompiledHeaders(25);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
TEST_F(PrecompiledHeaderStorage, FetchPrecompiledHeaderCallsWithReturnValue)
|
||||||
|
{
|
||||||
|
EXPECT_CALL(database, deferredBegin());
|
||||||
|
EXPECT_CALL(fetchPrecompiledHeadersStatement, valueReturnPchPaths(Eq(25)))
|
||||||
|
.WillOnce(Return(ClangBackEnd::PchPaths{}));
|
||||||
|
EXPECT_CALL(database, commit());
|
||||||
|
|
||||||
|
storage.fetchPrecompiledHeaders(25);
|
||||||
|
}
|
||||||
|
|
||||||
TEST_F(PrecompiledHeaderStorage, FetchPrecompiledHeadersIsBusy)
|
TEST_F(PrecompiledHeaderStorage, FetchPrecompiledHeadersIsBusy)
|
||||||
{
|
{
|
||||||
InSequence s;
|
InSequence s;
|
||||||
@@ -373,6 +405,18 @@ TEST_F(PrecompiledHeaderStorage, FetchTimeStampsCalls)
|
|||||||
storage.fetchTimeStamps(23);
|
storage.fetchTimeStamps(23);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
TEST_F(PrecompiledHeaderStorage, FetchTimeStampsCallsWithReturnValue)
|
||||||
|
{
|
||||||
|
InSequence s;
|
||||||
|
|
||||||
|
EXPECT_CALL(database, deferredBegin());
|
||||||
|
EXPECT_CALL(fetchTimeStampsStatement, valuesReturnPrecompiledHeaderTimeStamps(Eq(23)))
|
||||||
|
.WillOnce(Return(ClangBackEnd::PrecompiledHeaderTimeStamps{}));
|
||||||
|
EXPECT_CALL(database, commit());
|
||||||
|
|
||||||
|
storage.fetchTimeStamps(23);
|
||||||
|
}
|
||||||
|
|
||||||
TEST_F(PrecompiledHeaderStorage, FetchTimeStampsBusy)
|
TEST_F(PrecompiledHeaderStorage, FetchTimeStampsBusy)
|
||||||
{
|
{
|
||||||
InSequence s;
|
InSequence s;
|
||||||
|
Reference in New Issue
Block a user