Refactor PlatformDdl separate call to asIdentityColumn() (#1961)

This commit is contained in:
Rob Bygrave
2020-03-01 10:42:41 +13:00
committed by GitHub
parent 6d1c3738de
commit 2236e4bfd7
12 changed files with 90 additions and 90 deletions
@@ -44,8 +44,8 @@ public abstract class AbstractHanaDdl extends PlatformDdl {
String columnName = alter.getColumnName();
String currentType = alter.getCurrentType();
String type = alter.getType() != null ? alter.getType() : currentType;
type = convert(type, false);
currentType = convert(currentType, false);
type = convert(type);
currentType = convert(currentType);
boolean notnull = (alter.isNotnull() != null) ? alter.isNotnull() : Boolean.TRUE.equals(alter.isCurrentNotnull());
String notnullClause = notnull ? " not null" : "";
String defaultValue = DdlHelp.isDropDefault(alter.getDefaultValue()) ? "null"
@@ -103,7 +103,7 @@ public abstract class AbstractHanaDdl extends PlatformDdl {
protected String convertArrayType(String logicalArrayType) {
Matcher matcher = ARRAY_PATTERN.matcher(logicalArrayType);
if (matcher.matches()) {
return convert(matcher.group(1), false) + " array" + (matcher.group(2) == null ? "" : matcher.group(2));
return convert(matcher.group(1)) + " array" + (matcher.group(2) == null ? "" : matcher.group(2));
} else {
return fallbackArrayType;
}
@@ -195,7 +195,7 @@ public abstract class DbTriggerBasedHistoryDdl implements PlatformHistoryDdl {
*/
protected void writeColumnDefinition(DdlBuffer buffer, String columnName, String type) throws IOException {
String platformType = platformDdl.convert(type, false);
String platformType = platformDdl.convert(type);
buffer.append(" ");
buffer.append(platformDdl.lowerColumnName(columnName), 29);
buffer.append(platformType);
@@ -109,7 +109,7 @@ public class HanaHistoryDdl implements PlatformHistoryDdl {
protected void writeColumnDefinition(DdlBuffer buffer, String columnName, String type, String defaultValue,
boolean isNotNull, String generated) throws IOException {
String platformType = platformDdl.convert(type, false);
String platformType = platformDdl.convert(type);
buffer.append(" ").append(platformDdl.lowerColumnName(columnName));
buffer.append(" ").append(platformType);
if (defaultValue != null) {
@@ -107,7 +107,7 @@ public class MySqlDdl extends PlatformDdl {
String tableName = alter.getTableName();
String columnName = alter.getColumnName();
String type = alter.getType() != null ? alter.getType() : alter.getCurrentType();
type = convert(type, false);
type = convert(type);
boolean notnull = (alter.isNotnull() != null) ? alter.isNotnull() : Boolean.TRUE.equals(alter.isCurrentNotnull());
String notnullClause = notnull ? " not null" : "";
@@ -246,12 +246,14 @@ public class PlatformDdl {
*/
protected void writeColumnDefinition(DdlBuffer buffer, Column column, boolean useIdentity) throws IOException {
boolean identityColumn = useIdentity && isTrue(column.isPrimaryKey());
String platformType = convert(column.getType(), identityColumn);
String columnDefn = convert(column.getType());
if (useIdentity && isTrue(column.isPrimaryKey())) {
columnDefn = asIdentityColumn(columnDefn);
}
buffer.append(" ");
buffer.append(lowerColumnName(column.getName()), 29);
buffer.append(platformType);
buffer.append(columnDefn);
if (!Boolean.TRUE.equals(column.isPrimaryKey())) {
String defaultValue = convertDefaultValue(column.getDefaultValue());
if (defaultValue != null) {
@@ -297,15 +299,14 @@ public class PlatformDdl {
/**
* Convert the standard type to the platform specific type.
*/
public String convert(String type, boolean identity) {
public String convert(String type) {
if (type == null) {
return null;
}
if (type.contains("[]")) {
return convertArrayType(type);
}
String platformType = typeConverter.convert(type);
return identity ? asIdentityColumn(platformType) : platformType;
return typeConverter.convert(type);
}
/**
@@ -511,13 +512,12 @@ public class PlatformDdl {
public void alterTableAddColumn(DdlBuffer buffer, String tableName, Column column, boolean onHistoryTable, String defaultValue) throws IOException {
String convertedType = convert(column.getType(), false);
String convertedType = convert(column.getType());
buffer.append("alter table ").append(tableName)
.append(" ").append(addColumn).append(" ").append(column.getName())
.append(" ").append(convertedType);
// Add default value also to history table if it is not excluded
if (defaultValue != null) {
if (!onHistoryTable || !isTrue(column.isHistoryExclude())) {
@@ -568,7 +568,7 @@ public class PlatformDdl {
* </p>
*/
public String alterColumnType(String tableName, String columnName, String type) {
return "alter table " + tableName + " " + alterColumn + " " + columnName + " " + columnSetType + convert(type, false) + alterColumnSuffix;
return "alter table " + tableName + " " + alterColumn + " " + columnName + " " + columnSetType + convert(type) + alterColumnSuffix;
}
/**
@@ -157,7 +157,7 @@ public class SqlServerDdl extends PlatformDdl {
String tableName = alter.getTableName();
String columnName = alter.getColumnName();
String type = alter.getType() != null ? alter.getType() : alter.getCurrentType();
type = convert(type, false);
type = convert(type);
boolean notnull = (alter.isNotnull() != null) ? alter.isNotnull() : Boolean.TRUE.equals(alter.isCurrentNotnull());
String notnullClause = notnull ? " not null" : "";
@@ -11,17 +11,17 @@ public class H2PlatformTest {
@Test
public void testTypeConversion() {
PlatformDdl ddl = PlatformDdlBuilder.create(new H2Platform());
assertThat(ddl.convert("clob", false)).isEqualTo("clob");
assertThat(ddl.convert("json", false)).isEqualTo("clob");
assertThat(ddl.convert("jsonb", false)).isEqualTo("clob");
assertThat(ddl.convert("varchar(20)", false)).isEqualTo("varchar(20)");
assertThat(ddl.convert("decimal(10)", false)).isEqualTo("decimal(10)");
assertThat(ddl.convert("decimal(8,4)", false)).isEqualTo("decimal(8,4)");
assertThat(ddl.convert("boolean", false)).isEqualTo("boolean");
assertThat(ddl.convert("bit", false)).isEqualTo("bit");
assertThat(ddl.convert("clob")).isEqualTo("clob");
assertThat(ddl.convert("json")).isEqualTo("clob");
assertThat(ddl.convert("jsonb")).isEqualTo("clob");
assertThat(ddl.convert("varchar(20)")).isEqualTo("varchar(20)");
assertThat(ddl.convert("decimal(10)")).isEqualTo("decimal(10)");
assertThat(ddl.convert("decimal(8,4)")).isEqualTo("decimal(8,4)");
assertThat(ddl.convert("boolean")).isEqualTo("boolean");
assertThat(ddl.convert("bit")).isEqualTo("bit");
}
}
@@ -17,29 +17,29 @@ public class HanaPlatformTest {
PlatformDdl ddl = PlatformDdlBuilder.create(platform);
assertThat(ddl.convert("clob", false)).isEqualTo("nclob");
assertThat(ddl.convert("blob", false)).isEqualTo("blob");
assertThat(ddl.convert("json", false)).isEqualTo("nclob");
assertThat(ddl.convert("jsonb", false)).isEqualTo("nclob");
assertThat(ddl.convert("jsonvarchar", false)).isEqualTo("nvarchar(255)");
assertThat(ddl.convert("clob")).isEqualTo("nclob");
assertThat(ddl.convert("blob")).isEqualTo("blob");
assertThat(ddl.convert("json")).isEqualTo("nclob");
assertThat(ddl.convert("jsonb")).isEqualTo("nclob");
assertThat(ddl.convert("jsonvarchar")).isEqualTo("nvarchar(255)");
assertThat(ddl.convert("double", false)).isEqualTo("double");
assertThat(ddl.convert("varchar(20)", false)).isEqualTo("nvarchar(20)");
assertThat(ddl.convert("decimal(10)", false)).isEqualTo("decimal(10)");
assertThat(ddl.convert("decimal(8,4)", false)).isEqualTo("decimal(8,4)");
assertThat(ddl.convert("boolean", false)).isEqualTo("boolean");
assertThat(ddl.convert("bit", false)).isEqualTo("smallint");
assertThat(ddl.convert("tinyint", false)).isEqualTo("smallint");
assertThat(ddl.convert("binary", false)).isEqualTo("varbinary(255)");
assertThat(ddl.convert("binary(16)", false)).isEqualTo("varbinary(16)");
assertThat(ddl.convert("point", false)).isEqualTo("st_point");
assertThat(ddl.convert("multilinestring", false)).isEqualTo("st_geometry");
assertThat(ddl.convert("multipolygon", false)).isEqualTo("st_geometry");
assertThat(ddl.convert("multipoint", false)).isEqualTo("st_geometry");
assertThat(ddl.convert("linestring", false)).isEqualTo("st_geometry");
assertThat(ddl.convert("polygon", false)).isEqualTo("st_geometry");
assertThat(ddl.convert("double")).isEqualTo("double");
assertThat(ddl.convert("varchar(20)")).isEqualTo("nvarchar(20)");
assertThat(ddl.convert("decimal(10)")).isEqualTo("decimal(10)");
assertThat(ddl.convert("decimal(8,4)")).isEqualTo("decimal(8,4)");
assertThat(ddl.convert("boolean")).isEqualTo("boolean");
assertThat(ddl.convert("bit")).isEqualTo("smallint");
assertThat(ddl.convert("tinyint")).isEqualTo("smallint");
assertThat(ddl.convert("binary")).isEqualTo("varbinary(255)");
assertThat(ddl.convert("binary(16)")).isEqualTo("varbinary(16)");
assertThat(ddl.convert("point")).isEqualTo("st_point");
assertThat(ddl.convert("multilinestring")).isEqualTo("st_geometry");
assertThat(ddl.convert("multipolygon")).isEqualTo("st_geometry");
assertThat(ddl.convert("multipoint")).isEqualTo("st_geometry");
assertThat(ddl.convert("linestring")).isEqualTo("st_geometry");
assertThat(ddl.convert("polygon")).isEqualTo("st_geometry");
}
@Test
@@ -15,12 +15,12 @@ public class MySqlPlatformTest {
@Test
public void testTypeConversion() {
PlatformDdl ddl = PlatformDdlBuilder.create(mySqlPlatform);
assertThat(ddl.convert("clob", false)).isEqualTo("longtext");
assertThat(ddl.convert("json", false)).isEqualTo("json");
assertThat(ddl.convert("jsonb", false)).isEqualTo("json");
assertThat(ddl.convert("varchar(20)", false)).isEqualTo("varchar(20)");
assertThat(ddl.convert("boolean", false)).isEqualTo("tinyint(1)");
assertThat(ddl.convert("bit", false)).isEqualTo("tinyint(1)");
assertThat(ddl.convert("clob")).isEqualTo("longtext");
assertThat(ddl.convert("json")).isEqualTo("json");
assertThat(ddl.convert("jsonb")).isEqualTo("json");
assertThat(ddl.convert("varchar(20)")).isEqualTo("varchar(20)");
assertThat(ddl.convert("boolean")).isEqualTo("tinyint(1)");
assertThat(ddl.convert("bit")).isEqualTo("tinyint(1)");
}
@Test
@@ -17,19 +17,19 @@ public class OraclePlatformTest {
PlatformDdl ddl = PlatformDdlBuilder.create(platform);
assertThat(ddl.convert("clob", false)).isEqualTo("clob");
assertThat(ddl.convert("blob", false)).isEqualTo("blob");
assertThat(ddl.convert("json", false)).isEqualTo("clob");
assertThat(ddl.convert("jsonb", false)).isEqualTo("clob");
assertThat(ddl.convert("clob")).isEqualTo("clob");
assertThat(ddl.convert("blob")).isEqualTo("blob");
assertThat(ddl.convert("json")).isEqualTo("clob");
assertThat(ddl.convert("jsonb")).isEqualTo("clob");
assertThat(ddl.convert("double", false)).isEqualTo("number(19,4)");
assertThat(ddl.convert("varchar(20)", false)).isEqualTo("varchar2(20)");
assertThat(ddl.convert("decimal(10)", false)).isEqualTo("number(10)");
assertThat(ddl.convert("decimal(8,4)", false)).isEqualTo("number(8,4)");
assertThat(ddl.convert("boolean", false)).isEqualTo("number(1)");
assertThat(ddl.convert("bit", false)).isEqualTo("bit");
assertThat(ddl.convert("tinyint", false)).isEqualTo("number(3)");
assertThat(ddl.convert("binary(16)", false)).isEqualTo("raw(16)");
assertThat(ddl.convert("double")).isEqualTo("number(19,4)");
assertThat(ddl.convert("varchar(20)")).isEqualTo("varchar2(20)");
assertThat(ddl.convert("decimal(10)")).isEqualTo("number(10)");
assertThat(ddl.convert("decimal(8,4)")).isEqualTo("number(8,4)");
assertThat(ddl.convert("boolean")).isEqualTo("number(1)");
assertThat(ddl.convert("bit")).isEqualTo("bit");
assertThat(ddl.convert("tinyint")).isEqualTo("number(3)");
assertThat(ddl.convert("binary(16)")).isEqualTo("raw(16)");
}
@Test
@@ -17,19 +17,19 @@ public class PostgresPlatformTest {
PostgresPlatform platform = new PostgresPlatform();
PlatformDdl ddl = PlatformDdlBuilder.create(platform);
assertThat(ddl.convert("clob", false)).isEqualTo("text");
assertThat(ddl.convert("blob", false)).isEqualTo("bytea");
assertThat(ddl.convert("json", false)).isEqualTo("json");
assertThat(ddl.convert("jsonb", false)).isEqualTo("jsonb");
assertThat(ddl.convert("hstore", false)).isEqualTo("hstore");
assertThat(ddl.convert("double", false)).isEqualTo("float");
assertThat(ddl.convert("tinyint", false)).isEqualTo("smallint");
assertThat(ddl.convert("double", false)).isEqualTo("float");
assertThat(ddl.convert("varchar(20)", false)).isEqualTo("varchar(20)");
assertThat(ddl.convert("decimal(10)", false)).isEqualTo("decimal(10)");
assertThat(ddl.convert("decimal(8,4)", false)).isEqualTo("decimal(8,4)");
assertThat(ddl.convert("boolean", false)).isEqualTo("boolean");
assertThat(ddl.convert("bit", false)).isEqualTo("bit");
assertThat(ddl.convert("clob")).isEqualTo("text");
assertThat(ddl.convert("blob")).isEqualTo("bytea");
assertThat(ddl.convert("json")).isEqualTo("json");
assertThat(ddl.convert("jsonb")).isEqualTo("jsonb");
assertThat(ddl.convert("hstore")).isEqualTo("hstore");
assertThat(ddl.convert("double")).isEqualTo("float");
assertThat(ddl.convert("tinyint")).isEqualTo("smallint");
assertThat(ddl.convert("double")).isEqualTo("float");
assertThat(ddl.convert("varchar(20)")).isEqualTo("varchar(20)");
assertThat(ddl.convert("decimal(10)")).isEqualTo("decimal(10)");
assertThat(ddl.convert("decimal(8,4)")).isEqualTo("decimal(8,4)");
assertThat(ddl.convert("boolean")).isEqualTo("boolean");
assertThat(ddl.convert("bit")).isEqualTo("bit");
}
@@ -17,19 +17,19 @@ public class SqlserverPlatformTest {
PlatformDdl ddl = PlatformDdlBuilder.create(platform);
assertThat(ddl.convert("clob", false)).isEqualTo("nvarchar(max)");
assertThat(ddl.convert("blob", false)).isEqualTo("image");
assertThat(ddl.convert("json", false)).isEqualTo("nvarchar(max)");
assertThat(ddl.convert("jsonb", false)).isEqualTo("nvarchar(max)");
assertThat(ddl.convert("clob")).isEqualTo("nvarchar(max)");
assertThat(ddl.convert("blob")).isEqualTo("image");
assertThat(ddl.convert("json")).isEqualTo("nvarchar(max)");
assertThat(ddl.convert("jsonb")).isEqualTo("nvarchar(max)");
assertThat(ddl.convert("double", false)).isEqualTo("float(32)");
assertThat(ddl.convert("varchar(20)", false)).isEqualTo("nvarchar(20)");
assertThat(ddl.convert("decimal(10)", false)).isEqualTo("numeric(10)");
assertThat(ddl.convert("decimal(8,4)", false)).isEqualTo("numeric(8,4)");
assertThat(ddl.convert("boolean", false)).isEqualTo("bit");
assertThat(ddl.convert("bit", false)).isEqualTo("bit");
assertThat(ddl.convert("tinyint", false)).isEqualTo("smallint");
assertThat(ddl.convert("binary(16)", false)).isEqualTo("binary(16)");
assertThat(ddl.convert("double")).isEqualTo("float(32)");
assertThat(ddl.convert("varchar(20)")).isEqualTo("nvarchar(20)");
assertThat(ddl.convert("decimal(10)")).isEqualTo("numeric(10)");
assertThat(ddl.convert("decimal(8,4)")).isEqualTo("numeric(8,4)");
assertThat(ddl.convert("boolean")).isEqualTo("bit");
assertThat(ddl.convert("bit")).isEqualTo("bit");
assertThat(ddl.convert("tinyint")).isEqualTo("smallint");
assertThat(ddl.convert("binary(16)")).isEqualTo("binary(16)");
}
@Test