Implement parser_db's api using PkgInfoClient
authorIlho Kim <ilho159.kim@samsung.com>
Mon, 1 Mar 2021 01:15:37 +0000 (10:15 +0900)
committer김일호/Tizen Platform Lab(SR)/Engineer/삼성전자 <ilho159.kim@samsung.com>
Wed, 3 Mar 2021 10:27:40 +0000 (19:27 +0900)
 - pkgmgr_parser_update_app_disable_info_in_usr_db
 - pkgmgr_parser_update_pkg_disable_info_in_db
 - pkgmgr_parser_update_global_app_splash_screen_display_info_in_usr_db
 - pkgmgr_parser_update_app_splash_screen_display_info_in_usr_db
 - pkgmgr_parser_update_app_label_info_in_usr_db
 - pkgmgr_parser_update_app_icon_info_in_usr_db
 - pkgmgr_parser_update_tep_info_in_usr_db
 - pkgmgr_parser_register_pkg_update_info_in_usr_db
 - pkgmgr_parser_register_pkg_plugin_info_in_usr_db
 - pkgmgr_parser_update_pkg_plugin_info_in_usr_db
 - pkgmgr_parser_update_pkg_plugin_info_in_usr_db
 - pkgmgr_parser_unregister_pkg_plugin_info_in_usr_db
 - pkgmgr_parser_update_global_app_disable_for_uid_info_in_db
 - pkgmgr_parser_unregister_pkg_update_info_in_usr_db
 - pkgmgr_parser_unregister_all_pkg_update_info_in_usr_db

Signed-off-by: Ilho Kim <ilho159.kim@samsung.com>
parser/src/pkgmgr_parser_db.c
src/manager/pkginfo_manager.cc
src/manager/pkginfo_manager.h

index a85e01d..380f667 100644 (file)
@@ -40,6 +40,7 @@
 #include "pkgmgr_parser_db_queries.h"
 #include "pkgmgr_parser_debug.h"
 #include "pkgmgr_parser_internal.h"
+#include "manager/pkginfo_manager.h"
 
 #ifndef OWNER_ROOT
 #define OWNER_ROOT 0
@@ -1655,10 +1656,19 @@ static int __insert_package_plugin_execution_info(
        char *query = NULL;
        GList *tmp;
        plugin_x *plugin;
+       char **queries = NULL;
+       int idx = 0;
+       int i = 0;
 
        if (!mfx->plugin)
                return PM_PARSER_R_OK;
 
+       queries = calloc(g_list_length(mfx->plugin), sizeof (char *));
+       if (queries == NULL) {
+               _LOGE("Out of memory");
+               return PM_PARSER_R_ERROR;
+       }
+
        for (tmp = mfx->plugin; tmp; tmp = tmp->next) {
                plugin = (plugin_x *)tmp->data;
                if (plugin == NULL)
@@ -1671,13 +1681,28 @@ static int __insert_package_plugin_execution_info(
                                plugin->plugin_type, plugin->plugin_name);
                if (query == NULL) {
                        _LOGE("Out of memory");
+                       for (i = 0; i < idx; ++i)
+                               free(queries[i]);
+                       free(queries);
                        return PM_PARSER_R_ERROR;
                }
 
-               // TODO: send query to server
-               sqlite3_free(query);
-               query = NULL;
+               queries[idx++] = query;
+       }
+
+       if (_parser_execute_write_queries((const char **)queries, idx, uid) < 0) {
+               _LOGE("Fail to write to db");
+               for (i = 0; i < idx; ++i)
+                       free(queries[i]);
+               free(queries);
+               return PM_PARSER_R_ERROR;
        }
+
+       for (i = 0; i < idx; ++i)
+               free(queries[i]);
+       free(queries);
+       free(query);
+
        return PM_PARSER_R_OK;
 }
 
@@ -1692,7 +1717,11 @@ static int __delete_package_plugin_execution_info(const char *pkgid, uid_t uid)
                return PM_PARSER_R_ERROR;
        }
 
-       // TODO: send query to server
+       if (_parser_execute_write_query(query, uid) < 0) {
+               _LOGE("Fail to write to db");
+               sqlite3_free(query);
+               return PM_PARSER_R_ERROR;
+       }
        sqlite3_free(query);
 
        return PM_PARSER_R_OK;
@@ -2270,7 +2299,11 @@ API int pkgmgr_parser_update_global_app_disable_for_uid_info_in_db(
                return PM_PARSER_R_ERROR;
        }
 
-       // TODO: send query to server
+       if (_parser_execute_write_query(query, uid) < 0) {
+               _LOGE("Fail to write to db");
+               sqlite3_free(query);
+               return PM_PARSER_R_ERROR;
+       }
        sqlite3_free(query);
 
        return PM_PARSER_R_OK;
@@ -2288,7 +2321,11 @@ API int pkgmgr_parser_update_app_disable_info_in_usr_db(const char *appid,
                return PM_PARSER_R_ERROR;
        }
 
-       // TODO: construct query and send it to server
+       if (_parser_execute_write_query(query, uid) < 0) {
+               _LOGE("Fail to write to db");
+               sqlite3_free(query);
+               return PM_PARSER_R_ERROR;
+       }
        sqlite3_free(query);
 
        return PM_PARSER_R_OK;
@@ -2313,7 +2350,11 @@ API int pkgmgr_parser_update_pkg_disable_info_in_usr_db(const char *pkgid,
                return PM_PARSER_R_ERROR;
        }
 
-       // TODO: construct query and send it to server
+       if (_parser_execute_write_query(query, uid) < 0) {
+               _LOGE("Fail to write to db");
+               sqlite3_free(query);
+               return PM_PARSER_R_ERROR;
+       }
        sqlite3_free(query);
 
        return PM_PARSER_R_OK;
@@ -2339,7 +2380,11 @@ API int pkgmgr_parser_update_global_app_splash_screen_display_info_in_usr_db(
                return PM_PARSER_R_ERROR;
        }
 
-       // TODO: construct query and send it to server
+       if (_parser_execute_write_query(query, uid) < 0) {
+               _LOGE("Fail to write to db");
+               sqlite3_free(query);
+               return PM_PARSER_R_ERROR;
+       }
        sqlite3_free(query);
 
        return PM_PARSER_R_OK;
@@ -2357,7 +2402,11 @@ API int pkgmgr_parser_update_app_splash_screen_display_info_in_usr_db(
                return PM_PARSER_R_ERROR;
        }
 
-       // TODO: construct query and send it to server
+       if (_parser_execute_write_query(query, uid) < 0) {
+               _LOGE("Fail to write to db");
+               sqlite3_free(query);
+               return PM_PARSER_R_ERROR;
+       }
        sqlite3_free(query);
 
        return PM_PARSER_R_OK;
@@ -2382,7 +2431,11 @@ API int pkgmgr_parser_update_app_label_info_in_usr_db(const char *appid,
                return PM_PARSER_R_ERROR;
        }
 
-       // TODO: construct query and send it to server
+       if (_parser_execute_write_query(query, uid) < 0) {
+               _LOGE("Fail to write to db");
+               sqlite3_free(query);
+               return PM_PARSER_R_ERROR;
+       }
        sqlite3_free(query);
 
        return PM_PARSER_R_OK;
@@ -2401,13 +2454,17 @@ API int pkgmgr_parser_update_app_icon_info_in_usr_db(const char *appid,
        char *query = NULL;
 
        query = sqlite3_mprintf("UPDATE package_app_localized_info SET app_icon=%Q "
-               "WHERE app_id=TQ AND app_icon IS NOT NULL", icon_path, appid);
+               "WHERE app_id=%Q AND app_icon IS NOT NULL", icon_path, appid);
        if (query == NULL) {
                _LOGE("Out of memory");
                return PM_PARSER_R_ERROR;
        }
 
-       // TODO: construct query and send it to server
+       if (_parser_execute_write_query(query, uid) < 0) {
+               _LOGE("Fail to write to db");
+               sqlite3_free(query);
+               return PM_PARSER_R_ERROR;
+       }
        sqlite3_free(query);
 
        return PM_PARSER_R_OK;
@@ -2432,7 +2489,11 @@ API int pkgmgr_parser_update_tep_info_in_usr_db(const char *pkgid,
                return PM_PARSER_R_ERROR;
        }
 
-       // TODO: construct query and send it to server
+       if (_parser_execute_write_query(query, uid) < 0) {
+               _LOGE("Fail to write to db");
+               sqlite3_free(query);
+               return PM_PARSER_R_ERROR;
+       }
        sqlite3_free(query);
 
        return PM_PARSER_R_OK;
@@ -2460,7 +2521,7 @@ static int __convert_update_type(pkgmgrinfo_updateinfo_update_type type,
 }
 
 static int __register_pkg_update_info(updateinfo_x *info,
-               const char *update_type)
+               const char *update_type, uid_t uid)
 {
        char *query = NULL;
 
@@ -2472,7 +2533,11 @@ static int __register_pkg_update_info(updateinfo_x *info,
                return PM_PARSER_R_ERROR;
        }
 
-       // TODO: send query to server
+       if (_parser_execute_write_query(query, uid) < 0) {
+               _LOGE("Fail to write to db");
+               sqlite3_free(query);
+               return PM_PARSER_R_ERROR;
+       }
        sqlite3_free(query);
 
        return PM_PARSER_R_OK;
@@ -2536,7 +2601,7 @@ API int pkgmgr_parser_register_pkg_update_info_in_usr_db(
        }
        pkgmgrinfo_pkginfo_destroy_pkginfo(pkginfo);
 
-       return __register_pkg_update_info(update_info, update_type);
+       return __register_pkg_update_info(update_info, update_type, uid);
 }
 
 API int pkgmgr_parser_register_pkg_update_info_in_db(
@@ -2557,7 +2622,11 @@ static int __unregister_pkg_update_info(const char *pkgid, uid_t uid)
                return PM_PARSER_R_ERROR;
        }
 
-       // TODO: send query to server
+       if (_parser_execute_write_query(query, uid) < 0) {
+               _LOGE("Fail to write to db");
+               sqlite3_free(query);
+               return PM_PARSER_R_ERROR;
+       }
        sqlite3_free(query);
 
        return PM_PARSER_R_OK;
@@ -2608,7 +2677,11 @@ API int pkgmgr_parser_unregister_all_pkg_update_info_in_usr_db(uid_t uid)
                return PM_PARSER_R_ERROR;
        }
 
-       // TODO: send query to server
+       if (_parser_execute_write_query(query, uid) < 0) {
+               _LOGE("Fail to write to db");
+               sqlite3_free(query);
+               return PM_PARSER_R_ERROR;
+       }
        sqlite3_free(query);
 
        return PM_PARSER_R_OK;
index 630a2b4..36aaf74 100644 (file)
@@ -628,3 +628,77 @@ extern "C" EXPORT_API int _pkginfo_set_usr_installed_storage(const char *pkgid,
 
        return PMINFO_R_OK;
 }
+
+extern "C" EXPORT_API int _parser_execute_write_query(const char *query, uid_t uid)
+{
+       std::shared_ptr<pkgmgr_common::parcel::AbstractParcelable> parcelable(
+                       new pkgmgr_common::parcel::QueryParcelable(uid, query,
+                                       pkgmgr_common::database::AbstractDBHandler::DBType::DB_TYPE_FILE_PKGDB,
+                                       pkgmgr_common::database::AbstractDBHandler::OperationType::OPERATION_TYPE_WRITE));
+
+       pkgmgr_client::PkgInfoClient client(parcelable, uid,
+                       pkgmgr_common::ReqType::QUERY);
+       if (!client.SendRequest()) {
+               return -1;
+       }
+
+       std::shared_ptr<pkgmgr_common::parcel::ResultParcelable> return_parcel(
+                       std::static_pointer_cast<pkgmgr_common::parcel::ResultParcelable>(
+                                       client.GetResultParcel()));
+
+       auto result_list = return_parcel->GetResult();
+       if (result_list.size() != 1) {
+               LOG(ERROR) << "Invalid result";
+               return -1;
+       }
+
+       if (result_list[0].size() != 1) {
+               LOG(ERROR) << "Invalid result";
+               return -1;
+       }
+
+       LOG(ERROR) << "result : " << result_list[0][0];
+       if (result_list[0][0] != "SUCCESS")
+               return -1;
+
+       return 0;
+}
+
+extern "C" EXPORT_API int _parser_execute_write_queries(const char **queries, int len, uid_t uid)
+{
+       std::vector<std::string> query_vt;
+       for (int i = 0; i < len; ++i)
+               query_vt.emplace_back(queries[i]);
+
+       std::shared_ptr<pkgmgr_common::parcel::AbstractParcelable> parcelable(
+                       new pkgmgr_common::parcel::QueryParcelable(uid, query_vt,
+                                       pkgmgr_common::database::AbstractDBHandler::DBType::DB_TYPE_FILE_PKGDB,
+                                       pkgmgr_common::database::AbstractDBHandler::OperationType::OPERATION_TYPE_WRITE));
+
+       pkgmgr_client::PkgInfoClient client(parcelable, uid,
+                       pkgmgr_common::ReqType::QUERY);
+       if (!client.SendRequest()) {
+               return -1;
+       }
+
+       std::shared_ptr<pkgmgr_common::parcel::ResultParcelable> return_parcel(
+                       std::static_pointer_cast<pkgmgr_common::parcel::ResultParcelable>(
+                                       client.GetResultParcel()));
+
+       auto result_list = return_parcel->GetResult();
+       if (result_list.size() != 1) {
+               LOG(ERROR) << "Invalid result";
+               return -1;
+       }
+
+       if (result_list[0].size() != 1) {
+               LOG(ERROR) << "Invalid result";
+               return -1;
+       }
+
+       LOG(ERROR) << "result : " << result_list[0][0];
+       if (result_list[0][0] != "SUCCESS")
+               return -1;
+
+       return 0;
+}
index 1e63a5e..7684e2c 100644 (file)
@@ -63,6 +63,10 @@ int _pkginfo_set_usr_installed_storage(const char *pkgid,
                INSTALL_LOCATION location, const char *external_pkg_path,
                uid_t uid);
 
+int _parser_execute_write_query(const char *query, uid_t uid);
+
+int _parser_execute_write_queries(const char **queries, int len, uid_t uid);
+
 #ifdef __cplusplus
 }
 #endif