aboutsummaryrefslogtreecommitdiffstats
path: root/server/sonar-db-dao/src
diff options
context:
space:
mode:
authorHavoc Pennington <havoc.pennington@sonarsource.com>2025-04-30 11:56:09 -0400
committersonartech <sonartech@sonarsource.com>2025-04-30 20:03:53 +0000
commitf726ef07e7e1836624489befab56ae7c59c3040d (patch)
treecc833156b5127f90dce83277889c25ea1d5189c6 /server/sonar-db-dao/src
parentfcb3daa28591b66e667994b5d771167f7c104a18 (diff)
downloadsonarqube-master.tar.gz
sonarqube-master.zip
SCA-324 save sca_analyses row for each SCA analysisHEADmaster
Diffstat (limited to 'server/sonar-db-dao/src')
-rw-r--r--server/sonar-db-dao/src/it/java/org/sonar/db/purge/PurgeDaoIT.java16
-rw-r--r--server/sonar-db-dao/src/main/java/org/sonar/db/purge/PurgeCommands.java6
-rw-r--r--server/sonar-db-dao/src/main/java/org/sonar/db/purge/PurgeMapper.java2
-rw-r--r--server/sonar-db-dao/src/main/resources/org/sonar/db/purge/PurgeMapper.xml3
-rw-r--r--server/sonar-db-dao/src/schema/schema-sq.ddl13
5 files changed, 40 insertions, 0 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..535a6109e38 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,21 @@ oldCreationDate));
"sca_issue_uuid", "issue-uuid2", "sca_release_uuid", "release-uuid2")));
assertThat(db.countRowsOfTable(dbSession, "sca_issues_releases")).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 +2031,7 @@ 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_analyses")).isEqualTo(1);
}
@Test
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..7f7519b661a 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,6 +532,12 @@ 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();
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..4df1984b48f 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,6 +195,8 @@ 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);
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..f713aebd9d7 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,6 +674,9 @@
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>
diff --git a/server/sonar-db-dao/src/schema/schema-sq.ddl b/server/sonar-db-dao/src/schema/schema-sq.ddl
index bb7e4166b03..1f942ae9125 100644
--- a/server/sonar-db-dao/src/schema/schema-sq.ddl
+++ b/server/sonar-db-dao/src/schema/schema-sq.ddl
@@ -1042,6 +1042,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,