diff --git a/ebean-bom/pom.xml b/ebean-bom/pom.xml index e4265aab0..d613c18bc 100644 --- a/ebean-bom/pom.xml +++ b/ebean-bom/pom.xml @@ -62,8 +62,8 @@ io.ebean - ebean-test-docker - ${ebean-test-docker.version} + ebean-test-containers + ${ebean-test-containers.version} diff --git a/ebean-ddl-generator/src/main/java/io/ebeaninternal/dbmigration/model/MTable.java b/ebean-ddl-generator/src/main/java/io/ebeaninternal/dbmigration/model/MTable.java index b9abb5116..4350bdc83 100644 --- a/ebean-ddl-generator/src/main/java/io/ebeaninternal/dbmigration/model/MTable.java +++ b/ebean-ddl-generator/src/main/java/io/ebeaninternal/dbmigration/model/MTable.java @@ -28,7 +28,7 @@ public class MTable { private static final Logger logger = LoggerFactory.getLogger(MTable.class); - private final String name; + private String name; private MTable draftTable; /** * Marked true for draft tables. These need to have their FK references adjusted @@ -408,6 +408,14 @@ public class MTable { addColumn(column.rename(renameColumn.getNewName())); } + /** + * Apply table rename to the model. + */ + public void apply(RenameTable renameTable) { + checkTableName(renameTable.getOldName()); + this.name = renameTable.getNewName(); + } + public String getName() { return name; } @@ -547,7 +555,7 @@ public class MTable { private void checkTableName(String tableName) { if (!name.equals(tableName)) { - throw new IllegalArgumentException("addColumn tableName [" + tableName + "] does not match [" + name + "]"); + throw new IllegalArgumentException("tableName [" + tableName + "] does not match [" + name + "]"); } } diff --git a/ebean-ddl-generator/src/main/java/io/ebeaninternal/dbmigration/model/ModelContainer.java b/ebean-ddl-generator/src/main/java/io/ebeaninternal/dbmigration/model/ModelContainer.java index c9ef40e2d..97af165b4 100644 --- a/ebean-ddl-generator/src/main/java/io/ebeaninternal/dbmigration/model/ModelContainer.java +++ b/ebean-ddl-generator/src/main/java/io/ebeaninternal/dbmigration/model/ModelContainer.java @@ -2,24 +2,7 @@ package io.ebeaninternal.dbmigration.model; import io.ebean.migration.MigrationVersion; import io.ebeaninternal.dbmigration.ddlgeneration.platform.DdlHelp; -import io.ebeaninternal.dbmigration.migration.AddColumn; -import io.ebeaninternal.dbmigration.migration.AddHistoryTable; -import io.ebeaninternal.dbmigration.migration.AddTableComment; -import io.ebeaninternal.dbmigration.migration.AddUniqueConstraint; -import io.ebeaninternal.dbmigration.migration.AlterColumn; -import io.ebeaninternal.dbmigration.migration.AlterForeignKey; -import io.ebeaninternal.dbmigration.migration.AlterTable; -import io.ebeaninternal.dbmigration.migration.ChangeSet; -import io.ebeaninternal.dbmigration.migration.ChangeSetType; -import io.ebeaninternal.dbmigration.migration.CreateIndex; -import io.ebeaninternal.dbmigration.migration.CreateTable; -import io.ebeaninternal.dbmigration.migration.DropColumn; -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.migration.RenameColumn; -import io.ebeaninternal.dbmigration.migration.Sql; +import io.ebeaninternal.dbmigration.migration.*; import io.ebeaninternal.server.deploy.TablespaceMeta; import java.util.ArrayList; @@ -122,14 +105,11 @@ public class ModelContainer { * Apply a migration with associated changeSets to the model. */ public void apply(Migration migration, MigrationVersion version) { - - List changeSets = migration.getChangeSet(); - for (ChangeSet changeSet : changeSets) { + for (ChangeSet changeSet : migration.getChangeSet()) { boolean pending = changeSet.getType() == ChangeSetType.PENDING_DROPS; if (pending) { // un-applied drop columns etc pendingDrops.add(version, changeSet); - } else if (isDropsFor(changeSet)) { pendingDrops.appliedDropsFor(changeSet); } @@ -150,15 +130,15 @@ public class ModelContainer { * Apply a changeSet to the model. */ protected void applyChangeSet(ChangeSet changeSet) { - - List changeSetChildren = changeSet.getChangeSetChildren(); - for (Object change : changeSetChildren) { + for (Object change : changeSet.getChangeSetChildren()) { if (change instanceof CreateTable) { applyChange((CreateTable) change); } else if (change instanceof DropTable) { applyChange((DropTable) change); } else if (change instanceof AlterTable) { applyChange((AlterTable) change); + } else if (change instanceof RenameTable) { + applyChange((RenameTable) change); } else if (change instanceof AlterColumn) { applyChange((AlterColumn) change); } else if (change instanceof AddColumn) { @@ -265,7 +245,7 @@ public class ModelContainer { protected void applyChange(DropTable dropTable) { tables.remove(dropTable.getName()); } - + /** * Apply a AlterTable change to the model. */ @@ -294,6 +274,19 @@ public class ModelContainer { } } + protected void applyChange(RenameTable renameTable) { + MTable notExpected = tables.get(renameTable.getNewName()); + if (notExpected != null) { + throw new IllegalStateException("RenameTable to newName [" + renameTable.getNewName() + "] but this table already exists in the model?"); + } + MTable table = tables.remove(renameTable.getOldName()); + if (table == null) { + throw new IllegalStateException("RenameTable oldName [" + renameTable.getOldName() + "] does not exist in model?"); + } + table.apply(renameTable); + tables.put(renameTable.getNewName(), table); + } + /** * Apply a CreateTable change to the model. */ diff --git a/ebean-ddl-generator/src/test/java/io/ebeaninternal/dbmigration/model/ModelContainerTest.java b/ebean-ddl-generator/src/test/java/io/ebeaninternal/dbmigration/model/ModelContainerTest.java index 2e1272980..7d7823ad6 100644 --- a/ebean-ddl-generator/src/test/java/io/ebeaninternal/dbmigration/model/ModelContainerTest.java +++ b/ebean-ddl-generator/src/test/java/io/ebeaninternal/dbmigration/model/ModelContainerTest.java @@ -10,6 +10,7 @@ import java.util.List; import java.util.Set; import static org.assertj.core.api.Assertions.assertThat; +import static org.assertj.core.api.Assertions.assertThatThrownBy; class ModelContainerTest { @@ -152,6 +153,42 @@ class ModelContainerTest { assertThat(table.getColumn("short_title")).isNull(); } + @Test + void apply_renameTable() { + ModelContainer container = new ModelContainer(); + container.apply(mig("7.0__renameTable.model.xml"), ver("7.0")); + + final MTable table = container.getTable("document_newname"); + assertThat(table.getColumn("title")).isNotNull(); + assertThat(table.getColumn("short_title")).isNull(); + } + + @Test + void apply_renameTable_when_oldTableNotFound() { + ModelContainer container = new ModelContainer(); + + assertThatThrownBy(() -> { + container.apply(mig("7.0__renameTable.errOldTable.xml"), ver("7.0")); + }).isInstanceOf(IllegalStateException.class) + .hasMessageContaining("RenameTable oldName"); + + final MTable table = container.getTable("document"); + assertThat(table.getColumn("title")).isNotNull(); + } + + @Test + void apply_renameTable_when_newTableAlreadyExists() { + ModelContainer container = new ModelContainer(); + + assertThatThrownBy(() -> { + container.apply(mig("7.0__renameTable.errNewTable.xml"), ver("7.0")); + }).isInstanceOf(IllegalStateException.class) + .hasMessageContaining("RenameTable to newName"); + + final MTable table = container.getTable("document"); + assertThat(table.getColumn("title")).isNotNull(); + } + @Test void getSchemas() { MTable t0 = new MTable("foo.one"); diff --git a/ebean-ddl-generator/src/test/resources/io/ebeaninternal/dbmigration/model/7.0__renameTable.errNewTable.xml b/ebean-ddl-generator/src/test/resources/io/ebeaninternal/dbmigration/model/7.0__renameTable.errNewTable.xml new file mode 100644 index 000000000..1fe6d073e --- /dev/null +++ b/ebean-ddl-generator/src/test/resources/io/ebeaninternal/dbmigration/model/7.0__renameTable.errNewTable.xml @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + diff --git a/ebean-ddl-generator/src/test/resources/io/ebeaninternal/dbmigration/model/7.0__renameTable.errOldTable.xml b/ebean-ddl-generator/src/test/resources/io/ebeaninternal/dbmigration/model/7.0__renameTable.errOldTable.xml new file mode 100644 index 000000000..6146632bb --- /dev/null +++ b/ebean-ddl-generator/src/test/resources/io/ebeaninternal/dbmigration/model/7.0__renameTable.errOldTable.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/ebean-ddl-generator/src/test/resources/io/ebeaninternal/dbmigration/model/7.0__renameTable.model.xml b/ebean-ddl-generator/src/test/resources/io/ebeaninternal/dbmigration/model/7.0__renameTable.model.xml new file mode 100644 index 000000000..92a475f1e --- /dev/null +++ b/ebean-ddl-generator/src/test/resources/io/ebeaninternal/dbmigration/model/7.0__renameTable.model.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/ebean-test/pom.xml b/ebean-test/pom.xml index 80335cd9f..616c131bc 100644 --- a/ebean-test/pom.xml +++ b/ebean-test/pom.xml @@ -61,8 +61,8 @@ io.ebean - ebean-test-docker - ${ebean-test-docker.version} + ebean-test-containers + ${ebean-test-containers.version} diff --git a/ebean-test/src/main/java/io/ebean/test/config/platform/ElasticSearchSetup.java b/ebean-test/src/main/java/io/ebean/test/config/platform/ElasticSearchSetup.java index 94799d009..4241c0fca 100644 --- a/ebean-test/src/main/java/io/ebean/test/config/platform/ElasticSearchSetup.java +++ b/ebean-test/src/main/java/io/ebean/test/config/platform/ElasticSearchSetup.java @@ -1,6 +1,6 @@ package io.ebean.test.config.platform; -import io.ebean.docker.commands.ElasticContainer; +import io.ebean.test.containers.ElasticContainer; import java.util.Properties; diff --git a/ebean-test/src/main/java/io/ebean/test/config/platform/PlatformAutoConfig.java b/ebean-test/src/main/java/io/ebean/test/config/platform/PlatformAutoConfig.java index 3569db727..97ce65e38 100644 --- a/ebean-test/src/main/java/io/ebean/test/config/platform/PlatformAutoConfig.java +++ b/ebean-test/src/main/java/io/ebean/test/config/platform/PlatformAutoConfig.java @@ -1,7 +1,7 @@ package io.ebean.test.config.platform; import io.ebean.config.DatabaseConfig; -import io.ebean.docker.container.ContainerFactory; +import io.ebean.test.containers.ContainerFactory; import org.slf4j.Logger; import org.slf4j.LoggerFactory; diff --git a/ebean-test/src/main/java/io/ebean/test/config/platform/RedisSetup.java b/ebean-test/src/main/java/io/ebean/test/config/platform/RedisSetup.java index f83169224..0fd933d26 100644 --- a/ebean-test/src/main/java/io/ebean/test/config/platform/RedisSetup.java +++ b/ebean-test/src/main/java/io/ebean/test/config/platform/RedisSetup.java @@ -1,6 +1,6 @@ package io.ebean.test.config.platform; -import io.ebean.docker.commands.RedisContainer; +import io.ebean.test.containers.RedisContainer; import java.util.Properties; diff --git a/ebean-test/src/main/java/module-info.java b/ebean-test/src/main/java/module-info.java index dbaa250cf..5d86859fb 100644 --- a/ebean-test/src/main/java/module-info.java +++ b/ebean-test/src/main/java/module-info.java @@ -18,7 +18,7 @@ open module io.ebean.test { requires com.fasterxml.jackson.databind; requires com.fasterxml.jackson.datatype.jsr310; - requires transitive io.ebean.docker; + requires transitive io.ebean.test.containers; requires transitive org.assertj.core; requires transitive java.xml.bind; requires transitive com.h2database; diff --git a/ebean-test/src/test/java/main/StartCockroach.java b/ebean-test/src/test/java/main/StartCockroach.java index 35c99df6c..d1d56a4e4 100644 --- a/ebean-test/src/test/java/main/StartCockroach.java +++ b/ebean-test/src/test/java/main/StartCockroach.java @@ -1,6 +1,6 @@ package main; -import io.ebean.docker.commands.CockroachContainer; +import io.ebean.test.containers.CockroachContainer; public class StartCockroach { diff --git a/ebean-test/src/test/java/main/StartDb2.java b/ebean-test/src/test/java/main/StartDb2.java index a704dfbd8..45d514f1f 100644 --- a/ebean-test/src/test/java/main/StartDb2.java +++ b/ebean-test/src/test/java/main/StartDb2.java @@ -1,6 +1,6 @@ package main; -import io.ebean.docker.commands.Db2Container; +import io.ebean.test.containers.Db2Container; public class StartDb2 { diff --git a/ebean-test/src/test/java/main/StartMariaDb.java b/ebean-test/src/test/java/main/StartMariaDb.java index 3d0b9b2f9..81b026828 100644 --- a/ebean-test/src/test/java/main/StartMariaDb.java +++ b/ebean-test/src/test/java/main/StartMariaDb.java @@ -1,6 +1,6 @@ package main; -import io.ebean.docker.commands.MariaDBContainer; +import io.ebean.test.containers.MariaDBContainer; public class StartMariaDb { diff --git a/ebean-test/src/test/java/main/StartMySql.java b/ebean-test/src/test/java/main/StartMySql.java index 6b7656e4f..adbfa24cd 100644 --- a/ebean-test/src/test/java/main/StartMySql.java +++ b/ebean-test/src/test/java/main/StartMySql.java @@ -1,6 +1,6 @@ package main; -import io.ebean.docker.commands.MySqlContainer; +import io.ebean.test.containers.MySqlContainer; public class StartMySql { diff --git a/ebean-test/src/test/java/main/StartNuoDB.java b/ebean-test/src/test/java/main/StartNuoDB.java index 1311d30cf..404d76fef 100644 --- a/ebean-test/src/test/java/main/StartNuoDB.java +++ b/ebean-test/src/test/java/main/StartNuoDB.java @@ -1,6 +1,6 @@ package main; -import io.ebean.docker.commands.NuoDBContainer; +import io.ebean.test.containers.NuoDBContainer; public class StartNuoDB { diff --git a/ebean-test/src/test/java/main/StartOracle.java b/ebean-test/src/test/java/main/StartOracle.java index 66b1510bd..029a34f3d 100644 --- a/ebean-test/src/test/java/main/StartOracle.java +++ b/ebean-test/src/test/java/main/StartOracle.java @@ -1,6 +1,6 @@ package main; -import io.ebean.docker.commands.OracleContainer; +import io.ebean.test.containers.OracleContainer; public class StartOracle { diff --git a/ebean-test/src/test/java/main/StartPostgres.java b/ebean-test/src/test/java/main/StartPostgres.java index adecbcc7e..b65aea1f2 100644 --- a/ebean-test/src/test/java/main/StartPostgres.java +++ b/ebean-test/src/test/java/main/StartPostgres.java @@ -1,6 +1,6 @@ package main; -import io.ebean.docker.commands.PostgresContainer; +import io.ebean.test.containers.PostgresContainer; public class StartPostgres { diff --git a/ebean-test/src/test/java/main/StartSqlServer.java b/ebean-test/src/test/java/main/StartSqlServer.java index d049c312b..167617698 100644 --- a/ebean-test/src/test/java/main/StartSqlServer.java +++ b/ebean-test/src/test/java/main/StartSqlServer.java @@ -1,6 +1,6 @@ package main; -import io.ebean.docker.commands.SqlServerContainer; +import io.ebean.test.containers.SqlServerContainer; public class StartSqlServer { diff --git a/ebean-test/src/test/java/main/StartYugabyte.java b/ebean-test/src/test/java/main/StartYugabyte.java index d9d18b353..6c893192a 100644 --- a/ebean-test/src/test/java/main/StartYugabyte.java +++ b/ebean-test/src/test/java/main/StartYugabyte.java @@ -1,6 +1,6 @@ package main; -import io.ebean.docker.commands.YugabyteContainer; +import io.ebean.test.containers.YugabyteContainer; public class StartYugabyte { diff --git a/pom.xml b/pom.xml index 70aff233c..a57026215 100644 --- a/pom.xml +++ b/pom.xml @@ -44,10 +44,10 @@ 2.0 1.2 13.6.0 - 5.3 + 6.0 8.0 - 13.6.2 - 13.6.2 + 13.6.3 + 13.6.3 false diff --git a/tests/test-java16/pom.xml b/tests/test-java16/pom.xml index 65648a689..1c8a33865 100644 --- a/tests/test-java16/pom.xml +++ b/tests/test-java16/pom.xml @@ -52,7 +52,7 @@ io.ebean querybean-generator - 13.6.3-SNAPSHOT + 13.6.4-SNAPSHOT