Sqlite: Add exception if statement is called outside of a lock

Sometimes it is really hard to trace if sqlite statement is called
outside of a database connection lock. So we know throw an exception
in the unit test. So we get failing tests.

Change-Id: I71485b9473075751a2fb771ce7e2954e28d8413e
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
Reviewed-by: Thomas Hartmann <thomas.hartmann@qt.io>
This commit is contained in:
Marco Bubke
2021-04-29 18:02:31 +02:00
parent 943c31a5b4
commit 5fda083436
14 changed files with 179 additions and 172 deletions

View File

@@ -119,16 +119,17 @@ MATCHER_P2(HasTag,
return t.name == name && t.tag == tag;
}
class Sessions : public testing::Test
class SqliteSessions : public testing::Test
{
protected:
Sessions() { sessions.setAttachedTables({"data", "tags"}); }
SqliteSessions() { sessions.setAttachedTables({"data", "tags"}); }
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};
std::lock_guard<Sqlite::Database> lock{database};
DatabaseExecute createTable{"CREATE TABLE data(id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT "
"UNIQUE, number NUMERIC, value NUMERIC)",
database};
@@ -156,12 +157,12 @@ protected:
Sqlite::ReadStatement<1> selectChangeSets{"SELECT changeset FROM testsessions", database};
};
TEST_F(Sessions, DontThrowForCommittingWithoutSessionStart)
TEST_F(SqliteSessions, DontThrowForCommittingWithoutSessionStart)
{
ASSERT_NO_THROW(sessions.commit());
}
TEST_F(Sessions, CreateEmptySession)
TEST_F(SqliteSessions, CreateEmptySession)
{
sessions.create();
sessions.commit();
@@ -169,7 +170,7 @@ TEST_F(Sessions, CreateEmptySession)
ASSERT_THAT(sessions.changeSets(), IsEmpty());
}
TEST_F(Sessions, CreateSessionWithInsert)
TEST_F(SqliteSessions, CreateSessionWithInsert)
{
sessions.create();
insertData.write("foo", 22, 3.14);
@@ -178,7 +179,7 @@ TEST_F(Sessions, CreateSessionWithInsert)
ASSERT_THAT(sessions.changeSets(), SizeIs(1));
}
TEST_F(Sessions, CreateSessionWithUpdate)
TEST_F(SqliteSessions, CreateSessionWithUpdate)
{
insertData.write("foo", 22, 3.14);
@@ -189,7 +190,7 @@ TEST_F(Sessions, CreateSessionWithUpdate)
ASSERT_THAT(sessions.changeSets(), SizeIs(1));
}
TEST_F(Sessions, CreateSessionWithDelete)
TEST_F(SqliteSessions, CreateSessionWithDelete)
{
insertData.write("foo", 22, 3.14);
@@ -200,7 +201,7 @@ TEST_F(Sessions, CreateSessionWithDelete)
ASSERT_THAT(sessions.changeSets(), SizeIs(1));
}
TEST_F(Sessions, CreateSessionWithInsertAndUpdate)
TEST_F(SqliteSessions, CreateSessionWithInsertAndUpdate)
{
sessions.create();
insertData.write("foo", 22, 3.14);
@@ -213,7 +214,7 @@ TEST_F(Sessions, CreateSessionWithInsertAndUpdate)
ASSERT_THAT(sessions.changeSets(), SizeIs(2));
}
TEST_F(Sessions, CreateSession)
TEST_F(SqliteSessions, CreateSession)
{
sessions.create();
insertData.write("foo", 22, 3.14);
@@ -223,7 +224,7 @@ TEST_F(Sessions, CreateSession)
ASSERT_THAT(sessions.changeSets(), SizeIs(1));
}
TEST_F(Sessions, RevertSession)
TEST_F(SqliteSessions, RevertSession)
{
sessions.create();
insertData.write("foo", 22, 3.14);
@@ -234,7 +235,7 @@ TEST_F(Sessions, RevertSession)
ASSERT_THAT(fetchData(), IsEmpty());
}
TEST_F(Sessions, RevertSessionToBase)
TEST_F(SqliteSessions, RevertSessionToBase)
{
insertData.write("bar", "foo", 99);
sessions.create();
@@ -246,7 +247,7 @@ TEST_F(Sessions, RevertSessionToBase)
ASSERT_THAT(fetchData(), ElementsAre(HasData("bar", "foo", 99)));
}
TEST_F(Sessions, RevertMultipleSession)
TEST_F(SqliteSessions, RevertMultipleSession)
{
sessions.create();
insertData.write("foo", 22, 3.14);
@@ -260,7 +261,7 @@ TEST_F(Sessions, RevertMultipleSession)
ASSERT_THAT(fetchData(), IsEmpty());
}
TEST_F(Sessions, ApplySession)
TEST_F(SqliteSessions, ApplySession)
{
sessions.create();
insertData.write("foo", 22, 3.14);
@@ -271,7 +272,7 @@ TEST_F(Sessions, ApplySession)
ASSERT_THAT(fetchData(), ElementsAre(HasData("foo", 22, 3.14)));
}
TEST_F(Sessions, ApplySessionAfterAddingNewEntries)
TEST_F(SqliteSessions, ApplySessionAfterAddingNewEntries)
{
sessions.create();
insertData.write("foo", 22, 3.14);
@@ -284,7 +285,7 @@ TEST_F(Sessions, ApplySessionAfterAddingNewEntries)
UnorderedElementsAre(HasData("foo", 22, 3.14), HasData("bar", "foo", 99)));
}
TEST_F(Sessions, ApplyOverridesEntriesWithUniqueConstraint)
TEST_F(SqliteSessions, ApplyOverridesEntriesWithUniqueConstraint)
{
sessions.create();
insertData.write("foo", 22, 3.14);
@@ -296,7 +297,7 @@ TEST_F(Sessions, ApplyOverridesEntriesWithUniqueConstraint)
ASSERT_THAT(fetchData(), ElementsAre(HasData("foo", 22, 3.14)));
}
TEST_F(Sessions, ApplyDoesNotOverrideDeletedEntries)
TEST_F(SqliteSessions, ApplyDoesNotOverrideDeletedEntries)
{
insertData.write("foo", "bar", 3.14);
sessions.create();
@@ -309,7 +310,7 @@ TEST_F(Sessions, ApplyDoesNotOverrideDeletedEntries)
ASSERT_THAT(fetchData(), IsEmpty());
}
TEST_F(Sessions, ApplyDoesOnlyOverwriteUpdatedValues)
TEST_F(SqliteSessions, ApplyDoesOnlyOverwriteUpdatedValues)
{
insertData.write("foo", "bar", 3.14);
sessions.create();
@@ -322,7 +323,7 @@ TEST_F(Sessions, ApplyDoesOnlyOverwriteUpdatedValues)
ASSERT_THAT(fetchData(), ElementsAre(HasData("foo", "poo", 1234)));
}
TEST_F(Sessions, ApplyDoesDoesNotOverrideForeignKeyIfReferenceIsDeleted)
TEST_F(SqliteSessions, ApplyDoesDoesNotOverrideForeignKeyIfReferenceIsDeleted)
{
insertData.write("foo2", "bar", 3.14);
insertData.write("foo", "bar", 3.14);
@@ -337,7 +338,7 @@ TEST_F(Sessions, ApplyDoesDoesNotOverrideForeignKeyIfReferenceIsDeleted)
ASSERT_THAT(fetchTags(), ElementsAre(HasTag("foo2", 4321)));
}
TEST_F(Sessions, ApplyDoesDoesNotOverrideIfConstraintsIsApplied)
TEST_F(SqliteSessions, ApplyDoesDoesNotOverrideIfConstraintsIsApplied)
{
insertData.write("foo", "bar", 3.14);
sessions.create();
@@ -351,8 +352,9 @@ TEST_F(Sessions, ApplyDoesDoesNotOverrideIfConstraintsIsApplied)
ASSERT_THAT(fetchTags(), IsEmpty());
}
TEST_F(Sessions, ApplyDoesDoesNotOverrideForeignKeyIfReferenceIsDeletedDeferred)
TEST_F(SqliteSessions, ApplyDoesDoesNotOverrideForeignKeyIfReferenceIsDeletedDeferred)
{
database.unlock();
Sqlite::DeferredTransaction transaction{database};
insertData.write("foo2", "bar", 3.14);
insertData.write("foo", "bar", 3.14);
@@ -365,10 +367,11 @@ TEST_F(Sessions, ApplyDoesDoesNotOverrideForeignKeyIfReferenceIsDeletedDeferred)
sessions.apply();
transaction.commit();
database.lock();
ASSERT_THAT(fetchTags(), ElementsAre(HasTag("foo2", 4321)));
}
TEST_F(Sessions, EndSessionOnRollback)
TEST_F(SqliteSessions, EndSessionOnRollback)
{
insertData.write("foo", "bar", 3.14);
sessions.create();
@@ -385,7 +388,7 @@ TEST_F(Sessions, EndSessionOnRollback)
ASSERT_THAT(fetchData(), ElementsAre(HasData("foo", 333, 666)));
}
TEST_F(Sessions, EndSessionOnCommit)
TEST_F(SqliteSessions, EndSessionOnCommit)
{
insertData.write("foo", "bar", 3.14);
sessions.create();
@@ -399,7 +402,7 @@ TEST_F(Sessions, EndSessionOnCommit)
ASSERT_THAT(fetchData(), ElementsAre(HasData("foo", "bar", 99)));
}
TEST_F(Sessions, DeleteSessions)
TEST_F(SqliteSessions, DeleteSessions)
{
insertData.write("foo", "bar", 3.14);
sessions.create();
@@ -413,7 +416,7 @@ TEST_F(Sessions, DeleteSessions)
ASSERT_THAT(fetchData(), ElementsAre(HasData("foo", "bar", 3.14)));
}
TEST_F(Sessions, DeleteAllSessions)
TEST_F(SqliteSessions, DeleteAllSessions)
{
insertData.write("foo", "bar", 3.14);
sessions.create();
@@ -427,7 +430,7 @@ TEST_F(Sessions, DeleteAllSessions)
ASSERT_THAT(fetchData(), ElementsAre(HasData("foo", "bar", 3.14)));
}
TEST_F(Sessions, ApplyAndUpdateSessions)
TEST_F(SqliteSessions, ApplyAndUpdateSessions)
{
insertData.write("foo", "bar", 3.14);
sessions.create();
@@ -442,7 +445,7 @@ TEST_F(Sessions, ApplyAndUpdateSessions)
ASSERT_THAT(fetchData(), ElementsAre(HasData("foo", "bar", 22)));
}
TEST_F(Sessions, ApplyAndUpdateSessionsHasOnlyOneChangeSet)
TEST_F(SqliteSessions, ApplyAndUpdateSessionsHasOnlyOneChangeSet)
{
insertData.write("foo", "bar", 3.14);
sessions.create();
@@ -455,7 +458,7 @@ TEST_F(Sessions, ApplyAndUpdateSessionsHasOnlyOneChangeSet)
ASSERT_THAT(sessions.changeSets(), SizeIs(1));
}
TEST_F(Sessions, ForEmptySessionBeginEqualsEnd)
TEST_F(SqliteSessions, ForEmptySessionBeginEqualsEnd)
{
auto changeSets = sessions.changeSets();
@@ -464,7 +467,7 @@ TEST_F(Sessions, ForEmptySessionBeginEqualsEnd)
ASSERT_THAT(begin, Eq(changeSets.end()));
}
TEST_F(Sessions, IteratorBeginUnequalsEndIfChangeSetHasContent)
TEST_F(SqliteSessions, IteratorBeginUnequalsEndIfChangeSetHasContent)
{
sessions.create();
insertData.write("foo", "bar", 3.14);
@@ -477,7 +480,7 @@ TEST_F(Sessions, IteratorBeginUnequalsEndIfChangeSetHasContent)
ASSERT_THAT(begin, Ne(changeSet.end()));
}
TEST_F(Sessions, NextIteratorUnequalsBeginIfChangeSetHasContent)
TEST_F(SqliteSessions, NextIteratorUnequalsBeginIfChangeSetHasContent)
{
sessions.create();
insertData.write("foo", "bar", 3.14);
@@ -490,7 +493,7 @@ TEST_F(Sessions, NextIteratorUnequalsBeginIfChangeSetHasContent)
ASSERT_NE(next, changeSet.begin());
}
TEST_F(Sessions, NextIteratorEqualsEndIfChangeSetHasContent)
TEST_F(SqliteSessions, NextIteratorEqualsEndIfChangeSetHasContent)
{
sessions.create();
insertData.write("foo", "bar", 3.14);
@@ -503,7 +506,7 @@ TEST_F(Sessions, NextIteratorEqualsEndIfChangeSetHasContent)
ASSERT_THAT(next, Eq(changeSet.end()));
}
TEST_F(Sessions, NextIteratorNotUnqualsEndIfChangeSetHasContent)
TEST_F(SqliteSessions, NextIteratorNotUnqualsEndIfChangeSetHasContent)
{
sessions.create();
insertData.write("foo", "bar", 3.14);
@@ -516,7 +519,7 @@ TEST_F(Sessions, NextIteratorNotUnqualsEndIfChangeSetHasContent)
ASSERT_THAT(next, Not(Ne(changeSet.end())));
}
TEST_F(Sessions, BeginIteratorHasInsertOperation)
TEST_F(SqliteSessions, BeginIteratorHasInsertOperation)
{
sessions.create();
insertData.write("foo", "bar", 3.14);
@@ -530,7 +533,7 @@ TEST_F(Sessions, BeginIteratorHasInsertOperation)
ASSERT_THAT(tuple.operation, Eq(Operation::Insert));
}
TEST_F(Sessions, BeginIteratorHasUpdateOperation)
TEST_F(SqliteSessions, BeginIteratorHasUpdateOperation)
{
insertData.write("foo", "bar", 3.14);
sessions.create();
@@ -545,7 +548,7 @@ TEST_F(Sessions, BeginIteratorHasUpdateOperation)
ASSERT_THAT(tuple.operation, Eq(Operation::Update));
}
TEST_F(Sessions, BeginIteratorHasDeleteOperation)
TEST_F(SqliteSessions, BeginIteratorHasDeleteOperation)
{
insertData.write("foo", "bar", 3.14);
sessions.create();
@@ -560,7 +563,7 @@ TEST_F(Sessions, BeginIteratorHasDeleteOperation)
ASSERT_THAT(tuple.operation, Eq(Operation::Delete));
}
TEST_F(Sessions, BeginIteratorHasDataTableName)
TEST_F(SqliteSessions, BeginIteratorHasDataTableName)
{
sessions.create();
insertData.write("foo", "bar", 3.14);
@@ -574,7 +577,7 @@ TEST_F(Sessions, BeginIteratorHasDataTableName)
ASSERT_THAT(tuple.table, Eq("data"));
}
TEST_F(Sessions, ConvertAllValueTypesInChangeSet)
TEST_F(SqliteSessions, ConvertAllValueTypesInChangeSet)
{
sessions.create();
insertData.write("foo", "bar", 3.14);
@@ -593,7 +596,7 @@ TEST_F(Sessions, ConvertAllValueTypesInChangeSet)
HasValues(3.14, nullptr)));
}
TEST_F(Sessions, InsertOneValueChangeSet)
TEST_F(SqliteSessions, InsertOneValueChangeSet)
{
sessions.create();
insertOneDatum.write("foo");
@@ -612,7 +615,7 @@ TEST_F(Sessions, InsertOneValueChangeSet)
HasValues("foo", nullptr)));
}
TEST_F(Sessions, UpdateOneValueChangeSet)
TEST_F(SqliteSessions, UpdateOneValueChangeSet)
{
insertData.write("foo", "bar", 3.14);
sessions.create();
@@ -632,7 +635,7 @@ TEST_F(Sessions, UpdateOneValueChangeSet)
HasValues(99, 3.14)));
}
TEST_F(Sessions, DeleteRowChangeSet)
TEST_F(SqliteSessions, DeleteRowChangeSet)
{
insertData.write("foo", "bar", 3.14);
sessions.create();
@@ -653,7 +656,7 @@ TEST_F(Sessions, DeleteRowChangeSet)
HasValues(nullptr, 3.14)));
}
TEST_F(Sessions, EmptyChangeSet)
TEST_F(SqliteSessions, EmptyChangeSet)
{
sessions.create();
sessions.commit();
@@ -663,7 +666,7 @@ TEST_F(Sessions, EmptyChangeSet)
ASSERT_THAT(changeSets, ElementsAre());
}
TEST_F(Sessions, AccessInsertOneValueChangeSet)
TEST_F(SqliteSessions, AccessInsertOneValueChangeSet)
{
sessions.create();
insertOneDatum.write("foo");
@@ -678,7 +681,7 @@ TEST_F(Sessions, AccessInsertOneValueChangeSet)
ASSERT_THAT(value, HasValues("foo", nullptr));
}
TEST_F(Sessions, AccessUpdateOneValueChangeSet)
TEST_F(SqliteSessions, AccessUpdateOneValueChangeSet)
{
insertData.write("foo", "bar", 3.14);
sessions.create();
@@ -694,7 +697,7 @@ TEST_F(Sessions, AccessUpdateOneValueChangeSet)
ASSERT_THAT(value, HasValues(99, 3.14));
}
TEST_F(Sessions, AccessDeleteRowChangeSet)
TEST_F(SqliteSessions, AccessDeleteRowChangeSet)
{
insertData.write("foo", "bar", 3.14);
sessions.create();