aboutsummaryrefslogtreecommitdiffstats
path: root/sonar-db
diff options
context:
space:
mode:
authorSébastien Lesaint <sebastien.lesaint@sonarsource.com>2016-07-08 17:31:24 +0200
committerSébastien Lesaint <sebastien.lesaint@sonarsource.com>2016-07-11 19:07:36 +0200
commitfb0566655d40dc4cd95852acc039896e1dc189fa (patch)
tree77f5553518d7a271311f9119faa3dd0c33f5ab3a /sonar-db
parent1d9115c677cb97dcb3433916b556d3f63da6de33 (diff)
downloadsonarqube-fb0566655d40dc4cd95852acc039896e1dc189fa.tar.gz
sonarqube-fb0566655d40dc4cd95852acc039896e1dc189fa.zip
SONAR-7786 compress DUPLICATIONS_INDEX migrations
Diffstat (limited to 'sonar-db')
-rw-r--r--sonar-db/src/main/java/org/sonar/db/version/MigrationStepModule.java26
-rw-r--r--sonar-db/src/main/java/org/sonar/db/version/v60/AddAnalysisUuidColumnToDuplicationsIndex.java45
-rw-r--r--sonar-db/src/main/java/org/sonar/db/version/v60/AddComponentUuidAndAnalysisUuidColumnToDuplicationsIndex.java (renamed from sonar-db/src/main/java/org/sonar/db/version/v60/AddComponentUuidColumnToDuplicationsIndex.java)5
-rw-r--r--sonar-db/src/main/java/org/sonar/db/version/v60/DeleteOrphanDuplicationsIndexRowsWithoutComponent.java45
-rw-r--r--sonar-db/src/main/java/org/sonar/db/version/v60/DeleteOrphanDuplicationsIndexRowsWithoutComponentOrAnalysis.java (renamed from sonar-db/src/main/java/org/sonar/db/version/v60/DeleteOrphanDuplicationsIndexRowsWithoutAnalysis.java)22
-rw-r--r--sonar-db/src/main/java/org/sonar/db/version/v60/MakeAnalysisUuidNotNullOnDuplicationsIndex.java45
-rw-r--r--sonar-db/src/main/java/org/sonar/db/version/v60/MakeComponentUuidAndAnalysisUuidNotNullOnDuplicationsIndex.java (renamed from sonar-db/src/main/java/org/sonar/db/version/v60/MakeComponentUuidNotNullOnDuplicationsIndex.java)5
-rw-r--r--sonar-db/src/main/java/org/sonar/db/version/v60/PopulateAnalysisUuidOfDuplicationsIndex.java56
-rw-r--r--sonar-db/src/main/java/org/sonar/db/version/v60/PopulateComponentUuidAndAnalysisUuidOfDuplicationsIndex.java (renamed from sonar-db/src/main/java/org/sonar/db/version/v60/PopulateComponentUuidOfDuplicationsIndex.java)33
-rw-r--r--sonar-db/src/test/java/org/sonar/db/version/MigrationStepModuleTest.java2
-rw-r--r--sonar-db/src/test/java/org/sonar/db/version/v60/AddComponentUuidAndAnalysisUuidColumnToDuplicationsIndexTest.java (renamed from sonar-db/src/test/java/org/sonar/db/version/v60/AddComponentUuidColumnToDuplicationsIndexTest.java)11
-rw-r--r--sonar-db/src/test/java/org/sonar/db/version/v60/MakeComponentUuidAndAnalysisUuidNotNullOnDuplicationsIndexTest.java (renamed from sonar-db/src/test/java/org/sonar/db/version/v60/MakeComponentUuidNotNullOnDuplicationsIndexTest.java)32
-rw-r--r--sonar-db/src/test/java/org/sonar/db/version/v60/PopulateComponentUuidAndAnalysisUuidOfDuplicationsIndexTest.java (renamed from sonar-db/src/test/java/org/sonar/db/version/v60/PopulateComponentUuidOfDuplicationsIndexTest.java)64
-rw-r--r--sonar-db/src/test/resources/org/sonar/db/version/v60/AddComponentUuidAndAnalysisUuidColumnToDuplicationsIndexTest/duplications_index_5.6.sql (renamed from sonar-db/src/test/resources/org/sonar/db/version/v60/AddComponentUuidColumnToDuplicationsIndexTest/duplications_index_5.6.sql)0
-rw-r--r--sonar-db/src/test/resources/org/sonar/db/version/v60/MakeComponentUuidAndAnalysisUuidNotNullOnDuplicationsIndexTest/in_progress_duplications_index.sql (renamed from sonar-db/src/test/resources/org/sonar/db/version/v60/MakeComponentUuidNotNullOnDuplicationsIndexTest/in_progress_duplications_index.sql)1
-rw-r--r--sonar-db/src/test/resources/org/sonar/db/version/v60/PopulateComponentUuidAndAnalysisUuidOfDuplicationsIndexTest/in_progress_measures_with_snapshots.sql (renamed from sonar-db/src/test/resources/org/sonar/db/version/v60/PopulateComponentUuidOfDuplicationsIndexTest/in_progress_measures_with_snapshots.sql)2
16 files changed, 127 insertions, 267 deletions
diff --git a/sonar-db/src/main/java/org/sonar/db/version/MigrationStepModule.java b/sonar-db/src/main/java/org/sonar/db/version/MigrationStepModule.java
index 72d947d5e85..2c3be5b7f11 100644
--- a/sonar-db/src/main/java/org/sonar/db/version/MigrationStepModule.java
+++ b/sonar-db/src/main/java/org/sonar/db/version/MigrationStepModule.java
@@ -84,11 +84,10 @@ import org.sonar.db.version.v55.FeedRulesTypes;
import org.sonar.db.version.v56.FixLengthOfIssuesMessageOnOracle;
import org.sonar.db.version.v56.FixTypeOfRuleTypeOnMysql;
import org.sonar.db.version.v60.AddAnalysisUuidColumnToCeActivity;
-import org.sonar.db.version.v60.AddAnalysisUuidColumnToDuplicationsIndex;
import org.sonar.db.version.v60.AddAnalysisUuidColumnToEvents;
import org.sonar.db.version.v60.AddAnalysisUuidColumnToMeasures;
import org.sonar.db.version.v60.AddBColumnsToProjects;
-import org.sonar.db.version.v60.AddComponentUuidColumnToDuplicationsIndex;
+import org.sonar.db.version.v60.AddComponentUuidAndAnalysisUuidColumnToDuplicationsIndex;
import org.sonar.db.version.v60.AddComponentUuidColumnToMeasures;
import org.sonar.db.version.v60.AddComponentUuidColumnsToSnapshots;
import org.sonar.db.version.v60.AddLastUsedColumnToRulesProfiles;
@@ -105,8 +104,7 @@ import org.sonar.db.version.v60.CleanOrphanRowsInProjects;
import org.sonar.db.version.v60.CleanOrphanRowsInResourceIndex;
import org.sonar.db.version.v60.CleanOrphanRowsInSnapshots;
import org.sonar.db.version.v60.CleanUsurperRootComponents;
-import org.sonar.db.version.v60.DeleteOrphanDuplicationsIndexRowsWithoutAnalysis;
-import org.sonar.db.version.v60.DeleteOrphanDuplicationsIndexRowsWithoutComponent;
+import org.sonar.db.version.v60.DeleteOrphanDuplicationsIndexRowsWithoutComponentOrAnalysis;
import org.sonar.db.version.v60.DeleteOrphanMeasuresWithoutComponent;
import org.sonar.db.version.v60.DropIdColumnsFromProjects;
import org.sonar.db.version.v60.DropIdColumnsFromResourceIndex;
@@ -121,11 +119,10 @@ import org.sonar.db.version.v60.DropTreeColumnsFromSnapshots;
import org.sonar.db.version.v60.DropTreesOfSnapshots;
import org.sonar.db.version.v60.DropUnusedMeasuresColumns;
import org.sonar.db.version.v60.FixProjectUuidOfDeveloperProjects;
-import org.sonar.db.version.v60.MakeAnalysisUuidNotNullOnDuplicationsIndex;
import org.sonar.db.version.v60.MakeAnalysisUuidNotNullOnEvents;
import org.sonar.db.version.v60.MakeAnalysisUuidNotNullOnMeasures;
+import org.sonar.db.version.v60.MakeComponentUuidAndAnalysisUuidNotNullOnDuplicationsIndex;
import org.sonar.db.version.v60.MakeComponentUuidColumnsNotNullOnSnapshots;
-import org.sonar.db.version.v60.MakeComponentUuidNotNullOnDuplicationsIndex;
import org.sonar.db.version.v60.MakeComponentUuidNotNullOnMeasures;
import org.sonar.db.version.v60.MakeProfileKeyNotNullOnActivities;
import org.sonar.db.version.v60.MakeUuidColumnNotNullOnSnapshots;
@@ -133,11 +130,10 @@ import org.sonar.db.version.v60.MakeUuidColumnsNotNullOnProjects;
import org.sonar.db.version.v60.MakeUuidColumnsNotNullOnResourceIndex;
import org.sonar.db.version.v60.MakeUuidPathColumnNotNullOnProjects;
import org.sonar.db.version.v60.PopulateAnalysisUuidColumnOnCeActivity;
-import org.sonar.db.version.v60.PopulateAnalysisUuidOfDuplicationsIndex;
import org.sonar.db.version.v60.PopulateAnalysisUuidOnEvents;
import org.sonar.db.version.v60.PopulateAnalysisUuidOnMeasures;
+import org.sonar.db.version.v60.PopulateComponentUuidAndAnalysisUuidOfDuplicationsIndex;
import org.sonar.db.version.v60.PopulateComponentUuidColumnsOfSnapshots;
-import org.sonar.db.version.v60.PopulateComponentUuidOfDuplicationsIndex;
import org.sonar.db.version.v60.PopulateComponentUuidOfMeasures;
import org.sonar.db.version.v60.PopulateLastUsedColumnOfRulesProfiles;
import org.sonar.db.version.v60.PopulateProfileKeyOfActivities;
@@ -273,16 +269,10 @@ public class MigrationStepModule extends Module {
DropSnapshotIdColumnFromCeActivity.class,
// UUID columns of DUPLICATION_INDEX
- AddComponentUuidColumnToDuplicationsIndex.class,
- PopulateComponentUuidOfDuplicationsIndex.class,
- DeleteOrphanDuplicationsIndexRowsWithoutComponent.class,
- MakeComponentUuidNotNullOnDuplicationsIndex.class,
-
- // analysis_uuid in duplications_index
- AddAnalysisUuidColumnToDuplicationsIndex.class,
- PopulateAnalysisUuidOfDuplicationsIndex.class,
- DeleteOrphanDuplicationsIndexRowsWithoutAnalysis.class,
- MakeAnalysisUuidNotNullOnDuplicationsIndex.class,
+ AddComponentUuidAndAnalysisUuidColumnToDuplicationsIndex.class,
+ PopulateComponentUuidAndAnalysisUuidOfDuplicationsIndex.class,
+ DeleteOrphanDuplicationsIndexRowsWithoutComponentOrAnalysis.class,
+ MakeComponentUuidAndAnalysisUuidNotNullOnDuplicationsIndex.class,
DropSnapshotIdColumnsFromDuplicationsIndex.class,
// EVENTS.ANALYSIS_UUID
diff --git a/sonar-db/src/main/java/org/sonar/db/version/v60/AddAnalysisUuidColumnToDuplicationsIndex.java b/sonar-db/src/main/java/org/sonar/db/version/v60/AddAnalysisUuidColumnToDuplicationsIndex.java
deleted file mode 100644
index c4c47ef3f6b..00000000000
--- a/sonar-db/src/main/java/org/sonar/db/version/v60/AddAnalysisUuidColumnToDuplicationsIndex.java
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- * SonarQube
- * Copyright (C) 2009-2016 SonarSource SA
- * mailto:contact 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.db.version.v60;
-
-import java.sql.SQLException;
-import org.sonar.db.Database;
-import org.sonar.db.version.AddColumnsBuilder;
-import org.sonar.db.version.DdlChange;
-
-import static org.sonar.db.version.VarcharColumnDef.UUID_VARCHAR_SIZE;
-import static org.sonar.db.version.VarcharColumnDef.newVarcharColumnDefBuilder;
-
-public class AddAnalysisUuidColumnToDuplicationsIndex extends DdlChange {
-
- private static final String TABLE_DUPLICATIONS_INDEX = "duplications_index";
-
- public AddAnalysisUuidColumnToDuplicationsIndex(Database db) {
- super(db);
- }
-
- @Override
- public void execute(Context context) throws SQLException {
- context.execute(new AddColumnsBuilder(getDatabase().getDialect(), TABLE_DUPLICATIONS_INDEX)
- .addColumn(newVarcharColumnDefBuilder().setColumnName("analysis_uuid").setLimit(UUID_VARCHAR_SIZE).setIsNullable(true).build())
- .build());
- }
-
-}
diff --git a/sonar-db/src/main/java/org/sonar/db/version/v60/AddComponentUuidColumnToDuplicationsIndex.java b/sonar-db/src/main/java/org/sonar/db/version/v60/AddComponentUuidAndAnalysisUuidColumnToDuplicationsIndex.java
index 62c3b757881..f421c1222bd 100644
--- a/sonar-db/src/main/java/org/sonar/db/version/v60/AddComponentUuidColumnToDuplicationsIndex.java
+++ b/sonar-db/src/main/java/org/sonar/db/version/v60/AddComponentUuidAndAnalysisUuidColumnToDuplicationsIndex.java
@@ -27,11 +27,11 @@ import org.sonar.db.version.DdlChange;
import static org.sonar.db.version.VarcharColumnDef.UUID_VARCHAR_SIZE;
import static org.sonar.db.version.VarcharColumnDef.newVarcharColumnDefBuilder;
-public class AddComponentUuidColumnToDuplicationsIndex extends DdlChange {
+public class AddComponentUuidAndAnalysisUuidColumnToDuplicationsIndex extends DdlChange {
private static final String TABLE_PUBLICATIONS_INDEX = "duplications_index";
- public AddComponentUuidColumnToDuplicationsIndex(Database db) {
+ public AddComponentUuidAndAnalysisUuidColumnToDuplicationsIndex(Database db) {
super(db);
}
@@ -39,6 +39,7 @@ public class AddComponentUuidColumnToDuplicationsIndex extends DdlChange {
public void execute(Context context) throws SQLException {
context.execute(new AddColumnsBuilder(getDatabase().getDialect(), TABLE_PUBLICATIONS_INDEX)
.addColumn(newVarcharColumnDefBuilder().setColumnName("component_uuid").setLimit(UUID_VARCHAR_SIZE).setIsNullable(true).build())
+ .addColumn(newVarcharColumnDefBuilder().setColumnName("analysis_uuid").setLimit(UUID_VARCHAR_SIZE).setIsNullable(true).build())
.build());
}
diff --git a/sonar-db/src/main/java/org/sonar/db/version/v60/DeleteOrphanDuplicationsIndexRowsWithoutComponent.java b/sonar-db/src/main/java/org/sonar/db/version/v60/DeleteOrphanDuplicationsIndexRowsWithoutComponent.java
deleted file mode 100644
index b04cf1be58f..00000000000
--- a/sonar-db/src/main/java/org/sonar/db/version/v60/DeleteOrphanDuplicationsIndexRowsWithoutComponent.java
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- * SonarQube
- * Copyright (C) 2009-2016 SonarSource SA
- * mailto:contact 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.db.version.v60;
-
-import java.sql.SQLException;
-import org.sonar.db.Database;
-import org.sonar.db.version.BaseDataChange;
-import org.sonar.db.version.MassUpdate;
-
-public class DeleteOrphanDuplicationsIndexRowsWithoutComponent extends BaseDataChange {
-
- public DeleteOrphanDuplicationsIndexRowsWithoutComponent(Database db) {
- super(db);
- }
-
- @Override
- public void execute(Context context) throws SQLException {
- MassUpdate massUpdate = context.prepareMassUpdate();
- massUpdate.select("SELECT id from duplications_index where component_uuid is null");
- massUpdate.update("DELETE from duplications_index WHERE id=?");
- massUpdate.rowPluralName("resources_index entries");
- massUpdate.execute((row, update) -> {
- update.setLong(1, row.getLong(1));
- return true;
- });
- }
-
-}
diff --git a/sonar-db/src/main/java/org/sonar/db/version/v60/DeleteOrphanDuplicationsIndexRowsWithoutAnalysis.java b/sonar-db/src/main/java/org/sonar/db/version/v60/DeleteOrphanDuplicationsIndexRowsWithoutComponentOrAnalysis.java
index ae7858ce55b..93722082829 100644
--- a/sonar-db/src/main/java/org/sonar/db/version/v60/DeleteOrphanDuplicationsIndexRowsWithoutAnalysis.java
+++ b/sonar-db/src/main/java/org/sonar/db/version/v60/DeleteOrphanDuplicationsIndexRowsWithoutComponentOrAnalysis.java
@@ -24,18 +24,34 @@ import org.sonar.db.Database;
import org.sonar.db.version.BaseDataChange;
import org.sonar.db.version.MassUpdate;
-public class DeleteOrphanDuplicationsIndexRowsWithoutAnalysis extends BaseDataChange {
+public class DeleteOrphanDuplicationsIndexRowsWithoutComponentOrAnalysis extends BaseDataChange {
- public DeleteOrphanDuplicationsIndexRowsWithoutAnalysis(Database db) {
+ public DeleteOrphanDuplicationsIndexRowsWithoutComponentOrAnalysis(Database db) {
super(db);
}
@Override
public void execute(Context context) throws SQLException {
+ deleteRowsWithoutComponentUuid(context);
+ deleteRowsWithoutAnalysisUuid(context);
+ }
+
+ private static void deleteRowsWithoutComponentUuid(Context context) throws SQLException {
+ MassUpdate massUpdate = context.prepareMassUpdate();
+ massUpdate.select("SELECT id from duplications_index where component_uuid is null");
+ massUpdate.update("DELETE from duplications_index WHERE id=?");
+ massUpdate.rowPluralName("duplications index rows without component");
+ massUpdate.execute((row, update) -> {
+ update.setLong(1, row.getLong(1));
+ return true;
+ });
+ }
+
+ private static void deleteRowsWithoutAnalysisUuid(Context context) throws SQLException {
MassUpdate massUpdate = context.prepareMassUpdate();
massUpdate.select("SELECT distinct project_snapshot_id from duplications_index where analysis_uuid is null");
massUpdate.update("DELETE from duplications_index WHERE project_snapshot_id=?");
- massUpdate.rowPluralName("no analysis duplication index entries");
+ massUpdate.rowPluralName("duplications index rows without analysis");
massUpdate.execute((row, update) -> {
update.setLong(1, row.getLong(1));
return true;
diff --git a/sonar-db/src/main/java/org/sonar/db/version/v60/MakeAnalysisUuidNotNullOnDuplicationsIndex.java b/sonar-db/src/main/java/org/sonar/db/version/v60/MakeAnalysisUuidNotNullOnDuplicationsIndex.java
deleted file mode 100644
index 2de7e9615fb..00000000000
--- a/sonar-db/src/main/java/org/sonar/db/version/v60/MakeAnalysisUuidNotNullOnDuplicationsIndex.java
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- * SonarQube
- * Copyright (C) 2009-2016 SonarSource SA
- * mailto:contact 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.db.version.v60;
-
-import java.sql.SQLException;
-import org.sonar.db.Database;
-import org.sonar.db.version.AlterColumnsBuilder;
-import org.sonar.db.version.DdlChange;
-
-import static org.sonar.db.version.VarcharColumnDef.UUID_VARCHAR_SIZE;
-import static org.sonar.db.version.VarcharColumnDef.newVarcharColumnDefBuilder;
-
-public class MakeAnalysisUuidNotNullOnDuplicationsIndex extends DdlChange {
-
- private static final String TABLE_DUPLICATIONS_INDEX = "duplications_index";
-
- public MakeAnalysisUuidNotNullOnDuplicationsIndex(Database db) {
- super(db);
- }
-
- @Override
- public void execute(Context context) throws SQLException {
- context.execute(new AlterColumnsBuilder(getDatabase().getDialect(), TABLE_DUPLICATIONS_INDEX)
- .updateColumn(newVarcharColumnDefBuilder().setColumnName("analysis_uuid").setLimit(UUID_VARCHAR_SIZE).setIsNullable(false).build())
- .build());
- }
-
-}
diff --git a/sonar-db/src/main/java/org/sonar/db/version/v60/MakeComponentUuidNotNullOnDuplicationsIndex.java b/sonar-db/src/main/java/org/sonar/db/version/v60/MakeComponentUuidAndAnalysisUuidNotNullOnDuplicationsIndex.java
index 6198db90e84..8d486634406 100644
--- a/sonar-db/src/main/java/org/sonar/db/version/v60/MakeComponentUuidNotNullOnDuplicationsIndex.java
+++ b/sonar-db/src/main/java/org/sonar/db/version/v60/MakeComponentUuidAndAnalysisUuidNotNullOnDuplicationsIndex.java
@@ -27,11 +27,11 @@ import org.sonar.db.version.DdlChange;
import static org.sonar.db.version.VarcharColumnDef.UUID_VARCHAR_SIZE;
import static org.sonar.db.version.VarcharColumnDef.newVarcharColumnDefBuilder;
-public class MakeComponentUuidNotNullOnDuplicationsIndex extends DdlChange {
+public class MakeComponentUuidAndAnalysisUuidNotNullOnDuplicationsIndex extends DdlChange {
private static final String TABLE_DUPLICATIONS_INDEX = "duplications_index";
- public MakeComponentUuidNotNullOnDuplicationsIndex(Database db) {
+ public MakeComponentUuidAndAnalysisUuidNotNullOnDuplicationsIndex(Database db) {
super(db);
}
@@ -39,6 +39,7 @@ public class MakeComponentUuidNotNullOnDuplicationsIndex extends DdlChange {
public void execute(Context context) throws SQLException {
context.execute(new AlterColumnsBuilder(getDatabase().getDialect(), TABLE_DUPLICATIONS_INDEX)
.updateColumn(newVarcharColumnDefBuilder().setColumnName("component_uuid").setLimit(UUID_VARCHAR_SIZE).setIsNullable(false).build())
+ .updateColumn(newVarcharColumnDefBuilder().setColumnName("analysis_uuid").setLimit(UUID_VARCHAR_SIZE).setIsNullable(false).build())
.build());
}
diff --git a/sonar-db/src/main/java/org/sonar/db/version/v60/PopulateAnalysisUuidOfDuplicationsIndex.java b/sonar-db/src/main/java/org/sonar/db/version/v60/PopulateAnalysisUuidOfDuplicationsIndex.java
deleted file mode 100644
index e3df430ee9b..00000000000
--- a/sonar-db/src/main/java/org/sonar/db/version/v60/PopulateAnalysisUuidOfDuplicationsIndex.java
+++ /dev/null
@@ -1,56 +0,0 @@
-/*
- * SonarQube
- * Copyright (C) 2009-2016 SonarSource SA
- * mailto:contact 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.db.version.v60;
-
-import java.sql.SQLException;
-import org.sonar.db.Database;
-import org.sonar.db.version.BaseDataChange;
-import org.sonar.db.version.MassUpdate;
-import org.sonar.db.version.Select;
-import org.sonar.db.version.SqlStatement;
-
-public class PopulateAnalysisUuidOfDuplicationsIndex extends BaseDataChange {
-
- public PopulateAnalysisUuidOfDuplicationsIndex(Database db) {
- super(db);
- }
-
- @Override
- public void execute(Context context) throws SQLException {
- MassUpdate massUpdate = context.prepareMassUpdate();
- massUpdate.select("select distinct di.project_snapshot_id, s.uuid from duplications_index di" +
- " inner join snapshots s on s.id=di.project_snapshot_id" +
- " where di.analysis_uuid is null");
- massUpdate.update("UPDATE duplications_index SET analysis_uuid=? WHERE project_snapshot_id=? and analysis_uuid is null");
- massUpdate.rowPluralName("analysis uuid of duplications_index entries");
- massUpdate.execute(PopulateAnalysisUuidOfDuplicationsIndex::handle);
- }
-
- public static boolean handle(Select.Row row, SqlStatement update) throws SQLException {
- long projectSnapshotId = row.getLong(1);
- String snapshotUuid = row.getString(2);
-
- update.setString(1, snapshotUuid);
- update.setLong(2, projectSnapshotId);
-
- return true;
- }
-
-}
diff --git a/sonar-db/src/main/java/org/sonar/db/version/v60/PopulateComponentUuidOfDuplicationsIndex.java b/sonar-db/src/main/java/org/sonar/db/version/v60/PopulateComponentUuidAndAnalysisUuidOfDuplicationsIndex.java
index a5f433d52a7..dc26fdd1d26 100644
--- a/sonar-db/src/main/java/org/sonar/db/version/v60/PopulateComponentUuidOfDuplicationsIndex.java
+++ b/sonar-db/src/main/java/org/sonar/db/version/v60/PopulateComponentUuidAndAnalysisUuidOfDuplicationsIndex.java
@@ -26,24 +26,29 @@ import org.sonar.db.version.MassUpdate;
import org.sonar.db.version.Select;
import org.sonar.db.version.SqlStatement;
-public class PopulateComponentUuidOfDuplicationsIndex extends BaseDataChange {
+public class PopulateComponentUuidAndAnalysisUuidOfDuplicationsIndex extends BaseDataChange {
- public PopulateComponentUuidOfDuplicationsIndex(Database db) {
+ public PopulateComponentUuidAndAnalysisUuidOfDuplicationsIndex(Database db) {
super(db);
}
@Override
public void execute(Context context) throws SQLException {
+ populateComponentUuid(context);
+ populateAnalysisUuid(context);
+ }
+
+ private void populateComponentUuid(Context context) throws SQLException {
MassUpdate massUpdate = context.prepareMassUpdate();
massUpdate.select("select distinct di.snapshot_id, s.component_uuid from duplications_index di" +
" inner join snapshots s on s.id=di.snapshot_id" +
" where di.component_uuid is null");
massUpdate.update("UPDATE duplications_index SET component_uuid=? WHERE snapshot_id=? and component_uuid is null");
massUpdate.rowPluralName("component uuid of duplications_index entries");
- massUpdate.execute(PopulateComponentUuidOfDuplicationsIndex::handle);
+ massUpdate.execute(PopulateComponentUuidAndAnalysisUuidOfDuplicationsIndex::handleComponentUuid);
}
- public static boolean handle(Select.Row row, SqlStatement update) throws SQLException {
+ private static boolean handleComponentUuid(Select.Row row, SqlStatement update) throws SQLException {
long snapshotId = row.getLong(1);
String componentUuid = row.getString(2);
@@ -52,5 +57,25 @@ public class PopulateComponentUuidOfDuplicationsIndex extends BaseDataChange {
return true;
}
+
+ public void populateAnalysisUuid(Context context) throws SQLException {
+ MassUpdate massUpdate = context.prepareMassUpdate();
+ massUpdate.select("select distinct di.project_snapshot_id, s.uuid from duplications_index di" +
+ " inner join snapshots s on s.id=di.project_snapshot_id" +
+ " where di.analysis_uuid is null");
+ massUpdate.update("UPDATE duplications_index SET analysis_uuid=? WHERE project_snapshot_id=? and analysis_uuid is null");
+ massUpdate.rowPluralName("analysis uuid of duplications_index entries");
+ massUpdate.execute(PopulateComponentUuidAndAnalysisUuidOfDuplicationsIndex::handleAnalysisUuid);
+ }
+
+ private static boolean handleAnalysisUuid(Select.Row row, SqlStatement update) throws SQLException {
+ long projectSnapshotId = row.getLong(1);
+ String snapshotUuid = row.getString(2);
+
+ update.setString(1, snapshotUuid);
+ update.setLong(2, projectSnapshotId);
+
+ return true;
+ }
}
diff --git a/sonar-db/src/test/java/org/sonar/db/version/MigrationStepModuleTest.java b/sonar-db/src/test/java/org/sonar/db/version/MigrationStepModuleTest.java
index cd190a68543..b10eba51a6f 100644
--- a/sonar-db/src/test/java/org/sonar/db/version/MigrationStepModuleTest.java
+++ b/sonar-db/src/test/java/org/sonar/db/version/MigrationStepModuleTest.java
@@ -29,6 +29,6 @@ public class MigrationStepModuleTest {
public void verify_count_of_added_MigrationStep_types() {
ComponentContainer container = new ComponentContainer();
new MigrationStepModule().configure(container);
- assertThat(container.size()).isEqualTo(129);
+ assertThat(container.size()).isEqualTo(125);
}
}
diff --git a/sonar-db/src/test/java/org/sonar/db/version/v60/AddComponentUuidColumnToDuplicationsIndexTest.java b/sonar-db/src/test/java/org/sonar/db/version/v60/AddComponentUuidAndAnalysisUuidColumnToDuplicationsIndexTest.java
index 4ba3a6551d9..fa75f76a520 100644
--- a/sonar-db/src/test/java/org/sonar/db/version/v60/AddComponentUuidColumnToDuplicationsIndexTest.java
+++ b/sonar-db/src/test/java/org/sonar/db/version/v60/AddComponentUuidAndAnalysisUuidColumnToDuplicationsIndexTest.java
@@ -19,8 +19,6 @@
*/
package org.sonar.db.version.v60;
-import static java.lang.String.valueOf;
-
import java.sql.SQLException;
import java.sql.Types;
import org.junit.Rule;
@@ -29,17 +27,19 @@ import org.junit.rules.ExpectedException;
import org.sonar.api.utils.System2;
import org.sonar.db.DbTester;
-public class AddComponentUuidColumnToDuplicationsIndexTest {
+import static java.lang.String.valueOf;
+
+public class AddComponentUuidAndAnalysisUuidColumnToDuplicationsIndexTest {
private static final String TABLE = "duplications_index";
@Rule
- public DbTester db = DbTester.createForSchema(System2.INSTANCE, AddComponentUuidColumnToDuplicationsIndexTest.class,
+ public DbTester db = DbTester.createForSchema(System2.INSTANCE, AddComponentUuidAndAnalysisUuidColumnToDuplicationsIndexTest.class,
"duplications_index_5.6.sql");
@Rule
public ExpectedException expectedException = ExpectedException.none();
- private AddComponentUuidColumnToDuplicationsIndex underTest = new AddComponentUuidColumnToDuplicationsIndex(db.database());
+ private AddComponentUuidAndAnalysisUuidColumnToDuplicationsIndex underTest = new AddComponentUuidAndAnalysisUuidColumnToDuplicationsIndex(db.database());
@Test
public void migration_adds_column_to_empty_table() throws SQLException {
@@ -79,6 +79,7 @@ public class AddComponentUuidColumnToDuplicationsIndexTest {
private void verifyAddedColumns() {
db.assertColumnDefinition(TABLE, "component_uuid", Types.VARCHAR, 50, true);
+ db.assertColumnDefinition(TABLE, "analysis_uuid", Types.VARCHAR, 50, true);
}
}
diff --git a/sonar-db/src/test/java/org/sonar/db/version/v60/MakeComponentUuidNotNullOnDuplicationsIndexTest.java b/sonar-db/src/test/java/org/sonar/db/version/v60/MakeComponentUuidAndAnalysisUuidNotNullOnDuplicationsIndexTest.java
index ec32c46d528..203c2f578f6 100644
--- a/sonar-db/src/test/java/org/sonar/db/version/v60/MakeComponentUuidNotNullOnDuplicationsIndexTest.java
+++ b/sonar-db/src/test/java/org/sonar/db/version/v60/MakeComponentUuidAndAnalysisUuidNotNullOnDuplicationsIndexTest.java
@@ -32,15 +32,15 @@ import org.sonar.db.DbTester;
import static java.lang.String.valueOf;
import static org.assertj.core.api.Assertions.assertThat;
-public class MakeComponentUuidNotNullOnDuplicationsIndexTest {
+public class MakeComponentUuidAndAnalysisUuidNotNullOnDuplicationsIndexTest {
@Rule
- public DbTester db = DbTester.createForSchema(System2.INSTANCE, MakeComponentUuidNotNullOnDuplicationsIndexTest.class,
+ public DbTester db = DbTester.createForSchema(System2.INSTANCE, MakeComponentUuidAndAnalysisUuidNotNullOnDuplicationsIndexTest.class,
"in_progress_duplications_index.sql");
@Rule
public ExpectedException expectedException = ExpectedException.none();
- private MakeComponentUuidNotNullOnDuplicationsIndex underTest = new MakeComponentUuidNotNullOnDuplicationsIndex(db.database());
+ private MakeComponentUuidAndAnalysisUuidNotNullOnDuplicationsIndex underTest = new MakeComponentUuidAndAnalysisUuidNotNullOnDuplicationsIndex(db.database());
@Test
public void migration_sets_uuid_columns_not_nullable_on_empty_table() throws SQLException {
@@ -51,8 +51,8 @@ public class MakeComponentUuidNotNullOnDuplicationsIndexTest {
@Test
public void migration_sets_uuid_columns_not_nullable_on_populated_table() throws SQLException {
- insertDuplicationIndex(1L, true);
- insertDuplicationIndex(2L, true);
+ insertDuplicationIndex(1L, true, true);
+ insertDuplicationIndex(2L, true, true);
underTest.execute();
@@ -61,8 +61,18 @@ public class MakeComponentUuidNotNullOnDuplicationsIndexTest {
}
@Test
- public void migration_fails_if_some_uuid_columns_are_null() throws SQLException {
- insertDuplicationIndex(1L, false);
+ public void migration_fails_if_some_component_uuid_columns_are_null() throws SQLException {
+ insertDuplicationIndex(1L, false, true);
+
+ expectedException.expect(IllegalStateException.class);
+ expectedException.expectMessage("Fail to execute");
+
+ underTest.execute();
+ }
+
+ @Test
+ public void migration_fails_if_some_analysis_uuid_columns_are_null() throws SQLException {
+ insertDuplicationIndex(1L, true, false);
expectedException.expect(IllegalStateException.class);
expectedException.expectMessage("Fail to execute");
@@ -72,20 +82,22 @@ public class MakeComponentUuidNotNullOnDuplicationsIndexTest {
private void verifyColumnDefinitions() {
db.assertColumnDefinition("duplications_index", "component_uuid", Types.VARCHAR, 50, false);
+ db.assertColumnDefinition("duplications_index", "analysis_uuid", Types.VARCHAR, 50, false);
}
private List<Long> idsOfRowsInDuplicationsIndex() {
return db.select("select ID from duplications_index").stream().map(map -> (Long) map.get("ID")).collect(Collectors.toList());
}
- private void insertDuplicationIndex(long id, boolean hasComponentUuid) {
+ private void insertDuplicationIndex(long id, boolean hasComponentUuid, boolean hasAnalysisUuid) {
db.executeInsert(
"duplications_index",
"ID", valueOf(id),
"PROJECT_SNAPSHOT_ID", valueOf(10 + id),
"SNAPSHOT_ID", valueOf(20 + id),
- "COMPONENT_UUID", hasComponentUuid ? valueOf(30 + id) : null,
- "HASH", "some_hash_" + id,
+ "ANALYSIS_UUID", hasAnalysisUuid ? valueOf(30 + id) : null,
+ "COMPONENT_UUID", hasComponentUuid ? valueOf(40 + id) : null,
+ "HASH", "some_hash_" + id,
"INDEX_IN_FILE", "2",
"START_LINE", "3",
"END_LINE", "4");
diff --git a/sonar-db/src/test/java/org/sonar/db/version/v60/PopulateComponentUuidOfDuplicationsIndexTest.java b/sonar-db/src/test/java/org/sonar/db/version/v60/PopulateComponentUuidAndAnalysisUuidOfDuplicationsIndexTest.java
index acd4a75936a..33ec71b94e4 100644
--- a/sonar-db/src/test/java/org/sonar/db/version/v60/PopulateComponentUuidOfDuplicationsIndexTest.java
+++ b/sonar-db/src/test/java/org/sonar/db/version/v60/PopulateComponentUuidAndAnalysisUuidOfDuplicationsIndexTest.java
@@ -31,13 +31,13 @@ import org.sonar.db.DbTester;
import static java.lang.String.valueOf;
import static org.assertj.core.api.Assertions.assertThat;
-public class PopulateComponentUuidOfDuplicationsIndexTest {
+public class PopulateComponentUuidAndAnalysisUuidOfDuplicationsIndexTest {
@Rule
- public DbTester db = DbTester.createForSchema(System2.INSTANCE, PopulateComponentUuidOfDuplicationsIndexTest.class,
+ public DbTester db = DbTester.createForSchema(System2.INSTANCE, PopulateComponentUuidAndAnalysisUuidOfDuplicationsIndexTest.class,
"in_progress_measures_with_snapshots.sql");
- private PopulateComponentUuidOfDuplicationsIndex underTest = new PopulateComponentUuidOfDuplicationsIndex(db.database());
+ private PopulateComponentUuidAndAnalysisUuidOfDuplicationsIndex underTest = new PopulateComponentUuidAndAnalysisUuidOfDuplicationsIndex(db.database());
@Test
public void migration_has_no_effect_on_empty_tables() throws SQLException {
@@ -49,66 +49,68 @@ public class PopulateComponentUuidOfDuplicationsIndexTest {
@Test
public void migration_updates_component_uuid_with_values_from_table_snapshots_when_they_exist() throws SQLException {
- String uuid1 = insertSnapshot(40);
- insertSnapshot(50);
- String uuid3 = insertSnapshot(60);
- insertSnapshot(70);
-
- insertDuplicationIndex(1, 40);
- insertDuplicationIndex(2, 40);
- insertDuplicationIndex(3, 40);
- insertDuplicationIndex(4, 60);
- insertDuplicationIndex(5, 90); // 90 does not exist
- insertDuplicationIndex(6, 100); // 100 does not exist
+ insertSnapshot(40, "cpt1");
+ String rootUuid1 = insertSnapshot(50, "cpt2");
+ insertSnapshot(60, "cpt3");
+ String rootUuid2 = insertSnapshot(70, "cpt4");
+
+ insertDuplicationIndex(1, 40, 50);
+ insertDuplicationIndex(2, 40, 50);
+ insertDuplicationIndex(3, 40, 70);
+ insertDuplicationIndex(4, 60, 110); // 110 doesn't exist
+ insertDuplicationIndex(5, 90, 120); // 90 and 120 does not exist
+ insertDuplicationIndex(6, 100, 70); // 100 does not exist
db.commit();
underTest.execute();
- verifyDuplicationsIndex(1, 40, uuid1);
- verifyDuplicationsIndex(2, 40, uuid1);
- verifyDuplicationsIndex(3, 40, uuid1);
- verifyDuplicationsIndex(4, 60, uuid3);
- verifyDuplicationsIndex(5, 90, null);
- verifyDuplicationsIndex(6, 100, null);
+ verifyDuplicationsIndex(1, 40, "cpt1", rootUuid1);
+ verifyDuplicationsIndex(2, 40, "cpt1", rootUuid1);
+ verifyDuplicationsIndex(3, 40, "cpt1", rootUuid2);
+ verifyDuplicationsIndex(4, 60, "cpt3", null);
+ verifyDuplicationsIndex(5, 90, null, null);
+ verifyDuplicationsIndex(6, 100, null, rootUuid2);
}
@Test
public void migration_is_reentrant() throws SQLException {
- String uuid1 = insertSnapshot(40);
- insertSnapshot(50);
- insertDuplicationIndex(1, 40);
+ insertSnapshot(40, "cpt1");
+ String rootUuid = insertSnapshot(50, "cp2");
+ insertDuplicationIndex(1, 40, 50);
underTest.execute();
- verifyDuplicationsIndex(1, 40, uuid1);
+ verifyDuplicationsIndex(1, 40, "cpt1", rootUuid);
underTest.execute();
- verifyDuplicationsIndex(1, 40, uuid1);
+ verifyDuplicationsIndex(1, 40, "cpt1", rootUuid);
}
- private void verifyDuplicationsIndex(long id, long snapshotId, @Nullable String componentUuid) {
- List<Map<String, Object>> rows = db.select("select SNAPSHOT_ID, COMPONENT_UUID from duplications_index where ID=" + id);
+ private void verifyDuplicationsIndex(long id, long snapshotId, @Nullable String componentUuid, @Nullable String analysisUuid) {
+ List<Map<String, Object>> rows = db.select("select SNAPSHOT_ID, COMPONENT_UUID,ANALYSIS_UUID from duplications_index where ID=" + id);
assertThat(rows).hasSize(1);
Map<String, Object> row = rows.get(0);
assertThat(row.get("SNAPSHOT_ID")).isEqualTo(snapshotId);
assertThat(row.get("COMPONENT_UUID")).isEqualTo(componentUuid);
+ assertThat(row.get("ANALYSIS_UUID")).isEqualTo(analysisUuid);
}
- private String insertSnapshot(long id) {
+ private String insertSnapshot(long id, String componentUuid) {
String uuid = "uuid_" + id;
db.executeInsert(
"snapshots",
+ "uuid", uuid,
"id", valueOf(id),
- "component_uuid", uuid,
+ "component_uuid", componentUuid,
"root_component_uuid", valueOf(id + 100));
return uuid;
}
- private void insertDuplicationIndex(long id, long snapshotId) {
+ private void insertDuplicationIndex(long id, long snapshotId, long projectSnapshotId) {
db.executeInsert(
"duplications_index",
"ID", valueOf(id),
- "PROJECT_SNAPSHOT_ID", valueOf(10 + id),
+ "PROJECT_SNAPSHOT_ID", valueOf(projectSnapshotId),
"SNAPSHOT_ID", valueOf(snapshotId),
"HASH", "some_hash_" + id,
"INDEX_IN_FILE", "2",
diff --git a/sonar-db/src/test/resources/org/sonar/db/version/v60/AddComponentUuidColumnToDuplicationsIndexTest/duplications_index_5.6.sql b/sonar-db/src/test/resources/org/sonar/db/version/v60/AddComponentUuidAndAnalysisUuidColumnToDuplicationsIndexTest/duplications_index_5.6.sql
index 6ac3885a261..6ac3885a261 100644
--- a/sonar-db/src/test/resources/org/sonar/db/version/v60/AddComponentUuidColumnToDuplicationsIndexTest/duplications_index_5.6.sql
+++ b/sonar-db/src/test/resources/org/sonar/db/version/v60/AddComponentUuidAndAnalysisUuidColumnToDuplicationsIndexTest/duplications_index_5.6.sql
diff --git a/sonar-db/src/test/resources/org/sonar/db/version/v60/MakeComponentUuidNotNullOnDuplicationsIndexTest/in_progress_duplications_index.sql b/sonar-db/src/test/resources/org/sonar/db/version/v60/MakeComponentUuidAndAnalysisUuidNotNullOnDuplicationsIndexTest/in_progress_duplications_index.sql
index df0cc072b65..5bd4e10d8de 100644
--- a/sonar-db/src/test/resources/org/sonar/db/version/v60/MakeComponentUuidNotNullOnDuplicationsIndexTest/in_progress_duplications_index.sql
+++ b/sonar-db/src/test/resources/org/sonar/db/version/v60/MakeComponentUuidAndAnalysisUuidNotNullOnDuplicationsIndexTest/in_progress_duplications_index.sql
@@ -2,6 +2,7 @@ CREATE TABLE "DUPLICATIONS_INDEX" (
"ID" BIGINT NOT NULL GENERATED BY DEFAULT AS IDENTITY (START WITH 1, INCREMENT BY 1),
"PROJECT_SNAPSHOT_ID" INTEGER NOT NULL,
"SNAPSHOT_ID" INTEGER NOT NULL,
+ "ANALYSIS_UUID" VARCHAR(50),
"COMPONENT_UUID" VARCHAR(50),
"HASH" VARCHAR(50) NOT NULL,
"INDEX_IN_FILE" INTEGER NOT NULL,
diff --git a/sonar-db/src/test/resources/org/sonar/db/version/v60/PopulateComponentUuidOfDuplicationsIndexTest/in_progress_measures_with_snapshots.sql b/sonar-db/src/test/resources/org/sonar/db/version/v60/PopulateComponentUuidAndAnalysisUuidOfDuplicationsIndexTest/in_progress_measures_with_snapshots.sql
index 94a2041748c..526a759d76d 100644
--- a/sonar-db/src/test/resources/org/sonar/db/version/v60/PopulateComponentUuidOfDuplicationsIndexTest/in_progress_measures_with_snapshots.sql
+++ b/sonar-db/src/test/resources/org/sonar/db/version/v60/PopulateComponentUuidAndAnalysisUuidOfDuplicationsIndexTest/in_progress_measures_with_snapshots.sql
@@ -2,6 +2,7 @@ CREATE TABLE "DUPLICATIONS_INDEX" (
"ID" BIGINT NOT NULL GENERATED BY DEFAULT AS IDENTITY (START WITH 1, INCREMENT BY 1),
"PROJECT_SNAPSHOT_ID" INTEGER NOT NULL,
"SNAPSHOT_ID" INTEGER NOT NULL,
+ "ANALYSIS_UUID" VARCHAR(50),
"COMPONENT_UUID" VARCHAR(50),
"HASH" VARCHAR(50) NOT NULL,
"INDEX_IN_FILE" INTEGER NOT NULL,
@@ -11,6 +12,7 @@ CREATE TABLE "DUPLICATIONS_INDEX" (
CREATE TABLE "SNAPSHOTS" (
"ID" INTEGER NOT NULL GENERATED BY DEFAULT AS IDENTITY (START WITH 1, INCREMENT BY 1),
+ "UUID" VARCHAR(50) NOT NULL,
"CREATED_AT" BIGINT,
"BUILD_DATE" BIGINT,
"COMPONENT_UUID" VARCHAR(50) NOT NULL,