Manage device and service number with autoincrement property of sqlite accepted/tizen/unified/20191011.015435 submit/tizen/20191009.230917
authorAbhay Agarwal <ay.agarwal@samsung.com>
Tue, 8 Oct 2019 09:25:36 +0000 (18:25 +0900)
committersaerome.kim <saerome.kim@samsung.com>
Wed, 9 Oct 2019 22:39:40 +0000 (07:39 +0900)
This patch modifies to manage database table field service_number, device_number
user_id and ibeacon_id with autoincrement property of sqlite.
Managing these field manually can result in unnecessary conflicts.

Change-Id: I159b9491d6984c56047a815d02f6d35123feb60d
Signed-off-by: Abhay Agarwal <ay.agarwal@samsung.com>
ua-daemon/data/ua_db.sql
ua-daemon/src/ua-manager-adv-db.c
ua-daemon/src/ua-manager-db.c
ua-daemon/src/ua-manager-device-db.c
ua-daemon/src/ua-manager-service-db.c
ua-daemon/src/ua-manager-user-db.c

index d3b56da..4728631 100644 (file)
@@ -20,12 +20,13 @@ PRAGMA foreign_keys = ON;
 
 CREATE TABLE IF NOT EXISTS userdata (
   name TEXT,
-  user_id INTEGER,
-  account TEXT PRIMARY KEY
+  user_id INTEGER PRIMARY KEY AUTOINCREMENT,
+  account TEXT,
+  UNIQUE (account)
 );
 
 CREATE TABLE IF NOT EXISTS devices (
-  device_number INTEGER,
+  device_number INTEGER PRIMARY KEY AUTOINCREMENT,
   device_id TEXT,
   user_id INTEGER,
   tech_type INTEGER,
@@ -40,16 +41,16 @@ CREATE TABLE IF NOT EXISTS devices (
   duid TEXT,
   device_icon TEXT,
   FOREIGN KEY(user_id) REFERENCES userdata(user_id),
-  PRIMARY KEY(device_id, tech_type, address)
+  UNIQUE (device_id, tech_type, address)
 );
 
 CREATE TABLE IF NOT EXISTS services (
-  service_number INTEGER,
+  service_number INTEGER PRIMARY KEY AUTOINCREMENT,
   service_name TEXT,
   cycle INTEGER,
   presence_threshold INTEGER,
   absence_threshold INTEGER,
-  PRIMARY KEY(service_name)
+  UNIQUE (service_name)
 );
 
 CREATE TABLE IF NOT EXISTS device_services (
@@ -62,8 +63,8 @@ CREATE TABLE IF NOT EXISTS device_services (
 );
 
 CREATE TABLE IF NOT EXISTS ibeacon_adv (
-  ibeacon_id INTEGER,
+  ibeacon_id INTEGER PRIMARY KEY AUTOINCREMENT,
   ibeacon_adv TEXT,
   adv_len INTEGER,
-  PRIMARY KEY(ibeacon_adv)
+  UNIQUE (ibeacon_adv)
 );
index 9ed2b83..53bf1ee 100644 (file)
 
 #define SELECT_ALL_ADVS "SELECT ibeacon_id, adv_len, ibeacon_adv FROM ibeacon_adv"
 
-#define SELECT_MAX_IBEACON_ID "SELECT MAX(ibeacon_id) FROM ibeacon_adv"
-
-#define INSERT_IBEACON_ADV "insert into ibeacon_adv (ibeacon_id, ibeacon_adv, adv_len) " \
-       "values (?, ?, ?)"
+#define INSERT_IBEACON_ADV "insert into ibeacon_adv (ibeacon_adv, adv_len) " \
+       "values (?, ?)"
 
 #define DELETE_ALL_ADV_DATA "delete from ibeacon_adv "
 
 static sqlite3_stmt *delete_all_adv_data;
 
 /* SELECT statements */
-static sqlite3_stmt *select_max_ibeacon_id;
 static sqlite3_stmt *select_all_advs;
 
 /* INSERT statements */
 static sqlite3_stmt *insert_ibeacon_adv;
 
 extern sqlite3 *database_handle;
-static int max_ibeacon_id;
 
 static void __uam_adv_finalize_delete(void)
 {
@@ -59,7 +55,6 @@ static void __uam_adv_finalize_select(void)
 {
        FUNC_ENTRY;
 
-       FINALIZE(select_max_ibeacon_id);
        FINALIZE(select_all_advs);
 
        FUNC_EXIT;
@@ -105,8 +100,6 @@ static int __uam_adv_prepare_select(sqlite3 *db)
                return SQLITE_OK;
        }
 
-       PREPARE_QUERY(rc, db, select_max_ibeacon_id,
-               SELECT_MAX_IBEACON_ID, __uam_adv_finalize_select);
        PREPARE_QUERY(rc, db, select_all_advs,
                SELECT_ALL_ADVS, __uam_adv_finalize_select);
 
@@ -164,35 +157,6 @@ static void __uam_adv_table_info_finalize(void)
        FUNC_EXIT;
 }
 
-int _uam_db_get_max_ibeacon_id(void)
-{
-       FUNC_ENTRY;
-       int error_code = UAM_ERROR_NONE;
-       sqlite3_stmt *stmt = select_max_ibeacon_id;
-       int sql_ret = SQLITE_OK;
-
-       do {
-               sql_ret = sqlite3_step(stmt);
-
-               switch (sql_ret) {
-               case SQLITE_DONE:
-                       break;
-               case SQLITE_ROW:
-                       max_ibeacon_id = sqlite3_column_int(stmt, 0);
-                       UAM_INFO("max_ibeacon_id = %d", max_ibeacon_id);
-                       break;
-               case SQLITE_ERROR:
-               default:
-                       UAM_ERR("Failed to select max ibeacon adv [%d:%s]",
-                               sql_ret, sqlite3_errmsg(database_handle));
-               }
-       } while (sql_ret == SQLITE_ROW);
-
-       sqlite3_reset(stmt);
-       FUNC_EXIT;
-       return error_code;
-}
-
 int _uam_adv_db_deinitialize(void)
 {
        FUNC_ENTRY;
@@ -211,8 +175,6 @@ int _uam_adv_db_initialize(void)
        FUNC_ENTRY;
 
        EXEC(UAM_ERROR_NONE, __uam_adv_table_info_prepare(database_handle), handle_error);
-       if (_uam_db_get_max_ibeacon_id() != UAM_ERROR_NONE)
-               goto handle_error;
 
        FUNC_EXIT;
        return UAM_ERROR_NONE;
@@ -234,11 +196,9 @@ int _uam_db_insert_adv_info(unsigned int adv_len, const char *iadv)
 
        UAM_INFO("%u-%s-0x%0x", adv_len, iadv, iadv[30]);
 
-       DB_ACTION(sqlite3_bind_int(stmt, 1, max_ibeacon_id + 1),
-               error_code, handle_error);
-       DB_ACTION(sqlite3_bind_text(stmt, 2, iadv, adv_len, SQLITE_TRANSIENT),
+       DB_ACTION(sqlite3_bind_text(stmt, 1, iadv, adv_len, SQLITE_TRANSIENT),
                error_code, handle_error);
-       DB_ACTION(sqlite3_bind_int(stmt, 3, adv_len),
+       DB_ACTION(sqlite3_bind_int(stmt, 2, adv_len),
                error_code, handle_error);
 
        sql_ret = sqlite3_step(stmt);
@@ -249,8 +209,7 @@ int _uam_db_insert_adv_info(unsigned int adv_len, const char *iadv)
                goto handle_error;
        }
 
-       max_ibeacon_id = max_ibeacon_id + 1;
-       UAM_DBG("iBeacon info inserted ibeacon_id:[%d]", max_ibeacon_id);
+       UAM_DBG("iBeacon info inserted");
 
 handle_error:
        sqlite3_reset(stmt);
index ec9d078..ac623a9 100644 (file)
 
 #define CREATE_USERDATA_TABLE "CREATE TABLE IF NOT EXISTS userdata ( " \
        "name TEXT, " \
-       "user_id INTEGER, " \
-       "account TEXT PRIMARY KEY " \
+       "user_id INTEGER PRIMARY KEY AUTOINCREMENT, " \
+       "account TEXT, " \
+       "UNIQUE (account) " \
        "); "
 
 #define CREATE_DEVICES_TABLE "CREATE TABLE IF NOT EXISTS devices ( " \
-       "device_number INTEGER, " \
+       "device_number INTEGER PRIMARY KEY AUTOINCREMENT, " \
        "device_id TEXT, " \
        "user_id INTEGER, " \
        "tech_type INTEGER, " \
        "duid TEXT, " \
        "device_icon TEXT, " \
        "FOREIGN KEY(user_id) REFERENCES userdata(user_id), " \
-       "PRIMARY KEY(device_id, tech_type, address) " \
+       "UNIQUE (device_id, tech_type, address) " \
        "); "
 
 #define CREATE_SERVICES_TABLE "CREATE TABLE IF NOT EXISTS services ( " \
-       "service_number INTEGER, " \
+       "service_number INTEGER PRIMARY KEY AUTOINCREMENT, " \
        "service_name TEXT, " \
        "cycle INTEGER, " \
        "presence_threshold INTEGER, " \
        "absence_threshold INTEGER, " \
-       "PRIMARY KEY(service_name) " \
+       "UNIQUE (service_name) " \
        "); "
 
 #define CREATE_DEVICE_SERVICES_TABLE "CREATE TABLE IF NOT EXISTS device_services ( " \
        "); "
 
 #define CREATE_IBEACON_ADV_TABLE "CREATE TABLE IF NOT EXISTS ibeacon_adv ( " \
-       "ibeacon_id INTEGER, " \
+       "ibeacon_id INTEGER PRIMARY KEY AUTOINCREMENT, " \
        "ibeacon_adv TEXT, " \
        "adv_len INTEGER, " \
-       "PRIMARY KEY(ibeacon_adv) " \
+       "UNIQUE (ibeacon_adv) " \
        "); "
 
 #define VERSION 1
index afa7546..f0fa635 100644 (file)
 #define SELECT_DEVICE_NUMBER "SELECT device_number FROM devices " \
        "WHERE device_id = ? AND tech_type = ? AND address = ?"
 
-#define SELECT_MAX_DEVICE_NUMBER "SELECT MAX(device_number) FROM devices"
-
 #define INSERT_DEVICE "insert into devices " \
        "(device_id, tech_type, address, ip_address, timestamp, " \
        "presence_state, os_type, user_id, discriminant, service_id, " \
-       "purpose, duid, device_icon, device_number)" \
-       "values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)"
+       "purpose, duid, device_icon)" \
+       "values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)"
 
 #define UPDATE_TIMESTAMP "UPDATE devices " \
        "SET timestamp = ? WHERE device_id = ? AND tech_type = ? AND address = ?"
@@ -73,7 +71,6 @@ static sqlite3_stmt *delete_device_info;
 static sqlite3_stmt *select_all_devices;
 static sqlite3_stmt *select_device;
 static sqlite3_stmt *select_device_number;
-static sqlite3_stmt *select_max_device_number;
 
 /* UPDATE statements */
 static sqlite3_stmt *update_timestamp;
@@ -85,7 +82,6 @@ static sqlite3_stmt *update_device;
 static sqlite3_stmt *insert_device_info;
 
 extern sqlite3 *database_handle;
-static int max_device_number;
 
 static void __uam_device_finalize_delete(void)
 {
@@ -104,7 +100,6 @@ static void __uam_device_finalize_select(void)
        FINALIZE(select_all_devices);
        FINALIZE(select_device);
        FINALIZE(select_device_number);
-       FINALIZE(select_max_device_number);
 
        FUNC_EXIT;
 }
@@ -168,8 +163,6 @@ static int __uam_device_prepare_select(sqlite3 *db)
                SELECT_DEVICE, __uam_device_finalize_select);
        PREPARE_QUERY(rc, db, select_device_number,
                SELECT_DEVICE_NUMBER, __uam_device_finalize_select);
-       PREPARE_QUERY(rc, db, select_max_device_number,
-               SELECT_MAX_DEVICE_NUMBER, __uam_device_finalize_select);
 
        initialized = 1;
        FUNC_EXIT;
@@ -250,35 +243,6 @@ static void __uam_device_table_devicesinfo_finalize(void)
        FUNC_EXIT;
 }
 
-int _uam_db_get_max_device_number(void)
-{
-       FUNC_ENTRY;
-       int error_code = UAM_ERROR_NONE;
-       sqlite3_stmt *stmt = select_max_device_number;
-       int sql_ret = SQLITE_OK;
-
-       do {
-               sql_ret = sqlite3_step(stmt);
-
-               switch (sql_ret) {
-               case SQLITE_DONE:
-                       break;
-               case SQLITE_ROW:
-                       max_device_number = sqlite3_column_int(stmt, 0);
-                       UAM_INFO("max_device_number %d", max_device_number);
-                       break;
-               case SQLITE_ERROR:
-               default:
-                       UAM_ERR("Failed to enumerate device info [%d:%s]",
-                               sql_ret, sqlite3_errmsg(database_handle));
-               }
-       } while (sql_ret == SQLITE_ROW);
-
-       sqlite3_reset(stmt);
-       FUNC_EXIT;
-       return error_code;
-}
-
 int _uam_device_db_deinitialize(void)
 {
        FUNC_ENTRY;
@@ -297,8 +261,6 @@ int _uam_device_db_initialize(void)
        FUNC_ENTRY;
 
        EXEC(UAM_ERROR_NONE, __uam_device_table_devicesinfo_prepare(database_handle), handle_error);
-       if (_uam_db_get_max_device_number() != UAM_ERROR_NONE)
-               goto handle_error;
 
        FUNC_EXIT;
        return UAM_ERROR_NONE;
@@ -504,8 +466,6 @@ int _uam_device_db_insert_device_info(int user_id,
                error_code, handle_error);
        DB_ACTION(sqlite3_bind_text(stmt, 13, &(dev_info->payload.device_icon), 1, SQLITE_TRANSIENT),
                error_code, handle_error);
-       DB_ACTION(sqlite3_bind_int(stmt, 14, max_device_number + 1),
-               error_code, handle_error);
 
        sql_ret = sqlite3_step(stmt);
        if (sql_ret != SQLITE_DONE) {
@@ -515,9 +475,7 @@ int _uam_device_db_insert_device_info(int user_id,
                goto handle_error;
        }
 
-       UAM_DBG("Device info inserted device_id [%s] user id [%d]",
-               dev_info->device_id, user_id);
-       max_device_number = max_device_number + 1;
+       UAM_DBG("Device info inserted device_id [%s] ", dev_info->device_id);
 
 handle_error:
        sqlite3_reset(stmt);
index 678e6ed..94f6cba 100644 (file)
        "cycle, presence_threshold, absence_threshold FROM services " \
        "where service_name = ?"
 
-#define SELECT_MAX_SERVICE_NUMBER "SELECT MAX(service_number) FROM services"
-
-#define INSERT_SERVICE "insert into services (service_number, service_name, cycle, " \
+#define INSERT_SERVICE "insert into services (service_name, cycle, " \
        "presence_threshold, absence_threshold) " \
-       "values (?, ?, ?, ?, ?)"
+       "values (?, ?, ?, ?)"
 
 #define UPDATE_CYCLE "UPDATE services SET cycle = ? WHERE service_name = ?"
 
@@ -50,7 +48,6 @@ static sqlite3_stmt *delete_service_info;
 /* SELECT statements */
 static sqlite3_stmt *select_all_services;
 static sqlite3_stmt *select_service;
-static sqlite3_stmt *select_max_service_number;
 
 /* UPDATE statements */
 static sqlite3_stmt *update_cycle;
@@ -59,7 +56,6 @@ static sqlite3_stmt *update_cycle;
 static sqlite3_stmt *insert_service_info;
 
 extern sqlite3 *database_handle;
-static int max_service_number;
 
 static void __uam_service_finalize_delete(void)
 {
@@ -77,7 +73,6 @@ static void __uam_service_finalize_select(void)
 
        FINALIZE(select_all_services);
        FINALIZE(select_service);
-       FINALIZE(select_max_service_number);
 
        FUNC_EXIT;
 }
@@ -136,8 +131,6 @@ static int __uam_service_prepare_select(sqlite3 *db)
                SELECT_ALL_SERVICES, __uam_service_finalize_select);
        PREPARE_QUERY(rc, db, select_service,
                SELECT_SERVICE, __uam_service_finalize_select);
-       PREPARE_QUERY(rc, db, select_max_service_number,
-               SELECT_MAX_SERVICE_NUMBER, __uam_service_finalize_select);
 
        initialized = 1;
        FUNC_EXIT;
@@ -213,35 +206,6 @@ static void __uam_service_table_servicesinfo_finalize(void)
        FUNC_EXIT;
 }
 
-int _uam_db_get_max_service_number(void)
-{
-       FUNC_ENTRY;
-       int error_code = UAM_ERROR_NONE;
-       sqlite3_stmt *stmt = select_max_service_number;
-       int sql_ret = SQLITE_OK;
-
-       do {
-               sql_ret = sqlite3_step(stmt);
-
-               switch (sql_ret) {
-               case SQLITE_DONE:
-                       break;
-               case SQLITE_ROW:
-                       max_service_number = sqlite3_column_int(stmt, 0);
-                       UAM_INFO("max_service_number = %d", max_service_number);
-                       break;
-               case SQLITE_ERROR:
-               default:
-                       UAM_ERR("Failed to select max service number [%d:%s]",
-                               sql_ret, sqlite3_errmsg(database_handle));
-               }
-       } while (sql_ret == SQLITE_ROW);
-
-       sqlite3_reset(stmt);
-       FUNC_EXIT;
-       return error_code;
-}
-
 int _uam_service_db_deinitialize(void)
 {
        FUNC_ENTRY;
@@ -260,8 +224,6 @@ int _uam_service_db_initialize(void)
        FUNC_ENTRY;
 
        EXEC(UAM_ERROR_NONE, __uam_service_table_servicesinfo_prepare(database_handle), handle_error);
-       if (_uam_db_get_max_service_number() != UAM_ERROR_NONE)
-               goto handle_error;
 
        FUNC_EXIT;
        return UAM_ERROR_NONE;
@@ -285,15 +247,13 @@ int _uam_db_insert_service_info(
        UAM_INFO("%s-%d-%d-%d", svc->name, cycle, svc->presence_threshold,
                                svc->absence_threshold);
 
-       DB_ACTION(sqlite3_bind_int(stmt, 1, max_service_number + 1),
-               error_code, handle_error);
-       DB_ACTION(sqlite3_bind_text(stmt, 2, svc->name, -1, SQLITE_TRANSIENT),
+       DB_ACTION(sqlite3_bind_text(stmt, 1, svc->name, -1, SQLITE_TRANSIENT),
                error_code, handle_error);
-       DB_ACTION(sqlite3_bind_int(stmt, 3, cycle),
+       DB_ACTION(sqlite3_bind_int(stmt, 2, cycle),
                error_code, handle_error);
-       DB_ACTION(sqlite3_bind_int(stmt, 4, svc->presence_threshold),
+       DB_ACTION(sqlite3_bind_int(stmt, 3, svc->presence_threshold),
                error_code, handle_error);
-       DB_ACTION(sqlite3_bind_int(stmt, 5, svc->absence_threshold),
+       DB_ACTION(sqlite3_bind_int(stmt, 4, svc->absence_threshold),
                error_code, handle_error);
 
        sql_ret = sqlite3_step(stmt);
@@ -304,9 +264,7 @@ int _uam_db_insert_service_info(
                goto handle_error;
        }
 
-       max_service_number = max_service_number + 1;
-       *service_number = max_service_number;
-       UAM_DBG("Service info inserted service_number:[%d]", *service_number);
+       UAM_DBG("Service info inserted");
 
 handle_error:
        sqlite3_reset(stmt);
index 620161e..4b15776 100644 (file)
 
 #define SELECT_USER_DATA "SELECT user_id, " \
        "name, account FROM userdata WHERE user_id = ?"
+
 #define SELECT_MAX_USER_ID "SELECT MAX(user_id) FROM userdata"
 
 #define INSERT_USER_INFO "insert into userdata " \
-       "(user_id, name, account)" \
-       "values (?, ?, ?)"
+       "(name, account)" \
+       "values (?, ?)"
 
 #define DELETE_ALL_USERS_DATA "delete from userdata "
 
@@ -259,11 +260,9 @@ int _uam_db_insert_user_info(int *user_id, const char *name, const char *account
 
        UAM_INFO("%s-%s", name, account);
 
-       DB_ACTION(sqlite3_bind_int(stmt, 1, max_user_id + 1),
-               error_code, handle_error);
-       DB_ACTION(sqlite3_bind_text(stmt, 2, name ? name : "",
+       DB_ACTION(sqlite3_bind_text(stmt, 1, name ? name : "",
                                -1, SQLITE_TRANSIENT), error_code, handle_error);
-       DB_ACTION(sqlite3_bind_text(stmt, 3, account, -1, SQLITE_TRANSIENT),
+       DB_ACTION(sqlite3_bind_text(stmt, 2, account, -1, SQLITE_TRANSIENT),
                error_code, handle_error);
 
        sql_ret = sqlite3_step(stmt);
@@ -274,7 +273,9 @@ int _uam_db_insert_user_info(int *user_id, const char *name, const char *account
                goto handle_error;
        }
 
-       max_user_id = max_user_id + 1;
+       if (_uam_db_get_max_user_id() != UAM_ERROR_NONE)
+               goto handle_error;
+
        *user_id = max_user_id;
        UAM_DBG("User info inserted [%d]", *user_id);