From ec5626dbe999c4a3e77202720a3d91ba806531e2 Mon Sep 17 00:00:00 2001 From: =?utf8?q?S=C3=A9bastien=20Lesaint?= Date: Tue, 16 Aug 2016 18:51:22 +0200 Subject: [PATCH] SONAR-7842 make ClobColumnDef support all DBs --- .../org/sonar/db/version/ClobColumnDef.java | 20 ++++++- .../sonar/db/version/ClobColumnDefTest.java | 55 +++++-------------- 2 files changed, 31 insertions(+), 44 deletions(-) diff --git a/sonar-db/src/main/java/org/sonar/db/version/ClobColumnDef.java b/sonar-db/src/main/java/org/sonar/db/version/ClobColumnDef.java index 23c8114537d..51fa170c405 100644 --- a/sonar-db/src/main/java/org/sonar/db/version/ClobColumnDef.java +++ b/sonar-db/src/main/java/org/sonar/db/version/ClobColumnDef.java @@ -21,7 +21,11 @@ package org.sonar.db.version; import javax.annotation.CheckForNull; import org.sonar.db.dialect.Dialect; +import org.sonar.db.dialect.H2; import org.sonar.db.dialect.MsSql; +import org.sonar.db.dialect.MySql; +import org.sonar.db.dialect.Oracle; +import org.sonar.db.dialect.PostgreSql; import static org.sonar.db.version.ColumnDefValidation.validateColumnName; @@ -42,10 +46,20 @@ public class ClobColumnDef extends AbstractColumnDef { @Override public String generateSqlType(Dialect dialect) { - if (MsSql.ID.equals(dialect.getId())) { - return "NVARCHAR (MAX)"; + switch (dialect.getId()) { + case MsSql.ID: + return "NVARCHAR (MAX)"; + case MySql.ID: + return "LONGTEXT"; + case Oracle.ID: + return "CLOB"; + case H2.ID: + return "CLOB(2147483647)"; + case PostgreSql.ID: + return "TEXT"; + default: + throw new IllegalArgumentException("Unsupported dialect id " + dialect.getId()); } - throw new UnsupportedOperationException(String.format("Database %s is not yet supported", dialect.getId())); } public static class Builder { diff --git a/sonar-db/src/test/java/org/sonar/db/version/ClobColumnDefTest.java b/sonar-db/src/test/java/org/sonar/db/version/ClobColumnDefTest.java index 68cb352179f..d92f42d28bd 100644 --- a/sonar-db/src/test/java/org/sonar/db/version/ClobColumnDefTest.java +++ b/sonar-db/src/test/java/org/sonar/db/version/ClobColumnDefTest.java @@ -33,16 +33,15 @@ public class ClobColumnDefTest { @Rule public ExpectedException thrown = ExpectedException.none(); + private final ClobColumnDef underTest = new ClobColumnDef.Builder() + .setColumnName("issues") + .setIsNullable(true) + .build(); @Test public void build_string_column_def() throws Exception { - ClobColumnDef def = new ClobColumnDef.Builder() - .setColumnName("issues") - .setIsNullable(true) - .build(); - - assertThat(def.getName()).isEqualTo("issues"); - assertThat(def.isNullable()).isTrue(); + assertThat(underTest.getName()).isEqualTo("issues"); + assertThat(underTest.isNullable()).isTrue(); } @Test @@ -56,49 +55,23 @@ public class ClobColumnDefTest { } @Test - public void generate_sql_type() throws Exception { - ClobColumnDef def = new ClobColumnDef.Builder() - .setColumnName("issues") - .setIsNullable(true) - .build(); - - assertThat(def.generateSqlType(new MsSql())).isEqualTo("NVARCHAR (MAX)"); + public void generate_sql_type_on_mssql() throws Exception { + assertThat(underTest.generateSqlType(new MsSql())).isEqualTo("NVARCHAR (MAX)"); } @Test - public void fail_with_UOE_to_generate_sql_on_h2() throws Exception { - ClobColumnDef def = new ClobColumnDef.Builder() - .setColumnName("issues") - .setIsNullable(true) - .build(); - - thrown.expect(UnsupportedOperationException.class); - - def.generateSqlType(new H2()); + public void generate_sql_type_on_h2() throws Exception { + assertThat(underTest.generateSqlType(new H2())).isEqualTo("CLOB(2147483647)"); } @Test - public void fail_with_UOE_to_generate_sql_on_mysql() throws Exception { - ClobColumnDef def = new ClobColumnDef.Builder() - .setColumnName("issues") - .setIsNullable(true) - .build(); - - thrown.expect(UnsupportedOperationException.class); - - def.generateSqlType(new MySql()); + public void generate_sql_type_on_mysql() throws Exception { + assertThat(underTest.generateSqlType(new MySql())).isEqualTo("LONGTEXT"); } @Test - public void fail_with_UOE_to_generate_sql_on_oracle() throws Exception { - ClobColumnDef def = new ClobColumnDef.Builder() - .setColumnName("issues") - .setIsNullable(true) - .build(); - - thrown.expect(UnsupportedOperationException.class); - - def.generateSqlType(new Oracle()); + public void generate_sql_type_on_oracle() throws Exception { + assertThat(underTest.generateSqlType(new Oracle())).isEqualTo("CLOB"); } @Test -- 2.39.5