-
-
Notifications
You must be signed in to change notification settings - Fork 339
storage_t::transaction
Yevgeniy Zakharov edited this page Mar 9, 2017
·
4 revisions
bool transaction(std::function<bool()> f);
Begins transaction, executes lambda f
passed as first argument and commits or rollbacks transaction depending on lambda return result.
(1) f
Function to be executed within a transaction. Lambda expression or function pointer can be passed. Function passed must take zero arguments and must return bool
value which indicates whether storage should COMMIT
or ROLLBACK
.
The result received from f
. It is just passed outside if you need to know whether transaction committed. Just ignore it if you don't need it.
auto storage = make_storage("db.sqlite",
make_table("users",
make_column("id",
&User::id,
autoincrement(),
primary_key()),
make_column("first_name",
&User::firstName),
make_column("last_name",
&User::lastName),
make_column("birth_date",
&User::birthDate),
make_column("image_url",
&User::imageUrl),
make_column("type_id",
&User::typeId)),
make_table("user_types",
make_column("id",
&UserType::id,
autoincrement(),
primary_key()),
make_column("name",
&UserType::name,
default_value("name_placeholder"))));
storage.sync_schema();
storage.transaction([&] () mutable {
storage.remove_all<User>(where(lesser_than(&User::id, 100)));
auto usersRemoved = storage.changes();
cout << "usersRemoved = " << usersRemoved << endl;
return true;
});
As you can see here we call [changes|storage_t::changes] member function to get removed rows amount. Without a transaction changed
returns 0 (in case not-RAM storage).