#define DELETE_SERVICE "delete from device_services " \
"WHERE service_number = ?"
+#define UPDATE_DEVICE_SERVICE "UPDATE device_services " \
+ "SET discriminant = ? WHERE device_number = ? AND service_number = ?"
+
/* DELETE statements */
static sqlite3_stmt *delete_all_device_services;
static sqlite3_stmt *delete_service;
/* INSERT statements */
static sqlite3_stmt *insert_device_service;
+
+/* UPDATE statements */
+static sqlite3_stmt *update_device_service;
+
extern sqlite3 *database;
static void __ua_device_service_finalize_delete(void)
{
FUNC_ENTRY;
-// TO-DO
+ FINALIZE(update_device_service);
FUNC_EXIT;
}
-
static int __ua_device_service_prepare_delete(sqlite3 *db)
{
FUNC_ENTRY;
static int __ua_device_service_prepare_update(sqlite3 *db)
{
FUNC_ENTRY;
-// TO-DO
+ int rc;
+ static int initialized;
+
+ if (initialized) {
+ FUNC_EXIT;
+ return SQLITE_OK;
+ }
+
+ PREPARE_QUERY(rc, db, update_device_service,
+ UPDATE_DEVICE_SERVICE, __ua_device_service_finalize_update);
+
+ initialized = 1;
FUNC_EXIT;
- return 0;
+ return rc;
}
static int __ua_device_service_prepare_insert(sqlite3 *db)
DB_ACTION(sqlite3_bind_int(stmt, 1, device_number), error_code, handle_error);
DB_ACTION(sqlite3_bind_int(stmt, 2, service_number), error_code, handle_error);
+ DB_ACTION(sqlite3_bind_int(stmt, 3, discriminant), error_code, handle_error);
+
+ if (sqlite3_step(stmt) != SQLITE_DONE) {
+ UAM_ERR("Failed to insert device-service info: %s",
+ sqlite3_errmsg(__uam_db_recover_database()));
+ error_code = UAM_ERROR_DB_FAILED;
+ goto handle_error;
+ }
+
+ UAM_DBG("Device-service info inserted [%d] [%d] [%d]", device_number,
+ service_number, discriminant);
+
+handle_error:
+ sqlite3_reset(stmt);
+ FUNC_EXIT;
+ return error_code;
+}
+
+int _uam_db_update_device_service(int device_number, int service_number,
+ gboolean discriminant)
+{
+ FUNC_ENTRY;
+ int error_code = UAM_ERROR_NONE;
+ sqlite3_stmt *stmt = update_device_service;
+
+ UAM_INFO("%d-%d", device_number, service_number);
+
DB_ACTION(sqlite3_bind_int(stmt, 1, discriminant), error_code, handle_error);
+ DB_ACTION(sqlite3_bind_int(stmt, 2, device_number), error_code, handle_error);
+ DB_ACTION(sqlite3_bind_int(stmt, 3, service_number), error_code, handle_error);
if (sqlite3_step(stmt) != SQLITE_DONE) {
UAM_ERR("Failed to insert device-service info: %s",
if (UAM_ERROR_NONE != ret)
goto handle_error;
- UAM_DBG("Device-service info inserted [%d] [%d]", device_number, service_number);
+ UAM_DBG("Device-service info inserted [%d] [%d] [%d]", device_number,
+ service_number, discriminant);
+
+handle_error:
+ FUNC_EXIT;
+ return ret;
+}
+
+int _uam_db_update_device_service_info(const char *device_id, int tech_type,
+ const char *address, const char *service_name, gboolean discriminant)
+{
+ FUNC_ENTRY;
+ int ret = UAM_ERROR_NONE;
+ db_service_info_t info;
+ int service_number = 0;
+
+ UAM_INFO("%s-%d-%s-%s-%d", device_id, tech_type, address, service_name, discriminant);
+
+ int device_number = 0;
+ ret = _uam_db_get_device_number(device_id, tech_type, address, &device_number);
+ if (UAM_ERROR_NONE != ret)
+ goto handle_error;
+
+ ret = _uam_db_get_service_info(service_name, &info);
+ if (UAM_ERROR_NONE == ret) {
+ service_number = info.service_number;
+ } else
+ goto handle_error;
+
+ ret = _uam_db_update_device_service(device_number, service_number, discriminant);
+ if (UAM_ERROR_NONE != ret)
+ goto handle_error;
+
+ UAM_DBG("Device-service info updated [%d] [%d]", device_number, service_number);
handle_error:
FUNC_EXIT;