From 99374f79d07f74e433104df73cc3717284b8ac02 Mon Sep 17 00:00:00 2001 From: Julien Lancelot Date: Fri, 25 Sep 2015 17:19:28 +0200 Subject: SONAR-6332 Prevent provisioning projects with same key on MySQL --- .../java/org/sonar/db/component/ComponentDao.java | 8 + .../org/sonar/db/component/ComponentMapper.java | 4 + .../org/sonar/db/component/ComponentMapper.xml | 17 +- .../org/sonar/db/component/ComponentDaoTest.java | 176 ++++++++++++--------- .../ComponentDaoWithDuplicatedKeysTest.java | 72 +++++++++ .../component/ComponentDaoTest/delete-result.xml | 89 ++--------- .../sonar/db/component/ComponentDaoTest/delete.xml | 29 ++++ .../ComponentDaoWithDuplicatedKeysTest/schema.sql | 34 ++++ 8 files changed, 269 insertions(+), 160 deletions(-) create mode 100644 sonar-db/src/test/java/org/sonar/db/component/ComponentDaoWithDuplicatedKeysTest.java create mode 100644 sonar-db/src/test/resources/org/sonar/db/component/ComponentDaoTest/delete.xml create mode 100644 sonar-db/src/test/resources/org/sonar/db/component/ComponentDaoWithDuplicatedKeysTest/schema.sql (limited to 'sonar-db/src') diff --git a/sonar-db/src/main/java/org/sonar/db/component/ComponentDao.java b/sonar-db/src/main/java/org/sonar/db/component/ComponentDao.java index 47c6575f459..96199463731 100644 --- a/sonar-db/src/main/java/org/sonar/db/component/ComponentDao.java +++ b/sonar-db/src/main/java/org/sonar/db/component/ComponentDao.java @@ -135,6 +135,10 @@ public class ComponentDao implements Dao { return executeLargeInputs(keys, new KeyToDto(mapper(session))); } + public List selectComponentsHavingSameKeyOrderedById(DbSession session, String key) { + return mapper(session).selectComponentsHavingSameKeyOrderedById(key); + } + private static class KeyToDto implements Function, List> { private final ComponentMapper mapper; @@ -271,6 +275,10 @@ public class ComponentDao implements Dao { mapper(session).update(item); } + public void delete(DbSession session, long componentId) { + mapper(session).delete(componentId); + } + private ComponentMapper mapper(DbSession session) { return session.getMapper(ComponentMapper.class); } diff --git a/sonar-db/src/main/java/org/sonar/db/component/ComponentMapper.java b/sonar-db/src/main/java/org/sonar/db/component/ComponentMapper.java index 1fcdb3d1a7f..dc2ab91b60b 100644 --- a/sonar-db/src/main/java/org/sonar/db/component/ComponentMapper.java +++ b/sonar-db/src/main/java/org/sonar/db/component/ComponentMapper.java @@ -118,10 +118,14 @@ public interface ComponentMapper { List selectGhostProjects(Map parameters, RowBounds rowBounds); + List selectComponentsHavingSameKeyOrderedById(String key); + long countGhostProjects(Map parameters); void insert(ComponentDto componentDto); void update(ComponentDto componentDto); + void delete(long componentId); + } diff --git a/sonar-db/src/main/resources/org/sonar/db/component/ComponentMapper.xml b/sonar-db/src/main/resources/org/sonar/db/component/ComponentMapper.xml index 8087982763e..bcfcbeac7b4 100644 --- a/sonar-db/src/main/resources/org/sonar/db/component/ComponentMapper.xml +++ b/sonar-db/src/main/resources/org/sonar/db/component/ComponentMapper.xml @@ -52,6 +52,15 @@ + +