#define DELETE_COUNTER "DELETE FROM counters WHERE restriction_id=?"
-#define SELECT_COUNTER "SELECT data_counter FROM counters WHERE restriction_id=?"
+#define SELECT_RESTRICTION_ID "SELECT restriction_id FROM counters " \
+ " WHERE restriction_id = ?"
-#define INSERT_COUNTER "INSERT INTO counters (restriction_id, data_counter) " \
- " VALUES (?, ?)"
+#define SELECT_COUNTER "SELECT data_counter, warn_counter, monthly_counter, weekly_counter, daily_counter " \
+ " FROM counters WHERE restriction_id = ?"
-#define UPDATE_COUNTER "REPLACE INTO counters (restriction_id, data_counter) " \
- " VALUES (?, ?)"
+#define UPDATE_COUNTER "UPDATE counters " \
+ " SET data_counter = ?, warn_counter = ?, monthly_counter = ?, weekly_counter = ?, daily_counter = ? " \
+ " WHERE restriction_id = ?"
+
+#define INSERT_COUNTER "INSERT INTO counters " \
+ " (restriction_id, data_counter, warn_counter, monthly_counter, weekly_counter, daily_counter) " \
+ " VALUES (?, ?, ?, ?, ?, ?)"
+
+#define SELECT_TIMESTAMP "SELECT month_start_date, month_start_ts, week_start_ts, day_start_ts " \
+ " FROM counters WHERE restriction_id = ?"
+
+#define UPDATE_TIMESTAMP "UPDATE counters " \
+ " SET month_start_date = ?, month_start_ts = ?, week_start_ts = ?, day_start_ts = ? " \
+ " WHERE restriction_id = ?"
+
+#define INSERT_TIMESTAMP "INSERT INTO counters " \
+ " (restriction_id, month_start_date, month_start_ts, week_start_ts, day_start_ts) " \
+ " VALUES (?, ?, ?, ?, ?)"
static void __finalize_delete(void);
} \
} while (0)
+static void __finalize_insert(void);
+
+#define PREPARE_INSERT(stm, query) do { \
+ rc = sqlite3_prepare_v2(db, query, -1, &stm, NULL); \
+ if (rc != SQLITE_OK) { \
+ stm = NULL; \
+ __finalize_insert(); \
+ STC_LOGE("Failed to prepare \"%s\"query" \
+ , query); \
+ return rc; \
+ } \
+ } while (0)
+
+
+
#define FINALIZE(stm) do { \
if (stm) { \
sqlite3_finalize(stm); \
} while (0)
static sqlite3_stmt *delete_counter;
+static sqlite3_stmt *select_restriction_id;
static sqlite3_stmt *select_counter;
static sqlite3_stmt *update_counter;
+static sqlite3_stmt *insert_counter;
+static sqlite3_stmt *select_timestamp;
+static sqlite3_stmt *update_timestamp;
+static sqlite3_stmt *insert_timestamp;
static int __prepare_delete(sqlite3 *db)
{
static int initialized;
if (initialized) {
- __STC_LOG_FUNC_EXIT__;
- return SQLITE_OK;
+ __STC_LOG_FUNC_EXIT__; //LCOV_EXCL_LINE
+ return SQLITE_OK; //LCOV_EXCL_LINE
}
PREPARE_DELETE(delete_counter, DELETE_COUNTER);
static int initialized;
if (initialized) {
- __STC_LOG_FUNC_EXIT__;
- return SQLITE_OK;
+ __STC_LOG_FUNC_EXIT__; //LCOV_EXCL_LINE
+ return SQLITE_OK; //LCOV_EXCL_LINE
}
PREPARE_SELECT(select_counter, SELECT_COUNTER);
+ PREPARE_SELECT(select_timestamp, SELECT_TIMESTAMP);
+ PREPARE_SELECT(select_restriction_id, SELECT_RESTRICTION_ID);
initialized = 1;
__STC_LOG_FUNC_EXIT__;
__STC_LOG_FUNC_ENTER__;
FINALIZE(select_counter);
+ FINALIZE(select_timestamp);
+ FINALIZE(select_restriction_id);
__STC_LOG_FUNC_EXIT__;
}
static int initialized;
if (initialized) {
- __STC_LOG_FUNC_EXIT__;
- return SQLITE_OK;
+ __STC_LOG_FUNC_EXIT__; //LCOV_EXCL_LINE
+ return SQLITE_OK; //LCOV_EXCL_LINE
}
PREPARE_UPDATE(update_counter, UPDATE_COUNTER);
+ PREPARE_UPDATE(update_timestamp, UPDATE_TIMESTAMP);
initialized = 1;
__STC_LOG_FUNC_EXIT__;
__STC_LOG_FUNC_ENTER__;
FINALIZE(update_counter);
+ FINALIZE(update_timestamp);
__STC_LOG_FUNC_EXIT__;
}
+static int __prepare_insert(sqlite3 *db)
+{
+ __STC_LOG_FUNC_ENTER__;
+ int rc;
+ static int initialized;
+
+ if (initialized) {
+ __STC_LOG_FUNC_EXIT__; //LCOV_EXCL_LINE
+ return SQLITE_OK; //LCOV_EXCL_LINE
+ }
+
+ PREPARE_INSERT(insert_counter, INSERT_COUNTER);
+ PREPARE_INSERT(insert_timestamp, INSERT_TIMESTAMP);
+
+ initialized = 1;
+ __STC_LOG_FUNC_EXIT__;
+ return rc;
+}
+
+static void __finalize_insert(void)
+{
+ __STC_LOG_FUNC_ENTER__;
+
+ FINALIZE(insert_counter);
+ FINALIZE(insert_timestamp);
+
+ __STC_LOG_FUNC_EXIT__;
+}
+
+static bool __table_counters_is_entry_present(uint64_t restriction_id)
+{
+ bool ret = FALSE;
+ int rc;
+ uint64_t l_restriction_id = -1;
+ sqlite3_stmt *stmt = select_restriction_id;
+
+ if (sqlite3_bind_int(stmt, 1, restriction_id) != SQLITE_OK) {
+ ret = FALSE;
+ __STC_LOG_FUNC_EXIT__;
+ goto handle_error;
+ }
+
+ rc = sqlite3_step(stmt);
+
+ switch (rc) {
+ case SQLITE_DONE:
+ break;
+ case SQLITE_ROW:
+ l_restriction_id = sqlite3_column_int64(stmt, 0);
+ STC_LOGD("restriction id [%llu]", l_restriction_id);
+ ret = TRUE;
+ break;
+ case SQLITE_ERROR:
+ default:
+ STC_LOGE("Failed to get restriction id : %s",
+ sqlite3_errmsg(stc_db_get_database()));
+ }
+
+handle_error:
+ sqlite3_reset(stmt);
+ return ret;
+}
+
stc_error_e table_counters_get(uint64_t restriction_id,
table_counters_info *info)
{
do {
rc = sqlite3_step(stmt);
+ //LCOV_EXCL_START
switch (rc) {
case SQLITE_DONE:
break;
case SQLITE_ROW:
info->data_counter = sqlite3_column_int64(stmt, 0);
-
- STC_LOGD("rstn_id [%llu] data_counters [%lld] bytes",
- restriction_id, info->data_counter);
+ info->warn_counter = sqlite3_column_int64(stmt, 1);
+ info->monthly_counter = sqlite3_column_int64(stmt, 2);
+ info->weekly_counter = sqlite3_column_int64(stmt, 3);
+ info->daily_counter = sqlite3_column_int64(stmt, 4);
+
+ STC_LOGD("rstn_id[%llu] data[%lld] warn[%lld] "
+ "monthly[%lld] weekly[%lld] daily[%lld]",
+ restriction_id, info->data_counter,
+ info->warn_counter, info->monthly_counter,
+ info->weekly_counter, info->daily_counter);
break;
case SQLITE_ERROR:
default:
sqlite3_errmsg(stc_db_get_database()));
error_code = STC_ERROR_DB_FAILED;
+ __STC_LOG_FUNC_EXIT__;
}
+ //LCOV_EXCL_STOP
} while (rc == SQLITE_ROW);
handle_error:
return error_code;
}
+//LCOV_EXCL_START
stc_error_e table_counters_update_counters(const table_counters_info *info)
{
stc_error_e error_code = STC_ERROR_NONE;
goto handle_error;
}
+ if (__table_counters_is_entry_present(info->restriction_id) == FALSE)
+ stmt = insert_counter;
+
DB_ACTION(sqlite3_bind_int64(stmt, 1, info->restriction_id));
DB_ACTION(sqlite3_bind_int64(stmt, 2, info->data_counter));
+ DB_ACTION(sqlite3_bind_int64(stmt, 3, info->warn_counter));
+ DB_ACTION(sqlite3_bind_int64(stmt, 4, info->monthly_counter));
+ DB_ACTION(sqlite3_bind_int64(stmt, 5, info->weekly_counter));
+ DB_ACTION(sqlite3_bind_int64(stmt, 6, info->daily_counter));
if (sqlite3_step(stmt) != SQLITE_DONE) {
STC_LOGE("Failed to update counter: %s\n",
sqlite3_reset(stmt);
return error_code;
}
+//LCOV_EXCL_STOP
-stc_error_e table_counters_delete(uint64_t restriction_id)
+stc_error_e table_counters_get_timestamps(uint64_t restriction_id,
+ table_counters_info *info)
{
stc_error_e error_code = STC_ERROR_NONE;
- sqlite3_stmt *stmt = delete_counter;
+ sqlite3_stmt *stmt = select_timestamp;
+ int rc;
+
+ if (info == NULL) {
+ __STC_LOG_FUNC_EXIT__;
+ goto handle_error;
+ }
+
+ info->restriction_id = restriction_id;
DB_ACTION(sqlite3_bind_int64(stmt, 1, restriction_id));
+ do {
+ rc = sqlite3_step(stmt);
+
+ //LCOV_EXCL_START
+ switch (rc) {
+ case SQLITE_DONE:
+ break;
+ case SQLITE_ROW:
+ info->month_start_date = sqlite3_column_int(stmt, 0);
+ info->month_start_ts = sqlite3_column_int64(stmt, 1);
+ info->week_start_ts = sqlite3_column_int64(stmt, 2);
+ info->day_start_ts = sqlite3_column_int64(stmt, 3);
+
+ STC_LOGD("rstn_id [%llu] month_start_date [%d], "
+ "month_start_ts [%lld], week_start_ts [%lld], "
+ "day_start_ts [%lld]", restriction_id,
+ info->month_start_date, info->month_start_ts,
+ info->week_start_ts, info->day_start_ts);
+ break;
+ case SQLITE_ERROR:
+ default:
+ STC_LOGE("Failed to enumerate counters: %s\n",
+ sqlite3_errmsg(stc_db_get_database()));
+
+ error_code = STC_ERROR_DB_FAILED;
+ __STC_LOG_FUNC_EXIT__;
+ }
+ //LCOV_EXCL_STOP
+ } while (rc == SQLITE_ROW);
+
+handle_error:
+ sqlite3_reset(stmt);
+ return error_code;
+}
+
+//LCOV_EXCL_START
+stc_error_e table_counters_update_timestamps(const table_counters_info *info)
+{
+ stc_error_e error_code = STC_ERROR_NONE;
+ sqlite3_stmt *stmt = update_timestamp;
+
+ if (__table_counters_is_entry_present(info->restriction_id) == FALSE)
+ stmt = insert_timestamp;
+
+ DB_ACTION(sqlite3_bind_int64(stmt, 1, info->restriction_id));
+ DB_ACTION(sqlite3_bind_int(stmt, 2, info->month_start_date));
+ DB_ACTION(sqlite3_bind_int64(stmt, 3, info->month_start_ts));
+ DB_ACTION(sqlite3_bind_int64(stmt, 4, info->week_start_ts));
+ DB_ACTION(sqlite3_bind_int64(stmt, 5, info->day_start_ts));
+
if (sqlite3_step(stmt) != SQLITE_DONE) {
- STC_LOGE("Failed to delete counter: %s\n",
+ STC_LOGE("Failed to update timestamps: %s\n",
sqlite3_errmsg(stc_db_get_database()));
error_code = STC_ERROR_DB_FAILED;
+ __STC_LOG_FUNC_EXIT__;
goto handle_error;
}
+ STC_LOGD("Timestamps updated for restriction_id [%llu]",
+ info->restriction_id);
+
+handle_error:
+ sqlite3_reset(stmt);
+ return error_code;
+}
+//LCOV_EXCL_STOP
+
+
+stc_error_e table_counters_delete(uint64_t restriction_id)
+{
+ stc_error_e error_code = STC_ERROR_NONE;
+ sqlite3_stmt *stmt = delete_counter;
+
+ DB_ACTION(sqlite3_bind_int64(stmt, 1, restriction_id));
+
+ if (sqlite3_step(stmt) != SQLITE_DONE) {
+ STC_LOGE("Failed to delete counter: %s\n", //LCOV_EXCL_LINE
+ sqlite3_errmsg(stc_db_get_database()));
+ error_code = STC_ERROR_DB_FAILED; //LCOV_EXCL_LINE
+ goto handle_error; //LCOV_EXCL_LINE
+ }
+
STC_LOGD("Counter deleted for restriction_id [%llu]", restriction_id);
handle_error:
stc_error_e error_code = STC_ERROR_NONE;
if (db == NULL) {
- __STC_LOG_FUNC_EXIT__;
- return STC_ERROR_FAIL;
+ __STC_LOG_FUNC_EXIT__; //LCOV_EXCL_LINE
+ return STC_ERROR_FAIL; //LCOV_EXCL_LINE
}
DB_ACTION(__prepare_delete(db));
DB_ACTION(__prepare_select(db));
DB_ACTION(__prepare_update(db));
+ DB_ACTION(__prepare_insert(db));
handle_error:
__STC_LOG_FUNC_EXIT__;
__finalize_delete();
__finalize_select();
__finalize_update();
+ __finalize_insert();
__STC_LOG_FUNC_EXIT__;
}