Add api for updating package info ro to rw 45/315945/1
authorIlho Kim <ilho159.kim@samsung.com>
Mon, 12 Aug 2024 01:36:07 +0000 (10:36 +0900)
committerIlho Kim <ilho159.kim@samsung.com>
Mon, 12 Aug 2024 01:54:28 +0000 (10:54 +0900)
Change-Id: Iad16dfd4d0b73afcfdefc6c139fedb6e128f3cd4
Signed-off-by: Ilho Kim <ilho159.kim@samsung.com>
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 e9b9ca99327f77a1effd3efb5ff66010292c6a44..1977f99931e0080dec4a218599380ef582ceb931 100644 (file)
@@ -584,6 +584,19 @@ int pkgmgr_parser_create_and_initialize_db(uid_t uid);
 
 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
 }
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 1804803c1dae8783da518bb7e8d89b03e2a1b148..f7799074f4a912b6d4bbe17ab8a8fbe974bbefae 100644 (file)
@@ -641,3 +641,21 @@ API int pkgmgr_parser_update_pending_cache(const char *pkgid)
 {
        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());
+}
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) {