diff --git a/jOOQ/src/main/java/org/jooq/impl/DDL.java b/jOOQ/src/main/java/org/jooq/impl/DDL.java index bd3319b069..5b1c93e4b5 100644 --- a/jOOQ/src/main/java/org/jooq/impl/DDL.java +++ b/jOOQ/src/main/java/org/jooq/impl/DDL.java @@ -80,43 +80,58 @@ final class DDL { } private final Query createTable(Table table) { - List constraints = new ArrayList(); - - 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 alterTableAddConstraints(Table table) { List result = new ArrayList(); + for (Constraint constraint : constraints(table)) + result.add(ctx.alterTable(table).add(constraint)); + + return result; + } + + private final List constraints(Table table) { + List result = new ArrayList(); + + result.addAll(primaryKeys(table)); + result.addAll(uniqueKeys(table)); + result.addAll(foreignKeys(table)); + + return result; + } + + private List primaryKeys(Table table) { + List result = new ArrayList(); + 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 uniqueKeys(Table table) { + List result = new ArrayList(); 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 foreignKeys(Table table) { + List result = new ArrayList(); 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 constraints = new ArrayList(); - 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); }