d1fca703ac69fcf6f87da5d598d67377dabe1c53
[platform/core/appfw/pkgmgr-info.git] / src / common / request_handler / query_request_handler.cc
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.
4
5 #include "query_request_handler.hh"
6 #include "parcelable_factory.hh"
7 #include "query_parcelable.hh"
8 #include "query_handler.hh"
9
10 #include <string>
11
12 using namespace pkgmgr_common::parcel;
13 using namespace pkgmgr_common::database;
14
15 namespace pkgmgr_server {
16 namespace request_handler {
17
18 bool QueryRequestHandler::HandleRequest(unsigned char* data, int size,
19                                         std::string locale) {
20   auto abstract_parcel = ParcelableFactory::GetInst().CreateParcel(data, size);
21
22   if (abstract_parcel == nullptr ||
23       abstract_parcel->GetType() != ParcelableType::Query)
24     return false;
25
26   auto* parcel = dynamic_cast<QueryParcelable*>(abstract_parcel.get());
27   if (parcel == nullptr) return false;
28
29   QueryHandler db(parcel->GetUid());
30   db.SetLocale(locale);
31   db.SetQuery(parcel->GetQuery());
32   db.SetDBType(parcel->GetDBType());
33   db.SetOpType(parcel->GetOpType());
34   if (db.Execute() == false) return false;
35
36   result_ = std::make_shared<ResultParcelable>(db.GetResult());
37
38   return true;
39 }
40
41 std::vector<uint8_t> QueryRequestHandler::GetResult() {
42   tizen_base::Parcel parcel;
43
44   parcel.WriteParcelable(*result_.get());
45   std::vector<uint8_t> raw = parcel.GetRaw();
46
47   return raw;
48 }
49
50 }  // namespace request_handler
51 }  // namespace pkgmgr_server