From e999afdefa1060a504bde0889b969b88c18eca25 Mon Sep 17 00:00:00 2001 From: Lukasz Jarocki Date: Tue, 27 Jun 2023 10:24:50 +0200 Subject: [PATCH] SONAR-19558 enabled snapshots to correctly use project/branch uuid --- .../step/ReportPersistAnalysisStepIT.java | 4 +- .../step/ViewsPersistAnalysisStepIT.java | 4 +- .../analysis/ExportAnalysesStepIT.java | 2 +- .../steps/ExportEventsStepIT.java | 6 +- .../steps/ExportMeasuresStepIT.java | 2 +- .../period/NewCodePeriodResolver.java | 16 +-- .../step/PersistAnalysisStep.java | 2 +- .../analysis/ExportAnalysesStep.java | 2 +- .../projectexport/steps/ExportEventsStep.java | 2 +- .../AnalysisCacheCleaningSchedulerImplIT.java | 18 +-- .../org/sonar/db/component/SnapshotDaoIT.java | 107 +++++++++--------- .../java/org/sonar/db/event/EventDaoIT.java | 2 +- .../org/sonar/db/measure/MeasureDaoIT.java | 2 +- .../ProjectMeasuresIndexerIteratorIT.java | 6 - .../org/sonar/db/purge/PurgeCommandsIT.java | 6 +- .../java/org/sonar/db/purge/PurgeDaoIT.java | 22 ++-- .../ScannerAnalysisCacheDaoIT.java | 18 +-- .../org/sonar/db/component/SnapshotDao.java | 23 ++-- .../org/sonar/db/component/SnapshotDto.java | 16 +-- .../sonar/db/component/SnapshotMapper.java | 10 +- .../org/sonar/db/component/SnapshotQuery.java | 10 +- .../ProjectMeasuresIndexerIterator.java | 12 +- .../db/component/AnalysisPropertiesMapper.xml | 2 +- .../sonar/db/component/ComponentMapper.xml | 18 +-- .../org/sonar/db/component/SnapshotMapper.xml | 34 +++--- .../org/sonar/db/event/EventMapper.xml | 2 +- .../org/sonar/db/purge/PurgeMapper.xml | 6 +- .../ScannerAnalysisCacheMapper.xml | 2 +- server/sonar-db-dao/src/schema/schema-sq.ddl | 4 +- .../sonar/db/component/SnapshotDtoTest.java | 4 +- .../sonar/db/component/SnapshotQueryTest.java | 4 +- .../sonar/db/component/SnapshotTesting.java | 4 +- .../org/sonar/db/event/EventDbTester.java | 2 +- .../java/org/sonar/db/event/EventTesting.java | 4 +- ...eateIndexRootComponentUuidInSnapshots.java | 33 ++++++ .../migration/version/v102/DbVersion102.java | 4 +- .../DropIndexComponentUuidInSnapshots.java | 33 ++++++ .../v102/RenameComponentUuidInSnapshots.java | 35 ++++++ ...IndexRootComponentUuidInSnapshotsTest.java | 49 ++++++++ ...DropIndexComponentUuidInSnapshotsTest.java | 56 +++++++++ .../RenameComponentUuidInSnapshotsTest.java | 52 +++++++++ .../schema.sql | 16 +++ .../schema.sql | 17 +++ .../schema.sql | 16 +++ .../index/ProjectMeasuresIndexerIT.java | 4 +- .../issue/index/AsyncIssueIndexingImpl.java | 2 +- .../project/ProjectQGChangeEventListener.java | 4 +- .../telemetry/TelemetryDataLoaderImpl.java | 2 +- .../index/AsyncIssueIndexingImplTest.java | 2 +- .../server/issue/index/IssueQueryFactory.java | 6 +- .../ws/CreateEventActionIT.java | 8 +- .../sonar/server/source/ws/LinesActionIT.java | 2 +- .../sonar/server/branch/ws/ListAction.java | 2 +- .../component/ws/SearchProjectsAction.java | 2 +- .../developers/ws/SearchEventsAction.java | 2 +- .../sonar/server/hotspot/ws/SearchAction.java | 4 +- .../measure/ws/SearchHistoryAction.java | 2 +- .../server/newcodeperiod/ws/SetAction.java | 2 +- .../sonar/server/project/ws/SearchAction.java | 2 +- .../project/ws/SearchMyProjectsData.java | 2 +- .../projectanalysis/ws/CreateEventAction.java | 4 +- .../projectanalysis/ws/DeleteAction.java | 2 +- .../projectanalysis/ws/SearchAction.java | 2 +- .../server/projectdump/ws/StatusAction.java | 2 +- .../qualitygate/ws/ProjectStatusAction.java | 2 +- 65 files changed, 527 insertions(+), 222 deletions(-) create mode 100644 server/sonar-db-migration/src/main/java/org/sonar/server/platform/db/migration/version/v102/CreateIndexRootComponentUuidInSnapshots.java create mode 100644 server/sonar-db-migration/src/main/java/org/sonar/server/platform/db/migration/version/v102/DropIndexComponentUuidInSnapshots.java create mode 100644 server/sonar-db-migration/src/main/java/org/sonar/server/platform/db/migration/version/v102/RenameComponentUuidInSnapshots.java create mode 100644 server/sonar-db-migration/src/test/java/org/sonar/server/platform/db/migration/version/v102/CreateIndexRootComponentUuidInSnapshotsTest.java create mode 100644 server/sonar-db-migration/src/test/java/org/sonar/server/platform/db/migration/version/v102/DropIndexComponentUuidInSnapshotsTest.java create mode 100644 server/sonar-db-migration/src/test/java/org/sonar/server/platform/db/migration/version/v102/RenameComponentUuidInSnapshotsTest.java create mode 100644 server/sonar-db-migration/src/test/resources/org/sonar/server/platform/db/migration/version/v102/CreateIndexRootComponentUuidInSnapshotsTest/schema.sql create mode 100644 server/sonar-db-migration/src/test/resources/org/sonar/server/platform/db/migration/version/v102/DropIndexComponentUuidInSnapshotsTest/schema.sql create mode 100644 server/sonar-db-migration/src/test/resources/org/sonar/server/platform/db/migration/version/v102/RenameComponentUuidInSnapshotsTest/schema.sql diff --git a/server/sonar-ce-task-projectanalysis/src/it/java/org/sonar/ce/task/projectanalysis/step/ReportPersistAnalysisStepIT.java b/server/sonar-ce-task-projectanalysis/src/it/java/org/sonar/ce/task/projectanalysis/step/ReportPersistAnalysisStepIT.java index 47412e095b3..e7caa7ab9e3 100644 --- a/server/sonar-ce-task-projectanalysis/src/it/java/org/sonar/ce/task/projectanalysis/step/ReportPersistAnalysisStepIT.java +++ b/server/sonar-ce-task-projectanalysis/src/it/java/org/sonar/ce/task/projectanalysis/step/ReportPersistAnalysisStepIT.java @@ -120,7 +120,7 @@ public class ReportPersistAnalysisStepIT extends BaseStepTest { SnapshotDto projectSnapshot = getUnprocessedSnapshot(projectDto.uuid()); assertThat(projectSnapshot.getUuid()).isEqualTo(ANALYSIS_UUID); - assertThat(projectSnapshot.getComponentUuid()).isEqualTo(project.getUuid()); + assertThat(projectSnapshot.getRootComponentUuid()).isEqualTo(project.getUuid()); assertThat(projectSnapshot.getProjectVersion()).isEqualTo(projectVersion); assertThat(projectSnapshot.getBuildString()).isEqualTo(buildString); assertThat(projectSnapshot.getLast()).isFalse(); @@ -199,7 +199,7 @@ public class ReportPersistAnalysisStepIT extends BaseStepTest { private SnapshotDto getUnprocessedSnapshot(String componentUuid) { List projectSnapshots = dbClient.snapshotDao().selectAnalysesByQuery(dbTester.getSession(), - new SnapshotQuery().setComponentUuid(componentUuid).setIsLast(false).setStatus(SnapshotDto.STATUS_UNPROCESSED)); + new SnapshotQuery().setRootComponentUuid(componentUuid).setIsLast(false).setStatus(SnapshotDto.STATUS_UNPROCESSED)); assertThat(projectSnapshots).hasSize(1); return projectSnapshots.get(0); } diff --git a/server/sonar-ce-task-projectanalysis/src/it/java/org/sonar/ce/task/projectanalysis/step/ViewsPersistAnalysisStepIT.java b/server/sonar-ce-task-projectanalysis/src/it/java/org/sonar/ce/task/projectanalysis/step/ViewsPersistAnalysisStepIT.java index 5f93479a6a5..4c28414e9b3 100644 --- a/server/sonar-ce-task-projectanalysis/src/it/java/org/sonar/ce/task/projectanalysis/step/ViewsPersistAnalysisStepIT.java +++ b/server/sonar-ce-task-projectanalysis/src/it/java/org/sonar/ce/task/projectanalysis/step/ViewsPersistAnalysisStepIT.java @@ -106,7 +106,7 @@ public class ViewsPersistAnalysisStepIT extends BaseStepTest { SnapshotDto viewSnapshot = getUnprocessedSnapshot(viewDto.uuid()); assertThat(viewSnapshot.getUuid()).isEqualTo(ANALYSIS_UUID); - assertThat(viewSnapshot.getComponentUuid()).isEqualTo(view.getUuid()); + assertThat(viewSnapshot.getRootComponentUuid()).isEqualTo(view.getUuid()); assertThat(viewSnapshot.getProjectVersion()).isNull(); assertThat(viewSnapshot.getLast()).isFalse(); assertThat(viewSnapshot.getStatus()).isEqualTo("U"); @@ -140,7 +140,7 @@ public class ViewsPersistAnalysisStepIT extends BaseStepTest { private SnapshotDto getUnprocessedSnapshot(String componentUuid) { List projectSnapshots = dbClient.snapshotDao().selectAnalysesByQuery(dbTester.getSession(), - new SnapshotQuery().setComponentUuid(componentUuid).setIsLast(false).setStatus(SnapshotDto.STATUS_UNPROCESSED)); + new SnapshotQuery().setRootComponentUuid(componentUuid).setIsLast(false).setStatus(SnapshotDto.STATUS_UNPROCESSED)); assertThat(projectSnapshots).hasSize(1); return projectSnapshots.get(0); } diff --git a/server/sonar-ce-task-projectanalysis/src/it/java/org/sonar/ce/task/projectexport/analysis/ExportAnalysesStepIT.java b/server/sonar-ce-task-projectanalysis/src/it/java/org/sonar/ce/task/projectexport/analysis/ExportAnalysesStepIT.java index 6c96fe0ac00..99176b7efae 100644 --- a/server/sonar-ce-task-projectanalysis/src/it/java/org/sonar/ce/task/projectexport/analysis/ExportAnalysesStepIT.java +++ b/server/sonar-ce-task-projectanalysis/src/it/java/org/sonar/ce/task/projectexport/analysis/ExportAnalysesStepIT.java @@ -196,7 +196,7 @@ public class ExportAnalysesStepIT { return new SnapshotDto() .setUuid(uuid) .setCreatedAt(date) - .setComponentUuid(componentUuid) + .setRootComponentUuid(componentUuid) .setProjectVersion(version) .setBuildString(buildString) .setLast(isLast) diff --git a/server/sonar-ce-task-projectanalysis/src/it/java/org/sonar/ce/task/projectexport/steps/ExportEventsStepIT.java b/server/sonar-ce-task-projectanalysis/src/it/java/org/sonar/ce/task/projectexport/steps/ExportEventsStepIT.java index b1ffa6fabbf..d96797304a1 100644 --- a/server/sonar-ce-task-projectanalysis/src/it/java/org/sonar/ce/task/projectexport/steps/ExportEventsStepIT.java +++ b/server/sonar-ce-task-projectanalysis/src/it/java/org/sonar/ce/task/projectexport/steps/ExportEventsStepIT.java @@ -117,7 +117,7 @@ public class ExportEventsStepIT { dbTester.getDbClient().eventDao().insert(dbTester.getSession(), new EventDto() .setUuid("E1") .setAnalysisUuid(snapshot.getUuid()) - .setComponentUuid(snapshot.getComponentUuid()) + .setComponentUuid(snapshot.getRootComponentUuid()) .setDate(IN_THE_PAST) .setCreatedAt(NOW) .setData("data") @@ -148,7 +148,7 @@ public class ExportEventsStepIT { dbTester.getDbClient().eventDao().insert(dbTester.getSession(), new EventDto() .setUuid(uuid) .setAnalysisUuid(snapshot.getUuid()) - .setComponentUuid(snapshot.getComponentUuid()) + .setComponentUuid(snapshot.getRootComponentUuid()) .setDate(IN_THE_PAST) .setCreatedAt(NOW) .setName(name)); @@ -158,7 +158,7 @@ public class ExportEventsStepIT { private SnapshotDto insertSnapshot() { SnapshotDto snapshot = new SnapshotDto() .setUuid("U1") - .setComponentUuid(PROJECT.uuid()) + .setRootComponentUuid(PROJECT.uuid()) .setStatus(STATUS_PROCESSED) .setLast(false); dbTester.getDbClient().snapshotDao().insert(dbTester.getSession(), snapshot); diff --git a/server/sonar-ce-task-projectanalysis/src/it/java/org/sonar/ce/task/projectexport/steps/ExportMeasuresStepIT.java b/server/sonar-ce-task-projectanalysis/src/it/java/org/sonar/ce/task/projectexport/steps/ExportMeasuresStepIT.java index 136b2dd1501..86c0c0387e0 100644 --- a/server/sonar-ce-task-projectanalysis/src/it/java/org/sonar/ce/task/projectexport/steps/ExportMeasuresStepIT.java +++ b/server/sonar-ce-task-projectanalysis/src/it/java/org/sonar/ce/task/projectexport/steps/ExportMeasuresStepIT.java @@ -244,7 +244,7 @@ public class ExportMeasuresStepIT { private SnapshotDto insertSnapshot(String snapshotUuid, ComponentDto project, String status) { SnapshotDto snapshot = new SnapshotDto() .setUuid(snapshotUuid) - .setComponentUuid(project.uuid()) + .setRootComponentUuid(project.uuid()) .setStatus(status) .setLast(true); dbTester.getDbClient().snapshotDao().insert(dbTester.getSession(), snapshot); diff --git a/server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/period/NewCodePeriodResolver.java b/server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/period/NewCodePeriodResolver.java index c3480c7e872..41862ff63ef 100644 --- a/server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/period/NewCodePeriodResolver.java +++ b/server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/period/NewCodePeriodResolver.java @@ -90,24 +90,24 @@ public class NewCodePeriodResolver { private Period resolveBySpecificAnalysis(DbSession dbSession, String rootUuid, String value) { SnapshotDto baseline = dbClient.snapshotDao().selectByUuid(dbSession, value) - .filter(t -> t.getComponentUuid().equals(rootUuid)) + .filter(t -> t.getRootComponentUuid().equals(rootUuid)) .orElseThrow(() -> new IllegalStateException("Analysis '" + value + "' of project '" + rootUuid + "' defined as the baseline does not exist")); LOG.debug("Resolving new code period with a specific analysis"); return newPeriod(NewCodePeriodType.SPECIFIC_ANALYSIS, value, baseline.getCreatedAt()); } - private Period resolveByPreviousVersion(DbSession dbSession, String projectUuid, String projectVersion) { - List versions = dbClient.eventDao().selectVersionsByMostRecentFirst(dbSession, projectUuid); + private Period resolveByPreviousVersion(DbSession dbSession, String rootComponentUuid, String projectVersion) { + List versions = dbClient.eventDao().selectVersionsByMostRecentFirst(dbSession, rootComponentUuid); if (versions.isEmpty()) { - return findOldestAnalysis(dbSession, projectUuid); + return findOldestAnalysis(dbSession, rootComponentUuid); } String mostRecentVersion = Optional.ofNullable(versions.iterator().next().getName()) .orElseThrow(() -> new IllegalStateException("selectVersionsByMostRecentFirst returned a DTO which didn't have a name")); if (versions.size() == 1 && projectVersion.equals(mostRecentVersion)) { - return findOldestAnalysis(dbSession, projectUuid); + return findOldestAnalysis(dbSession, rootComponentUuid); } return resolvePreviousVersion(dbSession, projectVersion, versions, mostRecentVersion); @@ -130,9 +130,9 @@ public class NewCodePeriodResolver { return newPeriod(dbSession, previousVersion); } - private Period findOldestAnalysis(DbSession dbSession, String projectUuid) { + private Period findOldestAnalysis(DbSession dbSession, String rootComponentUuid) { LOG.debug("Resolving first analysis as new code period as there is only one existing version"); - Optional period = dbClient.snapshotDao().selectOldestAnalysis(dbSession, projectUuid) + Optional period = dbClient.snapshotDao().selectOldestAnalysis(dbSession, rootComponentUuid) .map(dto -> newPeriod(NewCodePeriodType.PREVIOUS_VERSION, null, dto.getCreatedAt())); ensureNotOnFirstAnalysis(period.isPresent()); return period.get(); @@ -162,7 +162,7 @@ public class NewCodePeriodResolver { } private static SnapshotQuery createCommonQuery(String projectUuid) { - return new SnapshotQuery().setComponentUuid(projectUuid).setStatus(STATUS_PROCESSED); + return new SnapshotQuery().setRootComponentUuid(projectUuid).setStatus(STATUS_PROCESSED); } private static SnapshotDto findNearestSnapshotToTargetDate(List snapshots, Instant targetDate) { diff --git a/server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/step/PersistAnalysisStep.java b/server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/step/PersistAnalysisStep.java index 4fe25256b75..2b8e262b9ba 100644 --- a/server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/step/PersistAnalysisStep.java +++ b/server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/step/PersistAnalysisStep.java @@ -107,7 +107,7 @@ public class PersistAnalysisStep implements ComputationStep { .setUuid(snapshotUuid) .setProjectVersion(projectVersion) .setBuildString(buildString) - .setComponentUuid(componentUuid) + .setRootComponentUuid(componentUuid) .setLast(false) .setStatus(SnapshotDto.STATUS_UNPROCESSED) .setCreatedAt(analysisDate) diff --git a/server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectexport/analysis/ExportAnalysesStep.java b/server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectexport/analysis/ExportAnalysesStep.java index 5d88ab818b6..2db9737900c 100644 --- a/server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectexport/analysis/ExportAnalysesStep.java +++ b/server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectexport/analysis/ExportAnalysesStep.java @@ -49,7 +49,7 @@ public class ExportAnalysesStep implements ComputationStep { " s.period1_mode, s.period1_param, s.period1_date," + " s.uuid, s.build_string" + " from snapshots s" + - " inner join components p on s.component_uuid=p.uuid" + + " inner join components p on s.root_component_uuid=p.uuid" + " inner join project_branches pb on pb.uuid=p.uuid" + " where pb.project_uuid=? and pb.branch_type = 'BRANCH' and pb.exclude_from_purge=? and s.status=? and p.enabled=?" + " order by s.build_date asc"; diff --git a/server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectexport/steps/ExportEventsStep.java b/server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectexport/steps/ExportEventsStep.java index e4e9f97ed2d..d1fcf70629b 100644 --- a/server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectexport/steps/ExportEventsStep.java +++ b/server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectexport/steps/ExportEventsStep.java @@ -41,7 +41,7 @@ public class ExportEventsStep implements ComputationStep { " p.uuid, e.name, e.analysis_uuid, e.category, e.description, e.event_data, e.event_date, e.uuid" + " from events e" + " join snapshots s on s.uuid=e.analysis_uuid" + - " join components p on p.uuid=s.component_uuid" + + " join components p on p.uuid=s.root_component_uuid" + " join project_branches pb on pb.uuid=p.uuid" + " where pb.project_uuid=? and pb.branch_type = 'BRANCH' and pb.exclude_from_purge=? and s.status=? and p.enabled=?"; diff --git a/server/sonar-ce/src/it/java/org/sonar/ce/analysis/cache/cleaning/AnalysisCacheCleaningSchedulerImplIT.java b/server/sonar-ce/src/it/java/org/sonar/ce/analysis/cache/cleaning/AnalysisCacheCleaningSchedulerImplIT.java index 8aa991e6f11..fe6683c7753 100644 --- a/server/sonar-ce/src/it/java/org/sonar/ce/analysis/cache/cleaning/AnalysisCacheCleaningSchedulerImplIT.java +++ b/server/sonar-ce/src/it/java/org/sonar/ce/analysis/cache/cleaning/AnalysisCacheCleaningSchedulerImplIT.java @@ -66,32 +66,32 @@ public class AnalysisCacheCleaningSchedulerImplIT { var snapshotDao = dbTester.getDbClient().snapshotDao(); var snapshot1 = createSnapshot(LocalDateTime.now().minusDays(1).toInstant(ZoneOffset.UTC).toEpochMilli()); snapshotDao.insert(dbSession, snapshot1); - scannerAnalysisCacheDao.insert(dbSession, snapshot1.getComponentUuid(), new ByteArrayInputStream("data".getBytes())); + scannerAnalysisCacheDao.insert(dbSession, snapshot1.getRootComponentUuid(), new ByteArrayInputStream("data".getBytes())); var snapshot2 = createSnapshot(LocalDateTime.now().minusDays(6).toInstant(ZoneOffset.UTC).toEpochMilli()); snapshotDao.insert(dbSession, snapshot2); - scannerAnalysisCacheDao.insert(dbSession, snapshot2.getComponentUuid(), new ByteArrayInputStream("data".getBytes())); + scannerAnalysisCacheDao.insert(dbSession, snapshot2.getRootComponentUuid(), new ByteArrayInputStream("data".getBytes())); var snapshot3 = createSnapshot(LocalDateTime.now().minusDays(8).toInstant(ZoneOffset.UTC).toEpochMilli()); snapshotDao.insert(dbSession, snapshot3); - scannerAnalysisCacheDao.insert(dbSession, snapshot3.getComponentUuid(), new ByteArrayInputStream("data".getBytes())); + scannerAnalysisCacheDao.insert(dbSession, snapshot3.getRootComponentUuid(), new ByteArrayInputStream("data".getBytes())); var snapshot4 = createSnapshot(LocalDateTime.now().minusDays(30).toInstant(ZoneOffset.UTC).toEpochMilli()); snapshotDao.insert(dbSession, snapshot4); - scannerAnalysisCacheDao.insert(dbSession, snapshot4.getComponentUuid(), new ByteArrayInputStream("data".getBytes())); + scannerAnalysisCacheDao.insert(dbSession, snapshot4.getRootComponentUuid(), new ByteArrayInputStream("data".getBytes())); assertThat(dbTester.countRowsOfTable("scanner_analysis_cache")).isEqualTo(4); underTest.clean(); assertThat(dbTester.countRowsOfTable("scanner_analysis_cache")).isEqualTo(2); - assertThat(scannerAnalysisCacheDao.selectData(dbSession, snapshot1.getComponentUuid())).isNotNull(); - assertThat(scannerAnalysisCacheDao.selectData(dbSession, snapshot2.getComponentUuid())).isNotNull(); - assertThat(scannerAnalysisCacheDao.selectData(dbSession, snapshot3.getComponentUuid())).isNull(); - assertThat(scannerAnalysisCacheDao.selectData(dbSession, snapshot4.getComponentUuid())).isNull(); + assertThat(scannerAnalysisCacheDao.selectData(dbSession, snapshot1.getRootComponentUuid())).isNotNull(); + assertThat(scannerAnalysisCacheDao.selectData(dbSession, snapshot2.getRootComponentUuid())).isNotNull(); + assertThat(scannerAnalysisCacheDao.selectData(dbSession, snapshot3.getRootComponentUuid())).isNull(); + assertThat(scannerAnalysisCacheDao.selectData(dbSession, snapshot4.getRootComponentUuid())).isNull(); } private static SnapshotDto createSnapshot(long buildtime) { return new SnapshotDto() .setUuid(uuidFactory.create()) - .setComponentUuid(uuidFactory.create()) + .setRootComponentUuid(uuidFactory.create()) .setStatus("P") .setLast(true) .setProjectVersion("2.1-SNAPSHOT") diff --git a/server/sonar-db-dao/src/it/java/org/sonar/db/component/SnapshotDaoIT.java b/server/sonar-db-dao/src/it/java/org/sonar/db/component/SnapshotDaoIT.java index 2361b2e81ed..9193c7b86a6 100644 --- a/server/sonar-db-dao/src/it/java/org/sonar/db/component/SnapshotDaoIT.java +++ b/server/sonar-db-dao/src/it/java/org/sonar/db/component/SnapshotDaoIT.java @@ -65,7 +65,7 @@ import static org.sonar.db.component.SnapshotTesting.newAnalysis; public class SnapshotDaoIT { @Rule - public DbTester db = DbTester.create(System2.INSTANCE); + public DbTester db = DbTester.create(System2.INSTANCE, true); private final DbClient dbClient = db.getDbClient(); private final DbSession dbSession = db.getSession(); @@ -89,7 +89,7 @@ public class SnapshotDaoIT { SnapshotDto result = underTest.selectByUuid(db.getSession(), "ABCD").get(); assertThat(result.getUuid()).isEqualTo("ABCD"); - assertThat(result.getComponentUuid()).isEqualTo(project.uuid()); + assertThat(result.getRootComponentUuid()).isEqualTo(project.uuid()); assertThat(result.getStatus()).isEqualTo("P"); assertThat(result.getLast()).isTrue(); assertThat(result.getProjectVersion()).isEqualTo("2.1.0"); @@ -170,43 +170,43 @@ public class SnapshotDaoIT { @Test public void selectLastAnalysisDateByProjects_returns_all_existing_projects_with_a_snapshot() { - ComponentDto project1 = db.components().insertPrivateProject().getMainBranchComponent(); + ProjectData project1 = db.components().insertPrivateProject(); - ComponentDto project2 = db.components().insertPrivateProject().getMainBranchComponent(); - ComponentDto branch1 = db.components().insertProjectBranch(project2); - ComponentDto branch2 = db.components().insertProjectBranch(project2); + ProjectData project2 = db.components().insertPrivateProject(); + ComponentDto branch1 = db.components().insertProjectBranch(project2.getMainBranchComponent()); + ComponentDto branch2 = db.components().insertProjectBranch(project2.getMainBranchComponent()); - ComponentDto project3 = db.components().insertPrivateProject().getMainBranchComponent(); + ProjectData project3 = db.components().insertPrivateProject(); - dbClient.snapshotDao().insert(dbSession, newAnalysis(project1).setLast(false).setCreatedAt(2L)); - dbClient.snapshotDao().insert(dbSession, newAnalysis(project1).setLast(true).setCreatedAt(1L)); + dbClient.snapshotDao().insert(dbSession, newAnalysis(project1.getMainBranchComponent()).setLast(false).setCreatedAt(2L)); + dbClient.snapshotDao().insert(dbSession, newAnalysis(project1.getMainBranchComponent()).setLast(true).setCreatedAt(1L)); - dbClient.snapshotDao().insert(dbSession, newAnalysis(project2).setLast(true).setCreatedAt(2L)); + dbClient.snapshotDao().insert(dbSession, newAnalysis(project2.getMainBranchComponent()).setLast(true).setCreatedAt(2L)); dbClient.snapshotDao().insert(dbSession, newAnalysis(branch2).setLast(false).setCreatedAt(5L)); dbClient.snapshotDao().insert(dbSession, newAnalysis(branch1).setLast(true).setCreatedAt(4L)); List lastAnalysisByProject = underTest.selectLastAnalysisDateByProjectUuids(dbSession, - List.of(project1.uuid(), project2.uuid(), project3.uuid(), "non-existing")); + List.of(project1.projectUuid(), project2.projectUuid(), project3.projectUuid(), "non-existing")); assertThat(lastAnalysisByProject).extracting(ProjectLastAnalysisDateDto::getProjectUuid, ProjectLastAnalysisDateDto::getDate) - .containsOnly(tuple(project1.uuid(), 1L), tuple(project2.uuid(), 4L)); + .containsOnly(tuple(project1.projectUuid(), 1L), tuple(project2.projectUuid(), 4L)); } @Test public void selectLastAnalysisDateByProjects_returns_all_existing_projects_and_portfolios_with_a_snapshot() { - ComponentDto project1 = db.components().insertPrivateProject().getMainBranchComponent(); - ComponentDto branch1 = db.components().insertProjectBranch(project1); + ProjectData project1 = db.components().insertPrivateProject(); + ComponentDto branch1 = db.components().insertProjectBranch(project1.getMainBranchComponent()); ComponentDto portfolio = db.components().insertPrivatePortfolio(); - dbClient.snapshotDao().insert(dbSession, newAnalysis(project1).setLast(true).setCreatedAt(1L)); + dbClient.snapshotDao().insert(dbSession, newAnalysis(project1.getMainBranchComponent()).setLast(true).setCreatedAt(1L)); dbClient.snapshotDao().insert(dbSession, newAnalysis(portfolio).setLast(true).setCreatedAt(2L)); dbClient.snapshotDao().insert(dbSession, newAnalysis(branch1).setLast(true).setCreatedAt(3L)); List lastAnalysisByProject = underTest.selectLastAnalysisDateByProjectUuids(dbSession, - List.of(project1.uuid(), portfolio.uuid())); + List.of(project1.projectUuid(), portfolio.uuid())); assertThat(lastAnalysisByProject).extracting(ProjectLastAnalysisDateDto::getProjectUuid, ProjectLastAnalysisDateDto::getDate) - .containsOnly(tuple(project1.uuid(), 3L), tuple(portfolio.uuid(), 2L)); + .containsOnly(tuple(project1.projectUuid(), 3L), tuple(portfolio.uuid(), 2L)); } @Test @@ -238,13 +238,13 @@ public class SnapshotDaoIT { .mapToObj(j -> db.components().insertSnapshot(project2)) .toList(); - assertThat(underTest.selectAnalysesByQuery(db.getSession(), new SnapshotQuery().setComponentUuid(project1.uuid()))) + assertThat(underTest.selectAnalysesByQuery(db.getSession(), new SnapshotQuery().setRootComponentUuid(project1.uuid()))) .extracting(SnapshotDto::getUuid) .containsOnly(snapshots1.stream().map(SnapshotDto::getUuid).toArray(String[]::new)); - assertThat(underTest.selectAnalysesByQuery(db.getSession(), new SnapshotQuery().setComponentUuid(project2.uuid()))) + assertThat(underTest.selectAnalysesByQuery(db.getSession(), new SnapshotQuery().setRootComponentUuid(project2.uuid()))) .extracting(SnapshotDto::getUuid) .containsOnly(snapshots2.stream().map(SnapshotDto::getUuid).toArray(String[]::new)); - assertThat(underTest.selectAnalysesByQuery(db.getSession(), new SnapshotQuery().setComponentUuid("does not exist"))) + assertThat(underTest.selectAnalysesByQuery(db.getSession(), new SnapshotQuery().setRootComponentUuid("does not exist"))) .isEmpty(); } @@ -258,13 +258,13 @@ public class SnapshotDaoIT { Collections.shuffle(snapshots); snapshots.forEach(db.components()::insertSnapshot); - assertThat(underTest.selectAnalysesByQuery(db.getSession(), new SnapshotQuery().setComponentUuid(project.uuid()).setSort(BY_DATE, ASC))) + assertThat(underTest.selectAnalysesByQuery(db.getSession(), new SnapshotQuery().setRootComponentUuid(project.uuid()).setSort(BY_DATE, ASC))) .extracting(SnapshotDto::getUuid) .containsExactly(snapshots.stream() .sorted(Comparator.comparingLong(SnapshotDto::getCreatedAt)) .map(SnapshotDto::getUuid) .toArray(String[]::new)); - assertThat(underTest.selectAnalysesByQuery(db.getSession(), new SnapshotQuery().setComponentUuid(project.uuid()).setSort(BY_DATE, DESC))) + assertThat(underTest.selectAnalysesByQuery(db.getSession(), new SnapshotQuery().setRootComponentUuid(project.uuid()).setSort(BY_DATE, DESC))) .extracting(SnapshotDto::getUuid) .containsExactly(snapshots.stream() .sorted(Comparator.comparingLong(SnapshotDto::getCreatedAt).reversed()) @@ -279,10 +279,10 @@ public class SnapshotDaoIT { SnapshotDto lastSnapshot = db.components().insertSnapshot(project1, t -> t.setLast(true)); db.components().insertSnapshot(project1, t -> t.setLast(false)); - assertThat(underTest.selectAnalysesByQuery(db.getSession(), new SnapshotQuery().setComponentUuid(project1.uuid()).setIsLast(true))) + assertThat(underTest.selectAnalysesByQuery(db.getSession(), new SnapshotQuery().setRootComponentUuid(project1.uuid()).setIsLast(true))) .extracting(SnapshotDto::getUuid) .containsOnly(lastSnapshot.getUuid()); - assertThat(underTest.selectAnalysesByQuery(db.getSession(), new SnapshotQuery().setComponentUuid("unknown").setIsLast(true))) + assertThat(underTest.selectAnalysesByQuery(db.getSession(), new SnapshotQuery().setRootComponentUuid("unknown").setIsLast(true))) .isEmpty(); } @@ -294,7 +294,7 @@ public class SnapshotDaoIT { SnapshotDto lastSnapshot2 = db.components().insertSnapshot(project1, t -> t.setLast(true)); db.components().insertSnapshot(project1, t -> t.setLast(false)); - assertThat(underTest.selectAnalysesByQuery(db.getSession(), new SnapshotQuery().setComponentUuid(project1.uuid()).setIsLast(true))) + assertThat(underTest.selectAnalysesByQuery(db.getSession(), new SnapshotQuery().setRootComponentUuid(project1.uuid()).setIsLast(true))) .extracting(SnapshotDto::getUuid) .containsOnly(lastSnapshot1.getUuid(), lastSnapshot2.getUuid()); } @@ -319,22 +319,22 @@ public class SnapshotDaoIT { public void selectFinishedByComponentUuidsAndFromDates() { long from = 1_500_000_000_000L; long otherFrom = 1_200_000_000_000L; - ComponentDto firstProject = db.components().insertPublicProject().getMainBranchComponent(); - ComponentDto secondProject = db.components().insertPublicProject().getMainBranchComponent(); - ComponentDto thirdProject = db.components().insertPublicProject().getMainBranchComponent(); + ProjectData firstProject = db.components().insertPublicProject(); + ProjectData secondProject = db.components().insertPublicProject(); + ProjectData thirdProject = db.components().insertPublicProject(); SnapshotDto finishedAnalysis = db.components().insertSnapshot(firstProject, s -> s.setStatus(STATUS_PROCESSED).setCreatedAt(from)); - insertActivity(firstProject.uuid(), finishedAnalysis, SUCCESS); + insertActivity(firstProject.getMainBranchComponent().uuid(), finishedAnalysis, SUCCESS); SnapshotDto otherFinishedAnalysis = db.components().insertSnapshot(firstProject, s -> s.setStatus(STATUS_PROCESSED).setCreatedAt(from + 1_000_000L)); - insertActivity(firstProject.uuid(), otherFinishedAnalysis, SUCCESS); + insertActivity(firstProject.getMainBranchComponent().uuid(), otherFinishedAnalysis, SUCCESS); SnapshotDto oldAnalysis = db.components().insertSnapshot(firstProject, s -> s.setStatus(STATUS_PROCESSED).setCreatedAt(from - 1L)); - insertActivity(firstProject.uuid(), oldAnalysis, SUCCESS); + insertActivity(firstProject.getMainBranchComponent().uuid(), oldAnalysis, SUCCESS); SnapshotDto analysisOnSecondProject = db.components().insertSnapshot(secondProject, s -> s.setStatus(STATUS_PROCESSED).setCreatedAt(otherFrom)); - insertActivity(secondProject.uuid(), analysisOnSecondProject, SUCCESS); + insertActivity(secondProject.getMainBranchComponent().uuid(), analysisOnSecondProject, SUCCESS); SnapshotDto oldAnalysisOnThirdProject = db.components().insertSnapshot(thirdProject, s -> s.setStatus(STATUS_PROCESSED).setCreatedAt(otherFrom - 1L)); - insertActivity(thirdProject.uuid(), oldAnalysisOnThirdProject, SUCCESS); + insertActivity(thirdProject.getMainBranchComponent().uuid(), oldAnalysisOnThirdProject, SUCCESS); List result = underTest.selectFinishedByProjectUuidsAndFromDates(dbSession, - Arrays.asList(firstProject.uuid(), secondProject.uuid(), thirdProject.uuid()), + Arrays.asList(firstProject.projectUuid(), secondProject.projectUuid(), thirdProject.projectUuid()), Arrays.asList(from, otherFrom, otherFrom)); assertThat(result).extracting(SnapshotDto::getUuid) @@ -344,36 +344,37 @@ public class SnapshotDaoIT { @Test public void selectFinishedByComponentUuidsAndFromDates_returns_processed_analysis_even_if_analysis_failed() { long from = 1_500_000_000_000L; - ComponentDto project = db.components().insertPublicProject().getMainBranchComponent(); + ProjectData project = db.components().insertPublicProject(); SnapshotDto unprocessedAnalysis = db.components().insertSnapshot(project, s -> s.setStatus(STATUS_UNPROCESSED).setCreatedAt(from + 1_000_000L)); - insertActivity(project.uuid(), unprocessedAnalysis, CANCELED); + insertActivity(project.getMainBranchComponent().uuid(), unprocessedAnalysis, CANCELED); SnapshotDto finishedAnalysis = db.components().insertSnapshot(project, s -> s.setStatus(STATUS_PROCESSED).setCreatedAt(from)); - insertActivity(project.uuid(), finishedAnalysis, SUCCESS); + insertActivity(project.getMainBranchComponent().uuid(), finishedAnalysis, SUCCESS); SnapshotDto canceledAnalysis = db.components().insertSnapshot(project, s -> s.setStatus(STATUS_PROCESSED).setCreatedAt(from)); - insertActivity(project.uuid(), canceledAnalysis, CANCELED); + insertActivity(project.getMainBranchComponent().uuid(), canceledAnalysis, CANCELED); - List result = underTest.selectFinishedByProjectUuidsAndFromDates(dbSession, singletonList(project.uuid()), singletonList(from)); + List result = underTest.selectFinishedByProjectUuidsAndFromDates(dbSession, + singletonList(project.getProjectDto().getUuid()), singletonList(from)); - assertThat(result).extracting(SnapshotDto::getUuid) - .containsExactlyInAnyOrder(finishedAnalysis.getUuid(), canceledAnalysis.getUuid()); + assertThat(result).extracting(SnapshotDto::getUuid).containsExactlyInAnyOrder(finishedAnalysis.getUuid(), canceledAnalysis.getUuid()); } @Test public void selectFinishedByComponentUuidsAndFromDates_return_branches_analysis() { long from = 1_500_000_000_000L; - ComponentDto project = db.components().insertPublicProject().getMainBranchComponent(); - ComponentDto firstBranch = db.components().insertProjectBranch(project); - ComponentDto secondBranch = db.components().insertProjectBranch(project); + ProjectData project = db.components().insertPublicProject(); + ComponentDto firstBranch = db.components().insertProjectBranch(project.getMainBranchComponent()); + ComponentDto secondBranch = db.components().insertProjectBranch(project.getMainBranchComponent()); SnapshotDto finishedAnalysis = db.components().insertSnapshot(firstBranch, s -> s.setStatus(STATUS_PROCESSED).setCreatedAt(from)); - insertActivity(project.uuid(), finishedAnalysis, SUCCESS); + insertActivity(project.getProjectDto().getUuid(), finishedAnalysis, SUCCESS); SnapshotDto otherFinishedAnalysis = db.components().insertSnapshot(firstBranch, s -> s.setStatus(STATUS_PROCESSED).setCreatedAt(from + 1_000_000L)); - insertActivity(project.uuid(), otherFinishedAnalysis, SUCCESS); + insertActivity(project.getProjectDto().getUuid(), otherFinishedAnalysis, SUCCESS); SnapshotDto oldAnalysis = db.components().insertSnapshot(firstBranch, s -> s.setStatus(STATUS_PROCESSED).setCreatedAt(from - 1L)); - insertActivity(project.uuid(), oldAnalysis, SUCCESS); + insertActivity(project.getProjectDto().getUuid(), oldAnalysis, SUCCESS); SnapshotDto analysisOnSecondBranch = db.components().insertSnapshot(secondBranch, s -> s.setStatus(STATUS_PROCESSED).setCreatedAt(from)); - insertActivity(project.uuid(), analysisOnSecondBranch, SUCCESS); + insertActivity(project.getProjectDto().getUuid(), analysisOnSecondBranch, SUCCESS); - List result = underTest.selectFinishedByProjectUuidsAndFromDates(dbSession, singletonList(project.uuid()), singletonList(from)); + List result = underTest.selectFinishedByProjectUuidsAndFromDates(dbSession, singletonList(project.getProjectDto().getUuid()), + singletonList(from)); assertThat(result).extracting(SnapshotDto::getUuid) .containsExactlyInAnyOrder(finishedAnalysis.getUuid(), otherFinishedAnalysis.getUuid(), analysisOnSecondBranch.getUuid()); @@ -413,7 +414,7 @@ public class SnapshotDaoIT { .setCreatedAt(1403042400000L)); assertThat(dto.getUuid()).isNotNull(); - assertThat(dto.getComponentUuid()).isEqualTo(project.uuid()); + assertThat(dto.getRootComponentUuid()).isEqualTo(project.uuid()); assertThat(dto.getStatus()).isEqualTo("P"); assertThat(dto.getLast()).isTrue(); assertThat(dto.getPeriodMode()).isEqualTo("days"); @@ -520,7 +521,7 @@ public class SnapshotDaoIT { SnapshotDto analysis = insertAnalysis("P1", "A1", STATUS_PROCESSED, false); db.commit(); analysis - .setComponentUuid("P42") + .setRootComponentUuid("P42") .setProjectVersion("5.6.3") .setStatus(STATUS_UNPROCESSED); @@ -529,7 +530,7 @@ public class SnapshotDaoIT { SnapshotDto result = underTest.selectByUuid(dbSession, "A1").get(); assertThat(result.getProjectVersion()).isEqualTo("5.6.3"); assertThat(result.getStatus()).isEqualTo(STATUS_UNPROCESSED); - assertThat(result.getComponentUuid()).isEqualTo("P1"); + assertThat(result.getRootComponentUuid()).isEqualTo("P1"); } private SnapshotDto insertAnalysis(String projectUuid, String uuid, String status, boolean isLastFlag) { @@ -550,7 +551,7 @@ public class SnapshotDaoIT { private static SnapshotDto defaultSnapshot() { return new SnapshotDto() .setUuid("u1") - .setComponentUuid("uuid_3") + .setRootComponentUuid("uuid_3") .setStatus("P") .setLast(true) .setProjectVersion("2.1-SNAPSHOT") diff --git a/server/sonar-db-dao/src/it/java/org/sonar/db/event/EventDaoIT.java b/server/sonar-db-dao/src/it/java/org/sonar/db/event/EventDaoIT.java index 9ef4dacca8c..3501b5dcf2d 100644 --- a/server/sonar-db-dao/src/it/java/org/sonar/db/event/EventDaoIT.java +++ b/server/sonar-db-dao/src/it/java/org/sonar/db/event/EventDaoIT.java @@ -72,7 +72,7 @@ public class EventDaoIT { .toArray(String[]::new); EventDto event2 = dbTester.events().insertEvent(new EventDto() .setAnalysisUuid(analysis2.getUuid()) - .setComponentUuid(analysis2.getComponentUuid()) + .setComponentUuid(analysis2.getRootComponentUuid()) .setName("name_2_") .setUuid("2_") .setCategory("cat_2_") diff --git a/server/sonar-db-dao/src/it/java/org/sonar/db/measure/MeasureDaoIT.java b/server/sonar-db-dao/src/it/java/org/sonar/db/measure/MeasureDaoIT.java index 446e093f265..fd7b4346fb0 100644 --- a/server/sonar-db-dao/src/it/java/org/sonar/db/measure/MeasureDaoIT.java +++ b/server/sonar-db-dao/src/it/java/org/sonar/db/measure/MeasureDaoIT.java @@ -218,7 +218,7 @@ public class MeasureDaoIT { private SnapshotDto insertAnalysis(String projectUuid, boolean isLast) { return db.getDbClient().snapshotDao().insert(db.getSession(), SnapshotTesting.newSnapshot() .setUuid(Uuids.createFast()) - .setComponentUuid(projectUuid) + .setRootComponentUuid(projectUuid) .setLast(isLast)); } diff --git a/server/sonar-db-dao/src/it/java/org/sonar/db/measure/ProjectMeasuresIndexerIteratorIT.java b/server/sonar-db-dao/src/it/java/org/sonar/db/measure/ProjectMeasuresIndexerIteratorIT.java index f8105bd490d..b4715ba36f5 100644 --- a/server/sonar-db-dao/src/it/java/org/sonar/db/measure/ProjectMeasuresIndexerIteratorIT.java +++ b/server/sonar-db-dao/src/it/java/org/sonar/db/measure/ProjectMeasuresIndexerIteratorIT.java @@ -21,7 +21,6 @@ package org.sonar.db.measure; import com.google.common.collect.Maps; import java.util.Map; -import java.util.function.Consumer; import javax.annotation.Nullable; import org.junit.Rule; import org.junit.Test; @@ -30,13 +29,10 @@ import org.sonar.db.DbClient; import org.sonar.db.DbSession; import org.sonar.db.DbTester; import org.sonar.db.component.ComponentDto; -import org.sonar.db.component.ComponentTesting; import org.sonar.db.component.SnapshotDto; import org.sonar.db.measure.ProjectMeasuresIndexerIterator.ProjectMeasures; import org.sonar.db.metric.MetricDto; -import org.sonar.db.project.ProjectDto; -import static com.google.common.base.Preconditions.checkState; import static com.google.common.collect.Lists.newArrayList; import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.entry; @@ -47,8 +43,6 @@ import static org.sonar.api.measures.Metric.ValueType.DISTRIB; import static org.sonar.api.measures.Metric.ValueType.INT; import static org.sonar.api.measures.Metric.ValueType.LEVEL; import static org.sonar.api.measures.Metric.ValueType.STRING; -import static org.sonar.db.component.ComponentDbTester.defaults; -import static org.sonar.db.component.ComponentDbTester.toProjectDto; import static org.sonar.db.component.SnapshotTesting.newAnalysis; public class ProjectMeasuresIndexerIteratorIT { diff --git a/server/sonar-db-dao/src/it/java/org/sonar/db/purge/PurgeCommandsIT.java b/server/sonar-db-dao/src/it/java/org/sonar/db/purge/PurgeCommandsIT.java index ae98a492771..43ab97549b5 100644 --- a/server/sonar-db-dao/src/it/java/org/sonar/db/purge/PurgeCommandsIT.java +++ b/server/sonar-db-dao/src/it/java/org/sonar/db/purge/PurgeCommandsIT.java @@ -397,7 +397,7 @@ public class PurgeCommandsIT { } private Stream uuidsOfAnalysesOfRoot(ComponentDto rootComponent) { - return dbTester.select("select uuid as \"UUID\" from snapshots where component_uuid='" + rootComponent.uuid() + "'") + return dbTester.select("select uuid as \"UUID\" from snapshots where root_component_uuid='" + rootComponent.uuid() + "'") .stream() .map(t -> (String) t.get("UUID")); } @@ -887,13 +887,13 @@ public class PurgeCommandsIT { } private int countAnalysesOfRoot(ComponentDto projectOrView) { - return dbTester.countSql("select count(1) from snapshots where component_uuid='" + projectOrView.uuid() + "'"); + return dbTester.countSql("select count(1) from snapshots where root_component_uuid='" + projectOrView.uuid() + "'"); } private int countAnalysesOfRoot(ComponentDto projectOrView, String status, boolean isLast) { Dialect dialect = dbTester.getDbClient().getDatabase().getDialect(); String bool = isLast ? dialect.getTrueSqlValue() : dialect.getFalseSqlValue(); - return dbTester.countSql("select count(1) from snapshots where component_uuid='" + projectOrView.uuid() + "' and status='" + status + "' and islast=" + bool); + return dbTester.countSql("select count(1) from snapshots where root_component_uuid='" + projectOrView.uuid() + "' and status='" + status + "' and islast=" + bool); } private List getHugeNumberOfUuids() { diff --git a/server/sonar-db-dao/src/it/java/org/sonar/db/purge/PurgeDaoIT.java b/server/sonar-db-dao/src/it/java/org/sonar/db/purge/PurgeDaoIT.java index 5739021ecfd..6ddf1800c4d 100644 --- a/server/sonar-db-dao/src/it/java/org/sonar/db/purge/PurgeDaoIT.java +++ b/server/sonar-db-dao/src/it/java/org/sonar/db/purge/PurgeDaoIT.java @@ -437,31 +437,31 @@ public class PurgeDaoIT { SnapshotDto[] analyses = new SnapshotDto[] { newSnapshot() .setUuid("u1") - .setComponentUuid(PROJECT_UUID) + .setRootComponentUuid(PROJECT_UUID) .setStatus(STATUS_PROCESSED) .setLast(true), // not processed -> exclude newSnapshot() .setUuid("u2") - .setComponentUuid(PROJECT_UUID) + .setRootComponentUuid(PROJECT_UUID) .setStatus(STATUS_UNPROCESSED) .setLast(false), // on other resource -> exclude newSnapshot() .setUuid("u3") - .setComponentUuid("uuid_222") + .setRootComponentUuid("uuid_222") .setStatus(STATUS_PROCESSED) .setLast(true), // without event -> select newSnapshot() .setUuid("u4") - .setComponentUuid(PROJECT_UUID) + .setRootComponentUuid(PROJECT_UUID) .setStatus(STATUS_PROCESSED) .setLast(false), // with event -> select newSnapshot() .setUuid("u5") - .setComponentUuid(PROJECT_UUID) + .setRootComponentUuid(PROJECT_UUID) .setStatus(STATUS_PROCESSED) .setLast(false) .setProjectVersion("V5") @@ -489,7 +489,7 @@ public class PurgeDaoIT { public void selectPurgeableAnalyses_does_not_return_the_baseline() { ComponentDto project1 = db.components().insertPublicProject("master").getMainBranchComponent(); SnapshotDto analysis1 = db.components().insertSnapshot(newSnapshot() - .setComponentUuid(project1.uuid()) + .setRootComponentUuid(project1.uuid()) .setStatus(STATUS_PROCESSED) .setLast(false)); dbClient.newCodePeriodDao().insert(dbSession, @@ -500,7 +500,7 @@ public class PurgeDaoIT { .setValue(analysis1.getUuid())); ComponentDto project2 = db.components().insertPrivateProject().getMainBranchComponent(); SnapshotDto analysis2 = db.components().insertSnapshot(newSnapshot() - .setComponentUuid(project2.uuid()) + .setRootComponentUuid(project2.uuid()) .setStatus(STATUS_PROCESSED) .setLast(false)); db.components().insertProjectBranch(project2); @@ -515,7 +515,7 @@ public class PurgeDaoIT { public void selectPurgeableAnalyses_does_not_return_the_baseline_of_specific_branch() { ComponentDto project = db.components().insertPublicProject("master").getMainBranchComponent(); SnapshotDto analysisProject = db.components().insertSnapshot(newSnapshot() - .setComponentUuid(project.uuid()) + .setRootComponentUuid(project.uuid()) .setStatus(STATUS_PROCESSED) .setLast(false)); dbClient.newCodePeriodDao().insert(dbSession, @@ -526,12 +526,12 @@ public class PurgeDaoIT { .setValue(analysisProject.getUuid())); ComponentDto branch1 = db.components().insertProjectBranch(project); SnapshotDto analysisBranch1 = db.components().insertSnapshot(newSnapshot() - .setComponentUuid(branch1.uuid()) + .setRootComponentUuid(branch1.uuid()) .setStatus(STATUS_PROCESSED) .setLast(false)); ComponentDto branch2 = db.components().insertProjectBranch(project); SnapshotDto analysisBranch2 = db.components().insertSnapshot(newSnapshot() - .setComponentUuid(branch2.uuid()) + .setRootComponentUuid(branch2.uuid()) .setStatus(STATUS_PROCESSED) .setLast(false)); dbClient.newCodePeriodDao().insert(dbSession, @@ -1971,7 +1971,7 @@ public class PurgeDaoIT { } private Stream uuidsOfAnalysesOfRoot(ComponentDto rootComponent) { - return db.select("select uuid as \"UUID\" from snapshots where component_uuid='" + rootComponent.uuid() + "'") + return db.select("select uuid as \"UUID\" from snapshots where root_component_uuid='" + rootComponent.uuid() + "'") .stream() .map(t -> (String) t.get("UUID")); } diff --git a/server/sonar-db-dao/src/it/java/org/sonar/db/scannercache/ScannerAnalysisCacheDaoIT.java b/server/sonar-db-dao/src/it/java/org/sonar/db/scannercache/ScannerAnalysisCacheDaoIT.java index d426ba04796..2dab8a159e0 100644 --- a/server/sonar-db-dao/src/it/java/org/sonar/db/scannercache/ScannerAnalysisCacheDaoIT.java +++ b/server/sonar-db-dao/src/it/java/org/sonar/db/scannercache/ScannerAnalysisCacheDaoIT.java @@ -97,16 +97,16 @@ public class ScannerAnalysisCacheDaoIT { var snapshotDao = dbTester.getDbClient().snapshotDao(); var snapshot1 = createSnapshot(LocalDateTime.now().minusDays(1).toInstant(ZoneOffset.UTC).toEpochMilli()); snapshotDao.insert(dbSession, snapshot1); - underTest.insert(dbSession, snapshot1.getComponentUuid(), stringToInputStream("test data")); + underTest.insert(dbSession, snapshot1.getRootComponentUuid(), stringToInputStream("test data")); var snapshot2 = createSnapshot(LocalDateTime.now().minusDays(6).toInstant(ZoneOffset.UTC).toEpochMilli()); snapshotDao.insert(dbSession, snapshot2); - underTest.insert(dbSession, snapshot2.getComponentUuid(), stringToInputStream("test data")); + underTest.insert(dbSession, snapshot2.getRootComponentUuid(), stringToInputStream("test data")); var snapshot3 = createSnapshot(LocalDateTime.now().minusDays(8).toInstant(ZoneOffset.UTC).toEpochMilli()); snapshotDao.insert(dbSession, snapshot3); - underTest.insert(dbSession, snapshot3.getComponentUuid(), stringToInputStream("test data")); + underTest.insert(dbSession, snapshot3.getRootComponentUuid(), stringToInputStream("test data")); var snapshot4 = createSnapshot(LocalDateTime.now().minusDays(30).toInstant(ZoneOffset.UTC).toEpochMilli()); snapshotDao.insert(dbSession, snapshot4); - underTest.insert(dbSession, snapshot4.getComponentUuid(), stringToInputStream("test data")); + underTest.insert(dbSession, snapshot4.getRootComponentUuid(), stringToInputStream("test data")); assertThat(dbTester.countRowsOfTable("scanner_analysis_cache")).isEqualTo(4); @@ -114,10 +114,10 @@ public class ScannerAnalysisCacheDaoIT { dbSession.commit(); assertThat(dbTester.countRowsOfTable("scanner_analysis_cache")).isEqualTo(2); - assertThat(underTest.selectData(dbSession, snapshot1.getComponentUuid())).isNotNull(); - assertThat(underTest.selectData(dbSession, snapshot2.getComponentUuid())).isNotNull(); - assertThat(underTest.selectData(dbSession, snapshot3.getComponentUuid())).isNull(); - assertThat(underTest.selectData(dbSession, snapshot4.getComponentUuid())).isNull(); + assertThat(underTest.selectData(dbSession, snapshot1.getRootComponentUuid())).isNotNull(); + assertThat(underTest.selectData(dbSession, snapshot2.getRootComponentUuid())).isNotNull(); + assertThat(underTest.selectData(dbSession, snapshot3.getRootComponentUuid())).isNull(); + assertThat(underTest.selectData(dbSession, snapshot4.getRootComponentUuid())).isNull(); } private static String dataStreamToString(DbInputStream dbInputStream) throws IOException { @@ -133,7 +133,7 @@ public class ScannerAnalysisCacheDaoIT { private static SnapshotDto createSnapshot(long buildtime) { return new SnapshotDto() .setUuid(uuidFactory.create()) - .setComponentUuid(uuidFactory.create()) + .setRootComponentUuid(uuidFactory.create()) .setStatus("P") .setLast(true) .setProjectVersion("2.1-SNAPSHOT") diff --git a/server/sonar-db-dao/src/main/java/org/sonar/db/component/SnapshotDao.java b/server/sonar-db-dao/src/main/java/org/sonar/db/component/SnapshotDao.java index 11e5544e447..aeff59bc395 100644 --- a/server/sonar-db-dao/src/main/java/org/sonar/db/component/SnapshotDao.java +++ b/server/sonar-db-dao/src/main/java/org/sonar/db/component/SnapshotDao.java @@ -19,6 +19,7 @@ */ package org.sonar.db.component; +import com.google.common.annotations.VisibleForTesting; import com.google.common.collect.Lists; import java.util.Collection; import java.util.Collections; @@ -76,20 +77,20 @@ public class SnapshotDao implements Dao { return mapper(session).selectLastAnalysisDateByProjectUuids(projectUuids); } - public Optional selectLastAnalysisByRootComponentUuid(DbSession session, String componentUuid) { - return Optional.ofNullable(mapper(session).selectLastSnapshotByRootComponentUuid(componentUuid)); + public Optional selectLastAnalysisByRootComponentUuid(DbSession session, String rootComponentUuid) { + return Optional.ofNullable(mapper(session).selectLastSnapshotByRootComponentUuid(rootComponentUuid)); } - public List selectLastAnalysesByRootComponentUuids(DbSession dbSession, Collection componentUuids) { - return executeLargeInputs(componentUuids, mapper(dbSession)::selectLastSnapshotsByRootComponentUuids); + public List selectLastAnalysesByRootComponentUuids(DbSession dbSession, Collection rootComponentUuids) { + return executeLargeInputs(rootComponentUuids, mapper(dbSession)::selectLastSnapshotsByRootComponentUuids); } public List selectAnalysesByQuery(DbSession session, SnapshotQuery query) { return mapper(session).selectSnapshotsByQuery(query); } - public Optional selectOldestAnalysis(DbSession session, String componentUuid) { - return mapper(session).selectOldestSnapshots(componentUuid, SnapshotDto.STATUS_PROCESSED, new RowBounds(0, 1)) + public Optional selectOldestAnalysis(DbSession session, String rootComponentUuid) { + return mapper(session).selectOldestSnapshots(rootComponentUuid, SnapshotDto.STATUS_PROCESSED, new RowBounds(0, 1)) .stream() .findFirst(); } @@ -110,9 +111,9 @@ public class SnapshotDao implements Dao { return executeLargeInputs(projectUuidFromDatePairs, partition -> mapper(dbSession).selectFinishedByProjectUuidsAndFromDates(partition), i -> i / 2); } - public void switchIsLastFlagAndSetProcessedStatus(DbSession dbSession, String componentUuid, String analysisUuid) { + public void switchIsLastFlagAndSetProcessedStatus(DbSession dbSession, String rootComponentUuid, String analysisUuid) { SnapshotMapper mapper = mapper(dbSession); - mapper.unsetIsLastFlagForComponentUuid(componentUuid); + mapper.unsetIsLastFlagForRootComponentUuid(rootComponentUuid); mapper(dbSession).setIsLastFlagForAnalysisUuid(analysisUuid); } @@ -121,12 +122,14 @@ public class SnapshotDao implements Dao { return item; } + @VisibleForTesting public void insert(DbSession session, Collection items) { for (SnapshotDto item : items) { insert(session, item); } } + @VisibleForTesting public void insert(DbSession session, SnapshotDto item, SnapshotDto... others) { insert(session, Lists.asList(item, others)); } @@ -139,8 +142,8 @@ public class SnapshotDao implements Dao { * Used by Governance */ @CheckForNull - public ViewsSnapshotDto selectSnapshotBefore(String componentUuid, long date, DbSession dbSession) { - return mapper(dbSession).selectSnapshotBefore(componentUuid, date).stream().findFirst().orElse(null); + public ViewsSnapshotDto selectSnapshotBefore(String rootComponentUuid, long date, DbSession dbSession) { + return mapper(dbSession).selectSnapshotBefore(rootComponentUuid, date).stream().findFirst().orElse(null); } private static SnapshotMapper mapper(DbSession session) { diff --git a/server/sonar-db-dao/src/main/java/org/sonar/db/component/SnapshotDto.java b/server/sonar-db-dao/src/main/java/org/sonar/db/component/SnapshotDto.java index 9ff6e73c809..b0f2b37e28b 100644 --- a/server/sonar-db-dao/src/main/java/org/sonar/db/component/SnapshotDto.java +++ b/server/sonar-db-dao/src/main/java/org/sonar/db/component/SnapshotDto.java @@ -38,7 +38,7 @@ public final class SnapshotDto { public static final int MAX_BUILD_STRING_LENGTH = 100; private String uuid; - private String componentUuid; + private String rootComponentUuid; private Long createdAt; private Long buildDate; private String status = STATUS_UNPROCESSED; @@ -74,12 +74,12 @@ public final class SnapshotDto { return this; } - public String getComponentUuid() { - return componentUuid; + public String getRootComponentUuid() { + return rootComponentUuid; } - public SnapshotDto setComponentUuid(String componentUuid) { - this.componentUuid = componentUuid; + public SnapshotDto setRootComponentUuid(String rootComponentUuid) { + this.rootComponentUuid = rootComponentUuid; return this; } @@ -207,7 +207,7 @@ public final class SnapshotDto { } SnapshotDto that = (SnapshotDto) o; return Objects.equals(uuid, that.uuid) && - Objects.equals(componentUuid, that.componentUuid) && + Objects.equals(rootComponentUuid, that.rootComponentUuid) && Objects.equals(createdAt, that.createdAt) && Objects.equals(buildDate, that.buildDate) && Objects.equals(status, that.status) && @@ -221,14 +221,14 @@ public final class SnapshotDto { @Override public int hashCode() { - return Objects.hash(uuid, componentUuid, createdAt, buildDate, status, last, projectVersion, buildString, periodMode, periodParam, periodDate); + return Objects.hash(uuid, rootComponentUuid, createdAt, buildDate, status, last, projectVersion, buildString, periodMode, periodParam, periodDate); } @Override public String toString() { return "SnapshotDto{" + "uuid='" + uuid + '\'' + - ", componentUuid='" + componentUuid + '\'' + + ", componentUuid='" + rootComponentUuid + '\'' + ", createdAt=" + createdAt + ", buildDate=" + buildDate + ", status='" + status + '\'' + diff --git a/server/sonar-db-dao/src/main/java/org/sonar/db/component/SnapshotMapper.java b/server/sonar-db-dao/src/main/java/org/sonar/db/component/SnapshotMapper.java index 05186d5f7cf..7a9e64c2c57 100644 --- a/server/sonar-db-dao/src/main/java/org/sonar/db/component/SnapshotMapper.java +++ b/server/sonar-db-dao/src/main/java/org/sonar/db/component/SnapshotMapper.java @@ -36,17 +36,17 @@ public interface SnapshotMapper { SnapshotDto selectLastSnapshotByComponentUuid(@Param("componentUuid") String componentUuid); @CheckForNull - SnapshotDto selectLastSnapshotByRootComponentUuid(@Param("componentUuid") String componentUuid); + SnapshotDto selectLastSnapshotByRootComponentUuid(@Param("rootComponentUuid") String rootComponentUuid); - List selectLastSnapshotsByRootComponentUuids(@Param("componentUuids") Collection componentUuids); + List selectLastSnapshotsByRootComponentUuids(@Param("rootComponentUuids") Collection rootComponentUuids); List selectSnapshotsByQuery(@Param("query") SnapshotQuery query); - List selectOldestSnapshots(@Param("componentUuid") String componentUuid, @Param("status") String status, RowBounds rowBounds); + List selectOldestSnapshots(@Param("rootComponentUuid") String rootComponentUuid, @Param("status") String status, RowBounds rowBounds); - List selectSnapshotBefore(@Param("componentUuid") String componentUuid, @Param("date") long date); + List selectSnapshotBefore(@Param("rootComponentUuid") String rootComponentUuid, @Param("date") long date); - void unsetIsLastFlagForComponentUuid(@Param("componentUuid") String componentUuid); + void unsetIsLastFlagForRootComponentUuid(@Param("rootComponentUuid") String rootComponentUuid); void setIsLastFlagForAnalysisUuid(@Param("analysisUuid") String analysisUuid); diff --git a/server/sonar-db-dao/src/main/java/org/sonar/db/component/SnapshotQuery.java b/server/sonar-db-dao/src/main/java/org/sonar/db/component/SnapshotQuery.java index 7d7f443a1fc..08a9f53659b 100644 --- a/server/sonar-db-dao/src/main/java/org/sonar/db/component/SnapshotQuery.java +++ b/server/sonar-db-dao/src/main/java/org/sonar/db/component/SnapshotQuery.java @@ -43,7 +43,7 @@ public final class SnapshotQuery { } } - private String componentUuid; + private String rootComponentUuid; private Long createdAfter; private Long createdBefore; private List statuses; @@ -89,12 +89,12 @@ public final class SnapshotQuery { } @CheckForNull - public String getComponentUuid() { - return componentUuid; + public String getRootComponentUuid() { + return rootComponentUuid; } - public SnapshotQuery setComponentUuid(@Nullable String componentUuid) { - this.componentUuid = componentUuid; + public SnapshotQuery setRootComponentUuid(@Nullable String rootComponentUuid) { + this.rootComponentUuid = rootComponentUuid; return this; } diff --git a/server/sonar-db-dao/src/main/java/org/sonar/db/measure/ProjectMeasuresIndexerIterator.java b/server/sonar-db-dao/src/main/java/org/sonar/db/measure/ProjectMeasuresIndexerIterator.java index 5cc3ea168a5..8997ce77028 100644 --- a/server/sonar-db-dao/src/main/java/org/sonar/db/measure/ProjectMeasuresIndexerIterator.java +++ b/server/sonar-db-dao/src/main/java/org/sonar/db/measure/ProjectMeasuresIndexerIterator.java @@ -72,13 +72,11 @@ public class ProjectMeasuresIndexerIterator extends CloseableIterator from components p - inner join snapshots sa on sa.component_uuid=p.uuid + inner join snapshots sa on sa.root_component_uuid=p.uuid and sa.status='P' and sa.islast=${_true} and sa.created_at < #{query.analyzedBefore,jdbcType=BIGINT} left join project_branches pb on pb.uuid = p.branch_uuid @@ -273,10 +273,10 @@ - and not exists(select 1 from snapshots sp where sp.component_uuid=p.uuid) + and not exists(select 1 from snapshots sp where sp.root_component_uuid=p.uuid) and not exists( select 1 from snapshots sp - inner join project_branches pb2 on sp.component_uuid = pb2.uuid + inner join project_branches pb2 on sp.root_component_uuid = pb2.uuid where pb2.project_uuid = pb.project_uuid ) @@ -285,7 +285,7 @@ exists( -- branches of projects and applications select 1 from snapshots s - inner join project_branches pb2 on s.component_uuid = pb2.uuid + inner join project_branches pb2 on s.root_component_uuid = pb2.uuid where pb2.project_uuid = pb.project_uuid and s.status='P' and s.islast = ${_true} @@ -294,7 +294,7 @@ or exists ( -- portfolios select 1 from snapshots s - where s.component_uuid = p.uuid + where s.root_component_uuid = p.uuid and s.status='P' and s.islast = ${_true} and s.created_at >= #{query.anyBranchAnalyzedAfter,jdbcType=BIGINT} @@ -306,7 +306,7 @@ exists( -- branches of projects and applications select 1 from snapshots s - inner join project_branches pb2 on s.component_uuid = pb2.uuid + inner join project_branches pb2 on s.root_component_uuid = pb2.uuid where pb2.project_uuid = pb.project_uuid and s.status='P' and s.islast = ${_true} @@ -315,7 +315,7 @@ or exists ( -- portfolios select 1 from snapshots s - where s.component_uuid = p.uuid + where s.root_component_uuid = p.uuid and s.status='P' and s.islast = ${_true} and s.created_at < #{query.anyBranchAnalyzedBefore,jdbcType=BIGINT} @@ -326,7 +326,7 @@ and ( (select max(s.created_at) from snapshots s - inner join project_branches pb2 on s.component_uuid = pb2.uuid + inner join project_branches pb2 on s.root_component_uuid = pb2.uuid where pb2.project_uuid = pb.project_uuid and s.status='P' and s.islast = ${_true} @@ -335,7 +335,7 @@ exists ( -- portfolios select 1 from snapshots s - where s.component_uuid = p.uuid + where s.root_component_uuid = p.uuid and p.qualifier = 'VW' and s.status='P' and s.islast = ${_true} diff --git a/server/sonar-db-dao/src/main/resources/org/sonar/db/component/SnapshotMapper.xml b/server/sonar-db-dao/src/main/resources/org/sonar/db/component/SnapshotMapper.xml index 746a1efd27f..1d5fcc6abbd 100644 --- a/server/sonar-db-dao/src/main/resources/org/sonar/db/component/SnapshotMapper.xml +++ b/server/sonar-db-dao/src/main/resources/org/sonar/db/component/SnapshotMapper.xml @@ -4,7 +4,7 @@ s.uuid as uuid, - s.component_uuid as componentUuid, + s.root_component_uuid as rootComponentUuid, s.created_at as createdAt, s.build_date as buildDate, s.status as status, @@ -38,7 +38,7 @@ select max(s.created_at) from snapshots s - inner join components p on s.component_uuid = p.branch_uuid + inner join components p on s.root_component_uuid = p.branch_uuid left join project_branches pb on pb.uuid = p.branch_uuid where s.islast=${_true} @@ -65,7 +65,7 @@ s.created_at as last_analysis_date from snapshots s - inner join components c on s.component_uuid = c.branch_uuid + inner join components c on s.root_component_uuid = c.branch_uuid left join project_branches pb on pb.uuid = c.branch_uuid where s.islast = ${_true} @@ -89,7 +89,7 @@ @@ -107,8 +107,8 @@ SELECT FROM snapshots s - - INNER JOIN components p ON p.uuid=s.component_uuid AND p.enabled=${_true} AND s.component_uuid=#{query.componentUuid,jdbcType=VARCHAR} + + INNER JOIN components p ON p.uuid=s.root_component_uuid AND p.enabled=${_true} AND s.root_component_uuid=#{query.rootComponentUuid,jdbcType=VARCHAR} @@ -148,7 +148,7 @@ select from snapshots s - inner join components p on p.uuid=s.component_uuid and p.enabled=${_true} + inner join components p on p.uuid=s.root_component_uuid and p.enabled=${_true} inner join project_branches pb on pb.uuid=p.uuid where @@ -164,7 +164,7 @@ FROM snapshots s - and s.component_uuid=#{componentUuid,jdbcType=VARCHAR} + and s.root_component_uuid=#{rootComponentUuid,jdbcType=VARCHAR} and s.status = #{status,jdbcType=VARCHAR} ORDER BY s.created_at ASC @@ -175,17 +175,17 @@ FROM snapshots s - and s.component_uuid = #{componentUuid,jdbcType=VARCHAR} + and s.root_component_uuid = #{rootComponentUuid,jdbcType=VARCHAR} and s.status = 'P' and s.created_at < #{date,jdbcType=BIGINT} order by created_at desc - + update snapshots set islast = ${_false} - where component_uuid = #{componentUuid,jdbcType=VARCHAR} + where root_component_uuid = #{rootComponentUuid,jdbcType=VARCHAR} and islast = ${_true} @@ -205,7 +205,7 @@ insert into snapshots ( uuid, - component_uuid, + root_component_uuid, created_at, build_date, status, @@ -219,7 +219,7 @@ ) values ( #{uuid, jdbcType=VARCHAR}, - #{componentUuid, jdbcType=VARCHAR}, + #{rootComponentUuid, jdbcType=VARCHAR}, #{createdAt, jdbcType=BIGINT}, #{buildDate, jdbcType=BIGINT}, #{status, jdbcType=VARCHAR}, diff --git a/server/sonar-db-dao/src/main/resources/org/sonar/db/event/EventMapper.xml b/server/sonar-db-dao/src/main/resources/org/sonar/db/event/EventMapper.xml index 9463f0c9e2c..c367b2a7d07 100644 --- a/server/sonar-db-dao/src/main/resources/org/sonar/db/event/EventMapper.xml +++ b/server/sonar-db-dao/src/main/resources/org/sonar/db/event/EventMapper.xml @@ -57,7 +57,7 @@ inner join snapshots s on s.uuid = e.analysis_uuid and s.status = 'P' - and s.component_uuid = #{componentUuid,jdbcType=VARCHAR} + and s.root_component_uuid = #{componentUuid,jdbcType=VARCHAR} where e.category = 'Version' order by 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 02bf75033f8..79987cf193a 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 @@ -9,7 +9,7 @@ from snapshots s where - s.component_uuid=#{componentUuid,jdbcType=VARCHAR} + s.root_component_uuid=#{componentUuid,jdbcType=VARCHAR} and s.islast=#{islast} @@ -32,7 +32,7 @@ from snapshots s left outer join events ve on ve.analysis_uuid=s.uuid where - s.component_uuid=#{componentUuid,jdbcType=VARCHAR} + s.root_component_uuid=#{componentUuid,jdbcType=VARCHAR} and s.status='P' @@ -53,7 +53,7 @@ project_branches pb left join snapshots s on - s.component_uuid = pb.uuid + s.root_component_uuid = pb.uuid and s.islast=${_true} where pb.project_uuid=#{projectUuid,jdbcType=VARCHAR} diff --git a/server/sonar-db-dao/src/main/resources/org/sonar/db/scannercache/ScannerAnalysisCacheMapper.xml b/server/sonar-db-dao/src/main/resources/org/sonar/db/scannercache/ScannerAnalysisCacheMapper.xml index bdec0304244..2b641ed9b41 100644 --- a/server/sonar-db-dao/src/main/resources/org/sonar/db/scannercache/ScannerAnalysisCacheMapper.xml +++ b/server/sonar-db-dao/src/main/resources/org/sonar/db/scannercache/ScannerAnalysisCacheMapper.xml @@ -16,7 +16,7 @@ where branch_uuid in ( select sac.branch_uuid from scanner_analysis_cache sac left outer join snapshots s on - sac.branch_uuid = s.component_uuid + sac.branch_uuid = s.root_component_uuid where s.build_date < #{timestamp,jdbcType=BIGINT} and s.islast=${_true} or s.islast is null diff --git a/server/sonar-db-dao/src/schema/schema-sq.ddl b/server/sonar-db-dao/src/schema/schema-sq.ddl index 7188c4d8c2e..4d9d6560ed1 100644 --- a/server/sonar-db-dao/src/schema/schema-sq.ddl +++ b/server/sonar-db-dao/src/schema/schema-sq.ddl @@ -963,7 +963,7 @@ CREATE INDEX "SESSION_TOKENS_USER_UUID" ON "SESSION_TOKENS"("USER_UUID" NULLS FI CREATE TABLE "SNAPSHOTS"( "UUID" CHARACTER VARYING(50) NOT NULL, - "COMPONENT_UUID" CHARACTER VARYING(50) NOT NULL, + "ROOT_COMPONENT_UUID" CHARACTER VARYING(50) NOT NULL, "STATUS" CHARACTER VARYING(4) DEFAULT 'U' NOT NULL, "ISLAST" BOOLEAN DEFAULT FALSE NOT NULL, "VERSION" CHARACTER VARYING(500), @@ -977,7 +977,7 @@ CREATE TABLE "SNAPSHOTS"( "CREATED_AT" BIGINT ); ALTER TABLE "SNAPSHOTS" ADD CONSTRAINT "PK_SNAPSHOTS" PRIMARY KEY("UUID"); -CREATE INDEX "SNAPSHOT_COMPONENT" ON "SNAPSHOTS"("COMPONENT_UUID" NULLS FIRST); +CREATE INDEX "SNAPSHOTS_ROOT_COMPONENT_UUID" ON "SNAPSHOTS"("ROOT_COMPONENT_UUID" NULLS FIRST); CREATE TABLE "USER_DISMISSED_MESSAGES"( "UUID" CHARACTER VARYING(40) NOT NULL, diff --git a/server/sonar-db-dao/src/test/java/org/sonar/db/component/SnapshotDtoTest.java b/server/sonar-db-dao/src/test/java/org/sonar/db/component/SnapshotDtoTest.java index cf8638c4da6..b9d2aaec441 100644 --- a/server/sonar-db-dao/src/test/java/org/sonar/db/component/SnapshotDtoTest.java +++ b/server/sonar-db-dao/src/test/java/org/sonar/db/component/SnapshotDtoTest.java @@ -33,7 +33,7 @@ public class SnapshotDtoTest { public void test_getter_and_setter() { SnapshotDto snapshotDto = new SnapshotDto() .setBuildDate(parseDate("2014-07-02").getTime()) - .setComponentUuid("uuid_21") + .setRootComponentUuid("uuid_21") .setLast(true) .setProjectVersion("1.0") .setBuildString("1.0.1.123") @@ -42,7 +42,7 @@ public class SnapshotDtoTest { .setPeriodDate(parseDate("2014-06-01").getTime()); assertThat(snapshotDto.getBuildDate()).isEqualTo(parseDate("2014-07-02").getTime()); - assertThat(snapshotDto.getComponentUuid()).isEqualTo("uuid_21"); + assertThat(snapshotDto.getRootComponentUuid()).isEqualTo("uuid_21"); assertThat(snapshotDto.getLast()).isTrue(); assertThat(snapshotDto.getProjectVersion()).isEqualTo("1.0"); assertThat(snapshotDto.getBuildString()).isEqualTo("1.0.1.123"); diff --git a/server/sonar-db-dao/src/test/java/org/sonar/db/component/SnapshotQueryTest.java b/server/sonar-db-dao/src/test/java/org/sonar/db/component/SnapshotQueryTest.java index 238a5c962a0..949402ea5ab 100644 --- a/server/sonar-db-dao/src/test/java/org/sonar/db/component/SnapshotQueryTest.java +++ b/server/sonar-db-dao/src/test/java/org/sonar/db/component/SnapshotQueryTest.java @@ -31,7 +31,7 @@ public class SnapshotQueryTest { @Test public void test_setters_and_getters() { SnapshotQuery query = new SnapshotQuery() - .setComponentUuid("abcd") + .setRootComponentUuid("abcd") .setIsLast(true) .setStatus("P") .setProjectVersion("1.0") @@ -39,7 +39,7 @@ public class SnapshotQueryTest { .setCreatedBefore(20L) .setSort(BY_DATE, ASC); - assertThat(query.getComponentUuid()).isEqualTo("abcd"); + assertThat(query.getRootComponentUuid()).isEqualTo("abcd"); assertThat(query.getIsLast()).isTrue(); assertThat(query.getStatus()).isEqualTo(List.of("P")); assertThat(query.getProjectVersion()).isEqualTo("1.0"); diff --git a/server/sonar-db-dao/src/testFixtures/java/org/sonar/db/component/SnapshotTesting.java b/server/sonar-db-dao/src/testFixtures/java/org/sonar/db/component/SnapshotTesting.java index 0cf40972cf5..7deed40f20f 100644 --- a/server/sonar-db-dao/src/testFixtures/java/org/sonar/db/component/SnapshotTesting.java +++ b/server/sonar-db-dao/src/testFixtures/java/org/sonar/db/component/SnapshotTesting.java @@ -44,7 +44,7 @@ public class SnapshotTesting { public static SnapshotDto newAnalysis(String uuid) { return new SnapshotDto() .setUuid(randomAlphanumeric(40)) - .setComponentUuid(uuid) + .setRootComponentUuid(uuid) .setStatus(SnapshotDto.STATUS_PROCESSED) .setCreatedAt(System.currentTimeMillis()) .setBuildDate(System.currentTimeMillis()) @@ -55,7 +55,7 @@ public class SnapshotTesting { public static SnapshotDto newSnapshot() { return new SnapshotDto() .setUuid(randomAlphanumeric(40)) - .setComponentUuid(randomAlphanumeric(40)) + .setRootComponentUuid(randomAlphanumeric(40)) .setStatus(randomAscii(1)) .setCreatedAt(System.currentTimeMillis()) .setBuildDate(System.currentTimeMillis()) diff --git a/server/sonar-db-dao/src/testFixtures/java/org/sonar/db/event/EventDbTester.java b/server/sonar-db-dao/src/testFixtures/java/org/sonar/db/event/EventDbTester.java index 432c4973c69..db6cf355d7f 100644 --- a/server/sonar-db-dao/src/testFixtures/java/org/sonar/db/event/EventDbTester.java +++ b/server/sonar-db-dao/src/testFixtures/java/org/sonar/db/event/EventDbTester.java @@ -67,7 +67,7 @@ public class EventDbTester { .setComponentKey(component.getKey()) .setComponentName(component.name()) .setComponentBranchKey(Optional.ofNullable(branch).map(BranchDto::getKey).orElse(null)); - EventPurgeData eventPurgeData = new EventPurgeData(analysis.getComponentUuid(), analysis.getUuid()); + EventPurgeData eventPurgeData = new EventPurgeData(analysis.getRootComponentUuid(), analysis.getUuid()); dbClient.eventComponentChangeDao().insert(dbSession, eventComponentChange, eventPurgeData); db.commit(); diff --git a/server/sonar-db-dao/src/testFixtures/java/org/sonar/db/event/EventTesting.java b/server/sonar-db-dao/src/testFixtures/java/org/sonar/db/event/EventTesting.java index da46af1938b..abff31ec0b7 100644 --- a/server/sonar-db-dao/src/testFixtures/java/org/sonar/db/event/EventTesting.java +++ b/server/sonar-db-dao/src/testFixtures/java/org/sonar/db/event/EventTesting.java @@ -28,11 +28,11 @@ public class EventTesting { public static EventDto newEvent(SnapshotDto analysis) { requireNonNull(analysis.getUuid()); - requireNonNull(analysis.getComponentUuid()); + requireNonNull(analysis.getRootComponentUuid()); return new EventDto() .setAnalysisUuid(analysis.getUuid()) - .setComponentUuid(analysis.getComponentUuid()) + .setComponentUuid(analysis.getRootComponentUuid()) .setUuid(randomAlphanumeric(40)) .setName(randomAlphanumeric(400)) .setDescription(null) diff --git a/server/sonar-db-migration/src/main/java/org/sonar/server/platform/db/migration/version/v102/CreateIndexRootComponentUuidInSnapshots.java b/server/sonar-db-migration/src/main/java/org/sonar/server/platform/db/migration/version/v102/CreateIndexRootComponentUuidInSnapshots.java new file mode 100644 index 00000000000..38c67b94a98 --- /dev/null +++ b/server/sonar-db-migration/src/main/java/org/sonar/server/platform/db/migration/version/v102/CreateIndexRootComponentUuidInSnapshots.java @@ -0,0 +1,33 @@ +/* + * SonarQube + * Copyright (C) 2009-2023 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.v102; + +import org.sonar.db.Database; +import org.sonar.server.platform.db.migration.step.CreateIndexOnColumn; + +public class CreateIndexRootComponentUuidInSnapshots extends CreateIndexOnColumn { + + private static final String TABLE_NAME = "snapshots"; + private static final String COLUMN_NAME = "root_component_uuid"; + + public CreateIndexRootComponentUuidInSnapshots(Database db) { + super(db, TABLE_NAME, COLUMN_NAME, false); + } +} diff --git a/server/sonar-db-migration/src/main/java/org/sonar/server/platform/db/migration/version/v102/DbVersion102.java b/server/sonar-db-migration/src/main/java/org/sonar/server/platform/db/migration/version/v102/DbVersion102.java index 95d4e5aab62..39ccad83e79 100644 --- a/server/sonar-db-migration/src/main/java/org/sonar/server/platform/db/migration/version/v102/DbVersion102.java +++ b/server/sonar-db-migration/src/main/java/org/sonar/server/platform/db/migration/version/v102/DbVersion102.java @@ -67,7 +67,9 @@ public class DbVersion102 implements DbVersion { .add(10_2_016, "Rename 'component_uuid' in 'webhook_deliveries' table to 'project_uuid'", RenameComponentUuidInWebhookDeliveries.class) .add(10_2_017, "Create index 'webhook_deliveries_project_uuid' in 'webhook_deliveries' table", CreateIndexProjectUuidInWebhookDeliveries.class) + .add(10_2_018, "Drop index 'component_uuid' in 'snapshots' table", DropIndexComponentUuidInSnapshots.class) + .add(10_2_019, "Rename 'component_uuid' in 'snapshots' table to 'root_component_uuid'", RenameComponentUuidInSnapshots.class) + .add(10_2_020, "Create index 'snapshots_root_component_uuid' in 'snapshots' table", CreateIndexRootComponentUuidInSnapshots.class) ; } - } diff --git a/server/sonar-db-migration/src/main/java/org/sonar/server/platform/db/migration/version/v102/DropIndexComponentUuidInSnapshots.java b/server/sonar-db-migration/src/main/java/org/sonar/server/platform/db/migration/version/v102/DropIndexComponentUuidInSnapshots.java new file mode 100644 index 00000000000..5646f830300 --- /dev/null +++ b/server/sonar-db-migration/src/main/java/org/sonar/server/platform/db/migration/version/v102/DropIndexComponentUuidInSnapshots.java @@ -0,0 +1,33 @@ +/* + * SonarQube + * Copyright (C) 2009-2023 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.v102; + +import org.sonar.db.Database; +import org.sonar.server.platform.db.migration.step.DropIndexChange; + +public class DropIndexComponentUuidInSnapshots extends DropIndexChange { + + private static final String TABLE_NAME = "snapshots"; + private static final String INDEX_NAME = "snapshot_component"; + + public DropIndexComponentUuidInSnapshots(Database db) { + super(db, INDEX_NAME, TABLE_NAME); + } +} \ No newline at end of file diff --git a/server/sonar-db-migration/src/main/java/org/sonar/server/platform/db/migration/version/v102/RenameComponentUuidInSnapshots.java b/server/sonar-db-migration/src/main/java/org/sonar/server/platform/db/migration/version/v102/RenameComponentUuidInSnapshots.java new file mode 100644 index 00000000000..8d14ffcbcba --- /dev/null +++ b/server/sonar-db-migration/src/main/java/org/sonar/server/platform/db/migration/version/v102/RenameComponentUuidInSnapshots.java @@ -0,0 +1,35 @@ +/* + * SonarQube + * Copyright (C) 2009-2023 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.v102; + +import org.sonar.db.Database; +import org.sonar.server.platform.db.migration.step.RenameVarcharColumnChange; + +public class RenameComponentUuidInSnapshots extends RenameVarcharColumnChange { + + private static final String TABLE_NAME = "snapshots"; + private static final String OLD_COLUMN_NAME = "component_uuid"; + private static final String NEW_COLUMN_NAME = "root_component_uuid"; + + public RenameComponentUuidInSnapshots(Database db) { + super(db, TABLE_NAME, OLD_COLUMN_NAME, NEW_COLUMN_NAME); + } + +} \ No newline at end of file diff --git a/server/sonar-db-migration/src/test/java/org/sonar/server/platform/db/migration/version/v102/CreateIndexRootComponentUuidInSnapshotsTest.java b/server/sonar-db-migration/src/test/java/org/sonar/server/platform/db/migration/version/v102/CreateIndexRootComponentUuidInSnapshotsTest.java new file mode 100644 index 00000000000..18df8a97a16 --- /dev/null +++ b/server/sonar-db-migration/src/test/java/org/sonar/server/platform/db/migration/version/v102/CreateIndexRootComponentUuidInSnapshotsTest.java @@ -0,0 +1,49 @@ +/* + * SonarQube + * Copyright (C) 2009-2023 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.v102; + +import java.sql.SQLException; +import org.junit.Rule; +import org.junit.Test; +import org.sonar.db.CoreDbTester; + +public class CreateIndexRootComponentUuidInSnapshotsTest { + @Rule + public final CoreDbTester db = CoreDbTester.createForSchema(CreateIndexRootComponentUuidInSnapshotsTest.class, "schema.sql"); + + private final CreateIndexRootComponentUuidInSnapshots createIndex = new CreateIndexRootComponentUuidInSnapshots(db.database()); + + @Test + public void migration_should_create_index() throws SQLException { + db.assertIndexDoesNotExist("snapshots", "snapshots_root_component_uuid"); + + createIndex.execute(); + + db.assertIndex("snapshots", "snapshots_root_component_uuid", "root_component_uuid"); + } + + @Test + public void migration_should_be_reentrant() throws SQLException { + createIndex.execute(); + createIndex.execute(); + + db.assertIndex("snapshots", "snapshots_root_component_uuid", "root_component_uuid"); + } +} diff --git a/server/sonar-db-migration/src/test/java/org/sonar/server/platform/db/migration/version/v102/DropIndexComponentUuidInSnapshotsTest.java b/server/sonar-db-migration/src/test/java/org/sonar/server/platform/db/migration/version/v102/DropIndexComponentUuidInSnapshotsTest.java new file mode 100644 index 00000000000..7329d5c3ff4 --- /dev/null +++ b/server/sonar-db-migration/src/test/java/org/sonar/server/platform/db/migration/version/v102/DropIndexComponentUuidInSnapshotsTest.java @@ -0,0 +1,56 @@ +/* + * SonarQube + * Copyright (C) 2009-2023 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.v102; + +import java.sql.SQLException; +import org.junit.Rule; +import org.junit.Test; +import org.sonar.db.CoreDbTester; + +public class DropIndexComponentUuidInSnapshotsTest { + + private static final String TABLE_NAME = "snapshots"; + private static final String COLUMN_NAME = "component_uuid"; + private static final String INDEX_NAME = "snapshot_component"; + + @Rule + public final CoreDbTester db = CoreDbTester.createForSchema(DropIndexComponentUuidInSnapshotsTest.class, "schema.sql"); + + private final DropIndexComponentUuidInSnapshots underTest = new DropIndexComponentUuidInSnapshots(db.database()); + + @Test + public void index_is_dropped() throws SQLException { + db.assertIndex(TABLE_NAME, INDEX_NAME, COLUMN_NAME); + + underTest.execute(); + + db.assertIndexDoesNotExist(TABLE_NAME, COLUMN_NAME); + } + + @Test + public void migration_is_reentrant() throws SQLException { + db.assertIndex(TABLE_NAME, INDEX_NAME, COLUMN_NAME); + + underTest.execute(); + underTest.execute(); + + db.assertIndexDoesNotExist(TABLE_NAME, COLUMN_NAME); + } +} diff --git a/server/sonar-db-migration/src/test/java/org/sonar/server/platform/db/migration/version/v102/RenameComponentUuidInSnapshotsTest.java b/server/sonar-db-migration/src/test/java/org/sonar/server/platform/db/migration/version/v102/RenameComponentUuidInSnapshotsTest.java new file mode 100644 index 00000000000..cea6152f2e8 --- /dev/null +++ b/server/sonar-db-migration/src/test/java/org/sonar/server/platform/db/migration/version/v102/RenameComponentUuidInSnapshotsTest.java @@ -0,0 +1,52 @@ +/* + * SonarQube + * Copyright (C) 2009-2023 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.v102; + +import java.sql.SQLException; +import org.junit.Rule; +import org.junit.Test; +import org.sonar.db.CoreDbTester; + +import static java.sql.Types.VARCHAR; + +public class RenameComponentUuidInSnapshotsTest { + public static final String TABLE_NAME = "snapshots"; + public static final String NEW_COLUMN_NAME = "root_component_uuid"; + + @Rule + public final CoreDbTester db = CoreDbTester.createForSchema(RenameComponentUuidInSnapshotsTest.class, "schema.sql"); + + private final RenameComponentUuidInSnapshots underTest = new RenameComponentUuidInSnapshots(db.database()); + + @Test + public void columnIsRenamed() throws SQLException { + db.assertColumnDoesNotExist(TABLE_NAME, NEW_COLUMN_NAME); + underTest.execute(); + db.assertColumnDefinition(TABLE_NAME, NEW_COLUMN_NAME, VARCHAR, 50, false); + } + + @Test + public void migration_is_reentrant() throws SQLException { + db.assertColumnDoesNotExist(TABLE_NAME, NEW_COLUMN_NAME); + underTest.execute(); + underTest.execute(); + db.assertColumnDefinition(TABLE_NAME, NEW_COLUMN_NAME, VARCHAR, 50, false); + } +} diff --git a/server/sonar-db-migration/src/test/resources/org/sonar/server/platform/db/migration/version/v102/CreateIndexRootComponentUuidInSnapshotsTest/schema.sql b/server/sonar-db-migration/src/test/resources/org/sonar/server/platform/db/migration/version/v102/CreateIndexRootComponentUuidInSnapshotsTest/schema.sql new file mode 100644 index 00000000000..b9ca75323ec --- /dev/null +++ b/server/sonar-db-migration/src/test/resources/org/sonar/server/platform/db/migration/version/v102/CreateIndexRootComponentUuidInSnapshotsTest/schema.sql @@ -0,0 +1,16 @@ +CREATE TABLE "SNAPSHOTS"( + "UUID" CHARACTER VARYING(50) NOT NULL, + "ROOT_COMPONENT_UUID" CHARACTER VARYING(50) NOT NULL, + "STATUS" CHARACTER VARYING(4) DEFAULT 'U' NOT NULL, + "ISLAST" BOOLEAN DEFAULT FALSE NOT NULL, + "VERSION" CHARACTER VARYING(500), + "PURGE_STATUS" INTEGER, + "BUILD_STRING" CHARACTER VARYING(100), + "REVISION" CHARACTER VARYING(100), + "BUILD_DATE" BIGINT, + "PERIOD1_MODE" CHARACTER VARYING(100), + "PERIOD1_PARAM" CHARACTER VARYING(100), + "PERIOD1_DATE" BIGINT, + "CREATED_AT" BIGINT +); +ALTER TABLE "SNAPSHOTS" ADD CONSTRAINT "PK_SNAPSHOTS" PRIMARY KEY("UUID"); \ No newline at end of file diff --git a/server/sonar-db-migration/src/test/resources/org/sonar/server/platform/db/migration/version/v102/DropIndexComponentUuidInSnapshotsTest/schema.sql b/server/sonar-db-migration/src/test/resources/org/sonar/server/platform/db/migration/version/v102/DropIndexComponentUuidInSnapshotsTest/schema.sql new file mode 100644 index 00000000000..404ebcdf7ec --- /dev/null +++ b/server/sonar-db-migration/src/test/resources/org/sonar/server/platform/db/migration/version/v102/DropIndexComponentUuidInSnapshotsTest/schema.sql @@ -0,0 +1,17 @@ +CREATE TABLE "SNAPSHOTS"( + "UUID" CHARACTER VARYING(50) NOT NULL, + "COMPONENT_UUID" CHARACTER VARYING(50) NOT NULL, + "STATUS" CHARACTER VARYING(4) DEFAULT 'U' NOT NULL, + "ISLAST" BOOLEAN DEFAULT FALSE NOT NULL, + "VERSION" CHARACTER VARYING(500), + "PURGE_STATUS" INTEGER, + "BUILD_STRING" CHARACTER VARYING(100), + "REVISION" CHARACTER VARYING(100), + "BUILD_DATE" BIGINT, + "PERIOD1_MODE" CHARACTER VARYING(100), + "PERIOD1_PARAM" CHARACTER VARYING(100), + "PERIOD1_DATE" BIGINT, + "CREATED_AT" BIGINT +); +ALTER TABLE "SNAPSHOTS" ADD CONSTRAINT "PK_SNAPSHOTS" PRIMARY KEY("UUID"); +CREATE INDEX "SNAPSHOT_COMPONENT" ON "SNAPSHOTS"("COMPONENT_UUID" NULLS FIRST); \ No newline at end of file diff --git a/server/sonar-db-migration/src/test/resources/org/sonar/server/platform/db/migration/version/v102/RenameComponentUuidInSnapshotsTest/schema.sql b/server/sonar-db-migration/src/test/resources/org/sonar/server/platform/db/migration/version/v102/RenameComponentUuidInSnapshotsTest/schema.sql new file mode 100644 index 00000000000..20c3bcce1ef --- /dev/null +++ b/server/sonar-db-migration/src/test/resources/org/sonar/server/platform/db/migration/version/v102/RenameComponentUuidInSnapshotsTest/schema.sql @@ -0,0 +1,16 @@ +CREATE TABLE "SNAPSHOTS"( + "UUID" CHARACTER VARYING(50) NOT NULL, + "COMPONENT_UUID" CHARACTER VARYING(50) NOT NULL, + "STATUS" CHARACTER VARYING(4) DEFAULT 'U' NOT NULL, + "ISLAST" BOOLEAN DEFAULT FALSE NOT NULL, + "VERSION" CHARACTER VARYING(500), + "PURGE_STATUS" INTEGER, + "BUILD_STRING" CHARACTER VARYING(100), + "REVISION" CHARACTER VARYING(100), + "BUILD_DATE" BIGINT, + "PERIOD1_MODE" CHARACTER VARYING(100), + "PERIOD1_PARAM" CHARACTER VARYING(100), + "PERIOD1_DATE" BIGINT, + "CREATED_AT" BIGINT +); +ALTER TABLE "SNAPSHOTS" ADD CONSTRAINT "PK_SNAPSHOTS" PRIMARY KEY("UUID"); \ No newline at end of file diff --git a/server/sonar-server-common/src/it/java/org/sonar/server/measure/index/ProjectMeasuresIndexerIT.java b/server/sonar-server-common/src/it/java/org/sonar/server/measure/index/ProjectMeasuresIndexerIT.java index 1eb7f3d6401..e39fd1d0c78 100644 --- a/server/sonar-server-common/src/it/java/org/sonar/server/measure/index/ProjectMeasuresIndexerIT.java +++ b/server/sonar-server-common/src/it/java/org/sonar/server/measure/index/ProjectMeasuresIndexerIT.java @@ -314,7 +314,7 @@ public class ProjectMeasuresIndexerIT { private void assertThatIndexContainsOnly(SnapshotDto... expectedProjects) { assertThat(es.getIds(TYPE_PROJECT_MEASURES)).containsExactlyInAnyOrder( - Arrays.stream(expectedProjects).map(SnapshotDto::getComponentUuid).toArray(String[]::new)); + Arrays.stream(expectedProjects).map(SnapshotDto::getRootComponentUuid).toArray(String[]::new)); } private void assertThatIndexContainsOnly(ComponentDto... expectedProjects) { @@ -328,7 +328,7 @@ public class ProjectMeasuresIndexerIT { } private void assertThatQualifierIs(String qualifier, SnapshotDto... expectedComponents) { - String[] expectedComponentUuids = Arrays.stream(expectedComponents).map(SnapshotDto::getComponentUuid).toArray(String[]::new); + String[] expectedComponentUuids = Arrays.stream(expectedComponents).map(SnapshotDto::getRootComponentUuid).toArray(String[]::new); assertThatQualifierIs(qualifier, expectedComponentUuids); } diff --git a/server/sonar-webserver-core/src/main/java/org/sonar/server/issue/index/AsyncIssueIndexingImpl.java b/server/sonar-webserver-core/src/main/java/org/sonar/server/issue/index/AsyncIssueIndexingImpl.java index 6d68b9c1e9b..4338423164a 100644 --- a/server/sonar-webserver-core/src/main/java/org/sonar/server/issue/index/AsyncIssueIndexingImpl.java +++ b/server/sonar-webserver-core/src/main/java/org/sonar/server/issue/index/AsyncIssueIndexingImpl.java @@ -121,7 +121,7 @@ public class AsyncIssueIndexingImpl implements AsyncIssueIndexing { private void sortProjectUuids(DbSession dbSession, List projectUuids) { Map snapshotByProjectUuid = dbClient.snapshotDao() .selectLastAnalysesByRootComponentUuids(dbSession, projectUuids).stream() - .collect(Collectors.toMap(SnapshotDto::getComponentUuid, Function.identity())); + .collect(Collectors.toMap(SnapshotDto::getRootComponentUuid, Function.identity())); projectUuids.sort(compareBySnapshot(snapshotByProjectUuid)); } diff --git a/server/sonar-webserver-core/src/main/java/org/sonar/server/project/ProjectQGChangeEventListener.java b/server/sonar-webserver-core/src/main/java/org/sonar/server/project/ProjectQGChangeEventListener.java index b289feebd4e..134571c861b 100644 --- a/server/sonar-webserver-core/src/main/java/org/sonar/server/project/ProjectQGChangeEventListener.java +++ b/server/sonar-webserver-core/src/main/java/org/sonar/server/project/ProjectQGChangeEventListener.java @@ -63,7 +63,7 @@ public class ProjectQGChangeEventListener implements QGChangeEventListener { private void addQualityGateEventToProject(QGChangeEvent qualityGateEvent, Metric.Level currentStatus) { try (DbSession dbSession = dbClient.openSession(false)) { - String componentUuid = qualityGateEvent.getAnalysis().getComponentUuid(); + String componentUuid = qualityGateEvent.getAnalysis().getRootComponentUuid(); SnapshotDto liveMeasureSnapshotDto = createLiveMeasureSnapshotDto(qualityGateEvent.getAnalysis().getProjectVersion(), componentUuid); dbClient.snapshotDao().insert(dbSession, liveMeasureSnapshotDto); @@ -96,7 +96,7 @@ public class ProjectQGChangeEventListener implements QGChangeEventListener { dto.setProjectVersion(projectVersion); dto.setLast(false); dto.setStatus(SnapshotDto.STATUS_LIVE_MEASURE_COMPUTED); - dto.setComponentUuid(componentUuid); + dto.setRootComponentUuid(componentUuid); return dto; } diff --git a/server/sonar-webserver-core/src/main/java/org/sonar/server/telemetry/TelemetryDataLoaderImpl.java b/server/sonar-webserver-core/src/main/java/org/sonar/server/telemetry/TelemetryDataLoaderImpl.java index ab1235f6aa3..21c097c3c3c 100644 --- a/server/sonar-webserver-core/src/main/java/org/sonar/server/telemetry/TelemetryDataLoaderImpl.java +++ b/server/sonar-webserver-core/src/main/java/org/sonar/server/telemetry/TelemetryDataLoaderImpl.java @@ -318,7 +318,7 @@ public class TelemetryDataLoaderImpl implements TelemetryDataLoader { List branchUuids = branchesWithLargestNcloc.stream().map(ProjectLocDistributionDto::branchUuid).toList(); Map latestSnapshotMap = dbClient.snapshotDao().selectLastAnalysesByRootComponentUuids(dbSession, branchUuids) .stream() - .collect(toMap(SnapshotDto::getComponentUuid, SnapshotDto::getBuildDate)); + .collect(toMap(SnapshotDto::getRootComponentUuid, SnapshotDto::getBuildDate)); data.setProjects(buildProjectsList(branchesWithLargestNcloc, latestSnapshotMap)); } diff --git a/server/sonar-webserver-core/src/test/java/org/sonar/server/issue/index/AsyncIssueIndexingImplTest.java b/server/sonar-webserver-core/src/test/java/org/sonar/server/issue/index/AsyncIssueIndexingImplTest.java index 73e11b8c33e..fca9cbc6ae2 100644 --- a/server/sonar-webserver-core/src/test/java/org/sonar/server/issue/index/AsyncIssueIndexingImplTest.java +++ b/server/sonar-webserver-core/src/test/java/org/sonar/server/issue/index/AsyncIssueIndexingImplTest.java @@ -337,7 +337,7 @@ public class AsyncIssueIndexingImplTest { private SnapshotDto insertSnapshot(String analysisUuid, String projectUuid, long createdAt) { SnapshotDto snapshot = new SnapshotDto() .setUuid(analysisUuid) - .setComponentUuid(projectUuid) + .setRootComponentUuid(projectUuid) .setStatus(STATUS_PROCESSED) .setCreatedAt(createdAt) .setLast(true); diff --git a/server/sonar-webserver-es/src/main/java/org/sonar/server/issue/index/IssueQueryFactory.java b/server/sonar-webserver-es/src/main/java/org/sonar/server/issue/index/IssueQueryFactory.java index 63d5679c91c..1047ca022c6 100644 --- a/server/sonar-webserver-es/src/main/java/org/sonar/server/issue/index/IssueQueryFactory.java +++ b/server/sonar-webserver-es/src/main/java/org/sonar/server/issue/index/IssueQueryFactory.java @@ -392,13 +392,13 @@ public class IssueQueryFactory { Set newCodeReferenceByProjects = snapshots .stream() .filter(s -> isLastAnalysisFromReAnalyzedReferenceBranch(dbSession, s)) - .map(SnapshotDto::getComponentUuid) + .map(SnapshotDto::getRootComponentUuid) .collect(toSet()); Map leakByProjects = snapshots .stream() .filter(s -> s.getPeriodDate() != null && !isLastAnalysisFromReAnalyzedReferenceBranch(dbSession, s)) - .collect(uniqueIndex(SnapshotDto::getComponentUuid, s -> new PeriodStart(longToDate(s.getPeriodDate()), false))); + .collect(uniqueIndex(SnapshotDto::getRootComponentUuid, s -> new PeriodStart(longToDate(s.getPeriodDate()), false))); builder.createdAfterByProjectUuids(leakByProjects); builder.newCodeOnReferenceByProjectUuids(newCodeReferenceByProjects); @@ -406,7 +406,7 @@ public class IssueQueryFactory { private boolean isLastAnalysisFromReAnalyzedReferenceBranch(DbSession dbSession, SnapshotDto snapshot) { return isLastAnalysisUsingReferenceBranch(snapshot) && - isLastAnalysisFromSonarQube94Onwards(dbSession, snapshot.getComponentUuid()); + isLastAnalysisFromSonarQube94Onwards(dbSession, snapshot.getRootComponentUuid()); } private static void addDirectories(IssueQuery.Builder builder, List directories) { diff --git a/server/sonar-webserver-webapi/src/it/java/org/sonar/server/projectanalysis/ws/CreateEventActionIT.java b/server/sonar-webserver-webapi/src/it/java/org/sonar/server/projectanalysis/ws/CreateEventActionIT.java index 2dafb7161cd..f71fbdf96ce 100644 --- a/server/sonar-webserver-webapi/src/it/java/org/sonar/server/projectanalysis/ws/CreateEventActionIT.java +++ b/server/sonar-webserver-webapi/src/it/java/org/sonar/server/projectanalysis/ws/CreateEventActionIT.java @@ -106,14 +106,14 @@ public class CreateEventActionIT { CreateEventResponse result = call(VERSION.name(), "5.6.3", analysis.getUuid()); - List dbEvents = dbClient.eventDao().selectByComponentUuid(dbSession, analysis.getComponentUuid()); + List dbEvents = dbClient.eventDao().selectByComponentUuid(dbSession, analysis.getRootComponentUuid()); assertThat(dbEvents).hasSize(1); EventDto dbEvent = dbEvents.get(0); assertThat(dbEvent.getName()).isEqualTo("5.6.3"); assertThat(dbEvent.getCategory()).isEqualTo(VERSION.getLabel()); assertThat(dbEvent.getDescription()).isNull(); assertThat(dbEvent.getAnalysisUuid()).isEqualTo(analysis.getUuid()); - assertThat(dbEvent.getComponentUuid()).isEqualTo(analysis.getComponentUuid()); + assertThat(dbEvent.getComponentUuid()).isEqualTo(analysis.getRootComponentUuid()); assertThat(dbEvent.getUuid()).isEqualTo(result.getEvent().getKey()); assertThat(dbEvent.getCreatedAt()).isEqualTo(123_456_789L); assertThat(dbEvent.getDate()).isEqualTo(analysis.getCreatedAt()); @@ -130,14 +130,14 @@ public class CreateEventActionIT { CreateEventResponse result = call(VERSION.name(), "5.6.3", analysis.getUuid()); - List dbEvents = dbClient.eventDao().selectByComponentUuid(dbSession, analysis.getComponentUuid()); + List dbEvents = dbClient.eventDao().selectByComponentUuid(dbSession, analysis.getRootComponentUuid()); assertThat(dbEvents).hasSize(1); EventDto dbEvent = dbEvents.get(0); assertThat(dbEvent.getName()).isEqualTo("5.6.3"); assertThat(dbEvent.getCategory()).isEqualTo(VERSION.getLabel()); assertThat(dbEvent.getDescription()).isNull(); assertThat(dbEvent.getAnalysisUuid()).isEqualTo(analysis.getUuid()); - assertThat(dbEvent.getComponentUuid()).isEqualTo(analysis.getComponentUuid()); + assertThat(dbEvent.getComponentUuid()).isEqualTo(analysis.getRootComponentUuid()); assertThat(dbEvent.getUuid()).isEqualTo(result.getEvent().getKey()); assertThat(dbEvent.getCreatedAt()).isEqualTo(123_456_789L); assertThat(dbEvent.getDate()).isEqualTo(analysis.getCreatedAt()); diff --git a/server/sonar-webserver-webapi/src/it/java/org/sonar/server/source/ws/LinesActionIT.java b/server/sonar-webserver-webapi/src/it/java/org/sonar/server/source/ws/LinesActionIT.java index 1f6edb4d2f7..e49658c97cf 100644 --- a/server/sonar-webserver-webapi/src/it/java/org/sonar/server/source/ws/LinesActionIT.java +++ b/server/sonar-webserver-webapi/src/it/java/org/sonar/server/source/ws/LinesActionIT.java @@ -425,7 +425,7 @@ public class LinesActionIT { dto.setUuid("uuid"); dto.setLast(true); dto.setPeriodDate(date); - dto.setComponentUuid(componentDto.uuid()); + dto.setRootComponentUuid(componentDto.uuid()); snapshotDao.insert(db.getSession(), dto); } } diff --git a/server/sonar-webserver-webapi/src/main/java/org/sonar/server/branch/ws/ListAction.java b/server/sonar-webserver-webapi/src/main/java/org/sonar/server/branch/ws/ListAction.java index d6f5216f48b..df525437848 100644 --- a/server/sonar-webserver-webapi/src/main/java/org/sonar/server/branch/ws/ListAction.java +++ b/server/sonar-webserver-webapi/src/main/java/org/sonar/server/branch/ws/ListAction.java @@ -97,7 +97,7 @@ public class ListAction implements BranchWsAction { .collect(uniqueIndex(LiveMeasureDto::getComponentUuid)); Map analysisDateByBranchUuid = dbClient.snapshotDao() .selectLastAnalysesByRootComponentUuids(dbSession, branchUuids).stream() - .collect(uniqueIndex(SnapshotDto::getComponentUuid, s -> formatDateTime(s.getCreatedAt()))); + .collect(uniqueIndex(SnapshotDto::getRootComponentUuid, s -> formatDateTime(s.getCreatedAt()))); ProjectBranches.ListWsResponse.Builder protobufResponse = ProjectBranches.ListWsResponse.newBuilder(); branches.forEach(b -> addBranch(protobufResponse, b, qualityGateMeasuresByComponentUuids.get(b.getUuid()), diff --git a/server/sonar-webserver-webapi/src/main/java/org/sonar/server/component/ws/SearchProjectsAction.java b/server/sonar-webserver-webapi/src/main/java/org/sonar/server/component/ws/SearchProjectsAction.java index be7713895db..828c4d17cad 100644 --- a/server/sonar-webserver-webapi/src/main/java/org/sonar/server/component/ws/SearchProjectsAction.java +++ b/server/sonar-webserver-webapi/src/main/java/org/sonar/server/component/ws/SearchProjectsAction.java @@ -255,7 +255,7 @@ public class SearchProjectsAction implements ComponentsWsAction { List snapshots = getSnapshots(dbSession, request, mainBranchByUuid.keySet()); Map analysisByProjectUuid = snapshots.stream() - .collect(Collectors.toMap(s -> mainBranchByUuid.get(s.getComponentUuid()).getProjectUuid(), s -> s)); + .collect(Collectors.toMap(s -> mainBranchByUuid.get(s.getRootComponentUuid()).getProjectUuid(), s -> s)); Map applicationsBranchLeakPeriod = getApplicationsLeakPeriod(dbSession, request, qualifiersBasedOnEdition, mainBranchByUuid.keySet()); Map applicationsLeakPeriod = applicationsBranchLeakPeriod.entrySet() .stream() diff --git a/server/sonar-webserver-webapi/src/main/java/org/sonar/server/developers/ws/SearchEventsAction.java b/server/sonar-webserver-webapi/src/main/java/org/sonar/server/developers/ws/SearchEventsAction.java index 598c7616760..78c359618a2 100644 --- a/server/sonar-webserver-webapi/src/main/java/org/sonar/server/developers/ws/SearchEventsAction.java +++ b/server/sonar-webserver-webapi/src/main/java/org/sonar/server/developers/ws/SearchEventsAction.java @@ -141,7 +141,7 @@ public class SearchEventsAction implements DevelopersWsAction { return Stream.empty(); } - List branchUuids = analyses.stream().map(SnapshotDto::getComponentUuid).collect(toList()); + List branchUuids = analyses.stream().map(SnapshotDto::getRootComponentUuid).collect(toList()); Map branchesByUuids = dbClient.branchDao().selectByUuids(dbSession, branchUuids).stream().collect(uniqueIndex(BranchDto::getUuid)); return Stream.concat( diff --git a/server/sonar-webserver-webapi/src/main/java/org/sonar/server/hotspot/ws/SearchAction.java b/server/sonar-webserver-webapi/src/main/java/org/sonar/server/hotspot/ws/SearchAction.java index d60e1e294a6..bda19cfa408 100644 --- a/server/sonar-webserver-webapi/src/main/java/org/sonar/server/hotspot/ws/SearchAction.java +++ b/server/sonar-webserver-webapi/src/main/java/org/sonar/server/hotspot/ws/SearchAction.java @@ -503,13 +503,13 @@ public class SearchAction implements HotspotsWsAction { Set newCodeReferenceByProjects = snapshots .stream() .filter(s -> !isNullOrEmpty(s.getPeriodMode()) && s.getPeriodMode().equals(REFERENCE_BRANCH.name())) - .map(SnapshotDto::getComponentUuid) + .map(SnapshotDto::getRootComponentUuid) .collect(toSet()); Map leakByProjects = snapshots .stream() .filter(s -> isNullOrEmpty(s.getPeriodMode()) || !s.getPeriodMode().equals(REFERENCE_BRANCH.name())) - .collect(uniqueIndex(SnapshotDto::getComponentUuid, s -> new IssueQuery.PeriodStart(longToDate(s.getPeriodDate() == null ? now : s.getPeriodDate()), false))); + .collect(uniqueIndex(SnapshotDto::getRootComponentUuid, s -> new IssueQuery.PeriodStart(longToDate(s.getPeriodDate() == null ? now : s.getPeriodDate()), false))); builder.createdAfterByProjectUuids(leakByProjects); builder.newCodeOnReferenceByProjectUuids(newCodeReferenceByProjects); diff --git a/server/sonar-webserver-webapi/src/main/java/org/sonar/server/measure/ws/SearchHistoryAction.java b/server/sonar-webserver-webapi/src/main/java/org/sonar/server/measure/ws/SearchHistoryAction.java index 09bedb212df..c911ffdd1c4 100644 --- a/server/sonar-webserver-webapi/src/main/java/org/sonar/server/measure/ws/SearchHistoryAction.java +++ b/server/sonar-webserver-webapi/src/main/java/org/sonar/server/measure/ws/SearchHistoryAction.java @@ -193,7 +193,7 @@ public class SearchHistoryAction implements MeasuresWsAction { private List searchAnalyses(DbSession dbSession, SearchHistoryRequest request, ComponentDto component) { SnapshotQuery dbQuery = new SnapshotQuery() - .setComponentUuid(component.branchUuid()) + .setRootComponentUuid(component.branchUuid()) .setStatus(STATUS_PROCESSED) .setSort(SORT_FIELD.BY_DATE, SORT_ORDER.ASC); ofNullable(request.getFrom()).ifPresent(from -> dbQuery.setCreatedAfter(parseStartingDateOrDateTime(from).getTime())); diff --git a/server/sonar-webserver-webapi/src/main/java/org/sonar/server/newcodeperiod/ws/SetAction.java b/server/sonar-webserver-webapi/src/main/java/org/sonar/server/newcodeperiod/ws/SetAction.java index 9e286981fb2..eb2d7f2eb41 100644 --- a/server/sonar-webserver-webapi/src/main/java/org/sonar/server/newcodeperiod/ws/SetAction.java +++ b/server/sonar-webserver-webapi/src/main/java/org/sonar/server/newcodeperiod/ws/SetAction.java @@ -272,7 +272,7 @@ public class SetAction implements NewCodePeriodsWsAction { } private void checkAnalysis(DbSession dbSession, ProjectDto project, BranchDto branch, SnapshotDto analysis) { - BranchDto analysisBranch = dbClient.branchDao().selectByUuid(dbSession, analysis.getComponentUuid()).orElse(null); + BranchDto analysisBranch = dbClient.branchDao().selectByUuid(dbSession, analysis.getRootComponentUuid()).orElse(null); boolean analysisMatchesProjectBranch = analysisBranch != null && analysisBranch.getUuid().equals(branch.getUuid()); checkArgument(analysisMatchesProjectBranch, diff --git a/server/sonar-webserver-webapi/src/main/java/org/sonar/server/project/ws/SearchAction.java b/server/sonar-webserver-webapi/src/main/java/org/sonar/server/project/ws/SearchAction.java index b919b3ae41d..06bd4e41cf4 100644 --- a/server/sonar-webserver-webapi/src/main/java/org/sonar/server/project/ws/SearchAction.java +++ b/server/sonar-webserver-webapi/src/main/java/org/sonar/server/project/ws/SearchAction.java @@ -163,7 +163,7 @@ public class SearchAction implements ProjectsWsAction { .collect(Collectors.toMap(ProjectLastAnalysisDateDto::getProjectUuid, ProjectLastAnalysisDateDto::getDate)); Map snapshotsByComponentUuid = dbClient.snapshotDao() .selectLastAnalysesByRootComponentUuids(dbSession, componentUuids).stream() - .collect(MoreCollectors.uniqueIndex(SnapshotDto::getComponentUuid, identity())); + .collect(MoreCollectors.uniqueIndex(SnapshotDto::getRootComponentUuid, identity())); return buildResponse(components, snapshotsByComponentUuid, lastAnalysisDateByComponentUuid, paging); } diff --git a/server/sonar-webserver-webapi/src/main/java/org/sonar/server/project/ws/SearchMyProjectsData.java b/server/sonar-webserver-webapi/src/main/java/org/sonar/server/project/ws/SearchMyProjectsData.java index cc24753be4f..3cc20fc91b8 100644 --- a/server/sonar-webserver-webapi/src/main/java/org/sonar/server/project/ws/SearchMyProjectsData.java +++ b/server/sonar-webserver-webapi/src/main/java/org/sonar/server/project/ws/SearchMyProjectsData.java @@ -50,7 +50,7 @@ class SearchMyProjectsData { this.projects = copyOf(builder.projects); this.branchUuidByProjectUuids = buildBranchUuidByProjectUuidMap(builder.branches); this.projectLinksByProjectUuid = buildProjectLinks(builder.projectLinks); - this.snapshotsByComponentUuid =builder.snapshots.stream().collect(uniqueIndex(SnapshotDto::getComponentUuid, identity())); + this.snapshotsByComponentUuid =builder.snapshots.stream().collect(uniqueIndex(SnapshotDto::getRootComponentUuid, identity())); this.qualityGateStatuses = buildQualityGateStatuses(builder.qualityGates); this.totalNbOfProject = builder.totalNbOfProjects; } diff --git a/server/sonar-webserver-webapi/src/main/java/org/sonar/server/projectanalysis/ws/CreateEventAction.java b/server/sonar-webserver-webapi/src/main/java/org/sonar/server/projectanalysis/ws/CreateEventAction.java index c2c945095ac..7edf9a2dcf3 100644 --- a/server/sonar-webserver-webapi/src/main/java/org/sonar/server/projectanalysis/ws/CreateEventAction.java +++ b/server/sonar-webserver-webapi/src/main/java/org/sonar/server/projectanalysis/ws/CreateEventAction.java @@ -134,7 +134,7 @@ public class CreateEventAction implements ProjectAnalysesWsAction { } private ProjectDto getProjectOrApplication(DbSession dbSession, SnapshotDto analysis) { - return dbClient.branchDao().selectByUuid(dbSession, analysis.getComponentUuid()) + return dbClient.branchDao().selectByUuid(dbSession, analysis.getRootComponentUuid()) .flatMap(branch -> dbClient.projectDao().selectByUuid(dbSession, branch.getProjectUuid())) .orElseThrow(() -> new IllegalStateException(String.format("Project of analysis '%s' not found", analysis.getUuid()))); } @@ -157,7 +157,7 @@ public class CreateEventAction implements ProjectAnalysesWsAction { return new EventDto() .setUuid(uuidFactory.create()) .setAnalysisUuid(analysis.getUuid()) - .setComponentUuid(analysis.getComponentUuid()) + .setComponentUuid(analysis.getRootComponentUuid()) .setCategory(request.getCategory().getLabel()) .setName(request.getName()) .setCreatedAt(system.now()) diff --git a/server/sonar-webserver-webapi/src/main/java/org/sonar/server/projectanalysis/ws/DeleteAction.java b/server/sonar-webserver-webapi/src/main/java/org/sonar/server/projectanalysis/ws/DeleteAction.java index 7617d5acb80..daab6f70187 100644 --- a/server/sonar-webserver-webapi/src/main/java/org/sonar/server/projectanalysis/ws/DeleteAction.java +++ b/server/sonar-webserver-webapi/src/main/java/org/sonar/server/projectanalysis/ws/DeleteAction.java @@ -73,7 +73,7 @@ public class DeleteAction implements ProjectAnalysesWsAction { if (STATUS_UNPROCESSED.equals(analysis.getStatus())) { throw analysisNotFoundException(analysisUuid); } - userSession.checkComponentUuidPermission(UserRole.ADMIN, analysis.getComponentUuid()); + userSession.checkComponentUuidPermission(UserRole.ADMIN, analysis.getRootComponentUuid()); checkArgument(!analysis.getLast(), "The last analysis '%s' cannot be deleted", analysisUuid); checkNotUsedInNewCodePeriod(dbSession, analysis); diff --git a/server/sonar-webserver-webapi/src/main/java/org/sonar/server/projectanalysis/ws/SearchAction.java b/server/sonar-webserver-webapi/src/main/java/org/sonar/server/projectanalysis/ws/SearchAction.java index 3caa2195cb6..4ab1c4a4b4b 100644 --- a/server/sonar-webserver-webapi/src/main/java/org/sonar/server/projectanalysis/ws/SearchAction.java +++ b/server/sonar-webserver-webapi/src/main/java/org/sonar/server/projectanalysis/ws/SearchAction.java @@ -170,7 +170,7 @@ public class SearchAction implements ProjectAnalysesWsAction { private void addAnalyses(SearchData.Builder data) { SnapshotQuery dbQuery = new SnapshotQuery() - .setComponentUuid(data.getProject().uuid()) + .setRootComponentUuid(data.getProject().uuid()) .setStatuses(data.getRequest().getStatuses()) .setSort(BY_DATE, DESC); ofNullable(data.getRequest().getFrom()).ifPresent(from -> dbQuery.setCreatedAfter(parseStartingDateOrDateTime(from).getTime())); diff --git a/server/sonar-webserver-webapi/src/main/java/org/sonar/server/projectdump/ws/StatusAction.java b/server/sonar-webserver-webapi/src/main/java/org/sonar/server/projectdump/ws/StatusAction.java index c8ccf14fff0..33bd6fd9dce 100644 --- a/server/sonar-webserver-webapi/src/main/java/org/sonar/server/projectdump/ws/StatusAction.java +++ b/server/sonar-webserver-webapi/src/main/java/org/sonar/server/projectdump/ws/StatusAction.java @@ -119,7 +119,7 @@ public class StatusAction implements ProjectDumpAction { " count(*), islast" + " from snapshots" + " where" + - " component_uuid = ?" + + " root_component_uuid = ?" + " group by" + " islast"; stmt = dbClient.getMyBatis().newScrollingSelectStatement(dbSession, sql); diff --git a/server/sonar-webserver-webapi/src/main/java/org/sonar/server/qualitygate/ws/ProjectStatusAction.java b/server/sonar-webserver-webapi/src/main/java/org/sonar/server/qualitygate/ws/ProjectStatusAction.java index fe7f1b43c1e..ef2496d5187 100644 --- a/server/sonar-webserver-webapi/src/main/java/org/sonar/server/qualitygate/ws/ProjectStatusAction.java +++ b/server/sonar-webserver-webapi/src/main/java/org/sonar/server/qualitygate/ws/ProjectStatusAction.java @@ -191,7 +191,7 @@ public class ProjectStatusAction implements QualityGatesWsAction { private ProjectAndSnapshot getSnapshotThenProject(DbSession dbSession, String analysisUuid) { SnapshotDto snapshotDto = getSnapshot(dbSession, analysisUuid); - BranchDto branchDto = dbClient.branchDao().selectByUuid(dbSession, snapshotDto.getComponentUuid()) + BranchDto branchDto = dbClient.branchDao().selectByUuid(dbSession, snapshotDto.getRootComponentUuid()) .orElseThrow(() -> new IllegalStateException(String.format("Branch '%s' not found", snapshotDto.getUuid()))); ProjectDto projectDto = dbClient.projectDao().selectByUuid(dbSession, branchDto.getProjectUuid()) .orElseThrow(() -> new IllegalStateException(String.format("Project '%s' not found", branchDto.getProjectUuid()))); -- 2.39.5