From 325aaf7d3ff01d756720090ae1627ee65c1680d9 Mon Sep 17 00:00:00 2001 From: lukaseder Date: Mon, 25 Jul 2016 16:26:47 +0200 Subject: [PATCH] [#5461] Add DSLContext.ddl(Catalog) --- jOOQ/src/main/java/org/jooq/DDLFlag.java | 5 ++++ jOOQ/src/main/java/org/jooq/DSLContext.java | 28 +++++++++++++++++++ jOOQ/src/main/java/org/jooq/impl/DDL.java | 15 ++++++++++ .../java/org/jooq/impl/DefaultDSLContext.java | 11 ++++++++ 4 files changed, 59 insertions(+) diff --git a/jOOQ/src/main/java/org/jooq/DDLFlag.java b/jOOQ/src/main/java/org/jooq/DDLFlag.java index 822c79fbf1..70999ed4e4 100644 --- a/jOOQ/src/main/java/org/jooq/DDLFlag.java +++ b/jOOQ/src/main/java/org/jooq/DDLFlag.java @@ -45,6 +45,11 @@ package org.jooq; */ public enum DDLFlag { + /** + * Whether CREATE SCHEMA statements should be generated. + */ + SCHEMA, + /** * Whether CREATE TABLE statements should be generated. */ diff --git a/jOOQ/src/main/java/org/jooq/DSLContext.java b/jOOQ/src/main/java/org/jooq/DSLContext.java index 7b1d4ab30f..4eb56b83fb 100644 --- a/jOOQ/src/main/java/org/jooq/DSLContext.java +++ b/jOOQ/src/main/java/org/jooq/DSLContext.java @@ -6916,6 +6916,34 @@ public interface DSLContext extends Scope , AutoCloseable { // XXX DDL Statements from existing meta data // ------------------------------------------------------------------------- + /** + * Generate the complete creation script for the entire catalog. + * + * @see #ddl(Catalog, DDLFlag...) + */ + Queries ddl(Catalog catalog); + + /** + * Generate a partial creation script for the entire catalog. + *

+ * The following {@link DDLFlag} can be set: + *

+ */ + Queries ddl(Catalog schema, DDLFlag... flags); + /** * Generate the complete creation script for the entire schema. * diff --git a/jOOQ/src/main/java/org/jooq/impl/DDL.java b/jOOQ/src/main/java/org/jooq/impl/DDL.java index ac93a9fa0c..2a4c7e0920 100644 --- a/jOOQ/src/main/java/org/jooq/impl/DDL.java +++ b/jOOQ/src/main/java/org/jooq/impl/DDL.java @@ -42,14 +42,17 @@ package org.jooq.impl; import static org.jooq.DDLFlag.FOREIGN_KEY; import static org.jooq.DDLFlag.PRIMARY_KEY; +import static org.jooq.DDLFlag.SCHEMA; import static org.jooq.DDLFlag.TABLE; import static org.jooq.DDLFlag.UNIQUE; import static org.jooq.impl.DSL.constraint; import java.util.ArrayList; +import java.util.Arrays; import java.util.EnumSet; import java.util.List; +import org.jooq.Catalog; import org.jooq.Constraint; import org.jooq.DDLFlag; import org.jooq.DSLContext; @@ -105,6 +108,9 @@ final class DDL { final Queries queries(Schema schema) { List queries = new ArrayList(); + if (flags.contains(SCHEMA)) + queries.add(ctx.createSchema(schema.getName())); + if (flags.contains(TABLE)) { for (Table table : schema.getTables()) { List constraints = new ArrayList(); @@ -134,4 +140,13 @@ final class DDL { return DSL.queries(queries); } + + final Queries queries(Catalog catalog) { + List queries = new ArrayList(); + + for (Schema schema : catalog.getSchemas()) + queries.addAll(Arrays.asList(queries(schema).queries())); + + return DSL.queries(queries); + } } diff --git a/jOOQ/src/main/java/org/jooq/impl/DefaultDSLContext.java b/jOOQ/src/main/java/org/jooq/impl/DefaultDSLContext.java index 9f24505bba..7562bff9bb 100644 --- a/jOOQ/src/main/java/org/jooq/impl/DefaultDSLContext.java +++ b/jOOQ/src/main/java/org/jooq/impl/DefaultDSLContext.java @@ -92,6 +92,7 @@ import org.jooq.Attachable; import org.jooq.Batch; import org.jooq.BatchBindStep; import org.jooq.BindContext; +import org.jooq.Catalog; import org.jooq.CommonTableExpression; import org.jooq.Condition; import org.jooq.Configuration; @@ -2406,6 +2407,16 @@ public class DefaultDSLContext extends AbstractScope implements DSLContext, Seri // XXX DDL Statements from existing meta data // ------------------------------------------------------------------------- + @Override + public Queries ddl(Catalog catalog) { + return ddl(catalog, DDLFlag.values()); + } + + @Override + public Queries ddl(Catalog schema, DDLFlag... flags) { + return new DDL(this, flags).queries(schema); + } + @Override public Queries ddl(Schema schema) { return ddl(schema, DDLFlag.values());