Merge branch 'tizen' of ssh://review.tizen.org:29418/platform/core/appfw/pkgmgr-info
[platform/core/appfw/pkgmgr-info.git] / src / manager / pkginfo_manager.cc
index 218f29c..e6823b5 100644 (file)
@@ -17,8 +17,6 @@
 #include "manager/pkginfo_manager.h"
 
 #include <sys/types.h>
-
-#include <sqlite3.h>
 #include <glib.h>
 
 #include <parcel.hh>
 #include <utility>
 #include <vector>
 
-#include "pkgmgr_parser.h"
 #include "pkgmgrinfo_private.h"
 #include "pkgmgr_query_index.h"
 
 #include "client/pkginfo_client.hh"
-#include "common/database/abstract_db_handler.hh"
-#include "common/database/pkg_set_db_handler.hh"
 #include "common/parcel/appinfo_parcelable.hh"
 #include "common/parcel/certinfo_parcelable.hh"
 #include "common/parcel/command_parcelable.hh"
+#include "common/parcel/create_db_parcelable.hh"
 #include "common/parcel/depinfo_parcelable.hh"
 #include "common/parcel/filter_parcelable.hh"
+#include "common/parcel/parcelable_factory.hh"
 #include "common/parcel/pkginfo_parcelable.hh"
 #include "common/parcel/query_parcelable.hh"
 #include "common/parcel/result_parcelable.hh"
 #include "logging.hh"
 
+#include "pkg_write_type.hh"
+#include "db_type.hh"
 
 #ifdef LOG_TAG
 #undef LOG_TAG
@@ -58,7 +57,6 @@
 #define EXPORT_API __attribute__((visibility("default")))
 
 namespace pcp = pkgmgr_common::parcel;
-namespace pcd = pkgmgr_common::database;
 
 extern "C" EXPORT_API int _pkginfo_get_packages(uid_t uid,
     pkgmgrinfo_filter_x* filter, int flag, GHashTable* packages) {
@@ -186,8 +184,8 @@ extern "C" EXPORT_API char* _appinfo_get_localed_label(
   std::shared_ptr<pcp::AbstractParcelable> parcelable(
       new pcp::QueryParcelable(uid,
           { QUERY_INDEX_APPINFO_GET_LOCALED_LABEL, { appid, locale, appid } },
-          pcd::AbstractDBHandler::DBType::DB_TYPE_FILE_PKGDB,
-          pcd::AbstractDBHandler::OperationType::OPERATION_TYPE_READ));
+          pkgmgr_common::DBType::DB_TYPE_FILE_PKGDB,
+          pkgmgr_common::DBOperationType::OPERATION_TYPE_READ));
 
   pkgmgr_client::PkgInfoClient client(parcelable, uid,
       pkgmgr_common::ReqType::QUERY);
@@ -237,8 +235,8 @@ extern "C" EXPORT_API int _appinfo_get_datacontrol_info(
   std::shared_ptr<pcp::AbstractParcelable> parcelable(
       new pcp::QueryParcelable(uid,
           { QUERY_INDEX_APPINFO_GET_DATACONTROL_INFO, { providerid, type } },
-          pcd::AbstractDBHandler::DBType::DB_TYPE_FILE_PKGDB,
-          pcd::AbstractDBHandler::OperationType::OPERATION_TYPE_READ));
+          pkgmgr_common::DBType::DB_TYPE_FILE_PKGDB,
+          pkgmgr_common::DBOperationType::OPERATION_TYPE_READ));
 
   pkgmgr_client::PkgInfoClient client(parcelable, uid,
       pkgmgr_common::ReqType::QUERY);
@@ -286,8 +284,8 @@ extern "C" EXPORT_API int _appinfo_get_datacontrol_appid(
   std::shared_ptr<pcp::AbstractParcelable> parcelable(
       new pcp::QueryParcelable(uid,
           { QUERY_INDEX_APPINFO_GET_DATACONTROL_APPID, { providerid } },
-          pcd::AbstractDBHandler::DBType::DB_TYPE_FILE_PKGDB,
-          pcd::AbstractDBHandler::OperationType::OPERATION_TYPE_READ));
+          pkgmgr_common::DBType::DB_TYPE_FILE_PKGDB,
+          pkgmgr_common::DBOperationType::OPERATION_TYPE_READ));
 
   pkgmgr_client::PkgInfoClient client(parcelable, uid,
       pkgmgr_common::ReqType::QUERY);
@@ -337,8 +335,8 @@ extern "C" EXPORT_API int _appinfo_get_datacontrol_trusted_info(
       new pcp::QueryParcelable(uid,
           { QUERY_INDEX_APPINFO_GET_DATACONTROL_TRUSTED_INFO,
               { providerid, type } },
-          pcd::AbstractDBHandler::DBType::DB_TYPE_FILE_PKGDB,
-          pcd::AbstractDBHandler::OperationType::OPERATION_TYPE_READ));
+          pkgmgr_common::DBType::DB_TYPE_FILE_PKGDB,
+          pkgmgr_common::DBOperationType::OPERATION_TYPE_READ));
 
   pkgmgr_client::PkgInfoClient client(parcelable, uid,
       pkgmgr_common::ReqType::QUERY);
@@ -388,8 +386,8 @@ extern "C" EXPORT_API int _appinfo_get_datacontrol_privileges(
       new pcp::QueryParcelable(uid,
           { QUERY_INDEX_APPINFO_GET_DATACONTROL_PRIVILEGES,
               { providerid, type } },
-          pcd::AbstractDBHandler::DBType::DB_TYPE_FILE_PKGDB,
-          pcd::AbstractDBHandler::OperationType::OPERATION_TYPE_READ));
+          pkgmgr_common::DBType::DB_TYPE_FILE_PKGDB,
+          pkgmgr_common::DBOperationType::OPERATION_TYPE_READ));
 
   pkgmgr_client::PkgInfoClient client(parcelable, uid,
       pkgmgr_common::ReqType::QUERY);
@@ -439,8 +437,8 @@ extern "C" EXPORT_API int _appinfo_get_appcontrol_privileges(
   std::shared_ptr<pcp::AbstractParcelable> parcelable(
       new pcp::QueryParcelable(uid,
           { QUERY_INDEX_APPINFO_GET_APPCONTROL_PRIVILEGES, { appid } },
-          pcd::AbstractDBHandler::DBType::DB_TYPE_FILE_PKGDB,
-          pcd::AbstractDBHandler::OperationType::OPERATION_TYPE_READ));
+          pkgmgr_common::DBType::DB_TYPE_FILE_PKGDB,
+          pkgmgr_common::DBOperationType::OPERATION_TYPE_READ));
 
   pkgmgr_client::PkgInfoClient client(parcelable, uid,
       pkgmgr_common::ReqType::QUERY);
@@ -502,8 +500,8 @@ extern "C" EXPORT_API int _plugininfo_get_appids(
       new pcp::QueryParcelable(_getuid(),
           { QUERY_INDEX_PLUGININFO_GET_APPIDS,
               { pkgid, plugin_type, plugin_name } },
-          pcd::AbstractDBHandler::DBType::DB_TYPE_FILE_PKGDB,
-          pcd::AbstractDBHandler::OperationType::OPERATION_TYPE_READ));
+          pkgmgr_common::DBType::DB_TYPE_FILE_PKGDB,
+          pkgmgr_common::DBOperationType::OPERATION_TYPE_READ));
 
   pkgmgr_client::PkgInfoClient client(parcelable, _getuid(),
       pkgmgr_common::ReqType::QUERY);
@@ -594,8 +592,8 @@ extern "C" EXPORT_API int _get_pkg_updateinfo(const char* pkgid,
 
   std::shared_ptr<pcp::AbstractParcelable> parcelable(
       new pcp::QueryParcelable(uid, std::move(info),
-          pcd::AbstractDBHandler::DBType::DB_TYPE_FILE_PKGDB,
-          pcd::AbstractDBHandler::OperationType::OPERATION_TYPE_READ));
+          pkgmgr_common::DBType::DB_TYPE_FILE_PKGDB,
+          pkgmgr_common::DBOperationType::OPERATION_TYPE_READ));
 
   pkgmgr_client::PkgInfoClient client(parcelable, uid,
       pkgmgr_common::ReqType::QUERY);
@@ -685,8 +683,8 @@ extern "C" EXPORT_API int _pkginfo_set_usr_installed_storage(const char* pkgid,
               }
             },
           },
-          pcd::AbstractDBHandler::DBType::DB_TYPE_FILE_PKGDB,
-          pcd::AbstractDBHandler::OperationType::OPERATION_TYPE_WRITE));
+          pkgmgr_common::DBType::DB_TYPE_FILE_PKGDB,
+          pkgmgr_common::DBOperationType::OPERATION_TYPE_WRITE));
 
   pkgmgr_client::PkgInfoClient client(parcelable, uid,
       pkgmgr_common::ReqType::QUERY);
@@ -717,8 +715,8 @@ extern "C" EXPORT_API int _certinfo_compare_pkg_certinfo(const char* l_pkgid,
   std::shared_ptr<pcp::AbstractParcelable> parcelable(
       new pcp::QueryParcelable(0,
           { QUERY_INDEX_CERTINFO_COMPARE_PKG_CERTINFO, { l_pkgid, r_pkgid } },
-          pcd::AbstractDBHandler::DBType::DB_TYPE_FILE_CERTDB,
-          pcd::AbstractDBHandler::OperationType::OPERATION_TYPE_READ));
+          pkgmgr_common::DBType::DB_TYPE_FILE_CERTDB,
+          pkgmgr_common::DBOperationType::OPERATION_TYPE_READ));
   pkgmgr_client::PkgInfoClient client(parcelable, 0,
       pkgmgr_common::ReqType::QUERY);
   if (!client.SendRequest())
@@ -775,8 +773,8 @@ extern "C" EXPORT_API int _certinfo_compare_app_certinfo(uid_t uid,
   std::shared_ptr<pcp::AbstractParcelable> parcelable(
       new pcp::QueryParcelable(uid,
           { QUERY_INDEX_CERTINFO_COMPARE_APP_CERTINFO, { l_appid, r_appid } },
-          pcd::AbstractDBHandler::DBType::DB_TYPE_FILE_PKGDB,
-          pcd::AbstractDBHandler::OperationType::OPERATION_TYPE_READ));
+          pkgmgr_common::DBType::DB_TYPE_FILE_PKGDB,
+          pkgmgr_common::DBOperationType::OPERATION_TYPE_READ));
   pkgmgr_client::PkgInfoClient client(parcelable, uid,
       pkgmgr_common::ReqType::QUERY);
   if (!client.SendRequest())
@@ -838,8 +836,8 @@ extern "C" EXPORT_API int _parser_execute_write_query(
 
   std::shared_ptr<pcp::AbstractParcelable> parcelable(
       new pcp::QueryParcelable(uid, { query_index, std::move(args) },
-          pcd::AbstractDBHandler::DBType::DB_TYPE_FILE_PKGDB,
-          pcd::AbstractDBHandler::OperationType::OPERATION_TYPE_WRITE));
+          pkgmgr_common::DBType::DB_TYPE_FILE_PKGDB,
+          pkgmgr_common::DBOperationType::OPERATION_TYPE_WRITE));
 
   pkgmgr_client::PkgInfoClient client(parcelable, uid,
                                       pkgmgr_common::ReqType::QUERY);
@@ -882,8 +880,8 @@ extern "C" EXPORT_API int _parser_execute_write_queries(
 
   std::shared_ptr<pcp::AbstractParcelable> parcelable(
       new pcp::QueryParcelable(uid, std::move(queries),
-          pcd::AbstractDBHandler::DBType::DB_TYPE_FILE_PKGDB,
-          pcd::AbstractDBHandler::OperationType::OPERATION_TYPE_WRITE));
+          pkgmgr_common::DBType::DB_TYPE_FILE_PKGDB,
+          pkgmgr_common::DBOperationType::OPERATION_TYPE_WRITE));
 
   pkgmgr_client::PkgInfoClient client(parcelable, uid,
       pkgmgr_common::ReqType::QUERY);
@@ -913,7 +911,7 @@ extern "C" EXPORT_API int _parser_insert_manifest_info(
     manifest_x* mfx, uid_t uid) {
   auto parcelable =
       std::make_shared<pcp::PkgInfoParcelable>(uid,
-          std::vector<package_x*>{mfx}, WriteType::Insert, false);
+          std::vector<package_x*>{mfx}, pkgmgr_common::PkgWriteType::Insert, false);
 
   pkgmgr_client::PkgInfoClient client(parcelable, uid,
       pkgmgr_common::ReqType::SET_PKG_INFO);
@@ -943,7 +941,7 @@ extern "C" EXPORT_API int _parser_update_manifest_info(
     manifest_x* mfx, uid_t uid) {
   auto parcelable =
       std::make_shared<pcp::PkgInfoParcelable>(uid,
-          std::vector<package_x*>{mfx}, WriteType::Update, false);
+          std::vector<package_x*>{mfx}, pkgmgr_common::PkgWriteType::Update, false);
 
   pkgmgr_client::PkgInfoClient client(parcelable, uid,
       pkgmgr_common::ReqType::SET_PKG_INFO);
@@ -973,7 +971,7 @@ extern "C" EXPORT_API int _parser_delete_manifest_info(
     manifest_x* mfx, uid_t uid) {
   auto parcelable =
       std::make_shared<pcp::PkgInfoParcelable>(uid,
-          std::vector<package_x*>{mfx}, WriteType::Delete, false);
+          std::vector<package_x*>{mfx}, pkgmgr_common::PkgWriteType::Delete, false);
 
   pkgmgr_client::PkgInfoClient client(parcelable, uid,
       pkgmgr_common::ReqType::SET_PKG_INFO);
@@ -1083,8 +1081,8 @@ extern "C" EXPORT_API int _pkginfo_delete_certinfo(const char* pkgid) {
   std::shared_ptr<pcp::AbstractParcelable> parcelable(
       new pcp::QueryParcelable(0,
           { QUERY_INDEX_PKGINFO_DELETE_CERTINFO, { pkgid } },
-          pcd::AbstractDBHandler::DBType::DB_TYPE_FILE_CERTDB,
-          pcd::AbstractDBHandler::OperationType::OPERATION_TYPE_WRITE));
+          pkgmgr_common::DBType::DB_TYPE_FILE_CERTDB,
+          pkgmgr_common::DBOperationType::OPERATION_TYPE_WRITE));
 
   pkgmgr_client::PkgInfoClient client(parcelable, 0,
                                       pkgmgr_common::ReqType::QUERY);
@@ -1138,3 +1136,41 @@ extern "C" EXPORT_API int _parser_clear_cache_memory_db(uid_t uid) {
 
   return PMINFO_R_OK;
 }
+
+static int __create_and_initialize_db(uid_t uid) {
+  std::shared_ptr<pcp::AbstractParcelable> parcelable(
+      new pcp::CreateDBParcelable(uid));
+
+  pkgmgr_client::PkgInfoClient client(parcelable, _getuid(),
+                                      pkgmgr_common::ReqType::CREATE_DB);
+
+  if (!client.SendRequest())
+    return -1;
+
+  auto ptr = client.GetResultParcel();
+  if (ptr == nullptr)   {
+    LOG(ERROR) << "Fail to get return parcelable";
+    return -1;
+  }
+
+  if (ptr->GetRequestResult() != PMINFO_R_OK) {
+    LOG(ERROR) << "Request fail";
+    return -1;
+  }
+
+  if (ptr->GetType() != pcp::ParcelableType::Result) {
+    LOG(ERROR) << "Invalid parcelable type";
+    return -1;
+  }
+
+  return 0;
+}
+
+extern "C" EXPORT_API int _parser_create_and_initialize_db(uid_t uid) {
+  if (__create_and_initialize_db(uid) < 0) {
+    LOG(ERROR) << "Fail to initialize db";
+    return -1;
+  }
+
+  return 0;
+}