1 // Copyright (c) 2021 Samsung Electronics Co., Ltd All Rights Reserved
2 // Use of this source code is governed by an apache-2.0 license that can be
3 // found in the LICENSE file.
5 #include "query_request_handler.hh"
9 #include "parcelable_factory.hh"
10 #include "query_handler.hh"
11 #include "query_parcelable.hh"
12 #include "utils/logging.hh"
14 #include "pkgmgrinfo_debug.h"
16 namespace pcp = pkgmgr_common::parcel;
17 namespace psd = pkgmgr_server::database;
19 namespace pkgmgr_server {
20 namespace request_handler {
22 bool QueryRequestHandler::HandleRequest(unsigned char* data, size_t size,
23 const std::string& locale) {
24 auto abstract_parcel =
25 pcp::ParcelableFactory::GetInst().CreateParcel(data, size);
27 if (abstract_parcel == nullptr ||
28 abstract_parcel->GetType() != pcp::ParcelableType::Query) {
29 LOG(ERROR) << "Invalid parcel or type";
30 result_ = std::make_shared<pcp::ResultParcelable>(
31 PMINFO_R_ERROR, std::vector<pcp::StrArgs>{});
35 auto* parcel = dynamic_cast<pcp::QueryParcelable*>(abstract_parcel.get());
36 if (parcel == nullptr) {
37 LOG(ERROR) << "Parcel is empty";
38 result_ = std::make_shared<pcp::ResultParcelable>(
39 PMINFO_R_ERROR, std::vector<pcp::StrArgs>{});
43 psd::QueryHandler db(parcel->GetUid(), GetPID());
45 db.SetQueryArgs(parcel->ExtractQueryArgs());
46 db.SetDBType(parcel->GetDBType());
47 db.SetOpType(parcel->GetOpType());
48 int ret = db.Execute();
50 result_ = std::make_shared<pcp::ResultParcelable>(ret, db.GetResult());
55 } // namespace request_handler
56 } // namespace pkgmgr_server