aboutsummaryrefslogtreecommitdiffstats
path: root/server/sonar-db-dao/src
diff options
context:
space:
mode:
authorSteve Marion <steve.marion@sonarsource.com>2023-10-13 09:22:53 +0200
committersonartech <sonartech@sonarsource.com>2023-10-16 20:02:49 +0000
commitf3b4b50cdceda15c22bc75d578ef81b34c850b7f (patch)
tree4ef92f75b1eb4ae5973df32937aa73472f82797b /server/sonar-db-dao/src
parent92b69f90be5767fa2d26b7d3e0201be5b29f26bf (diff)
downloadsonarqube-f3b4b50cdceda15c22bc75d578ef81b34c850b7f.tar.gz
sonarqube-f3b4b50cdceda15c22bc75d578ef81b34c850b7f.zip
SONAR-20672 QualityProfileChange now record the version of SQ the change was done with. Added sq_version field in database. refactor QpChange insertion to batch insert at the same date to improve change grouping in UI. refactor rule impact. add "sonarQubeVersion" parameter to "api/qualityprofile/changelog" endpoint.
Diffstat (limited to 'server/sonar-db-dao/src')
-rw-r--r--server/sonar-db-dao/src/it/java/org/sonar/db/qualityprofile/QProfileChangeDaoIT.java18
-rw-r--r--server/sonar-db-dao/src/main/java/org/sonar/db/qualityprofile/QProfileChangeDao.java11
-rw-r--r--server/sonar-db-dao/src/main/java/org/sonar/db/qualityprofile/QProfileChangeDto.java11
-rw-r--r--server/sonar-db-dao/src/main/resources/org/sonar/db/qualityprofile/QProfileChangeMapper.xml7
-rw-r--r--server/sonar-db-dao/src/schema/schema-sq.ddl3
5 files changed, 46 insertions, 4 deletions
diff --git a/server/sonar-db-dao/src/it/java/org/sonar/db/qualityprofile/QProfileChangeDaoIT.java b/server/sonar-db-dao/src/it/java/org/sonar/db/qualityprofile/QProfileChangeDaoIT.java
index 8779e7d5ecf..4dd8044f262 100644
--- a/server/sonar-db-dao/src/it/java/org/sonar/db/qualityprofile/QProfileChangeDaoIT.java
+++ b/server/sonar-db-dao/src/it/java/org/sonar/db/qualityprofile/QProfileChangeDaoIT.java
@@ -22,6 +22,8 @@ package org.sonar.db.qualityprofile;
import java.util.List;
import java.util.Map;
import java.util.Set;
+import java.util.stream.Collectors;
+import java.util.stream.Stream;
import javax.annotation.Nullable;
import org.junit.Rule;
import org.junit.Test;
@@ -96,6 +98,22 @@ public class QProfileChangeDaoIT {
}
@Test
+ public void whenBulkInsert_thenDateAreTheSame() {
+ List<QProfileChangeDto> changes = Stream.generate(QProfileChangeDto::new)
+ .peek(dto -> dto.setRulesProfileUuid("rule_profil_uuid").setChangeType("type"))
+ .limit(3)
+ .collect(Collectors.toList());
+
+ underTest.bulkInsert(dbSession, changes);
+
+ assertThat(changes)
+ .noneMatch(dto -> dto.getCreatedAt() == 0L);
+ assertThat(changes)
+ .extracting(QProfileChangeDto::getCreatedAt)
+ .containsOnly(changes.get(0).getCreatedAt());
+ }
+
+ @Test
public void selectByQuery_returns_empty_list_if_profile_does_not_exist() {
List<QProfileChangeDto> changes = underTest.selectByQuery(dbSession, new QProfileChangeQuery("P1"));
diff --git a/server/sonar-db-dao/src/main/java/org/sonar/db/qualityprofile/QProfileChangeDao.java b/server/sonar-db-dao/src/main/java/org/sonar/db/qualityprofile/QProfileChangeDao.java
index c30cf61fe68..77e6c5b0371 100644
--- a/server/sonar-db-dao/src/main/java/org/sonar/db/qualityprofile/QProfileChangeDao.java
+++ b/server/sonar-db-dao/src/main/java/org/sonar/db/qualityprofile/QProfileChangeDao.java
@@ -39,10 +39,19 @@ public class QProfileChangeDao implements Dao {
this.uuidFactory = uuidFactory;
}
+ public void bulkInsert(DbSession dbSession, Collection<QProfileChangeDto> profileChangeDtos) {
+ long now = system2.now();
+ profileChangeDtos.forEach(dto -> doInsertAtTime(dbSession, dto, now));
+ }
+
public void insert(DbSession dbSession, QProfileChangeDto dto) {
+ doInsertAtTime(dbSession, dto, system2.now());
+ }
+
+ private void doInsertAtTime(DbSession dbSession, QProfileChangeDto dto, long time) {
checkState(dto.getCreatedAt() == 0L, "Date of QProfileChangeDto must be set by DAO only. Got %s.", dto.getCreatedAt());
+ dto.setCreatedAt(time);
dto.setUuid(uuidFactory.create());
- dto.setCreatedAt(system2.now());
mapper(dbSession).insert(dto);
}
diff --git a/server/sonar-db-dao/src/main/java/org/sonar/db/qualityprofile/QProfileChangeDto.java b/server/sonar-db-dao/src/main/java/org/sonar/db/qualityprofile/QProfileChangeDto.java
index 1ef6c4e3242..73dfe07e5c1 100644
--- a/server/sonar-db-dao/src/main/java/org/sonar/db/qualityprofile/QProfileChangeDto.java
+++ b/server/sonar-db-dao/src/main/java/org/sonar/db/qualityprofile/QProfileChangeDto.java
@@ -37,6 +37,7 @@ public class QProfileChangeDto {
private String data;
private long createdAt;
private RuleChangeDto ruleChange;
+ private String sqVersion;
public String getUuid() {
return uuid;
@@ -47,6 +48,16 @@ public class QProfileChangeDto {
return this;
}
+ @CheckForNull
+ public String getSqVersion() {
+ return sqVersion;
+ }
+
+ public QProfileChangeDto setSqVersion(String sqVersion) {
+ this.sqVersion = sqVersion;
+ return this;
+ }
+
public String getRulesProfileUuid() {
return rulesProfileUuid;
}
diff --git a/server/sonar-db-dao/src/main/resources/org/sonar/db/qualityprofile/QProfileChangeMapper.xml b/server/sonar-db-dao/src/main/resources/org/sonar/db/qualityprofile/QProfileChangeMapper.xml
index fa0dda95378..6503fe3b4d3 100644
--- a/server/sonar-db-dao/src/main/resources/org/sonar/db/qualityprofile/QProfileChangeMapper.xml
+++ b/server/sonar-db-dao/src/main/resources/org/sonar/db/qualityprofile/QProfileChangeMapper.xml
@@ -10,6 +10,7 @@
qpc.user_uuid as userUuid,
qpc.change_type as changeType,
qpc.change_data as data,
+ qpc.sq_version as sqVersion,
rc.uuid as "rc_uuid",
rc.old_clean_code_attribute as oldCleanCodeAttribute,
rc.new_clean_code_attribute as newCleanCodeAttribute,
@@ -30,7 +31,8 @@
user_uuid,
change_type,
change_data,
- rule_change_uuid
+ rule_change_uuid,
+ sq_version
) values (
#{uuid, jdbcType=VARCHAR},
#{rulesProfileUuid, jdbcType=VARCHAR},
@@ -38,7 +40,8 @@
#{userUuid, jdbcType=VARCHAR},
#{changeType, jdbcType=VARCHAR},
#{data, jdbcType=VARCHAR},
- #{ruleChange.uuid, jdbcType=VARCHAR}
+ #{ruleChange.uuid, jdbcType=VARCHAR},
+ #{sqVersion, jdbcType=VARCHAR}
)
</insert>
diff --git a/server/sonar-db-dao/src/schema/schema-sq.ddl b/server/sonar-db-dao/src/schema/schema-sq.ddl
index bc77b77d309..100f7da4449 100644
--- a/server/sonar-db-dao/src/schema/schema-sq.ddl
+++ b/server/sonar-db-dao/src/schema/schema-sq.ddl
@@ -811,7 +811,8 @@ CREATE TABLE "QPROFILE_CHANGES"(
"USER_UUID" CHARACTER VARYING(255),
"CHANGE_DATA" CHARACTER LARGE OBJECT,
"CREATED_AT" BIGINT NOT NULL,
- "RULE_CHANGE_UUID" CHARACTER VARYING(40)
+ "RULE_CHANGE_UUID" CHARACTER VARYING(40),
+ "SQ_VERSION" CHARACTER VARYING(40)
);
ALTER TABLE "QPROFILE_CHANGES" ADD CONSTRAINT "PK_QPROFILE_CHANGES" PRIMARY KEY("KEE");
CREATE INDEX "QP_CHANGES_RULES_PROFILE_UUID" ON "QPROFILE_CHANGES"("RULES_PROFILE_UUID" NULLS FIRST);