INCLUDE_DIRECTORIES(${CMAKE_SOURCE_DIR}/include)
INCLUDE(FindPkgConfig)
-pkg_check_modules(pkgs REQUIRED sqlite3 db-util libtzplatform-config bundle aul gio-2.0 glib-2.0)
+pkg_check_modules(pkgs REQUIRED sqlite3 libtzplatform-config bundle aul gio-2.0 glib-2.0)
FOREACH(flag ${pkgs_CFLAGS})
SET(EXTRA_CFLAGS "${EXTRA_CFLAGS} ${flag}")
BuildRequires: sqlite3
BuildRequires: pkgconfig(bundle)
BuildRequires: pkgconfig(aul)
-BuildRequires: pkgconfig(db-util)
BuildRequires: pkgconfig(sqlite3)
BuildRequires: pkgconfig(libtzplatform-config)
BuildRequires: pkgconfig(gio-2.0)
#include <string.h>
#include <unistd.h>
-#include <db-util.h>
+#include <sqlite3.h>
#include <aul.h>
#include <dlog.h>
API int rua_history_load_db_for_uid(char ***table, int *nrows, int *ncols, uid_t uid)
{
+ static const char query[] =
+ "SELECT pkg_name, app_path, arg, launch_time, instance_id,"
+ " instance_name, icon, uri "
+ "FROM rua_history ORDER BY launch_time DESC";
int r;
- char query[QUERY_MAXLEN];
char *db_err = NULL;
char **db_result = NULL;
sqlite3 *db = NULL;
- if (table == NULL)
- return -1;
- if (nrows == NULL)
- return -1;
- if (ncols == NULL)
+ if (table == NULL || nrows == NULL || ncols == NULL) {
+ LOGE("invalid parameter");
return -1;
+ }
r = _rua_util_check_uid(uid);
if (r == -1)
if (r != SQLITE_OK)
return -1;
- snprintf(query, sizeof(query),
- "SELECT pkg_name, app_path, arg, launch_time, instance_id, "
- "instance_name, icon, uri FROM %s ORDER BY launch_time DESC;",
- RUA_HISTORY);
-
r = sqlite3_get_table(db, query, &db_result, nrows, ncols, &db_err);
+ if (r != SQLITE_OK) {
+ LOGE("get table failed: %s", sqlite3_errmsg(db));
+ sqlite3_close_v2(db);
+ return -1;
+ }
- if (r == SQLITE_OK)
- *table = db_result;
- else
- sqlite3_free_table(db_result);
+ *table = db_result;
- db_util_close(db);
+ sqlite3_close_v2(db);
return r;
}
API int rua_is_latest_app_for_uid(const char *pkg_name, uid_t uid)
{
+ static const char query[] =
+ "SELECT pkg_name FROM rua_history "
+ "ORDER BY launch_time DESC LIMIT 1";
int r = -1;
sqlite3_stmt *stmt;
const unsigned char *ct;
sqlite3 *db = NULL;
- char *query = "select pkg_name from rua_history order by launch_time desc limit 1;";
if (!pkg_name)
return -1;
if (r != SQLITE_OK)
return -1;
- r = sqlite3_prepare(db, query, sizeof(query), &stmt, NULL);
+ r = sqlite3_prepare(db, query, strlen(query), &stmt, NULL);
if (r != SQLITE_OK) {
- db_util_close(db);
+ sqlite3_close_v2(db);
return -1;
}
r = sqlite3_step(stmt);
- if (r == SQLITE_ROW) {
- ct = sqlite3_column_text(stmt, 0);
- if (ct == NULL || ct[0] == '\0') {
- r = -1;
- goto out;
- }
-
- if (strncmp(pkg_name, (const char *)ct, strlen(pkg_name)) == 0) {
- r = 0;
- goto out;
- }
+ if (r != SQLITE_ROW) {
+ if (r != SQLITE_DONE)
+ LOGE("step failed: %s", sqlite3_errmsg(db));
+ sqlite3_finalize(stmt);
+ sqlite3_close_v2(db);
+ return -1;
}
-out:
- if (stmt)
- sqlite3_finalize(stmt);
- if (db)
- db_util_close(db);
+ ct = sqlite3_column_text(stmt, 0);
+ if (ct == NULL || ct[0] == '\0')
+ r = -1;
+ else if (strncmp(pkg_name, (const char *)ct, strlen(pkg_name)) == 0)
+ r = 0;
+ else
+ r = -1;
+
+ sqlite3_finalize(stmt);
+ sqlite3_close_v2(db);
return r;
}
#include <sys/types.h>
#include <unistd.h>
-#include <db-util.h>
#include <aul.h>
#include <dlog.h>
#include <sqlite3.h>
r = __create_table(db);
if (r) {
- db_util_close(db);
+ sqlite3_close_v2(db);
return NULL;
}
return db;
}
-API int rua_db_delete_history(bundle *b)
+static int __delete_history_with_pkg_name(sqlite3 *db, const char *pkg_name,
+ const char *instance_id)
{
- return rua_usr_db_delete_history(b, getuid());
+ static const char query[] =
+ "DELETE FROM rua_history WHERE pkg_name=? AND instance_id=?";
+ sqlite3_stmt *stmt;
+ int r;
+ int idx = 1;
+
+ r = sqlite3_prepare_v2(db, query, strlen(query), &stmt, NULL);
+ if (r != SQLITE_OK) {
+ LOGE("prepare failed: %s", sqlite3_errmsg(db));
+ sqlite3_close_v2(db);
+ return -1;
+ }
+
+ __BIND_TEXT(db, stmt, idx++, pkg_name);
+ __BIND_TEXT(db, stmt, idx++, instance_id);
+
+ r = sqlite3_step(stmt);
+ if (r != SQLITE_DONE) {
+ LOGE("step failed: %s", sqlite3_errmsg(db));
+ sqlite3_finalize(stmt);
+ return -1;
+ }
+
+ sqlite3_finalize(stmt);
+
+ return 0;
+}
+
+static int __delete_history_with_app_path(sqlite3 *db, const char *app_path,
+ const char *instance_id)
+{
+ static const char query[] =
+ "DELETE FROM rua_history WHERE app_path=? AND instance_id=?";
+ sqlite3_stmt *stmt;
+ int r;
+ int idx = 1;
+
+ r = sqlite3_prepare_v2(db, query, strlen(query), &stmt, NULL);
+ if (r != SQLITE_OK) {
+ LOGE("prepare failed: %s", sqlite3_errmsg(db));
+ sqlite3_close_v2(db);
+ return -1;
+ }
+
+ __BIND_TEXT(db, stmt, idx++, app_path);
+ __BIND_TEXT(db, stmt, idx++, instance_id);
+
+ r = sqlite3_step(stmt);
+ if (r != SQLITE_DONE) {
+ LOGE("step failed: %s", sqlite3_errmsg(db));
+ sqlite3_finalize(stmt);
+ return -1;
+ }
+
+ sqlite3_finalize(stmt);
+
+ return 0;
}
API int rua_usr_db_delete_history(bundle *b, uid_t uid)
{
int r;
- sqlite3 *db = NULL;
- char query[QUERY_MAXLEN];
+ sqlite3 *db;
char *pkg_name = NULL;
char *app_path = NULL;
char *instance_id = NULL;
- char *errmsg = NULL;
- int result = 0;
db = __db_init(uid);
if (db == NULL) {
}
if (pkg_name) {
- snprintf(query, sizeof(query),
- "DELETE FROM rua_history WHERE pkg_name = '%s' "
- "AND instance_id = '%s';",
- pkg_name, instance_id ? instance_id : "");
+ LOGI("rua_delete_history_from_db : %s", pkg_name);
+ r = __delete_history_with_pkg_name(db, pkg_name, instance_id);
} else if (app_path) {
- snprintf(query, sizeof(query),
- "DELETE FROM rua_history WHERE app_path = '%s' "
- "AND instance_id = '%s';",
- app_path, instance_id ? instance_id : "");
+ LOGI("rua_delete_history_from_db : %s", app_path);
+ r = __delete_history_with_app_path(db, app_path, instance_id);
} else {
- snprintf(query, sizeof(query), "DELETE FROM rua_history;");
+ LOGE("No data to delete history");
+ return -1;
}
- LOGI("rua_delete_history_from_db : %s", query);
- r = sqlite3_exec(db, query, NULL, NULL, &errmsg);
-
- if (r != SQLITE_OK) {
- LOGE("fail to exec delete query %s : %s", query, errmsg);
- sqlite3_free(errmsg);
- result = -1;
- }
+ sqlite3_close_v2(db);
r = rua_dbus_send_update_signal(DELETE);
if (r == -1) {
LOGE("[RUA SEND SIGNAL ERROR] \n");
- db_util_close(db);
return -1;
}
- if (db != NULL)
- db_util_close(db);
+ return 0;
+}
+
+API int rua_db_delete_history(bundle *b)
+{
+ return rua_usr_db_delete_history(b, getuid());
+}
+
+static int __insert_history(sqlite3 *db, struct rua_rec *rec)
+{
+ static const char query[] =
+ "INSERT OR REPLACE INTO rua_history ("
+ " pkg_name, app_path, arg, launch_time,"
+ " instance_id, instance_name, icon, uri) "
+ "VALUES (?, ?, ?, ?, ?, ?, ?, ?)";
+ int r;
+ sqlite3_stmt *stmt;
+ int idx = 1;
+
+ r = sqlite3_prepare_v2(db, query, strlen(query), &stmt, NULL);
+ if (r != SQLITE_OK) {
+ LOGE("prepare failed: %s", sqlite3_errmsg(db));
+ return -1;
+ }
+
+ __BIND_TEXT(db, stmt, idx++, rec->pkg_name);
+ __BIND_TEXT(db, stmt, idx++, rec->app_path);
+ __BIND_TEXT(db, stmt, idx++, rec->arg ? rec->arg : "");
+ __BIND_INT(db, stmt, idx++, (int)rec->launch_time);
+ __BIND_TEXT(db, stmt, idx++, rec->instance_id ? rec->instance_id : "");
+ __BIND_TEXT(db, stmt, idx++,
+ rec->instance_name ? rec->instance_name : "");
+ __BIND_TEXT(db, stmt, idx++, rec->icon ? rec->icon : "");
+ __BIND_TEXT(db, stmt, idx++, rec->uri ? rec->uri : "");
+
+ r = sqlite3_step(stmt);
+ if (r != SQLITE_DONE) {
+ LOGE("step failed: %s", sqlite3_errmsg(db));
+ sqlite3_finalize(stmt);
+ return -1;
+ }
+
+ sqlite3_finalize(stmt);
- return result;
+ return 0;
}
-API int rua_db_add_history(struct rua_rec *rec)
+static int __update_history(sqlite3 *db, struct rua_rec *rec)
{
- return rua_usr_db_add_history(rec, getuid());
+ static const char query[] =
+ "UPDATE rua_history SET launch_time=? "
+ "WHERE pkg_name=? AND instance_id=?";
+ int r;
+ sqlite3_stmt *stmt;
+ int idx = 1;
+
+ r = sqlite3_prepare_v2(db, query, strlen(query), &stmt, NULL);
+ if (r != SQLITE_OK) {
+ LOGE("prepare failed: %s", sqlite3_errmsg(db));
+ return -1;
+ }
+
+ __BIND_INT(db, stmt, idx++, (int)rec->launch_time);
+ __BIND_TEXT(db, stmt, idx++, rec->pkg_name);
+ __BIND_TEXT(db, stmt, idx++, rec->instance_id);
+
+ r = sqlite3_step(stmt);
+ if (r != SQLITE_DONE) {
+ LOGE("step failed: %s", sqlite3_errmsg(db));
+ sqlite3_finalize(stmt);
+ return -1;
+ }
+
+ sqlite3_finalize(stmt);
+
+ return 0;
}
API int rua_usr_db_add_history(struct rua_rec *rec, uid_t uid)
{
int r;
- char query[QUERY_MAXLEN];
sqlite3 *db;
if (rec == NULL || rec->pkg_name == NULL || rec->app_path == NULL) {
if (rec->instance_id &&
(rec->instance_name == NULL || rec->icon == NULL ||
- rec->uri == NULL)) {
- snprintf(query, sizeof(query),
- "UPDATE %s SET launch_time = %d "
- "WHERE pkg_name = %s AND instance_id = %s;",
- RUA_HISTORY,
- (int)rec->launch_time,
- rec->pkg_name,
- rec->instance_id);
- } else {
- snprintf(query, sizeof(query),
- "INSERT OR REPLACE INTO %s "
- "(pkg_name, app_path, arg, launch_time, "
- "instance_id, instance_name, icon, uri) "
- "VALUES (\"%s\", \"%s\", \"%s\", %d, "
- "\"%s\", \"%s\", \"%s\", \"%s\");",
- RUA_HISTORY,
- rec->pkg_name,
- rec->app_path,
- rec->arg ? rec->arg : "",
- (int)rec->launch_time,
- rec->instance_id ? rec->instance_id : "",
- rec->instance_name ? rec->instance_name : "",
- rec->icon ? rec->icon : "",
- rec->uri ? rec->uri : "");
- }
-
- r = __exec(db, query);
- if (r == -1) {
- LOGE("[RUA ADD HISTORY ERROR] %s\n", query);
- db_util_close(db);
- return -1;
- }
+ rec->uri == NULL))
+ r = __update_history(db, rec);
+ else
+ r = __insert_history(db, rec);
r = rua_dbus_send_update_signal(ADD);
if (r == -1) {
LOGE("[RUA SEND SIGNAL ERROR] \n");
- db_util_close(db);
+ sqlite3_close_v2(db);
return -1;
}
- db_util_close(db);
+ sqlite3_close_v2(db);
return r;
}
+
+API int rua_db_add_history(struct rua_rec *rec)
+{
+ return rua_usr_db_add_history(rec, getuid());
+}
#ifndef __RUA_PRIVATE_H__
#define __RUA_PRIVATE_H__
-#include <sqlite3.h>
-
#ifdef LOG_TAG
#undef LOG_TAG
#endif
#endif
#define RUA_DB_NAME ".rua.db"
-#define RUA_HISTORY "rua_history"
#define RUA_STAT_DB_NAME ".rua_stat.db"
-#define QUERY_MAXLEN 4096
-
-int _rua_stat_init(sqlite3 **db, char *db_name, int flags, uid_t uid);
#endif /*__RUA_H__*/
#include <unistd.h>
#include <sys/types.h>
-#include <db-util.h>
+#include <sqlite3.h>
#include <aul.h>
#include <dlog.h>
return r;
}
-API int rua_stat_get_stat_tags_for_uid(char *caller,
- int (*rua_stat_tag_iter_fn)(const char *rua_stat_tag, void *data),
+static int __get_stat_tags_for_uid(sqlite3 *db, const char *caller,
+ int (*rua_stat_tag_iter_fn)(
+ const char *rua_stat_tag, void *data),
void *data, uid_t uid)
{
+ static const char query[] =
+ "SELECT rua_stat_tag FROM rua_panel_stat "
+ "WHERE caller_panel=? ORDER BY score DESC";
int r;
sqlite3_stmt *stmt;
- char query[QUERY_MAXLEN];
const unsigned char *ct;
- sqlite3 *db = NULL;
-
- r = _rua_util_check_uid(uid);
- if (r == -1)
- return r;
-
- r = _rua_stat_init(&db, RUA_STAT_DB_NAME, SQLITE_OPEN_READONLY, uid);
- if (r == -1) {
- LOGE("__rua_stat_init fail");
- return -1;
- }
- sqlite3_snprintf(QUERY_MAXLEN, query,
- "SELECT rua_stat_tag FROM rua_panel_stat WHERE caller_panel = ? ORDER BY score DESC");
-
- r = sqlite3_prepare(db, query, sizeof(query), &stmt, NULL);
+ r = sqlite3_prepare(db, query, strlen(query), &stmt, NULL);
if (r != SQLITE_OK) {
- LOGE("sqlite3_prepare error(%d , %d, %s)", r, sqlite3_extended_errcode(db), sqlite3_errmsg(db));
- goto out;
+ LOGE("prepare failed: %s", sqlite3_errmsg(db));
+ return -1;
}
- r = sqlite3_bind_text(stmt, 1, caller, strlen(caller), SQLITE_STATIC);
- if (r != SQLITE_OK) {
- LOGE("caller bind error(%d) \n", r);
- goto out;
- }
+ __BIND_TEXT(db, stmt, 1, caller);
while (sqlite3_step(stmt) == SQLITE_ROW) {
ct = sqlite3_column_text(stmt, 0);
rua_stat_tag_iter_fn((const char *)ct, data);
}
-out:
- if (stmt)
- sqlite3_finalize(stmt);
+ sqlite3_finalize(stmt);
+
+ return r;
+}
+
+API int rua_stat_get_stat_tags_for_uid(char *caller,
+ int (*rua_stat_tag_iter_fn)(const char *rua_stat_tag, void *data),
+ void *data, uid_t uid)
+{
+ int r;
+ sqlite3 *db;
+
+ r = _rua_util_check_uid(uid);
+ if (r == -1)
+ return r;
+
+ r = _rua_util_open_db(&db, SQLITE_OPEN_READONLY, uid, RUA_STAT_DB_NAME);
+ if (r == -1) {
+ LOGE("open rua stat db failed");
+ return -1;
+ }
+
+ r = __get_stat_tags_for_uid(db, caller, rua_stat_tag_iter_fn, data,
+ uid);
- if (db)
- db_util_close(db);
+ sqlite3_close_v2(db);
return r;
}
#include <stdlib.h>
#include <string.h>
-#include <db-util.h>
#include <dlog.h>
#include <sqlite3.h>
int __rua_stat_insert(sqlite3 *db, char *caller, char *rua_stat_tag)
{
+ static const char query[] =
+ "INSERT INTO rua_panel_stat ("
+ " caller_panel, rua_stat_tag, score) "
+ "VALUES (?, ?, ?)";
int r;
- char query[QUERY_MAXLEN];
- sqlite3_stmt *stmt = NULL;
-
- sqlite3_snprintf(QUERY_MAXLEN, query,
- "INSERT INTO rua_panel_stat (caller_panel, rua_stat_tag, score) VALUES (?,?,?)");
+ sqlite3_stmt *stmt;
+ int idx = 1;
r = sqlite3_prepare(db, query, sizeof(query), &stmt, NULL);
if (r != SQLITE_OK) {
- LOGE("sqlite3_prepare error(%d , %d, %s)", r, sqlite3_extended_errcode(db), sqlite3_errmsg(db));
- goto out;
- }
-
- r = sqlite3_bind_text(stmt, 1, caller, strlen(caller), SQLITE_STATIC);
- if (r != SQLITE_OK) {
- LOGE("caller bind error(%d) \n", r);
- goto out;
- }
-
- r = sqlite3_bind_text(stmt, 2, rua_stat_tag, strlen(rua_stat_tag), SQLITE_STATIC);
- if (r != SQLITE_OK) {
- LOGE("rua_stat_tag bind error(%d) \n", r);
- goto out;
+ LOGE("prepare failed: %s", sqlite3_errmsg(db));
+ return -1;
}
- r = sqlite3_bind_int(stmt, 3, WIN_SCORE);
- if (r != SQLITE_OK) {
- LOGE("arg bind error(%d) \n", r);
- goto out;
- }
+ __BIND_TEXT(db, stmt, idx++, caller);
+ __BIND_TEXT(db, stmt, idx++, rua_stat_tag);
+ __BIND_INT(db, stmt, idx++, WIN_SCORE);
r = sqlite3_step(stmt);
if (r != SQLITE_DONE) {
- LOGE("step error(%d) \n", r);
- goto out;
+ LOGE("step failed: %s", sqlite3_errmsg(db));
+ sqlite3_finalize(stmt);
+ return -1;
}
-out:
- if (stmt)
- sqlite3_finalize(stmt);
+ sqlite3_finalize(stmt);
return r;
}
int __rua_stat_lose_score_update(sqlite3 *db, char *caller, char *rua_stat_tag)
{
+ static const char query[] =
+ "UPDATE rua_panel_stat SET score=score*? "
+ "WHERE caller_panel=? AND rua_stat_tag!=?";
int r;
- char query[QUERY_MAXLEN];
- sqlite3_stmt *stmt = NULL;
-
- sqlite3_snprintf(QUERY_MAXLEN, query,
- "UPDATE rua_panel_stat SET score = score * %f WHERE caller_panel = ? AND rua_stat_tag != ?",
- LOSE_SCORE_RATE);
+ sqlite3_stmt *stmt;
+ int idx = 1;
- LOGD("lose score update sql : %s", query);
+ LOGD("lose score update sql: %s, %s", caller, rua_stat_tag);
r = sqlite3_prepare(db, query, sizeof(query), &stmt, NULL);
if (r != SQLITE_OK) {
- LOGE("sqlite3_prepare error(%d , %d, %s)", r, sqlite3_extended_errcode(db), sqlite3_errmsg(db));
- goto out;
+ LOGE("prepare failed: %s", sqlite3_errmsg(db));
+ return r;
}
- r = sqlite3_bind_text(stmt, 1, caller, strlen(caller), SQLITE_STATIC);
- if (r != SQLITE_OK) {
- LOGE("caller bind error(%d) \n", r);
- goto out;
- }
-
- r = sqlite3_bind_text(stmt, 2, rua_stat_tag, strlen(rua_stat_tag), SQLITE_STATIC);
- if (r != SQLITE_OK) {
- LOGE("rua_stat_tag bind error(%d) \n", r);
- goto out;
- }
+ __BIND_DOUBLE(db, stmt, idx++, LOSE_SCORE_RATE);
+ __BIND_TEXT(db, stmt, idx++, caller);
+ __BIND_TEXT(db, stmt, idx++, rua_stat_tag);
r = sqlite3_step(stmt);
if (r != SQLITE_DONE) {
- LOGE("step error(%d) \n", r);
- goto out;
+ LOGE("step failed: %s", sqlite3_errmsg(db));
+ sqlite3_finalize(stmt);
+ return r;
}
-out:
- if (stmt)
- sqlite3_finalize(stmt);
+ sqlite3_finalize(stmt);
return r;
}
int __rua_stat_win_score_update(sqlite3 *db, char *caller, char *rua_stat_tag)
{
+ static const char query[] =
+ "UPDATE rua_panel_stat SET score=score+? "
+ "WHERE caller_panel=? AND rua_stat_tag=?";
int r;
- char query[QUERY_MAXLEN];
- sqlite3_stmt *stmt = NULL;
-
- sqlite3_snprintf(QUERY_MAXLEN, query,
- "UPDATE rua_panel_stat SET score = score + %d WHERE caller_panel = ? AND rua_stat_tag = ?",
- WIN_SCORE);
+ sqlite3_stmt *stmt;
+ int idx = 1;
- LOGD("win score update sql : %s", query);
+ LOGD("win score update sql: %s, %s", caller, rua_stat_tag);
r = sqlite3_prepare(db, query, sizeof(query), &stmt, NULL);
if (r != SQLITE_OK) {
- LOGE("sqlite3_prepare error(%d , %d, %s)", r, sqlite3_extended_errcode(db), sqlite3_errmsg(db));
- goto out;
+ LOGE("prepare failed: %s", sqlite3_errmsg(db));
+ return r;
}
- r = sqlite3_bind_text(stmt, 1, caller, strlen(caller), SQLITE_STATIC);
- if (r != SQLITE_OK) {
- LOGE("caller bind error(%d) \n", r);
- goto out;
- }
-
- r = sqlite3_bind_text(stmt, 2, rua_stat_tag, strlen(rua_stat_tag), SQLITE_STATIC);
- if (r != SQLITE_OK) {
- LOGE("rua_stat_tag bind error(%d) \n", r);
- goto out;
- }
+ __BIND_INT(db, stmt, idx++, WIN_SCORE);
+ __BIND_TEXT(db, stmt, idx++, caller);
+ __BIND_TEXT(db, stmt, idx++, rua_stat_tag);
r = sqlite3_step(stmt);
if (r != SQLITE_DONE) {
- LOGE("step error(%d) \n", r);
- goto out;
+ LOGE("step failed: %s", sqlite3_errmsg(db));
+ sqlite3_finalize(stmt);
+ return r;
}
-out:
- if (stmt)
- sqlite3_finalize(stmt);
+ sqlite3_finalize(stmt);
return r;
}
-static int __exec(sqlite3 *db, char *query)
+static int __create_table(sqlite3 *db)
{
int r;
char *errmsg = NULL;
- if (db == NULL)
- return -1;
-
- r = sqlite3_exec(db, query, NULL, NULL, &errmsg);
+ r = sqlite3_exec(db, CREATE_RUA_STAT_TABLE, NULL, NULL, &errmsg);
if (r != SQLITE_OK) {
- SECURE_LOGE("query(%s) exec error(%s)", query, errmsg);
+ LOGE("create table failed: %s", errmsg);
sqlite3_free(errmsg);
return -1;
}
return 0;
}
-static int __create_table(sqlite3 *db)
-{
- int r;
-
- r = __exec(db, CREATE_RUA_STAT_TABLE);
- if (r == -1) {
- LOGE("create table error");
- return -1;
- }
-
- return 0;
-}
-
-int _rua_stat_init(sqlite3 **db, char *db_name, int flags, uid_t uid)
-{
- int r;
-
- r = _rua_util_open_db(db, flags, uid, db_name);
- r = __create_table(*db);
- if (r) {
- db_util_close(*db);
- return -1;
- }
-
- if (*db == NULL) {
- LOGE("__rua_stat_init error");
- return -1;
- }
- return 0;
-}
-
API int rua_stat_usr_db_update(char *caller, char *rua_stat_tag, uid_t uid)
{
int r;
int affected_rows = 0;
- sqlite3 *db = NULL;
+ sqlite3 *db;
LOGD("rua_stat_update start");
- r = _rua_stat_init(&db, RUA_STAT_DB_NAME,
- SQLITE_OPEN_CREATE | SQLITE_OPEN_READWRITE,
- uid);
- if (r == -1) {
- LOGE("__rua_stat_init fail");
+ if (caller == NULL || rua_stat_tag == NULL) {
+ LOGE("invalid parameter");
return -1;
}
- if (db == NULL) {
- LOGE("rua_stat is not initialized");
- return -1;
- }
-
- if (caller == NULL) {
- LOGE("caller is null");
+ r = _rua_util_open_db(&db, SQLITE_OPEN_CREATE | SQLITE_OPEN_READWRITE,
+ uid, RUA_STAT_DB_NAME);
+ if (r == -1) {
+ LOGE("open rua stat db failed");
return -1;
}
- if (rua_stat_tag == NULL) {
- LOGE("rua_stat_tag is null");
+ r = __create_table(db);
+ if (r == -1) {
+ LOGE("create rua stat tabale failed");
return -1;
}
r = __rua_stat_lose_score_update(db, caller, rua_stat_tag);
if (r != SQLITE_DONE) {
- LOGE("__rua_stat_lose_score_insert fail.");
+ LOGE("__rua_stat_lose_score_insert failed");
return -1;
}
r = __rua_stat_insert(db, caller, rua_stat_tag);
if (r != SQLITE_DONE) {
- LOGE("__rua_stat_insert fail.");
+ LOGE("__rua_stat_insert failed");
return -1;
}
}
- if (db)
- db_util_close(db);
+
+ sqlite3_close_v2(db);
LOGD("rua_stat_update done");
+
return r;
}
#include <pwd.h>
#include <sys/stat.h>
-#include <db-util.h>
+#include <sqlite3.h>
#include <tzplatform_config.h>
#include <dlog.h>
return strdup(db_path);
}
+#define BUSY_WAITING_USEC (1000000 / 10 / 2) /* 0.05 sec */
+#define BUSY_WAITING_MAX 20 /* wait for max 1 sec */
+static int __db_busy_handler(void *data, int count)
+{
+ /* sqlite3_prepare_V2 will return SQLITE_BUSY */
+ if (count >= BUSY_WAITING_MAX)
+ return 0;
+
+ usleep(BUSY_WAITING_USEC);
+
+ return 1;
+}
+
int _rua_util_open_db(sqlite3 **db, int flags, uid_t uid, char *db_name)
{
int r;
return -1;
}
- r = db_util_open_with_options(db_path, db, flags, NULL);
- if (r) {
- LOGE("db util open error(%d/%d/%d/%s)", r,
- sqlite3_errcode(*db),
- sqlite3_extended_errcode(*db),
- sqlite3_errmsg(*db));
- free(db_path);
+ r = sqlite3_open_v2(db_path, db, flags, NULL);
+ free(db_path);
+ if (r != SQLITE_OK) {
+ LOGE("open db failed: %d", r);
return -1;
}
- free(db_path);
+ r = sqlite3_busy_handler(*db, __db_busy_handler, NULL);
+ if (r != SQLITE_OK) {
+ LOGE("register busy handler failed: %s", sqlite3_errmsg(*db));
+ return -1;
+ }
- return r;
+ return 0;
}
int _rua_util_check_uid(uid_t target_uid)
#include <sqlite3.h>
+#define __BIND_TEXT(db, stmt, i, text) \
+do { \
+ if (sqlite3_bind_text(stmt, i, text, -1, SQLITE_STATIC) != SQLITE_OK) {\
+ LOGE("bind error(index %d): %s", i, sqlite3_errmsg(db)); \
+ sqlite3_finalize(stmt); \
+ return -1; \
+ } \
+} while (0)
+
+#define __BIND_INT(db, stmt, i, int) \
+do { \
+ if (sqlite3_bind_int(stmt, i, int) != SQLITE_OK) { \
+ LOGE("bind error(index %d): %s", i, sqlite3_errmsg(db)); \
+ sqlite3_finalize(stmt); \
+ return -1; \
+ } \
+} while (0)
+
+#define __BIND_DOUBLE(db, stmt, i, double) \
+do { \
+ if (sqlite3_bind_double(stmt, i, double) != SQLITE_OK) { \
+ LOGE("bind error(index %d): %s", i, sqlite3_errmsg(db)); \
+ sqlite3_finalize(stmt); \
+ return -1; \
+ } \
+} while (0)
+
char *_rua_util_get_db_path(uid_t uid, char *db_name);
int _rua_util_open_db(sqlite3 **db, int flags, uid_t uid, char *db_name);
int _rua_util_check_uid(uid_t target_uid);