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>
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,
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 (
);
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 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)
{
{
FUNC_ENTRY;
- FINALIZE(select_max_ibeacon_id);
FINALIZE(select_all_advs);
FUNC_EXIT;
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);
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;
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;
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);
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);
#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
#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 = ?"
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;
static sqlite3_stmt *insert_device_info;
extern sqlite3 *database_handle;
-static int max_device_number;
static void __uam_device_finalize_delete(void)
{
FINALIZE(select_all_devices);
FINALIZE(select_device);
FINALIZE(select_device_number);
- FINALIZE(select_max_device_number);
FUNC_EXIT;
}
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;
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;
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;
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) {
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);
"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 = ?"
/* 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;
static sqlite3_stmt *insert_service_info;
extern sqlite3 *database_handle;
-static int max_service_number;
static void __uam_service_finalize_delete(void)
{
FINALIZE(select_all_services);
FINALIZE(select_service);
- FINALIZE(select_max_service_number);
FUNC_EXIT;
}
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;
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;
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;
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);
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);
#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 "
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);
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);