From 35e6d99c2a9e0426f5800f4087e02ca383224c6b Mon Sep 17 00:00:00 2001 From: Duarte Meneses Date: Mon, 2 Jan 2023 15:41:22 -0600 Subject: [PATCH] SONAR-17839 DB migrations dropping columns should always check if there are constraints to be deleted in MS SQL --- .../DropMsSQLDefaultConstraintsBuilder.java | 3 ++ .../db/migration/step/DropColumnChange.java | 7 ++- .../step/DropColumnWithConstraint.java | 51 ------------------- ...DropUserManagedColumnFromMetricsTable.java | 4 +- ...DropSonarlintAdSeenColumnInUsersTable.java | 4 +- .../DropProjectMeasureVariationColumn.java | 3 +- 6 files changed, 14 insertions(+), 58 deletions(-) delete mode 100644 server/sonar-db-migration/src/main/java/org/sonar/server/platform/db/migration/step/DropColumnWithConstraint.java diff --git a/server/sonar-db-migration/src/main/java/org/sonar/server/platform/db/migration/sql/DropMsSQLDefaultConstraintsBuilder.java b/server/sonar-db-migration/src/main/java/org/sonar/server/platform/db/migration/sql/DropMsSQLDefaultConstraintsBuilder.java index 9d6707e279e..95b082ac35e 100644 --- a/server/sonar-db-migration/src/main/java/org/sonar/server/platform/db/migration/sql/DropMsSQLDefaultConstraintsBuilder.java +++ b/server/sonar-db-migration/src/main/java/org/sonar/server/platform/db/migration/sql/DropMsSQLDefaultConstraintsBuilder.java @@ -33,6 +33,9 @@ import org.sonar.db.dialect.MsSql; import static java.lang.String.format; +/** + * See SONAR-13948. Some columns created in SQ < 5.6 were created with the default command which generated constraints on MS SQL server. + */ public class DropMsSQLDefaultConstraintsBuilder { private final Database db; private String tableName; diff --git a/server/sonar-db-migration/src/main/java/org/sonar/server/platform/db/migration/step/DropColumnChange.java b/server/sonar-db-migration/src/main/java/org/sonar/server/platform/db/migration/step/DropColumnChange.java index 0c67dafde37..49d542efb22 100644 --- a/server/sonar-db-migration/src/main/java/org/sonar/server/platform/db/migration/step/DropColumnChange.java +++ b/server/sonar-db-migration/src/main/java/org/sonar/server/platform/db/migration/step/DropColumnChange.java @@ -22,7 +22,9 @@ package org.sonar.server.platform.db.migration.step; import java.sql.SQLException; import org.sonar.db.Database; import org.sonar.db.DatabaseUtils; +import org.sonar.db.dialect.MsSql; import org.sonar.server.platform.db.migration.sql.DropColumnsBuilder; +import org.sonar.server.platform.db.migration.sql.DropMsSQLDefaultConstraintsBuilder; public abstract class DropColumnChange extends DdlChange { @@ -36,11 +38,14 @@ public abstract class DropColumnChange extends DdlChange { } @Override - public void execute(DdlChange.Context context) throws SQLException { + public void execute(Context context) throws SQLException { if (!checkIfUseManagedColumnExists()) { return; } + if (MsSql.ID.equals(getDatabase().getDialect().getId())) { + context.execute(new DropMsSQLDefaultConstraintsBuilder(getDatabase()).setTable(tableName).setColumns(columnName).build()); + } context.execute(new DropColumnsBuilder(getDatabase().getDialect(), tableName, columnName).build()); } diff --git a/server/sonar-db-migration/src/main/java/org/sonar/server/platform/db/migration/step/DropColumnWithConstraint.java b/server/sonar-db-migration/src/main/java/org/sonar/server/platform/db/migration/step/DropColumnWithConstraint.java deleted file mode 100644 index bfa55a33d2e..00000000000 --- a/server/sonar-db-migration/src/main/java/org/sonar/server/platform/db/migration/step/DropColumnWithConstraint.java +++ /dev/null @@ -1,51 +0,0 @@ -/* - * 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.step; - -import java.sql.SQLException; -import org.sonar.db.Database; -import org.sonar.db.dialect.MsSql; -import org.sonar.server.platform.db.migration.sql.DropColumnsBuilder; -import org.sonar.server.platform.db.migration.sql.DropMsSQLDefaultConstraintsBuilder; - -public class DropColumnWithConstraint extends DropColumnChange { - - private final String tableName; - private final String column; - - public DropColumnWithConstraint(Database db, String tableName, String column) { - super(db, tableName, column); - this.tableName = tableName; - this.column = column; - } - - @Override - public void execute(Context context) throws SQLException { - if (!checkIfUseManagedColumnExists()) { - return; - } - - if (MsSql.ID.equals(getDatabase().getDialect().getId())) { - context.execute(new DropMsSQLDefaultConstraintsBuilder(getDatabase()).setTable(tableName).setColumns(column).build()); - } - context.execute(new DropColumnsBuilder(getDatabase().getDialect(), tableName, column).build()); - } - -} diff --git a/server/sonar-db-migration/src/main/java/org/sonar/server/platform/db/migration/version/v91/DropUserManagedColumnFromMetricsTable.java b/server/sonar-db-migration/src/main/java/org/sonar/server/platform/db/migration/version/v91/DropUserManagedColumnFromMetricsTable.java index bed5b870acb..16f249d2e87 100644 --- a/server/sonar-db-migration/src/main/java/org/sonar/server/platform/db/migration/version/v91/DropUserManagedColumnFromMetricsTable.java +++ b/server/sonar-db-migration/src/main/java/org/sonar/server/platform/db/migration/version/v91/DropUserManagedColumnFromMetricsTable.java @@ -20,9 +20,9 @@ package org.sonar.server.platform.db.migration.version.v91; import org.sonar.db.Database; -import org.sonar.server.platform.db.migration.step.DropColumnWithConstraint; +import org.sonar.server.platform.db.migration.step.DropColumnChange; -public class DropUserManagedColumnFromMetricsTable extends DropColumnWithConstraint { +public class DropUserManagedColumnFromMetricsTable extends DropColumnChange { private static final String TABLE_NAME = "metrics"; private static final String COLUMN = "user_managed"; diff --git a/server/sonar-db-migration/src/main/java/org/sonar/server/platform/db/migration/version/v96/DropSonarlintAdSeenColumnInUsersTable.java b/server/sonar-db-migration/src/main/java/org/sonar/server/platform/db/migration/version/v96/DropSonarlintAdSeenColumnInUsersTable.java index 73ef8abbe0a..38c92f8796f 100644 --- a/server/sonar-db-migration/src/main/java/org/sonar/server/platform/db/migration/version/v96/DropSonarlintAdSeenColumnInUsersTable.java +++ b/server/sonar-db-migration/src/main/java/org/sonar/server/platform/db/migration/version/v96/DropSonarlintAdSeenColumnInUsersTable.java @@ -20,9 +20,9 @@ package org.sonar.server.platform.db.migration.version.v96; import org.sonar.db.Database; -import org.sonar.server.platform.db.migration.step.DropColumnWithConstraint; +import org.sonar.server.platform.db.migration.step.DropColumnChange; -public class DropSonarlintAdSeenColumnInUsersTable extends DropColumnWithConstraint { +public class DropSonarlintAdSeenColumnInUsersTable extends DropColumnChange { private static final String TABLE_NAME = "users"; private static final String COLUMN = "sonarlint_ad_seen"; diff --git a/server/sonar-db-migration/src/main/java/org/sonar/server/platform/db/migration/version/v98/DropProjectMeasureVariationColumn.java b/server/sonar-db-migration/src/main/java/org/sonar/server/platform/db/migration/version/v98/DropProjectMeasureVariationColumn.java index 9d0bbe1df8f..b48d8131fb1 100644 --- a/server/sonar-db-migration/src/main/java/org/sonar/server/platform/db/migration/version/v98/DropProjectMeasureVariationColumn.java +++ b/server/sonar-db-migration/src/main/java/org/sonar/server/platform/db/migration/version/v98/DropProjectMeasureVariationColumn.java @@ -21,9 +21,8 @@ package org.sonar.server.platform.db.migration.version.v98; import org.sonar.db.Database; import org.sonar.server.platform.db.migration.step.DropColumnChange; -import org.sonar.server.platform.db.migration.step.DropColumnWithConstraint; -public class DropProjectMeasureVariationColumn extends DropColumnWithConstraint { +public class DropProjectMeasureVariationColumn extends DropColumnChange { public static final String TABLE_NAME = "project_measures"; public static final String COLUMN_NAME = "variation_value_1"; -- 2.39.5