Add apis for datacontrol privileges info
[platform/core/appfw/pkgmgr-info.git] / parser / src / pkgmgr_parser_db.c
index 74a8f47..5618858 100644 (file)
@@ -313,6 +313,7 @@ static const char *parser_init_queries[] = {
        QUERY_CREATE_TABLE_PACKAGE_APP_SHARE_ALLOWED, /* ? */
        QUERY_CREATE_TABLE_PACKAGE_APP_SHARE_REQUEST, /* ? */
        QUERY_CREATE_TABLE_PACKAGE_APP_DATA_CONTROL,
+       QUERY_CREATE_TABLE_PACKAGE_APP_DATA_CONTROL_PRIVILEGE,
        QUERY_CREATE_TABLE_PACKAGE_APP_INFO_FOR_UID,
        QUERY_CREATE_TRIGGER_UPDATE_PACKAGE_APP_INFO_FOR_UID,
        QUERY_CREATE_TABLE_PACKAGE_APP_SPLASH_SCREEN,
@@ -695,6 +696,52 @@ static int __insert_metadata_info(sqlite3 *db, application_x *app)
        return 0;
 }
 
+static int __insert_app_data_control_privilege_info(sqlite3 *db,
+               datacontrol_x *datacontrol)
+{
+       static const char query[] =
+               "INSERT INTO package_app_data_control_privilege (providerid,"
+               "  privilege, type) VALUES (?, ?, ?)";
+
+       int ret;
+       sqlite3_stmt *stmt;
+       int idx;
+       GList *privileges;
+
+       if (datacontrol == NULL)
+               return 0;
+
+       ret = sqlite3_prepare_v2(db, query, strlen(query), &stmt, NULL);
+       if (ret != SQLITE_OK) {
+               _LOGE("prepare failed: %s", sqlite3_errmsg(db));
+               return -1;
+       }
+
+       for (privileges = datacontrol->privileges; privileges;
+                       privileges = privileges->next) {
+               privilege_x *priv = (privilege_x *)privileges->data;
+               if (priv == NULL)
+                       continue;
+
+               idx = 1;
+               __BIND_TEXT(db, stmt, idx++, datacontrol->providerid);
+               __BIND_TEXT(db, stmt, idx++, priv->value);
+               __BIND_TEXT(db, stmt, idx++, datacontrol->type);
+
+               ret = sqlite3_step(stmt);
+               if (ret != SQLITE_DONE) {
+                       _LOGE("step failed: %s", sqlite3_errmsg(db));
+                       sqlite3_finalize(stmt);
+                       return -1;
+               }
+
+               sqlite3_reset(stmt);
+       }
+
+       sqlite3_finalize(stmt);
+       return 0;
+}
+
 static int __insert_datacontrol_info(sqlite3 *db, application_x *app)
 {
        static const char query[] =
@@ -733,6 +780,12 @@ static int __insert_datacontrol_info(sqlite3 *db, application_x *app)
                        return -1;
                }
 
+               if (dc->privileges &&
+                               __insert_app_data_control_privilege_info(db, dc)) {
+                       sqlite3_finalize(stmt);
+                       return -1;
+               }
+
                sqlite3_reset(stmt);
        }