From b305b224ed108cd0d81ff3ac69120540ec1d1d76 Mon Sep 17 00:00:00 2001 From: Arjav Date: Mon, 13 Oct 2025 08:52:17 +0530 Subject: [PATCH 1/4] delete policy violations before component Signed-off-by: Arjav --- .../persistence/ProjectQueryManager.java | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/main/java/org/dependencytrack/persistence/ProjectQueryManager.java b/src/main/java/org/dependencytrack/persistence/ProjectQueryManager.java index a733aadd2..3f2fbd8d5 100644 --- a/src/main/java/org/dependencytrack/persistence/ProjectQueryManager.java +++ b/src/main/java/org/dependencytrack/persistence/ProjectQueryManager.java @@ -1074,6 +1074,12 @@ final class ProjectQueryManager extends QueryManager implements IQueryManager { ); executeAndCloseWithArray(sqlQuery, queryParameter); + sqlQuery = pm.newQuery(JDOQuery.SQL_QUERY_LANGUAGE, """ + DELETE FROM "POLICYVIOLATION" WHERE "PROJECT_ID" = ANY(?); + """.replace("= ANY(?)", inExpression) + ); + executeAndCloseWithArray(sqlQuery, queryParameter); + // Deletion with CTEs does not work with H2, but verified on Postgres and MS SQL Server if (!DbUtil.isH2()) { if (DbUtil.isPostgreSQL()) { @@ -1186,12 +1192,6 @@ final class ProjectQueryManager extends QueryManager implements IQueryManager { ); executeAndCloseWithArray(sqlQuery, queryParameter); - sqlQuery = pm.newQuery(JDOQuery.SQL_QUERY_LANGUAGE, """ - DELETE FROM "POLICYVIOLATION" WHERE "PROJECT_ID" = ANY(?); - """.replace("= ANY(?)", inExpression) - ); - executeAndCloseWithArray(sqlQuery, queryParameter); - sqlQuery = pm.newQuery(JDOQuery.SQL_QUERY_LANGUAGE, """ DELETE FROM "POLICY_PROJECTS" WHERE "PROJECT_ID" = ANY(?); """.replace("= ANY(?)", inExpression) From 20929ed18ed6f9cb49421ad218b50ef3ba0cc637 Mon Sep 17 00:00:00 2001 From: Arjav Date: Mon, 13 Oct 2025 08:52:17 +0530 Subject: [PATCH 2/4] delete policy violations before component Signed-off-by: Arjav --- .../persistence/ProjectQueryManager.java | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/main/java/org/dependencytrack/persistence/ProjectQueryManager.java b/src/main/java/org/dependencytrack/persistence/ProjectQueryManager.java index a733aadd2..3f2fbd8d5 100644 --- a/src/main/java/org/dependencytrack/persistence/ProjectQueryManager.java +++ b/src/main/java/org/dependencytrack/persistence/ProjectQueryManager.java @@ -1074,6 +1074,12 @@ final class ProjectQueryManager extends QueryManager implements IQueryManager { ); executeAndCloseWithArray(sqlQuery, queryParameter); + sqlQuery = pm.newQuery(JDOQuery.SQL_QUERY_LANGUAGE, """ + DELETE FROM "POLICYVIOLATION" WHERE "PROJECT_ID" = ANY(?); + """.replace("= ANY(?)", inExpression) + ); + executeAndCloseWithArray(sqlQuery, queryParameter); + // Deletion with CTEs does not work with H2, but verified on Postgres and MS SQL Server if (!DbUtil.isH2()) { if (DbUtil.isPostgreSQL()) { @@ -1186,12 +1192,6 @@ final class ProjectQueryManager extends QueryManager implements IQueryManager { ); executeAndCloseWithArray(sqlQuery, queryParameter); - sqlQuery = pm.newQuery(JDOQuery.SQL_QUERY_LANGUAGE, """ - DELETE FROM "POLICYVIOLATION" WHERE "PROJECT_ID" = ANY(?); - """.replace("= ANY(?)", inExpression) - ); - executeAndCloseWithArray(sqlQuery, queryParameter); - sqlQuery = pm.newQuery(JDOQuery.SQL_QUERY_LANGUAGE, """ DELETE FROM "POLICY_PROJECTS" WHERE "PROJECT_ID" = ANY(?); """.replace("= ANY(?)", inExpression) From 645c710d7ae7a63d95260a0bbc7cb1630ab553d4 Mon Sep 17 00:00:00 2001 From: Arjav Date: Mon, 13 Oct 2025 20:50:48 +0530 Subject: [PATCH 3/4] delete NOTIFICATIONRULE_TEAMS before deleting teams Signed-off-by: Arjav --- .../java/org/dependencytrack/persistence/QueryManager.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/main/java/org/dependencytrack/persistence/QueryManager.java b/src/main/java/org/dependencytrack/persistence/QueryManager.java index e13965e13..c099017b9 100644 --- a/src/main/java/org/dependencytrack/persistence/QueryManager.java +++ b/src/main/java/org/dependencytrack/persistence/QueryManager.java @@ -1542,6 +1542,10 @@ public class QueryManager extends AlpineQueryManager { final Query aclDeleteQuery = pm.newQuery(JDOQuery.SQL_QUERY_LANGUAGE, """ DELETE FROM "PROJECT_ACCESS_TEAMS" WHERE "PROJECT_ACCESS_TEAMS"."TEAM_ID" = ?"""); executeAndCloseWithArray(aclDeleteQuery, team.getId()); + + final Query notificationRuleQuery = pm.newQuery(JDOQuery.SQL_QUERY_LANGUAGE, """ + DELETE FROM "NOTIFICATIONRULE_TEAMS" WHERE "NOTIFICATIONRULE_TEAMS"."TEAM_ID" = ?"""); + executeAndCloseWithArray(notificationRuleQuery, team.getId()); } pm.deletePersistent(team); From aa5956e5c7e176ae0dbc9c362d7632eb480c7860 Mon Sep 17 00:00:00 2001 From: Arjav Date: Mon, 13 Oct 2025 20:51:55 +0530 Subject: [PATCH 4/4] revert policy query Signed-off-by: Arjav --- .../persistence/ProjectQueryManager.java | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/main/java/org/dependencytrack/persistence/ProjectQueryManager.java b/src/main/java/org/dependencytrack/persistence/ProjectQueryManager.java index 3f2fbd8d5..a733aadd2 100644 --- a/src/main/java/org/dependencytrack/persistence/ProjectQueryManager.java +++ b/src/main/java/org/dependencytrack/persistence/ProjectQueryManager.java @@ -1074,12 +1074,6 @@ final class ProjectQueryManager extends QueryManager implements IQueryManager { ); executeAndCloseWithArray(sqlQuery, queryParameter); - sqlQuery = pm.newQuery(JDOQuery.SQL_QUERY_LANGUAGE, """ - DELETE FROM "POLICYVIOLATION" WHERE "PROJECT_ID" = ANY(?); - """.replace("= ANY(?)", inExpression) - ); - executeAndCloseWithArray(sqlQuery, queryParameter); - // Deletion with CTEs does not work with H2, but verified on Postgres and MS SQL Server if (!DbUtil.isH2()) { if (DbUtil.isPostgreSQL()) { @@ -1192,6 +1186,12 @@ final class ProjectQueryManager extends QueryManager implements IQueryManager { ); executeAndCloseWithArray(sqlQuery, queryParameter); + sqlQuery = pm.newQuery(JDOQuery.SQL_QUERY_LANGUAGE, """ + DELETE FROM "POLICYVIOLATION" WHERE "PROJECT_ID" = ANY(?); + """.replace("= ANY(?)", inExpression) + ); + executeAndCloseWithArray(sqlQuery, queryParameter); + sqlQuery = pm.newQuery(JDOQuery.SQL_QUERY_LANGUAGE, """ DELETE FROM "POLICY_PROJECTS" WHERE "PROJECT_ID" = ANY(?); """.replace("= ANY(?)", inExpression)