"SET_CERT_INFO",
"GET_CERT_INFO",
"GET_PKG_DEP_INFO",
- "QUERY",
+ "READ_QUERY",
+ "WRITE_QUERY",
"COMMAND",
"CREATE_DB",
"CREATE_CACHE",
SET_CERT_INFO,
GET_CERT_INFO,
GET_PKG_DEP_INFO,
- QUERY,
+ READ_QUERY,
+ WRITE_QUERY,
COMMAND,
CREATE_DB,
CREATE_CACHE,
bool IsDBWriteRequest(pkgmgr_common::ReqType req_type) {
if (req_type != pkgmgr_common::ReqType::SET_PKG_INFO &&
- req_type != pkgmgr_common::ReqType::SET_CERT_INFO)
+ req_type != pkgmgr_common::ReqType::SET_CERT_INFO &&
+ req_type != pkgmgr_common::ReqType::WRITE_QUERY)
return false;
return true;
pkgmgr_common::DBOperationType::OPERATION_TYPE_READ));
pkgmgr_client::PkgInfoClient client(parcelable, uid,
- pkgmgr_common::ReqType::QUERY);
+ pkgmgr_common::ReqType::READ_QUERY);
if (!client.SendRequest())
return nullptr;
pkgmgr_common::DBOperationType::OPERATION_TYPE_READ));
pkgmgr_client::PkgInfoClient client(parcelable, uid,
- pkgmgr_common::ReqType::QUERY);
+ pkgmgr_common::ReqType::READ_QUERY);
if (!client.SendRequest())
return PMINFO_R_ERROR;
pkgmgr_common::DBOperationType::OPERATION_TYPE_READ));
pkgmgr_client::PkgInfoClient client(parcelable, uid,
- pkgmgr_common::ReqType::QUERY);
+ pkgmgr_common::ReqType::READ_QUERY);
if (!client.SendRequest())
return PMINFO_R_ERROR;
pkgmgr_common::DBOperationType::OPERATION_TYPE_READ));
pkgmgr_client::PkgInfoClient client(parcelable, uid,
- pkgmgr_common::ReqType::QUERY);
+ pkgmgr_common::ReqType::READ_QUERY);
if (!client.SendRequest())
return PMINFO_R_ERROR;
pkgmgr_common::DBOperationType::OPERATION_TYPE_READ));
pkgmgr_client::PkgInfoClient client(parcelable, uid,
- pkgmgr_common::ReqType::QUERY);
+ pkgmgr_common::ReqType::READ_QUERY);
if (!client.SendRequest())
return PMINFO_R_ERROR;
pkgmgr_common::DBOperationType::OPERATION_TYPE_READ));
pkgmgr_client::PkgInfoClient client(parcelable, uid,
- pkgmgr_common::ReqType::QUERY);
+ pkgmgr_common::ReqType::READ_QUERY);
if (!client.SendRequest())
return PMINFO_R_ERROR;
pkgmgr_common::DBOperationType::OPERATION_TYPE_READ));
pkgmgr_client::PkgInfoClient client(parcelable, _getuid(),
- pkgmgr_common::ReqType::QUERY);
+ pkgmgr_common::ReqType::READ_QUERY);
if (!client.SendRequest())
return PMINFO_R_ERROR;
pkgmgr_common::DBOperationType::OPERATION_TYPE_READ));
pkgmgr_client::PkgInfoClient client(parcelable, uid,
- pkgmgr_common::ReqType::QUERY);
+ pkgmgr_common::ReqType::READ_QUERY);
if (!client.SendRequest())
return PMINFO_R_ERROR;
pkgmgr_common::DBOperationType::OPERATION_TYPE_WRITE));
pkgmgr_client::PkgInfoClient client(parcelable, uid,
- pkgmgr_common::ReqType::QUERY);
+ pkgmgr_common::ReqType::WRITE_QUERY);
if (!client.SendRequest())
return PMINFO_R_ERROR;
pkgmgr_common::DBType::DB_TYPE_FILE_CERTDB,
pkgmgr_common::DBOperationType::OPERATION_TYPE_READ));
pkgmgr_client::PkgInfoClient client(parcelable, 0,
- pkgmgr_common::ReqType::QUERY);
+ pkgmgr_common::ReqType::READ_QUERY);
if (!client.SendRequest())
return PMINFO_R_ERROR;
pkgmgr_common::DBType::DB_TYPE_FILE_PKGDB,
pkgmgr_common::DBOperationType::OPERATION_TYPE_READ));
pkgmgr_client::PkgInfoClient client(parcelable, uid,
- pkgmgr_common::ReqType::QUERY);
+ pkgmgr_common::ReqType::READ_QUERY);
if (!client.SendRequest())
return PMINFO_R_ERROR;
pkgmgr_common::DBOperationType::OPERATION_TYPE_WRITE));
pkgmgr_client::PkgInfoClient client(parcelable, uid,
- pkgmgr_common::ReqType::QUERY);
+ pkgmgr_common::ReqType::WRITE_QUERY);
if (!client.SendRequest())
return PMINFO_R_ERROR;
pkgmgr_common::DBOperationType::OPERATION_TYPE_WRITE));
pkgmgr_client::PkgInfoClient client(parcelable, uid,
- pkgmgr_common::ReqType::QUERY);
+ pkgmgr_common::ReqType::WRITE_QUERY);
if (!client.SendRequest())
return PMINFO_R_ERROR;
pkgmgr_common::DBOperationType::OPERATION_TYPE_WRITE));
pkgmgr_client::PkgInfoClient client(parcelable, 0,
- pkgmgr_common::ReqType::QUERY);
+ pkgmgr_common::ReqType::WRITE_QUERY);
if (!client.SendRequest())
return PMINFO_R_ERROR;
return std::move(result_);
}
-int QueryHandler::Execute() {
+int QueryHandler::ExecuteReadQuery(GList* queries, GList* args_list) {
std::shared_lock<std::shared_mutex> s(lock_);
if (!Connect()) {
LOG(ERROR) << "Failed to connect database";
return PMINFO_R_ERROR;
}
+ std::vector<std::pair<sqlite3*, uid_t>> conn_list = GetConnection();
+ int ret = PMINFO_R_ERROR;
+ for (auto& conn : conn_list) {
+ for (GList* it = args_list; it; it = it->next) {
+ GList* list = nullptr;
+ int row = 0;
+ int col = 0;
+
+ query_args* params = reinterpret_cast<query_args*>(it->data);
+ ret = get_query_result(conn.first, (const char *)queries->data,
+ params->argument, &list, &row, &col);
+ if (ret == PMINFO_R_ERROR) {
+ LOG(ERROR) << "Failed to execute query";
+ return ret;
+ }
+
+ GList* tmp = list;
+ for (int i = 0; i < row; ++i) {
+ pkgmgr_common::parcel::StrArgs vt;
+ for (int j = 0; j < col; ++j) {
+ if (!tmp->data)
+ vt.emplace_back(std::nullopt);
+ else
+ vt.emplace_back(reinterpret_cast<char *>(tmp->data));
+ tmp = tmp->next;
+ }
+ result_.emplace_back(std::move(vt));
+ }
+
+ g_list_free_full(list, free);
+ }
+ }
+
+ return ret;
+}
+
+int QueryHandler::ExecuteWriteQuery(GList* queries, GList* args_list) {
+ std::unique_lock<std::shared_mutex> u(lock_);
+ if (!Connect()) {
+ LOG(ERROR) << "Failed to connect database";
+ return PMINFO_R_ERROR;
+ }
+
+ std::vector<std::pair<sqlite3*, uid_t>> conn_list = GetConnection();
+ int ret = PMINFO_R_ERROR;
+ for (auto& conn : conn_list) {
+ ret = execute_write_queries(conn.first, queries, args_list);
+ if (ret != PMINFO_R_OK) {
+ LOG(ERROR) << "Failed to execute";
+ break;
+ }
+ }
+ database::DBHandleProvider::GetInst(GetUID()).TrimCache();
+ return ret;
+}
+
+int QueryHandler::Execute() {
GList* queries = nullptr;
GList* args_list = nullptr;
for (auto& i : query_args_) {
args_list = g_list_append(args_list, arg);
}
- std::vector<std::pair<sqlite3*, uid_t>> conn_list = GetConnection();
- int ret = PMINFO_R_ERROR;
if (GetOpType() == pkgmgr_common::DBOperationType::OPERATION_TYPE_READ) {
- for (auto& conn : conn_list) {
- for (GList* it = args_list; it; it = it->next) {
- GList* list = nullptr;
- int row = 0;
- int col = 0;
-
- query_args* params = reinterpret_cast<query_args*>(it->data);
- ret = get_query_result(conn.first, (const char *)queries->data,
- params->argument, &list, &row, &col);
- if (ret == PMINFO_R_ERROR) {
- LOG(ERROR) << "Failed to execute query";
- __free_query_list(queries, args_list);
- return ret;
- }
-
- GList* tmp = list;
- for (int i = 0; i < row; ++i) {
- pkgmgr_common::parcel::StrArgs vt;
- for (int j = 0; j < col; ++j) {
- if (!tmp->data)
- vt.emplace_back(std::nullopt);
- else
- vt.emplace_back(reinterpret_cast<char *>(tmp->data));
- tmp = tmp->next;
- }
- result_.emplace_back(std::move(vt));
- }
-
- g_list_free_full(list, free);
- }
- }
+ int ret = ExecuteReadQuery(queries, args_list);
__free_query_list(queries, args_list);
-
return ret;
} else {
- for (auto& conn : conn_list) {
- ret = execute_write_queries(conn.first, queries, args_list);
- if (ret != PMINFO_R_OK) {
- LOG(ERROR) << "Failed to execute";
- break;
- }
- }
+ int ret = ExecuteWriteQuery(queries, args_list);
__free_query_list(queries, args_list);
- database::DBHandleProvider::GetInst(GetUID()).TrimCache();
return ret;
}
- return ret;
}
} // namespace database
std::vector<pkgmgr_common::parcel::StrArgs> GetResult();
private:
+ int ExecuteReadQuery(GList* queries, GList* args_list);
+ int ExecuteWriteQuery(GList* queries, GList* args_list);
+
uid_t uid_;
std::vector<std::string> query_;
std::vector<pkgmgr_common::parcel::QueryArgs> query_args_;
handler.reset(
new pkgmgr_server::request_handler::GetDepinfoRequestHandler());
break;
- case pkgmgr_common::ReqType::QUERY:
+ case pkgmgr_common::ReqType::READ_QUERY:
+ handler.reset(new pkgmgr_server::request_handler::QueryRequestHandler());
+ break;
+ case pkgmgr_common::ReqType::WRITE_QUERY:
handler.reset(new pkgmgr_server::request_handler::QueryRequestHandler());
break;
case pkgmgr_common::ReqType::COMMAND:
new request_handler::GetCertRequestHandler());
handler[pkgmgr_common::ReqType::GET_PKG_DEP_INFO].reset(
new request_handler::GetDepinfoRequestHandler());
- handler[pkgmgr_common::ReqType::QUERY].reset(
+ handler[pkgmgr_common::ReqType::READ_QUERY].reset(
+ new request_handler::QueryRequestHandler());
+ handler[pkgmgr_common::ReqType::WRITE_QUERY].reset(
new request_handler::QueryRequestHandler());
handler[pkgmgr_common::ReqType::COMMAND].reset(
new request_handler::CommandRequestHandler());
EXPECT_EQ(strcmp(ReqTypeToString(type), "GET_PKG_DEP_INFO"), 0);
}
-TEST_F(RequestTypeTest, QueryTypeTest) {
- pc::ReqType type = pc::ReqType::QUERY;
- EXPECT_EQ(strcmp(ReqTypeToString(type), "QUERY"), 0);
+TEST_F(RequestTypeTest, GetQueryTypeTest) {
+ pc::ReqType type = pc::ReqType::READ_QUERY;
+ EXPECT_EQ(strcmp(ReqTypeToString(type), "READ_QUERY"), 0);
+}
+
+TEST_F(RequestTypeTest, SetQueryTypeTest) {
+ pc::ReqType type = pc::ReqType::WRITE_QUERY;
+ EXPECT_EQ(strcmp(ReqTypeToString(type), "WRITE_QUERY"), 0);
}
TEST_F(RequestTypeTest, CommandTypeTest) {