diff --git a/src/main/java/io/ebean/dbmigration/DbMigration.java b/src/main/java/io/ebean/dbmigration/DbMigration.java index 1a1e0e9f6..8a9f3f427 100644 --- a/src/main/java/io/ebean/dbmigration/DbMigration.java +++ b/src/main/java/io/ebean/dbmigration/DbMigration.java @@ -7,6 +7,7 @@ import io.ebean.config.dbplatform.DatabasePlatform; import java.io.IOException; import java.util.Iterator; +import java.util.List; import java.util.ServiceLoader; /** @@ -147,6 +148,11 @@ public interface DbMigration { */ void addDatabasePlatform(DatabasePlatform databasePlatform, String prefix); + /** + * Return the list of versions that contain pending drops. + */ + List getPendingDrops(); + /** * Generate the next migration xml file and associated apply and rollback sql scripts. *

diff --git a/src/main/java/io/ebeaninternal/dbmigration/DefaultDbMigration.java b/src/main/java/io/ebeaninternal/dbmigration/DefaultDbMigration.java index 122899571..bf662a91a 100644 --- a/src/main/java/io/ebeaninternal/dbmigration/DefaultDbMigration.java +++ b/src/main/java/io/ebeaninternal/dbmigration/DefaultDbMigration.java @@ -303,6 +303,23 @@ public class DefaultDbMigration implements DbMigration { } } + /** + * Return the versions containing pending drops. + */ + public List getPendingDrops() { + if (!online) { + DbOffline.setGenerateMigration(); + } + setDefaults(); + try { + return createRequest().getPendingDrops(); + } finally { + if (!online) { + DbOffline.reset(); + } + } + } + /** * Load the configuration for each of the target platforms. */ @@ -494,6 +511,9 @@ public class DefaultDbMigration implements DbMigration { if (nextDrop != null) { return nextDrop; } + if (generatePendingDrop != null) { + return generatePendingDrop; + } return migrationConfig.getGeneratePendingDrop(); } @@ -595,9 +615,6 @@ public class DefaultDbMigration implements DbMigration { if (name != null) { migrationConfig.setName(name); } - if (generatePendingDrop != null) { - migrationConfig.setGeneratePendingDrop(generatePendingDrop); - } } } diff --git a/src/test/java/io/ebeaninternal/dbmigration/DbMigrationDropHistoryTest.java b/src/test/java/io/ebeaninternal/dbmigration/DbMigrationDropHistoryTest.java index 10fd869d6..58b3a82bf 100644 --- a/src/test/java/io/ebeaninternal/dbmigration/DbMigrationDropHistoryTest.java +++ b/src/test/java/io/ebeaninternal/dbmigration/DbMigrationDropHistoryTest.java @@ -2,7 +2,6 @@ package io.ebeaninternal.dbmigration; import io.ebean.EbeanServer; import io.ebean.EbeanServerFactory; -import io.ebean.annotation.Platform; import io.ebean.config.ServerConfig; import org.junit.Test; import org.slf4j.Logger; @@ -13,6 +12,7 @@ import java.io.IOException; import java.nio.file.Files; import java.nio.file.Path; import java.util.Arrays; +import java.util.List; import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.StrictAssertions.assertThatThrownBy; @@ -71,8 +71,11 @@ public class DbMigrationDropHistoryTest { assertThat(migration.generateMigration()).isNull(); // subsequent call + List pendingDrops = migration.getPendingDrops(); + assertThat(pendingDrops).contains("1.1"); - System.setProperty("ddl.migration.pendingDropsFor", "1.1"); + //System.setProperty("ddl.migration.pendingDropsFor", "1.1"); + migration.setGeneratePendingDrop("1.1"); assertThat(migration.generateMigration()).isEqualTo("1.2__dropsFor_1.1"); assertThatThrownBy(()->migration.generateMigration()) .isInstanceOf(IllegalArgumentException.class)