create primary keys on directly on table creation instead of a seperate operation
This commit is contained in:
@@ -152,11 +152,18 @@ public class MigrationBuilderGenerator {
|
||||
private String addTableOp(AddTableOperation op) {
|
||||
imports.add(List.class);
|
||||
imports.add(AddFieldOperation.class);
|
||||
imports.add(AddFieldOperation.Builder.class);
|
||||
if (op.getPrimaryKey() != null) {
|
||||
imports.add(AddPrimaryKeyOperation.class);
|
||||
}
|
||||
return "mb.addTable(\"" + op.getTable() + "\", List.of(\n"
|
||||
+ op.getFields().stream()
|
||||
/**/.map(f -> " new AddFieldOperation.Builder(\"" + op.getTable() + "\", \"" + f.build().getField() + "\")" + addFieldOpOptional(f.build()).replace("\n", "\n "))
|
||||
/**/.collect(Collectors.joining(",\n")) + "\n"
|
||||
/**/.collect(Collectors.joining(",\n")) + "),\n"
|
||||
+ (op.getPrimaryKey() != null
|
||||
? " new AddPrimaryKeyOperation.Builder(\"" + op.getPrimaryKey().build().getName() + "\", \"" + op.getPrimaryKey().build().getTable() + "\", List.of("
|
||||
+ op.getPrimaryKey().build().getFields().stream().map(e -> "\"" + e + "\"").collect(Collectors.joining(", "))
|
||||
+ ")"
|
||||
: " null")
|
||||
+ "));";
|
||||
}
|
||||
|
||||
|
||||
@@ -146,7 +146,10 @@ public class MigrationCreator {
|
||||
.map(e -> new AddFieldOperation.Builder(toEntity.getName(), e.getName())
|
||||
.notNull(e.isNotNull())
|
||||
.sqlType(getSqlType(e)))
|
||||
.toList()
|
||||
.toList(),
|
||||
Optional.ofNullable(toEntity.getPrimaryKey())
|
||||
.map(e -> new AddPrimaryKeyOperation.Builder(e.getName(), toEntity.getName(), e.getFields().stream().map(DbField::getName).toList()))
|
||||
.orElse(null)
|
||||
));
|
||||
}
|
||||
}
|
||||
@@ -265,7 +268,9 @@ public class MigrationCreator {
|
||||
var involvedFields = toEntity.getFields();
|
||||
var involvedForeignKeys = originalEntity.getPrimaryKey() != null
|
||||
&& originalEntity.getPrimaryKey().getFields().stream().anyMatch(involvedFields::contains);
|
||||
if (involvedForeignKeys) {
|
||||
var alreadyCreatedDuringTableCreation = steps.stream().anyMatch(e -> e instanceof AddTableOperation.Builder ato
|
||||
&& ato.build().getTable().equals(originalEntity.getPrimaryKey().getEntity().getName()));
|
||||
if (involvedForeignKeys && !alreadyCreatedDuringTableCreation) {
|
||||
steps.add(new AddPrimaryKeyOperation.Builder(
|
||||
originalEntity.getPrimaryKey().getName(),
|
||||
originalEntity.getPrimaryKey().getEntity().getName(),
|
||||
@@ -347,6 +352,12 @@ public class MigrationCreator {
|
||||
|
||||
private void addPrimaryKeyDropGeneration(ModelBuilder fromReduced, ModelBuilder toReduced, ModelBuilder from, ModelBuilder to, List<MigrationOperation.Builder<?>> steps) {
|
||||
for (var fromEntity : fromReduced.getEntities()) {
|
||||
var toEntity = toReduced.getEntity(fromEntity.getTypeName());
|
||||
if (toEntity == null) {
|
||||
//table will be dropped -> no need to drop the primary key separately
|
||||
continue;
|
||||
}
|
||||
|
||||
var originalEntity = from.getEntities().stream().filter(e -> e.getName().equals(fromEntity.getName())).findFirst().orElse(null);
|
||||
Check.notNull(originalEntity, "originalEntity"); //may never be null
|
||||
var involvedFields = fromEntity.getFields();
|
||||
|
||||
@@ -46,19 +46,17 @@ public class MigrationCreatorAddEntityTest extends MigrationCreatorTestBase {
|
||||
}
|
||||
|
||||
private void validateUp(MigrationCreator.Result res) {
|
||||
assertEquals(3, res.getStepsUp().size());
|
||||
assertEquals(2, res.getStepsUp().size());
|
||||
assertEquals(1, res.getStepsUp().stream()
|
||||
.filter(e -> e instanceof AddTableOperation o
|
||||
&& o.getTable().equals("AddedEntity")
|
||||
&& o.getFields().size() == 2
|
||||
&& o.getFields().stream().filter(f -> f.build().getField().equals("id")).count() == 1
|
||||
&& o.getFields().stream().filter(f -> f.build().getField().equals("addedField")).count() == 1)
|
||||
.count());
|
||||
assertEquals(1, res.getStepsUp().stream()
|
||||
.filter(e -> e instanceof AddPrimaryKeyOperation o
|
||||
&& o.getTable().equals("AddedEntity")
|
||||
&& o.getFields().size() == 1
|
||||
&& o.getFields().get(0).equals("id"))
|
||||
&& o.getFields().stream().filter(f -> f.build().getField().equals("addedField")).count() == 1
|
||||
&& o.getPrimaryKey() != null
|
||||
&& o.getPrimaryKey().build().getTable().equals("AddedEntity")
|
||||
&& o.getPrimaryKey().build().getFields().size() == 1
|
||||
&& o.getPrimaryKey().build().getFields().get(0).equals("id"))
|
||||
.count());
|
||||
assertEquals(1, res.getStepsUp().stream()
|
||||
.filter(e -> e instanceof AddForeignKeyOperation o
|
||||
@@ -72,17 +70,12 @@ public class MigrationCreatorAddEntityTest extends MigrationCreatorTestBase {
|
||||
}
|
||||
|
||||
private void validateDown(MigrationCreator.Result res) {
|
||||
assertEquals(3, res.getStepsDown().size());
|
||||
assertEquals(2, res.getStepsDown().size());
|
||||
assertEquals(1, res.getStepsDown().stream()
|
||||
.filter(e -> e instanceof DropConstraintOperation o
|
||||
&& o.getTable().equals("AddedEntity")
|
||||
&& o.getName().equals("FK_AddedEntity_AddedEntity_addedField"))
|
||||
.count());
|
||||
assertEquals(1, res.getStepsDown().stream()
|
||||
.filter(e -> e instanceof DropConstraintOperation o
|
||||
&& o.getTable().equals("AddedEntity")
|
||||
&& o.getName().equals("PRIMARY"))
|
||||
.count());
|
||||
assertEquals(1, res.getStepsDown().stream()
|
||||
.filter(e -> e instanceof DropTableOperation o
|
||||
&& o.getTable().equals("AddedEntity"))
|
||||
|
||||
@@ -6,7 +6,6 @@ import jef.model.ModelBuilder;
|
||||
import jef.model.annotations.Clazz;
|
||||
import jef.model.annotations.Id;
|
||||
import jef.model.migration.operation.AddForeignKeyOperation;
|
||||
import jef.model.migration.operation.AddPrimaryKeyOperation;
|
||||
import jef.model.migration.operation.AddTableOperation;
|
||||
import jef.model.migration.operation.DropConstraintOperation;
|
||||
import jef.model.migration.operation.DropTableOperation;
|
||||
@@ -39,12 +38,16 @@ public class MigrationCreatorInitialMigrationTest extends MigrationCreatorTestBa
|
||||
}
|
||||
|
||||
private void validateUp(MigrationCreator.Result res) {
|
||||
assertEquals(5, res.getStepsUp().size());
|
||||
assertEquals(3, res.getStepsUp().size());
|
||||
assertEquals(1, res.getStepsUp().stream()
|
||||
.filter(e -> e instanceof AddTableOperation o
|
||||
&& o.getTable().equals("objects1")
|
||||
&& o.getFields().size() == 1
|
||||
&& o.getFields().get(0).build().getField().equals("i"))
|
||||
&& o.getFields().get(0).build().getField().equals("i")
|
||||
&& o.getPrimaryKey() != null
|
||||
&& o.getPrimaryKey().build().getTable().equals("objects1")
|
||||
&& o.getPrimaryKey().build().getFields().size() == 1
|
||||
&& o.getPrimaryKey().build().getFields().get(0).equals("i"))
|
||||
.count());
|
||||
assertEquals(1, res.getStepsUp().stream()
|
||||
.filter(e -> e instanceof AddTableOperation o
|
||||
@@ -55,19 +58,11 @@ public class MigrationCreatorInitialMigrationTest extends MigrationCreatorTestBa
|
||||
&& o.getFields().stream().filter(f -> f.build().getField().equals("i")).count() == 1
|
||||
&& o.getFields().stream().filter(f -> f.build().getField().equals("l")).count() == 1
|
||||
&& o.getFields().stream().filter(f -> f.build().getField().equals("o")).count() == 1
|
||||
&& o.getFields().stream().filter(f -> f.build().getField().equals("nestedI")).count() == 1)
|
||||
.count());
|
||||
assertEquals(1, res.getStepsUp().stream()
|
||||
.filter(e -> e instanceof AddPrimaryKeyOperation o
|
||||
&& o.getTable().equals("objects1")
|
||||
&& o.getFields().size() == 1
|
||||
&& o.getFields().get(0).equals("i"))
|
||||
.count());
|
||||
assertEquals(1, res.getStepsUp().stream()
|
||||
.filter(e -> e instanceof AddPrimaryKeyOperation o
|
||||
&& o.getTable().equals("TestClass")
|
||||
&& o.getFields().size() == 1
|
||||
&& o.getFields().get(0).equals("i"))
|
||||
&& o.getFields().stream().filter(f -> f.build().getField().equals("nestedI")).count() == 1
|
||||
&& o.getPrimaryKey() != null
|
||||
&& o.getPrimaryKey().build().getTable().equals("TestClass")
|
||||
&& o.getPrimaryKey().build().getFields().size() == 1
|
||||
&& o.getPrimaryKey().build().getFields().get(0).equals("i"))
|
||||
.count());
|
||||
assertEquals(1, res.getStepsUp().stream()
|
||||
.filter(e -> e instanceof AddForeignKeyOperation o
|
||||
@@ -81,22 +76,12 @@ public class MigrationCreatorInitialMigrationTest extends MigrationCreatorTestBa
|
||||
}
|
||||
|
||||
private void validateDown(MigrationCreator.Result res) {
|
||||
assertEquals(5, res.getStepsDown().size());
|
||||
assertEquals(3, res.getStepsDown().size());
|
||||
assertEquals(1, res.getStepsDown().stream()
|
||||
.filter(e -> e instanceof DropConstraintOperation o
|
||||
&& o.getTable().equals("TestClass")
|
||||
&& o.getName().equals("FK_TestClass_objects1_nestedI"))
|
||||
.count());
|
||||
assertEquals(1, res.getStepsDown().stream()
|
||||
.filter(e -> e instanceof DropConstraintOperation o
|
||||
&& o.getTable().equals("TestClass")
|
||||
&& o.getName().equals("PRIMARY"))
|
||||
.count());
|
||||
assertEquals(1, res.getStepsDown().stream()
|
||||
.filter(e -> e instanceof DropConstraintOperation o
|
||||
&& o.getTable().equals("objects1")
|
||||
&& o.getName().equals("PRIMARY"))
|
||||
.count());
|
||||
|
||||
assertEquals(1, res.getStepsDown().stream()
|
||||
.filter(e -> e instanceof DropTableOperation o
|
||||
|
||||
Reference in New Issue
Block a user