#include "db_type.hh"
#include "pkgmgrinfo_basic.h"
#include "pkgmgrinfo_private.h"
+#include "query_parcelable.hh"
namespace pkgmgr_server {
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