ClangPchManager: Fix transactions in precompiled header storage

Change-Id: Ia0333ef7110c97a42d73c70c33157849323fb34d
Reviewed-by: Tim Jenssen <tim.jenssen@qt.io>
This commit is contained in:
Marco Bubke
2019-07-25 15:30:46 +02:00
parent 578b70e998
commit d086bbdc9a
2 changed files with 50 additions and 3 deletions

View File

@@ -133,10 +133,11 @@ public:
auto value = fetchSystemPrecompiledHeaderPathStatement.template value<FilePath>(
projectPartId.projectPathId);
transaction.commit();
if (value)
return *value;
transaction.commit();
} catch (const Sqlite::StatementIsBusy) {
return fetchSystemPrecompiledHeaderPath(projectPartId);
}
@@ -152,10 +153,11 @@ public:
auto value = fetchPrecompiledHeaderStatement.template value<FilePath>(
projectPartId.projectPathId);
transaction.commit();
if (value)
return *value;
transaction.commit();
} catch (const Sqlite::StatementIsBusy) {
return fetchPrecompiledHeader(projectPartId);
}
@@ -171,10 +173,11 @@ public:
auto value = fetchPrecompiledHeadersStatement.template value<PchPaths, 2>(
projectPartId.projectPathId);
transaction.commit();
if (value)
return *value;
transaction.commit();
} catch (const Sqlite::StatementIsBusy) {
return fetchPrecompiledHeaders(projectPartId);
}

View File

@@ -224,6 +224,18 @@ TEST_F(PrecompiledHeaderStorage, FetchSystemPrecompiledHeaderCalls)
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)
{
EXPECT_CALL(fetchSystemPrecompiledHeaderPathStatement, valueReturnFilePath(TypedEq<int>(1)))
@@ -263,6 +275,16 @@ TEST_F(PrecompiledHeaderStorage, FetchPrecompiledHeaderCallsValueInStatement)
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)
{
InSequence s;
@@ -305,6 +327,16 @@ TEST_F(PrecompiledHeaderStorage, FetchPrecompiledHeaderCalls)
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)
{
InSequence s;
@@ -373,6 +405,18 @@ TEST_F(PrecompiledHeaderStorage, FetchTimeStampsCalls)
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)
{
InSequence s;