Release version 0.5.9
[platform/core/appfw/librua.git] / src / rua_stat_internal.c
index 38c3a06..3f8110b 100644 (file)
 #include <stdlib.h>
 #include <string.h>
 
-#include <db-util.h>
+#include <dlog.h>
+#include <sqlite3.h>
 
 #include "db-schema.h"
-#include "rua_stat_internal.h"
 #include "rua_util.h"
+#include "rua_private.h"
+
+#define WIN_SCORE 100
+#define LOSE_SCORE_RATE 0.7f
 
 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_stmt *stmt;
+       int idx = 1;
 
-       sqlite3_snprintf(QUERY_MAXLEN, query,
-               "UPDATE rua_panel_stat SET score = score * %f WHERE caller_panel = ? AND rua_stat_tag != ?",
-               LOSE_SCORE_RATE);
-
-       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;
-       }
-
-       r = sqlite3_bind_text(stmt, 1, caller, strlen(caller), SQLITE_STATIC);
-       if (r != SQLITE_OK) {
-               LOGE("caller bind error(%d) \n", r);
-               goto out;
+               LOGE("prepare failed: %s", sqlite3_errmsg(db));
+               return r;
        }
 
-       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_stmt *stmt;
+       int idx = 1;
 
-       sqlite3_snprintf(QUERY_MAXLEN, query,
-               "UPDATE rua_panel_stat SET score = score + %d WHERE caller_panel = ? AND rua_stat_tag = ?",
-               WIN_SCORE);
-
-       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;
-       }
-
-       r = sqlite3_bind_text(stmt, 1, caller, strlen(caller), SQLITE_STATIC);
-       if (r != SQLITE_OK) {
-               LOGE("caller bind error(%d) \n", r);
-               goto out;
+               LOGE("prepare failed: %s", sqlite3_errmsg(db));
+               return r;
        }
 
-       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;
        }
@@ -174,68 +141,35 @@ static int __exec(sqlite3 *db, char *query)
        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;
-}
-
-int rua_stat_db_update(char *caller, char *rua_stat_tag)
+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, getuid());
-       if (r == -1) {
-               LOGE("__rua_stat_init fail");
-               return -1;
-       }
-
-       if (db == NULL) {
-               LOGE("rua_stat is not initialized");
+       if (caller == NULL || rua_stat_tag == NULL) {
+               LOGE("invalid parameter");
                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;
        }
 
@@ -245,13 +179,18 @@ int rua_stat_db_update(char *caller, char *rua_stat_tag)
                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;
 }
 
+API int rua_stat_db_update(char *caller, char *rua_stat_tag)
+{
+       return rua_stat_usr_db_update(caller, rua_stat_tag, getuid());
+}