add: database transactions

This commit is contained in:
Tobias Reisinger 2020-08-15 12:13:03 +02:00
parent 7fa462ef1d
commit 7c6eed8dc2
8 changed files with 119 additions and 30 deletions
src/models

View file

@ -126,6 +126,8 @@ relay_db_select(sqlite3_stmt *stmt)
int
relay_save(relay_t *relay)
{
int opened_transaction = database_transaction_begin();
sqlite3_stmt *stmt;
if(relay->id)
{
@ -148,6 +150,11 @@ relay_save(relay_t *relay)
{
LOGGER_ERR("error updating data: %s\n", sqlite3_errmsg(global_database));
}
if(opened_transaction)
{
database_transaction_rollback();
}
}
else
{
@ -155,16 +162,20 @@ relay_save(relay_t *relay)
{
relay->id = sqlite3_last_insert_rowid(global_database);
}
}
LOGGER_DEBUG("cleaning relay_schedule junction\n");
junction_relay_schedule_remove_for_relay(relay->id);
LOGGER_DEBUG("cleaning relay_schedule junction\n");
junction_relay_schedule_remove_for_relay(relay->id);
LOGGER_DEBUG("rebuilding relay_schedule junction\n");
for(int i = 0; i < 7; ++i)
{
junction_relay_schedule_insert(i, relay->id, relay->schedules[i]->id);
}
LOGGER_DEBUG("rebuilding relay_schedule junction\n");
for(int i = 0; i < 7; ++i)
{
junction_relay_schedule_insert(i, relay->id, relay->schedules[i]->id);
if(opened_transaction)
{
database_transaction_commit();
}
}
cache_invalidate_relay(relay->id);