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:
+ *
+ * - {@link DDLFlag#SCHEMA}: If set, the catalog's
SCHEMA
+ * specification will be generated.
+ * - {@link DDLFlag#TABLE}: If set, the schema's
TABLE
+ * specification will be generated.
+ * - {@link DDLFlag#PRIMARY_KEY}: If set, a potential
+ *
PRIMARY KEY constraint is specified inline with the table.
+ *
+ * - {@link DDLFlag#UNIQUE}: If set, any potential
UNIQUE
+ * constraint is specified inline with the table.
+ * - {@link DDLFlag#FOREIGN_KEY}: If set, any potential
+ *
FOREIGN KEY constraint is specified after all the tables, as
+ * a separate ALTER TABLE .. ADD CONSTRAINT statement.
+ *
+ */
+ 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());