Release version 0.22.40
[platform/core/appfw/pkgmgr-info.git] / src / server / database / db_handle_provider.hh
index 9631cf5..e165e05 100644 (file)
@@ -22,7 +22,7 @@
 #include <sys/types.h>
 
 #include <memory>
-#include <mutex>
+#include <shared_mutex>
 #include <string>
 #include <unordered_map>
 #include <unordered_set>
@@ -45,6 +45,7 @@ class EXPORT_API DBHandleProvider {
   ~DBHandleProvider() = default;
   static DBHandleProvider& GetInst(uid_t uid);
   static bool IsCrashedWriteRequest();
+  static bool IsWriter(pid_t pid);
   std::vector<std::pair<std::string, uid_t>> GetParserDBPath(int pid,
                                                              bool write);
   std::string GetCertDBPath(int pid, bool write);
@@ -53,13 +54,21 @@ class EXPORT_API DBHandleProvider {
   int UpdateCache(sqlite3* db, pid_t pid, uid_t uid, bool write,
                   const std::string& locale);
   std::vector<std::shared_ptr<package_x>> GetPackages(
-      pid_t pid, bool write, pkgmgrinfo_filter_x* filter,
+      pid_t pid, pkgmgrinfo_filter_x* filter,
       const std::string& package);
   std::vector<std::shared_ptr<application_x>> GetApplications(
-      pid_t pid, bool write, pkgmgrinfo_filter_x* filter,
+      pid_t pid, pkgmgrinfo_filter_x* filter,
       const std::string& app);
   void TrimCache();
-  bool IsWriter(pid_t pid);
+  void RegisterPendingPackageInfo(package_x* info);
+  bool UpdatePendingPackageInfo(sqlite3* db,
+      pid_t pid, uid_t uid, const std::string& locale);
+  bool UpdateCachePkg(sqlite3* db, uid_t uid, const std::string& pkgid,
+      const std::string& locale);
+  bool UpdateCacheApp(sqlite3* db, uid_t uid, const std::string& appid,
+      const std::string& locale);
+  bool UpdateCacheAppByPkgid(sqlite3* db, uid_t uid, const std::string& pkgid,
+      const std::string& locale);
 
  private:
   explicit DBHandleProvider(uid_t uid);
@@ -68,7 +77,7 @@ class EXPORT_API DBHandleProvider {
   bool IsMemoryDBActive(pid_t pid, bool write);
   void ReleaseCache();
   void AddPackage(std::string package, package_x* info);
-  void AddApplication(std::string app, application_x* info);
+  void AddApplication(std::string app, std::shared_ptr<application_x> info);
   void InsertPID(pid_t pid);
   bool ErasePID(pid_t pid);
 
@@ -84,7 +93,7 @@ class EXPORT_API DBHandleProvider {
   static std::string cert_filedb_path_;
   static std::unordered_set<pid_t> writer_pid_list_;
   static std::recursive_mutex lock_;
-  static std::mutex pid_list_lock_;
+  static std::shared_mutex pid_list_lock_;
 
   uid_t uid_;
   bool is_user_memdb_set_;
@@ -93,10 +102,10 @@ class EXPORT_API DBHandleProvider {
   std::string user_parser_memdb_path_;
   std::string user_parser_filedb_path_;
   bool released_ = true;
-  std::unordered_map<std::string, std::vector<std::shared_ptr<package_x>>>
-      pkg_map_;
-  std::unordered_map<std::string, std::vector<std::shared_ptr<application_x>>>
-      app_map_;
+  std::unordered_map<std::string, std::shared_ptr<package_x>> pkg_map_;
+  std::unordered_map<std::string, std::shared_ptr<application_x>> app_map_;
+  std::unordered_map<std::string, std::unordered_set<std::string>> pkg_app_map_;
+  std::unordered_set<std::string> pending_pkg_;
 };
 
 }  // namespace database