@@ -52,18 +52,6 @@ public class RuleRepositoryDao implements Dao { | |||
return dbSession.getMapper(RuleRepositoryMapper.class).selectByLanguage(language); | |||
} | |||
public void truncate(DbSession dbSession) { | |||
dbSession.getMapper(RuleRepositoryMapper.class).truncate(); | |||
} | |||
public void insert(DbSession dbSession, Collection<RuleRepositoryDto> dtos) { | |||
RuleRepositoryMapper mapper = dbSession.getMapper(RuleRepositoryMapper.class); | |||
long now = system2.now(); | |||
for (RuleRepositoryDto dto : dtos) { | |||
mapper.insert(dto, now); | |||
} | |||
} | |||
public void insertOrUpdate(DbSession dbSession, Collection<RuleRepositoryDto> dtos) { | |||
RuleRepositoryMapper mapper = dbSession.getMapper(RuleRepositoryMapper.class); | |||
long now = system2.now(); |
@@ -33,8 +33,6 @@ public interface RuleRepositoryMapper { | |||
@CheckForNull | |||
RuleRepositoryDto selectByKey(@Param("key") String key); | |||
void truncate(); | |||
void insert(@Param("repository") RuleRepositoryDto repository, @Param("now") long now); | |||
int update(@Param("repository") RuleRepositoryDto repository); |
@@ -20,10 +20,6 @@ | |||
order by kee | |||
</select> | |||
<update id="truncate"> | |||
delete from rule_repositories | |||
</update> | |||
<insert id="insert" parameterType="map" useGeneratedKeys="false"> | |||
insert into rule_repositories (kee, language, name, created_at) | |||
values ( |
@@ -122,40 +122,13 @@ public class RuleRepositoryDaoTest { | |||
underTest.deleteIfKeyNotIn(dbTester.getSession(), keys); | |||
} | |||
@Test | |||
public void test_insert_and_selectAll() { | |||
DbSession dbSession = dbTester.getSession(); | |||
RuleRepositoryDto dto = new RuleRepositoryDto("findbugs", "java", "Findbugs"); | |||
underTest.insert(dbSession, asList(dto)); | |||
List<RuleRepositoryDto> rows = underTest.selectAll(dbSession); | |||
assertThat(rows).hasSize(1); | |||
RuleRepositoryDto row = rows.get(0); | |||
assertThat(row.getKey()).isEqualTo("findbugs"); | |||
assertThat(row.getName()).isEqualTo("Findbugs"); | |||
assertThat(row.getLanguage()).isEqualTo("java"); | |||
} | |||
@Test | |||
public void insert_multiple_rows() { | |||
DbSession dbSession = dbTester.getSession(); | |||
RuleRepositoryDto dto1 = new RuleRepositoryDto("findbugs", "java", "Findbugs"); | |||
RuleRepositoryDto dto2 = new RuleRepositoryDto("squid", "java", "Java"); | |||
RuleRepositoryDto dto3 = new RuleRepositoryDto("cobol-lint", "cobol", "Cobol Lint"); | |||
underTest.insert(dbSession, asList(dto1, dto2, dto3)); | |||
assertThat(underTest.selectAll(dbSession)).extracting(RuleRepositoryDto::getKey) | |||
// ordered by key | |||
.containsExactly("cobol-lint", "findbugs", "squid"); | |||
} | |||
@Test | |||
public void selectByLanguage() { | |||
DbSession dbSession = dbTester.getSession(); | |||
RuleRepositoryDto dto1 = new RuleRepositoryDto("findbugs", "java", "Findbugs"); | |||
RuleRepositoryDto dto2 = new RuleRepositoryDto("squid", "java", "Java"); | |||
RuleRepositoryDto dto3 = new RuleRepositoryDto("cobol-lint", "cobol", "Cobol Lint"); | |||
underTest.insert(dbSession, asList(dto1, dto2, dto3)); | |||
underTest.insertOrUpdate(dbSession, asList(dto1, dto2, dto3)); | |||
assertThat(underTest.selectByLanguage(dbSession, "java")).extracting(RuleRepositoryDto::getKey) | |||
// ordered by key | |||
@@ -166,24 +139,11 @@ public class RuleRepositoryDaoTest { | |||
public void selectByLanguage_returns_empty_list_if_no_results() { | |||
DbSession dbSession = dbTester.getSession(); | |||
RuleRepositoryDto dto1 = new RuleRepositoryDto("findbugs", "java", "Findbugs"); | |||
underTest.insert(dbSession, asList(dto1)); | |||
underTest.insertOrUpdate(dbSession, asList(dto1)); | |||
assertThat(underTest.selectByLanguage(dbSession, "missing")).hasSize(0); | |||
} | |||
@Test | |||
public void truncate() { | |||
DbSession dbSession = dbTester.getSession(); | |||
RuleRepositoryDto dto1 = new RuleRepositoryDto("findbugs", "java", "Findbugs"); | |||
RuleRepositoryDto dto2 = new RuleRepositoryDto("squid", "java", "Java"); | |||
underTest.insert(dbSession, asList(dto1, dto2)); | |||
underTest.truncate(dbSession); | |||
assertThat(underTest.selectAll(dbSession)).isEmpty(); | |||
} | |||
private long selectCreatedAtByKey(DbSession dbSession, String key) { | |||
return (long) dbTester.selectFirst(dbSession, "select created_at as \"created_at\" from rule_repositories where kee='" + key + "'") | |||
.get("created_at"); |
@@ -325,12 +325,13 @@ public class RegisterRules implements Startable { | |||
} | |||
private void persistRepositories(DbSession dbSession, List<RulesDefinition.Repository> repositories) { | |||
dbClient.ruleRepositoryDao().truncate(dbSession); | |||
List<RuleRepositoryDto> dtos = repositories | |||
.stream() | |||
.map(r -> new RuleRepositoryDto(r.key(), r.language(), r.name())) | |||
.collect(toList(repositories.size())); | |||
dbClient.ruleRepositoryDao().insert(dbSession, dtos); | |||
List<String> keys = dtos.stream().map(RuleRepositoryDto::getKey).collect(toList(repositories.size())); | |||
dbClient.ruleRepositoryDao().insertOrUpdate(dbSession, dtos); | |||
dbClient.ruleRepositoryDao().deleteIfKeyNotIn(dbSession, keys); | |||
dbSession.commit(); | |||
} | |||
@@ -38,9 +38,9 @@ import org.sonar.db.qualityprofile.QProfileDto; | |||
import org.sonar.db.qualityprofile.QualityProfileTesting; | |||
import org.sonar.db.rule.RuleDefinitionDto; | |||
import org.sonar.db.rule.RuleDto; | |||
import org.sonar.db.rule.RuleDto.Scope; | |||
import org.sonar.db.rule.RuleParamDto; | |||
import org.sonar.db.rule.RuleRepositoryDto; | |||
import org.sonar.db.rule.RuleDto.Scope; | |||
import org.sonar.server.language.LanguageTesting; | |||
import org.sonar.server.qualityprofile.QProfileComparison; | |||
import org.sonar.server.qualityprofile.QProfileName; | |||
@@ -49,7 +49,7 @@ import org.sonar.server.tester.UserSessionRule; | |||
import org.sonar.server.ws.TestRequest; | |||
import org.sonar.server.ws.WsActionTester; | |||
import static java.util.Arrays.asList; | |||
import static java.util.Collections.singletonList; | |||
public class CompareActionTest { | |||
@@ -246,7 +246,7 @@ public class CompareActionTest { | |||
private void createRepository(String repositoryKey, String repositoryLanguage, String repositoryName) { | |||
RuleRepositoryDto dto = new RuleRepositoryDto(repositoryKey, repositoryLanguage, repositoryName); | |||
db.ruleRepositoryDao().insert(session, asList(dto)); | |||
db.ruleRepositoryDao().insertOrUpdate(session, singletonList(dto)); | |||
session.commit(); | |||
} | |||
} |
@@ -250,7 +250,7 @@ public class RegisterRulesTest { | |||
public void delete_repositories_that_have_been_uninstalled() { | |||
RuleRepositoryDto repository = new RuleRepositoryDto("findbugs", "java", "Findbugs"); | |||
DbSession dbSession = dbTester.getSession(); | |||
dbTester.getDbClient().ruleRepositoryDao().insert(dbSession, singletonList(repository)); | |||
dbTester.getDbClient().ruleRepositoryDao().insertOrUpdate(dbSession, singletonList(repository)); | |||
dbSession.commit(); | |||
execute(new FakeRepositoryV1()); |
@@ -162,7 +162,7 @@ public class AppActionTest { | |||
private void insertRules() { | |||
RuleRepositoryDto repo1 = new RuleRepositoryDto("xoo", "xoo", "SonarQube"); | |||
RuleRepositoryDto repo2 = new RuleRepositoryDto("squid", "ws", "SonarQube"); | |||
db.getDbClient().ruleRepositoryDao().insert(db.getSession(), asList(repo1, repo2)); | |||
db.getDbClient().ruleRepositoryDao().insertOrUpdate(db.getSession(), asList(repo1, repo2)); | |||
db.getSession().commit(); | |||
} | |||
@@ -45,7 +45,7 @@ public class RepositoriesActionTest { | |||
RuleRepositoryDto repo1 = new RuleRepositoryDto("xoo", "xoo", "SonarQube"); | |||
RuleRepositoryDto repo2 = new RuleRepositoryDto("squid", "ws", "SonarQube"); | |||
RuleRepositoryDto repo3 = new RuleRepositoryDto("common-ws", "ws", "SonarQube Common"); | |||
dbTester.getDbClient().ruleRepositoryDao().insert(dbSession, asList(repo1, repo2, repo3)); | |||
dbTester.getDbClient().ruleRepositoryDao().insertOrUpdate(dbSession, asList(repo1, repo2, repo3)); | |||
dbSession.commit(); | |||
wsTester = new WsTester(new RulesWs(new RepositoriesAction(dbTester.getDbClient()))); |