From a0014d9bdd2e874bb74a26035b0fa5e473506769 Mon Sep 17 00:00:00 2001 From: Julien Lancelot Date: Tue, 28 Apr 2015 16:31:19 +0200 Subject: [PATCH] SONAR-6453 Add columns in the dependencies table --- .../server/db/migrations/MigrationSteps.java | 4 +- .../v52/AddDependenciesColumns.java | 84 +++++++++++++++++++ .../v52/AddDependenciesColumnsTest.java | 51 +++++++++++ .../v52/AddDependenciesColumnsTest/schema.sql | 13 +++ .../migrate/914_add_dependencies_columns.rb | 31 +++++++ .../core/persistence/DatabaseVersion.java | 2 +- .../org/sonar/core/persistence/rows-h2.sql | 1 + .../org/sonar/core/persistence/schema-h2.ddl | 6 +- .../shouldDeleteSnapshot-result.xml | 6 +- .../shouldDeleteSnapshot.xml | 18 ++-- .../shouldPurgeSnapshot-result.xml | 24 +++--- .../PurgeCommandsTest/shouldPurgeSnapshot.xml | 24 +++--- 12 files changed, 225 insertions(+), 39 deletions(-) create mode 100644 server/sonar-server/src/main/java/org/sonar/server/db/migrations/v52/AddDependenciesColumns.java create mode 100644 server/sonar-server/src/test/java/org/sonar/server/db/migrations/v52/AddDependenciesColumnsTest.java create mode 100644 server/sonar-server/src/test/resources/org/sonar/server/db/migrations/v52/AddDependenciesColumnsTest/schema.sql create mode 100644 server/sonar-web/src/main/webapp/WEB-INF/db/migrate/914_add_dependencies_columns.rb diff --git a/server/sonar-server/src/main/java/org/sonar/server/db/migrations/MigrationSteps.java b/server/sonar-server/src/main/java/org/sonar/server/db/migrations/MigrationSteps.java index c333435dbf5..a27a4c4bce5 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/db/migrations/MigrationSteps.java +++ b/server/sonar-server/src/main/java/org/sonar/server/db/migrations/MigrationSteps.java @@ -64,6 +64,7 @@ import org.sonar.server.db.migrations.v51.FeedUsersLongDates; import org.sonar.server.db.migrations.v51.RemovePermissionsOnModulesMigrationStep; import org.sonar.server.db.migrations.v51.RenameComponentRelatedParamsInIssueFilters; import org.sonar.server.db.migrations.v51.UpdateProjectsModuleUuidPath; +import org.sonar.server.db.migrations.v52.AddDependenciesColumns; import org.sonar.server.db.migrations.v52.AddDependenciesComponentUuidColumns; import org.sonar.server.db.migrations.v52.DropDependenciesComponentColumns; import org.sonar.server.db.migrations.v52.FeedDependenciesComponentUuids; @@ -143,6 +144,7 @@ public interface MigrationSteps { AddDependenciesComponentUuidColumns.class, FeedDependenciesComponentUuids.class, DropDependenciesComponentColumns.class, - FeedFileSourcesDataType.class + FeedFileSourcesDataType.class, + AddDependenciesColumns.class ); } diff --git a/server/sonar-server/src/main/java/org/sonar/server/db/migrations/v52/AddDependenciesColumns.java b/server/sonar-server/src/main/java/org/sonar/server/db/migrations/v52/AddDependenciesColumns.java new file mode 100644 index 00000000000..0389501669d --- /dev/null +++ b/server/sonar-server/src/main/java/org/sonar/server/db/migrations/v52/AddDependenciesColumns.java @@ -0,0 +1,84 @@ +/* + * SonarQube, open source software quality management tool. + * Copyright (C) 2008-2014 SonarSource + * mailto:contact AT sonarsource DOT com + * + * SonarQube 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. + * + * SonarQube 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.db.migrations.v52; + +import org.sonar.core.persistence.Database; +import org.sonar.server.db.migrations.AddColumnsBuilder; +import org.sonar.server.db.migrations.DdlChange; + +import java.sql.SQLException; + +import static org.sonar.server.db.migrations.AddColumnsBuilder.ColumnDef.Type.BIG_INTEGER; +import static org.sonar.server.db.migrations.AddColumnsBuilder.ColumnDef.Type.STRING; + +/** + * Add the following columns to the dependencies table : + * - from_parent_uuid + * - to_parent_uuid + * - root_project_snapshot_id + * - created_at + */ +public class AddDependenciesColumns extends DdlChange { + + private final Database db; + + public AddDependenciesColumns(Database db) { + super(db); + this.db = db; + } + + @Override + public void execute(Context context) throws SQLException { + context.execute(generateSql()); + } + + private String generateSql() { + return new AddColumnsBuilder(db.getDialect(), "dependencies") + .addColumn( + new AddColumnsBuilder.ColumnDef() + .setName("from_parent_uuid") + .setType(STRING) + .setLimit(50) + .setNullable(true) + ) + .addColumn( + new AddColumnsBuilder.ColumnDef() + .setName("to_parent_uuid") + .setType(STRING) + .setLimit(50) + .setNullable(true) + ) + .addColumn( + new AddColumnsBuilder.ColumnDef() + .setName("root_project_snapshot_id") + .setType(BIG_INTEGER) + .setNullable(true) + ) + .addColumn( + new AddColumnsBuilder.ColumnDef() + .setName("created_at") + .setType(BIG_INTEGER) + .setNullable(true) + ) + .build(); + } + +} diff --git a/server/sonar-server/src/test/java/org/sonar/server/db/migrations/v52/AddDependenciesColumnsTest.java b/server/sonar-server/src/test/java/org/sonar/server/db/migrations/v52/AddDependenciesColumnsTest.java new file mode 100644 index 00000000000..c95338db9fe --- /dev/null +++ b/server/sonar-server/src/test/java/org/sonar/server/db/migrations/v52/AddDependenciesColumnsTest.java @@ -0,0 +1,51 @@ +/* + * SonarQube, open source software quality management tool. + * Copyright (C) 2008-2014 SonarSource + * mailto:contact AT sonarsource DOT com + * + * SonarQube 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. + * + * SonarQube 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.db.migrations.v52; + +import org.junit.Before; +import org.junit.ClassRule; +import org.junit.Test; +import org.sonar.core.persistence.DbTester; + +import java.sql.Types; + +public class AddDependenciesColumnsTest { + + @ClassRule + public static DbTester db = new DbTester().schema(AddDependenciesColumnsTest.class, "schema.sql"); + + AddDependenciesColumns migration; + + @Before + public void setUp() throws Exception { + migration = new AddDependenciesColumns(db.database()); + } + + @Test + public void update_columns() throws Exception { + migration.execute(); + + db.assertColumnDefinition("dependencies", "from_parent_uuid", Types.VARCHAR, 50); + db.assertColumnDefinition("dependencies", "to_parent_uuid", Types.VARCHAR, 50); + db.assertColumnDefinition("dependencies", "created_at", Types.BIGINT, null); + } + +} diff --git a/server/sonar-server/src/test/resources/org/sonar/server/db/migrations/v52/AddDependenciesColumnsTest/schema.sql b/server/sonar-server/src/test/resources/org/sonar/server/db/migrations/v52/AddDependenciesColumnsTest/schema.sql new file mode 100644 index 00000000000..25e850ffe66 --- /dev/null +++ b/server/sonar-server/src/test/resources/org/sonar/server/db/migrations/v52/AddDependenciesColumnsTest/schema.sql @@ -0,0 +1,13 @@ +CREATE TABLE "DEPENDENCIES" ( + "ID" BIGINT NOT NULL GENERATED BY DEFAULT AS IDENTITY (START WITH 1, INCREMENT BY 1), + "FROM_SNAPSHOT_ID" INTEGER, + "FROM_COMPONENT_UUID" INTEGER, + "TO_SNAPSHOT_ID" INTEGER, + "TO_COMPONENT_UUID" INTEGER, + "DEP_USAGE" VARCHAR(30), + "DEP_WEIGHT" INTEGER, + "PROJECT_SNAPSHOT_ID" INTEGER, + "PARENT_DEPENDENCY_ID" BIGINT, + "FROM_SCOPE" VARCHAR(3), + "TO_SCOPE" VARCHAR(3) +); diff --git a/server/sonar-web/src/main/webapp/WEB-INF/db/migrate/914_add_dependencies_columns.rb b/server/sonar-web/src/main/webapp/WEB-INF/db/migrate/914_add_dependencies_columns.rb new file mode 100644 index 00000000000..9ca61077a13 --- /dev/null +++ b/server/sonar-web/src/main/webapp/WEB-INF/db/migrate/914_add_dependencies_columns.rb @@ -0,0 +1,31 @@ +# +# SonarQube, open source software quality management tool. +# Copyright (C) 2008-2014 SonarSource +# mailto:contact AT sonarsource DOT com +# +# SonarQube 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. +# +# SonarQube 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. +# + +# +# SonarQube 5.2 +# SONAR-6256 +# +class AddDependenciesColumns < ActiveRecord::Migration + + def self.up + execute_java_migration('org.sonar.server.db.migrations.v52.AddDependenciesColumns') + end + +end diff --git a/sonar-core/src/main/java/org/sonar/core/persistence/DatabaseVersion.java b/sonar-core/src/main/java/org/sonar/core/persistence/DatabaseVersion.java index 2ba0d7afbba..440c39d1052 100644 --- a/sonar-core/src/main/java/org/sonar/core/persistence/DatabaseVersion.java +++ b/sonar-core/src/main/java/org/sonar/core/persistence/DatabaseVersion.java @@ -33,7 +33,7 @@ import java.util.List; */ public class DatabaseVersion implements BatchComponent, ServerComponent { - public static final int LAST_VERSION = 913; + public static final int LAST_VERSION = 914; /** * List of all the tables.n diff --git a/sonar-core/src/main/resources/org/sonar/core/persistence/rows-h2.sql b/sonar-core/src/main/resources/org/sonar/core/persistence/rows-h2.sql index 8c2c12a0bef..92a6baa5be6 100644 --- a/sonar-core/src/main/resources/org/sonar/core/persistence/rows-h2.sql +++ b/sonar-core/src/main/resources/org/sonar/core/persistence/rows-h2.sql @@ -337,6 +337,7 @@ INSERT INTO SCHEMA_MIGRATIONS(VERSION) VALUES ('910'); INSERT INTO SCHEMA_MIGRATIONS(VERSION) VALUES ('911'); INSERT INTO SCHEMA_MIGRATIONS(VERSION) VALUES ('912'); INSERT INTO SCHEMA_MIGRATIONS(VERSION) VALUES ('913'); +INSERT INTO SCHEMA_MIGRATIONS(VERSION) VALUES ('914'); INSERT INTO USERS(ID, LOGIN, NAME, EMAIL, CRYPTED_PASSWORD, SALT, CREATED_AT, UPDATED_AT, REMEMBER_TOKEN, REMEMBER_TOKEN_EXPIRES_AT) VALUES (1, 'admin', 'Administrator', '', 'a373a0e667abb2604c1fd571eb4ad47fe8cc0878', '48bc4b0d93179b5103fd3885ea9119498e9d161b', '1418215735482', '1418215735482', null, null); ALTER TABLE USERS ALTER COLUMN ID RESTART WITH 2; diff --git a/sonar-core/src/main/resources/org/sonar/core/persistence/schema-h2.ddl b/sonar-core/src/main/resources/org/sonar/core/persistence/schema-h2.ddl index ade0db0a4a0..ff932e6131e 100644 --- a/sonar-core/src/main/resources/org/sonar/core/persistence/schema-h2.ddl +++ b/sonar-core/src/main/resources/org/sonar/core/persistence/schema-h2.ddl @@ -7,14 +7,18 @@ CREATE TABLE "DEPENDENCIES" ( "ID" BIGINT NOT NULL GENERATED BY DEFAULT AS IDENTITY (START WITH 1, INCREMENT BY 1), "FROM_SNAPSHOT_ID" INTEGER, "FROM_COMPONENT_UUID" VARCHAR(50), + "FROM_PARENT_UUID" VARCHAR(50), "TO_SNAPSHOT_ID" INTEGER, "TO_COMPONENT_UUID" VARCHAR(50), + "TO_PARENT_UUID" VARCHAR(50), "DEP_USAGE" VARCHAR(30), "DEP_WEIGHT" INTEGER, "PROJECT_SNAPSHOT_ID" INTEGER, + "ROOT_PROJECT_SNAPSHOT_ID" INTEGER, "PARENT_DEPENDENCY_ID" BIGINT, "FROM_SCOPE" VARCHAR(3), - "TO_SCOPE" VARCHAR(3) + "TO_SCOPE" VARCHAR(3), + "CREATED_AT" BIGINT ); CREATE TABLE "CHARACTERISTICS" ( diff --git a/sonar-core/src/test/resources/org/sonar/core/purge/PurgeCommandsTest/shouldDeleteSnapshot-result.xml b/sonar-core/src/test/resources/org/sonar/core/purge/PurgeCommandsTest/shouldDeleteSnapshot-result.xml index 286d4dd8447..7a00cb1ef99 100644 --- a/sonar-core/src/test/resources/org/sonar/core/purge/PurgeCommandsTest/shouldDeleteSnapshot-result.xml +++ b/sonar-core/src/test/resources/org/sonar/core/purge/PurgeCommandsTest/shouldDeleteSnapshot-result.xml @@ -22,9 +22,9 @@ person_id="[null]" text_value="[null]" tendency="[null]" measure_date="[null]" project_id="[null]" alert_status="[null]" description="[null]" measure_data="[null]"/> - + - + - - + + - - - + + + - - - + + + - + - + - + - + - + - +