aboutsummaryrefslogtreecommitdiffstats
path: root/server/sonar-db-dao
diff options
context:
space:
mode:
authorDuarte Meneses <duarte.meneses@sonarsource.com>2021-11-04 16:01:17 -0500
committersonartech <sonartech@sonarsource.com>2021-11-09 20:03:16 +0000
commit411f4d9dcb09fefc23c03da7a108d090592e3fb9 (patch)
tree675fc61b1ea51c6b10ecbbfbf9610166a1e810de /server/sonar-db-dao
parente939bcb62791d0d494731030806d5a7b9f21ad45 (diff)
downloadsonarqube-411f4d9dcb09fefc23c03da7a108d090592e3fb9.tar.gz
sonarqube-411f4d9dcb09fefc23c03da7a108d090592e3fb9.zip
SONAR-15498 add IT and Purge should delete selected project if it only selects a branch being deleted
Diffstat (limited to 'server/sonar-db-dao')
-rw-r--r--server/sonar-db-dao/src/main/java/org/sonar/db/purge/PurgeCommands.java4
-rw-r--r--server/sonar-db-dao/src/main/java/org/sonar/db/purge/PurgeDao.java2
-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.xml13
-rw-r--r--server/sonar-db-dao/src/test/java/org/sonar/db/purge/PurgeCommandsTest.java21
5 files changed, 39 insertions, 3 deletions
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 feba85ea9e3..402bf9ef5b8 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
@@ -455,7 +455,11 @@ class PurgeCommands {
public void deleteProjectInPortfolios(String rootUuid) {
profiler.start("deleteProjectInPortfolios (portfolio_projects)");
+ // delete selected project if it's only selecting a single branch corresponding to rootUuid
+ purgeMapper.deletePortfolioProjectsByBranchUuid(rootUuid);
+ // delete selected branches if branch is rootUuid or if it's part of a project that is rootUuid
purgeMapper.deletePortfolioProjectBranchesByBranchUuid(rootUuid);
+ // delete selected project if project is rootUuid
purgeMapper.deletePortfolioProjectsByProjectUuid(rootUuid);
session.commit();
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 11a0ee7e67c..7e0d1efd9ac 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
@@ -165,7 +165,7 @@ public class PurgeDao implements Dao {
private static final class NewCodePeriodAnalysisFilter implements Predicate<PurgeableAnalysisDto> {
@Nullable
- private String analysisUuid;
+ private final String analysisUuid;
private NewCodePeriodAnalysisFilter(PurgeMapper mapper, String componentUuid) {
this.analysisUuid = mapper.selectSpecificAnalysisNewCodePeriod(componentUuid);
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 5270cec0721..348d043c7d5 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
@@ -147,6 +147,8 @@ public interface PurgeMapper {
void deleteApplicationBranchProjectBranchesByProjectBranchUuid(@Param("projectBranchUuid") String projectBranchUuid);
+ void deletePortfolioProjectsByBranchUuid(@Param("branchUuid") String branchUuid);
+
void deletePortfolioProjectsByProjectUuid(@Param("projectUuid") String projectUuid);
void deletePortfolioProjectBranchesByBranchUuid(@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 32267058e04..604300faae0 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
@@ -349,6 +349,19 @@
WHERE project_branch_uuid=#{projectBranchUuid,jdbcType=VARCHAR}
</delete>
+ <delete id="deletePortfolioProjectsByBranchUuid" parameterType="map">
+ <!-- deletes selected projects that were only selecting the branch being deleted -->
+ DELETE
+ FROM portfolio_projects
+ WHERE uuid in (
+ SELECT ppb.portfolio_project_uuid FROM portfolio_proj_branches ppb
+ <!-- branch was selected -->
+ WHERE ppb.branch_uuid = #{branchUuid,jdbcType=VARCHAR}
+ <!-- and was the only one selected in the project -->
+ AND (SELECT count(*) FROM portfolio_proj_branches ppb2 WHERE ppb2.portfolio_project_uuid = ppb.portfolio_project_uuid) = 1
+ )
+ </delete>
+
<delete id="deletePortfolioProjectsByProjectUuid" parameterType="map">
DELETE
FROM portfolio_projects
diff --git a/server/sonar-db-dao/src/test/java/org/sonar/db/purge/PurgeCommandsTest.java b/server/sonar-db-dao/src/test/java/org/sonar/db/purge/PurgeCommandsTest.java
index 33c0475e5e5..f0851b0858c 100644
--- a/server/sonar-db-dao/src/test/java/org/sonar/db/purge/PurgeCommandsTest.java
+++ b/server/sonar-db-dao/src/test/java/org/sonar/db/purge/PurgeCommandsTest.java
@@ -56,7 +56,6 @@ import org.sonar.db.user.UserDto;
import static com.google.common.collect.Lists.newArrayList;
import static java.util.Arrays.asList;
-import static java.util.Collections.emptyList;
import static java.util.Collections.singleton;
import static java.util.Collections.singletonList;
import static org.apache.commons.lang.RandomStringUtils.randomAlphabetic;
@@ -654,7 +653,7 @@ public class PurgeCommandsTest {
}
@Test
- public void deleteProjectInPortfolios_deletes_project_and_branch_from_portfolios() {
+ public void deleteProjectInPortfolios_deletes_project_and_branch_from_portfolios_if_root_is_branch() {
var portfolio1 = dbTester.components().insertPrivatePortfolioDto();
var portfolio2 = dbTester.components().insertPrivatePortfolioDto();
dbTester.components().insertPrivatePortfolio();
@@ -677,6 +676,24 @@ public class PurgeCommandsTest {
}
@Test
+ public void deleteProjectInPortfolios_deletes_project_and_branch_from_portfolios_if_root_is_project_only_selecting_a_single_branch() {
+ var portfolio1 = dbTester.components().insertPrivatePortfolioDto();
+ dbTester.components().insertPrivatePortfolio();
+ ProjectDto project = dbTester.components().insertPrivateProjectDto();
+
+ dbTester.components().addPortfolioProject(portfolio1, project);
+ dbTester.components().addPortfolioProjectBranch(portfolio1, project, "projectBranch");
+
+ PurgeCommands purgeCommands = new PurgeCommands(dbTester.getSession(), profiler, system2);
+
+ purgeCommands.deleteProjectInPortfolios(project.getUuid());
+
+ assertThat(dbTester.getDbClient().portfolioDao().selectAllPortfolioProjects(dbTester.getSession())).isEmpty();
+ assertThat(dbTester.countRowsOfTable("portfolio_proj_branches")).isZero();
+ assertThat(dbTester.countRowsOfTable("portfolio_projects")).isZero();
+ }
+
+ @Test
public void deleteProjectInPortfolios_deletes_branch_from_portfolios_if_root_is_branch() {
var portfolio1 = dbTester.components().insertPrivatePortfolioDto();
ProjectDto project = dbTester.components().insertPrivateProjectDto();