diff --git a/src/tools/clangpchmanagerbackend/source/precompiledheaderstorage.h b/src/tools/clangpchmanagerbackend/source/precompiledheaderstorage.h index 30b4c0e1df1..a65ab803df0 100644 --- a/src/tools/clangpchmanagerbackend/source/precompiledheaderstorage.h +++ b/src/tools/clangpchmanagerbackend/source/precompiledheaderstorage.h @@ -133,10 +133,11 @@ public: auto value = fetchSystemPrecompiledHeaderPathStatement.template value( 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( 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( projectPartId.projectPathId); + transaction.commit(); + if (value) return *value; - transaction.commit(); } catch (const Sqlite::StatementIsBusy) { return fetchPrecompiledHeaders(projectPartId); } diff --git a/tests/unit/unittest/precompiledheaderstorage-test.cpp b/tests/unit/unittest/precompiledheaderstorage-test.cpp index d2b14d290c2..9153e92afac 100644 --- a/tests/unit/unittest/precompiledheaderstorage-test.cpp +++ b/tests/unit/unittest/precompiledheaderstorage-test.cpp @@ -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(1))) + .WillOnce(Return(ClangBackEnd::FilePath{})); + EXPECT_CALL(database, commit()); + + storage.fetchSystemPrecompiledHeaderPath(1); +} + TEST_F(PrecompiledHeaderStorage, FetchSystemPrecompiledHeader) { EXPECT_CALL(fetchSystemPrecompiledHeaderPathStatement, valueReturnFilePath(TypedEq(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;