2 * Copyright (c) 2016 Samsung Electronics Co., Ltd. All rights reserved.
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://www.apache.org/licenses/LICENSE-2.0
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
17 #include <sys/types.h>
25 #include "db-schema.h"
27 #include "rua_private.h"
30 #define LOSE_SCORE_RATE 0.7f
32 int __rua_stat_insert(sqlite3 *db, char *caller, char *rua_stat_tag)
34 static const char query[] =
35 "INSERT INTO rua_panel_stat ("
36 " caller_panel, rua_stat_tag, score) "
42 r = sqlite3_prepare(db, query, sizeof(query), &stmt, NULL);
44 LOGE("prepare failed: %s", sqlite3_errmsg(db));
48 __BIND_TEXT(db, stmt, idx++, caller);
49 __BIND_TEXT(db, stmt, idx++, rua_stat_tag);
50 __BIND_INT(db, stmt, idx++, WIN_SCORE);
52 r = sqlite3_step(stmt);
53 if (r != SQLITE_DONE) {
54 LOGE("step failed: %s", sqlite3_errmsg(db));
55 sqlite3_finalize(stmt);
59 sqlite3_finalize(stmt);
64 int __rua_stat_lose_score_update(sqlite3 *db, char *caller, char *rua_stat_tag)
66 static const char query[] =
67 "UPDATE rua_panel_stat SET score=score*? "
68 "WHERE caller_panel=? AND rua_stat_tag!=?";
73 LOGD("lose score update sql: %s, %s", caller, rua_stat_tag);
74 r = sqlite3_prepare(db, query, sizeof(query), &stmt, NULL);
76 LOGE("prepare failed: %s", sqlite3_errmsg(db));
80 __BIND_DOUBLE(db, stmt, idx++, LOSE_SCORE_RATE);
81 __BIND_TEXT(db, stmt, idx++, caller);
82 __BIND_TEXT(db, stmt, idx++, rua_stat_tag);
84 r = sqlite3_step(stmt);
85 if (r != SQLITE_DONE) {
86 LOGE("step failed: %s", sqlite3_errmsg(db));
87 sqlite3_finalize(stmt);
91 sqlite3_finalize(stmt);
96 int __rua_stat_win_score_update(sqlite3 *db, char *caller, char *rua_stat_tag)
98 static const char query[] =
99 "UPDATE rua_panel_stat SET score=score+? "
100 "WHERE caller_panel=? AND rua_stat_tag=?";
105 LOGD("win score update sql: %s, %s", caller, rua_stat_tag);
107 r = sqlite3_prepare(db, query, sizeof(query), &stmt, NULL);
108 if (r != SQLITE_OK) {
109 LOGE("prepare failed: %s", sqlite3_errmsg(db));
113 __BIND_INT(db, stmt, idx++, WIN_SCORE);
114 __BIND_TEXT(db, stmt, idx++, caller);
115 __BIND_TEXT(db, stmt, idx++, rua_stat_tag);
117 r = sqlite3_step(stmt);
118 if (r != SQLITE_DONE) {
119 LOGE("step failed: %s", sqlite3_errmsg(db));
120 sqlite3_finalize(stmt);
124 sqlite3_finalize(stmt);
129 static int __create_table(sqlite3 *db)
134 r = sqlite3_exec(db, CREATE_RUA_STAT_TABLE, NULL, NULL, &errmsg);
135 if (r != SQLITE_OK) {
136 LOGE("create table failed: %s", errmsg);
137 sqlite3_free(errmsg);
144 API int rua_stat_usr_db_update(char *caller, char *rua_stat_tag, uid_t uid)
147 int affected_rows = 0;
150 LOGD("rua_stat_update start");
152 if (caller == NULL || rua_stat_tag == NULL) {
153 LOGE("invalid parameter");
157 r = _rua_util_open_db(&db, SQLITE_OPEN_CREATE | SQLITE_OPEN_READWRITE,
158 uid, RUA_STAT_DB_NAME);
160 LOGE("open rua stat db failed");
164 r = __create_table(db);
166 LOGE("create rua stat tabale failed");
170 r = __rua_stat_lose_score_update(db, caller, rua_stat_tag);
171 if (r != SQLITE_DONE) {
172 LOGE("__rua_stat_lose_score_insert failed");
176 r = __rua_stat_win_score_update(db, caller, rua_stat_tag);
177 affected_rows = sqlite3_changes(db);
178 if ((r != SQLITE_DONE) || (affected_rows == 0)) {
179 r = __rua_stat_insert(db, caller, rua_stat_tag);
181 if (r != SQLITE_DONE) {
182 LOGE("__rua_stat_insert failed");
187 sqlite3_close_v2(db);
188 LOGD("rua_stat_update done");
193 API int rua_stat_db_update(char *caller, char *rua_stat_tag)
195 return rua_stat_usr_db_update(caller, rua_stat_tag, getuid());