[#6988] DDLFlag.TABLE does not work correctly on DSLContext.ddl()

This commit is contained in:
lukaseder 2018-01-04 16:10:54 +01:00
parent 3b7f0cecda
commit af5fd2f80e

View File

@ -80,43 +80,58 @@ final class DDL {
}
private final Query createTable(Table<?> table) {
List<Constraint> constraints = new ArrayList<Constraint>();
if (flags.contains(PRIMARY_KEY))
for (UniqueKey<?> key : table.getKeys())
if (key.isPrimary())
constraints.add(constraint(key.getName()).primaryKey(key.getFieldsArray()));
if (flags.contains(UNIQUE))
for (UniqueKey<?> key : table.getKeys())
if (!key.isPrimary())
constraints.add(constraint(key.getName()).unique(key.getFieldsArray()));
if (flags.contains(FOREIGN_KEY))
for (ForeignKey<?, ?> key : table.getReferences())
constraints.add(constraint(key.getName()).foreignKey(key.getFieldsArray()).references(key.getKey().getTable(), key.getKey().getFieldsArray()));
return ctx.createTable(table)
.columns(table.fields())
.constraints(constraints);
.constraints(constraints(table));
}
private final List<Query> alterTableAddConstraints(Table<?> table) {
List<Query> result = new ArrayList<Query>();
for (Constraint constraint : constraints(table))
result.add(ctx.alterTable(table).add(constraint));
return result;
}
private final List<Constraint> constraints(Table<?> table) {
List<Constraint> result = new ArrayList<Constraint>();
result.addAll(primaryKeys(table));
result.addAll(uniqueKeys(table));
result.addAll(foreignKeys(table));
return result;
}
private List<Constraint> primaryKeys(Table<?> table) {
List<Constraint> result = new ArrayList<Constraint>();
if (flags.contains(PRIMARY_KEY))
for (UniqueKey<?> key : table.getKeys())
if (key.isPrimary())
result.add(ctx.alterTable(table).add(constraint(key.getName()).primaryKey(key.getFieldsArray())));
result.add(constraint(key.getName()).primaryKey(key.getFieldsArray()));
return result;
}
private List<Constraint> uniqueKeys(Table<?> table) {
List<Constraint> result = new ArrayList<Constraint>();
if (flags.contains(UNIQUE))
for (UniqueKey<?> key : table.getKeys())
if (!key.isPrimary())
result.add(ctx.alterTable(table).add(constraint(key.getName()).unique(key.getFieldsArray())));
result.add(constraint(key.getName()).unique(key.getFieldsArray()));
return result;
}
private List<Constraint> foreignKeys(Table<?> table) {
List<Constraint> result = new ArrayList<Constraint>();
if (flags.contains(FOREIGN_KEY))
for (ForeignKey<?, ?> key : table.getReferences())
result.add(ctx.alterTable(table).add(constraint(key.getName()).foreignKey(key.getFieldsArray()).references(key.getKey().getTable(), key.getKey().getFieldsArray())));
result.add(constraint(key.getName()).foreignKey(key.getFieldsArray()).references(key.getKey().getTable(), key.getKey().getFieldsArray()));
return result;
}
@ -158,15 +173,8 @@ final class DDL {
for (Table<?> table : schema.getTables()) {
List<Constraint> constraints = new ArrayList<Constraint>();
if (flags.contains(PRIMARY_KEY))
for (UniqueKey<?> key : table.getKeys())
if (key.isPrimary())
constraints.add(constraint(key.getName()).primaryKey(key.getFieldsArray()));
if (flags.contains(UNIQUE))
for (UniqueKey<?> key : table.getKeys())
if (!key.isPrimary())
constraints.add(constraint(key.getName()).unique(key.getFieldsArray()));
constraints.addAll(primaryKeys(table));
constraints.addAll(uniqueKeys(table));
queries.add(
ctx.createTable(table)
@ -174,12 +182,23 @@ final class DDL {
.constraints(constraints)
);
}
if (flags.contains(FOREIGN_KEY))
for (Table<?> table : schema.getTables())
for (ForeignKey<?, ?> key : table.getReferences())
queries.add(ctx.alterTable(table).add(constraint(key.getName()).foreignKey(key.getFieldsArray()).references(key.getKey().getTable(), key.getKey().getFieldsArray())));
}
else {
if (flags.contains(PRIMARY_KEY))
for (Table<?> table : schema.getTables())
for (Constraint constraint : primaryKeys(table))
queries.add(ctx.alterTable(table).add(constraint));
if (flags.contains(UNIQUE))
for (Table<?> table : schema.getTables())
for (Constraint constraint : uniqueKeys(table))
queries.add(ctx.alterTable(table).add(constraint));
}
if (flags.contains(FOREIGN_KEY))
for (Table<?> table : schema.getTables())
for (Constraint constraint : foreignKeys(table))
queries.add(ctx.alterTable(table).add(constraint));
return ctx.queries(queries);
}