int pkgmgr_parser_update_pending_cache(const char *pkgid);
+/**
+ * @fn int pkgmgr_parser_update_ro_to_rw_pkg_in_db(const char *pkgid)
+ * @brief This API updates package info that updated from RO package to RW package
+ *
+ * @par This API is only for internal usage
+ * @par Sync (or) Async : Synchronous API
+ *
+ * @param[in] pkgid package ID
+ * @return 0 if success, error code(<0) if fail
+ */
+int pkgmgr_parser_update_ro_to_rw_pkg_in_db(const char *pkgid);
+int pkgmgr_parser_update_ro_to_rw_pkg_in_usr_db(const char *pkgid, uid_t uid);
+
/** @} */
#ifdef __cplusplus
}
QUERY_INDEX_REGISTER_PKG_UPDATE_INFO,
QUERY_INDEX_UNREGISTER_PKG_UPDATE_INFO,
QUERY_INDEX_UNREGISTER_ALL_PKG_UPDATE_INFO,
+ QUERY_INDEX_UPDATE_RO_TO_RW_PACKAGE_INFO,
QUERY_INDEX_MAX
} QUERY_INDEX;
{
return _parser_update_pending_cache(pkgid);
}
+
+API int pkgmgr_parser_update_ro_to_rw_pkg_in_usr_db(
+ const char *pkgid, uid_t uid)
+{
+ const char *args[1] = { pkgid };
+ if (_parser_execute_write_query(QUERY_INDEX_UPDATE_RO_TO_RW_PACKAGE_INFO,
+ args, 1, uid) < 0) {
+ _LOGE("Fail to write to db");
+ return PM_PARSER_R_ERROR;
+ }
+
+ return PM_PARSER_R_OK;
+}
+
+API int pkgmgr_parser_update_ro_to_rw_pkg_in_db(const char *pkgid)
+{
+ return pkgmgr_parser_update_ro_to_rw_pkg_in_usr_db(pkgid, __getuid());
+}
"UPDATE package_update_info "
"SET update_type='none'";
+constexpr char query_update_RO_to_RW_package_info[] =
+ "UPDATE package_info "
+ "SET package_preload='false', package_system='false', package_update='false' "
+ "WHERE package=?";
+
class QueryMaker {
public:
using CacheChangeFlag = pkgmgr_server::database::CacheChangeFlag;
{ query_register_pkg_update_info, CacheChangeFlag::NONE, 0 },
{ query_unregister_pkg_update_info, CacheChangeFlag::NONE, 0 },
{ query_unregister_all_pkg_update_info, CacheChangeFlag::NONE, 0 },
+ { query_update_RO_to_RW_package_info, CacheChangeFlag::PKG, 0 },
};
const std::tuple<const char*, CacheChangeFlag, int>& GetQueryInfo(int index) {