diff --git a/src/main/java/io/ebeaninternal/dbmigration/model/ModelContainer.java b/src/main/java/io/ebeaninternal/dbmigration/model/ModelContainer.java index f2daca21b..d92adfb61 100644 --- a/src/main/java/io/ebeaninternal/dbmigration/model/ModelContainer.java +++ b/src/main/java/io/ebeaninternal/dbmigration/model/ModelContainer.java @@ -184,13 +184,12 @@ public class ModelContainer { /** * Unset the withHistory flag on the associated base table. */ - private void applyChange(DropHistoryTable change) { + protected void applyChange(DropHistoryTable change) { MTable table = tables.get(change.getBaseTable()); - if (table == null) { - throw new IllegalStateException("Table [" + change.getBaseTable() + "] does not exist in model?"); + if (table != null) { + table.setWithHistory(false); } - table.setWithHistory(false); } private void applyChange(AddUniqueConstraint change) { @@ -241,19 +240,14 @@ public class ModelContainer { if (tables.containsKey(tableName)) { throw new IllegalStateException("Table [" + tableName + "] already exists in model?"); } - MTable table = new MTable(createTable); - tables.put(tableName, table); + tables.put(tableName, new MTable(createTable)); } /** * Apply a DropTable change to the model. */ protected void applyChange(DropTable dropTable) { - String tableName = dropTable.getName(); - if (!tables.containsKey(tableName)) { - throw new IllegalStateException("Table [" + tableName + "] does not exists in model?"); - } - tables.remove(tableName); + tables.remove(dropTable.getName()); } /** @@ -264,22 +258,16 @@ public class ModelContainer { if (indexes.containsKey(indexName)) { throw new IllegalStateException("Index [" + indexName + "] already exists in model?"); } - MIndex index = new MIndex(createIndex); - indexes.put(createIndex.getIndexName(), index); + indexes.put(createIndex.getIndexName(), new MIndex(createIndex)); } /** * Apply a DropTable change to the model. */ protected void applyChange(DropIndex dropIndex) { - String name = dropIndex.getIndexName(); - if (!indexes.containsKey(name)) { - throw new IllegalStateException("Index [" + name + "] does not exist in model?"); - } - indexes.remove(name); + indexes.remove(dropIndex.getIndexName()); } - /** * Apply a AddColumn change to the model. */ diff --git a/src/test/java/io/ebeaninternal/dbmigration/model/ModelContainerTest.java b/src/test/java/io/ebeaninternal/dbmigration/model/ModelContainerTest.java index ae05f368b..591e7aa99 100644 --- a/src/test/java/io/ebeaninternal/dbmigration/model/ModelContainerTest.java +++ b/src/test/java/io/ebeaninternal/dbmigration/model/ModelContainerTest.java @@ -1,6 +1,9 @@ package io.ebeaninternal.dbmigration.model; +import io.ebeaninternal.dbmigration.migration.DropHistoryTable; +import io.ebeaninternal.dbmigration.migration.DropIndex; +import io.ebeaninternal.dbmigration.migration.DropTable; import io.ebeaninternal.dbmigration.migration.Migration; import io.ebeaninternal.dbmigration.migrationreader.MigrationXmlReader; import org.junit.Test; @@ -79,6 +82,31 @@ public class ModelContainerTest { assertThat(container.getPendingDrops()).isEmpty(); } + @Test + public void apply_dropTable_when_notInModel_then_ok() { + + ModelContainer container = new ModelContainer(); + container.apply(mig("5.0__dropTable.model.xml"), ver("5.0")); + assertThat(container.getTables()).isEmpty(); + } + + @Test + public void apply_drop_when_notInModel_then_ok() { + + ModelContainer container = new ModelContainer(); + DropTable dropTable = new DropTable(); + dropTable.setName("DoesNotExist"); + container.applyChange(dropTable); + + DropIndex dropIndex = new DropIndex(); + dropIndex.setIndexName("DoesNotExist"); + container.applyChange(dropIndex); + + DropHistoryTable dropHistoryTable = new DropHistoryTable(); + dropHistoryTable.setBaseTable("DoesNotExist"); + container.applyChange(dropHistoryTable); + } + private ModelContainer container_2_1() { ModelContainer container = new ModelContainer(); container.apply(mig("2.0.model.xml"), ver("2.0")); diff --git a/src/test/resources/io/ebeaninternal/dbmigration/model/5.0__dropTable.model.xml b/src/test/resources/io/ebeaninternal/dbmigration/model/5.0__dropTable.model.xml new file mode 100644 index 000000000..5085a7aba --- /dev/null +++ b/src/test/resources/io/ebeaninternal/dbmigration/model/5.0__dropTable.model.xml @@ -0,0 +1,6 @@ + + + + + +