aboutsummaryrefslogtreecommitdiffstats
path: root/server/sonar-db-dao/src
diff options
context:
space:
mode:
Diffstat (limited to 'server/sonar-db-dao/src')
-rw-r--r--server/sonar-db-dao/src/it/java/org/sonar/db/purge/PurgeDaoIT.java55
-rw-r--r--server/sonar-db-dao/src/main/java/org/sonar/db/purge/PurgeCommands.java19
-rw-r--r--server/sonar-db-dao/src/main/java/org/sonar/db/purge/PurgeDao.java1
-rw-r--r--server/sonar-db-dao/src/main/java/org/sonar/db/purge/PurgeMapper.java6
-rw-r--r--server/sonar-db-dao/src/main/resources/org/sonar/db/purge/PurgeMapper.xml11
-rw-r--r--server/sonar-db-dao/src/schema/schema-sq.ddl24
6 files changed, 109 insertions, 7 deletions
diff --git a/server/sonar-db-dao/src/it/java/org/sonar/db/purge/PurgeDaoIT.java b/server/sonar-db-dao/src/it/java/org/sonar/db/purge/PurgeDaoIT.java
index 10dda0d3735..b781c2ad344 100644
--- a/server/sonar-db-dao/src/it/java/org/sonar/db/purge/PurgeDaoIT.java
+++ b/server/sonar-db-dao/src/it/java/org/sonar/db/purge/PurgeDaoIT.java
@@ -2001,6 +2001,29 @@ oldCreationDate));
"sca_issue_uuid", "issue-uuid2", "sca_release_uuid", "release-uuid2")));
assertThat(db.countRowsOfTable(dbSession, "sca_issues_releases")).isEqualTo(2);
+
+ var issueReleaseChangeBase = Map.of("created_at", 0L, "updated_at", 0L);
+ db.executeInsert("sca_issue_rels_changes", merge(issueReleaseChangeBase, Map.of("uuid", "issue-release-change-uuid1",
+ "sca_issues_releases_uuid", "issue-release-uuid1")));
+ db.executeInsert("sca_issue_rels_changes", merge(issueReleaseChangeBase, Map.of("uuid", "issue-release-change-uuid2",
+ "sca_issues_releases_uuid", "issue-release-uuid2")));
+
+ assertThat(db.countRowsOfTable(dbSession, "sca_issue_rels_changes")).isEqualTo(2);
+
+ var analysisBase = Map.of(
+ "created_at", 0L,
+ "updated_at", 0L,
+ "status", "COMPLETED",
+ "errors", "[]",
+ "parsed_files", "[]",
+ "failed_reason", "something");
+ db.executeInsert("sca_analyses", merge(analysisBase, Map.of(
+ "uuid", "analysis-uuid1",
+ "component_uuid", branch1Uuid)));
+ db.executeInsert("sca_analyses", merge(analysisBase, Map.of(
+ "uuid", "analysis-uuid2",
+ "component_uuid", branch2Uuid)));
+ assertThat(db.countRowsOfTable(dbSession, "sca_analyses")).isEqualTo(2);
}
@Test
@@ -2016,6 +2039,32 @@ oldCreationDate));
assertThat(db.countRowsOfTable(dbSession, "sca_releases")).isEqualTo(1);
assertThat(db.countRowsOfTable(dbSession, "sca_dependencies")).isEqualTo(1);
assertThat(db.countRowsOfTable(dbSession, "sca_issues_releases")).isEqualTo(1);
+ assertThat(db.countRowsOfTable(dbSession, "sca_issue_rels_changes")).isEqualTo(1);
+ assertThat(db.countRowsOfTable(dbSession, "sca_analyses")).isEqualTo(1);
+ }
+
+ @Test
+ void deleteProject_purgesScaLicenseProfiles() {
+ ProjectDto project = db.components().insertPublicProject().getProjectDto();
+
+ var scaLicenseProfileProjectBase = Map.of(
+ "sca_license_profile_uuid", "sca-license-profile-uuid1",
+ "created_at", 0L,
+ "updated_at", 0L);
+
+ db.executeInsert("sca_lic_prof_projects", merge(scaLicenseProfileProjectBase, Map.of(
+ "uuid", "sca-lic-prof-project-uuid1",
+ "project_uuid", project.getUuid())));
+
+ db.executeInsert("sca_lic_prof_projects", merge(scaLicenseProfileProjectBase, Map.of(
+ "uuid", "sca-lic-prof-project-uuid2",
+ "project_uuid", "other-project-uuid")));
+
+ assertThat(db.countRowsOfTable(dbSession, "sca_lic_prof_projects")).isEqualTo(2);
+
+ underTest.deleteProject(dbSession, project.getUuid(), project.getQualifier(), project.getName(), project.getKey());
+
+ assertThat(db.countRowsOfTable(dbSession, "sca_lic_prof_projects")).isEqualTo(1);
}
@Test
@@ -2024,9 +2073,9 @@ oldCreationDate));
BranchDto branch1 = db.components().insertProjectBranch(project);
BranchDto branch2 = db.components().insertProjectBranch(project);
- db.executeInsert("architecture_graphs", Map.of("uuid", "12345", "branch_uuid", branch1.getUuid(), "source", "xoo", "type", "file_graph", "graph_data", "{}"));
- db.executeInsert("architecture_graphs", Map.of("uuid", "123456", "branch_uuid", branch1.getUuid(), "source", "xoo", "type", "class_graph", "graph_data", "{}"));
- db.executeInsert("architecture_graphs", Map.of("uuid", "1234567", "branch_uuid", branch2.getUuid(), "source", "xoo", "type", "file_graph", "graph_data", "{}"));
+ db.executeInsert("architecture_graphs", Map.of("uuid", "12345", "branch_uuid", branch1.getUuid(), "ecosystem", "xoo", "type", "file_graph", "graph_data", "{}"));
+ db.executeInsert("architecture_graphs", Map.of("uuid", "123456", "branch_uuid", branch1.getUuid(), "ecosystem", "xoo", "type", "class_graph", "graph_data", "{}"));
+ db.executeInsert("architecture_graphs", Map.of("uuid", "1234567", "branch_uuid", branch2.getUuid(), "ecosystem", "xoo", "type", "file_graph", "graph_data", "{}"));
assertThat(db.countRowsOfTable(dbSession, "architecture_graphs")).isEqualTo(3);
underTest.deleteBranch(dbSession, branch1.getUuid());
diff --git a/server/sonar-db-dao/src/main/java/org/sonar/db/purge/PurgeCommands.java b/server/sonar-db-dao/src/main/java/org/sonar/db/purge/PurgeCommands.java
index e0fb94fa09a..fca991f9f28 100644
--- a/server/sonar-db-dao/src/main/java/org/sonar/db/purge/PurgeCommands.java
+++ b/server/sonar-db-dao/src/main/java/org/sonar/db/purge/PurgeCommands.java
@@ -532,11 +532,24 @@ class PurgeCommands {
}
public void deleteScaActivity(String componentUuid) {
+ // delete sca_analyses first since it sort of marks the analysis as valid/existing
+ profiler.start("deleteScaAnalyses (sca_analyses)");
+ purgeMapper.deleteScaAnalysesByComponentUuid(componentUuid);
+ session.commit();
+ profiler.stop();
+
profiler.start("deleteScaDependencies (sca_dependencies)");
purgeMapper.deleteScaDependenciesByComponentUuid(componentUuid);
session.commit();
profiler.stop();
+ // this must be done before deleting sca_issues_releases or we won't
+ // be able to find the rows
+ profiler.start("deleteScaIssuesReleasesChanges (sca_issue_rels_changes)");
+ purgeMapper.deleteScaIssuesReleasesChangesByComponentUuid(componentUuid);
+ session.commit();
+ profiler.stop();
+
profiler.start("deleteScaIssuesReleases (sca_issues_releases)");
purgeMapper.deleteScaIssuesReleasesByComponentUuid(componentUuid);
session.commit();
@@ -549,4 +562,10 @@ class PurgeCommands {
session.commit();
profiler.stop();
}
+
+ public void deleteScaLicenseProfiles(String projectUuid) {
+ profiler.start("deleteScaLicenseProfileProjects (sca_lic_prof_projects)");
+ purgeMapper.deleteScaLicenseProfileProjectsByProjectUuid(projectUuid);
+ profiler.stop();
+ }
}
diff --git a/server/sonar-db-dao/src/main/java/org/sonar/db/purge/PurgeDao.java b/server/sonar-db-dao/src/main/java/org/sonar/db/purge/PurgeDao.java
index 79ebb206068..ff34ce5783d 100644
--- a/server/sonar-db-dao/src/main/java/org/sonar/db/purge/PurgeDao.java
+++ b/server/sonar-db-dao/src/main/java/org/sonar/db/purge/PurgeDao.java
@@ -314,6 +314,7 @@ public class PurgeDao implements Dao {
commands.deleteOutdatedProperties(projectUuid);
commands.deleteReportSchedules(projectUuid);
commands.deleteReportSubscriptions(projectUuid);
+ commands.deleteScaLicenseProfiles(projectUuid);
}
/**
diff --git a/server/sonar-db-dao/src/main/java/org/sonar/db/purge/PurgeMapper.java b/server/sonar-db-dao/src/main/java/org/sonar/db/purge/PurgeMapper.java
index 085b28cef6c..ab4b369aef6 100644
--- a/server/sonar-db-dao/src/main/java/org/sonar/db/purge/PurgeMapper.java
+++ b/server/sonar-db-dao/src/main/java/org/sonar/db/purge/PurgeMapper.java
@@ -195,11 +195,17 @@ public interface PurgeMapper {
void deleteIssuesFixedByBranchUuid(@Param("branchUuid") String branchUuid);
+ void deleteScaAnalysesByComponentUuid(@Param("componentUuid") String componentUuid);
+
void deleteScaDependenciesByComponentUuid(@Param("componentUuid") String componentUuid);
void deleteScaIssuesReleasesByComponentUuid(@Param("componentUuid") String componentUuid);
+ void deleteScaIssuesReleasesChangesByComponentUuid(@Param("componentUuid") String componentUuid);
+
void deleteScaReleasesByComponentUuid(@Param("componentUuid") String componentUuid);
+ void deleteScaLicenseProfileProjectsByProjectUuid(@Param("projectUuid") String projectUuid);
+
void deleteArchitectureGraphsByBranchUuid(@Param("branchUuid") String branchUuid);
}
diff --git a/server/sonar-db-dao/src/main/resources/org/sonar/db/purge/PurgeMapper.xml b/server/sonar-db-dao/src/main/resources/org/sonar/db/purge/PurgeMapper.xml
index f8d213b6a3b..bc5c066d6b4 100644
--- a/server/sonar-db-dao/src/main/resources/org/sonar/db/purge/PurgeMapper.xml
+++ b/server/sonar-db-dao/src/main/resources/org/sonar/db/purge/PurgeMapper.xml
@@ -674,13 +674,24 @@
delete from architecture_graphs where branch_uuid = #{branchUuid,jdbcType=VARCHAR}
</delete>
+ <delete id="deleteScaAnalysesByComponentUuid">
+ delete from sca_analyses where component_uuid = #{componentUuid,jdbcType=VARCHAR}
+ </delete>
<delete id="deleteScaDependenciesByComponentUuid">
delete from sca_dependencies where sca_release_uuid in (select uuid from sca_releases where component_uuid = #{componentUuid,jdbcType=VARCHAR})
</delete>
<delete id="deleteScaIssuesReleasesByComponentUuid">
delete from sca_issues_releases where sca_release_uuid in (select uuid from sca_releases where component_uuid = #{componentUuid,jdbcType=VARCHAR})
</delete>
+ <delete id="deleteScaIssuesReleasesChangesByComponentUuid">
+ delete from sca_issue_rels_changes where sca_issues_releases_uuid in
+ (select sca_issues_releases.uuid from sca_issues_releases join sca_releases on sca_releases.uuid = sca_issues_releases.sca_release_uuid
+ where sca_releases.component_uuid = #{componentUuid,jdbcType=VARCHAR})
+ </delete>
<delete id="deleteScaReleasesByComponentUuid">
delete from sca_releases where component_uuid = #{componentUuid,jdbcType=VARCHAR}
</delete>
+ <delete id="deleteScaLicenseProfileProjectsByProjectUuid">
+ delete from sca_lic_prof_projects where project_uuid = #{projectUuid,jdbcType=VARCHAR}
+ </delete>
</mapper>
diff --git a/server/sonar-db-dao/src/schema/schema-sq.ddl b/server/sonar-db-dao/src/schema/schema-sq.ddl
index bb7e4166b03..44464c73e4d 100644
--- a/server/sonar-db-dao/src/schema/schema-sq.ddl
+++ b/server/sonar-db-dao/src/schema/schema-sq.ddl
@@ -121,12 +121,14 @@ CREATE INDEX "IDX_APP_PROJ_PROJECT_UUID" ON "APP_PROJECTS"("PROJECT_UUID" NULLS
CREATE TABLE "ARCHITECTURE_GRAPHS"(
"UUID" CHARACTER VARYING(40) NOT NULL,
"BRANCH_UUID" CHARACTER VARYING(40) NOT NULL,
- "SOURCE" CHARACTER VARYING(255) NOT NULL,
+ "ECOSYSTEM" CHARACTER VARYING(255) NOT NULL,
"TYPE" CHARACTER VARYING(255) NOT NULL,
- "GRAPH_DATA" CHARACTER LARGE OBJECT NOT NULL
+ "GRAPH_DATA" CHARACTER LARGE OBJECT NOT NULL,
+ "ANALYSIS_UUID" CHARACTER VARYING(40),
+ "PERSPECTIVE_KEY" CHARACTER VARYING(255)
);
ALTER TABLE "ARCHITECTURE_GRAPHS" ADD CONSTRAINT "PK_ARCHITECTURE_GRAPHS" PRIMARY KEY("UUID");
-CREATE UNIQUE NULLS NOT DISTINCT INDEX "UQ_IDX_AG_BRANCH_TYPE_SOURCE" ON "ARCHITECTURE_GRAPHS"("BRANCH_UUID" NULLS FIRST, "TYPE" NULLS FIRST, "SOURCE" NULLS FIRST);
+CREATE UNIQUE NULLS NOT DISTINCT INDEX "UQ_IDX_AG_BRCH_TP_SRC_PSPCTV" ON "ARCHITECTURE_GRAPHS"("BRANCH_UUID" NULLS FIRST, "TYPE" NULLS FIRST, "ECOSYSTEM" NULLS FIRST, "PERSPECTIVE_KEY" NULLS FIRST);
CREATE TABLE "AUDITS"(
"UUID" CHARACTER VARYING(40) NOT NULL,
@@ -1042,6 +1044,19 @@ CREATE TABLE "SAML_MESSAGE_IDS"(
ALTER TABLE "SAML_MESSAGE_IDS" ADD CONSTRAINT "PK_SAML_MESSAGE_IDS" PRIMARY KEY("UUID");
CREATE UNIQUE NULLS NOT DISTINCT INDEX "SAML_MESSAGE_IDS_UNIQUE" ON "SAML_MESSAGE_IDS"("MESSAGE_ID" NULLS FIRST);
+CREATE TABLE "SCA_ANALYSES"(
+ "UUID" CHARACTER VARYING(40) NOT NULL,
+ "COMPONENT_UUID" CHARACTER VARYING(40) NOT NULL,
+ "STATUS" CHARACTER VARYING(40) NOT NULL,
+ "FAILED_REASON" CHARACTER VARYING(255),
+ "ERRORS" CHARACTER LARGE OBJECT NOT NULL,
+ "PARSED_FILES" CHARACTER LARGE OBJECT NOT NULL,
+ "CREATED_AT" BIGINT NOT NULL,
+ "UPDATED_AT" BIGINT NOT NULL
+);
+ALTER TABLE "SCA_ANALYSES" ADD CONSTRAINT "PK_SCA_ANALYSES" PRIMARY KEY("UUID");
+CREATE UNIQUE NULLS NOT DISTINCT INDEX "SCA_ANALYSES_COMPONENT_UNIQ" ON "SCA_ANALYSES"("COMPONENT_UUID" NULLS FIRST);
+
CREATE TABLE "SCA_DEPENDENCIES"(
"UUID" CHARACTER VARYING(40) NOT NULL,
"SCA_RELEASE_UUID" CHARACTER VARYING(40) NOT NULL,
@@ -1100,7 +1115,8 @@ CREATE TABLE "SCA_ISSUES_RELEASES"(
"CREATED_AT" BIGINT NOT NULL,
"UPDATED_AT" BIGINT NOT NULL,
"STATUS" CHARACTER VARYING(40) NOT NULL,
- "ASSIGNEE_UUID" CHARACTER VARYING(40)
+ "ASSIGNEE_UUID" CHARACTER VARYING(40),
+ "PREVIOUS_MANUAL_STATUS" CHARACTER VARYING(40)
);
ALTER TABLE "SCA_ISSUES_RELEASES" ADD CONSTRAINT "PK_SCA_ISSUES_RELEASES" PRIMARY KEY("UUID");
CREATE INDEX "SCA_ISSUES_RELEASES_SCA_ISSUE" ON "SCA_ISSUES_RELEASES"("SCA_ISSUE_UUID" NULLS FIRST);