Implement parser_db's api using PkgInfoClient
[platform/core/appfw/pkgmgr-info.git] / src / manager / pkginfo_manager.cc
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;
+}