From 733050cbcffbac2e2a8a6974b3db3bd5c32d2d59 Mon Sep 17 00:00:00 2001 From: Lukas Eder Date: Thu, 3 Oct 2019 16:39:05 +0200 Subject: [PATCH] [jOOQ/jOOQ#9327] Add DDLFlag.SEQUENCE to allow for exporting CREATE SEQUENCE statements from DSLContext.ddl() --- .../java/org/jooq/DDLExportConfiguration.java | 30 ++++++++++++++++--- jOOQ/src/main/java/org/jooq/DDLFlag.java | 5 ++++ jOOQ/src/main/java/org/jooq/impl/DDL.java | 13 ++++++++ 3 files changed, 44 insertions(+), 4 deletions(-) diff --git a/jOOQ/src/main/java/org/jooq/DDLExportConfiguration.java b/jOOQ/src/main/java/org/jooq/DDLExportConfiguration.java index a209947abe..9ea47685e1 100644 --- a/jOOQ/src/main/java/org/jooq/DDLExportConfiguration.java +++ b/jOOQ/src/main/java/org/jooq/DDLExportConfiguration.java @@ -53,6 +53,7 @@ public final class DDLExportConfiguration { private final boolean createSchemaIfNotExists; private final boolean createTableIfNotExists; + private final boolean createSequenceIfNotExists; private final EnumSet flags; /** @@ -62,6 +63,7 @@ public final class DDLExportConfiguration { this( EnumSet.allOf(DDLFlag.class), false, + false, false ); } @@ -69,11 +71,13 @@ public final class DDLExportConfiguration { private DDLExportConfiguration( Collection flags, boolean createSchemaIfNotExists, - boolean createTableIfNotExists + boolean createTableIfNotExists, + boolean createSequenceIfNotExists ) { this.flags = EnumSet.copyOf(flags); this.createSchemaIfNotExists = createSchemaIfNotExists; this.createTableIfNotExists = createTableIfNotExists; + this.createSequenceIfNotExists = createSequenceIfNotExists; } /** @@ -94,7 +98,7 @@ public final class DDLExportConfiguration { * The {@link DDLFlag} that are enabled on this configuration. */ public final DDLExportConfiguration flags(Collection newFlags) { - return new DDLExportConfiguration(newFlags, createSchemaIfNotExists, createTableIfNotExists); + return new DDLExportConfiguration(newFlags, createSchemaIfNotExists, createTableIfNotExists, createSequenceIfNotExists); } /** @@ -112,7 +116,7 @@ public final class DDLExportConfiguration { * Whether to generate CREATE SCHEMA IF NOT EXISTS statements. */ public final DDLExportConfiguration createSchemaIfNotExists(boolean newCreateSchemaIfNotExists) { - return new DDLExportConfiguration(flags, newCreateSchemaIfNotExists, createTableIfNotExists); + return new DDLExportConfiguration(flags, newCreateSchemaIfNotExists, createTableIfNotExists, createSequenceIfNotExists); } /** @@ -130,6 +134,24 @@ public final class DDLExportConfiguration { * Whether to generate CREATE TABLE IF NOT EXISTS statements. */ public final DDLExportConfiguration createTableIfNotExists(boolean newCreateTableIfNotExists) { - return new DDLExportConfiguration(flags, createSchemaIfNotExists, newCreateTableIfNotExists); + return new DDLExportConfiguration(flags, createSchemaIfNotExists, newCreateTableIfNotExists, createSequenceIfNotExists); + } + + /** + * Whether to generate CREATE SEQUENCE IF NOT EXISTS statements. + *

+ * Not all RDBMS support this flag. Check + * {@link DSLContext#createSequenceIfNotExists(Sequence)} to see if your + * {@link SQLDialect} supports the clause. + */ + public final boolean createSequenceIfNotExists() { + return createSequenceIfNotExists; + } + + /** + * Whether to generate CREATE SEQUENCE IF NOT EXISTS statements. + */ + public final DDLExportConfiguration createSequenceIfNotExists(boolean newCreateSequenceIfNotExists) { + return new DDLExportConfiguration(flags, createSchemaIfNotExists, createTableIfNotExists, newCreateSequenceIfNotExists); } } diff --git a/jOOQ/src/main/java/org/jooq/DDLFlag.java b/jOOQ/src/main/java/org/jooq/DDLFlag.java index 12cbb20baf..e3359a516b 100644 --- a/jOOQ/src/main/java/org/jooq/DDLFlag.java +++ b/jOOQ/src/main/java/org/jooq/DDLFlag.java @@ -67,6 +67,11 @@ public enum DDLFlag { */ FOREIGN_KEY, + /** + * Whether SEQUENCE statements should be generated. + */ + SEQUENCE, + /** * Whether COMMENT statements should be generated. */ diff --git a/jOOQ/src/main/java/org/jooq/impl/DDL.java b/jOOQ/src/main/java/org/jooq/impl/DDL.java index f1087f4c5f..555080c9d9 100644 --- a/jOOQ/src/main/java/org/jooq/impl/DDL.java +++ b/jOOQ/src/main/java/org/jooq/impl/DDL.java @@ -41,6 +41,7 @@ import static org.jooq.DDLFlag.COMMENT; 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.SEQUENCE; import static org.jooq.DDLFlag.TABLE; import static org.jooq.DDLFlag.UNIQUE; import static org.jooq.impl.DSL.constraint; @@ -58,6 +59,7 @@ import org.jooq.ForeignKey; import org.jooq.Queries; import org.jooq.Query; import org.jooq.Schema; +import org.jooq.Sequence; import org.jooq.Table; import org.jooq.UniqueKey; import org.jooq.tools.StringUtils; @@ -83,6 +85,12 @@ final class DDL { .constraints(constraints); } + private final Query createSequence(Sequence sequence) { + return configuration.createSequenceIfNotExists() + ? ctx.createSequenceIfNotExists(sequence) + : ctx.createSequence(sequence); + } + private final Query createTable(Table table) { return createTable(table, constraints(table)); } @@ -216,6 +224,11 @@ final class DDL { for (Constraint constraint : foreignKeys(table)) queries.add(ctx.alterTable(table).add(constraint)); + if (configuration.flags().contains(SEQUENCE)) + for (Schema schema : schemas) + for (Sequence sequence : schema.getSequences()) + queries.add(createSequence(sequence)); + if (configuration.flags().contains(COMMENT)) for (Schema schema : schemas) for (Table table : schema.getTables())