From 8a853b28f307b90f1da5fe984c2c28010e84382e Mon Sep 17 00:00:00 2001 From: Robin Bygrave Date: Mon, 11 Jul 2016 21:25:58 +1200 Subject: [PATCH] #772 - DB Migration DDL - alter table add column ... needs type conversion when using multiple platforms. e.g. varchar(20) ... convert to varchar2(20) for Oracle --- .../ddlgeneration/platform/BaseTableDdl.java | 3 ++- .../platform/BaseTableDdlTest.java | 18 ++++++++++++++++++ 2 files changed, 20 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/avaje/ebean/dbmigration/ddlgeneration/platform/BaseTableDdl.java b/src/main/java/com/avaje/ebean/dbmigration/ddlgeneration/platform/BaseTableDdl.java index c20d09fe5..4a8948c0b 100644 --- a/src/main/java/com/avaje/ebean/dbmigration/ddlgeneration/platform/BaseTableDdl.java +++ b/src/main/java/com/avaje/ebean/dbmigration/ddlgeneration/platform/BaseTableDdl.java @@ -831,9 +831,10 @@ public class BaseTableDdl implements TableDdl { protected void alterTableAddColumn(DdlBuffer buffer, String tableName, Column column, boolean onHistoryTable) throws IOException { + String convertedType = platformDdl.convert(column.getType(), false); buffer.append("alter table ").append(tableName) .append(" add column ").append(column.getName()) - .append(" ").append(column.getType()); + .append(" ").append(convertedType); if (!onHistoryTable) { if (isTrue(column.isNotnull())) { diff --git a/src/test/java/com/avaje/ebean/dbmigration/ddlgeneration/platform/BaseTableDdlTest.java b/src/test/java/com/avaje/ebean/dbmigration/ddlgeneration/platform/BaseTableDdlTest.java index 3573dcfbb..74af93921 100644 --- a/src/test/java/com/avaje/ebean/dbmigration/ddlgeneration/platform/BaseTableDdlTest.java +++ b/src/test/java/com/avaje/ebean/dbmigration/ddlgeneration/platform/BaseTableDdlTest.java @@ -3,6 +3,7 @@ package com.avaje.ebean.dbmigration.ddlgeneration.platform; import com.avaje.ebean.config.ServerConfig; import com.avaje.ebean.config.dbplatform.H2Platform; +import com.avaje.ebean.config.dbplatform.OraclePlatform; import com.avaje.ebean.dbmigration.ddlgeneration.DdlWrite; import com.avaje.ebean.dbmigration.ddlgeneration.Helper; import com.avaje.ebean.dbmigration.migration.AddTableComment; @@ -40,6 +41,23 @@ public class BaseTableDdlTest { assertThat(ddl).contains("alter table mytab add constraint ck_mytab_acol check (acol in ('A','B'))"); } + @Test + public void testAddColumn_withTypeConversion() throws IOException { + + BaseTableDdl ddlGen = new BaseTableDdl(serverConfig, new OraclePlatform().getPlatformDdl()); + + DdlWrite write = new DdlWrite(); + + Column column = new Column(); + column.setName("col_name"); + column.setType("varchar(20)"); + + ddlGen.alterTableAddColumn(write.apply(), "mytable", column, false); + + String ddl = write.apply().getBuffer(); + assertThat(ddl).contains("alter table mytable add column col_name varchar2(20)"); + } + @Test public void testAlterColumnComment() throws IOException {