2 * Copyright (c) 2000 - 2017 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.
26 #include "badge_log.h"
27 #include "badge_error.h"
28 #include "badge_internal.h"
30 #define CREATE_BADGE_TABLE " \
31 PRAGMA journal_mode = PERSIST; \
32 PRAGMA synchronous = FULL; \
33 CREATE TABLE IF NOT EXISTS badge_data ( \
35 pkgname TEXT NOT NULL, \
37 badge INTEGER DEFAULT 0, \
38 rowid INTEGER PRIMARY KEY AUTOINCREMENT, \
39 UNIQUE (uid, pkgname) \
41 CREATE TABLE IF NOT EXISTS badge_option ( \
43 pkgname TEXT NOT NULL, \
44 display INTEGER DEFAULT 1, \
45 UNIQUE (uid, pkgname) \
47 CREATE TABLE IF NOT EXISTS badge_setting ( \
49 pkgname TEXT NOT NULL, \
50 appid TEXT NOT NULL, \
51 allow_to_display INTEGER DEFAULT 1, \
52 UNIQUE (uid, pkgname, appid) \
58 int ret = BADGE_ERROR_NONE;
63 sql_ret = sqlite3_open_v2(BADGE_DB_PATH, &db,
64 SQLITE_OPEN_CREATE | SQLITE_OPEN_READWRITE, NULL);
65 if (sql_ret != SQLITE_OK) {
66 ERR("Failed to open badge db[%d]", sql_ret);
68 if (sqlite3_errcode(db) == SQLITE_CORRUPT) {
71 unlink(BADGE_DB_PATH);
73 sql_ret = sqlite3_open_v2(BADGE_DB_PATH, &db,
74 SQLITE_OPEN_CREATE |SQLITE_OPEN_READWRITE,
76 if (sql_ret != SQLITE_OK) {
77 ERR("Failed to open badge db[%d]", sql_ret);
78 unlink(BADGE_DB_PATH);
79 ret = BADGE_ERROR_FROM_DB;
83 ret = BADGE_ERROR_FROM_DB;
88 sql_ret = sqlite3_exec(db, CREATE_BADGE_TABLE, NULL, NULL, &errmsg);
89 if (sql_ret != SQLITE_OK) {
90 ERR("Failed to exec query[%d][%s]", sql_ret, errmsg);
92 if (sql_ret == SQLITE_CORRUPT || sql_ret == SQLITE_NOTADB) {
94 unlink(BADGE_DB_PATH);
96 sql_ret = sqlite3_open_v2(BADGE_DB_PATH, &db,
97 SQLITE_OPEN_CREATE | SQLITE_OPEN_READWRITE,
99 if (sql_ret != SQLITE_OK) {
100 ERR("Failed to open db[%d]", sql_ret);
101 unlink(BADGE_DB_PATH);
102 ret = BADGE_ERROR_FROM_DB;
106 sqlite3_free(errmsg);
107 sql_ret = sqlite3_exec(db, CREATE_BADGE_TABLE, NULL,
109 if (sql_ret != SQLITE_OK) {
110 ERR("Failed to exec sqlite, again[%d][%s]",
112 unlink(BADGE_DB_PATH);
113 ret = BADGE_ERROR_FROM_DB;
117 ret = BADGE_ERROR_FROM_DB;
124 sqlite3_free(errmsg);
133 int badge_db_is_existing(const char *pkgname, bool *existing, uid_t uid)
135 return _badge_is_existing(pkgname, existing, uid);
139 int badge_db_get_list(GList **badge_list, uid_t uid)
141 return _badge_get_list(badge_list, uid);
145 int badge_db_insert(const char *pkgname, const char *writable_pkg, const char *caller, uid_t uid)
147 int err = BADGE_ERROR_NONE;
148 badge_h *badge = NULL;
152 ERR("package name is NULL");
153 return BADGE_ERROR_INVALID_PARAMETER;
156 pkgs = _badge_pkgs_new(&err, writable_pkg, caller, NULL);
158 ERR("Failed to _badge_pkgs_new [%d]", err);
162 INFO("pkgs : %s", pkgs);
164 badge = _badge_new(pkgname, pkgs, &err);
166 ERR("Failed to _badge_new [%d]", err);
172 err = _badge_insert(badge, uid);
173 if (err != BADGE_ERROR_NONE) {
174 ERR("Failed to _badge_insert [%d]", err);
181 return BADGE_ERROR_NONE;
185 int badge_db_delete(const char *pkgname, const char *caller, uid_t uid, pid_t pid)
187 return _badge_remove(caller, pkgname, uid, pid);
191 int badge_db_delete_by_pkgname(const char *pkgname, uid_t uid)
193 return _badge_remove_by_pkgname(pkgname, uid);
197 int badge_db_set_count(const char *pkgname, const char *caller, unsigned int count, uid_t uid, pid_t pid)
199 return _badge_set_count(caller, pkgname, count, uid, pid);
203 int badge_db_get_count(const char *pkgname, unsigned int *count, uid_t uid)
205 return _badge_get_count(pkgname, count, uid);
209 int badge_db_set_display_option(const char *pkgname, unsigned int is_display, uid_t uid)
211 return _badge_set_display(pkgname, is_display, uid);
215 int badge_db_get_display_option(const char *pkgname, unsigned int *is_display, uid_t uid)
217 return _badge_get_display(pkgname, is_display, uid);
221 int badge_db_exec(sqlite3 *db, const char *query, int *num_changes)
224 sqlite3_stmt *stmt = NULL;
226 if (db == NULL || query == NULL)
227 return BADGE_ERROR_INVALID_PARAMETER;
229 ret = sqlite3_prepare_v2(db, query, strlen(query), &stmt, NULL);
230 if (ret != SQLITE_OK) {
231 ERR("sqlite3_prepare_v2 failed [%d][%s]", ret,
233 return BADGE_ERROR_FROM_DB;
237 ret = sqlite3_step(stmt);
238 if (ret == SQLITE_OK || ret == SQLITE_DONE) {
239 if (num_changes != NULL)
240 *num_changes = sqlite3_changes(db);
242 sqlite3_finalize(stmt);
244 ERR("sqlite3_step failed [%d][%s]", ret,
246 sqlite3_finalize(stmt);
247 return BADGE_ERROR_FROM_DB;
250 return BADGE_ERROR_FROM_DB;
253 return BADGE_ERROR_NONE;