Add a api to organize db's data and option table
[platform/core/appfw/badge.git] / src / badge_setting_service.c
index 3a5e7f4..9a61b7d 100644 (file)
@@ -693,3 +693,64 @@ out:
        return ret;
 }
 
+EXPORT_API int badge_setting_arrange_tables(uid_t uid)
+{
+       int ret = BADGE_ERROR_NONE;
+       int sqlret;
+       sqlite3 *db = NULL;
+       char *sqlbuf = NULL;
+
+       sqlret = db_util_open(BADGE_DB_PATH, &db, 0);
+       if (sqlret != SQLITE_OK || !db) {
+               ERR("Failed to db_util_open [%d]", sqlret);
+               if (sqlret == SQLITE_PERM)
+                       return BADGE_ERROR_PERMISSION_DENIED;
+               return BADGE_ERROR_FROM_DB;
+       }
+
+       sqlbuf = sqlite3_mprintf("DELETE FROM %Q WHERE pkgname not in "
+                               "(SELECT pkgname FROM %Q) AND uid = %d",
+                               BADGE_TABLE_NAME, BADGE_SETTING_DB_TABLE, uid);
+       if (sqlbuf == NULL) {
+               /* LCOV_EXCL_START */
+               ERR("Failed to alloc query");
+               ret = BADGE_ERROR_OUT_OF_MEMORY;
+               goto out;
+               /* LCOV_EXCL_STOP */
+       }
+
+       ret = badge_db_exec(db, sqlbuf, NULL);
+       if (ret != BADGE_ERROR_NONE)
+               goto out;
+
+       if (sqlbuf) {
+               sqlite3_free(sqlbuf);
+               sqlbuf = NULL;
+       }
+
+       sqlbuf = sqlite3_mprintf("DELETE FROM %Q WHERE pkgname not in "
+                               "(SELECT pkgname FROM %Q) AND uid = %d",
+                               BADGE_OPTION_TABLE_NAME, BADGE_SETTING_DB_TABLE,
+                               uid);
+       if (sqlbuf == NULL) {
+               /* LCOV_EXCL_START */
+               ERR("Failed to alloc query");
+               ret = BADGE_ERROR_OUT_OF_MEMORY;
+               goto out;
+               /* LCOV_EXCL_STOP */
+       }
+
+       ret = badge_db_exec(db, sqlbuf, NULL);
+
+out:
+       if (sqlbuf)
+               sqlite3_free(sqlbuf);
+
+       if (db) {
+               sqlret = db_util_close(db);
+               if (sqlret != SQLITE_OK)
+                       WARN("Failed to db_util_close [%d]", sqlret);
+       }
+
+       return ret;
+}