Fix setting certinfo 16/304516/3
authorSangyoon Jang <jeremy.jang@samsung.com>
Thu, 18 Jan 2024 09:23:23 +0000 (18:23 +0900)
committerSangyoon Jang <jeremy.jang@samsung.com>
Wed, 24 Jan 2024 03:40:00 +0000 (03:40 +0000)
package_count is no longer used. Use insert or replace statement for
setting certinfo.

Change-Id: Id3e37d61dbff1ecaa72f58581c7de91428c174da
Signed-off-by: Sangyoon Jang <jeremy.jang@samsung.com>
parser/include/pkgmgr_parser_db_queries.h
src/server/certinfo_internal.cc
src/server/database/abstract_db_handler.cc
src/server/database/query_handler.cc

index 649bd64..6b7762f 100644 (file)
        "  dist2_im_cert INTEGER,\n" \
        "  dist2_signer_cert INTEGER)"
 
-#define QUERY_CREATE_TRIGGER_UPDATE_CERT_INFO \
-       "CREATE TRIGGER IF NOT EXISTS update_cert_info\n" \
-       "AFTER UPDATE ON package_cert_info\n" \
-       "WHEN (NEW.package_count = 0)\n" \
-       "BEGIN\n" \
-       "  DELETE FROM package_cert_info WHERE package=OLD.package;\n" \
-       "END"
-
-#define QUERY_CREATE_TRIGGER_UPDATE_CERT_INFO2 \
-       "CREATE TRIGGER IF NOT EXISTS update_cert_info2\n" \
-       "AFTER UPDATE ON package_cert_info\n" \
-       "WHEN (NEW.package_count = OLD.package_count + 1)\n" \
-       "BEGIN\n" \
-       "  UPDATE package_cert_index_info SET\n" \
-       "    cert_ref_count = cert_ref_count - 1\n" \
-       "  WHERE cert_id = OLD.author_root_cert\n" \
-       "    OR cert_id = OLD.author_im_cert\n" \
-       "    OR cert_id = OLD.author_signer_cert\n" \
-       "    OR cert_id = OLD.dist_root_cert\n" \
-       "    OR cert_id = OLD.dist_im_cert\n" \
-       "    OR cert_id = OLD.dist_signer_cert\n" \
-       "    OR cert_id = OLD.dist2_root_cert\n" \
-       "    OR cert_id = OLD.dist2_im_cert\n" \
-       "    OR cert_id = OLD.dist2_signer_cert;\n" \
-       "END"
-
 #define QUERY_CREATE_TRIGGER_DELETE_CERT_INFO \
        "CREATE TRIGGER IF NOT EXISTS delete_cert_info\n" \
        "AFTER DELETE ON package_cert_info\n" \
@@ -436,8 +410,6 @@ const char *PARSER_INIT_QUERIES[] = {
 const char *CERT_INIT_QUERIES[] = {
        QUERY_CREATE_TABLE_PACKAGE_CERT_INFO,
        QUERY_CREATE_TABLE_PACKAGE_CERT_INDEX_INFO,
-       QUERY_CREATE_TRIGGER_UPDATE_CERT_INFO,
-       QUERY_CREATE_TRIGGER_UPDATE_CERT_INFO2,
        QUERY_CREATE_TRIGGER_DELETE_CERT_INFO,
        QUERY_CREATE_TRIGGER_UPDATE_CERT_INDEX_INFO,
        NULL
index 833e126..0de80e1 100644 (file)
@@ -147,11 +147,11 @@ int SaveCertIndex(const tizen_base::Database& db,
 int SaveCertInfo(const tizen_base::Database& db,
     std::string_view pkgid, char* cert_info[]) {
   auto q_insert = tizen_base::Database::Sql(
-      "INSERT INTO package_cert_info (package, package_count,"
+      "INSERT OR REPLACE INTO package_cert_info (package,"
       " author_root_cert, author_im_cert, author_signer_cert,"
       " dist_root_cert, dist_im_cert, dist_signer_cert,"
       " dist2_root_cert, dist2_im_cert, dist2_signer_cert) "
-      "VALUES(?, 1,"
+      "VALUES(?,"
       " (SELECT cert_id FROM package_cert_index_info"
       "        WHERE cert_info=?),"
       " (SELECT cert_id FROM package_cert_index_info"
@@ -175,19 +175,9 @@ int SaveCertInfo(const tizen_base::Database& db,
   for (int i = 0; i < MAX_CERT_TYPE; i++)
     q_insert.Bind(cert_info[i]);
 
-  int code = static_cast<int>(db.Exec(q_insert));
-  if (code == SQLITE_CONSTRAINT) {
-    auto q_update = tizen_base::Database::Sql(
-        "UPDATE package_cert_info "
-        "SET package_count = package_count + 1 "
-        "WHERE package=?")
-        .Bind(std::string(pkgid));
-    auto r = db.Exec(q_update);
-    if (!r) {
-      _LOGE("error: %s", static_cast<const char*>(r));
-      return PMINFO_R_ERROR;
-    }
-  } else if (code != SQLITE_DONE) {
+  auto r = db.Exec(q_insert);
+  if (static_cast<int>(r) != SQLITE_DONE) {
+    _LOGE("error: %s", static_cast<const char*>(r));
     return PMINFO_R_ERROR;
   }
 
index e67aac7..e580d96 100644 (file)
@@ -76,6 +76,7 @@ tizen_base::Database OpenWriteDb(uid_t uid, const std::string& path) {
   tizen_base::Database db(path.c_str(), SQLITE_OPEN_READWRITE,
       WriteDbBusyHandler);
   db.OneStepExec({ "PRAGMA foreign_keys=ON" });
+  db.OneStepExec({ "PRAGMA recursive_triggers=ON" });
 
   return db;
 }
index 1d481e3..13a0e08 100644 (file)
@@ -86,8 +86,7 @@ constexpr const char query_certinfo_compare_app_certinfo[] =
     "package_app_info WHERE app_id IN (?, ?)";
 
 constexpr const char query_pkginfo_delete_certinfo[] =
-    "UPDATE package_cert_info SET "
-    "package_count = package_count - 1 WHERE package=?";
+    "DELETE FROM package_cert_info WHERE package=?";
 
 // For pkgmgr_parser
 constexpr const char query_insert_package_plugin_execution_info[] =