aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSébastien Lesaint <sebastien.lesaint@sonarsource.com>2016-09-13 14:35:24 +0200
committerSébastien Lesaint <sebastien.lesaint@sonarsource.com>2016-09-16 12:22:12 +0200
commit8b6af4f969c5166d88394dbe3d4bca09b0cb3c2f (patch)
tree4b91878ed1075360c4b52723307474123f41531e
parentb5f2e80885615ffc3d3734e3f0e2d4fe78889482 (diff)
downloadsonarqube-8b6af4f969c5166d88394dbe3d4bca09b0cb3c2f.tar.gz
sonarqube-8b6af4f969c5166d88394dbe3d4bca09b0cb3c2f.zip
SONAR-8025 rewrite create table CE_SCANNER_CONTEXT in java
-rw-r--r--server/sonar-web/src/main/webapp/WEB-INF/db/migrate/1309_recreate_table_scanner_context.rb8
-rw-r--r--sonar-db/src/main/java/org/sonar/db/version/MigrationStepModule.java2
-rw-r--r--sonar-db/src/main/java/org/sonar/db/version/v61/CreateTableScannerContext.java47
-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/v61/CreateTableScannerContextTest.java63
5 files changed, 114 insertions, 8 deletions
diff --git a/server/sonar-web/src/main/webapp/WEB-INF/db/migrate/1309_recreate_table_scanner_context.rb b/server/sonar-web/src/main/webapp/WEB-INF/db/migrate/1309_recreate_table_scanner_context.rb
index c63899bce40..7982118d4cc 100644
--- a/server/sonar-web/src/main/webapp/WEB-INF/db/migrate/1309_recreate_table_scanner_context.rb
+++ b/server/sonar-web/src/main/webapp/WEB-INF/db/migrate/1309_recreate_table_scanner_context.rb
@@ -24,12 +24,6 @@
class RecreateTableScannerContext < ActiveRecord::Migration
def self.up
- create_table 'ce_scanner_context', :id => false do |t|
- t.column 'task_uuid', :string, :limit => 40, :null => false
- t.column 'data', :binary, :null => false
- t.column 'created_at', :big_integer, :null => false
- t.column 'updated_at', :big_integer, :null => false
- end
- add_primary_key 'ce_scanner_context', 'task_uuid'
+ execute_java_migration('org.sonar.db.version.v61.CreateTableScannerContext')
end
end
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 85bf57f64c1..ddc6bb7a5b7 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
@@ -148,6 +148,7 @@ import org.sonar.db.version.v61.AddBUuidPathToProjects;
import org.sonar.db.version.v61.AddErrorColumnsToCeActivity;
import org.sonar.db.version.v61.CopyActivitiesToQprofileChanges;
import org.sonar.db.version.v61.CreateTableCeTaskInput;
+import org.sonar.db.version.v61.CreateTableScannerContext;
import org.sonar.db.version.v61.DeleteProjectDashboards;
import org.sonar.db.version.v61.DeleteReportsFromCeQueue;
import org.sonar.db.version.v61.DropIsGlobalFromDashboards;
@@ -324,6 +325,7 @@ public class MigrationStepModule extends Module {
ShrinkModuleUuidPathOfProjects.class,
AddBUuidPathToProjects.class,
AddErrorColumnsToCeActivity.class,
+ CreateTableScannerContext.class,
PopulateTableProperties2.class,
RemoveViewsDefinitionFromProperties.class,
CopyActivitiesToQprofileChanges.class);
diff --git a/sonar-db/src/main/java/org/sonar/db/version/v61/CreateTableScannerContext.java b/sonar-db/src/main/java/org/sonar/db/version/v61/CreateTableScannerContext.java
new file mode 100644
index 00000000000..6d20e820c47
--- /dev/null
+++ b/sonar-db/src/main/java/org/sonar/db/version/v61/CreateTableScannerContext.java
@@ -0,0 +1,47 @@
+/*
+ * 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.v61;
+
+import java.sql.SQLException;
+import org.sonar.db.Database;
+import org.sonar.db.version.CreateTableBuilder;
+import org.sonar.db.version.DdlChange;
+
+import static org.sonar.db.version.BigIntegerColumnDef.newBigIntegerColumnDefBuilder;
+import static org.sonar.db.version.BlobColumnDef.newBlobColumnDefBuilder;
+import static org.sonar.db.version.VarcharColumnDef.UUID_SIZE;
+import static org.sonar.db.version.VarcharColumnDef.newVarcharColumnDefBuilder;
+
+public class CreateTableScannerContext extends DdlChange {
+ public CreateTableScannerContext(Database db) {
+ super(db);
+ }
+
+ @Override
+ public void execute(Context context) throws SQLException {
+ context.execute(
+ new CreateTableBuilder(getDialect(), "ce_scanner_context")
+ .addPkColumn(newVarcharColumnDefBuilder().setColumnName("task_uuid").setLimit(UUID_SIZE).setIsNullable(false).build())
+ .addColumn(newBlobColumnDefBuilder().setColumnName("data").setIsNullable(false).build())
+ .addColumn(newBigIntegerColumnDefBuilder().setColumnName("created_at").setIsNullable(false).build())
+ .addColumn(newBigIntegerColumnDefBuilder().setColumnName("updated_at").setIsNullable(false).build())
+ .build());
+ }
+}
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 e03d3eafbfe..2ee78b6f086 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(136);
+ assertThat(container.size()).isEqualTo(137);
}
}
diff --git a/sonar-db/src/test/java/org/sonar/db/version/v61/CreateTableScannerContextTest.java b/sonar-db/src/test/java/org/sonar/db/version/v61/CreateTableScannerContextTest.java
new file mode 100644
index 00000000000..97780fd4dfb
--- /dev/null
+++ b/sonar-db/src/test/java/org/sonar/db/version/v61/CreateTableScannerContextTest.java
@@ -0,0 +1,63 @@
+/*
+ * 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.v61;
+
+import java.sql.SQLException;
+import java.sql.Types;
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.rules.ExpectedException;
+import org.sonar.api.utils.System2;
+import org.sonar.db.DbTester;
+
+import static org.assertj.core.api.Assertions.assertThat;
+
+public class CreateTableScannerContextTest {
+ private static final String TABLE_CE_SCANNER_CONTEXT = "ce_scanner_context";
+
+ @Rule
+ public final DbTester dbTester = DbTester.createForSchema(System2.INSTANCE, CreateTableCeTaskInputTest.class, "empty.sql");
+ @Rule
+ public ExpectedException expectedException = ExpectedException.none();
+
+ private CreateTableScannerContext underTest = new CreateTableScannerContext(dbTester.database());
+
+ @Test
+ public void creates_table_on_empty_db() throws SQLException {
+ underTest.execute();
+
+ assertThat(dbTester.countRowsOfTable(TABLE_CE_SCANNER_CONTEXT)).isEqualTo(0);
+
+ dbTester.assertColumnDefinition(TABLE_CE_SCANNER_CONTEXT, "task_uuid", Types.VARCHAR, 40, false);
+ dbTester.assertColumnDefinition(TABLE_CE_SCANNER_CONTEXT, "data", Types.BLOB, null, false);
+ dbTester.assertColumnDefinition(TABLE_CE_SCANNER_CONTEXT, "created_at", Types.BIGINT, null, false);
+ dbTester.assertColumnDefinition(TABLE_CE_SCANNER_CONTEXT, "updated_at", Types.BIGINT, null, false);
+ dbTester.assertPrimaryKey(TABLE_CE_SCANNER_CONTEXT, "pk_" + TABLE_CE_SCANNER_CONTEXT, "task_uuid");
+ }
+
+ @Test
+ public void migration_is_not_reentrant() throws SQLException {
+ underTest.execute();
+
+ expectedException.expect(IllegalStateException.class);
+
+ underTest.execute();
+ }
+}