X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=src%2Fserver%2Fdatabase%2Fpkg_set_db_handler.cc;h=639949fe78450f137d26e38cfb885879a792fbe0;hb=930004e0b90b2559b011a07d58266c4ac0813adb;hp=d4c46b1bef741f9ead7ee9e2407ed81c205ace2e;hpb=2946afd81154c745a37dc1546fe30f0f31b29488;p=platform%2Fcore%2Fappfw%2Fpkgmgr-info.git diff --git a/src/server/database/pkg_set_db_handler.cc b/src/server/database/pkg_set_db_handler.cc index d4c46b1..639949f 100644 --- a/src/server/database/pkg_set_db_handler.cc +++ b/src/server/database/pkg_set_db_handler.cc @@ -18,7 +18,9 @@ #include +#include "cache_flag.hh" #include "db_handle_provider.hh" +#include "utils/logging.hh" #include "pkgmgrinfo_debug.h" #include "pkgmgrinfo_internal.h" @@ -26,8 +28,8 @@ namespace pkgmgr_server { namespace database { -PkgSetDBHandler::PkgSetDBHandler(uid_t uid, int pid) - : AbstractDBHandler(uid, pid), uid_(uid) {} +PkgSetDBHandler::PkgSetDBHandler(uid_t uid, int pid, bool is_offline) + : AbstractDBHandler(uid, pid), uid_(uid), is_offline_(is_offline) {} PkgSetDBHandler::~PkgSetDBHandler() {} @@ -48,17 +50,20 @@ std::vector> PkgSetDBHandler::GetResult() { } int PkgSetDBHandler::Execute() { - std::unique_lock u(lock_); + std::unique_lock u(lock_); SetOpType(pkgmgr_common::DBOperationType::OPERATION_TYPE_WRITE); SetDBType(pkgmgr_common::DBType::DB_TYPE_FILE_PKGDB); if (!Connect()) return PMINFO_R_ERROR; - DBHandleProvider::GetInst(uid_).SetMemoryMode(GetPID()); + if (!is_offline_) + DBHandleProvider::GetInst(uid_).SetMemoryMode(GetPID()); + std::vector> conn_list = GetConnection(); sqlite3* conn = conn_list.front().first; int ret = 0; + if (write_type_ == pkgmgr_common::PkgWriteType::Insert) ret = pkgmgr_parser_insert_pkg_info(conn, package_, uid_); else if (write_type_ == pkgmgr_common::PkgWriteType::Update) @@ -66,11 +71,15 @@ int PkgSetDBHandler::Execute() { else if (write_type_ == pkgmgr_common::PkgWriteType::Delete) ret = pkgmgr_parser_delete_pkg_info(conn, package_->package, uid_); else - _LOGE("Unknown db write type"); + LOG(ERROR) << "Unknown db write type"; - if (ret != PM_PARSER_R_OK) + if (is_offline_ || ret != PMINFO_R_OK) return ret; + auto lock = CacheFlag::GetWriterLock(); + if (CacheFlag::GetStatus() == CacheFlag::Status::PREPARED) + DBHandleProvider::GetInst(uid_).RegisterPendingPackageInfo(package_); + return ret; }