" 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" \
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
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"
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;
}
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;
}
"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[] =