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 4a8948c0b..94deb10d1 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 @@ -583,6 +583,12 @@ public class BaseTableDdl implements TableDdl { } } + for (Column column : columns) { + if (hasValue(column.getReferences())) { + writeForeignKey(writer, tableName, column); + } + } + // add a bit of whitespace writer.apply().end(); } diff --git a/src/test/java/com/avaje/ebean/dbmigration/ddlgeneration/BaseDdlHandlerTest.java b/src/test/java/com/avaje/ebean/dbmigration/ddlgeneration/BaseDdlHandlerTest.java index a84b0fc9c..61f0e757b 100644 --- a/src/test/java/com/avaje/ebean/dbmigration/ddlgeneration/BaseDdlHandlerTest.java +++ b/src/test/java/com/avaje/ebean/dbmigration/ddlgeneration/BaseDdlHandlerTest.java @@ -35,6 +35,23 @@ public class BaseDdlHandlerTest extends BaseTestCase { handler.generate(write, Helper.getAddColumn()); assertThat(write.apply().getBuffer()).isEqualTo("alter table foo add column added_to_foo varchar(20);\n\n"); + } + + + @Test + public void addColumn_withForeignKey() throws Exception { + + DdlWrite write = new DdlWrite(); + + DdlHandler handler = h2Handler(); + handler.generate(write, Helper.getAlterTableAddColumn()); + + String buffer = write.apply().getBuffer(); + assertThat(buffer).contains("alter table foo add column some_id integer;"); + + String fkBuffer = write.applyForeignKeys().getBuffer(); + assertThat(fkBuffer).contains("alter table foo add constraint fk_foo_some_id foreign key (some_id) references bar (id) on delete restrict on update restrict;"); + assertThat(fkBuffer).contains("create index idx_foo_some_id on foo (some_id);"); assertThat(write.dropAll().getBuffer()).isEqualTo(""); } diff --git a/src/test/java/com/avaje/ebean/dbmigration/ddlgeneration/Helper.java b/src/test/java/com/avaje/ebean/dbmigration/ddlgeneration/Helper.java index f1616c2ea..5c0b307fc 100644 --- a/src/test/java/com/avaje/ebean/dbmigration/ddlgeneration/Helper.java +++ b/src/test/java/com/avaje/ebean/dbmigration/ddlgeneration/Helper.java @@ -20,14 +20,23 @@ public class Helper { static Migration migration = MigrationXmlReader.read("/container/test-create-table.xml"); + static Migration alterTableMigration = MigrationXmlReader.read("/container/test-alter-table.xml"); + static ChangeSet changeSet; static List changeSetChildren; + static ChangeSet alterTableChangeSet; + + static List alterTableChangeSetChildren; + static { List changeSets = migration.getChangeSet(); changeSet = changeSets.get(0); changeSetChildren = changeSet.getChangeSetChildren(); + + alterTableChangeSet = alterTableMigration.getChangeSet().get(0); + alterTableChangeSetChildren = alterTableChangeSet.getChangeSetChildren(); } public static ChangeSet getChangeSet() { @@ -42,6 +51,10 @@ public class Helper { return (AddColumn) changeSetChildren.get(1); } + public static AddColumn getAlterTableAddColumn() { + return (AddColumn) alterTableChangeSetChildren.get(0); + } + public static DropColumn getDropColumn() { return (DropColumn) changeSetChildren.get(2); } diff --git a/src/test/resources/container/test-alter-table.xml b/src/test/resources/container/test-alter-table.xml new file mode 100644 index 000000000..de71943e6 --- /dev/null +++ b/src/test/resources/container/test-alter-table.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + \ No newline at end of file