Refactor pkgmgr-info
[platform/core/appfw/pkgmgr-info.git] / src / server / database / query_handler.hh
index 5492af3..c58fbd1 100644 (file)
@@ -26,6 +26,7 @@
 #include "db_type.hh"
 #include "pkgmgrinfo_basic.h"
 #include "pkgmgrinfo_private.h"
+#include "query_parcelable.hh"
 
 namespace pkgmgr_server {
 namespace database {
@@ -34,24 +35,37 @@ namespace database {
 #define EXPORT_API __attribute__((visibility("default")))
 #endif
 
+enum class CacheChangeFlag {
+  NONE,
+  PKG,
+  APP,
+  APPBYPKG
+};
+
 class EXPORT_API QueryHandler : public AbstractDBHandler {
  public:
   QueryHandler(uid_t uid, int pid);
   ~QueryHandler();
-  void SetQueryArgs(std::vector<std::pair<int, std::vector<std::string>>> query_args);
+  void SetQueryArgs(std::vector<pkgmgr_common::parcel::QueryArgs> query_args);
   bool BindString(std::string value);
   bool BindInt(int value);
   std::string GetString();
   int GetInt();
   int GetRecordCount();
   int Execute() override;
-  std::vector<std::vector<std::string>> GetResult();
+  std::vector<pkgmgr_common::parcel::StrArgs> GetResult();
 
  private:
+  int ExecuteReadQuery(const std::vector<std::string>& queries,
+      const std::vector<std::vector<std::optional<std::string>>>& args_list);
+  int ExecuteWriteQuery(const std::vector<std::string>& queries,
+      const std::vector<std::vector<std::optional<std::string>>>& args_list,
+      const std::vector<std::pair<CacheChangeFlag, std::string>>& changes);
+
   uid_t uid_;
   std::vector<std::string> query_;
-  std::vector<std::pair<int, std::vector<std::string>>> query_args_;
-  std::vector<std::vector<std::string>> result_;
+  std::vector<pkgmgr_common::parcel::QueryArgs> query_args_;
+  std::vector<pkgmgr_common::parcel::StrArgs> result_;
 };
 
 }  // namespace database