Database APIs to update device service information
authorAbhay Agarwal <ay.agarwal@samsung.com>
Wed, 2 Oct 2019 01:02:49 +0000 (10:02 +0900)
committersaerome.kim <saerome.kim@samsung.com>
Fri, 4 Oct 2019 11:20:43 +0000 (20:20 +0900)
Change-Id: I61ccb0da2cbcf76e8c7a38ba7f2e8b8a77e047c1
Signed-off-by: Abhay Agarwal <ay.agarwal@samsung.com>
packaging/ua-manager.spec
ua-daemon/include/ua-manager-database.h
ua-daemon/src/ua-manager-core.c
ua-daemon/src/ua-manager-db.c
ua-daemon/src/ua-manager-device-service-db.c

index 8ed1fa9..257396d 100644 (file)
@@ -1,6 +1,6 @@
 Name:       ua-manager
 Summary:    User awareness manager
-Version:    0.10.10
+Version:    0.11.0
 Release:    1
 License:    Apache-2.0
 Source0:    %{name}-%{version}.tar.gz
index 020ce2e..ae3f337 100644 (file)
@@ -193,6 +193,10 @@ int _uam_db_insert_service(int device_number, int service_number,
 int _uam_db_insert_device_service_info(const char *device_id, int tech_type,
        const char *address, const char *service_name, int cycle, gboolean discriminant);
 
+/* update */
+int _uam_db_update_device_service_info(const char *device_id, int tech_type,
+               const char *address, const char *service_name, gboolean discriminant);
+
 /* IBEACON_ADV QUERIES */
 
 typedef struct {
index 80ac1ca..c197c09 100644 (file)
@@ -1675,7 +1675,7 @@ int _uam_core_service_set_device_discriminant(const char *svc_name,
        mac = __get_mac_addr(tech_info);
        /* Insert device service info to db */
        if (UAM_ERROR_NONE != _uam_db_update_device_service_info(device_id,
-                               tech_type, mac, service->name, service->cycle, discriminant))
+                               tech_type, mac, service->name, discriminant))
                UAM_WARN("Device service discriminant update to persistent DB failed");
 
        FUNC_EXIT;
index b1e8500..c257241 100644 (file)
@@ -47,7 +47,7 @@
        "timestamp LONG, " \
        "presence_state INTEGER, " \
        "os_type INTEGER, " \
-       "discriminant INTETER, " \
+       "discriminant INTEGER, " \
        "service_id TEXT, " \
        "purpose TEXT, " \
        "duid TEXT, " \
@@ -68,7 +68,7 @@
 #define CREATE_DEVICE_SERVICES_TABLE "CREATE TABLE IF NOT EXISTS device_services ( " \
        "device_number INTEGER, " \
        "service_number INTEGER, " \
-       "discriminant INTETER, " \
+       "discriminant INTEGER, " \
        "FOREIGN KEY(device_number) REFERENCES devices(device_number), " \
        "FOREIGN KEY(service_number) REFERENCES services(service_number), " \
        "PRIMARY KEY(device_number, service_number) " \
index 89ea4be..fd47e5f 100644 (file)
@@ -42,6 +42,9 @@
 #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;
@@ -53,6 +56,10 @@ static sqlite3_stmt *select_device_services_count;
 
 /* 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)
@@ -89,12 +96,11 @@ static void __ua_device_service_finalize_update(void)
 {
        FUNC_ENTRY;
 
-//     TO-DO
+       FINALIZE(update_device_service);
 
        FUNC_EXIT;
 }
 
-
 static int __ua_device_service_prepare_delete(sqlite3 *db)
 {
        FUNC_ENTRY;
@@ -142,9 +148,20 @@ static int __ua_device_service_prepare_select(sqlite3 *db)
 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)
@@ -236,7 +253,36 @@ int _uam_db_insert_service(int device_number, int service_number, gboolean discr
 
        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",
@@ -281,7 +327,40 @@ int _uam_db_insert_device_service_info(const char *device_id, int tech_type,
        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;