Release version 0.22.40
[platform/core/appfw/pkgmgr-info.git] / src / server / initialize_db_internal.c
index 04177d9..c272c23 100644 (file)
@@ -51,6 +51,8 @@ do {                                                                           \
                _LOGD("chsmack -a %s %s", DB_LABEL, x);                        \
 } while (0)
 
+#define DB_VERSION_PATH SYSCONFDIR "/package-manager/pkg_db_version.txt"
+
 static const char *__get_cert_db_path(void)
 {
        return tzplatform_mkpath(TZ_SYS_DB, ".pkgmgr_cert.db");
@@ -137,6 +139,52 @@ static int __set_db_permission(const char *path, uid_t uid)
        return 0;
 }
 
+static int __set_db_version(sqlite3 *db) {
+       static const char query_raw[] = "PRAGMA user_version=%Q";
+       int ret;
+       FILE *fp = NULL;
+       sqlite3_stmt *stmt;
+       char version[PKG_STRING_LEN_MAX] = { 0 };
+       char *query = NULL;
+
+       fp = fopen(DB_VERSION_PATH, "r");
+       if (fp == NULL) {
+               _LOGE("Failed to open db version file");
+               return -1;
+       }
+
+       if (fgets(version, sizeof(version), fp) == NULL) {
+               _LOGE("Failed to get version information");
+               fclose(fp);
+               return -1;
+       }
+       fclose(fp);
+
+       query = sqlite3_mprintf(query_raw, version);
+       if (!query) {
+               _LOGE("Out of memory");
+               return -1;
+       }
+
+       ret = sqlite3_prepare_v2(db, query, strlen(query), &stmt, NULL);
+       sqlite3_free(query);
+       if (ret != SQLITE_OK) {
+               _LOGE("prepare failed: %s", sqlite3_errmsg(db));
+               return -1;
+       }
+
+       ret = sqlite3_step(stmt);
+       if (ret != SQLITE_DONE) {
+               _LOGE("sqlite3_step failed: %d", ret);
+               sqlite3_finalize(stmt);
+               return -1;
+       }
+
+       sqlite3_finalize(stmt);
+
+       return 0;
+}
+
 static int __create_tables(sqlite3 *db, const char **queries)
 {
        int ret;
@@ -155,6 +203,9 @@ static int __initialize_db(sqlite3 *db, const char *dbpath, uid_t uid)
 {
        const char **queries;
 
+       if (__set_db_version(db))
+               return -1;
+
        if (strstr(dbpath, ".pkgmgr_parser.db")) {
                queries = PARSER_INIT_QUERIES;
        } else if (strstr(dbpath, ".pkgmgr_cert.db")) {