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>
24 #include "db-schema.h"
25 #include "rua_stat_internal.h"
28 int __rua_stat_insert(sqlite3 *db, char *caller, char *rua_stat_tag)
31 char query[QUERY_MAXLEN];
32 sqlite3_stmt *stmt = NULL;
34 sqlite3_snprintf(QUERY_MAXLEN, query,
35 "INSERT INTO rua_panel_stat (caller_panel, rua_stat_tag, score) VALUES (?,?,?)");
37 r = sqlite3_prepare(db, query, sizeof(query), &stmt, NULL);
39 LOGE("sqlite3_prepare error(%d , %d, %s)", r, sqlite3_extended_errcode(db), sqlite3_errmsg(db));
43 r = sqlite3_bind_text(stmt, 1, caller, strlen(caller), SQLITE_STATIC);
45 LOGE("caller bind error(%d) \n", r);
49 r = sqlite3_bind_text(stmt, 2, rua_stat_tag, strlen(rua_stat_tag), SQLITE_STATIC);
51 LOGE("rua_stat_tag bind error(%d) \n", r);
55 r = sqlite3_bind_int(stmt, 3, WIN_SCORE);
57 LOGE("arg bind error(%d) \n", r);
61 r = sqlite3_step(stmt);
62 if (r != SQLITE_DONE) {
63 LOGE("step error(%d) \n", r);
69 sqlite3_finalize(stmt);
74 int __rua_stat_lose_score_update(sqlite3 *db, char *caller, char *rua_stat_tag)
77 char query[QUERY_MAXLEN];
78 sqlite3_stmt *stmt = NULL;
80 sqlite3_snprintf(QUERY_MAXLEN, query,
81 "UPDATE rua_panel_stat SET score = score * %f WHERE caller_panel = ? AND rua_stat_tag != ?",
84 LOGD("lose score update sql : %s", query);
85 r = sqlite3_prepare(db, query, sizeof(query), &stmt, NULL);
87 LOGE("sqlite3_prepare error(%d , %d, %s)", r, sqlite3_extended_errcode(db), sqlite3_errmsg(db));
91 r = sqlite3_bind_text(stmt, 1, caller, strlen(caller), SQLITE_STATIC);
93 LOGE("caller bind error(%d) \n", r);
97 r = sqlite3_bind_text(stmt, 2, rua_stat_tag, strlen(rua_stat_tag), SQLITE_STATIC);
99 LOGE("rua_stat_tag bind error(%d) \n", r);
103 r = sqlite3_step(stmt);
104 if (r != SQLITE_DONE) {
105 LOGE("step error(%d) \n", r);
111 sqlite3_finalize(stmt);
116 int __rua_stat_win_score_update(sqlite3 *db, char *caller, char *rua_stat_tag)
119 char query[QUERY_MAXLEN];
120 sqlite3_stmt *stmt = NULL;
122 sqlite3_snprintf(QUERY_MAXLEN, query,
123 "UPDATE rua_panel_stat SET score = score + %d WHERE caller_panel = ? AND rua_stat_tag = ?",
126 LOGD("win score update sql : %s", query);
128 r = sqlite3_prepare(db, query, sizeof(query), &stmt, NULL);
129 if (r != SQLITE_OK) {
130 LOGE("sqlite3_prepare error(%d , %d, %s)", r, sqlite3_extended_errcode(db), sqlite3_errmsg(db));
134 r = sqlite3_bind_text(stmt, 1, caller, strlen(caller), SQLITE_STATIC);
135 if (r != SQLITE_OK) {
136 LOGE("caller bind error(%d) \n", r);
140 r = sqlite3_bind_text(stmt, 2, rua_stat_tag, strlen(rua_stat_tag), SQLITE_STATIC);
141 if (r != SQLITE_OK) {
142 LOGE("rua_stat_tag bind error(%d) \n", r);
146 r = sqlite3_step(stmt);
147 if (r != SQLITE_DONE) {
148 LOGE("step error(%d) \n", r);
154 sqlite3_finalize(stmt);
159 static int __exec(sqlite3 *db, char *query)
167 r = sqlite3_exec(db, query, NULL, NULL, &errmsg);
168 if (r != SQLITE_OK) {
169 SECURE_LOGE("query(%s) exec error(%s)", query, errmsg);
170 sqlite3_free(errmsg);
177 static int __create_table(sqlite3 *db)
181 r = __exec(db, CREATE_RUA_STAT_TABLE);
183 LOGE("create table error");
190 int _rua_stat_init(sqlite3 **db, char *db_name, int flags, uid_t uid)
193 r = _rua_util_open_db(db, flags, uid, db_name);
194 r = __create_table(*db);
201 LOGE("__rua_stat_init error");
207 int rua_stat_db_update(char *caller, char *rua_stat_tag)
210 int affected_rows = 0;
213 LOGD("rua_stat_update start");
215 r = _rua_stat_init(&db, RUA_STAT_DB_NAME, SQLITE_OPEN_CREATE | SQLITE_OPEN_READWRITE, getuid());
217 LOGE("__rua_stat_init fail");
222 LOGE("rua_stat is not initialized");
226 if (caller == NULL) {
227 LOGE("caller is null");
231 if (rua_stat_tag == NULL) {
232 LOGE("rua_stat_tag is null");
236 r = __rua_stat_lose_score_update(db, caller, rua_stat_tag);
237 if (r != SQLITE_DONE) {
238 LOGE("__rua_stat_lose_score_insert fail.");
242 r = __rua_stat_win_score_update(db, caller, rua_stat_tag);
243 affected_rows = sqlite3_changes(db);
244 if ((r != SQLITE_DONE) || (affected_rows == 0)) {
245 r = __rua_stat_insert(db, caller, rua_stat_tag);
247 if (r != SQLITE_DONE) {
248 LOGE("__rua_stat_insert fail.");
254 LOGD("rua_stat_update done");