Add api for updating package info ro to rw 17/316517/1
authorIlho Kim <ilho159.kim@samsung.com>
Mon, 12 Aug 2024 01:36:07 +0000 (10:36 +0900)
committerilho kim <ilho159.kim@samsung.com>
Thu, 22 Aug 2024 11:35:20 +0000 (11:35 +0000)
Change-Id: Iad16dfd4d0b73afcfdefc6c139fedb6e128f3cd4
Signed-off-by: Ilho Kim <ilho159.kim@samsung.com>
(cherry picked from commit 42c473d37ed678a77e36c889c93b6937b56e33e5)

parser/include/pkgmgr_parser_db.h
parser/include/pkgmgr_query_index.h
parser/src/pkgmgr_parser_db.c
src/server/database/query_handler.cc

index 4be306df9af2e9d50d8d5aeffa68aa4dc39b6e9d..cea9544e75df420ebd5a8c614f2813745d898bb6 100644 (file)
@@ -585,6 +585,19 @@ int pkgmgr_parser_create_and_initialize_db(uid_t uid);
 int pkgmgr_parser_clear_cache_memory_db(void);
 int pkgmgr_parser_clear_cache_usr_memory_db(uid_t uid);
 
+/**
+ * @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
 }
index 137bde605d1b4632becf287909b736c79731c819..8f036bb6880cae1f07f6c717e1be673cb2d7b042 100644 (file)
@@ -47,6 +47,7 @@ typedef enum {
        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;
 
index 866e529f5534a2d8c1ebbe5ebbd7823d59b8876d..46b9cb9d9ac2b6033895019604b163e9954c7857 100644 (file)
@@ -646,3 +646,21 @@ API int pkgmgr_parser_clear_cache_memory_db(void)
 {
        return pkgmgr_parser_clear_cache_usr_memory_db(__getuid());
 }
+
+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());
+}
index 13a0e08d2d486fde8c1eb5de44f43e33a108e4c3..e74415bbf9085e81c3b19b3003c06af4b795c6c9 100644 (file)
@@ -146,6 +146,11 @@ constexpr const char query_unregister_all_pkg_update_info[] =
     "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;
@@ -178,6 +183,7 @@ class QueryMaker {
     { 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) {