diff --git a/jOOQ/src/main/java/org/jooq/DSLContext.java b/jOOQ/src/main/java/org/jooq/DSLContext.java
index f4cf3b71a8..db3806d53c 100644
--- a/jOOQ/src/main/java/org/jooq/DSLContext.java
+++ b/jOOQ/src/main/java/org/jooq/DSLContext.java
@@ -7201,6 +7201,30 @@ public interface DSLContext extends Scope , AutoCloseable {
@Support({ CUBRID, DERBY, FIREBIRD, H2, HSQLDB, POSTGRES })
CreateSequenceFinalStep createSequence(Sequence> sequence);
+ /**
+ * Create a new DSL CREATE SEQUENCE statement.
+ *
+ * @see DSL#createSequenceIfNotExists(String)
+ */
+ @Support({ FIREBIRD, H2, HSQLDB, POSTGRES })
+ CreateSequenceFinalStep createSequenceIfNotExists(String sequence);
+
+ /**
+ * Create a new DSL CREATE SEQUENCE statement.
+ *
+ * @see DSL#createSequenceIfNotExists(Name)
+ */
+ @Support({ FIREBIRD, H2, HSQLDB, POSTGRES })
+ CreateSequenceFinalStep createSequenceIfNotExists(Name sequence);
+
+ /**
+ * Create a new DSL CREATE SEQUENCE statement.
+ *
+ * @see DSL#createSequenceIfNotExists(String)
+ */
+ @Support({ FIREBIRD, H2, HSQLDB, POSTGRES })
+ CreateSequenceFinalStep createSequenceIfNotExists(Sequence> sequence);
+
/**
* Create a new DSL ALTER SEQUENCE statement.
*
diff --git a/jOOQ/src/main/java/org/jooq/impl/CreateSequenceImpl.java b/jOOQ/src/main/java/org/jooq/impl/CreateSequenceImpl.java
index 4c51253157..df5d1dc354 100644
--- a/jOOQ/src/main/java/org/jooq/impl/CreateSequenceImpl.java
+++ b/jOOQ/src/main/java/org/jooq/impl/CreateSequenceImpl.java
@@ -43,8 +43,14 @@ package org.jooq.impl;
import static java.util.Arrays.asList;
import static org.jooq.Clause.CREATE_SEQUENCE;
import static org.jooq.Clause.CREATE_SEQUENCE_SEQUENCE;
+// ...
+// ...
import static org.jooq.SQLDialect.CUBRID;
+// ...
import static org.jooq.SQLDialect.DERBY;
+import static org.jooq.SQLDialect.FIREBIRD;
+// ...
+// ...
// ...
import org.jooq.Clause;
@@ -68,25 +74,47 @@ class CreateSequenceImpl extends AbstractQuery implements
private static final Clause[] CLAUSES = { CREATE_SEQUENCE };
private final Sequence> sequence;
+ private final boolean ifNotExists;
- CreateSequenceImpl(Configuration configuration, Sequence> sequence) {
+ CreateSequenceImpl(Configuration configuration, Sequence> sequence, boolean ifNotExists) {
super(configuration);
this.sequence = sequence;
+ this.ifNotExists = ifNotExists;
}
// ------------------------------------------------------------------------
// XXX: QueryPart API
// ------------------------------------------------------------------------
+ private final boolean supportsIfNotExists(Context> ctx) {
+ return !asList(DERBY, FIREBIRD).contains(ctx.family());
+ }
+
@Override
public final void accept(Context> ctx) {
+ if (ifNotExists && !supportsIfNotExists(ctx)) {
+ Utils.executeImmediateBegin(ctx, DDLStatementType.CREATE_SEQUENCE);
+ accept0(ctx);
+ Utils.executeImmediateEnd(ctx, DDLStatementType.CREATE_SEQUENCE);
+ }
+ else {
+ accept0(ctx);
+ }
+ }
+
+ private final void accept0(Context> ctx) {
ctx.start(CREATE_SEQUENCE_SEQUENCE)
.keyword("create")
.sql(' ')
.keyword(ctx.family() == CUBRID ? "serial" : "sequence")
- .sql(' ')
- .visit(sequence);
+ .sql(' ');
+
+ if (ifNotExists && supportsIfNotExists(ctx))
+ ctx.keyword("if not exists")
+ .sql(' ');
+
+ ctx.visit(sequence);
// Some databases default to sequences starting with MIN_VALUE
if (asList(DERBY).contains(ctx.family()))
diff --git a/jOOQ/src/main/java/org/jooq/impl/DSL.java b/jOOQ/src/main/java/org/jooq/impl/DSL.java
index c9e7d51658..22ac055149 100644
--- a/jOOQ/src/main/java/org/jooq/impl/DSL.java
+++ b/jOOQ/src/main/java/org/jooq/impl/DSL.java
@@ -5715,6 +5715,36 @@ public class DSL {
return using(new DefaultConfiguration()).createSequence(sequence);
}
+ /**
+ * Create a new DSL CREATE SEQUENCE IF NOT EXISTS statement.
+ *
+ * @see DSLContext#createSequenceIfNotExists(String)
+ */
+ @Support({ FIREBIRD, H2, HSQLDB, POSTGRES })
+ public static CreateSequenceFinalStep createSequenceIfNotExists(String sequence) {
+ return using(new DefaultConfiguration()).createSequenceIfNotExists(sequence);
+ }
+
+ /**
+ * Create a new DSL CREATE SEQUENCE IF NOT EXISTS statement.
+ *
+ * @see DSLContext#createSequenceIfNotExists(Name)
+ */
+ @Support({ FIREBIRD, H2, HSQLDB, POSTGRES })
+ public static CreateSequenceFinalStep createSequenceIfNotExists(Name sequence) {
+ return using(new DefaultConfiguration()).createSequenceIfNotExists(sequence);
+ }
+
+ /**
+ * Create a new DSL CREATE SEQUENCE IF NOT EXISTS statement.
+ *
+ * @see DSLContext#createSequenceIfNotExists(Sequence)
+ */
+ @Support({ FIREBIRD, H2, HSQLDB, POSTGRES })
+ public static CreateSequenceFinalStep createSequenceIfNotExists(Sequence> sequence) {
+ return using(new DefaultConfiguration()).createSequenceIfNotExists(sequence);
+ }
+
/**
* Create a new DSL ALTER SEQUENCE statement.
*
diff --git a/jOOQ/src/main/java/org/jooq/impl/DefaultDSLContext.java b/jOOQ/src/main/java/org/jooq/impl/DefaultDSLContext.java
index f79391d280..74ad054843 100644
--- a/jOOQ/src/main/java/org/jooq/impl/DefaultDSLContext.java
+++ b/jOOQ/src/main/java/org/jooq/impl/DefaultDSLContext.java
@@ -2297,7 +2297,22 @@ public class DefaultDSLContext extends AbstractScope implements DSLContext, Seri
@Override
public CreateSequenceFinalStep createSequence(Sequence> sequence) {
- return new CreateSequenceImpl(configuration(), sequence);
+ return new CreateSequenceImpl(configuration(), sequence, false);
+ }
+
+ @Override
+ public CreateSequenceFinalStep createSequenceIfNotExists(String sequence) {
+ return createSequenceIfNotExists(name(sequence));
+ }
+
+ @Override
+ public CreateSequenceFinalStep createSequenceIfNotExists(Name sequence) {
+ return createSequenceIfNotExists(sequence(sequence));
+ }
+
+ @Override
+ public CreateSequenceFinalStep createSequenceIfNotExists(Sequence> sequence) {
+ return new CreateSequenceImpl(configuration(), sequence, true);
}
@Override
diff --git a/jOOQ/src/main/java/org/jooq/impl/DefaultRenderContext.java b/jOOQ/src/main/java/org/jooq/impl/DefaultRenderContext.java
index dd67ac216b..5c5d838265 100644
--- a/jOOQ/src/main/java/org/jooq/impl/DefaultRenderContext.java
+++ b/jOOQ/src/main/java/org/jooq/impl/DefaultRenderContext.java
@@ -118,9 +118,13 @@ class DefaultRenderContext extends AbstractContext implements Ren
qualifyCatalog(context.qualifyCatalog());
qualifySchema(context.qualifySchema());
castMode(context.castMode());
- declareFields(context.declareFields());
- declareTables(context.declareTables());
data().putAll(context.data());
+
+ declareCTE = context.declareCTE();
+ declareWindows = context.declareWindows();
+ declareFields = context.declareFields();
+ declareTables = context.declareTables();
+ declareAliases = context.declareAliases();
}
// ------------------------------------------------------------------------