102 lines
2.7 KiB
C
102 lines
2.7 KiB
C
#include <stdlib.h>
|
|
#include <stdint.h>
|
|
#include <stddef.h>
|
|
#include <string.h>
|
|
|
|
#include <models/junction_relay_schedule.h>
|
|
#include <logger.h>
|
|
#include <macros.h>
|
|
#include <database.h>
|
|
|
|
int
|
|
junction_relay_schedule_insert(uint8_t weekday, int relay_id, int schedule_id)
|
|
{
|
|
int rc;
|
|
sqlite3_stmt *stmt;
|
|
|
|
sqlite3_prepare_v2(global_database, "INSERT INTO junction_relay_schedule(weekday, schedule_id, relay_id) values (?1, ?2, ?3);", -1, &stmt, NULL);
|
|
|
|
sqlite3_bind_int(stmt, 1, weekday);
|
|
sqlite3_bind_int(stmt, 2, schedule_id);
|
|
sqlite3_bind_int(stmt, 3, relay_id);
|
|
|
|
rc = sqlite3_step(stmt);
|
|
if (rc != SQLITE_DONE)
|
|
{
|
|
LOGGER_ERR("error inserting data: %s\n", sqlite3_errmsg(global_database));
|
|
return 0;
|
|
}
|
|
|
|
sqlite3_finalize(stmt);
|
|
|
|
return 1;
|
|
}
|
|
|
|
int
|
|
junction_relay_schedule_insert_weekdays(int relay_id, int *schedule_ids)
|
|
{
|
|
int rc;
|
|
sqlite3_stmt *stmt;
|
|
|
|
static const char query_base[] = "INSERT INTO junction_relay_schedule (weekday, schedule_id, relay_id) VALUES";
|
|
static const char query_extender[] = " (?, ?, ?)";
|
|
|
|
size_t query_len = STRLEN(query_base) + (7 * (STRLEN(query_extender) + 1)) + 1;
|
|
char *query = malloc(sizeof(char) * query_len + 1);
|
|
strncpy(query, query_base, query_len);
|
|
query_len -= STRLEN(query_base);
|
|
for(int i = 0; i < 7; ++i)
|
|
{
|
|
strncat(query, query_extender, query_len);
|
|
query_len -= STRLEN(query_extender);
|
|
char *query_divider = (i < 7 - 1) ? "," : ";";
|
|
strncat(query, query_divider, query_len);
|
|
query_len -= 1;
|
|
}
|
|
|
|
sqlite3_prepare_v2(global_database, query, -1, &stmt, NULL);
|
|
|
|
for(int i = 0; i < 7; ++i)
|
|
{
|
|
sqlite3_bind_int(stmt, i * 3 + 1, i);
|
|
sqlite3_bind_int(stmt, i * 3 + 2, schedule_ids[i]);
|
|
sqlite3_bind_int(stmt, i * 3 + 3, relay_id);
|
|
}
|
|
|
|
rc = sqlite3_step(stmt);
|
|
if (rc != SQLITE_DONE)
|
|
{
|
|
LOGGER_ERR("error inserting data: %s", sqlite3_errmsg(global_database));
|
|
return 0;
|
|
}
|
|
|
|
sqlite3_finalize(stmt);
|
|
|
|
return 1;
|
|
}
|
|
|
|
int
|
|
junction_relay_schedule_remove_for_relay(int relay_id)
|
|
{
|
|
sqlite3_stmt *stmt;
|
|
int rc;
|
|
|
|
sqlite3_prepare_v2(global_database, "DELETE FROM junction_relay_schedule WHERE relay_id=?1;", -1, &stmt, NULL);
|
|
sqlite3_bind_int(stmt, 1, relay_id);
|
|
rc = sqlite3_step(stmt);
|
|
sqlite3_finalize(stmt);
|
|
|
|
return rc == SQLITE_DONE;
|
|
}
|
|
|
|
|
|
int*
|
|
junction_relay_schedule_get_relay_ids_with_schedule(int schedule_id)
|
|
{
|
|
sqlite3_stmt *stmt;
|
|
|
|
sqlite3_prepare_v2(global_database, "SELECT DISTINCT relay_id FROM junction_relay_schedule WHERE schedule_id=?1;", -1, &stmt, NULL);
|
|
sqlite3_bind_int(stmt, 1, schedule_id);
|
|
|
|
return database_helper_get_ids(stmt);
|
|
}
|