aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--server/sonar-db-dao/src/main/java/org/sonar/db/alm/AlmAppInstallDao.java2
-rw-r--r--server/sonar-db-dao/src/main/java/org/sonar/db/alm/setting/ProjectAlmSettingDao.java10
-rw-r--r--server/sonar-db-dao/src/main/java/org/sonar/db/alm/setting/ProjectAlmSettingMapper.java3
-rw-r--r--server/sonar-db-dao/src/main/resources/org/sonar/db/alm/setting/ProjectAlmSettingMapper.xml12
-rw-r--r--server/sonar-db-dao/src/schema/schema-sq.ddl1
-rw-r--r--server/sonar-db-dao/src/test/java/org/sonar/db/alm/setting/ProjectAlmSettingDaoTest.java35
-rw-r--r--server/sonar-db-migration/src/main/java/org/sonar/server/platform/db/migration/version/v82/AddIndexOnSlugOfProjectAlmSettings.java65
-rw-r--r--server/sonar-db-migration/src/main/java/org/sonar/server/platform/db/migration/version/v82/DbVersion82.java3
-rw-r--r--server/sonar-db-migration/src/test/java/org/sonar/server/platform/db/migration/version/v82/AddIndexOnSlugOfProjectAlmSettingsTest.java50
-rw-r--r--server/sonar-db-migration/src/test/java/org/sonar/server/platform/db/migration/version/v82/CreateAlmPATsTableTest.java1
-rw-r--r--server/sonar-db-migration/src/test/java/org/sonar/server/platform/db/migration/version/v82/DbVersion82Test.java2
-rw-r--r--server/sonar-db-migration/src/test/resources/org/sonar/server/platform/db/migration/version/v82/AddIndexOnSlugOfProjectAlmSettingsTest/schema.sql12
-rw-r--r--sonar-ws/src/main/protobuf/ws-alm_integrations.proto5
13 files changed, 193 insertions, 8 deletions
diff --git a/server/sonar-db-dao/src/main/java/org/sonar/db/alm/AlmAppInstallDao.java b/server/sonar-db-dao/src/main/java/org/sonar/db/alm/AlmAppInstallDao.java
index 570de28f18b..a5630c417c2 100644
--- a/server/sonar-db-dao/src/main/java/org/sonar/db/alm/AlmAppInstallDao.java
+++ b/server/sonar-db-dao/src/main/java/org/sonar/db/alm/AlmAppInstallDao.java
@@ -73,7 +73,7 @@ public class AlmAppInstallDao implements Dao {
public List<AlmAppInstallDto> selectByOrganizations(DbSession dbSession, List<OrganizationDto> organizations) {
Set<String> organizationUuids = organizations.stream().map(OrganizationDto::getUuid).collect(Collectors.toSet());
- return executeLargeInputs(organizationUuids, uuids -> getMapper(dbSession).selectByOrganizationUuids(organizationUuids));
+ return executeLargeInputs(organizationUuids, uuids -> getMapper(dbSession).selectByOrganizationUuids(uuids));
}
public List<AlmAppInstallDto> selectUnboundByUserExternalId(DbSession dbSession, String userExternalId) {
diff --git a/server/sonar-db-dao/src/main/java/org/sonar/db/alm/setting/ProjectAlmSettingDao.java b/server/sonar-db-dao/src/main/java/org/sonar/db/alm/setting/ProjectAlmSettingDao.java
index d93d544c12d..a3d1b0e941d 100644
--- a/server/sonar-db-dao/src/main/java/org/sonar/db/alm/setting/ProjectAlmSettingDao.java
+++ b/server/sonar-db-dao/src/main/java/org/sonar/db/alm/setting/ProjectAlmSettingDao.java
@@ -19,13 +19,20 @@
*/
package org.sonar.db.alm.setting;
+import java.util.List;
import java.util.Optional;
+import java.util.Set;
+import java.util.stream.Collectors;
import org.sonar.api.utils.System2;
import org.sonar.core.util.UuidFactory;
import org.sonar.db.Dao;
import org.sonar.db.DbSession;
+import org.sonar.db.alm.AlmAppInstallDto;
+import org.sonar.db.organization.OrganizationDto;
import org.sonar.db.project.ProjectDto;
+import static org.sonar.db.DatabaseUtils.executeLargeInputs;
+
public class ProjectAlmSettingDao implements Dao {
private final System2 system2;
@@ -73,4 +80,7 @@ public class ProjectAlmSettingDao implements Dao {
return dbSession.getMapper(ProjectAlmSettingMapper.class);
}
+ public List<ProjectAlmSettingDto> selectByAlmSettingAndSlugs(DbSession dbSession, AlmSettingDto almSettingDto, Set<String> almSlugs) {
+ return executeLargeInputs(almSlugs, slugs -> getMapper(dbSession).selectByAlmSettingAndSlugs(almSettingDto.getUuid(), slugs));
+ }
}
diff --git a/server/sonar-db-dao/src/main/java/org/sonar/db/alm/setting/ProjectAlmSettingMapper.java b/server/sonar-db-dao/src/main/java/org/sonar/db/alm/setting/ProjectAlmSettingMapper.java
index 248756e81a1..a880721c126 100644
--- a/server/sonar-db-dao/src/main/java/org/sonar/db/alm/setting/ProjectAlmSettingMapper.java
+++ b/server/sonar-db-dao/src/main/java/org/sonar/db/alm/setting/ProjectAlmSettingMapper.java
@@ -19,6 +19,8 @@
*/
package org.sonar.db.alm.setting;
+import java.util.List;
+import java.util.Set;
import javax.annotation.CheckForNull;
import org.apache.ibatis.annotations.Param;
@@ -36,4 +38,5 @@ public interface ProjectAlmSettingMapper {
void deleteByProjectUuid(@Param("projectUuid") String projectUuid);
void deleteByAlmSettingUuid(@Param("almSettingUuid") String almSettingUuid);
+ List<ProjectAlmSettingDto> selectByAlmSettingAndSlugs(@Param("almSettingUuid") String almSettingUuid, @Param("slugs") List<String> slugs);
}
diff --git a/server/sonar-db-dao/src/main/resources/org/sonar/db/alm/setting/ProjectAlmSettingMapper.xml b/server/sonar-db-dao/src/main/resources/org/sonar/db/alm/setting/ProjectAlmSettingMapper.xml
index 87848bac606..7b6a7f86262 100644
--- a/server/sonar-db-dao/src/main/resources/org/sonar/db/alm/setting/ProjectAlmSettingMapper.xml
+++ b/server/sonar-db-dao/src/main/resources/org/sonar/db/alm/setting/ProjectAlmSettingMapper.xml
@@ -21,6 +21,18 @@
p.project_uuid = #{projectUuid, jdbcType=VARCHAR}
</select>
+ <select id="selectByAlmSettingAndSlugs" parameterType="string" resultType="org.sonar.db.alm.setting.ProjectAlmSettingDto">
+ select <include refid="sqlColumns"/>
+ from
+ project_alm_settings p
+ where
+ alm_setting_uuid=#{almSettingUuid, jdbcType=VARCHAR}
+ and alm_slug in
+ <foreach collection="slugs" open="(" close=")" item="slug" separator=",">
+ #{slug, jdbcType=VARCHAR}
+ </foreach>
+ </select>
+
<insert id="insert" parameterType="Map" useGeneratedKeys="false">
INSERT INTO project_alm_settings
(
diff --git a/server/sonar-db-dao/src/schema/schema-sq.ddl b/server/sonar-db-dao/src/schema/schema-sq.ddl
index eb922de2031..17a3cd04dc3 100644
--- a/server/sonar-db-dao/src/schema/schema-sq.ddl
+++ b/server/sonar-db-dao/src/schema/schema-sq.ddl
@@ -636,6 +636,7 @@ CREATE TABLE "PROJECT_ALM_SETTINGS"(
ALTER TABLE "PROJECT_ALM_SETTINGS" ADD CONSTRAINT "PK_PROJECT_ALM_SETTINGS" PRIMARY KEY("UUID");
CREATE UNIQUE INDEX "UNIQ_PROJECT_ALM_SETTINGS" ON "PROJECT_ALM_SETTINGS"("PROJECT_UUID");
CREATE INDEX "PROJECT_ALM_SETTINGS_ALM" ON "PROJECT_ALM_SETTINGS"("ALM_SETTING_UUID");
+CREATE INDEX "PROJECT_ALM_SETTINGS_SLUG" ON "PROJECT_ALM_SETTINGS"("ALM_SLUG");
CREATE TABLE "PROJECT_BRANCHES"(
"UUID" VARCHAR(50) NOT NULL,
diff --git a/server/sonar-db-dao/src/test/java/org/sonar/db/alm/setting/ProjectAlmSettingDaoTest.java b/server/sonar-db-dao/src/test/java/org/sonar/db/alm/setting/ProjectAlmSettingDaoTest.java
index 474ac89f68f..cdbfa161c5d 100644
--- a/server/sonar-db-dao/src/test/java/org/sonar/db/alm/setting/ProjectAlmSettingDaoTest.java
+++ b/server/sonar-db-dao/src/test/java/org/sonar/db/alm/setting/ProjectAlmSettingDaoTest.java
@@ -19,6 +19,8 @@
*/
package org.sonar.db.alm.setting;
+import java.util.HashSet;
+import java.util.Set;
import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.ExpectedException;
@@ -31,6 +33,7 @@ import org.sonar.db.project.ProjectDto;
import static org.assertj.core.api.Assertions.assertThat;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
+import static org.sonar.db.almsettings.AlmSettingsTesting.newBitbucketProjectAlmSettingDto;
import static org.sonar.db.almsettings.AlmSettingsTesting.newGithubProjectAlmSettingDto;
public class ProjectAlmSettingDaoTest {
@@ -50,7 +53,7 @@ public class ProjectAlmSettingDaoTest {
private ProjectAlmSettingDao underTest = new ProjectAlmSettingDao(system2, uuidFactory);
@Test
- public void selectByProject() {
+ public void select_by_project() {
when(uuidFactory.create()).thenReturn(A_UUID);
when(system2.now()).thenReturn(A_DATE);
AlmSettingDto githubAlmSettingDto = db.almSettings().insertGitHubAlmSetting();
@@ -71,6 +74,36 @@ public class ProjectAlmSettingDaoTest {
}
@Test
+ public void select_by_alm_setting_and_slugs() {
+ when(uuidFactory.create()).thenReturn(A_UUID);
+ when(system2.now()).thenReturn(A_DATE);
+ AlmSettingDto almSettingsDto = db.almSettings().insertBitbucketAlmSetting();
+ ProjectDto project = db.components().insertPrivateProjectDto();
+ ProjectAlmSettingDto githubProjectAlmSettingDto = newBitbucketProjectAlmSettingDto(almSettingsDto, project);
+ githubProjectAlmSettingDto.setAlmSlug("slug1");
+ underTest.insertOrUpdate(dbSession, githubProjectAlmSettingDto);
+ ProjectAlmSettingDto githubProjectAlmSettingDto2 = newBitbucketProjectAlmSettingDto(almSettingsDto, db.components().insertPrivateProjectDto());
+ githubProjectAlmSettingDto2.setAlmSlug("slug2");
+ when(uuidFactory.create()).thenReturn(A_UUID + 1);
+ underTest.insertOrUpdate(dbSession, githubProjectAlmSettingDto2);
+
+ Set<String> slugs = new HashSet<>();
+ slugs.add("slug1");
+ assertThat(underTest.selectByAlmSettingAndSlugs(dbSession, almSettingsDto, slugs))
+ .extracting(ProjectAlmSettingDto::getProjectUuid)
+ .containsExactly(project.getUuid());
+ }
+
+ @Test
+ public void select_with_no_slugs_return_empty() {
+ when(uuidFactory.create()).thenReturn(A_UUID);
+ when(system2.now()).thenReturn(A_DATE);
+ AlmSettingDto almSettingsDto = db.almSettings().insertBitbucketAlmSetting();
+
+ assertThat(underTest.selectByAlmSettingAndSlugs(dbSession, almSettingsDto, new HashSet<>())).isEmpty();
+ }
+
+ @Test
public void update_existing_binding() {
when(uuidFactory.create()).thenReturn(A_UUID);
when(system2.now()).thenReturn(A_DATE);
diff --git a/server/sonar-db-migration/src/main/java/org/sonar/server/platform/db/migration/version/v82/AddIndexOnSlugOfProjectAlmSettings.java b/server/sonar-db-migration/src/main/java/org/sonar/server/platform/db/migration/version/v82/AddIndexOnSlugOfProjectAlmSettings.java
new file mode 100644
index 00000000000..974a0eb69d9
--- /dev/null
+++ b/server/sonar-db-migration/src/main/java/org/sonar/server/platform/db/migration/version/v82/AddIndexOnSlugOfProjectAlmSettings.java
@@ -0,0 +1,65 @@
+/*
+ * SonarQube
+ * Copyright (C) 2009-2020 SonarSource SA
+ * mailto:info AT sonarsource DOT com
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+package org.sonar.server.platform.db.migration.version.v82;
+
+import java.sql.Connection;
+import java.sql.SQLException;
+import org.sonar.db.Database;
+import org.sonar.db.DatabaseUtils;
+import org.sonar.server.platform.db.migration.sql.CreateIndexBuilder;
+import org.sonar.server.platform.db.migration.step.DdlChange;
+
+import static org.sonar.server.platform.db.migration.def.VarcharColumnDef.newVarcharColumnDefBuilder;
+
+public class AddIndexOnSlugOfProjectAlmSettings extends DdlChange {
+
+ private static final String TABLE_NAME = "project_alm_settings";
+ private static final String INDEX_NAME = "project_alm_settings_slug";
+
+ public AddIndexOnSlugOfProjectAlmSettings(Database db) {
+ super(db);
+ }
+
+ @Override
+ public void execute(Context context) throws SQLException {
+ if (indexExists()) {
+ return;
+ }
+
+ CreateIndexBuilder builder = new CreateIndexBuilder()
+ .setTable(TABLE_NAME)
+ .addColumn(newVarcharColumnDefBuilder()
+ .setColumnName("alm_slug")
+ .setIsNullable(true)
+ .setLimit(256)
+ .build())
+ .setName(INDEX_NAME)
+ .setUnique(false);
+
+ context.execute(builder.build());
+ }
+
+ private boolean indexExists() throws SQLException {
+ try (Connection connection = getDatabase().getDataSource().getConnection()) {
+ return DatabaseUtils.indexExists(TABLE_NAME, INDEX_NAME, connection);
+ }
+ }
+
+}
diff --git a/server/sonar-db-migration/src/main/java/org/sonar/server/platform/db/migration/version/v82/DbVersion82.java b/server/sonar-db-migration/src/main/java/org/sonar/server/platform/db/migration/version/v82/DbVersion82.java
index 6cb35a8f7c7..cda4abb3e96 100644
--- a/server/sonar-db-migration/src/main/java/org/sonar/server/platform/db/migration/version/v82/DbVersion82.java
+++ b/server/sonar-db-migration/src/main/java/org/sonar/server/platform/db/migration/version/v82/DbVersion82.java
@@ -35,6 +35,7 @@ public class DbVersion82 implements DbVersion {
.add(3206, "Populate PROJECTS table", PopulateProjectsTable.class)
.add(3207, "Drop 'TAGS' column from COMPONENTS table", DropTagsColumnFromComponentsTable.class)
.add(3208, "Remove old Security Review Rating measures", DeleteSecurityReviewRatingMeasures.class)
- .add(3209, "Create ALM_PATS table", CreateAlmPatsTable.class);
+ .add(3209, "Create ALM_PATS table", CreateAlmPatsTable.class)
+ .add(3210, "Add index on ALM_slug", AddIndexOnSlugOfProjectAlmSettings.class);
}
}
diff --git a/server/sonar-db-migration/src/test/java/org/sonar/server/platform/db/migration/version/v82/AddIndexOnSlugOfProjectAlmSettingsTest.java b/server/sonar-db-migration/src/test/java/org/sonar/server/platform/db/migration/version/v82/AddIndexOnSlugOfProjectAlmSettingsTest.java
new file mode 100644
index 00000000000..1e82b381543
--- /dev/null
+++ b/server/sonar-db-migration/src/test/java/org/sonar/server/platform/db/migration/version/v82/AddIndexOnSlugOfProjectAlmSettingsTest.java
@@ -0,0 +1,50 @@
+/*
+ * SonarQube
+ * Copyright (C) 2009-2020 SonarSource SA
+ * mailto:info AT sonarsource DOT com
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+package org.sonar.server.platform.db.migration.version.v82;
+
+import java.sql.SQLException;
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.rules.ExpectedException;
+import org.sonar.db.CoreDbTester;
+
+public class AddIndexOnSlugOfProjectAlmSettingsTest {
+
+ private static final String TABLE_NAME = "project_alm_settings";
+
+ @Rule
+ public CoreDbTester dbTester = CoreDbTester.createForSchema(AddIndexOnSlugOfProjectAlmSettingsTest.class, "schema.sql");
+
+ @Rule
+ public ExpectedException expectedException = ExpectedException.none();
+
+ private AddIndexOnSlugOfProjectAlmSettings underTest = new AddIndexOnSlugOfProjectAlmSettings(dbTester.database());
+
+ @Test
+ public void index_has_been_created() throws SQLException {
+ underTest.execute();
+
+ dbTester.assertTableExists(TABLE_NAME);
+ dbTester.assertIndex(TABLE_NAME, "project_alm_settings_slug", "alm_slug");
+
+ // script should not fail if executed twice
+ underTest.execute();
+ }
+}
diff --git a/server/sonar-db-migration/src/test/java/org/sonar/server/platform/db/migration/version/v82/CreateAlmPATsTableTest.java b/server/sonar-db-migration/src/test/java/org/sonar/server/platform/db/migration/version/v82/CreateAlmPATsTableTest.java
index 464f86a19fa..cbc1001a1fa 100644
--- a/server/sonar-db-migration/src/test/java/org/sonar/server/platform/db/migration/version/v82/CreateAlmPATsTableTest.java
+++ b/server/sonar-db-migration/src/test/java/org/sonar/server/platform/db/migration/version/v82/CreateAlmPATsTableTest.java
@@ -24,7 +24,6 @@ import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.ExpectedException;
import org.sonar.db.CoreDbTester;
-import org.sonar.server.platform.db.migration.version.v81.CreateAlmSettingsTable;
import static java.sql.Types.BIGINT;
import static java.sql.Types.VARCHAR;
diff --git a/server/sonar-db-migration/src/test/java/org/sonar/server/platform/db/migration/version/v82/DbVersion82Test.java b/server/sonar-db-migration/src/test/java/org/sonar/server/platform/db/migration/version/v82/DbVersion82Test.java
index a8fb4920537..ccac28b2c85 100644
--- a/server/sonar-db-migration/src/test/java/org/sonar/server/platform/db/migration/version/v82/DbVersion82Test.java
+++ b/server/sonar-db-migration/src/test/java/org/sonar/server/platform/db/migration/version/v82/DbVersion82Test.java
@@ -36,7 +36,7 @@ public class DbVersion82Test {
@Test
public void verify_migration_count() {
- verifyMigrationCount(underTest, 10);
+ verifyMigrationCount(underTest, 11);
}
}
diff --git a/server/sonar-db-migration/src/test/resources/org/sonar/server/platform/db/migration/version/v82/AddIndexOnSlugOfProjectAlmSettingsTest/schema.sql b/server/sonar-db-migration/src/test/resources/org/sonar/server/platform/db/migration/version/v82/AddIndexOnSlugOfProjectAlmSettingsTest/schema.sql
new file mode 100644
index 00000000000..137b8c43e8c
--- /dev/null
+++ b/server/sonar-db-migration/src/test/resources/org/sonar/server/platform/db/migration/version/v82/AddIndexOnSlugOfProjectAlmSettingsTest/schema.sql
@@ -0,0 +1,12 @@
+CREATE TABLE "PROJECT_ALM_SETTINGS"(
+ "UUID" VARCHAR(40) NOT NULL,
+ "ALM_SETTING_UUID" VARCHAR(40) NOT NULL,
+ "PROJECT_UUID" VARCHAR(50) NOT NULL,
+ "ALM_REPO" VARCHAR(256),
+ "ALM_SLUG" VARCHAR(256),
+ "UPDATED_AT" BIGINT NOT NULL,
+ "CREATED_AT" BIGINT NOT NULL
+);
+ALTER TABLE "PROJECT_ALM_SETTINGS" ADD CONSTRAINT "PK_PROJECT_ALM_SETTINGS" PRIMARY KEY("UUID");
+CREATE UNIQUE INDEX "UNIQ_PROJECT_ALM_SETTINGS" ON "PROJECT_ALM_SETTINGS"("PROJECT_UUID");
+CREATE INDEX "PROJECT_ALM_SETTINGS_ALM" ON "PROJECT_ALM_SETTINGS"("ALM_SETTING_UUID");
diff --git a/sonar-ws/src/main/protobuf/ws-alm_integrations.proto b/sonar-ws/src/main/protobuf/ws-alm_integrations.proto
index 010bcb30a40..6a0e7667703 100644
--- a/sonar-ws/src/main/protobuf/ws-alm_integrations.proto
+++ b/sonar-ws/src/main/protobuf/ws-alm_integrations.proto
@@ -39,9 +39,8 @@ message BBSRepo {
optional string slug = 1;
optional int64 id = 2;
optional string name = 3;
- optional string url = 4;
- optional string sqProjectKey = 5;
- optional string projectKey = 6;
+ optional string sqProjectKey = 4;
+ optional string projectKey = 5;
}
message BBSProject {