import java.util.Date;
import javax.annotation.CheckForNull;
import org.sonar.db.Dao;
+import org.sonar.db.DatabaseUtils;
import org.sonar.db.DbSession;
import org.sonar.db.organization.OrganizationDto;
mapper(session).deleteOrgQualityGatesByQualityGateUuid(qGate.getUuid());
}
+ public void deleteByUuids(DbSession session, Collection<String> uuids) {
+ QualityGateMapper mapper = mapper(session);
+ DatabaseUtils.executeLargeUpdates(uuids, partitionUuids -> {
+ mapper.deleteByUuids(partitionUuids);
+ mapper.deleteOrgQualityGatesByQualityGateUuids(partitionUuids);
+ });
+ }
+
public void update(QualityGateDto qGate, DbSession session) {
mapper(session).update(qGate.setUpdatedAt(new Date()));
}
*/
package org.sonar.db.qualitygate;
+import java.util.Collection;
import java.util.List;
import org.apache.ibatis.annotations.Param;
void delete(String uuid);
+ void deleteByUuids(@Param("uuids") Collection<String> uuids);
+
void deleteOrgQualityGatesByQualityGateUuid(String uuid);
+ void deleteOrgQualityGatesByQualityGateUuids(@Param("uuids") Collection<String> uuids);
+
void update(QualityGateDto qGate);
void ensureOneBuiltInQualityGate(String builtInQualityName);
delete from quality_gates where uuid=#{uuid}
</update>
+ <update id="deleteByUuids" parameterType="map">
+ delete from quality_gates
+ where uuid in
+ <foreach collection="uuids" open="(" close=")" item="uuid" separator=",">#{uuid, jdbcType=VARCHAR}</foreach>
+ </update>
+
<update id="deleteOrgQualityGatesByQualityGateUuid" parameterType="String">
delete from org_quality_gates where quality_gate_uuid=#{uuid}
</update>
+ <update id="deleteOrgQualityGatesByQualityGateUuids" parameterType="map">
+ delete from org_quality_gates
+ where quality_gate_uuid in
+ <foreach collection="uuids" open="(" close=")" item="uuid" separator=",">#{uuid, jdbcType=VARCHAR}</foreach>
+ </update>
+
<update id="update" parameterType="QualityGate">
update quality_gates set
name=#{name},
*/
package org.sonar.db.qualitygate;
+import java.util.Collections;
import java.util.Date;
import org.junit.Rule;
import org.junit.Test;
import org.sonar.db.organization.OrganizationDto;
import static java.lang.String.format;
+import static java.util.Arrays.asList;
import static org.assertj.core.api.Assertions.assertThat;
public class QualityGateDaoTest {
assertThat(db.countSql(dbSession, format("select count(*) from org_quality_gates where quality_gate_uuid='%s'", otherQualityGate.getUuid()))).isEqualTo(1);
}
+ @Test
+ public void delete_by_uuids() {
+ OrganizationDto organization = db.organizations().insert();
+ QGateWithOrgDto qualityGate1 = qualityGateDbTester.insertQualityGate(organization);
+ QGateWithOrgDto qualityGate2 = qualityGateDbTester.insertQualityGate(organization);
+
+ underTest.deleteByUuids(dbSession, asList(qualityGate1.getUuid(), qualityGate2.getUuid()));
+ dbSession.commit();
+
+ assertThat(db.countRowsOfTable(dbSession, "quality_gates")).isZero();
+ assertThat(db.countRowsOfTable(dbSession, "org_quality_gates")).isZero();
+ }
+
+ @Test
+ public void delete_by_uuids_does_nothing_on_empty_list() {
+ underTest.deleteByUuids(dbSession, Collections.emptyList());
+ dbSession.commit();
+
+ assertThat(db.countRowsOfTable(dbSession, "quality_gates")).isZero();
+ }
+
@Test
public void update() {
OrganizationDto organization = db.organizations().insert();
import org.sonar.api.server.ws.Request;
import org.sonar.api.server.ws.Response;
import org.sonar.api.server.ws.WebService;
+import org.sonar.core.util.stream.MoreCollectors;
import org.sonar.db.DbClient;
import org.sonar.db.DbSession;
import org.sonar.db.component.ComponentDto;
import org.sonar.db.organization.OrganizationDto;
+import org.sonar.db.qualitygate.QualityGateDto;
import org.sonar.db.qualityprofile.QProfileDto;
import org.sonar.server.component.ComponentCleanerService;
import org.sonar.server.organization.DefaultOrganization;
String key = request.mandatoryParam(PARAM_ORGANIZATION);
preventDeletionOfDefaultOrganization(key, defaultOrganizationProvider.get());
- OrganizationDto organization = checkFoundWithOptional(
- dbClient.organizationDao().selectByKey(dbSession, key),
- "Organization with key '%s' not found",
- key);
-
+ OrganizationDto organization = checkFoundWithOptional(dbClient.organizationDao().selectByKey(dbSession, key), "Organization with key '%s' not found", key);
if (organization.isGuarded()) {
userSession.checkIsSystemAdministrator();
} else {
deletePermissions(dbSession, organization);
deleteGroups(dbSession, organization);
deleteQualityProfiles(dbSession, organization);
+ deleteQualityGates(dbSession, organization);
deleteOrganization(dbSession, organization);
response.noContent();
qProfileFactory.delete(dbSession, profiles);
}
+ private void deleteQualityGates(DbSession dbSession, OrganizationDto organization) {
+ Collection<QualityGateDto> qualityGates = dbClient.qualityGateDao().selectAll(dbSession, organization);
+ dbClient.qualityGateDao().deleteByUuids(dbSession, qualityGates.stream().map(QualityGateDto::getUuid).collect(MoreCollectors.toList()));
+ }
+
private void deleteOrganization(DbSession dbSession, OrganizationDto organization) {
Collection<String> logins = dbClient.organizationMemberDao().selectLoginsByOrganizationUuid(dbSession, organization.getUuid());
dbClient.organizationMemberDao().deleteByOrganizationUuid(dbSession, organization.getUuid());
import org.sonar.db.component.ResourceTypesRule;
import org.sonar.db.organization.OrganizationDto;
import org.sonar.db.permission.template.PermissionTemplateDto;
+import org.sonar.db.qualitygate.QGateWithOrgDto;
import org.sonar.db.qualityprofile.QProfileDto;
import org.sonar.db.user.GroupDto;
import org.sonar.db.user.UserDto;
.containsOnly(profileInOtherOrg.getKee());
}
+ @Test
+ public void delete_quality_gates() {
+ OrganizationDto org = db.organizations().insert();
+ OrganizationDto otherOrg = db.organizations().insert();
+ QGateWithOrgDto qualityGate = db.qualityGates().insertQualityGate(org);
+ QGateWithOrgDto qualityGateInOtherOrg = db.qualityGates().insertQualityGate(otherOrg);
+ logInAsAdministrator(org);
+
+ sendRequest(org);
+
+ verifyOrganizationDoesNotExist(org);
+ assertThat(db.select("select uuid as \"uuid\" from quality_gates"))
+ .extracting(row -> (String) row.get("uuid"))
+ .containsOnly(qualityGateInOtherOrg.getUuid());
+ assertThat(db.select("select organization_uuid as \"organizationUuid\" from org_quality_gates"))
+ .extracting(row -> (String) row.get("organizationUuid"))
+ .containsOnly(otherOrg.getUuid());
+ }
+
private void verifyOrganizationDoesNotExist(OrganizationDto organization) {
assertThat(db.getDbClient().organizationDao().selectByKey(session, organization.getKey())).isEmpty();
}